Merge tag 'tty-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
[firefly-linux-kernel-4.4.55.git] / drivers / media / platform / davinci / vpbe_display.c
index 57dc4951c9795fe060fb7f7aef2a12720b9970f0..21a5a56eb5eab15609835f2291ab5a5250412af7 100644 (file)
@@ -244,12 +244,15 @@ vpbe_buffer_queue_setup(struct vb2_queue *vq, const struct v4l2_format *fmt,
 
        v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "vpbe_buffer_setup\n");
 
+       if (fmt && fmt->fmt.pix.sizeimage < layer->pix_fmt.sizeimage)
+               return -EINVAL;
+
        /* Store number of buffers allocated in numbuffer member */
-       if (*nbuffers < VPBE_DEFAULT_NUM_BUFS)
-               *nbuffers = layer->numbuffers = VPBE_DEFAULT_NUM_BUFS;
+       if (vq->num_buffers + *nbuffers < VPBE_DEFAULT_NUM_BUFS)
+               *nbuffers = VPBE_DEFAULT_NUM_BUFS - vq->num_buffers;
 
        *nplanes = 1;
-       sizes[0] = layer->pix_fmt.sizeimage;
+       sizes[0] = fmt ? fmt->fmt.pix.sizeimage : layer->pix_fmt.sizeimage;
        alloc_ctxs[0] = layer->alloc_ctx;
 
        return 0;
@@ -636,7 +639,6 @@ static int vpbe_display_querycap(struct file *file, void  *priv,
        struct vpbe_layer *layer = video_drvdata(file);
        struct vpbe_device *vpbe_dev = layer->disp_dev->vpbe_dev;
 
-       cap->version = VPBE_DISPLAY_VERSION_CODE;
        cap->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING;
        cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
        snprintf(cap->driver, sizeof(cap->driver), "%s",
@@ -1241,6 +1243,7 @@ static const struct v4l2_ioctl_ops vpbe_ioctl_ops = {
        .vidioc_try_fmt_vid_out  = vpbe_display_try_fmt,
 
        .vidioc_reqbufs          = vb2_ioctl_reqbufs,
+       .vidioc_create_bufs      = vb2_ioctl_create_bufs,
        .vidioc_querybuf         = vb2_ioctl_querybuf,
        .vidioc_qbuf             = vb2_ioctl_qbuf,
        .vidioc_dqbuf            = vb2_ioctl_dqbuf,
@@ -1251,11 +1254,14 @@ static const struct v4l2_ioctl_ops vpbe_ioctl_ops = {
        .vidioc_cropcap          = vpbe_display_cropcap,
        .vidioc_g_crop           = vpbe_display_g_crop,
        .vidioc_s_crop           = vpbe_display_s_crop,
+
        .vidioc_s_std            = vpbe_display_s_std,
        .vidioc_g_std            = vpbe_display_g_std,
+
        .vidioc_enum_output      = vpbe_display_enum_output,
        .vidioc_s_output         = vpbe_display_s_output,
        .vidioc_g_output         = vpbe_display_g_output,
+
        .vidioc_s_dv_timings     = vpbe_display_s_dv_timings,
        .vidioc_g_dv_timings     = vpbe_display_g_dv_timings,
        .vidioc_enum_dv_timings  = vpbe_display_enum_dv_timings,