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>
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)
error_power_down:
pm_runtime_put(sensor->sd.dev);
+ sensor->is_streaming = false;
error_unlock:
mutex_unlock(&sensor->input_lock);
return ret;
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;