Skip to content

Commit 28f73de

Browse files
larsclausenjic23
authored andcommitted
iio: ad4130: Make sure clock provider gets removed
The ad4130 driver registers a clock provider, but never removes it. This leaves a stale clock provider behind that references freed clocks when the device is unbound. Register a managed action to remove the clock provider when the device is removed. Fixes: 6209406 ("iio: adc: ad4130: add AD4130 driver") Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Link: https://lore.kernel.org/r/20230414150702.518441-1-lars@metafoo.de Cc: <Stable@vger.kernel.org> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
1 parent 265c82e commit 28f73de

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

drivers/iio/adc/ad4130.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1817,13 +1817,19 @@ static const struct clk_ops ad4130_int_clk_ops = {
18171817
.unprepare = ad4130_int_clk_unprepare,
18181818
};
18191819

1820+
static void ad4130_clk_del_provider(void *of_node)
1821+
{
1822+
of_clk_del_provider(of_node);
1823+
}
1824+
18201825
static int ad4130_setup_int_clk(struct ad4130_state *st)
18211826
{
18221827
struct device *dev = &st->spi->dev;
18231828
struct device_node *of_node = dev_of_node(dev);
18241829
struct clk_init_data init;
18251830
const char *clk_name;
18261831
struct clk *clk;
1832+
int ret;
18271833

18281834
if (st->int_pin_sel == AD4130_INT_PIN_CLK ||
18291835
st->mclk_sel != AD4130_MCLK_76_8KHZ)
@@ -1843,7 +1849,11 @@ static int ad4130_setup_int_clk(struct ad4130_state *st)
18431849
if (IS_ERR(clk))
18441850
return PTR_ERR(clk);
18451851

1846-
return of_clk_add_provider(of_node, of_clk_src_simple_get, clk);
1852+
ret = of_clk_add_provider(of_node, of_clk_src_simple_get, clk);
1853+
if (ret)
1854+
return ret;
1855+
1856+
return devm_add_action_or_reset(dev, ad4130_clk_del_provider, of_node);
18471857
}
18481858

18491859
static int ad4130_setup(struct iio_dev *indio_dev)

0 commit comments

Comments
 (0)