diff options
| author | Robert Lee <rob.lee@linaro.org> | 2012-05-21 17:50:26 -0500 | 
|---|---|---|
| committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-06-05 08:49:10 +0200 | 
| commit | 565fa91f236524b6ba4872903dc9cc9c874493e6 (patch) | |
| tree | bf0872ac1d86158da8209341b4d1eef0755f9150 /arch/arm/mach-imx/mm-imx5.c | |
| parent | eee4f4003824b0887251a3ba4493217371816a57 (diff) | |
| download | olio-linux-3.10-565fa91f236524b6ba4872903dc9cc9c874493e6.tar.xz olio-linux-3.10-565fa91f236524b6ba4872903dc9cc9c874493e6.zip  | |
ARM: imx: clean and consolidate imx5 suspend and idle code
The imx5 idle code that existed in mm-imx5.c is moved to pm-imx5.c.
The imx5_pm_init call is now exported and called during the
MACHINE_START late_init in supported imx5 platforms.
Remove various enabling/disabling of the gpc_dvfs clock and
enable it once during initialization.  This is a very low
power clock that must be enabled during low power operations.
There are only two "suspend_state_t" imx5 low power modes ever
used.  STOP_POWER_OFF for suspend to mem and
WAIT_UNCLOCKED_POWER_OFF for idle and suspend to standby.  The
latter mode only requires 500 nanoseconds of extra hardware
exit time beyond a basic WFI operation (WAIT_CLOCKED mode) so
no other idle mode is necessary.  Given this information, it
is more efficient to keep the registers in the often used
WAIT_UNCLOCKED_POWER_OFF state and only to and from the
STOP_POWER_OFF register state as needed when suspend to
mem is required.
Signed-off-by: Robert Lee <rob.lee@linaro.org>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-imx/mm-imx5.c')
| -rw-r--r-- | arch/arm/mach-imx/mm-imx5.c | 21 | 
1 files changed, 1 insertions, 20 deletions
diff --git a/arch/arm/mach-imx/mm-imx5.c b/arch/arm/mach-imx/mm-imx5.c index feeee17da96..d84421e1467 100644 --- a/arch/arm/mach-imx/mm-imx5.c +++ b/arch/arm/mach-imx/mm-imx5.c @@ -16,7 +16,6 @@  #include <linux/clk.h>  #include <linux/pinctrl/machine.h> -#include <asm/system_misc.h>  #include <asm/mach/map.h>  #include <mach/hardware.h> @@ -24,24 +23,6 @@  #include <mach/devices-common.h>  #include <mach/iomux-v3.h> -static struct clk *gpc_dvfs_clk; - -static void imx5_idle(void) -{ -	/* gpc clock is needed for SRPG */ -	if (gpc_dvfs_clk == NULL) { -		gpc_dvfs_clk = clk_get(NULL, "gpc_dvfs"); -		if (IS_ERR(gpc_dvfs_clk)) -			return; -		clk_prepare(gpc_dvfs_clk); -	} -	clk_enable(gpc_dvfs_clk); -	mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF); -	if (!tzic_enable_wake()) -		cpu_do_idle(); -	clk_disable(gpc_dvfs_clk); -} -  /*   * Define the MX50 memory map.   */ @@ -105,7 +86,6 @@ void __init imx51_init_early(void)  	mxc_set_cpu_type(MXC_CPU_MX51);  	mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR));  	mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR)); -	arm_pm_idle = imx5_idle;  }  void __init imx53_init_early(void) @@ -241,4 +221,5 @@ void __init imx53_soc_init(void)  void __init imx51_init_late(void)  {  	mx51_neon_fixup(); +	imx51_pm_init();  }  |