summaryrefslogtreecommitdiff
path: root/drivers/media/platform/atmel/atmel-isc.c
diff options
context:
space:
mode:
authorSongjun Wu <songjun.wu@microchip.com>2016-09-12 04:47:24 -0300
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2016-09-19 14:15:48 -0300
commit4540e0ad6fa6fab0e4cc0dc4f74b1ebb676a4404 (patch)
tree3f9fbeb14cefd9c5f56d1cffb5835836288e0424 /drivers/media/platform/atmel/atmel-isc.c
parenta58d1191ca04ffa8b14dcda5df0c87a2a642d3c7 (diff)
[media] atmel-isc: set the format on the first open
Set the current format on the first open. Signed-off-by: Songjun Wu <songjun.wu@microchip.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/platform/atmel/atmel-isc.c')
-rw-r--r--drivers/media/platform/atmel/atmel-isc.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/media/platform/atmel/atmel-isc.c b/drivers/media/platform/atmel/atmel-isc.c
index db6773de92f0..ed8050d6ea71 100644
--- a/drivers/media/platform/atmel/atmel-isc.c
+++ b/drivers/media/platform/atmel/atmel-isc.c
@@ -924,10 +924,16 @@ static int isc_open(struct file *file)
goto unlock;
ret = v4l2_subdev_call(sd, core, s_power, 1);
- if (ret < 0 && ret != -ENOIOCTLCMD)
+ if (ret < 0 && ret != -ENOIOCTLCMD) {
v4l2_fh_release(file);
- else
- ret = 0;
+ goto unlock;
+ }
+
+ ret = isc_set_fmt(isc, &isc->fmt);
+ if (ret) {
+ v4l2_subdev_call(sd, core, s_power, 0);
+ v4l2_fh_release(file);
+ }
unlock:
mutex_unlock(&isc->lock);
@@ -1118,8 +1124,16 @@ static int isc_set_default_fmt(struct isc_device *isc)
.pixelformat = isc->user_formats[0]->fourcc,
},
};
+ int ret;
- return isc_set_fmt(isc, &f);
+ ret = isc_try_fmt(isc, &f, NULL);
+ if (ret)
+ return ret;
+
+ isc->current_fmt = isc->user_formats[0];
+ isc->fmt = f;
+
+ return 0;
}
static int isc_async_complete(struct v4l2_async_notifier *notifier)
@@ -1172,20 +1186,12 @@ static int isc_async_complete(struct v4l2_async_notifier *notifier)
return ret;
}
- ret = v4l2_subdev_call(sd_entity->sd, core, s_power, 1);
- if (ret < 0 && ret != -ENOIOCTLCMD)
- return ret;
-
ret = isc_set_default_fmt(isc);
if (ret) {
v4l2_err(&isc->v4l2_dev, "Could not set default format\n");
return ret;
}
- ret = v4l2_subdev_call(sd_entity->sd, core, s_power, 0);
- if (ret < 0 && ret != -ENOIOCTLCMD)
- return ret;
-
/* Register video device */
strlcpy(vdev->name, ATMEL_ISC_NAME, sizeof(vdev->name));
vdev->release = video_device_release_empty;