diff options
author | Ranjani Vaidyanathan <ra5478@freescale.com> | 2010-11-18 13:42:21 -0600 |
---|---|---|
committer | Ranjani Vaidyanathan <ra5478@freescale.com> | 2010-12-01 09:21:31 -0600 |
commit | ddb57748dab2c770f71b963133e5c79719dc7af4 (patch) | |
tree | e2fb1ebff8182b834d92ac3f3bdd71cc02150c12 /arch | |
parent | 9c6fdf40cee77b96efd031c850304844a5cf4020 (diff) |
ENGR00133828-2: MX50 EVK: Fix FEC GPIO/IOMUX settings in suspend mode.
Fix FEC GPIO/IOMUX settings in suspend to reduce board level power.
Signed-off-by: Ranjani Vaidyanathan <ra5478@freescale.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-mx5/mx50_rdp.c | 42 | ||||
-rw-r--r-- | arch/arm/mach-mx5/pm.c | 9 |
2 files changed, 30 insertions, 21 deletions
diff --git a/arch/arm/mach-mx5/mx50_rdp.c b/arch/arm/mach-mx5/mx50_rdp.c index 39b36e100a3d..edd4d7256882 100644 --- a/arch/arm/mach-mx5/mx50_rdp.c +++ b/arch/arm/mach-mx5/mx50_rdp.c @@ -1232,7 +1232,23 @@ static struct gpmi_nfc_platform_data gpmi_nfc_platform_data = { .partition_count = 0, }; -static void mx50_suspend_enter() +static void fec_gpio_iomux_init() +{ + struct pad_desc iomux_setting = + MX50_PAD_I2C3_SDA__GPIO_6_23; + + /* Enable the Pull/keeper */ + iomux_setting.pad_ctrl = 0x8e; + mxc_iomux_v3_setup_pad(&iomux_setting); + gpio_request(FEC_EN, "fec-en"); + gpio_direction_output(FEC_EN, 0); + gpio_request(FEC_RESET_B, "fec-reset_b"); + gpio_direction_output(FEC_RESET_B, 0); + udelay(500); + gpio_set_value(FEC_RESET_B, 1); +} + +static void fec_gpio_iomux_deinit() { struct pad_desc iomux_setting = MX50_PAD_I2C3_SDA__GPIO_6_23; @@ -1240,24 +1256,26 @@ static void mx50_suspend_enter() /* Disable the Pull/keeper */ iomux_setting.pad_ctrl = 0xE; mxc_iomux_v3_setup_pad(&iomux_setting); + gpio_request(FEC_EN, "fec-en"); + gpio_direction_input(FEC_EN); + gpio_request(FEC_RESET_B, "fec-reset_b"); + gpio_direction_input(FEC_RESET_B); +} +static void mx50_suspend_enter() +{ mxc_iomux_v3_setup_multiple_pads( suspend_enter_pads, ARRAY_SIZE(suspend_enter_pads)); + fec_gpio_iomux_deinit(); } static void mx50_suspend_exit() { - struct pad_desc iomux_setting = - MX50_PAD_I2C3_SDA__GPIO_6_23; - mxc_iomux_v3_setup_multiple_pads( suspend_exit_pads, ARRAY_SIZE(suspend_exit_pads)); - - /* Enable the Pull/keeper */ - iomux_setting.pad_ctrl = 0x8e; - mxc_iomux_v3_setup_pad(&iomux_setting); + fec_gpio_iomux_init(); } static struct mxc_pm_platform_data mx50_pm_data = { @@ -1338,13 +1356,7 @@ static void __init mx50_rdp_io_init(void) gpio_request(SGTL_AMP_SHDN, "sgtl5000-amp-shdn"); gpio_direction_output(SGTL_AMP_SHDN, 1); - gpio_request(FEC_EN, "fec-en"); - gpio_direction_output(FEC_EN, 0); - - gpio_request(FEC_RESET_B, "fec-reset_b"); - gpio_direction_output(FEC_RESET_B, 0); - udelay(500); - gpio_set_value(FEC_RESET_B, 1); + fec_gpio_iomux_init(); /* USB OTG PWR */ gpio_request(USB_OTG_PWR, "usb otg power"); diff --git a/arch/arm/mach-mx5/pm.c b/arch/arm/mach-mx5/pm.c index 8c964e82260e..6107c3526c16 100644 --- a/arch/arm/mach-mx5/pm.c +++ b/arch/arm/mach-mx5/pm.c @@ -22,6 +22,7 @@ #include <linux/cpufreq.h> #include <linux/iram_alloc.h> #include <linux/fsl_devices.h> +#include <asm/mach-types.h> #include <asm/cacheflush.h> #include <asm/tlb.h> #include <asm/mach/map.h> @@ -61,8 +62,6 @@ void *suspend_iram_base; void (*suspend_in_iram)(void *sdclk_iomux_addr) = NULL; void __iomem *suspend_param1; -#define FEC_EN (5*32 + 23) /*GPIO_6_23*/ - static int mx5_suspend_enter(suspend_state_t state) { if (gpc_dvfs_clk == NULL) @@ -95,13 +94,11 @@ static int mx5_suspend_enter(suspend_state_t state) __raw_writel(0, MXC_SRPG_EMPGC0_SRPGCR); __raw_writel(0, MXC_SRPG_EMPGC1_SRPGCR); } else { - /* Setup GPIO/IOMUX settings to lower power. */ - if (pm_data->suspend_enter) + if (machine_is_mx50_rdp() && pm_data->suspend_enter) pm_data->suspend_enter(); /* Suspend now. */ suspend_in_iram(databahn_base); - - if (pm_data->suspend_exit) + if (machine_is_mx50_rdp() && pm_data->suspend_exit) pm_data->suspend_exit(); } } else { |