void standby_restore_env(struct sys_reg_t *restore_env) { /*restore 24M and LDO*/ aw_writel(restore_env->cmu_regs.aud_hosc,SW_CCM_AUDIO_HOSC_PLL_REG); //standby_delay(50); /*COREPLL to 24M*/ aw_writel((aw_readl(SW_CCM_AHB_APB_CFG_REG)&BUS_CCLK_MASK)|BUS_CCLK_24M,SW_CCM_AHB_APB_CFG_REG); standby_delay(50); /*restore core power*/ #if EN_POWER_D twi_byte_rw(TWI_OP_WR,0x34,0x23,&data[0]); standby_twi_exit(); #endif /* restore cmu regs*/ aw_writel(restore_env->cmu_regs.core_pll,SW_CCM_CORE_VE_PLL_REG); aw_writel(restore_env->cmu_regs.ddr_pll,SW_CCM_SDRAM_PLL_REG); aw_writel(restore_env->cmu_regs.bus_clk,SW_CCM_AHB_APB_CFG_REG); #if MODIFY_AHB_APB_EN aw_writel(restore_env->cmu_regs.ahb_clk,SW_CCM_AHB_GATE_REG); aw_writel(restore_env->cmu_regs.apb_clk,SW_CCM_APB_GATE_REG); #endif }
/* ********************************************************************************************************* * standby_power_exit * * Description: exit power for standby. * * Arguments : none; * * Returns : result; ********************************************************************************************************* */ __s32 standby_power_exit(void) { __u8 reg_val; twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQ4, ®_val); twi_byte_rw(TWI_OP_WR, AXP_ADDR,0x0E, ®_val); #if(AXP_WAKEUP & AXP_WAKEUP_KEY) /* disable pek long/short */ twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN3, ®_val); reg_val &= ~0x03; twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN3, ®_val); #endif #if(AXP_WAKEUP & AXP_WAKEUP_LOWBATT) /* disable low voltage warning */ twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN4, ®_val); reg_val &= ~0x03; twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN4, ®_val); #endif standby_twi_exit(); return 0; }
/* ********************************************************************************************************* * standby_power_exit * * Description: exit power for standby. * * Arguments : none; * * Returns : result; ********************************************************************************************************* */ __s32 standby_power_exit(__u32 wakeup_src) { __u8 reg_val; twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQ4, ®_val); twi_byte_rw(TWI_OP_WR, AXP_ADDR,0x0E, ®_val); if(wakeup_src & AXP_WAKEUP_KEY) { /* disable pek long/short */ twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN3, ®_val); reg_val &= ~0x03; twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN3, ®_val); } if(wakeup_src & AXP_WAKEUP_LONG_KEY) { /* enable pek long/short */ twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN3, ®_val); reg_val &= ~0x01; twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN3, ®_val); } if(wakeup_src & AXP_WAKEUP_SHORT_KEY) { /* enable pek long/short */ twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN3, ®_val); reg_val &= ~0x02; twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN3, ®_val); } if(wakeup_src & AXP_WAKEUP_DESCEND) { /* disable pek desend trigger */ twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN5, ®_val); reg_val &= ~0x20; twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN5, ®_val); } if(wakeup_src & AXP_WAKEUP_ASCEND) { /* disable pek desend trigger */ twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN5, ®_val); reg_val &= ~0x40; twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN5, ®_val); } if(wakeup_src & AXP_WAKEUP_LOWBATT) { /* disable low voltage warning */ twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN4, ®_val); reg_val &= ~0x03; twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN4, ®_val); } if(wakeup_src & AXP_WAKEUP_USB) { /* disable usb plug-in / plug-out */ twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN1, ®_val); reg_val &= ~(0x03<<2); twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN1, ®_val); } if(wakeup_src & AXP_WAKEUP_AC) { /* disable ac plug-in / plug-out */ twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN1, ®_val); reg_val &= ~(0x03<<5); twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN1, ®_val); } standby_twi_exit(); return 0; }