These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / media / platform / s5p-mfc / s5p_mfc_dec.c
index aebe4fd..8c5060a 100644 (file)
@@ -22,7 +22,7 @@
 #include <linux/workqueue.h>
 #include <media/v4l2-ctrls.h>
 #include <media/v4l2-event.h>
-#include <media/videobuf2-core.h>
+#include <media/videobuf2-v4l2.h>
 #include "s5p_mfc_common.h"
 #include "s5p_mfc_ctrl.h"
 #include "s5p_mfc_debug.h"
@@ -645,17 +645,22 @@ static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *buf)
                mfc_err("Call on DQBUF after unrecoverable error\n");
                return -EIO;
        }
-       if (buf->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
-               ret = vb2_dqbuf(&ctx->vq_src, buf, file->f_flags & O_NONBLOCK);
-       else if (buf->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
+
+       switch (buf->type) {
+       case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
+               return vb2_dqbuf(&ctx->vq_src, buf, file->f_flags & O_NONBLOCK);
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
                ret = vb2_dqbuf(&ctx->vq_dst, buf, file->f_flags & O_NONBLOCK);
-               if (ret == 0 && ctx->state == MFCINST_FINISHED &&
-                               list_empty(&ctx->vq_dst.done_list))
+               if (ret)
+                       return ret;
+
+               if (ctx->state == MFCINST_FINISHED &&
+                   (ctx->dst_bufs[buf->index].flags & MFC_BUF_FLAG_EOS))
                        v4l2_event_queue_fh(&ctx->fh, &ev);
-       } else {
-               ret = -EINVAL;
+               return 0;
+       default:
+               return -EINVAL;
        }
-       return ret;
 }
 
 /* Export DMA buffer */
@@ -883,7 +888,7 @@ static const struct v4l2_ioctl_ops s5p_mfc_dec_ioctl_ops = {
 };
 
 static int s5p_mfc_queue_setup(struct vb2_queue *vq,
-                       const struct v4l2_format *fmt, unsigned int *buf_count,
+                       const void *parg, unsigned int *buf_count,
                        unsigned int *plane_count, unsigned int psize[],
                        void *allocators[])
 {
@@ -945,6 +950,7 @@ static int s5p_mfc_queue_setup(struct vb2_queue *vq,
 
 static int s5p_mfc_buf_init(struct vb2_buffer *vb)
 {
+       struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
        struct vb2_queue *vq = vb->vb2_queue;
        struct s5p_mfc_ctx *ctx = fh_to_ctx(vq->drv_priv);
        unsigned int i;
@@ -964,8 +970,8 @@ static int s5p_mfc_buf_init(struct vb2_buffer *vb)
                        mfc_err("Plane buffer (CAPTURE) is too small\n");
                        return -EINVAL;
                }
-               i = vb->v4l2_buf.index;
-               ctx->dst_bufs[i].b = vb;
+               i = vb->index;
+               ctx->dst_bufs[i].b = vbuf;
                ctx->dst_bufs[i].cookie.raw.luma =
                                        vb2_dma_contig_plane_dma_addr(vb, 0);
                ctx->dst_bufs[i].cookie.raw.chroma =
@@ -982,8 +988,8 @@ static int s5p_mfc_buf_init(struct vb2_buffer *vb)
                        return -EINVAL;
                }
 
-               i = vb->v4l2_buf.index;
-               ctx->src_bufs[i].b = vb;
+               i = vb->index;
+               ctx->src_bufs[i].b = vbuf;
                ctx->src_bufs[i].cookie.stream =
                                        vb2_dma_contig_plane_dma_addr(vb, 0);
                ctx->src_bufs_cnt++;
@@ -1065,18 +1071,18 @@ static void s5p_mfc_buf_queue(struct vb2_buffer *vb)
        struct s5p_mfc_buf *mfc_buf;
 
        if (vq->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
-               mfc_buf = &ctx->src_bufs[vb->v4l2_buf.index];
+               mfc_buf = &ctx->src_bufs[vb->index];
                mfc_buf->flags &= ~MFC_BUF_FLAG_USED;
                spin_lock_irqsave(&dev->irqlock, flags);
                list_add_tail(&mfc_buf->list, &ctx->src_queue);
                ctx->src_queue_cnt++;
                spin_unlock_irqrestore(&dev->irqlock, flags);
        } else if (vq->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
-               mfc_buf = &ctx->dst_bufs[vb->v4l2_buf.index];
+               mfc_buf = &ctx->dst_bufs[vb->index];
                mfc_buf->flags &= ~MFC_BUF_FLAG_USED;
                /* Mark destination as available for use by MFC */
                spin_lock_irqsave(&dev->irqlock, flags);
-               set_bit(vb->v4l2_buf.index, &ctx->dec_dst_flag);
+               set_bit(vb->index, &ctx->dec_dst_flag);
                list_add_tail(&mfc_buf->list, &ctx->dst_queue);
                ctx->dst_queue_cnt++;
                spin_unlock_irqrestore(&dev->irqlock, flags);