Commit 1b73f03c authored by Prabhakar Lad's avatar Prabhakar Lad Committed by Mauro Carvalho Chehab

[media] media: davinci: vpbe: use helpers provided by core if streaming is started

this patch uses vb2_is_busy() helper to check if streaming is
actually started, instead of driver managing it.
Signed-off-by: default avatarLad, Prabhakar <prabhakar.csengg@gmail.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent c24376f3
...@@ -152,8 +152,8 @@ static irqreturn_t venc_isr(int irq, void *arg) ...@@ -152,8 +152,8 @@ static irqreturn_t venc_isr(int irq, void *arg)
for (i = 0; i < VPBE_DISPLAY_MAX_DEVICES; i++) { for (i = 0; i < VPBE_DISPLAY_MAX_DEVICES; i++) {
layer = disp_dev->dev[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; continue;
if (layer->layer_first_int) { if (layer->layer_first_int) {
...@@ -314,7 +314,6 @@ static int vpbe_start_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -314,7 +314,6 @@ static int vpbe_start_streaming(struct vb2_queue *vq, unsigned int count)
* if request format is yuv420 semiplanar, need to * if request format is yuv420 semiplanar, need to
* enable both video windows * enable both video windows
*/ */
layer->started = 1;
layer->layer_first_int = 1; layer->layer_first_int = 1;
return ret; return ret;
...@@ -829,11 +828,9 @@ static int vpbe_display_s_fmt(struct file *file, void *priv, ...@@ -829,11 +828,9 @@ static int vpbe_display_s_fmt(struct file *file, void *priv,
"VIDIOC_S_FMT, layer id = %d\n", "VIDIOC_S_FMT, layer id = %d\n",
layer->device_id); layer->device_id);
/* If streaming is started, return error */ if (vb2_is_busy(&layer->buffer_queue))
if (layer->started) {
v4l2_err(&vpbe_dev->v4l2_dev, "Streaming is started\n");
return -EBUSY; return -EBUSY;
}
if (V4L2_BUF_TYPE_VIDEO_OUTPUT != fmt->type) { if (V4L2_BUF_TYPE_VIDEO_OUTPUT != fmt->type) {
v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "invalid type\n"); v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "invalid type\n");
return -EINVAL; return -EINVAL;
...@@ -937,11 +934,9 @@ static int vpbe_display_s_std(struct file *file, void *priv, ...@@ -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"); v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_S_STD\n");
/* If streaming is started, return error */ if (vb2_is_busy(&layer->buffer_queue))
if (layer->started) {
v4l2_err(&vpbe_dev->v4l2_dev, "Streaming is started\n");
return -EBUSY; return -EBUSY;
}
if (NULL != vpbe_dev->ops.s_std) { if (NULL != vpbe_dev->ops.s_std) {
ret = vpbe_dev->ops.s_std(vpbe_dev, std_id); ret = vpbe_dev->ops.s_std(vpbe_dev, std_id);
if (ret) { if (ret) {
...@@ -1021,11 +1016,10 @@ static int vpbe_display_s_output(struct file *file, void *priv, ...@@ -1021,11 +1016,10 @@ static int vpbe_display_s_output(struct file *file, void *priv,
int ret; int ret;
v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_S_OUTPUT\n"); v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_S_OUTPUT\n");
/* If streaming is started, return error */
if (layer->started) { if (vb2_is_busy(&layer->buffer_queue))
v4l2_err(&vpbe_dev->v4l2_dev, "Streaming is started\n");
return -EBUSY; return -EBUSY;
}
if (NULL == vpbe_dev->ops.set_output) if (NULL == vpbe_dev->ops.set_output)
return -EINVAL; return -EINVAL;
...@@ -1102,12 +1096,8 @@ vpbe_display_s_dv_timings(struct file *file, void *priv, ...@@ -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"); v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_S_DV_TIMINGS\n");
if (vb2_is_busy(&layer->buffer_queue))
/* If streaming is started, return error */
if (layer->started) {
v4l2_err(&vpbe_dev->v4l2_dev, "Streaming is started\n");
return -EBUSY; return -EBUSY;
}
/* Set the given standard in the encoder */ /* Set the given standard in the encoder */
if (!vpbe_dev->ops.s_dv_timings) if (!vpbe_dev->ops.s_dv_timings)
...@@ -1212,13 +1202,9 @@ static int vpbe_display_release(struct file *file) ...@@ -1212,13 +1202,9 @@ static int vpbe_display_release(struct file *file)
v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "vpbe_display_release\n"); v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "vpbe_display_release\n");
mutex_lock(&layer->opslock); mutex_lock(&layer->opslock);
/* Reset io_usrs member of layer object */
layer->io_usrs = 0;
osd_device->ops.disable_layer(osd_device, osd_device->ops.disable_layer(osd_device,
layer->layer_info.id); layer->layer_info.id);
layer->started = 0;
/* Decrement layer usrs counter */ /* Decrement layer usrs counter */
layer->usrs--; layer->usrs--;
/* If this file handle has initialize encoder device, reset it */ /* If this file handle has initialize encoder device, reset it */
......
...@@ -106,12 +106,8 @@ struct vpbe_layer { ...@@ -106,12 +106,8 @@ struct vpbe_layer {
unsigned char window_enable; unsigned char window_enable;
/* number of open instances of the layer */ /* number of open instances of the layer */
unsigned int usrs; unsigned int usrs;
/* number of users performing IO */
unsigned int io_usrs;
/* Indicates id of the field which is being displayed */ /* Indicates id of the field which is being displayed */
unsigned int field_id; unsigned int field_id;
/* Indicates whether streaming started */
unsigned char started;
/* Identifies device object */ /* Identifies device object */
enum vpbe_display_device_id device_id; enum vpbe_display_device_id device_id;
/* facilitation of ioctl ops lock by v4l2*/ /* facilitation of ioctl ops lock by v4l2*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment