History

[media] saa7134: move the queue data from saa7134_fh to saa7134_dev

These fields are global, not per-filehandle.

Hans Verkuil committed 12 years ago

Commit 9db0fb11 parent dc18d1b4 files · +63 −64Browse files

Unified · Split

4 files
  1. drivers/media/pci/saa7134/saa7134-core.c +1 −0
  2. drivers/media/pci/saa7134/saa7134-vbi.c +4 −7
  3. drivers/media/pci/saa7134/saa7134-video.c +53 −49
  4. drivers/media/pci/saa7134/saa7134.h +5 −8
drivers/media/pci/saa7134/saa7134-core.c+1−0
@@ -751,6 +751,7 @@ static int saa7134_hwfini(struct saa7134_dev *dev) · 750 unmodified lines
751751 saa7134_input_fini(dev);
752752 saa7134_vbi_fini(dev);
753753 saa7134_tvaudio_fini(dev);
754+ saa7134_video_fini(dev);
754755 return 0;
755756 }
756757
drivers/media/pci/saa7134/saa7134-vbi.c+4−7
@@ -117,8 +117,7 @@ static int buffer_prepare(struct videobuf_queue *q, · 116 unmodified lines
117117 struct videobuf_buffer *vb,
118118 enum v4l2_field field)
119119 {
120− struct saa7134_fh *fh = q->priv_data;
121− struct saa7134_dev *dev = fh->dev;
120+ struct saa7134_dev *dev = q->priv_data;
122121 struct saa7134_buf *buf = container_of(vb,struct saa7134_buf,vb);
123122 struct saa7134_tvnorm *norm = dev->tvnorm;
124123 unsigned int lines, llength, size;
@@ -141,7 +140,7 @@ static int buffer_prepare(struct videobuf_queue *q, · 16 unmodified lines
141140 buf->vb.width = llength;
142141 buf->vb.height = lines;
143142 buf->vb.size = size;
144− buf->pt = &fh->pt_vbi;
143+ buf->pt = &dev->pt_vbi;
145144
146145 err = videobuf_iolock(q,&buf->vb,NULL);
147146 if (err)
@@ -166,8 +165,7 @@ static int buffer_prepare(struct videobuf_queue *q, · 18 unmodified lines
166165 static int
167166 buffer_setup(struct videobuf_queue *q, unsigned int *count, unsigned int *size)
168167 {
169− struct saa7134_fh *fh = q->priv_data;
170− struct saa7134_dev *dev = fh->dev;
168+ struct saa7134_dev *dev = q->priv_data;
171169 int llength,lines;
172170
173171 lines = dev->tvnorm->vbi_v_stop_0 - dev->tvnorm->vbi_v_start_0 +1;
@@ -181,8 +179,7 @@ buffer_setup(struct videobuf_queue *q, unsigned int *count, unsigned int *size) · 7 unmodified lines
181179
182180 static void buffer_queue(struct videobuf_queue *q, struct videobuf_buffer *vb)
183181 {
184− struct saa7134_fh *fh = q->priv_data;
185− struct saa7134_dev *dev = fh->dev;
182+ struct saa7134_dev *dev = q->priv_data;
186183 struct saa7134_buf *buf = container_of(vb,struct saa7134_buf,vb);
187184
188185 saa7134_buffer_queue(dev,&dev->vbi_q,buf);
drivers/media/pci/saa7134/saa7134-video.c+53−49
@@ -1018,8 +1018,7 @@ static int buffer_prepare(struct videobuf_queue *q, · 1017 unmodified lines
10181018 struct videobuf_buffer *vb,
10191019 enum v4l2_field field)
10201020 {
1021− struct saa7134_fh *fh = q->priv_data;
1022− struct saa7134_dev *dev = fh->dev;
1021+ struct saa7134_dev *dev = q->priv_data;
10231022 struct saa7134_buf *buf = container_of(vb,struct saa7134_buf,vb);
10241023 unsigned int size;
10251024 int err;
@@ -1057,7 +1056,7 @@ static int buffer_prepare(struct videobuf_queue *q, · 31 unmodified lines
10571056 buf->vb.size = size;
10581057 buf->vb.field = field;
10591058 buf->fmt = dev->fmt;
1060− buf->pt = &fh->pt_cap;
1059+ buf->pt = &dev->pt_cap;
10611060 dev->video_q.curr = NULL;
10621061
10631062 err = videobuf_iolock(q,&buf->vb,&dev->ovbuf);
@@ -1082,8 +1081,7 @@ static int buffer_prepare(struct videobuf_queue *q, · 18 unmodified lines
10821081 static int
10831082 buffer_setup(struct videobuf_queue *q, unsigned int *count, unsigned int *size)
10841083 {
1085− struct saa7134_fh *fh = q->priv_data;
1086− struct saa7134_dev *dev = fh->dev;
1084+ struct saa7134_dev *dev = q->priv_data;
10871085
10881086 *size = dev->fmt->depth * dev->width * dev->height >> 3;
10891087 if (0 == *count)
@@ -1094,10 +1092,10 @@ buffer_setup(struct videobuf_queue *q, unsigned int *count, unsigned int *size) · 4 unmodified lines
10941092
10951093 static void buffer_queue(struct videobuf_queue *q, struct videobuf_buffer *vb)
10961094 {
1097− struct saa7134_fh *fh = q->priv_data;
1095+ struct saa7134_dev *dev = q->priv_data;
10981096 struct saa7134_buf *buf = container_of(vb,struct saa7134_buf,vb);
10991097
1100− saa7134_buffer_queue(fh->dev,&fh->dev->video_q,buf);
1098+ saa7134_buffer_queue(dev, &dev->video_q, buf);
11011099 }
11021100
11031101 static void buffer_release(struct videobuf_queue *q, struct videobuf_buffer *vb)
@@ -1293,14 +1291,15 @@ static struct videobuf_queue *saa7134_queue(struct file *file) · 189 unmodified lines
12931291 {
12941292 struct video_device *vdev = video_devdata(file);
12951293 struct saa7134_fh *fh = file->private_data;
1294+ struct saa7134_dev *dev = fh->dev;
12961295 struct videobuf_queue *q = NULL;
12971296
12981297 switch (vdev->vfl_type) {
12991298 case VFL_TYPE_GRABBER:
1300− q = &fh->cap;
1299+ q = &dev->cap;
13011300 break;
13021301 case VFL_TYPE_VBI:
1303− q = &fh->vbi;
1302+ q = &dev->vbi;
13041303 break;
13051304 default:
13061305 BUG();
@@ -1337,21 +1336,6 @@ static int video_open(struct file *file) · 30 unmodified lines
13371336 file->private_data = fh;
13381337 fh->dev = dev;
13391338
1340− videobuf_queue_sg_init(&fh->cap, &video_qops,
1341− &dev->pci->dev, &dev->slock,
1342− V4L2_BUF_TYPE_VIDEO_CAPTURE,
1343− V4L2_FIELD_INTERLACED,
1344− sizeof(struct saa7134_buf),
1345− fh, NULL);
1346− videobuf_queue_sg_init(&fh->vbi, &saa7134_vbi_qops,
1347− &dev->pci->dev, &dev->slock,
1348− V4L2_BUF_TYPE_VBI_CAPTURE,
1349− V4L2_FIELD_SEQ_TB,
1350− sizeof(struct saa7134_buf),
1351− fh, NULL);
1352− saa7134_pgtable_alloc(dev->pci,&fh->pt_cap);
1353− saa7134_pgtable_alloc(dev->pci,&fh->pt_vbi);
1354−
13551339 if (vdev->vfl_type == VFL_TYPE_RADIO) {
13561340 /* switch to radio mode */
13571341 saa7134_tvaudio_setinput(dev,&card(dev).radio);
@@ -1396,28 +1380,30 @@ video_poll(struct file *file, struct poll_table_struct *wait) · 38 unmodified lines
13961380 {
13971381 struct video_device *vdev = video_devdata(file);
13981382 struct saa7134_fh *fh = file->private_data;
1383+ struct saa7134_dev *dev = fh->dev;
13991384 struct videobuf_buffer *buf = NULL;
14001385 unsigned int rc = 0;
14011386
14021387 if (vdev->vfl_type == VFL_TYPE_VBI)
1403− return videobuf_poll_stream(file, &fh->vbi, wait);
1388+ return videobuf_poll_stream(file, &dev->vbi, wait);
14041389
14051390 if (res_check(fh,RESOURCE_VIDEO)) {
1406− mutex_lock(&fh->cap.vb_lock);
1407− if (!list_empty(&fh->cap.stream))
1408− buf = list_entry(fh->cap.stream.next, struct videobuf_buffer, stream);
1391+ mutex_lock(&dev->cap.vb_lock);
1392+ if (!list_empty(&dev->cap.stream))
1393+ buf = list_entry(dev->cap.stream.next, struct videobuf_buffer, stream);
14091394 } else {
1410− mutex_lock(&fh->cap.vb_lock);
1411− if (UNSET == fh->cap.read_off) {
1395+ mutex_lock(&dev->cap.vb_lock);
1396+ if (UNSET == dev->cap.read_off) {
14121397 /* need to capture a new frame */
14131398 if (res_locked(fh->dev,RESOURCE_VIDEO))
14141399 goto err;
1415− if (0 != fh->cap.ops->buf_prepare(&fh->cap,fh->cap.read_buf,fh->cap.field))
1400+ if (0 != dev->cap.ops->buf_prepare(&dev->cap,
1401+ dev->cap.read_buf, dev->cap.field))
14161402 goto err;
1417− fh->cap.ops->buf_queue(&fh->cap,fh->cap.read_buf);
1418− fh->cap.read_off = 0;
1403+ dev->cap.ops->buf_queue(&dev->cap, dev->cap.read_buf);
1404+ dev->cap.read_off = 0;
14191405 }
1420− buf = fh->cap.read_buf;
1406+ buf = dev->cap.read_buf;
14211407 }
14221408
14231409 if (!buf)
@@ -1427,11 +1413,11 @@ video_poll(struct file *file, struct poll_table_struct *wait) · 3 unmodified lines
14271413 if (buf->state == VIDEOBUF_DONE ||
14281414 buf->state == VIDEOBUF_ERROR)
14291415 rc = POLLIN|POLLRDNORM;
1430− mutex_unlock(&fh->cap.vb_lock);
1416+ mutex_unlock(&dev->cap.vb_lock);
14311417 return rc;
14321418
14331419 err:
1434− mutex_unlock(&fh->cap.vb_lock);
1420+ mutex_unlock(&dev->cap.vb_lock);
14351421 return POLLERR;
14361422 }
14371423
@@ -1456,18 +1442,20 @@ static int video_release(struct file *file) · 18 unmodified lines
14561442 /* stop video capture */
14571443 if (res_check(fh, RESOURCE_VIDEO)) {
14581444 pm_qos_remove_request(&dev->qos_request);
1459− videobuf_streamoff(&fh->cap);
1445+ videobuf_streamoff(&dev->cap);
14601446 res_free(dev,fh,RESOURCE_VIDEO);
1447+ videobuf_mmap_free(&dev->cap);
14611448 }
1462− if (fh->cap.read_buf) {
1463− buffer_release(&fh->cap,fh->cap.read_buf);
1464− kfree(fh->cap.read_buf);
1449+ if (dev->cap.read_buf) {
1450+ buffer_release(&dev->cap, dev->cap.read_buf);
1451+ kfree(dev->cap.read_buf);
14651452 }
14661453
14671454 /* stop vbi capture */
14681455 if (res_check(fh, RESOURCE_VBI)) {
1469− videobuf_stop(&fh->vbi);
1456+ videobuf_stop(&dev->vbi);
14701457 res_free(dev,fh,RESOURCE_VBI);
1458+ videobuf_mmap_free(&dev->vbi);
14711459 }
14721460
14731461 /* ts-capture will not work in planar mode, so turn it off Hac: 04.05*/
@@ -1480,12 +1468,6 @@ static int video_release(struct file *file) · 6 unmodified lines
14801468 if (vdev->vfl_type == VFL_TYPE_RADIO)
14811469 saa_call_all(dev, core, ioctl, SAA6588_CMD_CLOSE, &cmd);
14821470
1483− /* free stuff */
1484− videobuf_mmap_free(&fh->cap);
1485− videobuf_mmap_free(&fh->vbi);
1486− saa7134_pgtable_free(dev->pci,&fh->pt_cap);
1487− saa7134_pgtable_free(dev->pci,&fh->pt_vbi);
1488−
14891471 v4l2_fh_del(&fh->fh);
14901472 v4l2_fh_exit(&fh->fh);
14911473 file->private_data = NULL;
@@ -1560,7 +1542,7 @@ static int saa7134_g_fmt_vid_cap(struct file *file, void *priv, · 68 unmodified lines
15601542
15611543 f->fmt.pix.width = dev->width;
15621544 f->fmt.pix.height = dev->height;
1563− f->fmt.pix.field = fh->cap.field;
1545+ f->fmt.pix.field = dev->cap.field;
15641546 f->fmt.pix.pixelformat = dev->fmt->fourcc;
15651547 f->fmt.pix.bytesperline =
15661548 (f->fmt.pix.width * dev->fmt->depth) >> 3;
@@ -1686,7 +1668,7 @@ static int saa7134_s_fmt_vid_cap(struct file *file, void *priv, · 119 unmodified lines
16861668 dev->fmt = format_by_fourcc(f->fmt.pix.pixelformat);
16871669 dev->width = f->fmt.pix.width;
16881670 dev->height = f->fmt.pix.height;
1689− fh->cap.field = f->fmt.pix.field;
1671+ dev->cap.field = f->fmt.pix.field;
16901672 return 0;
16911673 }
16921674
@@ -2489,9 +2471,31 @@ int saa7134_video_init1(struct saa7134_dev *dev) · 796 unmodified lines
24892471 if (saa7134_boards[dev->board].video_out)
24902472 saa7134_videoport_init(dev);
24912473
2474+ videobuf_queue_sg_init(&dev->cap, &video_qops,
2475+ &dev->pci->dev, &dev->slock,
2476+ V4L2_BUF_TYPE_VIDEO_CAPTURE,
2477+ V4L2_FIELD_INTERLACED,
2478+ sizeof(struct saa7134_buf),
2479+ dev, NULL);
2480+ videobuf_queue_sg_init(&dev->vbi, &saa7134_vbi_qops,
2481+ &dev->pci->dev, &dev->slock,
2482+ V4L2_BUF_TYPE_VBI_CAPTURE,
2483+ V4L2_FIELD_SEQ_TB,
2484+ sizeof(struct saa7134_buf),
2485+ dev, NULL);
2486+ saa7134_pgtable_alloc(dev->pci, &dev->pt_cap);
2487+ saa7134_pgtable_alloc(dev->pci, &dev->pt_vbi);
2488+
24922489 return 0;
24932490 }
24942491
2492+void saa7134_video_fini(struct saa7134_dev *dev)
2493+{
2494+ /* free stuff */
2495+ saa7134_pgtable_free(dev->pci, &dev->pt_cap);
2496+ saa7134_pgtable_free(dev->pci, &dev->pt_vbi);
2497+}
2498+
24952499 int saa7134_videoport_init(struct saa7134_dev *dev)
24962500 {
24972501 /* enable video output */
drivers/media/pci/saa7134/saa7134.h+5−8
@@ -472,14 +472,6 @@ struct saa7134_fh { · 471 unmodified lines
472472 struct v4l2_fh fh;
473473 struct saa7134_dev *dev;
474474 unsigned int resources;
475−
476− /* video capture */
477− struct videobuf_queue cap;
478− struct saa7134_pgtable pt_cap;
479−
480− /* vbi capture */
481− struct videobuf_queue vbi;
482− struct saa7134_pgtable pt_vbi;
483475 };
484476
485477 /* dmasound dsp status */
@@ -589,7 +581,11 @@ struct saa7134_dev { · 103 unmodified lines
589581
590582 /* video+ts+vbi capture */
591583 struct saa7134_dmaqueue video_q;
584+ struct videobuf_queue cap;
585+ struct saa7134_pgtable pt_cap;
592586 struct saa7134_dmaqueue vbi_q;
587+ struct videobuf_queue vbi;
588+ struct saa7134_pgtable pt_vbi;
593589 unsigned int video_fieldcount;
594590 unsigned int vbi_fieldcount;
595591 struct saa7134_format *fmt;
@@ -773,6 +769,7 @@ int saa7134_video_init1(struct saa7134_dev *dev); · 177 unmodified lines
773769 int saa7134_video_init2(struct saa7134_dev *dev);
774770 void saa7134_irq_video_signalchange(struct saa7134_dev *dev);
775771 void saa7134_irq_video_done(struct saa7134_dev *dev, unsigned long status);
772+void saa7134_video_fini(struct saa7134_dev *dev);
776773
777774
778775 /* ----------------------------------------------------------- */