|
@@ -179,9 +179,22 @@ static void lpc18xx_ccu_gate_disable(struct clk_hw *hw)
|
|
|
|
|
|
static int lpc18xx_ccu_gate_is_enabled(struct clk_hw *hw)
|
|
|
{
|
|
|
- struct clk_gate *gate = to_clk_gate(hw);
|
|
|
+ const struct clk_hw *parent;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * The branch clock registers are only accessible
|
|
|
+ * if the base (parent) clock is enabled. Register
|
|
|
+ * access with a disabled base clock will hang the
|
|
|
+ * system.
|
|
|
+ */
|
|
|
+ parent = clk_hw_get_parent(hw);
|
|
|
+ if (!parent)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ if (!clk_hw_is_enabled(parent))
|
|
|
+ return 0;
|
|
|
|
|
|
- return clk_readl(gate->reg) & LPC18XX_CCU_RUN;
|
|
|
+ return clk_gate_ops.is_enabled(hw);
|
|
|
}
|
|
|
|
|
|
static const struct clk_ops lpc18xx_ccu_gate_ops = {
|