Message ID | 20230615141349.172363-9-hdegoede@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | media: ov2680: Bugfixes + ACPI + selection(crop-tgt) API support | expand |
Hi Hans On 15/06/2023 15:13, Hans de Goede wrote: > When the ov2680_power_on() "sensor soft reset failed" path is hit during > probe() the WARN() about putting an enabled regulator at > drivers/regulator/core.c:2398 triggers 3 times (once for each regulator), > filling dmesg with backtraces. > > Fix this by properly disabling the regulators on ov2680_power_on() errors. > > Fixes: 3ee47cad3e69 ("media: ov2680: Add Omnivision OV2680 sensor driver") > Signed-off-by: Hans de Goede <hdegoede@redhat.com> > --- Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> > drivers/media/i2c/ov2680.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/i2c/ov2680.c b/drivers/media/i2c/ov2680.c > index 7fc4b39ebb37..55fc56ffad31 100644 > --- a/drivers/media/i2c/ov2680.c > +++ b/drivers/media/i2c/ov2680.c > @@ -475,7 +475,7 @@ static int ov2680_power_on(struct ov2680_dev *sensor) > ret = ov2680_write_reg(sensor, OV2680_REG_SOFT_RESET, 0x01); > if (ret != 0) { > dev_err(dev, "sensor soft reset failed\n"); > - return ret; > + goto err_disable_regulators; > } > usleep_range(1000, 2000); > } else { > @@ -485,7 +485,7 @@ static int ov2680_power_on(struct ov2680_dev *sensor) > > ret = clk_prepare_enable(sensor->xvclk); > if (ret < 0) > - return ret; > + goto err_disable_regulators; > > sensor->is_enabled = true; > > @@ -495,6 +495,10 @@ static int ov2680_power_on(struct ov2680_dev *sensor) > ov2680_stream_disable(sensor); > > return 0; > + > +err_disable_regulators: > + regulator_bulk_disable(OV2680_NUM_SUPPLIES, sensor->supplies); > + return ret; > } > > static int ov2680_s_power(struct v4l2_subdev *sd, int on)
diff --git a/drivers/media/i2c/ov2680.c b/drivers/media/i2c/ov2680.c index 7fc4b39ebb37..55fc56ffad31 100644 --- a/drivers/media/i2c/ov2680.c +++ b/drivers/media/i2c/ov2680.c @@ -475,7 +475,7 @@ static int ov2680_power_on(struct ov2680_dev *sensor) ret = ov2680_write_reg(sensor, OV2680_REG_SOFT_RESET, 0x01); if (ret != 0) { dev_err(dev, "sensor soft reset failed\n"); - return ret; + goto err_disable_regulators; } usleep_range(1000, 2000); } else { @@ -485,7 +485,7 @@ static int ov2680_power_on(struct ov2680_dev *sensor) ret = clk_prepare_enable(sensor->xvclk); if (ret < 0) - return ret; + goto err_disable_regulators; sensor->is_enabled = true; @@ -495,6 +495,10 @@ static int ov2680_power_on(struct ov2680_dev *sensor) ov2680_stream_disable(sensor); return 0; + +err_disable_regulators: + regulator_bulk_disable(OV2680_NUM_SUPPLIES, sensor->supplies); + return ret; } static int ov2680_s_power(struct v4l2_subdev *sd, int on)
When the ov2680_power_on() "sensor soft reset failed" path is hit during probe() the WARN() about putting an enabled regulator at drivers/regulator/core.c:2398 triggers 3 times (once for each regulator), filling dmesg with backtraces. Fix this by properly disabling the regulators on ov2680_power_on() errors. Fixes: 3ee47cad3e69 ("media: ov2680: Add Omnivision OV2680 sensor driver") Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- drivers/media/i2c/ov2680.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)