rk30:phone loquat:add clk switch from 24M to 32K when in sleep
author张晴 <zhangqing@rock-chips.com>
Mon, 28 May 2012 10:35:21 +0000 (18:35 +0800)
committer张晴 <zhangqing@rock-chips.com>
Mon, 28 May 2012 10:35:21 +0000 (18:35 +0800)
arch/arm/configs/rk30_phone_loquat_defconfig
arch/arm/mach-rk30/board-rk30-phone-loquat.c
arch/arm/mach-rk30/board-rk30-phone-twl60xx.c

index 1886ef13d907fba2beb09514faaffee2eceb3ede..6de798ffb216117be00479f4e91aac66b69c9a16 100755 (executable)
@@ -25,6 +25,7 @@ CONFIG_ARCH_RK30=y
 CONFIG_DDR_SDRAM_FREQ=300
 CONFIG_WIFI_CONTROL_FUNC=y
 CONFIG_MACH_RK30_PHONE_LOQUAT=y
+CONFIG_CLK_SWITCH_TO_32K=y
 # CONFIG_SWP_EMULATE is not set
 CONFIG_FIQ_DEBUGGER=y
 CONFIG_FIQ_DEBUGGER_NO_SLEEP=y
index 15fb41da43510b460f5a889caac12e518bf4aa62..319bacb04a92daca2d2dd353791d1882f41ec1c2 100755 (executable)
@@ -720,7 +720,7 @@ static int rk29_backlight_pwm_suspend(void)
                printk("func %s, line %d: request gpio fail\n", __FUNCTION__, __LINE__);
                return -1;
        }
-       gpio_direction_output(PWM_GPIO, GPIO_LOW);
+       gpio_direction_output(PWM_GPIO, GPIO_HIGH);
 #ifdef  LCD_DISP_ON_PIN
        gpio_direction_output(BL_EN_PIN, 0);
        gpio_set_value(BL_EN_PIN, !BL_EN_VALUE);
@@ -730,6 +730,7 @@ static int rk29_backlight_pwm_suspend(void)
 
 static int rk29_backlight_pwm_resume(void)
 {
+       gpio_direction_output(PWM_GPIO, GPIO_LOW);
        gpio_free(PWM_GPIO);
        rk30_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE);
 #ifdef  LCD_DISP_ON_PIN
index 198db66d1f5a99809218ae438582cdbb95d994c0..c9408d315cebd4e37c0fb0104e4abb5bb7e96f76 100755 (executable)
 #define GPIO6_PB3_DO_HIGH  0x08000800
 #define GPIO6_PB3_EN_MASK  0x08000800
 #define GPIO6_PB3_UNEN_MASK  0x08000000
+#define GPIO6_PB1_DIR_OUT  0x02000200
+#define GPIO6_PB1_DO_LOW  0x02000000
+#define GPIO6_PB1_DO_HIGH  0x02000200
+#define GPIO6_PB1_EN_MASK  0x02000200
+#define GPIO6_PB1_UNEN_MASK  0x02000000
 
 #define        TWL60xx_IRQ_BASE        (NR_GIC_IRQS + NR_GPIO_IRQS  )
 #ifdef CONFIG_TWL4030_CORE
@@ -98,16 +103,19 @@ static inline int twl_reg_write(unsigned base, unsigned slave_subgp,
 }
 
 #define PMU_POWER_SLEEP RK30_PIN6_PB3  
-
+#define PMU_CHRG_DET_N RK30_PIN0_PC7
 int tps80032_pre_init(void){
        
        printk("%s\n", __func__);       
 
        gpio_request(PMU_POWER_SLEEP, "NULL");
        gpio_direction_output(PMU_POWER_SLEEP, GPIO_LOW);
+
+       gpio_request(PMU_CHRG_DET_N, "NULL");
+       gpio_direction_output(PMU_CHRG_DET_N, GPIO_HIGH);
        
-       twl_reg_write(PREQ1_RES_ASS_A,TWL_MODULE_PM_SLAVE_RES,0x0b);
-       twl_reg_write(PREQ1_RES_ASS_B,TWL_MODULE_PM_SLAVE_RES,0x10);
+       twl_reg_write(PREQ1_RES_ASS_A,TWL_MODULE_PM_SLAVE_RES,0x2b);
+       twl_reg_write(PREQ1_RES_ASS_B,TWL_MODULE_PM_SLAVE_RES,0x50);
        twl_reg_write(PREQ1_RES_ASS_C,TWL_MODULE_PM_SLAVE_RES,0x27);
        twl_reg_write(PHOENIX_MSK_TRANSITION,TWL_MODULE_PM_MASTER,0x00);
        twl_reg_write(PHOENIX_SENS_TRANSITION,TWL_MODULE_PM_MASTER,0xc0);   //set pmu enter sleep on a preq1 rising edge
@@ -119,9 +127,9 @@ int tps80032_pre_init(void){
        twl_reg_write(CLK32KG_CFG_STATE,TWL_MODULE_PM_SLAVE_RES,0x01);  //set clk32kg on when we use
        twl_reg_write(CLK32KAUDIO_CFG_STATE,TWL_MODULE_PM_SLAVE_RES,0x01);  //set clk32kaudio on when we use
        
-//     twl_reg_write(LDO5_CFG_TRANS,TWL_MODULE_PM_RECEIVER,0x03);   //set ldo5 is disabled when in sleep mode 
-//     twl_reg_write(LDO7_CFG_TRANS,TWL_MODULE_PM_RECEIVER,0x03);   //set ldo7 is disabled when in sleep mode
-
+       twl_reg_write(LDO5_CFG_TRANS,TWL_MODULE_PM_RECEIVER,0x03);   //set ldo5 is disabled when in sleep mode 
+       twl_reg_write(LDO7_CFG_TRANS,TWL_MODULE_PM_RECEIVER,0x03);   //set ldo7 is disabled when in sleep mode
+       twl_reg_write(LDOUSB_CFG_TRANS,TWL_MODULE_PM_RECEIVER,0x03); 
        return 0;
 
 }
@@ -782,16 +790,31 @@ static struct twl4030_power_data tps80032_scripts_data __initdata = {
 
 void __sramfunc board_pmu_suspend(void)
 {      
+       #ifdef CONFIG_CLK_SWITCH_TO_32K                 //switch clk to 32k
+       grf_writel(GPIO6_PB1_DIR_OUT, GRF_GPIO6L_DIR_ADDR);
+       grf_writel(GPIO6_PB1_DO_HIGH, GRF_GPIO6L_DO_ADDR);  //set gpio6_b1 output low
+       grf_writel(GPIO6_PB1_EN_MASK, GRF_GPIO6L_EN_ADDR);
+       #endif
+       
        grf_writel(GPIO6_PB3_DIR_OUT, GRF_GPIO6L_DIR_ADDR);
        grf_writel(GPIO6_PB3_DO_HIGH, GRF_GPIO6L_DO_ADDR);  //set gpio6_b3 output low
        grf_writel(GPIO6_PB3_EN_MASK, GRF_GPIO6L_EN_ADDR);
+       
 }
 void __sramfunc board_pmu_resume(void)
 {
        grf_writel(GPIO6_PB3_DIR_OUT, GRF_GPIO6L_DIR_ADDR);
        grf_writel(GPIO6_PB3_DO_LOW, GRF_GPIO6L_DO_ADDR);     //set gpio6_b3 output high
        grf_writel(GPIO6_PB3_EN_MASK, GRF_GPIO6L_EN_ADDR);
+       
+       #ifdef CONFIG_CLK_SWITCH_TO_32K                 //switch clk to 24M
+       grf_writel(GPIO6_PB1_DIR_OUT, GRF_GPIO6L_DIR_ADDR);
+       grf_writel(GPIO6_PB1_DO_LOW, GRF_GPIO6L_DO_ADDR);  //set gpio6_b1 output low
+       grf_writel(GPIO6_PB1_EN_MASK, GRF_GPIO6L_EN_ADDR);
+       sram_32k_udelay(10000);
+       #else
        sram_udelay(2000);
+       #endif
 }
 
 static struct twl4030_platform_data tps80032_data = {