lists.zerezo.com
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: What todo with cams which have 2 drivers?
- Date: Tue, 26 Aug 2008 23:57:05 +0200
- From: Hans Verkuil <hverkuil@xxxxxxxxx>
- Subject: Re: What todo with cams which have 2 drivers?
On Tuesday 26 August 2008 23:26:41 Hans de Goede wrote:
> Hans Verkuil wrote:
> >
> > In general I am getting worried by the lack of a common standard to
> > interface to sensor and controller drivers. I'm no expert on webcams, so
> > correct me if I'm wrong, but it seems to me that the correct design would
> > be to have a generic API to these devices that can be used by the various
> > USB or platform drivers.
> >
> > But for e.g. the mt9* sensors we have three that use the soc_camera
> > interface, one using the sn9c102 interface and I know of two more that
> > are not yet in v4l-dvb but that will use the v4l2-int-device.h interface.
> > It's a mess in my opinion.
> >
>
> It is indeed, in my experience so far the easiest solution is to see the bridge
> and sensor (and this the whole cam) as one device. 80% of the per sensor code
> in a bridge driver is setting up the bridge to talk to the cam (there are
> various connections between the 2 possible and most bridges support multiple
> connection types) and 80% of the sensor code is configuring the sensor for a
> specific bridge (same story). The remaining 20% of sensor code is rather boring
> (poking registers to set things like conteast and brightness) and since the
> sensor needs to be programmed to talk to the bridge in a bridge specific way
> there is little to gain from having seperate sensor drivers as those still need
> to be patched for a new bridge type before the sensor will work with a certain
> bridge.
>
> If you for example look at the attempting to be generic ovchipcam drivers in
> the current kernel tree, which contain code for the ov6xxx and ov7xxx sensors,
> then the attach routine contains the following:
>
> switch (adap->id) {
> case I2C_HW_SMBUS_OV511:
> case I2C_HW_SMBUS_OV518:
> case I2C_HW_SMBUS_W9968CF:
> PDEBUG(1, "Adapter ID 0x%06x accepted", adap->id);
> break;
> default:
> PDEBUG(1, "Adapter ID 0x%06x rejected", adap->id);
> return -ENODEV;
> }
>
> IOW this generic sensor code will only work with 3 know bridges and some of the
> code itself is bridge specific too, for example in ov6x30.c :
>
> if (win->format == VIDEO_PALETTE_GREY) {
> if (c->adapter->id == I2C_HW_SMBUS_OV518) {
> /* Do nothing - we're already in 8-bit mode */
> } else {
> ov_write_mask(c, 0x13, 0x20, 0x20);
> }
> } else {
> /* The OV518 needs special treatment. Although both the OV518
> * and the OV6630 support a 16-bit video bus, only the 8 bit Y
> * bus is actually used. The UV bus is tied to ground.
> * Therefore, the OV6630 needs to be in 8-bit multiplexed
> * output mode */
>
> if (c->adapter->id == I2C_HW_SMBUS_OV518) {
> /* Do nothing - we want to stay in 8-bit mode */
> /* Warning: Messing with reg 0x13 breaks OV518 color */
> } else {
> ov_write_mask(c, 0x13, 0x00, 0x20);
> }
> }
>
> I've done a comparison of code size between trying to use generic sensor code
> (which isn't that generic at all see above) and just putting sensor specific
> code into each bridge driver separately, see:
> http://marc.info/?l=linux-video&m=121645882518114&w=2
>
> So my conclusion (for now) is that trying to separate the sensor code out of
> the bridge drivers is not worth it. I plan to rewrite the ov511/ov518 driver
> for v4l2 using gspca (so that libv4l can be used to decode the special JPEG-ish
> format making these cams actually work). For this rewrite I will probably
> remove the ovcamchip stuff and just put sensor init and ctrl code in the bridge
> driver, probably resulting in a smaller driver.
Interesting results. And I think it makes sense for these sensor devices. It
definitely does not make sense elsewhere (e.g. the video/audio encoder and
decoder i2c devices are very much reusable in other drivers).
I think it is a reasonable approach. I'm getting very annoyed at all the
attempts at creating generic APIs for these devices, which is probably an
indication that this approach might not be a good fit here.
> > I think it would be interesting to discuss this further with you in Portland.
>
> Yes it would, I think we need to make an agenda what we want to discuss (both
> in the miniconf and outside of that).
Mauro intends to organize discussion sessions in addition to the miniconf itself.
There will be no lack of topics to talk about.
Regards,
Hans
--
video4linux-list mailing list
Unsubscribe mailto:video4linux-list-request@xxxxxxxxxx?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list