Commit 261a831f authored by Paul Cercueil's avatar Paul Cercueil Committed by Stephen Boyd

clk: ingenic: Support specifying "wait for clock stable" delay

Some clocks need a small delay after being ungated to run stable, as
using them too soon might result in hardware lockups.
Signed-off-by: default avatarPaul Cercueil <paul@crapouillou.net>
Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
parent 7ef3844f
...@@ -512,6 +512,9 @@ static int ingenic_clk_enable(struct clk_hw *hw) ...@@ -512,6 +512,9 @@ static int ingenic_clk_enable(struct clk_hw *hw)
spin_lock_irqsave(&cgu->lock, flags); spin_lock_irqsave(&cgu->lock, flags);
ingenic_cgu_gate_set(cgu, &clk_info->gate, false); ingenic_cgu_gate_set(cgu, &clk_info->gate, false);
spin_unlock_irqrestore(&cgu->lock, flags); spin_unlock_irqrestore(&cgu->lock, flags);
if (clk_info->gate.delay_us)
udelay(clk_info->gate.delay_us);
} }
return 0; return 0;
......
...@@ -112,11 +112,13 @@ struct ingenic_cgu_fixdiv_info { ...@@ -112,11 +112,13 @@ struct ingenic_cgu_fixdiv_info {
* @reg: offset of the gate control register within the CGU * @reg: offset of the gate control register within the CGU
* @bit: offset of the bit in the register that controls the gate * @bit: offset of the bit in the register that controls the gate
* @clear_to_gate: if set, the clock is gated when the bit is cleared * @clear_to_gate: if set, the clock is gated when the bit is cleared
* @delay_us: delay in microseconds after which the clock is considered stable
*/ */
struct ingenic_cgu_gate_info { struct ingenic_cgu_gate_info {
unsigned reg; unsigned reg;
u8 bit; u8 bit;
bool clear_to_gate; bool clear_to_gate;
u16 delay_us;
}; };
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment