commit | cb34b1c09c4f5622eb849ca302e9a843ae77abee | [log] [tgz] |
---|---|---|
author | Yang Xiwen <forbidden405@outlook.com> | Sun Nov 19 06:10:06 2023 +0800 |
committer | Sean Anderson <seanga2@gmail.com> | Fri Dec 15 12:31:47 2023 -0500 |
tree | 63128a6567e6ac39a9281e6c98b2e5d9c0b7759e | |
parent | 470fba10b57b2e266ad8929ecb0a259e08e6c158 [diff] |
clk: get correct ops for clk_enable() and clk_disable() assign clk_dev_ops(clkp->dev) to ops to ensure correct clk operations are called on clocks. This fixes the incorrect enable_count issue as described in [1]. [1]: https://lore.kernel.org/all/SEZPR06MB695927A6DEEEF8489A06897396A7A@SEZPR06MB6959.apcprd06.prod.outlook.com/ Signed-off-by: Yang Xiwen <forbidden405@outlook.com> Reviewed-by: Sean Anderson <seanga2@gmail.com> Link: https://lore.kernel.org/r/20231111-enable_count-v2-2-20e3728600b5@outlook.com
diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index 3b5e3f9..3e9d68f 100644 --- a/drivers/clk/clk-uclass.c +++ b/drivers/clk/clk-uclass.c
@@ -640,6 +640,7 @@ if (CONFIG_IS_ENABLED(CLK_CCF)) { /* Take id 0 as a non-valid clk, such as dummy */ if (clk->id && !clk_get_by_id(clk->id, &clkp)) { + ops = clk_dev_ops(clkp->dev); if (clkp->enable_count) { clkp->enable_count++; return 0; @@ -699,6 +700,7 @@ if (CONFIG_IS_ENABLED(CLK_CCF)) { if (clk->id && !clk_get_by_id(clk->id, &clkp)) { + ops = clk_dev_ops(clkp->dev); if (clkp->flags & CLK_IS_CRITICAL) return 0;