aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/usb/au0828/au0828-video.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/usb/au0828/au0828-video.c')
-rw-r--r--drivers/media/usb/au0828/au0828-video.c104
1 files changed, 36 insertions, 68 deletions
diff --git a/drivers/media/usb/au0828/au0828-video.c b/drivers/media/usb/au0828/au0828-video.c
index a27cb5fcdef8..1a362a041ab3 100644
--- a/drivers/media/usb/au0828/au0828-video.c
+++ b/drivers/media/usb/au0828/au0828-video.c
@@ -299,29 +299,23 @@ static int au0828_init_isoc(struct au0828_dev *dev, int max_packets,
299 * Announces that a buffer were filled and request the next 299 * Announces that a buffer were filled and request the next
300 */ 300 */
301static inline void buffer_filled(struct au0828_dev *dev, 301static inline void buffer_filled(struct au0828_dev *dev,
302 struct au0828_dmaqueue *dma_q, 302 struct au0828_dmaqueue *dma_q,
303 struct au0828_buffer *buf) 303 struct au0828_buffer *buf)
304{ 304{
305 /* Advice that buffer was filled */ 305 struct vb2_buffer *vb = &buf->vb;
306 au0828_isocdbg("[%p/%d] wakeup\n", buf, buf->top_field); 306 struct vb2_queue *q = vb->vb2_queue;
307 307
308 buf->vb.v4l2_buf.sequence = dev->frame_count++;
309 buf->vb.v4l2_buf.field = V4L2_FIELD_INTERLACED;
310 v4l2_get_timestamp(&buf->vb.v4l2_buf.timestamp);
311 vb2_buffer_done(&buf->vb, VB2_BUF_STATE_DONE);
312}
313
314static inline void vbi_buffer_filled(struct au0828_dev *dev,
315 struct au0828_dmaqueue *dma_q,
316 struct au0828_buffer *buf)
317{
318 /* Advice that buffer was filled */ 308 /* Advice that buffer was filled */
319 au0828_isocdbg("[%p/%d] wakeup\n", buf, buf->top_field); 309 au0828_isocdbg("[%p/%d] wakeup\n", buf, buf->top_field);
320 310
321 buf->vb.v4l2_buf.sequence = dev->vbi_frame_count++; 311 if (q->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
322 buf->vb.v4l2_buf.field = V4L2_FIELD_INTERLACED; 312 vb->v4l2_buf.sequence = dev->frame_count++;
323 v4l2_get_timestamp(&buf->vb.v4l2_buf.timestamp); 313 else
324 vb2_buffer_done(&buf->vb, VB2_BUF_STATE_DONE); 314 vb->v4l2_buf.sequence = dev->vbi_frame_count++;
315
316 vb->v4l2_buf.field = V4L2_FIELD_INTERLACED;
317 v4l2_get_timestamp(&vb->v4l2_buf.timestamp);
318 vb2_buffer_done(vb, VB2_BUF_STATE_DONE);
325} 319}
326 320
327/* 321/*
@@ -574,9 +568,7 @@ static inline int au0828_isoc_copy(struct au0828_dev *dev, struct urb *urb)
574 if (fbyte & 0x40) { 568 if (fbyte & 0x40) {
575 /* VBI */ 569 /* VBI */
576 if (vbi_buf != NULL) 570 if (vbi_buf != NULL)
577 vbi_buffer_filled(dev, 571 buffer_filled(dev, vbi_dma_q, vbi_buf);
578 vbi_dma_q,
579 vbi_buf);
580 vbi_get_next_buf(vbi_dma_q, &vbi_buf); 572 vbi_get_next_buf(vbi_dma_q, &vbi_buf);
581 if (vbi_buf == NULL) 573 if (vbi_buf == NULL)
582 vbioutp = NULL; 574 vbioutp = NULL;
@@ -899,12 +891,8 @@ void au0828_analog_unregister(struct au0828_dev *dev)
899{ 891{
900 dprintk(1, "au0828_analog_unregister called\n"); 892 dprintk(1, "au0828_analog_unregister called\n");
901 mutex_lock(&au0828_sysfs_lock); 893 mutex_lock(&au0828_sysfs_lock);
902 894 video_unregister_device(&dev->vdev);
903 if (dev->vdev) 895 video_unregister_device(&dev->vbi_dev);
904 video_unregister_device(dev->vdev);
905 if (dev->vbi_dev)
906 video_unregister_device(dev->vbi_dev);
907
908 mutex_unlock(&au0828_sysfs_lock); 896 mutex_unlock(&au0828_sysfs_lock);
909} 897}
910 898
@@ -949,7 +937,7 @@ static void au0828_vbi_buffer_timeout(unsigned long data)
949 if (buf != NULL) { 937 if (buf != NULL) {
950 vbi_data = vb2_plane_vaddr(&buf->vb, 0); 938 vbi_data = vb2_plane_vaddr(&buf->vb, 0);
951 memset(vbi_data, 0x00, buf->length); 939 memset(vbi_data, 0x00, buf->length);
952 vbi_buffer_filled(dev, dma_q, buf); 940 buffer_filled(dev, dma_q, buf);
953 } 941 }
954 vbi_get_next_buf(dma_q, &buf); 942 vbi_get_next_buf(dma_q, &buf);
955 943
@@ -1286,7 +1274,7 @@ static int vidioc_enum_input(struct file *file, void *priv,
1286 input->audioset = 2; 1274 input->audioset = 2;
1287 } 1275 }
1288 1276
1289 input->std = dev->vdev->tvnorms; 1277 input->std = dev->vdev.tvnorms;
1290 1278
1291 return 0; 1279 return 0;
1292} 1280}
@@ -1704,7 +1692,7 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = {
1704 1692
1705static const struct video_device au0828_video_template = { 1693static const struct video_device au0828_video_template = {
1706 .fops = &au0828_v4l_fops, 1694 .fops = &au0828_v4l_fops,
1707 .release = video_device_release, 1695 .release = video_device_release_empty,
1708 .ioctl_ops = &video_ioctl_ops, 1696 .ioctl_ops = &video_ioctl_ops,
1709 .tvnorms = V4L2_STD_NTSC_M | V4L2_STD_PAL_M, 1697 .tvnorms = V4L2_STD_NTSC_M | V4L2_STD_PAL_M,
1710}; 1698};
@@ -1814,52 +1802,36 @@ int au0828_analog_register(struct au0828_dev *dev,
1814 dev->std = V4L2_STD_NTSC_M; 1802 dev->std = V4L2_STD_NTSC_M;
1815 au0828_s_input(dev, 0); 1803 au0828_s_input(dev, 0);
1816 1804
1817 /* allocate and fill v4l2 video struct */
1818 dev->vdev = video_device_alloc();
1819 if (NULL == dev->vdev) {
1820 dprintk(1, "Can't allocate video_device.\n");
1821 return -ENOMEM;
1822 }
1823
1824 /* allocate the VBI struct */
1825 dev->vbi_dev = video_device_alloc();
1826 if (NULL == dev->vbi_dev) {
1827 dprintk(1, "Can't allocate vbi_device.\n");
1828 ret = -ENOMEM;
1829 goto err_vdev;
1830 }
1831
1832 mutex_init(&dev->vb_queue_lock); 1805 mutex_init(&dev->vb_queue_lock);
1833 mutex_init(&dev->vb_vbi_queue_lock); 1806 mutex_init(&dev->vb_vbi_queue_lock);
1834 1807
1835 /* Fill the video capture device struct */ 1808 /* Fill the video capture device struct */
1836 *dev->vdev = au0828_video_template; 1809 dev->vdev = au0828_video_template;
1837 dev->vdev->v4l2_dev = &dev->v4l2_dev; 1810 dev->vdev.v4l2_dev = &dev->v4l2_dev;
1838 dev->vdev->lock = &dev->lock; 1811 dev->vdev.lock = &dev->lock;
1839 dev->vdev->queue = &dev->vb_vidq; 1812 dev->vdev.queue = &dev->vb_vidq;
1840 dev->vdev->queue->lock = &dev->vb_queue_lock; 1813 dev->vdev.queue->lock = &dev->vb_queue_lock;
1841 strcpy(dev->vdev->name, "au0828a video"); 1814 strcpy(dev->vdev.name, "au0828a video");
1842 1815
1843 /* Setup the VBI device */ 1816 /* Setup the VBI device */
1844 *dev->vbi_dev = au0828_video_template; 1817 dev->vbi_dev = au0828_video_template;
1845 dev->vbi_dev->v4l2_dev = &dev->v4l2_dev; 1818 dev->vbi_dev.v4l2_dev = &dev->v4l2_dev;
1846 dev->vbi_dev->lock = &dev->lock; 1819 dev->vbi_dev.lock = &dev->lock;
1847 dev->vbi_dev->queue = &dev->vb_vbiq; 1820 dev->vbi_dev.queue = &dev->vb_vbiq;
1848 dev->vbi_dev->queue->lock = &dev->vb_vbi_queue_lock; 1821 dev->vbi_dev.queue->lock = &dev->vb_vbi_queue_lock;
1849 strcpy(dev->vbi_dev->name, "au0828a vbi"); 1822 strcpy(dev->vbi_dev.name, "au0828a vbi");
1850 1823
1851 /* initialize videobuf2 stuff */ 1824 /* initialize videobuf2 stuff */
1852 retval = au0828_vb2_setup(dev); 1825 retval = au0828_vb2_setup(dev);
1853 if (retval != 0) { 1826 if (retval != 0) {
1854 dprintk(1, "unable to setup videobuf2 queues (error = %d).\n", 1827 dprintk(1, "unable to setup videobuf2 queues (error = %d).\n",
1855 retval); 1828 retval);
1856 ret = -ENODEV; 1829 return -ENODEV;
1857 goto err_vbi_dev;
1858 } 1830 }
1859 1831
1860 /* Register the v4l2 device */ 1832 /* Register the v4l2 device */
1861 video_set_drvdata(dev->vdev, dev); 1833 video_set_drvdata(&dev->vdev, dev);
1862 retval = video_register_device(dev->vdev, VFL_TYPE_GRABBER, -1); 1834 retval = video_register_device(&dev->vdev, VFL_TYPE_GRABBER, -1);
1863 if (retval != 0) { 1835 if (retval != 0) {
1864 dprintk(1, "unable to register video device (error = %d).\n", 1836 dprintk(1, "unable to register video device (error = %d).\n",
1865 retval); 1837 retval);
@@ -1868,8 +1840,8 @@ int au0828_analog_register(struct au0828_dev *dev,
1868 } 1840 }
1869 1841
1870 /* Register the vbi device */ 1842 /* Register the vbi device */
1871 video_set_drvdata(dev->vbi_dev, dev); 1843 video_set_drvdata(&dev->vbi_dev, dev);
1872 retval = video_register_device(dev->vbi_dev, VFL_TYPE_VBI, -1); 1844 retval = video_register_device(&dev->vbi_dev, VFL_TYPE_VBI, -1);
1873 if (retval != 0) { 1845 if (retval != 0) {
1874 dprintk(1, "unable to register vbi device (error = %d).\n", 1846 dprintk(1, "unable to register vbi device (error = %d).\n",
1875 retval); 1847 retval);
@@ -1882,14 +1854,10 @@ int au0828_analog_register(struct au0828_dev *dev,
1882 return 0; 1854 return 0;
1883 1855
1884err_reg_vbi_dev: 1856err_reg_vbi_dev:
1885 video_unregister_device(dev->vdev); 1857 video_unregister_device(&dev->vdev);
1886err_reg_vdev: 1858err_reg_vdev:
1887 vb2_queue_release(&dev->vb_vidq); 1859 vb2_queue_release(&dev->vb_vidq);
1888 vb2_queue_release(&dev->vb_vbiq); 1860 vb2_queue_release(&dev->vb_vbiq);
1889err_vbi_dev:
1890 video_device_release(dev->vbi_dev);
1891err_vdev:
1892 video_device_release(dev->vdev);
1893 return ret; 1861 return ret;
1894} 1862}
1895 1863