ARM: OMAP2+: clock: add support for specific CM ops to ti_clk_ll_ops
authorTero Kristo <t-kristo@ti.com>
Tue, 3 Mar 2015 11:47:08 +0000 (13:47 +0200)
committerTero Kristo <t-kristo@ti.com>
Tue, 2 Jun 2015 09:31:13 +0000 (12:31 +0300)
Clock driver requires access to some CM API functions once the code
is being moved under the clock driver from the platform directory.
Gate type clock requires access to cm_wait_module_ready and
cm_split_idlest_reg functions, which are both used for waiting until
the module being clocked has been successfully activated. These CM
APIs are now exported through the ti_clk_ll_ops struct.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
arch/arm/mach-omap2/clock.c
include/linux/clk/ti.h

index d6afc12..7a5713d 100644 (file)
@@ -122,6 +122,8 @@ static struct ti_clk_ll_ops omap_clk_ll_ops = {
        .clk_writel = clk_memmap_writel,
        .clkdm_clk_enable = clkdm_clk_enable,
        .clkdm_clk_disable = clkdm_clk_disable,
+       .cm_wait_module_ready = omap_cm_wait_module_ready,
+       .cm_split_idlest_reg = cm_split_idlest_reg,
 };
 
 /**
index fcf9184..25eea89 100644 (file)
@@ -243,6 +243,8 @@ struct clk_omap_reg {
  * @clk_writel: pointer to register write function
  * @clkdm_clk_enable: pointer to clockdomain enable function
  * @clkdm_clk_disable: pointer to clockdomain disable function
+ * @cm_wait_module_ready: pointer to CM module wait ready function
+ * @cm_split_idlest_reg: pointer to CM module function to split idlest reg
  *
  * Low-level ops are generally used by the basic clock types (clk-gate,
  * clk-mux, clk-divider etc.) to provide support for various low-level
@@ -256,6 +258,10 @@ struct ti_clk_ll_ops {
        int     (*clkdm_clk_enable)(struct clockdomain *clkdm, struct clk *clk);
        int     (*clkdm_clk_disable)(struct clockdomain *clkdm,
                                     struct clk *clk);
+       int     (*cm_wait_module_ready)(u8 part, s16 prcm_mod, u16 idlest_reg,
+                                       u8 idlest_shift);
+       int     (*cm_split_idlest_reg)(void __iomem *idlest_reg, s16 *prcm_inst,
+                                      u8 *idlest_reg_id);
 };
 
 extern struct ti_clk_ll_ops *ti_clk_ll_ops;