diff options
Diffstat (limited to 'src/soc/rockchip/rk3288/rk808.c')
-rw-r--r-- | src/soc/rockchip/rk3288/rk808.c | 51 |
1 files changed, 32 insertions, 19 deletions
diff --git a/src/soc/rockchip/rk3288/rk808.c b/src/soc/rockchip/rk3288/rk808.c index 9713a9292f..de19a55135 100644 --- a/src/soc/rockchip/rk3288/rk808.c +++ b/src/soc/rockchip/rk3288/rk808.c @@ -25,36 +25,49 @@ #include <stdint.h> #include <stdlib.h> -#define RK808_ADDR 0x1b +#if CONFIG_PMIC_BUS < 0 +#error "PMIC_BUS must be set in mainboard's Kconfig." +#endif -#define DCDC_EN 0x23 -#define LDO_EN 0x24 -#define BUCK1SEL 0x2f -#define BUCK4SEL 0x38 -#define LDO_ONSEL(i) (0x39 + 2 * i) -#define LDO_SLPSEL(i) (0x3a + 2 * i) +#define RK808_ADDR 0x1b -static void rk808_clrsetbits(uint8_t bus, uint8_t reg, uint8_t clr, uint8_t set) +#define DCDC_EN 0x23 +#define LDO_EN 0x24 +#define BUCK1SEL 0x2f +#define BUCK4SEL 0x38 +#define LDO_ONSEL(i) (0x39 + 2 * i) +#define LDO_SLPSEL(i) (0x3a + 2 * i) + +static int rk808_read(uint8_t reg, uint8_t *value) +{ + return i2c_readb(CONFIG_PMIC_BUS, RK808_ADDR, reg, value); +} + +static int rk808_write(uint8_t reg, uint8_t value) +{ + return i2c_writeb(CONFIG_PMIC_BUS, RK808_ADDR, reg, value); +} + +static void rk808_clrsetbits(uint8_t reg, uint8_t clr, uint8_t set) { uint8_t value; - if (i2c_readb(bus, RK808_ADDR, reg, &value) || - i2c_writeb(bus, RK808_ADDR, reg, (value & ~clr) | set)) + if (rk808_read(reg, &value) || rk808_write(reg, (value & ~clr) | set)) printk(BIOS_ERR, "ERROR: Cannot set Rk808[%#x]!\n", reg); } -void rk808_configure_switch(uint8_t bus, int sw, int enabled) +void rk808_configure_switch(int sw, int enabled) { assert(sw == 1 || sw == 2); - rk808_clrsetbits(bus, DCDC_EN, 1 << (sw + 4), !!enabled << (sw + 4)); + rk808_clrsetbits(DCDC_EN, 1 << (sw + 4), !!enabled << (sw + 4)); } -void rk808_configure_ldo(uint8_t bus, int ldo, int millivolts) +void rk808_configure_ldo(int ldo, int millivolts) { uint8_t vsel; if (!millivolts) { - rk808_clrsetbits(bus, LDO_EN, 1 << (ldo - 1), 0); + rk808_clrsetbits(LDO_EN, 1 << (ldo - 1), 0); return; } @@ -77,11 +90,11 @@ void rk808_configure_ldo(uint8_t bus, int ldo, int millivolts) die("Unknown LDO index!"); } - rk808_clrsetbits(bus, LDO_ONSEL(ldo), 0x1f, vsel); - rk808_clrsetbits(bus, LDO_EN, 0, 1 << (ldo - 1)); + rk808_clrsetbits(LDO_ONSEL(ldo), 0x1f, vsel); + rk808_clrsetbits(LDO_EN, 0, 1 << (ldo - 1)); } -void rk808_configure_buck(uint8_t bus, int buck, int millivolts) +void rk808_configure_buck(int buck, int millivolts) { uint8_t vsel; uint8_t buck_reg; @@ -102,6 +115,6 @@ void rk808_configure_buck(uint8_t bus, int buck, int millivolts) default: die("fault buck index!"); } - rk808_clrsetbits(bus, buck_reg, 0x3f, vsel); - rk808_clrsetbits(bus, DCDC_EN, 0, 1 << (buck - 1)); + rk808_clrsetbits(buck_reg, 0x3f, vsel); + rk808_clrsetbits(DCDC_EN, 0, 1 << (buck - 1)); } |