Skip to content

Commit e32fe6d

Browse files
committed
iio: adc: ad7192: Avoid disabling a clock that was never enabled.
Found by inspection. If the internal clock source is being used, the driver doesn't call clk_prepare_enable() and as such we should not call clk_disable_unprepare() Use the same condition to protect the disable path as is used on the enable one. Note this will all get simplified when the driver moves over to a full devm_ flow, but that would make backporting the fix harder. Fix obviously predates move out of staging, but backporting will become more complex (and is unlikely to happen), hence that patch is given in the fixes tag. Alexandru's sign off is here because he added this patch into a larger series that Jonathan then applied. Fixes: b581f74 ("staging: iio: adc: ad7192: move out of staging") Cc: Alexandru Tachici <[email protected]> Reviewed-by: Alexandru Ardelean <[email protected]> Signed-off-by: Jonathan Cameron <[email protected]> Signed-off-by: Alexandru Ardelean <[email protected]> Cc: <[email protected]>
1 parent f2a772c commit e32fe6d

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

drivers/iio/adc/ad7192.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,7 +1014,9 @@ static int ad7192_probe(struct spi_device *spi)
10141014
return 0;
10151015

10161016
error_disable_clk:
1017-
clk_disable_unprepare(st->mclk);
1017+
if (st->clock_sel == AD7192_CLK_EXT_MCLK1_2 ||
1018+
st->clock_sel == AD7192_CLK_EXT_MCLK2)
1019+
clk_disable_unprepare(st->mclk);
10181020
error_remove_trigger:
10191021
ad_sd_cleanup_buffer_and_trigger(indio_dev);
10201022
error_disable_dvdd:
@@ -1031,7 +1033,9 @@ static int ad7192_remove(struct spi_device *spi)
10311033
struct ad7192_state *st = iio_priv(indio_dev);
10321034

10331035
iio_device_unregister(indio_dev);
1034-
clk_disable_unprepare(st->mclk);
1036+
if (st->clock_sel == AD7192_CLK_EXT_MCLK1_2 ||
1037+
st->clock_sel == AD7192_CLK_EXT_MCLK2)
1038+
clk_disable_unprepare(st->mclk);
10351039
ad_sd_cleanup_buffer_and_trigger(indio_dev);
10361040

10371041
regulator_disable(st->dvdd);

0 commit comments

Comments
 (0)