Re: [PATCH v2 08/28] media: ov2680: Fix regulators being left enabled on ov2680_power_on() errors

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---


Reviewed-by: Daniel Scally <dan.scally@xxxxxxxxxxxxxxxx>

  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)



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux