[media] media: davinci: vpbe: use helpers provided by core if streaming is started
authorPrabhakar Lad <prabhakar.csengg@gmail.com>
Sun, 12 Oct 2014 20:40:42 +0000 (17:40 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 28 Oct 2014 18:11:15 +0000 (16:11 -0200)
this patch uses vb2_is_busy() helper to check if streaming is
actually started, instead of driver managing it.

Signed-off-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/platform/davinci/vpbe_display.c
include/media/davinci/vpbe_display.h

index 26d2335fe416229346546745a117e14542b1d3b0..57dc4951c9795fe060fb7f7aef2a12720b9970f0 100644 (file)
@@ -152,8 +152,8 @@ static irqreturn_t venc_isr(int irq, void *arg)
 
        for (i = 0; i < VPBE_DISPLAY_MAX_DEVICES; i++) {
                layer = disp_dev->dev[i];
-               /* If streaming is started in this layer */
-               if (!layer->started)
+
+               if (!vb2_start_streaming_called(&layer->buffer_queue))
                        continue;
 
                if (layer->layer_first_int) {
@@ -314,7 +314,6 @@ static int vpbe_start_streaming(struct vb2_queue *vq, unsigned int count)
         * if request format is yuv420 semiplanar, need to
         * enable both video windows
         */
-       layer->started = 1;
        layer->layer_first_int = 1;
 
        return ret;
@@ -829,11 +828,9 @@ static int vpbe_display_s_fmt(struct file *file, void *priv,
                        "VIDIOC_S_FMT, layer id = %d\n",
                        layer->device_id);
 
-       /* If streaming is started, return error */
-       if (layer->started) {
-               v4l2_err(&vpbe_dev->v4l2_dev, "Streaming is started\n");
+       if (vb2_is_busy(&layer->buffer_queue))
                return -EBUSY;
-       }
+
        if (V4L2_BUF_TYPE_VIDEO_OUTPUT != fmt->type) {
                v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "invalid type\n");
                return -EINVAL;
@@ -937,11 +934,9 @@ static int vpbe_display_s_std(struct file *file, void *priv,
 
        v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_S_STD\n");
 
-       /* If streaming is started, return error */
-       if (layer->started) {
-               v4l2_err(&vpbe_dev->v4l2_dev, "Streaming is started\n");
+       if (vb2_is_busy(&layer->buffer_queue))
                return -EBUSY;
-       }
+
        if (NULL != vpbe_dev->ops.s_std) {
                ret = vpbe_dev->ops.s_std(vpbe_dev, std_id);
                if (ret) {
@@ -1021,11 +1016,10 @@ static int vpbe_display_s_output(struct file *file, void *priv,
        int ret;
 
        v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_S_OUTPUT\n");
-       /* If streaming is started, return error */
-       if (layer->started) {
-               v4l2_err(&vpbe_dev->v4l2_dev, "Streaming is started\n");
+
+       if (vb2_is_busy(&layer->buffer_queue))
                return -EBUSY;
-       }
+
        if (NULL == vpbe_dev->ops.set_output)
                return -EINVAL;
 
@@ -1102,12 +1096,8 @@ vpbe_display_s_dv_timings(struct file *file, void *priv,
 
        v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_S_DV_TIMINGS\n");
 
-
-       /* If streaming is started, return error */
-       if (layer->started) {
-               v4l2_err(&vpbe_dev->v4l2_dev, "Streaming is started\n");
+       if (vb2_is_busy(&layer->buffer_queue))
                return -EBUSY;
-       }
 
        /* Set the given standard in the encoder */
        if (!vpbe_dev->ops.s_dv_timings)
@@ -1212,13 +1202,9 @@ static int vpbe_display_release(struct file *file)
        v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "vpbe_display_release\n");
 
        mutex_lock(&layer->opslock);
-       /* Reset io_usrs member of layer object */
-       layer->io_usrs = 0;
 
        osd_device->ops.disable_layer(osd_device,
                        layer->layer_info.id);
-       layer->started = 0;
-
        /* Decrement layer usrs counter */
        layer->usrs--;
        /* If this file handle has initialize encoder device, reset it */
index 06ea81576e5f1c8742a5ffa653959ac5deb0f60b..de0843d6f05c96315fa56426cebbf764100f573a 100644 (file)
@@ -106,12 +106,8 @@ struct vpbe_layer {
        unsigned char window_enable;
        /* number of open instances of the layer */
        unsigned int usrs;
-       /* number of users performing IO */
-       unsigned int io_usrs;
        /* Indicates id of the field which is being displayed */
        unsigned int field_id;
-       /* Indicates whether streaming started */
-       unsigned char started;
        /* Identifies device object */
        enum vpbe_display_device_id device_id;
        /* facilitation of ioctl ops lock by v4l2*/