Re: [PATCH 7/7] ARM: OMAP2+: PM: reorganize the powerdomain API in public and private parts

2012-09-13 Thread Jean Pihet
On Thu, Sep 13, 2012 at 2:11 AM, Kevin Hilman
khil...@deeprootsystems.com wrote:
 Jean Pihet jean.pi...@newoldbits.com writes:

 The newly added code for functional power states re-defines the
 API to query and control the power domains settings.

 The API is now split in the following parts in powerdomain.h:
 - the public or external API, to be used by external PM components:
   cpuidle, suspend, pm, clock* etc.
 - the private or internal API, to be used by the low level PM code
   only: powerdomain*, pm-debug, hwmod, voltage, clockdomain.

 The function omap_set_pwrdm_state is not used anymore and so is
 removed.

 No functional change is introduced by this patch.

 Note: the API reorganization in a public and private header files
 is not part of this patch, this comes as a subsequent clean-up
 patch series.

 Signed-off-by: Jean Pihet j-pi...@ti.com

 In addition to reorganizing the API, I suspect there are a handful of
 out-of-tree hacks, er, users, that will are using the internal state
 names, as well as the functions that should now only be internal.
The API clean-up series (planned after this one is in the queue) will
sort out the public vs private APIs using different header files and
static functions.

 As part of the subsequent cleanup series, it would it make sense to add
 a '_' prefix to the internal names as well to catch unintentional use of
 internal APIs?
Sure.


 Kevin

Thanks,
Jean
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 7/7] ARM: OMAP2+: PM: reorganize the powerdomain API in public and private parts

2012-09-12 Thread Jean Pihet
The newly added code for functional power states re-defines the
API to query and control the power domains settings.

The API is now split in the following parts in powerdomain.h:
- the public or external API, to be used by external PM components:
  cpuidle, suspend, pm, clock* etc.
- the private or internal API, to be used by the low level PM code
  only: powerdomain*, pm-debug, hwmod, voltage, clockdomain.

The function omap_set_pwrdm_state is not used anymore and so is
removed.

No functional change is introduced by this patch.

Note: the API reorganization in a public and private header files
is not part of this patch, this comes as a subsequent clean-up
patch series.

Signed-off-by: Jean Pihet j-pi...@ti.com
---
 arch/arm/mach-omap2/pm.c  |   62 
 arch/arm/mach-omap2/pm.h  |1 -
 arch/arm/mach-omap2/powerdomain.h |  112 +
 3 files changed, 63 insertions(+), 112 deletions(-)

diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c
index 9cb5ced..dfe702b 100644
--- a/arch/arm/mach-omap2/pm.c
+++ b/arch/arm/mach-omap2/pm.c
@@ -74,10 +74,6 @@ static void __init omap2_init_processor_devices(void)
}
 }
 
-/* Types of sleep_switch used in omap_set_pwrdm_state */
-#define FORCEWAKEUP_SWITCH 0
-#define LOWPOWERSTATE_SWITCH   1
-
 int __init omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused)
 {
if (clkdm-flags  CLKDM_CAN_ENABLE_AUTO)
@@ -89,64 +85,6 @@ int __init omap_pm_clkdms_setup(struct clockdomain *clkdm, 
void *unused)
 }
 
 /*
- * This sets pwrdm state (other than mpu  core. Currently only ON 
- * RET are supported.
- */
-int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 pwrst)
-{
-   u8 curr_pwrst, next_pwrst;
-   int sleep_switch = -1, ret = 0, hwsup = 0;
-
-   if (!pwrdm || IS_ERR(pwrdm))
-   return -EINVAL;
-
-   while (!(pwrdm-pwrsts  (1  pwrst))) {
-   if (pwrst == PWRDM_POWER_OFF)
-   return ret;
-   pwrst--;
-   }
-
-   next_pwrst = pwrdm_read_next_pwrst(pwrdm);
-   if (next_pwrst == pwrst)
-   return ret;
-
-   curr_pwrst = pwrdm_read_pwrst(pwrdm);
-   if (curr_pwrst  PWRDM_POWER_ON) {
-   if ((curr_pwrst  pwrst) 
-   (pwrdm-flags  PWRDM_HAS_LOWPOWERSTATECHANGE)) {
-   sleep_switch = LOWPOWERSTATE_SWITCH;
-   } else {
-   hwsup = clkdm_in_hwsup(pwrdm-pwrdm_clkdms[0]);
-   clkdm_wakeup(pwrdm-pwrdm_clkdms[0]);
-   sleep_switch = FORCEWAKEUP_SWITCH;
-   }
-   }
-
-   ret = pwrdm_set_next_pwrst(pwrdm, pwrst);
-   if (ret)
-   pr_err(%s: unable to set power state of powerdomain: %s\n,
-  __func__, pwrdm-name);
-
-   switch (sleep_switch) {
-   case FORCEWAKEUP_SWITCH:
-   if (hwsup)
-   clkdm_allow_idle(pwrdm-pwrdm_clkdms[0]);
-   else
-   clkdm_sleep(pwrdm-pwrdm_clkdms[0]);
-   break;
-   case LOWPOWERSTATE_SWITCH:
-   pwrdm_set_lowpwrstchange(pwrdm);
-   pwrdm_wait_transition(pwrdm);
-   pwrdm_state_switch(pwrdm);
-   break;
-   }
-
-   return ret;
-}
-
-
-
-/*
  * This API is to be called during init to set the various voltage
  * domains to the voltage as per the opp table. Typically we boot up
  * at the nominal voltage. So this function finds out the rate of
diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h
index 686137d..707e9cb 100644
--- a/arch/arm/mach-omap2/pm.h
+++ b/arch/arm/mach-omap2/pm.h
@@ -33,7 +33,6 @@ static inline int omap4_idle_init(void)
 extern void *omap3_secure_ram_storage;
 extern void omap3_pm_off_mode_enable(int);
 extern void omap_sram_idle(void);
-extern int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state);
 extern int omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused);
 extern int (*omap_pm_suspend)(void);
 
diff --git a/arch/arm/mach-omap2/powerdomain.h 
b/arch/arm/mach-omap2/powerdomain.h
index a29caec..dcd2315 100644
--- a/arch/arm/mach-omap2/powerdomain.h
+++ b/arch/arm/mach-omap2/powerdomain.h
@@ -24,6 +24,11 @@
 
 #include voltage.h
 
+/***
+ * External API, to be used by external PM components: cpuidle,
+ * suspend, pm, clock* etc.
+ ***/
+
 /* Powerdomain functional power states, used by the external API functions */
 enum pwrdm_func_state {
PWRDM_FUNC_PWRST_OFF= 0x0,
@@ -44,6 +49,64 @@ enum pwrdm_logic_mem_state {
PWRDM_MAX_LOGIC_MEM_PWRST   /* Last value, used as the max value */
 };
 
+struct clockdomain;
+struct powerdomain;
+
+struct powerdomain *pwrdm_lookup(const char *name);
+
+int pwrdm_for_each(int (*fn)(struct 

Re: [PATCH 7/7] ARM: OMAP2+: PM: reorganize the powerdomain API in public and private parts

2012-09-12 Thread Kevin Hilman
Jean Pihet jean.pi...@newoldbits.com writes:

 The newly added code for functional power states re-defines the
 API to query and control the power domains settings.

 The API is now split in the following parts in powerdomain.h:
 - the public or external API, to be used by external PM components:
   cpuidle, suspend, pm, clock* etc.
 - the private or internal API, to be used by the low level PM code
   only: powerdomain*, pm-debug, hwmod, voltage, clockdomain.

 The function omap_set_pwrdm_state is not used anymore and so is
 removed.

 No functional change is introduced by this patch.

 Note: the API reorganization in a public and private header files
 is not part of this patch, this comes as a subsequent clean-up
 patch series.

 Signed-off-by: Jean Pihet j-pi...@ti.com

In addition to reorganizing the API, I suspect there are a handful of
out-of-tree hacks, er, users, that will are using the internal state
names, as well as the functions that should now only be internal.

As part of the subsequent cleanup series, it would it make sense to add
a '_' prefix to the internal names as well to catch unintentional use of
internal APIs?

Kevin
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html