mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
iio: adc: ade9000: fix NULL pointer dereference in clkout registration
ade9000_setup_clkout() passes NULL as the register address when
registering a divider clock. During clock registration, the common
clock framework calls clk_divider_recalc_rate(), which dereferences
the address through readl(). As a result, probing an ADE9000 configured
as a clock provider with an external input clock crashes.
CLKOUT passes CLKIN through without changing its rate. Register it as
a 1:1 fixed-factor clock, which does not require register access.
This change does not affect the configuration using the internal clock,
for which the driver does not register a clock provider.
Fixes: 81de7b4619 ("iio: adc: add ade9000 support")
Cc: stable@vger.kernel.org
Signed-off-by: Linmao Li <lilinmao@kylinos.cn>
Reviewed-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
Signed-off-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
This commit is contained in:
parent
d615210564
commit
49ee1c6a3e
|
|
@ -1647,8 +1647,9 @@ static int ade9000_setup_clkout(struct device *dev, struct ade9000_state *st)
|
|||
return 0;
|
||||
|
||||
/* CLKOUT passes through CLKIN with divider of 1 */
|
||||
clkout_hw = devm_clk_hw_register_divider(dev, "clkout", __clk_get_name(st->clkin),
|
||||
CLK_SET_RATE_PARENT, NULL, 0, 1, 0, NULL);
|
||||
clkout_hw = devm_clk_hw_register_fixed_factor(dev, "clkout",
|
||||
__clk_get_name(st->clkin),
|
||||
CLK_SET_RATE_PARENT, 1, 1);
|
||||
if (IS_ERR(clkout_hw))
|
||||
return dev_err_probe(dev, PTR_ERR(clkout_hw), "Failed to register clkout");
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user