summaryrefslogtreecommitdiff
path: root/linux/drivers/media
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@infradead.org>2008-04-17 18:38:38 -0300
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-04-17 18:38:38 -0300
commita4c6b3f9f6156e89d7dd1ec89395aecaa95c44ef (patch)
tree43c0511310fb78f033b1d4075f50b2056026e768 /linux/drivers/media
parentf4d4e4a1e89e3364277050ebd6092a87a101f130 (diff)
downloadmediapointer-dvb-s2-a4c6b3f9f6156e89d7dd1ec89395aecaa95c44ef.tar.gz
mediapointer-dvb-s2-a4c6b3f9f6156e89d7dd1ec89395aecaa95c44ef.tar.bz2
em28xx-dvb: videobuf callbacks are waiting for em28xx_fh
From: Mauro Carvalho Chehab <mchehab@infradead.org> Thanks to Devin Heitmueller <devin.heitmueller@gmail.com> for pointing this issue. Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'linux/drivers/media')
-rw-r--r--linux/drivers/media/video/em28xx/em28xx-dvb.c8
-rw-r--r--linux/drivers/media/video/em28xx/em28xx.h23
2 files changed, 20 insertions, 11 deletions
diff --git a/linux/drivers/media/video/em28xx/em28xx-dvb.c b/linux/drivers/media/video/em28xx/em28xx-dvb.c
index af76ebbb1..33e83ea06 100644
--- a/linux/drivers/media/video/em28xx/em28xx-dvb.c
+++ b/linux/drivers/media/video/em28xx/em28xx-dvb.c
@@ -46,6 +46,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;
@@ -110,11 +111,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) {
diff --git a/linux/drivers/media/video/em28xx/em28xx.h b/linux/drivers/media/video/em28xx/em28xx.h
index 046fe249c..67565a481 100644
--- a/linux/drivers/media/video/em28xx/em28xx.h
+++ b/linux/drivers/media/video/em28xx/em28xx.h
@@ -315,6 +315,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 */
@@ -416,19 +428,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;