mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 04:10:18 +09:00
rk30:phone loquat:add clk switch from 24M to 32K when in sleep
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user