media: atomisp: ov2680: Error handling fixes
Fix 3 error handling issues: 1. In ov2680_s_stream(), when pm_runtime_get_sync() fails it will still have incremented the pm-runtime reference count so we need to call pm_runtime_put() 2. In ov2680_s_stream() sensor->is_streaming should always be set to false when the sensor is powered-off even on i2c-communication errors. 3. In ov2680_probe(), call ov2680_remove() on ov2680_s_config() errors, so that pm_runtime_disable() is properly called to disable the runtime-pm which has been enabled before the ov2680_s_config() call. Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
920cf0ba63
commit
2cd6478cbe
|
@ -419,7 +419,7 @@ static int ov2680_s_stream(struct v4l2_subdev *sd, int enable)
|
|||
if (enable) {
|
||||
ret = pm_runtime_get_sync(sensor->sd.dev);
|
||||
if (ret < 0)
|
||||
goto error_unlock;
|
||||
goto error_power_down;
|
||||
|
||||
ret = ov2680_set_mode(sensor);
|
||||
if (ret)
|
||||
|
@ -447,6 +447,7 @@ static int ov2680_s_stream(struct v4l2_subdev *sd, int enable)
|
|||
|
||||
error_power_down:
|
||||
pm_runtime_put(sensor->sd.dev);
|
||||
sensor->is_streaming = false;
|
||||
error_unlock:
|
||||
mutex_unlock(&sensor->input_lock);
|
||||
return ret;
|
||||
|
@ -644,8 +645,10 @@ static int ov2680_probe(struct i2c_client *client)
|
|||
pm_runtime_use_autosuspend(dev);
|
||||
|
||||
ret = ov2680_s_config(&sensor->sd);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
ov2680_remove(client);
|
||||
return ret;
|
||||
}
|
||||
|
||||
sensor->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
|
||||
sensor->pad.flags = MEDIA_PAD_FL_SOURCE;
|
||||
|
|
Loading…
Reference in New Issue