void ldo_mode_set(int ldo_bypass) { unsigned int value; u32 vddarm; struct pmic *p = pfuze; if (!p) { printf("No PMIC found!\n"); return; } /* switch to ldo_bypass mode */ if (ldo_bypass) { prep_anatop_bypass(); /* decrease VDDARM to 1.275V */ pmic_reg_read(pfuze, PFUZE300_SW1BVOLT, &value); value &= ~0x1f; value |= PFUZE300_SW1AB_SETP(1275); pmic_reg_write(pfuze, PFUZE300_SW1BVOLT, value); set_anatop_bypass(1); vddarm = PFUZE300_SW1AB_SETP(1175); pmic_reg_read(pfuze, PFUZE300_SW1BVOLT, &value); value &= ~0x1f; value |= vddarm; pmic_reg_write(pfuze, PFUZE300_SW1BVOLT, value); finish_anatop_bypass(); printf("switch to ldo_bypass mode!\n"); } }
int power_init_board(void) { struct pmic *p; int ret; unsigned int reg, rev_id; ret = power_pfuze300_init(I2C_PMIC); if (ret) return ret; p = pmic_get("PFUZE300"); ret = pmic_probe(p); if (ret) return ret; pmic_reg_read(p, PFUZE300_DEVICEID, ®); pmic_reg_read(p, PFUZE300_REVID, &rev_id); printf("PMIC: PFUZE300 DEV_ID=0x%x REV_ID=0x%x\n", reg, rev_id); /* disable Low Power Mode during standby mode */ pmic_reg_read(p, PFUZE300_LDOGCTL, ®); reg |= 0x1; pmic_reg_write(p, PFUZE300_LDOGCTL, reg); /* SW1A/1B mode set to APS/APS */ reg = 0x8; pmic_reg_write(p, PFUZE300_SW1AMODE, reg); pmic_reg_write(p, PFUZE300_SW1BMODE, reg); /* SW1A/1B standby voltage set to 1.025V */ reg = 0xd; pmic_reg_write(p, PFUZE300_SW1ASTBY, reg); pmic_reg_write(p, PFUZE300_SW1BSTBY, reg); /* decrease SW1B normal voltage to 0.975V */ pmic_reg_read(p, PFUZE300_SW1BVOLT, ®); reg &= ~0x1f; reg |= PFUZE300_SW1AB_SETP(975); pmic_reg_write(p, PFUZE300_SW1BVOLT, reg); return 0; }