]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ARM: OMAP3: clock: add API to enable/disable autoidle for a single clock
authorTero Kristo <t-kristo@ti.com>
Fri, 11 Oct 2013 16:15:32 +0000 (19:15 +0300)
committerPaul Walmsley <paul@pwsan.com>
Sat, 19 Oct 2013 16:11:51 +0000 (10:11 -0600)
Some drivers require direct access to the autoidle functionality of the
interface clocks. Added clock APIs for these, so that the drivers do not
need to access CM registers directly.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
Signed-off-by: Paul Walmsley <paul@pwsan.com>
arch/arm/mach-omap2/clock.c
arch/arm/mach-omap2/clock.h

index 0c38ca96c840ad596017b60f3d0801ae973a74c1..c7c5d31e90829141373662f32ffb39ce6c32637a 100644 (file)
@@ -542,6 +542,44 @@ int omap2_clk_disable_autoidle_all(void)
        return 0;
 }
 
+/**
+ * omap2_clk_deny_idle - disable autoidle on an OMAP clock
+ * @clk: struct clk * to disable autoidle for
+ *
+ * Disable autoidle on an OMAP clock.
+ */
+int omap2_clk_deny_idle(struct clk *clk)
+{
+       struct clk_hw_omap *c;
+
+       if (__clk_get_flags(clk) & CLK_IS_BASIC)
+               return -EINVAL;
+
+       c = to_clk_hw_omap(__clk_get_hw(clk));
+       if (c->ops && c->ops->deny_idle)
+               c->ops->deny_idle(c);
+       return 0;
+}
+
+/**
+ * omap2_clk_allow_idle - enable autoidle on an OMAP clock
+ * @clk: struct clk * to enable autoidle for
+ *
+ * Enable autoidle on an OMAP clock.
+ */
+int omap2_clk_allow_idle(struct clk *clk)
+{
+       struct clk_hw_omap *c;
+
+       if (__clk_get_flags(clk) & CLK_IS_BASIC)
+               return -EINVAL;
+
+       c = to_clk_hw_omap(__clk_get_hw(clk));
+       if (c->ops && c->ops->allow_idle)
+               c->ops->allow_idle(c);
+       return 0;
+}
+
 /**
  * omap2_clk_enable_init_clocks - prepare & enable a list of clocks
  * @clk_names: ptr to an array of strings of clock names to enable
index 7aa32cd292f92bc5df52b0a108e99d49a3e3c019..82916cc82c920d6fb7d08dcec444dded07ede0bb 100644 (file)
@@ -411,6 +411,8 @@ void omap2_clk_dflt_find_idlest(struct clk_hw_omap *clk,
 void omap2_init_clk_hw_omap_clocks(struct clk *clk);
 int omap2_clk_enable_autoidle_all(void);
 int omap2_clk_disable_autoidle_all(void);
+int omap2_clk_allow_idle(struct clk *clk);
+int omap2_clk_deny_idle(struct clk *clk);
 void omap2_clk_enable_init_clocks(const char **clk_names, u8 num_clocks);
 int omap2_clk_switch_mpurate_at_boot(const char *mpurate_ck_name);
 void omap2_clk_print_new_rates(const char *hfclkin_ck_name,