diff options
author | Ranjani Vaidyanathan <ra5478@freescale.com> | 2012-11-02 16:11:38 -0500 |
---|---|---|
committer | Ranjani Vaidyanathan <ra5478@freescale.com> | 2012-11-05 16:35:08 -0600 |
commit | 30de6f2aa79c904848704271b7bab17d2f3c4805 (patch) | |
tree | 62ed07bf9dd6c4e833ab7accf66cb3c367e99004 /arch/arm/mach-mx6/board-mx6sl_evk.c | |
parent | 24a51586c5a00ddf8b5e5de749f8269951f2de3f (diff) |
ENGR00232327 MX6SL-Optimize board level suspend power
Improve the board level suspend power by configuring
various IOMUX pads to low power state.
Signed-off-by: Ranjani Vaidyanathan <ra5478@freescale.com>
Diffstat (limited to 'arch/arm/mach-mx6/board-mx6sl_evk.c')
-rw-r--r-- | arch/arm/mach-mx6/board-mx6sl_evk.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/arch/arm/mach-mx6/board-mx6sl_evk.c b/arch/arm/mach-mx6/board-mx6sl_evk.c index 4c9c4d36e740..47e8a8954c7d 100644 --- a/arch/arm/mach-mx6/board-mx6sl_evk.c +++ b/arch/arm/mach-mx6/board-mx6sl_evk.c @@ -77,6 +77,9 @@ static int spdc_sel; static int max17135_regulator_init(struct max17135 *max17135); +static void mx6sl_evk_suspend_enter(void); +static void mx6sl_evk_suspend_exit(void); + struct clk *extern_audio_root; extern char *gp_reg_id; @@ -122,6 +125,12 @@ enum sd_pad_mode { SD_PAD_MODE_HIGH_SPEED, }; +static const struct pm_platform_data mx6sl_evk_pm_data __initconst = { + .name = "imx_pm", + .suspend_enter = mx6sl_evk_suspend_enter, + .suspend_exit = mx6sl_evk_suspend_exit, +}; + static int __init csi_setup(char *__unused) { csi_enabled = 1; @@ -1411,6 +1420,35 @@ static void __init uart2_init(void) ARRAY_SIZE(mx6sl_uart2_pads)); imx6sl_add_imx_uart(1, &mx6sl_evk_uart1_data); } + +static void mx6sl_evk_suspend_enter() +{ + iomux_v3_cfg_t *p = suspend_enter_pads; + int i; + + /* Set PADCTRL to 0 for all IOMUX. */ + for (i = 0; i < ARRAY_SIZE(suspend_enter_pads); i++) { + suspend_exit_pads[i] = *p; + *p &= ~MUX_PAD_CTRL_MASK; + /* Enable the Pull down and the keeper + * Set the drive strength to 0. + */ + *p |= ((u64)0x3000 << MUX_PAD_CTRL_SHIFT); + p++; + } + mxc_iomux_v3_get_multiple_pads(suspend_exit_pads, + ARRAY_SIZE(suspend_exit_pads)); + mxc_iomux_v3_setup_multiple_pads(suspend_enter_pads, + ARRAY_SIZE(suspend_enter_pads)); + +} + +static void mx6sl_evk_suspend_exit() +{ + mxc_iomux_v3_setup_multiple_pads(suspend_exit_pads, + ARRAY_SIZE(suspend_exit_pads)); +} + /*! * Board specific initialization. */ @@ -1539,6 +1577,7 @@ static void __init mx6_evk_init(void) /* Register charger chips */ platform_device_register(&evk_max8903_charger_1); pm_power_off = mx6_snvs_poweroff; + imx6q_add_pm_imx(0, &mx6sl_evk_pm_data); } extern void __iomem *twd_base; |