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;