From b7f3bca3076832f388a5e85aa9c0aa934f38a59d Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=BC=A0=E6=99=B4?= Date: Thu, 6 Oct 2011 22:17:03 -0700 Subject: [PATCH 1/1] when in sleep remove the processing of gpio to board --- arch/arm/mach-rk29/board-rk29-a22.c | 170 +++++++++++++++++++++ arch/arm/mach-rk29/board-rk29-ddr3sdk.c | 79 +++++----- arch/arm/mach-rk29/board-rk29-phonesdk.c | 187 +++++++++++++++++++++++ arch/arm/mach-rk29/gpio.c | 15 +- arch/arm/mach-rk29/pm.c | 6 +- arch/arm/mach-rk29/spi_sram.c | 171 +-------------------- 6 files changed, 406 insertions(+), 222 deletions(-) diff --git a/arch/arm/mach-rk29/board-rk29-a22.c b/arch/arm/mach-rk29/board-rk29-a22.c index 8b3e12b71103..9f204db530d0 100755 --- a/arch/arm/mach-rk29/board-rk29-a22.c +++ b/arch/arm/mach-rk29/board-rk29-a22.c @@ -1379,6 +1379,176 @@ struct wm831x_pdata wm831x_platdata = { .isink = {&wm831x_regulator_init_isink[0], &wm831x_regulator_init_isink[1]}, }; #endif +#if defined(CONFIG_RK29_GPIO_SUSPEND) + +static void gpio_set_request(void) +{ + gpio_request(RK29_PIN6_PA0, NULL); + gpio_request(RK29_PIN6_PA1, NULL); + gpio_request(RK29_PIN6_PA2, NULL); + gpio_request(RK29_PIN6_PA3, NULL); + gpio_request(RK29_PIN6_PA4, NULL); + gpio_request(RK29_PIN6_PA5, NULL); + gpio_request(RK29_PIN6_PA6, NULL); + + gpio_request(RK29_PIN2_PB0, NULL); + gpio_request(RK29_PIN2_PB3, NULL); + + gpio_request(RK29_PIN1_PA4, NULL); + gpio_request(RK29_PIN1_PA3, NULL); + + gpio_request(RK29_PIN2_PC7, NULL); + gpio_request(RK29_PIN2_PC6, NULL); + gpio_request(RK29_PIN2_PC5, NULL); + gpio_request(RK29_PIN2_PC4, NULL); + gpio_request(RK29_PIN2_PC3, NULL); + gpio_request(RK29_PIN2_PC2, NULL); + gpio_request(RK29_PIN2_PC1, NULL); + gpio_request(RK29_PIN2_PC0, NULL); + +} +static void gpio_set_free(void) +{ + gpio_free(RK29_PIN6_PA0); + gpio_free(RK29_PIN6_PA1); + gpio_free(RK29_PIN6_PA2); + gpio_free(RK29_PIN6_PA3); + gpio_free(RK29_PIN6_PA4); + gpio_free(RK29_PIN6_PA5); + gpio_free(RK29_PIN6_PA6); + + gpio_free(RK29_PIN2_PB0); + gpio_free(RK29_PIN2_PB3); + + gpio_free(RK29_PIN1_PA4); + gpio_free(RK29_PIN1_PA3); + + gpio_free(RK29_PIN2_PC7); + gpio_free(RK29_PIN2_PC6); + gpio_free(RK29_PIN2_PC5); + gpio_free(RK29_PIN2_PC4); + gpio_free(RK29_PIN2_PC3); + gpio_free(RK29_PIN2_PC2); + gpio_free(RK29_PIN2_PC1); + gpio_free(RK29_PIN2_PC0); +} +static void rk29_keygpio_suspend(void) +{ + gpio_pull_updown(RK29_PIN6_PA0, 0); + gpio_pull_updown(RK29_PIN6_PA1, 0); + gpio_pull_updown(RK29_PIN6_PA2, 0); + gpio_pull_updown(RK29_PIN6_PA3, 0); + gpio_pull_updown(RK29_PIN6_PA4, 0); + gpio_pull_updown(RK29_PIN6_PA5, 0); + gpio_pull_updown(RK29_PIN6_PA6, 0);//key pullup/pulldown disable + + gpio_pull_updown(RK29_PIN2_PB0, 0); + gpio_pull_updown(RK29_PIN2_PB3, 0); + + +} +static void rk29_keygpio_resume(void) +{ + gpio_pull_updown(RK29_PIN6_PA0, 1); + gpio_pull_updown(RK29_PIN6_PA1, 1); + gpio_pull_updown(RK29_PIN6_PA2, 1); + gpio_pull_updown(RK29_PIN6_PA3, 1); + gpio_pull_updown(RK29_PIN6_PA4, 1); + gpio_pull_updown(RK29_PIN6_PA5, 1); + gpio_pull_updown(RK29_PIN6_PA6, 1);//key pullup/pulldown enable + + gpio_pull_updown(RK29_PIN2_PB0, 1); + gpio_pull_updown(RK29_PIN2_PB3, 1); +} +static void spi_gpio_suspend(void) +{ + rk29_mux_api_set(GPIO1A4_EMMCWRITEPRT_SPI0CS1_NAME,GPIO1L_GPIO1A4); //set iomux is gpio mode + rk29_mux_api_set(GPIO1A3_EMMCDETECTN_SPI1CS1_NAME,GPIO1L_GPIO1A3); + + rk29_mux_api_set(GPIO2C7_SPI1RXD_NAME,GPIO2H_GPIO2C7); + rk29_mux_api_set(GPIO2C6_SPI1TXD_NAME,GPIO2H_GPIO2C6); + //rk29_mux_api_set(GPIO2C5_SPI1CSN0_NAME,GPIO2H_GPIO2C5); + rk29_mux_api_set(GPIO2C4_SPI1CLK_NAME,GPIO2H_GPIO2C4); + rk29_mux_api_set(GPIO2C3_SPI0RXD_NAME,GPIO2H_GPIO2C3); + rk29_mux_api_set(GPIO2C2_SPI0TXD_NAME,GPIO2H_GPIO2C2); + rk29_mux_api_set(GPIO2C1_SPI0CSN0_NAME,GPIO2H_GPIO2C1); + rk29_mux_api_set(GPIO2C0_SPI0CLK_NAME,GPIO2H_GPIO2C0); + + gpio_direction_input(RK29_PIN1_PA4); //set gpio is input + gpio_direction_input(RK29_PIN1_PA3); + gpio_direction_input(RK29_PIN2_PC7); + gpio_direction_input(RK29_PIN2_PC6); + // gpio_direction_input(RK29_PIN2_PC5); + gpio_direction_input(RK29_PIN2_PC4); + gpio_direction_input(RK29_PIN2_PC3); + gpio_direction_input(RK29_PIN2_PC2); + gpio_direction_input(RK29_PIN2_PC1); + gpio_direction_input(RK29_PIN2_PC0); + + gpio_pull_updown(RK29_PIN1_PA4, 0); //set gpio pullup/down disable + gpio_pull_updown(RK29_PIN1_PA3, 0); + + gpio_pull_updown(RK29_PIN2_PC7, 0); + gpio_pull_updown(RK29_PIN2_PC6, 0); + //gpio_pull_updown(RK29_PIN2_PC5, 0); + gpio_pull_updown(RK29_PIN2_PC4, 0); + gpio_pull_updown(RK29_PIN2_PC3, 0); + gpio_pull_updown(RK29_PIN2_PC2, 0); + gpio_pull_updown(RK29_PIN2_PC1, 0); + gpio_pull_updown(RK29_PIN2_PC0, 0); + +} +static void spi_gpio_resume(void) +{ + gpio_pull_updown(RK29_PIN1_PA4, 1); //set gpio pullup/down enable + gpio_pull_updown(RK29_PIN1_PA3, 1); + + gpio_pull_updown(RK29_PIN2_PC7, 1); + gpio_pull_updown(RK29_PIN2_PC6, 1); + //gpio_pull_updown(RK29_PIN2_PC5, 1); + gpio_pull_updown(RK29_PIN2_PC4, 1); + gpio_pull_updown(RK29_PIN2_PC3, 1); + gpio_pull_updown(RK29_PIN2_PC2, 1); + gpio_pull_updown(RK29_PIN2_PC1, 1); + gpio_pull_updown(RK29_PIN2_PC0, 1); + + rk29_mux_api_set(GPIO1A4_EMMCWRITEPRT_SPI0CS1_NAME,GPIO1L_SPI0_CSN1); //set iomux is spi mode + rk29_mux_api_set(GPIO1A3_EMMCDETECTN_SPI1CS1_NAME,GPIO1L_SPI1_CSN1); + + rk29_mux_api_set(GPIO2C7_SPI1RXD_NAME,GPIO2H_SPI1_RXD); + rk29_mux_api_set(GPIO2C6_SPI1TXD_NAME,GPIO2H_SPI1_TXD); + //rk29_mux_api_set(GPIO2C5_SPI1CSN0_NAME,GPIO2H_SPI1_CSN0); + rk29_mux_api_set(GPIO2C4_SPI1CLK_NAME, GPIO2H_SPI1_CLK); + rk29_mux_api_set(GPIO2C3_SPI0RXD_NAME,GPIO2H_SPI0_RXD); + rk29_mux_api_set(GPIO2C2_SPI0TXD_NAME,GPIO2H_SPI0_TXD); + rk29_mux_api_set(GPIO2C1_SPI0CSN0_NAME,GPIO2H_SPI0_CSN0); + rk29_mux_api_set(GPIO2C0_SPI0CLK_NAME,GPIO2H_SPI0_CLK); + + +} + +void rk29_setgpio_suspend_board(void) +{ + gpio_set_request(); + rk29_keygpio_suspend(); + spi_gpio_suspend(); + gpio_set_free(); +} + +void rk29_setgpio_resume_board(void) +{ + gpio_set_request(); + rk29_keygpio_resume(); + spi_gpio_resume(); + gpio_set_free(); + +} +#else +void rk29_setgpio_suspend_board(void) +{} +void rk29_setgpio_resume_board(void) +{} +#endif diff --git a/arch/arm/mach-rk29/board-rk29-ddr3sdk.c b/arch/arm/mach-rk29/board-rk29-ddr3sdk.c index a739fefdf1ec..87762c6050d6 100755 --- a/arch/arm/mach-rk29/board-rk29-ddr3sdk.c +++ b/arch/arm/mach-rk29/board-rk29-ddr3sdk.c @@ -167,44 +167,6 @@ struct rk29_nand_platform_data rk29_nand_data = { #define TOUCH_SCREEN_DISPLAY_PIN INVALID_GPIO #define TOUCH_SCREEN_DISPLAY_VALUE GPIO_HIGH -#if 1 -void key_gpio_pullupdown_enable(void) -{ gpio_pull_updown(RK29_PIN6_PA0, 0); - gpio_pull_updown(RK29_PIN6_PA1, 0); - gpio_pull_updown(RK29_PIN6_PA2, 0); - gpio_pull_updown(RK29_PIN6_PA3, 0); - gpio_pull_updown(RK29_PIN6_PA4, 0); - gpio_pull_updown(RK29_PIN6_PA5, 0); - gpio_pull_updown(RK29_PIN6_PA6, 0); - -} -void key_gpio_pullupdown_disable(void) -{ - gpio_pull_updown(RK29_PIN6_PA0, 1); - gpio_pull_updown(RK29_PIN6_PA1, 1); - gpio_pull_updown(RK29_PIN6_PA2, 1); - gpio_pull_updown(RK29_PIN6_PA3, 1); - gpio_pull_updown(RK29_PIN6_PA4, 1); - gpio_pull_updown(RK29_PIN6_PA5, 1); - gpio_pull_updown(RK29_PIN6_PA6, 1); -} -void rk29_setgpio_suspend_board(void) -{ - - key_gpio_pullupdown_enable(); - -} - -void rk29_setgpio_resume_board(void) -{ - - key_gpio_pullupdown_disable(); - - } -#endif - - - #ifdef CONFIG_FB_RK29 /***************************************************************************************** * lcd devices @@ -414,6 +376,47 @@ struct platform_device rk29_device_dma_cpy = { #endif +#if defined(CONFIG_RK29_GPIO_SUSPEND) +void key_gpio_pullupdown_enable(void) +{ gpio_pull_updown(RK29_PIN6_PA0, 0); + gpio_pull_updown(RK29_PIN6_PA1, 0); + gpio_pull_updown(RK29_PIN6_PA2, 0); + gpio_pull_updown(RK29_PIN6_PA3, 0); + gpio_pull_updown(RK29_PIN6_PA4, 0); + gpio_pull_updown(RK29_PIN6_PA5, 0); + gpio_pull_updown(RK29_PIN6_PA6, 0); + +} +void key_gpio_pullupdown_disable(void) +{ + gpio_pull_updown(RK29_PIN6_PA0, 1); + gpio_pull_updown(RK29_PIN6_PA1, 1); + gpio_pull_updown(RK29_PIN6_PA2, 1); + gpio_pull_updown(RK29_PIN6_PA3, 1); + gpio_pull_updown(RK29_PIN6_PA4, 1); + gpio_pull_updown(RK29_PIN6_PA5, 1); + gpio_pull_updown(RK29_PIN6_PA6, 1); +} +void rk29_setgpio_suspend_board(void) +{ + + key_gpio_pullupdown_enable(); + +} + +void rk29_setgpio_resume_board(void) +{ + + key_gpio_pullupdown_disable(); + + } +#else +void rk29_setgpio_suspend_board(void) +{} +void rk29_setgpio_resume_board(void) +{} +#endif + #if defined(CONFIG_RK_IRDA) || defined(CONFIG_BU92747GUW_CIR) #define BU92747GUW_RESET_PIN RK29_PIN3_PD4// INVALID_GPIO // #define BU92747GUW_RESET_MUX_NAME GPIO3D4_HOSTWRN_NAME//NULL // diff --git a/arch/arm/mach-rk29/board-rk29-phonesdk.c b/arch/arm/mach-rk29/board-rk29-phonesdk.c index 0388e09ea7e7..2256803f02c7 100755 --- a/arch/arm/mach-rk29/board-rk29-phonesdk.c +++ b/arch/arm/mach-rk29/board-rk29-phonesdk.c @@ -1453,6 +1453,193 @@ struct wm831x_pdata wm831x_platdata = { .isink = {&wm831x_regulator_init_isink[0], &wm831x_regulator_init_isink[1]}, }; #endif +#if defined(CONFIG_RK29_GPIO_SUSPEND) + +static void gpio_set_request(void) +{ + gpio_request(RK29_PIN6_PA0, NULL); + gpio_request(RK29_PIN6_PA1, NULL); + gpio_request(RK29_PIN6_PA2, NULL); + gpio_request(RK29_PIN6_PA3, NULL); + gpio_request(RK29_PIN6_PA4, NULL); + gpio_request(RK29_PIN6_PA5, NULL); + gpio_request(RK29_PIN6_PA6, NULL); + + gpio_request(RK29_PIN2_PA5, NULL); + gpio_request(RK29_PIN2_PA4, NULL); + gpio_request(RK29_PIN2_PB0, NULL); + gpio_request(RK29_PIN2_PB1, NULL); + gpio_request(RK29_PIN2_PB2, NULL); + gpio_request(RK29_PIN2_PB3, NULL); + + gpio_request(RK29_PIN1_PA4, NULL); + gpio_request(RK29_PIN1_PA3, NULL); + + gpio_request(RK29_PIN2_PC7, NULL); + gpio_request(RK29_PIN2_PC6, NULL); + gpio_request(RK29_PIN2_PC5, NULL); + gpio_request(RK29_PIN2_PC4, NULL); + gpio_request(RK29_PIN2_PC3, NULL); + gpio_request(RK29_PIN2_PC2, NULL); + gpio_request(RK29_PIN2_PC1, NULL); + gpio_request(RK29_PIN2_PC0, NULL); + +} +static void gpio_set_free(void) +{ + gpio_free(RK29_PIN6_PA0); + gpio_free(RK29_PIN6_PA1); + gpio_free(RK29_PIN6_PA2); + gpio_free(RK29_PIN6_PA3); + gpio_free(RK29_PIN6_PA4); + gpio_free(RK29_PIN6_PA5); + gpio_free(RK29_PIN6_PA6); + + gpio_free(RK29_PIN2_PA5); + gpio_free(RK29_PIN2_PA4); + gpio_free(RK29_PIN2_PB0); + gpio_free(RK29_PIN2_PB1); + gpio_free(RK29_PIN2_PB2); + gpio_free(RK29_PIN2_PB3); + + gpio_free(RK29_PIN1_PA4); + gpio_free(RK29_PIN1_PA3); + + gpio_free(RK29_PIN2_PC7); + gpio_free(RK29_PIN2_PC6); + gpio_free(RK29_PIN2_PC5); + gpio_free(RK29_PIN2_PC4); + gpio_free(RK29_PIN2_PC3); + gpio_free(RK29_PIN2_PC2); + gpio_free(RK29_PIN2_PC1); + gpio_free(RK29_PIN2_PC0); +} +static void rk29_keygpio_suspend(void) +{ + gpio_pull_updown(RK29_PIN6_PA0, 0); + gpio_pull_updown(RK29_PIN6_PA1, 0); + gpio_pull_updown(RK29_PIN6_PA2, 0); + gpio_pull_updown(RK29_PIN6_PA3, 0); + gpio_pull_updown(RK29_PIN6_PA4, 0); + gpio_pull_updown(RK29_PIN6_PA5, 0); + gpio_pull_updown(RK29_PIN6_PA6, 0);//key pullup/pulldown disable + + gpio_pull_updown(RK29_PIN2_PA4, 0); + gpio_pull_updown(RK29_PIN2_PA5, 0); + gpio_pull_updown(RK29_PIN2_PB0, 0); + gpio_pull_updown(RK29_PIN2_PB1, 0); + gpio_pull_updown(RK29_PIN2_PB2, 0); + gpio_pull_updown(RK29_PIN2_PB3, 0); + + +} +static void rk29_keygpio_resume(void) +{ + gpio_pull_updown(RK29_PIN6_PA0, 1); + gpio_pull_updown(RK29_PIN6_PA1, 1); + gpio_pull_updown(RK29_PIN6_PA2, 1); + gpio_pull_updown(RK29_PIN6_PA3, 1); + gpio_pull_updown(RK29_PIN6_PA4, 1); + gpio_pull_updown(RK29_PIN6_PA5, 1); + gpio_pull_updown(RK29_PIN6_PA6, 1);//key pullup/pulldown enable + + gpio_pull_updown(RK29_PIN2_PA4, 1); + gpio_pull_updown(RK29_PIN2_PA5, 1); + gpio_pull_updown(RK29_PIN2_PB0, 1); + gpio_pull_updown(RK29_PIN2_PB1, 1); + gpio_pull_updown(RK29_PIN2_PB2, 1); + gpio_pull_updown(RK29_PIN2_PB3, 1); +} +static void spi_gpio_suspend(void) +{ + rk29_mux_api_set(GPIO1A4_EMMCWRITEPRT_SPI0CS1_NAME,GPIO1L_GPIO1A4); //set iomux is gpio mode + rk29_mux_api_set(GPIO1A3_EMMCDETECTN_SPI1CS1_NAME,GPIO1L_GPIO1A3); + + rk29_mux_api_set(GPIO2C7_SPI1RXD_NAME,GPIO2H_GPIO2C7); + rk29_mux_api_set(GPIO2C6_SPI1TXD_NAME,GPIO2H_GPIO2C6); + //rk29_mux_api_set(GPIO2C5_SPI1CSN0_NAME,GPIO2H_GPIO2C5); + rk29_mux_api_set(GPIO2C4_SPI1CLK_NAME,GPIO2H_GPIO2C4); + rk29_mux_api_set(GPIO2C3_SPI0RXD_NAME,GPIO2H_GPIO2C3); + rk29_mux_api_set(GPIO2C2_SPI0TXD_NAME,GPIO2H_GPIO2C2); + rk29_mux_api_set(GPIO2C1_SPI0CSN0_NAME,GPIO2H_GPIO2C1); + rk29_mux_api_set(GPIO2C0_SPI0CLK_NAME,GPIO2H_GPIO2C0); + + gpio_direction_input(RK29_PIN1_PA4); //set gpio is input + gpio_direction_input(RK29_PIN1_PA3); + gpio_direction_input(RK29_PIN2_PC7); + gpio_direction_input(RK29_PIN2_PC6); + // gpio_direction_input(RK29_PIN2_PC5); + gpio_direction_input(RK29_PIN2_PC4); + gpio_direction_input(RK29_PIN2_PC3); + gpio_direction_input(RK29_PIN2_PC2); + gpio_direction_input(RK29_PIN2_PC1); + gpio_direction_input(RK29_PIN2_PC0); + + gpio_pull_updown(RK29_PIN1_PA4, 0); //set gpio pullup/down disable + gpio_pull_updown(RK29_PIN1_PA3, 0); + + gpio_pull_updown(RK29_PIN2_PC7, 0); + gpio_pull_updown(RK29_PIN2_PC6, 0); + //gpio_pull_updown(RK29_PIN2_PC5, 0); + gpio_pull_updown(RK29_PIN2_PC4, 0); + gpio_pull_updown(RK29_PIN2_PC3, 0); + gpio_pull_updown(RK29_PIN2_PC2, 0); + gpio_pull_updown(RK29_PIN2_PC1, 0); + gpio_pull_updown(RK29_PIN2_PC0, 0); + +} +static void spi_gpio_resume(void) +{ + gpio_pull_updown(RK29_PIN1_PA4, 1); //set gpio pullup/down enable + gpio_pull_updown(RK29_PIN1_PA3, 1); + + gpio_pull_updown(RK29_PIN2_PC7, 1); + gpio_pull_updown(RK29_PIN2_PC6, 1); + //gpio_pull_updown(RK29_PIN2_PC5, 1); + gpio_pull_updown(RK29_PIN2_PC4, 1); + gpio_pull_updown(RK29_PIN2_PC3, 1); + gpio_pull_updown(RK29_PIN2_PC2, 1); + gpio_pull_updown(RK29_PIN2_PC1, 1); + gpio_pull_updown(RK29_PIN2_PC0, 1); + + rk29_mux_api_set(GPIO1A4_EMMCWRITEPRT_SPI0CS1_NAME,GPIO1L_SPI0_CSN1); //set iomux is spi mode + rk29_mux_api_set(GPIO1A3_EMMCDETECTN_SPI1CS1_NAME,GPIO1L_SPI1_CSN1); + + rk29_mux_api_set(GPIO2C7_SPI1RXD_NAME,GPIO2H_SPI1_RXD); + rk29_mux_api_set(GPIO2C6_SPI1TXD_NAME,GPIO2H_SPI1_TXD); + //rk29_mux_api_set(GPIO2C5_SPI1CSN0_NAME,GPIO2H_SPI1_CSN0); + rk29_mux_api_set(GPIO2C4_SPI1CLK_NAME, GPIO2H_SPI1_CLK); + rk29_mux_api_set(GPIO2C3_SPI0RXD_NAME,GPIO2H_SPI0_RXD); + rk29_mux_api_set(GPIO2C2_SPI0TXD_NAME,GPIO2H_SPI0_TXD); + rk29_mux_api_set(GPIO2C1_SPI0CSN0_NAME,GPIO2H_SPI0_CSN0); + rk29_mux_api_set(GPIO2C0_SPI0CLK_NAME,GPIO2H_SPI0_CLK); + + +} + +void rk29_setgpio_suspend_board(void) +{ + gpio_set_request(); + rk29_keygpio_suspend(); + spi_gpio_suspend(); + gpio_set_free(); + +} + +void rk29_setgpio_resume_board(void) +{ + gpio_set_request(); + rk29_keygpio_resume(); + spi_gpio_resume(); + gpio_set_free(); + +} +#else +void rk29_setgpio_suspend_board(void) +{} +void rk29_setgpio_resume_board(void) +{} +#endif diff --git a/arch/arm/mach-rk29/gpio.c b/arch/arm/mach-rk29/gpio.c index a52071caa03c..71c6391f7e30 100755 --- a/arch/arm/mach-rk29/gpio.c +++ b/arch/arm/mach-rk29/gpio.c @@ -550,16 +550,12 @@ void __init rk29_gpio_init(void) } rk29_gpio_irq_setup(); } -__weak void rk29_setgpio_suspend_board(void) -{ -} -__weak void rk29_setgpio_resume_board(void) -{ +__weak void rk29_setgpio_suspend_board(void); -} -#ifdef CONFIG_PM +__weak void rk29_setgpio_resume_board(void); +#ifdef CONFIG_PM static int rk29_gpio_suspend(struct sys_device *dev, pm_message_t mesg) { unsigned i; @@ -582,9 +578,6 @@ static int rk29_gpio_suspend(struct sys_device *dev, pm_message_t mesg) static int rk29_gpio_resume(struct sys_device *dev) { unsigned i; - - rk29_setgpio_resume_board(); - for (i = 0; i < MAX_BANK; i++) { struct rk29_gpio_chip *rk29_gpio = &rk29gpio_chip[i]; @@ -594,7 +587,7 @@ static int rk29_gpio_resume(struct sys_device *dev) /* keep enable for resume irq */ rk29_gpio_write(rk29_gpio->regbase, GPIO_INTEN, rk29_gpio->saved_wakeup | (rk29_gpio->suspend_wakeup & rk29_gpio_read(rk29_gpio->regbase, GPIO_INT_STATUS))); } - + rk29_setgpio_resume_board(); return 0; } diff --git a/arch/arm/mach-rk29/pm.c b/arch/arm/mach-rk29/pm.c index 7c0962532b6f..4023154d9c91 100755 --- a/arch/arm/mach-rk29/pm.c +++ b/arch/arm/mach-rk29/pm.c @@ -364,7 +364,7 @@ static void dump_io_pull(void) extern void vfp_save_state(void *location, u32 fpexc); extern void vfp_load_state(void *location, u32 fpexc); // extern __sramdata u64 saveptr[33]; -u32 saveptr[2][60]={}; +static u32 saveptr[2][60]={}; void neon_powerdomain_off(void) { int ret,i=0; @@ -504,9 +504,9 @@ static int rk29_pm_enter(suspend_state_t state) cru_writel(clksel0 & ~0x7FC000, CRU_CLKSEL0_CON); sram_printch('4'); - pm_gpio_suspend(); + rk29_suspend(); - pm_gpio_resume(); + sram_printch('4'); /* resume general pll */ diff --git a/arch/arm/mach-rk29/spi_sram.c b/arch/arm/mach-rk29/spi_sram.c index 6805cd67267f..7e49d6ee3e0a 100755 --- a/arch/arm/mach-rk29/spi_sram.c +++ b/arch/arm/mach-rk29/spi_sram.c @@ -410,179 +410,10 @@ void __sramfunc pm_gpio_set(unsigned gpio,eGPIOPinDirection_t direction,eGPIOPin } } #endif -/*****************************************gpio ctr*********************************************/ -#if defined(CONFIG_RK29_GPIO_SUSPEND) -#define GRF_GPIO0_DIR 0x000 -#define GRF_GPIO1_DIR 0x004 -#define GRF_GPIO2_DIR 0x008 -#define GRF_GPIO3_DIR 0x00c -#define GRF_GPIO4_DIR 0x010 -#define GRF_GPIO5_DIR 0x014 - - -#define GRF_GPIO0_DO 0x018 -#define GRF_GPIO1_DO 0x01c -#define GRF_GPIO2_DO 0x020 -#define GRF_GPIO3_DO 0x024 -#define GRF_GPIO4_DO 0x028 -#define GRF_GPIO5_DO 0x02c - -#define GRF_GPIO0_EN 0x030 -#define GRF_GPIO1_EN 0x034 -#define GRF_GPIO2_EN 0x038 -#define GRF_GPIO3_EN 0x03c -#define GRF_GPIO4_EN 0x040 -#define GRF_GPIO5_EN 0x044 - - -#define GRF_GPIO0L_IOMUX 0x048 -#define GRF_GPIO0H_IOMUX 0x04c -#define GRF_GPIO1L_IOMUX 0x050 -#define GRF_GPIO1H_IOMUX 0x054 -#define GRF_GPIO2L_IOMUX 0x058 -#define GRF_GPIO2H_IOMUX 0x05c -#define GRF_GPIO3L_IOMUX 0x060 -#define GRF_GPIO3H_IOMUX 0x064 -#define GRF_GPIO4L_IOMUX 0x068 -#define GRF_GPIO4H_IOMUX 0x06c -#define GRF_GPIO5L_IOMUX 0x070 -#define GRF_GPIO5H_IOMUX 0x074 - -typedef struct GPIO_IOMUX -{ - unsigned int GPIOL_IOMUX; - unsigned int GPIOH_IOMUX; -}GPIO_IOMUX_PM; - -//GRF Registers -typedef struct REG_FILE_GRF -{ - unsigned int GRF_GPIO_DIR[6]; - unsigned int GRF_GPIO_DO[6]; - unsigned int GRF_GPIO_EN[6]; - GPIO_IOMUX_PM GRF_GPIO_IOMUX[6]; - unsigned int GRF_GPIO_PULL[7]; -} GRF_REG_SAVE; - - -static GRF_REG_SAVE pm_grf; -int __sramdata crumode; - u32 __sramdata gpio2_pull,gpio6_pull; -//static GRF_REG_SAVE __sramdata pm_grf; -static void pm_keygpio_prepare(void) -{ - gpio6_pull = grf_readl(GRF_GPIO6_PULL); - gpio2_pull = grf_readl(GRF_GPIO2_PULL); -} - void pm_keygpio_sdk_suspend(void) -{ - grf_writel(gpio6_pull|0x7f,GRF_GPIO6_PULL);//key pullup/pulldown disable - grf_writel(gpio2_pull|0x00000f30,GRF_GPIO2_PULL); -} - void pm_keygpio_sdk_resume(void) -{ - grf_writel(gpio6_pull,GRF_GPIO6_PULL);//key pullup/pulldown enable - grf_writel(gpio2_pull,GRF_GPIO2_PULL); -} - void pm_keygpio_a22_suspend(void) -{ - grf_writel(gpio6_pull|0x7f,GRF_GPIO6_PULL);//key pullup/pulldown disable - grf_writel(gpio2_pull|0x00000900,GRF_GPIO2_PULL); -} - void pm_keygpio_a22_resume(void) -{ - grf_writel(gpio6_pull,GRF_GPIO6_PULL);//key pullup/pulldown enable - grf_writel(gpio2_pull,GRF_GPIO2_PULL); -} - - -static void pm_spi_gpio_prepare(void) -{ - pm_grf.GRF_GPIO_IOMUX[1].GPIOL_IOMUX = grf_readl(GRF_GPIO1L_IOMUX); - pm_grf.GRF_GPIO_IOMUX[2].GPIOH_IOMUX = grf_readl(GRF_GPIO2H_IOMUX); - - pm_grf.GRF_GPIO_PULL[1] = grf_readl(GRF_GPIO1_PULL); - pm_grf.GRF_GPIO_PULL[2] = grf_readl(GRF_GPIO2_PULL); - - pm_grf.GRF_GPIO_EN[1] = grf_readl(GRF_GPIO1_EN); - pm_grf.GRF_GPIO_EN[2] = grf_readl(GRF_GPIO2_EN); -} - - void pm_spi_gpio_suspend(void) -{ - int io1L_iomux; - int io2H_iomux; - int io1_pull,io2_pull; - int io1_en,io2_en; - - pm_spi_gpio_prepare(); - - io1L_iomux = grf_readl(GRF_GPIO1L_IOMUX); - io2H_iomux = grf_readl(GRF_GPIO2H_IOMUX); - - grf_writel(io1L_iomux&(~((0x03<<6)|(0x03 <<8))), GRF_GPIO1L_IOMUX); - grf_writel(io2H_iomux&0xffff0000, GRF_GPIO2H_IOMUX); - - io1_pull = grf_readl(GRF_GPIO1_PULL); - io2_pull = grf_readl(GRF_GPIO2_PULL); - - grf_writel(io1_pull|0x18,GRF_GPIO1_PULL); - grf_writel(io2_pull|0x00ff0000,GRF_GPIO2_PULL); - - io1_en = grf_readl(GRF_GPIO1_EN); - io2_en = grf_readl(GRF_GPIO2_EN); - - grf_writel(io1_en|0x18,GRF_GPIO1_EN); - grf_writel(io2_en|0x00ff0000,GRF_GPIO2_EN); -} - - void pm_spi_gpio_resume(void) -{ - grf_writel(pm_grf.GRF_GPIO_EN[1],GRF_GPIO1_EN); - grf_writel(pm_grf.GRF_GPIO_EN[2],GRF_GPIO2_EN); - grf_writel(pm_grf.GRF_GPIO_PULL[1],GRF_GPIO1_PULL); - grf_writel(pm_grf.GRF_GPIO_PULL[2],GRF_GPIO2_PULL); - - grf_writel(pm_grf.GRF_GPIO_IOMUX[1].GPIOL_IOMUX, GRF_GPIO1L_IOMUX); - grf_writel(pm_grf.GRF_GPIO_IOMUX[2].GPIOH_IOMUX, GRF_GPIO2H_IOMUX); -} - -void pm_gpio_suspend(void) -{ - pm_spi_gpio_suspend(); // spi pullup/pulldown disable.... - #if defined(CONFIG_MACH_RK29_PHONESDK) - { pm_keygpio_sdk_suspend();// key pullup/pulldown disable..... - } - #endif - #if defined(CONFIG_MACH_RK29_A22) - { pm_keygpio_a22_suspend();// key pullup/pulldown disable..... - } - #endif -} -void pm_gpio_resume(void) -{ - pm_spi_gpio_resume(); // spi pullup/pulldown enable..... - #if defined(CONFIG_MACH_RK29_PHONESDK) - { pm_keygpio_sdk_resume();// key pullup/pulldown enable..... - } - #endif - #if defined(CONFIG_MACH_RK29_A22) - { pm_keygpio_a22_resume();// key pullup/pulldown enable..... - } - #endif -} -#else -void pm_gpio_suspend(void) -{} -void pm_gpio_resume(void) -{} -#endif - - /*************************************************32k**************************************/ #ifdef CONFIG_RK29_CLK_SWITCH_TO_32K - +static int __sramdata crumode; void __sramfunc pm_clk_switch_32k(void) { int vol; -- 2.34.1