[PATCH v4] ARM: pxa: hx4700: Fix basic suspend/resume
Haojian Zhuang
haojian.zhuang at gmail.com
Sun Jul 1 02:55:05 EDT 2012
On Mon, Jun 11, 2012 at 10:31 PM, Paul Parsons <lost.distance at yahoo.com> wrote:
> Basic suspend/resume is fixed by ensuring that the PGSR registers are
> set correctly before sleep mode is entered. In particular four of the
> active low resets need to be driven high while in sleep mode, otherwise
> the unit resets itself instead of suspending. Another problem was that
> the PCFR_GPROD bit is set by the HTC bootloader; this caused GPIO reset
> (i.e. the reset button) to fail immediately after returning from sleep
> mode.
>
> Signed-off-by: Paul Parsons <lost.distance at yahoo.com>
> Cc: Philipp Zabel <philipp.zabel at gmail.com>
> ---
>
> V4:
> Rebased from linux-3.3-rc6 to linux-3.5-rc2.
>
> arch/arm/mach-pxa/hx4700.c | 15 ++++++++++++++-
> 1 files changed, 14 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c
> index d09da6a..d3de84b 100644
> --- a/arch/arm/mach-pxa/hx4700.c
> +++ b/arch/arm/mach-pxa/hx4700.c
> @@ -127,7 +127,11 @@ static unsigned long hx4700_pin_config[] __initdata = {
> GPIO19_SSP2_SCLK,
> GPIO86_SSP2_RXD,
> GPIO87_SSP2_TXD,
> - GPIO88_GPIO,
> + GPIO88_GPIO | MFP_LPM_DRIVE_HIGH, /* TSC2046_CS */
> +
> + /* BQ24022 Regulator */
> + GPIO72_GPIO | MFP_LPM_KEEP_OUTPUT, /* BQ24022_nCHARGE_EN */
> + GPIO96_GPIO | MFP_LPM_KEEP_OUTPUT, /* BQ24022_ISET2 */
>
> /* HX4700 specific input GPIOs */
> GPIO12_GPIO | WAKEUP_ON_EDGE_RISE, /* ASIC3_IRQ */
> @@ -135,6 +139,10 @@ static unsigned long hx4700_pin_config[] __initdata = {
> GPIO14_GPIO, /* nWLAN_IRQ */
>
> /* HX4700 specific output GPIOs */
> + GPIO61_GPIO | MFP_LPM_DRIVE_HIGH, /* W3220_nRESET */
> + GPIO71_GPIO | MFP_LPM_DRIVE_HIGH, /* ASIC3_nRESET */
> + GPIO81_GPIO | MFP_LPM_DRIVE_HIGH, /* CPU_GP_nRESET */
> + GPIO116_GPIO | MFP_LPM_DRIVE_HIGH, /* CPU_HW_nRESET */
> GPIO102_GPIO | MFP_LPM_DRIVE_LOW, /* SYNAPTICS_POWER_ON */
>
> GPIO10_GPIO, /* GSM_IRQ */
> @@ -872,14 +880,19 @@ static struct gpio global_gpios[] = {
> { GPIO110_HX4700_LCD_LVDD_3V3_ON, GPIOF_OUT_INIT_HIGH, "LCD_LVDD" },
> { GPIO111_HX4700_LCD_AVDD_3V3_ON, GPIOF_OUT_INIT_HIGH, "LCD_AVDD" },
> { GPIO32_HX4700_RS232_ON, GPIOF_OUT_INIT_HIGH, "RS232_ON" },
> + { GPIO61_HX4700_W3220_nRESET, GPIOF_OUT_INIT_HIGH, "W3220_nRESET" },
> { GPIO71_HX4700_ASIC3_nRESET, GPIOF_OUT_INIT_HIGH, "ASIC3_nRESET" },
> + { GPIO81_HX4700_CPU_GP_nRESET, GPIOF_OUT_INIT_HIGH, "CPU_GP_nRESET" },
> { GPIO82_HX4700_EUART_RESET, GPIOF_OUT_INIT_HIGH, "EUART_RESET" },
> + { GPIO116_HX4700_CPU_HW_nRESET, GPIOF_OUT_INIT_HIGH, "CPU_HW_nRESET" },
> };
>
> static void __init hx4700_init(void)
> {
> int ret;
>
> + PCFR = PCFR_GPR_EN | PCFR_OPDE;
> +
> pxa2xx_mfp_config(ARRAY_AND_SIZE(hx4700_pin_config));
> gpio_set_wake(GPIO12_HX4700_ASIC3_IRQ, 1);
> ret = gpio_request_array(ARRAY_AND_SIZE(global_gpios));
> --
> 1.7.3.4
>
>
>
>
Applied
Regards
Haojian
More information about the linux-arm-kernel
mailing list