rk30:phone loquat:add clk switch from 24M to 32K when in sleep

This commit is contained in:
张晴
2012-05-28 18:35:21 +08:00
parent fa21dda874
commit 7e937c0cfd
3 changed files with 32 additions and 7 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -15,6 +15,11 @@
#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 = {