static void setup_power(int is_resume) { int error = 0; power_init(); if (is_resume) { return; } /* Initialize I2C bus to configure PMIC. */ exynos_pinmux_i2c0(); i2c_init(0, I2C_0_SPEED, 0x00); printk(BIOS_DEBUG, "%s: Setting up PMIC...\n", __func__); /* * We're using CR1616 coin cell battery that is non-rechargeable * battery. But, BBCHOSTEN bit of the BBAT Charger Register in * MAX77686 is enabled by default for charging coin cell. * * Also, we cannot meet the coin cell reverse current spec. in UL * standard if BBCHOSTEN bit is enabled. * * Disable Coin BATT Charging */ error = max77686_disable_backup_batt(PMIC_BUS); error |= max77686_volsetting(PMIC_BUS, PMIC_BUCK2, VDD_ARM_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_BUS, PMIC_BUCK3, VDD_INT_UV, REG_ENABLE, MAX77686_UV); error |= max77686_volsetting(PMIC_BUS, PMIC_BUCK1, VDD_MIF_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_BUS, PMIC_BUCK4, VDD_G3D_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_BUS, PMIC_LDO2, VDD_LDO2_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_BUS, PMIC_LDO3, VDD_LDO3_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_BUS, PMIC_LDO5, VDD_LDO5_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_BUS, PMIC_LDO10, VDD_LDO10_MV, REG_ENABLE, MAX77686_MV); error |= max77686_enable_32khz_cp(PMIC_BUS); if (error) { printk(BIOS_CRIT, "%s: PMIC error: %#x\n", __func__, error); die("Failed to intialize PMIC.\n"); } }
/** * Initialize the pmic voltages to power up the system * This also calls i2c_init so that we can program the pmic * * REG_ENABLE = 0, needed to set the buck/ldo enable bit ON * * @return Return 0 if ok, else -1 */ int power_init(void) { int error = 0; #ifdef CONFIG_SPL_BUILD struct spl_machine_param *param = spl_get_machine_params(); /* Set the i2c register address base so i2c works before FDT */ i2c_set_early_reg(param->i2c_base); #endif ps_hold_setup(); /* init the i2c so that we can program pmic chip */ i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); /* * We're using CR1616 coin cell battery that is non-rechargeable * battery. But, BBCHOSTEN bit of the BBAT Charger Register in * MAX77686 is enabled by default for charging coin cell. * * Also, we cannot meet the coin cell reverse current spec. in UL * standard if BBCHOSTEN bit is enabled. * * Disable Coin BATT Charging */ error = max77686_disable_backup_batt(); error |= max77686_volsetting(PMIC_BUCK2, CONFIG_VDD_ARM_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_BUCK3, CONFIG_VDD_INT_UV, REG_ENABLE, MAX77686_UV); error |= max77686_volsetting(PMIC_BUCK1, CONFIG_VDD_MIF_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_BUCK4, CONFIG_VDD_G3D_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_LDO2, CONFIG_VDD_LDO2_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_LDO3, CONFIG_VDD_LDO3_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_LDO5, CONFIG_VDD_LDO5_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_LDO10, CONFIG_VDD_LDO10_MV, REG_ENABLE, MAX77686_MV); if (error != 0) debug("power init failed\n"); return error; }