V4L/DVB (7599): em28xx-dvb: videobuf callbacks are waiting for em28xx_fh
authorMauro Carvalho Chehab <mchehab@infradead.org>
Fri, 18 Apr 2008 00:38:38 +0000 (21:38 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Thu, 24 Apr 2008 17:09:41 +0000 (14:09 -0300)
Thanks to Devin Heitmueller <devin.heitmueller@gmail.com> for pointing
this issue.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/em28xx/em28xx-dvb.c
drivers/media/video/em28xx/em28xx.h

index cbc155d..d3d5297 100644 (file)
@@ -45,6 +45,7 @@ buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
        struct em28xx_fh *fh = vq->priv_data;
        struct em28xx        *dev = fh->dev;
 
+       /* FIXME: The better would be to allocate a smaller buffer */
        *size = 16 * fh->dev->width * fh->dev->height >> 3;
        if (0 == *count)
                *count = EM28XX_DEF_BUF;
@@ -109,11 +110,16 @@ static int dvb_init(struct em28xx *dev)
 
        dev->qops->buf_setup = buffer_setup;
 
+       /* FIXME: Do we need more initialization here? */
+       memset(&dev->dvb_fh, 0, sizeof (dev->dvb_fh));
+       dev->dvb_fh.dev = dev;
+       dev->dvb_fh.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+
        videobuf_queue_vmalloc_init(&dev->dvb.dvbq, dev->qops,
                        &dev->udev->dev, &dev->slock,
                        V4L2_BUF_TYPE_VIDEO_CAPTURE,
                        V4L2_FIELD_ALTERNATE,
-                       sizeof(struct em28xx_buffer), dev);
+                       sizeof(struct em28xx_buffer), &dev->dvb_fh);
 
        /* init frontend */
        switch (dev->model) {
index 10f6465..3786dd8 100644 (file)
@@ -304,6 +304,18 @@ struct em28xx_audio {
        spinlock_t slock;
 };
 
+struct em28xx;
+
+struct em28xx_fh {
+       struct em28xx *dev;
+       unsigned int  stream_on:1;      /* Locks streams */
+       int           radio;
+
+       struct videobuf_queue        vb_vidq;
+
+       enum v4l2_buf_type           type;
+};
+
 /* main device struct */
 struct em28xx {
        /* generic device properties */
@@ -401,19 +413,10 @@ struct em28xx {
 #if defined(CONFIG_VIDEO_EM28XX_DVB) || defined(CONFIG_VIDEO_EM28XX_DVB_MODULE)
        struct videobuf_dvb        dvb;
        struct videobuf_queue_ops  *qops;
+       struct em28xx_fh           dvb_fh;
 #endif
 };
 
-struct em28xx_fh {
-       struct em28xx *dev;
-       unsigned int  stream_on:1;      /* Locks streams */
-       int           radio;
-
-       struct videobuf_queue        vb_vidq;
-
-       enum v4l2_buf_type           type;
-};
-
 struct em28xx_ops {
        struct list_head next;
        char *name;