summaryrefslogtreecommitdiff
path: root/arch/arm/mach-mx6/board-mx6sl_evk.c
diff options
context:
space:
mode:
authorRanjani Vaidyanathan <ra5478@freescale.com>2012-11-02 16:11:38 -0500
committerRanjani Vaidyanathan <ra5478@freescale.com>2012-11-05 16:35:08 -0600
commit30de6f2aa79c904848704271b7bab17d2f3c4805 (patch)
tree62ed07bf9dd6c4e833ab7accf66cb3c367e99004 /arch/arm/mach-mx6/board-mx6sl_evk.c
parent24a51586c5a00ddf8b5e5de749f8269951f2de3f (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.c39
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;