]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/media/platform/sh_vou.c
Merge remote-tracking branch 'v4l-dvb/master'
[karo-tx-linux.git] / drivers / media / platform / sh_vou.c
index fe5c8ab06bd5c7e9af78a462f12a34df2b57cbf7..2231f8922df3d0fc0b2a72ac936278e1a39e024d 100644 (file)
@@ -27,6 +27,7 @@
 #include <media/v4l2-device.h>
 #include <media/v4l2-ioctl.h>
 #include <media/v4l2-mediabus.h>
+#include <media/videobuf2-v4l2.h>
 #include <media/videobuf2-dma-contig.h>
 
 /* Mirror addresses are not available for all registers */
@@ -62,11 +63,12 @@ enum sh_vou_status {
 #define VOU_MIN_IMAGE_HEIGHT   16
 
 struct sh_vou_buffer {
-       struct vb2_buffer vb;
+       struct vb2_v4l2_buffer vb;
        struct list_head list;
 };
 
-static inline struct sh_vou_buffer *to_sh_vou_buffer(struct vb2_buffer *vb2)
+static inline struct
+sh_vou_buffer *to_sh_vou_buffer(struct vb2_v4l2_buffer *vb2)
 {
        return container_of(vb2, struct sh_vou_buffer, vb);
 }
@@ -193,11 +195,11 @@ static struct sh_vou_fmt vou_fmt[] = {
 };
 
 static void sh_vou_schedule_next(struct sh_vou_device *vou_dev,
-                                struct vb2_buffer *vb)
+                                struct vb2_v4l2_buffer *vbuf)
 {
        dma_addr_t addr1, addr2;
 
-       addr1 = vb2_dma_contig_plane_dma_addr(vb, 0);
+       addr1 = vb2_dma_contig_plane_dma_addr(&vbuf->vb2_buf, 0);
        switch (vou_dev->pix.pixelformat) {
        case V4L2_PIX_FMT_NV12:
        case V4L2_PIX_FMT_NV16:
@@ -241,10 +243,11 @@ static void sh_vou_stream_config(struct sh_vou_device *vou_dev)
 }
 
 /* Locking: caller holds fop_lock mutex */
-static int sh_vou_queue_setup(struct vb2_queue *vq, const struct v4l2_format *fmt,
+static int sh_vou_queue_setup(struct vb2_queue *vq, const void *parg,
                       unsigned int *nbuffers, unsigned int *nplanes,
                       unsigned int sizes[], void *alloc_ctxs[])
 {
+       const struct v4l2_format *fmt = parg;
        struct sh_vou_device *vou_dev = vb2_get_drv_priv(vq);
        struct v4l2_pix_format *pix = &vou_dev->pix;
        int bytes_per_line = vou_fmt[vou_dev->pix_idx].bpp * pix->width / 8;
@@ -282,8 +285,9 @@ static int sh_vou_buf_prepare(struct vb2_buffer *vb)
 /* Locking: caller holds fop_lock mutex and vq->irqlock spinlock */
 static void sh_vou_buf_queue(struct vb2_buffer *vb)
 {
+       struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
        struct sh_vou_device *vou_dev = vb2_get_drv_priv(vb->vb2_queue);
-       struct sh_vou_buffer *shbuf = to_sh_vou_buffer(vb);
+       struct sh_vou_buffer *shbuf = to_sh_vou_buffer(vbuf);
        unsigned long flags;
 
        spin_lock_irqsave(&vou_dev->lock, flags);
@@ -302,7 +306,8 @@ static int sh_vou_start_streaming(struct vb2_queue *vq, unsigned int count)
                                         video, s_stream, 1);
        if (ret < 0 && ret != -ENOIOCTLCMD) {
                list_for_each_entry_safe(buf, node, &vou_dev->buf_list, list) {
-                       vb2_buffer_done(&buf->vb, VB2_BUF_STATE_QUEUED);
+                       vb2_buffer_done(&buf->vb.vb2_buf,
+                                       VB2_BUF_STATE_QUEUED);
                        list_del(&buf->list);
                }
                vou_dev->active = NULL;
@@ -353,7 +358,7 @@ static void sh_vou_stop_streaming(struct vb2_queue *vq)
        msleep(50);
        spin_lock_irqsave(&vou_dev->lock, flags);
        list_for_each_entry_safe(buf, node, &vou_dev->buf_list, list) {
-               vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
+               vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
                list_del(&buf->list);
        }
        vou_dev->active = NULL;
@@ -1066,10 +1071,10 @@ static irqreturn_t sh_vou_isr(int irq, void *dev_id)
 
        list_del(&vb->list);
 
-       v4l2_get_timestamp(&vb->vb.v4l2_buf.timestamp);
-       vb->vb.v4l2_buf.sequence = vou_dev->sequence++;
-       vb->vb.v4l2_buf.field = V4L2_FIELD_INTERLACED;
-       vb2_buffer_done(&vb->vb, VB2_BUF_STATE_DONE);
+       v4l2_get_timestamp(&vb->vb.timestamp);
+       vb->vb.sequence = vou_dev->sequence++;
+       vb->vb.field = V4L2_FIELD_INTERLACED;
+       vb2_buffer_done(&vb->vb.vb2_buf, VB2_BUF_STATE_DONE);
 
        vou_dev->active = list_entry(vou_dev->buf_list.next,
                                     struct sh_vou_buffer, list);