This is a more proper isolation of the code. Done in preparation of making
PRM an individual driver.

Signed-off-by: Tero Kristo <[email protected]>
---
 arch/arm/mach-omap2/pm34xx.c  |   49 +----------------------------------------
 arch/arm/mach-omap2/prm3xxx.c |   45 +++++++++++++++++++++++++++++++++++++
 arch/arm/mach-omap2/prm3xxx.h |    1 +
 3 files changed, 47 insertions(+), 48 deletions(-)

diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 74d03f2..6d02573 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -353,53 +353,6 @@ restore:
 #define omap3_pm_suspend NULL
 #endif /* CONFIG_SUSPEND */
 
-
-/**
- * omap3_iva_idle(): ensure IVA is in idle so it can be put into
- *                   retention
- *
- * In cases where IVA2 is activated by bootcode, it may prevent
- * full-chip retention or off-mode because it is not idle.  This
- * function forces the IVA2 into idle state so it can go
- * into retention/off and thus allow full-chip retention/off.
- *
- **/
-static void __init omap3_iva_idle(void)
-{
-       /* ensure IVA2 clock is disabled */
-       omap2_cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN);
-
-       /* if no clock activity, nothing else to do */
-       if (!(omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSTST) &
-             OMAP3430_CLKACTIVITY_IVA2_MASK))
-               return;
-
-       /* Reset IVA2 */
-       omap2_prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK |
-                         OMAP3430_RST2_IVA2_MASK |
-                         OMAP3430_RST3_IVA2_MASK,
-                         OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
-
-       /* Enable IVA2 clock */
-       omap2_cm_write_mod_reg(OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_MASK,
-                        OMAP3430_IVA2_MOD, CM_FCLKEN);
-
-       /* Set IVA2 boot mode to 'idle' */
-       omap3_ctrl_set_iva_bootmode_idle();
-
-       /* Un-reset IVA2 */
-       omap2_prm_write_mod_reg(0, OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
-
-       /* Disable IVA2 clock */
-       omap2_cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN);
-
-       /* Reset IVA2 */
-       omap2_prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK |
-                         OMAP3430_RST2_IVA2_MASK |
-                         OMAP3430_RST3_IVA2_MASK,
-                         OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
-}
-
 static void __init omap3_d2d_idle(void)
 {
        u16 mask, padconf;
@@ -503,7 +456,7 @@ static void __init prcm_setup_regs(void)
        /*
         * We need to idle iva2_pwrdm even on am3703 with no iva2.
         */
-       omap3_iva_idle();
+       omap3xxx_prm_iva_idle();
 
        omap3_d2d_idle();
 }
diff --git a/arch/arm/mach-omap2/prm3xxx.c b/arch/arm/mach-omap2/prm3xxx.c
index 014ba70d..a575b69 100644
--- a/arch/arm/mach-omap2/prm3xxx.c
+++ b/arch/arm/mach-omap2/prm3xxx.c
@@ -28,6 +28,7 @@
 #include "prm-regbits-34xx.h"
 #include "cm3xxx.h"
 #include "cm-regbits-34xx.h"
+#include "control.h"
 
 static const struct omap_prcm_irq omap3_prcm_irqs[] = {
        OMAP_PRCM_IRQ("wkup",   0,      0),
@@ -329,6 +330,50 @@ static u32 omap3xxx_prm_read_reset_sources(void)
        return r;
 }
 
+/**
+ * omap3xxx_prm_iva_idle - ensure IVA is in idle so it can be put into 
retention
+ *
+ * In cases where IVA2 is activated by bootcode, it may prevent
+ * full-chip retention or off-mode because it is not idle.  This
+ * function forces the IVA2 into idle state so it can go
+ * into retention/off and thus allow full-chip retention/off.
+ */
+void omap3xxx_prm_iva_idle(void)
+{
+       /* ensure IVA2 clock is disabled */
+       omap2_cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN);
+
+       /* if no clock activity, nothing else to do */
+       if (!(omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSTST) &
+             OMAP3430_CLKACTIVITY_IVA2_MASK))
+               return;
+
+       /* Reset IVA2 */
+       omap2_prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK |
+                               OMAP3430_RST2_IVA2_MASK |
+                               OMAP3430_RST3_IVA2_MASK,
+                               OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
+
+       /* Enable IVA2 clock */
+       omap2_cm_write_mod_reg(OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_MASK,
+                              OMAP3430_IVA2_MOD, CM_FCLKEN);
+
+       /* Set IVA2 boot mode to 'idle' */
+       omap3_ctrl_set_iva_bootmode_idle();
+
+       /* Un-reset IVA2 */
+       omap2_prm_write_mod_reg(0, OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
+
+       /* Disable IVA2 clock */
+       omap2_cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN);
+
+       /* Reset IVA2 */
+       omap2_prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK |
+                               OMAP3430_RST2_IVA2_MASK |
+                               OMAP3430_RST3_IVA2_MASK,
+                               OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
+}
+
 /* Powerdomain low-level functions */
 
 static int omap3_pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
diff --git a/arch/arm/mach-omap2/prm3xxx.h b/arch/arm/mach-omap2/prm3xxx.h
index 14a5fbc..007ff59 100644
--- a/arch/arm/mach-omap2/prm3xxx.h
+++ b/arch/arm/mach-omap2/prm3xxx.h
@@ -163,6 +163,7 @@ extern void omap3xxx_prm_dpll3_reset(void);
 extern int __init omap3xxx_prm_init(void);
 extern u32 omap3xxx_prm_get_reset_sources(void);
 int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits);
+void omap3xxx_prm_iva_idle(void);
 
 #endif /* __ASSEMBLER */
 
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to