static int setup_pmic_voltages(void) { unsigned char value, rev_id = 0; i2c_set_bus_num(CONFIG_PMIC_I2C_BUS); i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_PMIC_I2C_SLAVE); if (!i2c_probe(CONFIG_PMIC_I2C_SLAVE)) { if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_DEVICEID, 1, &value, 1)) { printf("Read device ID error!\n"); return -1; } if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_REVID, 1, &rev_id, 1)) { printf("Read Rev ID error!\n"); return -1; } printf("Found PFUZE100! deviceid 0x%x, revid 0x%x\n", value, rev_id); if (setup_pmic_mode(value & 0xf)) { printf("setup pmic mode error!\n"); return -1; } /* set SW1AB standby volatage 0.975V */ if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABSTBY, 1, &value, 1)) { printf("Read SW1ABSTBY error!\n"); return -1; } value &= ~0x3f; value |= PFUZE100_SW1ABC_SETP(9750); if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABSTBY, 1, &value, 1)) { printf("Set SW1ABSTBY error!\n"); return -1; } /* set SW1AB/VDDARM step ramp up time from 16us to 4us/25mV */ if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABCONF, 1, &value, 1)) { printf("Read SW1ABCONFIG error!\n"); return -1; } value &= ~0xc0; value |= 0x40; if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1ABCONF, 1, &value, 1)) { printf("Set SW1ABCONFIG error!\n"); return -1; } /* set SW1C standby volatage 0.975V */ if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CSTBY, 1, &value, 1)) { printf("Read SW1CSTBY error!\n"); return -1; } value &= ~0x3f; value |= PFUZE100_SW1ABC_SETP(9750); if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CSTBY, 1, &value, 1)) { printf("Set SW1CSTBY error!\n"); return -1; } /* set SW1C/VDDSOC step ramp up time to from 16us to 4us/25mV */ if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CCONF, 1, &value, 1)) { printf("Read SW1CCONFIG error!\n"); return -1; } value &= ~0xc0; value |= 0x40; if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_SW1CCONF, 1, &value, 1)) { printf("Set SW1CCONFIG error!\n"); return -1; } /* Enable power of VGEN5 3V3, needed for SD3 */ if (i2c_read(CONFIG_PMIC_I2C_SLAVE, PFUZE100_VGEN5CTL, 1, &value, 1)) { printf("Read VGEN5CTL error!\n"); return -1; } value &= ~0x1F; value |= 0x1F; if (i2c_write(CONFIG_PMIC_I2C_SLAVE, PFUZE100_VGEN5CTL, 1, &value, 1)) { printf("Set VGEN5CTL error!\n"); return -1; } } return 0; }
static int setup_pmic_voltages(void) { unsigned char value, rev_id = 0; i2c_set_bus_num(0); if (!i2c_probe(0x8)) { if (i2c_read(0x8, 0, 1, &value, 1)) { printf("Read device ID error!\n"); return -1; } if (i2c_read(0x8, 3, 1, &rev_id, 1)) { printf("Read Rev ID error!\n"); return -1; } printf("Found PFUZE%s deviceid=%x,revid=%x\n", ((value & 0xf) == 0) ? "100" : "200", value, rev_id); if (setup_pmic_mode(value & 0xf)) { printf("setup pmic mode error!\n"); return -1; } /* set SW1AB staby volatage 0.975V */ if (i2c_read(0x8, 0x21, 1, &value, 1)) { printf("Read SW1ABSTBY error!\n"); return -1; } value &= ~0x3f; value |= 0x1b; if (i2c_write(0x8, 0x21, 1, &value, 1)) { printf("Set SW1ABSTBY error!\n"); return -1; } /* set SW1AB/VDDARM step ramp up time from 16us to 4us/25mV */ if (i2c_read(0x8, 0x24, 1, &value, 1)) { printf("Read SW1ABCONFIG error!\n"); return -1; } value &= ~0xc0; value |= 0x40; if (i2c_write(0x8, 0x24, 1, &value, 1)) { printf("Set SW1ABCONFIG error!\n"); return -1; } /* set SW1C staby volatage 0.975V */ if (i2c_read(0x8, 0x2f, 1, &value, 1)) { printf("Read SW1CSTBY error!\n"); return -1; } value &= ~0x3f; value |= 0x1b; if (i2c_write(0x8, 0x2f, 1, &value, 1)) { printf("Set SW1CSTBY error!\n"); return -1; } /* set SW1C/VDDSOC step ramp up time to from 16us to 4us/25mV */ if (i2c_read(0x8, 0x32, 1, &value, 1)) { printf("Read SW1CCONFIG error!\n"); return -1; } value &= ~0xc0; value |= 0x40; if (i2c_write(0x8, 0x32, 1, &value, 1)) { printf("Set SW1CCONFIG error!\n"); return -1; } } return 0; }