]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
media: i2c: ov5645: Refactor ov5645_set_power_off()
authorRicardo Ribalda <ribalda@chromium.org>
Fri, 16 Aug 2024 12:32:00 +0000 (12:32 +0000)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Sat, 31 Aug 2024 07:40:43 +0000 (09:40 +0200)
Factor out all the power off logic, except clk_disable_unprepare(), to a
new function __ov5645_set_power_off().

This allows ov5645_set_power_on() to excplicitly clean-out the clock
during the error-path.

The following smatch warning is fixed:
drivers/media/i2c/ov5645.c:690 ov5645_set_power_on() warn: 'ov5645->xclk' from clk_prepare_enable() not released on lines: 690.

Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/i2c/ov5645.c

index 6c2d221f69737f64e7eede88338d58a37a270ddc..0c32bd2940ecf0e591964ef1ef8413e3c50e3717 100644 (file)
@@ -635,7 +635,7 @@ static int ov5645_set_register_array(struct ov5645 *ov5645,
        return 0;
 }
 
-static int ov5645_set_power_off(struct device *dev)
+static void __ov5645_set_power_off(struct device *dev)
 {
        struct v4l2_subdev *sd = dev_get_drvdata(dev);
        struct ov5645 *ov5645 = to_ov5645(sd);
@@ -643,8 +643,16 @@ static int ov5645_set_power_off(struct device *dev)
        ov5645_write_reg(ov5645, OV5645_IO_MIPI_CTRL00, 0x58);
        gpiod_set_value_cansleep(ov5645->rst_gpio, 1);
        gpiod_set_value_cansleep(ov5645->enable_gpio, 0);
-       clk_disable_unprepare(ov5645->xclk);
        regulator_bulk_disable(OV5645_NUM_SUPPLIES, ov5645->supplies);
+}
+
+static int ov5645_set_power_off(struct device *dev)
+{
+       struct v4l2_subdev *sd = dev_get_drvdata(dev);
+       struct ov5645 *ov5645 = to_ov5645(sd);
+
+       __ov5645_set_power_off(dev);
+       clk_disable_unprepare(ov5645->xclk);
 
        return 0;
 }
@@ -686,7 +694,8 @@ static int ov5645_set_power_on(struct device *dev)
        return 0;
 
 exit:
-       ov5645_set_power_off(dev);
+       __ov5645_set_power_off(dev);
+       clk_disable_unprepare(ov5645->xclk);
        return ret;
 }