|
@@ -37,6 +37,14 @@
|
|
|
|
|
|
u8 cpu_mask;
|
|
|
|
|
|
+/*
|
|
|
+ * clkdm_control: if true, then when a clock is enabled in the
|
|
|
+ * hardware, its clockdomain will first be enabled; and when a clock
|
|
|
+ * is disabled in the hardware, its clockdomain will be disabled
|
|
|
+ * afterwards.
|
|
|
+ */
|
|
|
+static bool clkdm_control = true;
|
|
|
+
|
|
|
/*
|
|
|
* OMAP2+ specific clock functions
|
|
|
*/
|
|
@@ -99,6 +107,19 @@ void omap2_init_clk_clkdm(struct clk *clk)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * omap2_clk_disable_clkdm_control - disable clkdm control on clk enable/disable
|
|
|
+ *
|
|
|
+ * Prevent the OMAP clock code from calling into the clockdomain code
|
|
|
+ * when a hardware clock in that clockdomain is enabled or disabled.
|
|
|
+ * Intended to be called at init time from omap*_clk_init(). No
|
|
|
+ * return value.
|
|
|
+ */
|
|
|
+void __init omap2_clk_disable_clkdm_control(void)
|
|
|
+{
|
|
|
+ clkdm_control = false;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* omap2_clk_dflt_find_companion - find companion clock to @clk
|
|
|
* @clk: struct clk * to find the companion clock of
|
|
@@ -268,7 +289,7 @@ void omap2_clk_disable(struct clk *clk)
|
|
|
clk->ops->disable(clk);
|
|
|
}
|
|
|
|
|
|
- if (clk->clkdm)
|
|
|
+ if (clkdm_control && clk->clkdm)
|
|
|
clkdm_clk_disable(clk->clkdm, clk);
|
|
|
|
|
|
if (clk->parent)
|
|
@@ -308,7 +329,7 @@ int omap2_clk_enable(struct clk *clk)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (clk->clkdm) {
|
|
|
+ if (clkdm_control && clk->clkdm) {
|
|
|
ret = clkdm_clk_enable(clk->clkdm, clk);
|
|
|
if (ret) {
|
|
|
WARN(1, "clock: %s: could not enable clockdomain %s: "
|
|
@@ -330,7 +351,7 @@ int omap2_clk_enable(struct clk *clk)
|
|
|
return 0;
|
|
|
|
|
|
oce_err3:
|
|
|
- if (clk->clkdm)
|
|
|
+ if (clkdm_control && clk->clkdm)
|
|
|
clkdm_clk_disable(clk->clkdm, clk);
|
|
|
oce_err2:
|
|
|
if (clk->parent)
|