A second easycap driver implementation

Ezequiel García elezegarcia at gmail.com
Mon Mar 19 22:05:27 UTC 2012


Hi Mauro,

On 3/7/12, Mauro Carvalho Chehab <mchehab at redhat.com> wrote:
>
> The usage of saa711x is simple. All you need to do is to implement
> an I2C bus at your easycap driver, load the module, and then, redirect
> any demod ioctl call to the I2C bus, like:
>
> static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
> {
> 	struct em28xx_fh   *fh  = priv;
> 	struct em28xx      *dev = fh->dev;
> 	int                rc;
>
> 	rc = check_dev(dev);
> 	if (rc < 0)
> 		return rc;
>
> 	v4l2_device_call_all(&dev->v4l2_dev, 0, video, querystd, norm);
>
> 	return 0;
> }
>
>
> An I2C device has an address that needs to be send through the I2C
> bus.
>
> The saa711x devices use one of the I2C addresses below:
>
> static unsigned short saa711x_addrs[] = {
> 	0x4a >> 1, 0x48 >> 1,   /* SAA7111, SAA7111A and SAA7113 */
> 	0x42 >> 1, 0x40 >> 1,   /* SAA7114, SAA7115 and SAA7118 */
> 	I2C_CLIENT_END };
>

I made my easycap driver use saa7115 driver to detect its saa7113 chip.
It wasn't so hard after some head scratching.

The problem is now modprobe is taking too long, mainly because saa7115 does
some probing.
I was thinking (since we already discussed deferring stuff to a workqueue):

Would it be problematic (in any fashion) to do add the i2c sub device

  v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
                        "saa7115_auto", 0, saa711x_addrs);

in a workqueue, (in the same way modules are loaded in workqueues)?

I think not, since we won't call i2c directly, but rather through
v4l2_device_call_all(), right?

Thanks,
Ezequiel.



More information about the devel mailing list