From: Xiaolong Zhang <[email protected]>
Some pll_sc_gate clocks need to wait a certain long time for being stable after enabled, for this reason enabling this kind of clocks shouldn't be done in clk_ops.enable() which would be called at interrupt context. So we move the operation to .prepare(), and also hooks to .unprepare() with disabling pll_sc_gate clocks. Signed-off-by: Xiaolong Zhang <[email protected]> Signed-off-by: Chunyan Zhang <[email protected]> --- drivers/clk/sprd/gate.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/clk/sprd/gate.c b/drivers/clk/sprd/gate.c index 1491c00575fa..d8b480f852f3 100644 --- a/drivers/clk/sprd/gate.c +++ b/drivers/clk/sprd/gate.c @@ -80,7 +80,7 @@ static int sprd_sc_gate_enable(struct clk_hw *hw) return 0; } -static int sprd_pll_sc_gate_enable(struct clk_hw *hw) +static int sprd_pll_sc_gate_prepare(struct clk_hw *hw) { struct sprd_gate *sg = hw_to_sprd_gate(hw); @@ -120,9 +120,11 @@ const struct clk_ops sprd_sc_gate_ops = { }; EXPORT_SYMBOL_GPL(sprd_sc_gate_ops); +#define sprd_pll_sc_gate_unprepare sprd_sc_gate_disable + const struct clk_ops sprd_pll_sc_gate_ops = { - .disable = sprd_sc_gate_disable, - .enable = sprd_pll_sc_gate_enable, + .unprepare = sprd_pll_sc_gate_unprepare, + .prepare = sprd_pll_sc_gate_prepare, .is_enabled = sprd_gate_is_enabled, }; EXPORT_SYMBOL_GPL(sprd_pll_sc_gate_ops); -- 2.20.1

