コード例 #1
0
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
}
コード例 #2
0
/*
*********************************************************************************************************
*                           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, &reg_val);
	twi_byte_rw(TWI_OP_WR, AXP_ADDR,0x0E, &reg_val);

    #if(AXP_WAKEUP & AXP_WAKEUP_KEY)
    /* disable pek long/short */
	twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN3, &reg_val);
	reg_val &= ~0x03;
	twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN3, &reg_val);
    #endif

    #if(AXP_WAKEUP & AXP_WAKEUP_LOWBATT)
    /* disable low voltage warning */
	twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN4, &reg_val);
	reg_val &= ~0x03;
	twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN4, &reg_val);
    #endif

    standby_twi_exit();
    return 0;
}
コード例 #3
0
ファイル: standby_power.c プロジェクト: pocketbook/U7
/*
*********************************************************************************************************
*                           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, &reg_val);
    twi_byte_rw(TWI_OP_WR, AXP_ADDR,0x0E, &reg_val);

    if(wakeup_src & AXP_WAKEUP_KEY) {
        /* disable pek long/short */
        twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN3, &reg_val);
        reg_val &= ~0x03;
        twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN3, &reg_val);
    }

    if(wakeup_src & AXP_WAKEUP_LONG_KEY) {
        /* enable pek long/short */
        twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN3, &reg_val);
        reg_val &= ~0x01;
        twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN3, &reg_val);
    }

    if(wakeup_src & AXP_WAKEUP_SHORT_KEY) {
        /* enable pek long/short */
        twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN3, &reg_val);
        reg_val &= ~0x02;
        twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN3, &reg_val);
    }

    if(wakeup_src & AXP_WAKEUP_DESCEND) {
        /* disable pek desend trigger */
        twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN5, &reg_val);
        reg_val &= ~0x20;
        twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN5, &reg_val);
    }

    if(wakeup_src & AXP_WAKEUP_ASCEND) {
        /* disable pek desend trigger */
        twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN5, &reg_val);
        reg_val &= ~0x40;
        twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN5, &reg_val);
    }

    if(wakeup_src & AXP_WAKEUP_LOWBATT) {
        /* disable low voltage warning */
        twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN4, &reg_val);
        reg_val &= ~0x03;
        twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN4, &reg_val);
    }

    if(wakeup_src & AXP_WAKEUP_USB) {
        /* disable usb plug-in / plug-out */
        twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN1, &reg_val);
        reg_val &= ~(0x03<<2);
        twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN1, &reg_val);
    }

    if(wakeup_src & AXP_WAKEUP_AC) {
        /* disable ac plug-in / plug-out */
        twi_byte_rw(TWI_OP_RD, AXP_ADDR,AXP20_IRQEN1, &reg_val);
        reg_val &= ~(0x03<<5);
        twi_byte_rw(TWI_OP_WR, AXP_ADDR,AXP20_IRQEN1, &reg_val);
    }

    standby_twi_exit();
    return 0;
}