[U-Boot] [PATCH v2 0/5] Add Basic support for RK818

The RK818 chip is a power management IC for multimedia and handheld devices. It contains the following components:
- Regulators - RTC - Clkout - battery support
This series patch just give it a basic support, to make rk818 board work.
Changes in v2: - remove input current selection in probe, it should be configured in board_init_f by manual. - rename rk808 to rk8xx
Jacob Chen (5): power: pmic: append rk818 regs to rk808 power: pmic: rk808: add RK818 support power: regulator: rk808: replace vsel_bits with vsel_mask power: regulator: rk808: add rk818 support power: rk808: rename to rk8xx
arch/arm/mach-rockchip/rk3288/sdram_rk3288.c | 6 +- configs/chromebit_mickey_defconfig | 4 +- configs/chromebook_jerry_defconfig | 4 +- configs/chromebook_minnie_defconfig | 4 +- configs/fennec-rk3288_defconfig | 4 +- configs/popmetal-rk3288_defconfig | 4 +- configs/sandbox_defconfig | 4 +- configs/sandbox_noblk_defconfig | 4 +- configs/sandbox_spl_defconfig | 4 +- configs/tinker-rk3288_defconfig | 4 +- drivers/power/pmic/Kconfig | 6 +- drivers/power/pmic/Makefile | 2 +- drivers/power/pmic/{rk808.c => rk8xx.c} | 52 +++++--- drivers/power/regulator/Kconfig | 8 +- drivers/power/regulator/Makefile | 2 +- drivers/power/regulator/{rk808.c => rk8xx.c} | 142 +++++++++++++------- include/power/rk808_pmic.h | 77 ----------- include/power/rk8xx_pmic.h | 193 +++++++++++++++++++++++++++ 18 files changed, 354 insertions(+), 170 deletions(-) rename drivers/power/pmic/{rk808.c => rk8xx.c} (59%) rename drivers/power/regulator/{rk808.c => rk8xx.c} (55%) delete mode 100644 include/power/rk808_pmic.h create mode 100644 include/power/rk8xx_pmic.h

Both RK808 and RK818 chips are using a similar register map, so we can reuse them.
I have also add reg prefix to exist registers, to keep them same style.
Signed-off-by: Jacob Chen jacob-chen@iotwrt.com Reviewed-by: Simon Glass sjg@chromium.org ---
Changes in v2: None
drivers/power/regulator/rk808.c | 18 ++--- include/power/rk808_pmic.h | 164 ++++++++++++++++++++++++++++++++-------- 2 files changed, 143 insertions(+), 39 deletions(-)
diff --git a/drivers/power/regulator/rk808.c b/drivers/power/regulator/rk808.c index adef8f5..f1a00c5 100644 --- a/drivers/power/regulator/rk808.c +++ b/drivers/power/regulator/rk808.c @@ -35,14 +35,14 @@ static const struct rk808_reg_info rk808_buck[] = { };
static const struct rk808_reg_info rk808_ldo[] = { - { 1800000, 100000, LDO1_ON_VSEL, 5, }, - { 1800000, 100000, LDO2_ON_VSEL, 5, }, - { 800000, 100000, LDO3_ON_VSEL, 4, }, - { 1800000, 100000, LDO4_ON_VSEL, 5, }, - { 1800000, 100000, LDO5_ON_VSEL, 5, }, - { 800000, 100000, LDO6_ON_VSEL, 5, }, - { 800000, 100000, LDO7_ON_VSEL, 5, }, - { 1800000, 100000, LDO8_ON_VSEL, 5, }, + { 1800000, 100000, REG_LDO1_ON_VSEL, 5, }, + { 1800000, 100000, REG_LDO2_ON_VSEL, 5, }, + { 800000, 100000, REG_LDO3_ON_VSEL, 4, }, + { 1800000, 100000, REG_LDO4_ON_VSEL, 5, }, + { 1800000, 100000, REG_LDO5_ON_VSEL, 5, }, + { 800000, 100000, REG_LDO6_ON_VSEL, 5, }, + { 800000, 100000, REG_LDO7_ON_VSEL, 5, }, + { 1800000, 100000, REG_LDO8_ON_VSEL, 5, }, };
@@ -69,7 +69,7 @@ static int _buck_set_enable(struct udevice *pmic, int buck, bool enable) buck--; mask = 1 << buck; if (enable) { - ret = pmic_clrsetbits(pmic, DCDC_ILMAX, 0, 3 << (buck * 2)); + ret = pmic_clrsetbits(pmic, REG_DCDC_ILMAX, 0, 3 << (buck * 2)); if (ret) return ret; ret = pmic_clrsetbits(pmic, REG_DCDC_UV_ACT, 1 << buck, 0); diff --git a/include/power/rk808_pmic.h b/include/power/rk808_pmic.h index fb0800b..d29c2b3 100644 --- a/include/power/rk808_pmic.h +++ b/include/power/rk808_pmic.h @@ -9,12 +9,37 @@ #define _PMIC_RK808_H_
enum { - REG_DCDC_EN = 0x23, + REG_SECONDS = 0x00, + REG_MINUTES, + REG_HOURS, + REG_DAYS, + REG_MONTHS, + REG_YEARS, + REG_WEEKS, + REG_ALARM_SECONDS, + REG_ALARM_MINUTES, + REG_ALARM_HOURS, + REG_ALARM_DAYS, + REG_ALARM_MONTHS, + REG_ALARM_YEARS, + + REG_RTC_CTRL = 0x10, + REG_RTC_STATUS, + REG_RTC_INT, + REG_RTC_COMP_LSB, + REG_RTC_COMP_MSB, + + ID_MSB = 0x17, + ID_LSB, + + REG_CLK32OUT = 0x20, + REG_VB_MON, + REG_THERMAL, + REG_DCDC_EN, REG_LDO_EN, REG_SLEEP_SET_OFF1, REG_SLEEP_SET_OFF2, REG_DCDC_UV_STS, - REG_DCDC_UV_ACT, REG_LDO_UV_STS, REG_LDO_UV_ACT, @@ -23,7 +48,6 @@ enum { REG_VOUT_MON_TDB, REG_BUCK1_CONFIG, REG_BUCK1_ON_VSEL, - REG_BUCK1_SLP_VSEL, REG_BUCK1_DVS_VSEL, REG_BUCK2_CONFIG, @@ -32,37 +56,117 @@ enum { REG_BUCK2_DVS_VSEL, REG_BUCK3_CONFIG, REG_BUCK4_CONFIG, - REG_BUCK4_ON_VSEL, REG_BUCK4_SLP_VSEL, - LDO1_ON_VSEL = 0x3b, - LDO1_SLP_VSEL, - LDO2_ON_VSEL, - LDO2_SLP_VSEL, - LDO3_ON_VSEL, - - LDO3_SLP_VSEL, - LDO4_ON_VSEL, - LDO4_SLP_VSEL, - LDO5_ON_VSEL, - LDO5_SLP_VSEL, - LDO6_ON_VSEL, - LDO6_SLP_VSEL, - LDO7_ON_VSEL, - - LDO7_SLP_VSEL, - LDO8_ON_VSEL, - LDO8_SLP_VSEL, - DEVCTRL, - INT_STS1, - INT_STS_MSK1, - INT_STS2, - INT_STS_MSK2, - IO_POL, + REG_BOOST_CONFIG_REG, + REG_LDO1_ON_VSEL, + REG_LDO1_SLP_VSEL, + REG_LDO2_ON_VSEL, + REG_LDO2_SLP_VSEL, + REG_LDO3_ON_VSEL, + REG_LDO3_SLP_VSEL, + REG_LDO4_ON_VSEL, + REG_LDO4_SLP_VSEL, + REG_LDO5_ON_VSEL, + REG_LDO5_SLP_VSEL, + REG_LDO6_ON_VSEL, + REG_LDO6_SLP_VSEL, + REG_LDO7_ON_VSEL, + REG_LDO7_SLP_VSEL, + REG_LDO8_ON_VSEL, + REG_LDO8_SLP_VSEL, + REG_DEVCTRL, + REG_INT_STS1, + REG_INT_STS_MSK1, + REG_INT_STS2, + REG_INT_STS_MSK2, + REG_IO_POL, + REG_OTP_VDD_EN, + REG_H5V_EN, + REG_SLEEP_SET_OFF, + REG_BOOST_LDO9_ON_VSEL, + REG_BOOST_LDO9_SLP_VSEL, + REG_BOOST_CTRL,
/* Not sure what this does */ - DCDC_ILMAX = 0x90, - + REG_DCDC_ILMAX = 0x90, + REG_CHRG_COMP = 0x9a, + REG_SUP_STS = 0xa0, + REG_USB_CTRL, + REG1_CHRG_CTRL, + REG2_CHRG_CTRL, + REG3_CHRG_CTRL, + REG_BAT_CTRL, + REG_BAT_HTS_TS1, + REG_BAT_LTS_TS1, + REG_BAT_HTS_TS2, + REG_BAT_LTS_TS2, + REG_TS_CTRL, + REG_ADC_CTRL, + REG_ON_SOURCE, + REG_OFF_SOURCE, + REG_GGCON, + REG_GGSTS, + REG_FRAME_SMP_INTERV, + REG_AUTO_SLP_CUR_THR, + REG3_GASCNT_CAL, + REG2_GASCNT_CAL, + REG1_GASCNT_CAL, + REG0_GASCNT_CAL, + REG3_GASCNT, + REG2_GASCNT, + REG1_GASCNT, + REG0_GASCNT, + REGH_BAT_CUR_AVG, + REGL_BAT_CUR_AVG, + REGH_TS1_ADC, + REGL_TS1_ADC, + REGH_TS2_ADC, + REGL_TS2_ADC, + REGH_BAT_OCV, + REGL_BAT_OCV, + REGH_BAT_VOL, + REGL_BAT_VOL, + REGH_RELAX_ENTRY_THRES, + REGL_RELAX_ENTRY_THRES, + REGH_RELAX_EXIT_THRES, + REGL_RELAX_EXIT_THRES, + REGH_RELAX_VOL1, + REGL_RELAX_VOL1, + REGH_RELAX_VOL2, + REGL_RELAX_VOL2, + REGH_BAT_CUR_R_CALC, + REGL_BAT_CUR_R_CALC, + REGH_BAT_VOL_R_CALC, + REGL_BAT_VOL_R_CALC, + REGH_CAL_OFFSET, + REGL_CAL_OFFSET, + REG_NON_ACT_TIMER_CNT, + REGH_VCALIB0, + REGL_VCALIB0, + REGH_VCALIB1, + REGL_VCALIB1, + REGH_IOFFSET, + REGL_IOFFSET, + REG_SOC, + REG3_REMAIN_CAP, + REG2_REMAIN_CAP, + REG1_REMAIN_CAP, + REG0_REMAIN_CAP, + REG_UPDAT_LEVE, + REG3_NEW_FCC, + REG2_NEW_FCC, + REG1_NEW_FCC, + REG0_NEW_FCC, + REG_NON_ACT_TIMER_CNT_SAVE, + REG_OCV_VOL_VALID, + REG_REBOOT_CNT, + REG_POFFSET, + REG_MISC_MARK, + REG_HALT_CNT, + REGH_CALC_REST, + REGL_CALC_REST, + SAVE_DATA19, RK808_NUM_OF_REGS, };

Both RK808 and RK818 chips are using a similar register map, so we can reuse them.
I have also add reg prefix to exist registers, to keep them same style.
Signed-off-by: Jacob Chen jacob-chen@iotwrt.com Reviewed-by: Simon Glass sjg@chromium.org ---
Changes in v2: None
drivers/power/regulator/rk808.c | 18 ++--- include/power/rk808_pmic.h | 164 ++++++++++++++++++++++++++++++++-------- 2 files changed, 143 insertions(+), 39 deletions(-)
Applied to u-boot-rockchip/next, thanks!

The RK818 chip is a Power Management IC (PMIC) for multimedia and handheld devices.
For boards use rk818, the input current should be set in the early stage, before ddr initialization.
Signed-off-by: Jacob Chen jacob-chen@iotwrt.com ---
Changes in v2: - remove input current selection in probe, it should be configured in board_init_f by manual.
drivers/power/pmic/rk808.c | 16 ++++++++++++++++ include/power/rk808_pmic.h | 12 ++++++++++++ 2 files changed, 28 insertions(+)
diff --git a/drivers/power/pmic/rk808.c b/drivers/power/pmic/rk808.c index 3f5f316..582e456 100644 --- a/drivers/power/pmic/rk808.c +++ b/drivers/power/pmic/rk808.c @@ -80,6 +80,20 @@ static int rk808_bind(struct udevice *dev) } #endif
+static int rk808_probe(struct udevice *dev) +{ + struct rk808_priv *priv = dev_get_priv(dev); + uint8_t msb, lsb; + + /* read Chip variant */ + rk808_read(dev, ID_MSB, &msb, 1); + rk808_read(dev, ID_LSB, &lsb, 1); + + priv->variant = ((msb << 8) | lsb) & RK8XX_ID_MSK; + + return 0; +} + static struct dm_pmic_ops rk808_ops = { .reg_count = rk808_reg_count, .read = rk808_read, @@ -88,6 +102,7 @@ static struct dm_pmic_ops rk808_ops = {
static const struct udevice_id rk808_ids[] = { { .compatible = "rockchip,rk808" }, + { .compatible = "rockchip,rk818" }, { } };
@@ -98,5 +113,6 @@ U_BOOT_DRIVER(pmic_rk808) = { #if CONFIG_IS_ENABLED(PMIC_CHILDREN) .bind = rk808_bind, #endif + .probe = rk808_probe, .ops = &rk808_ops, }; diff --git a/include/power/rk808_pmic.h b/include/power/rk808_pmic.h index d29c2b3..c370c32 100644 --- a/include/power/rk808_pmic.h +++ b/include/power/rk808_pmic.h @@ -170,12 +170,24 @@ enum { RK808_NUM_OF_REGS, };
+enum { + RK805_ID = 0x8050, + RK808_ID = 0x0000, + RK818_ID = 0x8180, +}; + +#define RK8XX_ID_MSK 0xfff0 + struct rk808_reg_table { char *name; u8 reg_ctl; u8 reg_vol; };
+struct rk808_priv { + int variant; +}; + int rk808_spl_configure_buck(struct udevice *pmic, int buck, int uvolt);
#endif

2017-05-02 14:54 GMT+08:00 Jacob Chen jacob-chen@iotwrt.com:
The RK818 chip is a Power Management IC (PMIC) for multimedia and handheld devices.
For boards use rk818, the input current should be set in the early stage, before ddr initialization.
Signed-off-by: Jacob Chen jacob-chen@iotwrt.com
Changes in v2:
- remove input current selection in probe, it should be configured
in board_init_f by manual.
Maybe we'd better provide a function here, like `rk808_spl_configure_buck` It could be `rk8xx_spl_init(pmic, parm....)`
drivers/power/pmic/rk808.c | 16 ++++++++++++++++ include/power/rk808_pmic.h | 12 ++++++++++++ 2 files changed, 28 insertions(+)
diff --git a/drivers/power/pmic/rk808.c b/drivers/power/pmic/rk808.c index 3f5f316..582e456 100644 --- a/drivers/power/pmic/rk808.c +++ b/drivers/power/pmic/rk808.c @@ -80,6 +80,20 @@ static int rk808_bind(struct udevice *dev) } #endif
+static int rk808_probe(struct udevice *dev) +{
struct rk808_priv *priv = dev_get_priv(dev);
uint8_t msb, lsb;
/* read Chip variant */
rk808_read(dev, ID_MSB, &msb, 1);
rk808_read(dev, ID_LSB, &lsb, 1);
priv->variant = ((msb << 8) | lsb) & RK8XX_ID_MSK;
return 0;
+}
static struct dm_pmic_ops rk808_ops = { .reg_count = rk808_reg_count, .read = rk808_read, @@ -88,6 +102,7 @@ static struct dm_pmic_ops rk808_ops = {
static const struct udevice_id rk808_ids[] = { { .compatible = "rockchip,rk808" },
{ .compatible = "rockchip,rk818" }, { }
};
@@ -98,5 +113,6 @@ U_BOOT_DRIVER(pmic_rk808) = { #if CONFIG_IS_ENABLED(PMIC_CHILDREN) .bind = rk808_bind, #endif
.probe = rk808_probe, .ops = &rk808_ops,
}; diff --git a/include/power/rk808_pmic.h b/include/power/rk808_pmic.h index d29c2b3..c370c32 100644 --- a/include/power/rk808_pmic.h +++ b/include/power/rk808_pmic.h @@ -170,12 +170,24 @@ enum { RK808_NUM_OF_REGS, };
+enum {
RK805_ID = 0x8050,
RK808_ID = 0x0000,
RK818_ID = 0x8180,
+};
+#define RK8XX_ID_MSK 0xfff0
struct rk808_reg_table { char *name; u8 reg_ctl; u8 reg_vol; };
+struct rk808_priv {
int variant;
+};
int rk808_spl_configure_buck(struct udevice *pmic, int buck, int uvolt);
#endif
2.7.4

2017-05-02 14:54 GMT+08:00 Jacob Chen jacob-chen@iotwrt.com:
The RK818 chip is a Power Management IC (PMIC) for multimedia and handheld devices.
For boards use rk818, the input current should be set in the early stage, before ddr initialization.
Signed-off-by: Jacob Chen jacob-chen@iotwrt.com
Changes in v2:
- remove input current selection in probe, it should be configured
in board_init_f by manual.
Maybe we'd better provide a function here, like `rk808_spl_configure_buck` It could be `rk8xx_spl_init(pmic, parm....)`
drivers/power/pmic/rk808.c | 16 ++++++++++++++++ include/power/rk808_pmic.h | 12 ++++++++++++ 2 files changed, 28 insertions(+)
Applied to u-boot-rockchip/next, thanks!

Using mask is more flexible than bits.
Signed-off-by: Jacob Chen jacob-chen@iotwrt.com Reviewed-by: Simon Glass sjg@chromium.org ---
Changes in v2: None
drivers/power/regulator/rk808.c | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-)
diff --git a/drivers/power/regulator/rk808.c b/drivers/power/regulator/rk808.c index f1a00c5..441806c 100644 --- a/drivers/power/regulator/rk808.c +++ b/drivers/power/regulator/rk808.c @@ -20,36 +20,41 @@ #define ENABLE_DRIVER #endif
+/* Field Definitions */ +#define RK808_BUCK_VSEL_MASK 0x3f +#define RK808_BUCK4_VSEL_MASK 0xf +#define RK808_LDO_VSEL_MASK 0x1f + struct rk808_reg_info { uint min_uv; uint step_uv; s8 vsel_reg; - u8 vsel_bits; + u8 vsel_mask; };
static const struct rk808_reg_info rk808_buck[] = { - { 712500, 12500, REG_BUCK1_ON_VSEL, 6, }, - { 712500, 12500, REG_BUCK2_ON_VSEL, 6, }, - { 712500, 12500, -1, 6, }, - { 1800000, 100000, REG_BUCK4_ON_VSEL, 4, }, + { 712500, 12500, REG_BUCK1_ON_VSEL, RK808_BUCK_VSEL_MASK, }, + { 712500, 12500, REG_BUCK2_ON_VSEL, RK808_BUCK_VSEL_MASK, }, + { 712500, 12500, -1, RK808_BUCK_VSEL_MASK, }, + { 1800000, 100000, REG_BUCK4_ON_VSEL, RK808_BUCK4_VSEL_MASK, }, };
static const struct rk808_reg_info rk808_ldo[] = { - { 1800000, 100000, REG_LDO1_ON_VSEL, 5, }, - { 1800000, 100000, REG_LDO2_ON_VSEL, 5, }, - { 800000, 100000, REG_LDO3_ON_VSEL, 4, }, - { 1800000, 100000, REG_LDO4_ON_VSEL, 5, }, - { 1800000, 100000, REG_LDO5_ON_VSEL, 5, }, - { 800000, 100000, REG_LDO6_ON_VSEL, 5, }, - { 800000, 100000, REG_LDO7_ON_VSEL, 5, }, - { 1800000, 100000, REG_LDO8_ON_VSEL, 5, }, + { 1800000, 100000, REG_LDO1_ON_VSEL, RK808_LDO_VSEL_MASK, }, + { 1800000, 100000, REG_LDO2_ON_VSEL, RK808_LDO_VSEL_MASK, }, + { 800000, 100000, REG_LDO3_ON_VSEL, RK808_BUCK4_VSEL_MASK, }, + { 1800000, 100000, REG_LDO4_ON_VSEL, RK808_LDO_VSEL_MASK, }, + { 1800000, 100000, REG_LDO5_ON_VSEL, RK808_LDO_VSEL_MASK, }, + { 800000, 100000, REG_LDO6_ON_VSEL, RK808_LDO_VSEL_MASK, }, + { 800000, 100000, REG_LDO7_ON_VSEL, RK808_LDO_VSEL_MASK, }, + { 1800000, 100000, REG_LDO8_ON_VSEL, RK808_LDO_VSEL_MASK, }, };
static int _buck_set_value(struct udevice *pmic, int buck, int uvolt) { const struct rk808_reg_info *info = &rk808_buck[buck - 1]; - int mask = (1 << info->vsel_bits) - 1; + int mask = info->vsel_mask; int val;
if (info->vsel_reg == -1) @@ -85,7 +90,7 @@ static int buck_get_value(struct udevice *dev) { int buck = dev->driver_data - 1; const struct rk808_reg_info *info = &rk808_buck[buck]; - int mask = (1 << info->vsel_bits) - 1; + int mask = info->vsel_mask; int ret, val;
if (info->vsel_reg == -1) @@ -131,7 +136,7 @@ static int ldo_get_value(struct udevice *dev) { int ldo = dev->driver_data - 1; const struct rk808_reg_info *info = &rk808_ldo[ldo]; - int mask = (1 << info->vsel_bits) - 1; + int mask = info->vsel_mask; int ret, val;
if (info->vsel_reg == -1) @@ -148,7 +153,7 @@ static int ldo_set_value(struct udevice *dev, int uvolt) { int ldo = dev->driver_data - 1; const struct rk808_reg_info *info = &rk808_ldo[ldo]; - int mask = (1 << info->vsel_bits) - 1; + int mask = info->vsel_mask; int val;
if (info->vsel_reg == -1)

Using mask is more flexible than bits.
Signed-off-by: Jacob Chen jacob-chen@iotwrt.com Reviewed-by: Simon Glass sjg@chromium.org ---
Changes in v2: None
drivers/power/regulator/rk808.c | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-)
Applied to u-boot-rockchip/next, thanks!

Add support for the rk818 regulator. The regulator module consists of 4 DCDCs, 9 LDOs, 1 switch and 1 BOOST converter which is used to power OTG and HDMI5V.
Signed-off-by: Jacob Chen jacob-chen@iotwrt.com Reviewed-by: Simon Glass sjg@chromium.org ---
Changes in v2: None
drivers/power/regulator/rk808.c | 55 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 4 deletions(-)
diff --git a/drivers/power/regulator/rk808.c b/drivers/power/regulator/rk808.c index 441806c..71ab76e 100644 --- a/drivers/power/regulator/rk808.c +++ b/drivers/power/regulator/rk808.c @@ -25,6 +25,12 @@ #define RK808_BUCK4_VSEL_MASK 0xf #define RK808_LDO_VSEL_MASK 0x1f
+#define RK818_BUCK_VSEL_MASK 0x3f +#define RK818_BUCK4_VSEL_MASK 0x1f +#define RK818_LDO_VSEL_MASK 0x1f +#define RK818_LDO3_ON_VSEL_MASK 0xf +#define RK818_BOOST_ON_VSEL_MASK 0xe0 + struct rk808_reg_info { uint min_uv; uint step_uv; @@ -50,10 +56,51 @@ static const struct rk808_reg_info rk808_ldo[] = { { 1800000, 100000, REG_LDO8_ON_VSEL, RK808_LDO_VSEL_MASK, }, };
+static const struct rk808_reg_info rk818_buck[] = { + { 712500, 12500, REG_BUCK1_ON_VSEL, RK818_BUCK_VSEL_MASK, }, + { 712500, 12500, REG_BUCK2_ON_VSEL, RK818_BUCK_VSEL_MASK, }, + { 712500, 12500, -1, RK818_BUCK_VSEL_MASK, }, + { 1800000, 100000, REG_BUCK4_ON_VSEL, RK818_BUCK4_VSEL_MASK, }, +}; + +static const struct rk808_reg_info rk818_ldo[] = { + { 1800000, 100000, REG_LDO1_ON_VSEL, RK818_LDO_VSEL_MASK, }, + { 1800000, 100000, REG_LDO2_ON_VSEL, RK818_LDO_VSEL_MASK, }, + { 800000, 100000, REG_LDO3_ON_VSEL, RK818_LDO3_ON_VSEL_MASK, }, + { 1800000, 100000, REG_LDO4_ON_VSEL, RK818_LDO_VSEL_MASK, }, + { 1800000, 100000, REG_LDO5_ON_VSEL, RK818_LDO_VSEL_MASK, }, + { 800000, 100000, REG_LDO6_ON_VSEL, RK818_LDO_VSEL_MASK, }, + { 800000, 100000, REG_LDO7_ON_VSEL, RK818_LDO_VSEL_MASK, }, + { 1800000, 100000, REG_LDO8_ON_VSEL, RK818_LDO_VSEL_MASK, }, +}; + +static const struct rk808_reg_info *get_buck_reg(struct udevice *pmic, + int num) +{ + struct rk808_priv *rk808 = dev_get_priv(pmic); + switch (rk808->variant) { + case RK818_ID: + return &rk818_buck[num]; + default: + return &rk808_buck[num]; + } +} + +static const struct rk808_reg_info *get_ldo_reg(struct udevice *pmic, + int num) +{ + struct rk808_priv *rk808 = dev_get_priv(pmic); + switch (rk808->variant) { + case RK818_ID: + return &rk818_ldo[num - 1]; + default: + return &rk808_ldo[num - 1]; + } +}
static int _buck_set_value(struct udevice *pmic, int buck, int uvolt) { - const struct rk808_reg_info *info = &rk808_buck[buck - 1]; + const struct rk808_reg_info *info = get_buck_reg(pmic, buck - 1); int mask = info->vsel_mask; int val;
@@ -89,7 +136,7 @@ static int _buck_set_enable(struct udevice *pmic, int buck, bool enable) static int buck_get_value(struct udevice *dev) { int buck = dev->driver_data - 1; - const struct rk808_reg_info *info = &rk808_buck[buck]; + const struct rk808_reg_info *info = get_buck_reg(dev->parent, buck); int mask = info->vsel_mask; int ret, val;
@@ -135,7 +182,7 @@ static bool buck_get_enable(struct udevice *dev) static int ldo_get_value(struct udevice *dev) { int ldo = dev->driver_data - 1; - const struct rk808_reg_info *info = &rk808_ldo[ldo]; + const struct rk808_reg_info *info = get_ldo_reg(dev->parent, ldo); int mask = info->vsel_mask; int ret, val;
@@ -152,7 +199,7 @@ static int ldo_get_value(struct udevice *dev) static int ldo_set_value(struct udevice *dev, int uvolt) { int ldo = dev->driver_data - 1; - const struct rk808_reg_info *info = &rk808_ldo[ldo]; + const struct rk808_reg_info *info = get_ldo_reg(dev->parent, ldo); int mask = info->vsel_mask; int val;

2017-05-02 14:54 GMT+08:00 Jacob Chen jacob-chen@iotwrt.com:
Add support for the rk818 regulator. The regulator module consists of 4 DCDCs, 9 LDOs, 1 switch and 1 BOOST converter which is used to power OTG and HDMI5V.
Signed-off-by: Jacob Chen jacob-chen@iotwrt.com Reviewed-by: Simon Glass sjg@chromium.org
Changes in v2: None
drivers/power/regulator/rk808.c | 55 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 4 deletions(-)
diff --git a/drivers/power/regulator/rk808.c b/drivers/power/regulator/rk808.c index 441806c..71ab76e 100644 --- a/drivers/power/regulator/rk808.c +++ b/drivers/power/regulator/rk808.c @@ -25,6 +25,12 @@ #define RK808_BUCK4_VSEL_MASK 0xf #define RK808_LDO_VSEL_MASK 0x1f
+#define RK818_BUCK_VSEL_MASK 0x3f +#define RK818_BUCK4_VSEL_MASK 0x1f +#define RK818_LDO_VSEL_MASK 0x1f +#define RK818_LDO3_ON_VSEL_MASK 0xf +#define RK818_BOOST_ON_VSEL_MASK 0xe0
struct rk808_reg_info { uint min_uv; uint step_uv; @@ -50,10 +56,51 @@ static const struct rk808_reg_info rk808_ldo[] = { { 1800000, 100000, REG_LDO8_ON_VSEL, RK808_LDO_VSEL_MASK, }, };
+static const struct rk808_reg_info rk818_buck[] = {
{ 712500, 12500, REG_BUCK1_ON_VSEL, RK818_BUCK_VSEL_MASK, },
{ 712500, 12500, REG_BUCK2_ON_VSEL, RK818_BUCK_VSEL_MASK, },
{ 712500, 12500, -1, RK818_BUCK_VSEL_MASK, },
{ 1800000, 100000, REG_BUCK4_ON_VSEL, RK818_BUCK4_VSEL_MASK, },
+};
+static const struct rk808_reg_info rk818_ldo[] = {
{ 1800000, 100000, REG_LDO1_ON_VSEL, RK818_LDO_VSEL_MASK, },
{ 1800000, 100000, REG_LDO2_ON_VSEL, RK818_LDO_VSEL_MASK, },
{ 800000, 100000, REG_LDO3_ON_VSEL, RK818_LDO3_ON_VSEL_MASK, },
{ 1800000, 100000, REG_LDO4_ON_VSEL, RK818_LDO_VSEL_MASK, },
{ 1800000, 100000, REG_LDO5_ON_VSEL, RK818_LDO_VSEL_MASK, },
{ 800000, 100000, REG_LDO6_ON_VSEL, RK818_LDO_VSEL_MASK, },
{ 800000, 100000, REG_LDO7_ON_VSEL, RK818_LDO_VSEL_MASK, },
{ 1800000, 100000, REG_LDO8_ON_VSEL, RK818_LDO_VSEL_MASK, },
+};
+static const struct rk808_reg_info *get_buck_reg(struct udevice *pmic,
int num)
+{
struct rk808_priv *rk808 = dev_get_priv(pmic);
switch (rk808->variant) {
case RK818_ID:
return &rk818_buck[num];
default:
return &rk808_buck[num];
}
+}
+static const struct rk808_reg_info *get_ldo_reg(struct udevice *pmic,
int num)
+{
struct rk808_priv *rk808 = dev_get_priv(pmic);
switch (rk808->variant) {
case RK818_ID:
return &rk818_ldo[num - 1];
default:
return &rk808_ldo[num - 1];
}
+}
static int _buck_set_value(struct udevice *pmic, int buck, int uvolt) {
const struct rk808_reg_info *info = &rk808_buck[buck - 1];
const struct rk808_reg_info *info = get_buck_reg(pmic, buck - 1); int mask = info->vsel_mask; int val;
@@ -89,7 +136,7 @@ static int _buck_set_enable(struct udevice *pmic, int buck, bool enable) static int buck_get_value(struct udevice *dev) { int buck = dev->driver_data - 1;
const struct rk808_reg_info *info = &rk808_buck[buck];
const struct rk808_reg_info *info = get_buck_reg(dev->parent, buck); int mask = info->vsel_mask; int ret, val;
@@ -135,7 +182,7 @@ static bool buck_get_enable(struct udevice *dev) static int ldo_get_value(struct udevice *dev) { int ldo = dev->driver_data - 1;
const struct rk808_reg_info *info = &rk808_ldo[ldo];
const struct rk808_reg_info *info = get_ldo_reg(dev->parent, ldo); int mask = info->vsel_mask; int ret, val;
@@ -152,7 +199,7 @@ static int ldo_get_value(struct udevice *dev) static int ldo_set_value(struct udevice *dev, int uvolt) { int ldo = dev->driver_data - 1;
const struct rk808_reg_info *info = &rk808_ldo[ldo];
const struct rk808_reg_info *info = get_ldo_reg(dev->parent, ldo); int mask = info->vsel_mask; int val;
-- 2.7.4
It have some toubles to support DCDC_BOOST, since it don't use num as suffix. The problem about LDO9 is that it don't have same register map with others, and i don't want to change much code... We only need a basic support, i think it's ok to ignore them.

2017-05-02 14:54 GMT+08:00 Jacob Chen jacob-chen@iotwrt.com:
Add support for the rk818 regulator. The regulator module consists of 4 DCDCs, 9 LDOs, 1 switch and 1 BOOST converter which is used to power OTG and HDMI5V.
Signed-off-by: Jacob Chen jacob-chen@iotwrt.com Reviewed-by: Simon Glass sjg@chromium.org
Changes in v2: None
drivers/power/regulator/rk808.c | 55 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 4 deletions(-)
Applied to u-boot-rockchip/next, thanks!

Since this driver can be used for rk8xx series pmic, let's rename rk808 to rk8xx, to make it clear.
Configs parts are done by sed -i "s/RK808/RK8XX/g" `grep RK808 -lr ./`
Signed-off-by: Jacob Chen jacob-chen@iotwrt.com ---
Changes in v2: - rename rk808 to rk8xx
arch/arm/mach-rockchip/rk3288/sdram_rk3288.c | 6 +-- configs/chromebit_mickey_defconfig | 4 +- configs/chromebook_jerry_defconfig | 4 +- configs/chromebook_minnie_defconfig | 4 +- configs/fennec-rk3288_defconfig | 4 +- configs/popmetal-rk3288_defconfig | 4 +- configs/sandbox_defconfig | 4 +- configs/sandbox_noblk_defconfig | 4 +- configs/sandbox_spl_defconfig | 4 +- configs/tinker-rk3288_defconfig | 4 +- drivers/power/pmic/Kconfig | 6 +-- drivers/power/pmic/Makefile | 2 +- drivers/power/pmic/{rk808.c => rk8xx.c} | 46 +++++++++--------- drivers/power/regulator/Kconfig | 8 ++-- drivers/power/regulator/Makefile | 2 +- drivers/power/regulator/{rk808.c => rk8xx.c} | 70 ++++++++++++++-------------- include/power/{rk808_pmic.h => rk8xx_pmic.h} | 10 ++-- 17 files changed, 93 insertions(+), 93 deletions(-) rename drivers/power/pmic/{rk808.c => rk8xx.c} (65%) rename drivers/power/regulator/{rk808.c => rk8xx.c} (82%) rename include/power/{rk808_pmic.h => rk8xx_pmic.h} (95%)
diff --git a/arch/arm/mach-rockchip/rk3288/sdram_rk3288.c b/arch/arm/mach-rockchip/rk3288/sdram_rk3288.c index 8549b28..2feda61 100644 --- a/arch/arm/mach-rockchip/rk3288/sdram_rk3288.c +++ b/arch/arm/mach-rockchip/rk3288/sdram_rk3288.c @@ -24,7 +24,7 @@ #include <asm/arch/sdram.h> #include <linux/err.h> #include <power/regulator.h> -#include <power/rk808_pmic.h> +#include <power/rk8xx_pmic.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -981,11 +981,11 @@ static int veyron_init(struct dram_info *priv) return ret;
/* Slowly raise to max CPU voltage to prevent overshoot */ - ret = rk808_spl_configure_buck(pmic, 1, 1200000); + ret = rk8xx_spl_configure_buck(pmic, 1, 1200000); if (ret) return ret; udelay(175);/* Must wait for voltage to stabilize, 2mV/us */ - ret = rk808_spl_configure_buck(pmic, 1, 1400000); + ret = rk8xx_spl_configure_buck(pmic, 1, 1400000); if (ret) return ret; udelay(100);/* Must wait for voltage to stabilize, 2mV/us */ diff --git a/configs/chromebit_mickey_defconfig b/configs/chromebit_mickey_defconfig index 7b212ff..5d14c1b 100644 --- a/configs/chromebit_mickey_defconfig +++ b/configs/chromebit_mickey_defconfig @@ -54,10 +54,10 @@ CONFIG_SPL_PINCTRL=y CONFIG_ROCKCHIP_RK3288_PINCTRL=y CONFIG_DM_PMIC=y # CONFIG_SPL_PMIC_CHILDREN is not set -CONFIG_PMIC_RK808=y +CONFIG_PMIC_RK8XX=y CONFIG_SPL_DM_REGULATOR=y CONFIG_DM_REGULATOR_FIXED=y -CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_RK8XX=y CONFIG_PWM_ROCKCHIP=y CONFIG_RAM=y CONFIG_SPL_RAM=y diff --git a/configs/chromebook_jerry_defconfig b/configs/chromebook_jerry_defconfig index 8bb73a0..72b5ae7 100644 --- a/configs/chromebook_jerry_defconfig +++ b/configs/chromebook_jerry_defconfig @@ -55,9 +55,9 @@ CONFIG_SPL_PINCTRL=y CONFIG_ROCKCHIP_RK3288_PINCTRL=y CONFIG_DM_PMIC=y # CONFIG_SPL_PMIC_CHILDREN is not set -CONFIG_PMIC_RK808=y +CONFIG_PMIC_RK8XX=y CONFIG_DM_REGULATOR_FIXED=y -CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_RK8XX=y CONFIG_PWM_ROCKCHIP=y CONFIG_RAM=y CONFIG_SPL_RAM=y diff --git a/configs/chromebook_minnie_defconfig b/configs/chromebook_minnie_defconfig index 497d7f5..5706a1a 100644 --- a/configs/chromebook_minnie_defconfig +++ b/configs/chromebook_minnie_defconfig @@ -55,9 +55,9 @@ CONFIG_SPL_PINCTRL=y CONFIG_ROCKCHIP_RK3288_PINCTRL=y CONFIG_DM_PMIC=y # CONFIG_SPL_PMIC_CHILDREN is not set -CONFIG_PMIC_RK808=y +CONFIG_PMIC_RK8XX=y CONFIG_DM_REGULATOR_FIXED=y -CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_RK8XX=y CONFIG_PWM_ROCKCHIP=y CONFIG_RAM=y CONFIG_SPL_RAM=y diff --git a/configs/fennec-rk3288_defconfig b/configs/fennec-rk3288_defconfig index bfc3917..51152da 100644 --- a/configs/fennec-rk3288_defconfig +++ b/configs/fennec-rk3288_defconfig @@ -49,9 +49,9 @@ CONFIG_SPL_PINCTRL=y # CONFIG_SPL_PINCTRL_FULL is not set CONFIG_ROCKCHIP_RK3288_PINCTRL=y CONFIG_DM_PMIC=y -CONFIG_PMIC_RK808=y +CONFIG_PMIC_RK8XX=y CONFIG_DM_REGULATOR_FIXED=y -CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_RK8XX=y CONFIG_PWM_ROCKCHIP=y CONFIG_RAM=y CONFIG_SPL_RAM=y diff --git a/configs/popmetal-rk3288_defconfig b/configs/popmetal-rk3288_defconfig index dfc84b9..f8130b2 100644 --- a/configs/popmetal-rk3288_defconfig +++ b/configs/popmetal-rk3288_defconfig @@ -50,9 +50,9 @@ CONFIG_SPL_PINCTRL=y # CONFIG_SPL_PINCTRL_FULL is not set CONFIG_ROCKCHIP_RK3288_PINCTRL=y CONFIG_DM_PMIC=y -CONFIG_PMIC_RK808=y +CONFIG_PMIC_RK8XX=y CONFIG_DM_REGULATOR_FIXED=y -CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_RK8XX=y CONFIG_PWM_ROCKCHIP=y CONFIG_RAM=y CONFIG_SPL_RAM=y diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index 01f6f5d..b6fafe1 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -122,7 +122,7 @@ CONFIG_PMIC_ACT8846=y CONFIG_DM_PMIC_PFUZE100=y CONFIG_DM_PMIC_MAX77686=y CONFIG_PMIC_PM8916=y -CONFIG_PMIC_RK808=y +CONFIG_PMIC_RK8XX=y CONFIG_PMIC_S2MPS11=y CONFIG_DM_PMIC_SANDBOX=y CONFIG_PMIC_S5M8767=y @@ -132,7 +132,7 @@ CONFIG_REGULATOR_ACT8846=y CONFIG_DM_REGULATOR_PFUZE100=y CONFIG_DM_REGULATOR_MAX77686=y CONFIG_DM_REGULATOR_FIXED=y -CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_RK8XX=y CONFIG_REGULATOR_S5M8767=y CONFIG_DM_REGULATOR_SANDBOX=y CONFIG_REGULATOR_TPS65090=y diff --git a/configs/sandbox_noblk_defconfig b/configs/sandbox_noblk_defconfig index 10e12bf..bd332db 100644 --- a/configs/sandbox_noblk_defconfig +++ b/configs/sandbox_noblk_defconfig @@ -126,7 +126,7 @@ CONFIG_PMIC_ACT8846=y CONFIG_DM_PMIC_PFUZE100=y CONFIG_DM_PMIC_MAX77686=y CONFIG_PMIC_PM8916=y -CONFIG_PMIC_RK808=y +CONFIG_PMIC_RK8XX=y CONFIG_PMIC_S2MPS11=y CONFIG_DM_PMIC_SANDBOX=y CONFIG_PMIC_S5M8767=y @@ -136,7 +136,7 @@ CONFIG_REGULATOR_ACT8846=y CONFIG_DM_REGULATOR_PFUZE100=y CONFIG_DM_REGULATOR_MAX77686=y CONFIG_DM_REGULATOR_FIXED=y -CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_RK8XX=y CONFIG_REGULATOR_S5M8767=y CONFIG_DM_REGULATOR_SANDBOX=y CONFIG_REGULATOR_TPS65090=y diff --git a/configs/sandbox_spl_defconfig b/configs/sandbox_spl_defconfig index 896b15d..380d03b 100644 --- a/configs/sandbox_spl_defconfig +++ b/configs/sandbox_spl_defconfig @@ -128,7 +128,7 @@ CONFIG_PMIC_ACT8846=y CONFIG_DM_PMIC_PFUZE100=y CONFIG_DM_PMIC_MAX77686=y CONFIG_PMIC_PM8916=y -CONFIG_PMIC_RK808=y +CONFIG_PMIC_RK8XX=y CONFIG_PMIC_S2MPS11=y CONFIG_DM_PMIC_SANDBOX=y CONFIG_PMIC_S5M8767=y @@ -138,7 +138,7 @@ CONFIG_REGULATOR_ACT8846=y CONFIG_DM_REGULATOR_PFUZE100=y CONFIG_DM_REGULATOR_MAX77686=y CONFIG_DM_REGULATOR_FIXED=y -CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_RK8XX=y CONFIG_REGULATOR_S5M8767=y CONFIG_DM_REGULATOR_SANDBOX=y CONFIG_REGULATOR_TPS65090=y diff --git a/configs/tinker-rk3288_defconfig b/configs/tinker-rk3288_defconfig index db87333..84e2d22 100644 --- a/configs/tinker-rk3288_defconfig +++ b/configs/tinker-rk3288_defconfig @@ -49,9 +49,9 @@ CONFIG_SPL_PINCTRL=y # CONFIG_SPL_PINCTRL_FULL is not set CONFIG_ROCKCHIP_RK3288_PINCTRL=y CONFIG_DM_PMIC=y -CONFIG_PMIC_RK808=y +CONFIG_PMIC_RK8XX=y CONFIG_DM_REGULATOR_FIXED=y -CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_RK8XX=y CONFIG_PWM_ROCKCHIP=y CONFIG_RAM=y CONFIG_SPL_RAM=y diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig index 03fea07..f34291f 100644 --- a/drivers/power/pmic/Kconfig +++ b/drivers/power/pmic/Kconfig @@ -28,7 +28,7 @@ config SPL_PMIC_CHILDREN This allows PMICs to support child devices (such as regulators) in SPL. This adds quite a bit of code so if you are not using this feature you can turn it off. In this case you may need a 'back door' - to call your regulator code (e.g. see rk808.c for direct functions + to call your regulator code (e.g. see rk8xx.c for direct functions for use in SPL).
config PMIC_ACT8846 @@ -92,8 +92,8 @@ config PMIC_PM8916
Driver binding info: doc/device-tree-bindings/pmic/pm8916.txt
-config PMIC_RK808 - bool "Enable support for Rockchip PMIC RK808" +config PMIC_RK8XX + bool "Enable support for Rockchip PMIC RK8XX" depends on DM_PMIC ---help--- The Rockchip RK808 PMIC provides four buck DC-DC convertors, 8 LDOs, diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile index 40240c7..23990ff 100644 --- a/drivers/power/pmic/Makefile +++ b/drivers/power/pmic/Makefile @@ -14,7 +14,7 @@ obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o obj-$(CONFIG_PMIC_ACT8846) += act8846.o obj-$(CONFIG_PMIC_MAX8997) += max8997.o obj-$(CONFIG_PMIC_PM8916) += pm8916.o -obj-$(CONFIG_PMIC_RK808) += rk808.o +obj-$(CONFIG_PMIC_RK8XX) += rk8xx.o obj-$(CONFIG_PMIC_RN5T567) += rn5t567.o obj-$(CONFIG_PMIC_TPS65090) += tps65090.o obj-$(CONFIG_PMIC_S5M8767) += s5m8767.o diff --git a/drivers/power/pmic/rk808.c b/drivers/power/pmic/rk8xx.c similarity index 65% rename from drivers/power/pmic/rk808.c rename to drivers/power/pmic/rk8xx.c index 582e456..394e2ff 100644 --- a/drivers/power/pmic/rk808.c +++ b/drivers/power/pmic/rk8xx.c @@ -10,24 +10,24 @@ #include <errno.h> #include <fdtdec.h> #include <libfdt.h> -#include <power/rk808_pmic.h> +#include <power/rk8xx_pmic.h> #include <power/pmic.h>
DECLARE_GLOBAL_DATA_PTR;
static const struct pmic_child_info pmic_children_info[] = { - { .prefix = "DCDC_REG", .driver = "rk808_buck"}, - { .prefix = "LDO_REG", .driver = "rk808_ldo"}, - { .prefix = "SWITCH_REG", .driver = "rk808_switch"}, + { .prefix = "DCDC_REG", .driver = "rk8xx_buck"}, + { .prefix = "LDO_REG", .driver = "rk8xx_ldo"}, + { .prefix = "SWITCH_REG", .driver = "rk8xx_switch"}, { }, };
-static int rk808_reg_count(struct udevice *dev) +static int rk8xx_reg_count(struct udevice *dev) { return RK808_NUM_OF_REGS; }
-static int rk808_write(struct udevice *dev, uint reg, const uint8_t *buff, +static int rk8xx_write(struct udevice *dev, uint reg, const uint8_t *buff, int len) { int ret; @@ -41,7 +41,7 @@ static int rk808_write(struct udevice *dev, uint reg, const uint8_t *buff, return 0; }
-static int rk808_read(struct udevice *dev, uint reg, uint8_t *buff, int len) +static int rk8xx_read(struct udevice *dev, uint reg, uint8_t *buff, int len) { int ret;
@@ -55,7 +55,7 @@ static int rk808_read(struct udevice *dev, uint reg, uint8_t *buff, int len) }
#if CONFIG_IS_ENABLED(PMIC_CHILDREN) -static int rk808_bind(struct udevice *dev) +static int rk8xx_bind(struct udevice *dev) { const void *blob = gd->fdt_blob; int regulators_node; @@ -80,39 +80,39 @@ static int rk808_bind(struct udevice *dev) } #endif
-static int rk808_probe(struct udevice *dev) +static int rk8xx_probe(struct udevice *dev) { - struct rk808_priv *priv = dev_get_priv(dev); + struct rk8xx_priv *priv = dev_get_priv(dev); uint8_t msb, lsb;
/* read Chip variant */ - rk808_read(dev, ID_MSB, &msb, 1); - rk808_read(dev, ID_LSB, &lsb, 1); + rk8xx_read(dev, ID_MSB, &msb, 1); + rk8xx_read(dev, ID_LSB, &lsb, 1);
priv->variant = ((msb << 8) | lsb) & RK8XX_ID_MSK;
return 0; }
-static struct dm_pmic_ops rk808_ops = { - .reg_count = rk808_reg_count, - .read = rk808_read, - .write = rk808_write, +static struct dm_pmic_ops rk8xx_ops = { + .reg_count = rk8xx_reg_count, + .read = rk8xx_read, + .write = rk8xx_write, };
-static const struct udevice_id rk808_ids[] = { +static const struct udevice_id rk8xx_ids[] = { { .compatible = "rockchip,rk808" }, { .compatible = "rockchip,rk818" }, { } };
-U_BOOT_DRIVER(pmic_rk808) = { - .name = "rk808 pmic", +U_BOOT_DRIVER(pmic_rk8xx) = { + .name = "rk8xx pmic", .id = UCLASS_PMIC, - .of_match = rk808_ids, + .of_match = rk8xx_ids, #if CONFIG_IS_ENABLED(PMIC_CHILDREN) - .bind = rk808_bind, + .bind = rk8xx_bind, #endif - .probe = rk808_probe, - .ops = &rk808_ops, + .probe = rk8xx_probe, + .ops = &rk8xx_ops, }; diff --git a/drivers/power/regulator/Kconfig b/drivers/power/regulator/Kconfig index f870e8b..ef057e0 100644 --- a/drivers/power/regulator/Kconfig +++ b/drivers/power/regulator/Kconfig @@ -76,11 +76,11 @@ config DM_REGULATOR_GPIO features for gpio regulators. The driver implements get/set for voltage value.
-config REGULATOR_RK808 - bool "Enable driver for RK808 regulators" - depends on DM_REGULATOR && PMIC_RK808 +config REGULATOR_RK8XX + bool "Enable driver for RK8XX regulators" + depends on DM_REGULATOR && PMIC_RK8XX ---help--- - Enable support for the regulator functions of the RK808 PMIC. The + Enable support for the regulator functions of the RK8XX PMIC. The driver implements get/set api for the various BUCKS and LDOs supported by the PMIC device. This driver is controlled by a device tree node which includes voltage limits. diff --git a/drivers/power/regulator/Makefile b/drivers/power/regulator/Makefile index 6002c88..3e01021 100644 --- a/drivers/power/regulator/Makefile +++ b/drivers/power/regulator/Makefile @@ -12,7 +12,7 @@ obj-$(CONFIG_DM_REGULATOR_PFUZE100) += pfuze100.o obj-$(CONFIG_REGULATOR_PWM) += pwm_regulator.o obj-$(CONFIG_$(SPL_)DM_REGULATOR_FIXED) += fixed.o obj-$(CONFIG_$(SPL_)DM_REGULATOR_GPIO) += gpio-regulator.o -obj-$(CONFIG_REGULATOR_RK808) += rk808.o +obj-$(CONFIG_REGULATOR_RK8XX) += rk8xx.o obj-$(CONFIG_REGULATOR_S5M8767) += s5m8767.o obj-$(CONFIG_DM_REGULATOR_SANDBOX) += sandbox.o obj-$(CONFIG_REGULATOR_TPS65090) += tps65090_regulator.o diff --git a/drivers/power/regulator/rk808.c b/drivers/power/regulator/rk8xx.c similarity index 82% rename from drivers/power/regulator/rk808.c rename to drivers/power/regulator/rk8xx.c index 71ab76e..fdb01eb 100644 --- a/drivers/power/regulator/rk808.c +++ b/drivers/power/regulator/rk8xx.c @@ -12,7 +12,7 @@ #include <common.h> #include <dm.h> #include <errno.h> -#include <power/rk808_pmic.h> +#include <power/rk8xx_pmic.h> #include <power/pmic.h> #include <power/regulator.h>
@@ -31,21 +31,21 @@ #define RK818_LDO3_ON_VSEL_MASK 0xf #define RK818_BOOST_ON_VSEL_MASK 0xe0
-struct rk808_reg_info { +struct rk8xx_reg_info { uint min_uv; uint step_uv; s8 vsel_reg; u8 vsel_mask; };
-static const struct rk808_reg_info rk808_buck[] = { +static const struct rk8xx_reg_info rk808_buck[] = { { 712500, 12500, REG_BUCK1_ON_VSEL, RK808_BUCK_VSEL_MASK, }, { 712500, 12500, REG_BUCK2_ON_VSEL, RK808_BUCK_VSEL_MASK, }, { 712500, 12500, -1, RK808_BUCK_VSEL_MASK, }, { 1800000, 100000, REG_BUCK4_ON_VSEL, RK808_BUCK4_VSEL_MASK, }, };
-static const struct rk808_reg_info rk808_ldo[] = { +static const struct rk8xx_reg_info rk808_ldo[] = { { 1800000, 100000, REG_LDO1_ON_VSEL, RK808_LDO_VSEL_MASK, }, { 1800000, 100000, REG_LDO2_ON_VSEL, RK808_LDO_VSEL_MASK, }, { 800000, 100000, REG_LDO3_ON_VSEL, RK808_BUCK4_VSEL_MASK, }, @@ -56,14 +56,14 @@ static const struct rk808_reg_info rk808_ldo[] = { { 1800000, 100000, REG_LDO8_ON_VSEL, RK808_LDO_VSEL_MASK, }, };
-static const struct rk808_reg_info rk818_buck[] = { +static const struct rk8xx_reg_info rk818_buck[] = { { 712500, 12500, REG_BUCK1_ON_VSEL, RK818_BUCK_VSEL_MASK, }, { 712500, 12500, REG_BUCK2_ON_VSEL, RK818_BUCK_VSEL_MASK, }, { 712500, 12500, -1, RK818_BUCK_VSEL_MASK, }, { 1800000, 100000, REG_BUCK4_ON_VSEL, RK818_BUCK4_VSEL_MASK, }, };
-static const struct rk808_reg_info rk818_ldo[] = { +static const struct rk8xx_reg_info rk818_ldo[] = { { 1800000, 100000, REG_LDO1_ON_VSEL, RK818_LDO_VSEL_MASK, }, { 1800000, 100000, REG_LDO2_ON_VSEL, RK818_LDO_VSEL_MASK, }, { 800000, 100000, REG_LDO3_ON_VSEL, RK818_LDO3_ON_VSEL_MASK, }, @@ -74,11 +74,11 @@ static const struct rk808_reg_info rk818_ldo[] = { { 1800000, 100000, REG_LDO8_ON_VSEL, RK818_LDO_VSEL_MASK, }, };
-static const struct rk808_reg_info *get_buck_reg(struct udevice *pmic, +static const struct rk8xx_reg_info *get_buck_reg(struct udevice *pmic, int num) { - struct rk808_priv *rk808 = dev_get_priv(pmic); - switch (rk808->variant) { + struct rk8xx_priv *priv = dev_get_priv(pmic); + switch (priv->variant) { case RK818_ID: return &rk818_buck[num]; default: @@ -86,11 +86,11 @@ static const struct rk808_reg_info *get_buck_reg(struct udevice *pmic, } }
-static const struct rk808_reg_info *get_ldo_reg(struct udevice *pmic, +static const struct rk8xx_reg_info *get_ldo_reg(struct udevice *pmic, int num) { - struct rk808_priv *rk808 = dev_get_priv(pmic); - switch (rk808->variant) { + struct rk8xx_priv *priv = dev_get_priv(pmic); + switch (priv->variant) { case RK818_ID: return &rk818_ldo[num - 1]; default: @@ -100,7 +100,7 @@ static const struct rk808_reg_info *get_ldo_reg(struct udevice *pmic,
static int _buck_set_value(struct udevice *pmic, int buck, int uvolt) { - const struct rk808_reg_info *info = get_buck_reg(pmic, buck - 1); + const struct rk8xx_reg_info *info = get_buck_reg(pmic, buck - 1); int mask = info->vsel_mask; int val;
@@ -136,7 +136,7 @@ static int _buck_set_enable(struct udevice *pmic, int buck, bool enable) static int buck_get_value(struct udevice *dev) { int buck = dev->driver_data - 1; - const struct rk808_reg_info *info = get_buck_reg(dev->parent, buck); + const struct rk8xx_reg_info *info = get_buck_reg(dev->parent, buck); int mask = info->vsel_mask; int ret, val;
@@ -182,7 +182,7 @@ static bool buck_get_enable(struct udevice *dev) static int ldo_get_value(struct udevice *dev) { int ldo = dev->driver_data - 1; - const struct rk808_reg_info *info = get_ldo_reg(dev->parent, ldo); + const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo); int mask = info->vsel_mask; int ret, val;
@@ -199,7 +199,7 @@ static int ldo_get_value(struct udevice *dev) static int ldo_set_value(struct udevice *dev, int uvolt) { int ldo = dev->driver_data - 1; - const struct rk808_reg_info *info = get_ldo_reg(dev->parent, ldo); + const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo); int mask = info->vsel_mask; int val;
@@ -264,7 +264,7 @@ static bool switch_get_enable(struct udevice *dev) return ret & mask ? true : false; }
-static int rk808_buck_probe(struct udevice *dev) +static int rk8xx_buck_probe(struct udevice *dev) { struct dm_regulator_uclass_platdata *uc_pdata;
@@ -276,7 +276,7 @@ static int rk808_buck_probe(struct udevice *dev) return 0; }
-static int rk808_ldo_probe(struct udevice *dev) +static int rk8xx_ldo_probe(struct udevice *dev) { struct dm_regulator_uclass_platdata *uc_pdata;
@@ -288,7 +288,7 @@ static int rk808_ldo_probe(struct udevice *dev) return 0; }
-static int rk808_switch_probe(struct udevice *dev) +static int rk8xx_switch_probe(struct udevice *dev) { struct dm_regulator_uclass_platdata *uc_pdata;
@@ -300,48 +300,48 @@ static int rk808_switch_probe(struct udevice *dev) return 0; }
-static const struct dm_regulator_ops rk808_buck_ops = { +static const struct dm_regulator_ops rk8xx_buck_ops = { .get_value = buck_get_value, .set_value = buck_set_value, .get_enable = buck_get_enable, .set_enable = buck_set_enable, };
-static const struct dm_regulator_ops rk808_ldo_ops = { +static const struct dm_regulator_ops rk8xx_ldo_ops = { .get_value = ldo_get_value, .set_value = ldo_set_value, .get_enable = ldo_get_enable, .set_enable = ldo_set_enable, };
-static const struct dm_regulator_ops rk808_switch_ops = { +static const struct dm_regulator_ops rk8xx_switch_ops = { .get_enable = switch_get_enable, .set_enable = switch_set_enable, };
-U_BOOT_DRIVER(rk808_buck) = { - .name = "rk808_buck", +U_BOOT_DRIVER(rk8xx_buck) = { + .name = "rk8xx_buck", .id = UCLASS_REGULATOR, - .ops = &rk808_buck_ops, - .probe = rk808_buck_probe, + .ops = &rk8xx_buck_ops, + .probe = rk8xx_buck_probe, };
-U_BOOT_DRIVER(rk808_ldo) = { - .name = "rk808_ldo", +U_BOOT_DRIVER(rk8xx_ldo) = { + .name = "rk8xx_ldo", .id = UCLASS_REGULATOR, - .ops = &rk808_ldo_ops, - .probe = rk808_ldo_probe, + .ops = &rk8xx_ldo_ops, + .probe = rk8xx_ldo_probe, };
-U_BOOT_DRIVER(rk808_switch) = { - .name = "rk808_switch", +U_BOOT_DRIVER(rk8xx_switch) = { + .name = "rk8xx_switch", .id = UCLASS_REGULATOR, - .ops = &rk808_switch_ops, - .probe = rk808_switch_probe, + .ops = &rk8xx_switch_ops, + .probe = rk8xx_switch_probe, }; #endif
-int rk808_spl_configure_buck(struct udevice *pmic, int buck, int uvolt) +int rk8xx_spl_configure_buck(struct udevice *pmic, int buck, int uvolt) { int ret;
diff --git a/include/power/rk808_pmic.h b/include/power/rk8xx_pmic.h similarity index 95% rename from include/power/rk808_pmic.h rename to include/power/rk8xx_pmic.h index c370c32..589f8c4 100644 --- a/include/power/rk808_pmic.h +++ b/include/power/rk8xx_pmic.h @@ -5,8 +5,8 @@ * SPDX-License-Identifier: GPL-2.0+ */
-#ifndef _PMIC_RK808_H_ -#define _PMIC_RK808_H_ +#ifndef _PMIC_RK8XX_H_ +#define _PMIC_RK8XX_H_
enum { REG_SECONDS = 0x00, @@ -178,16 +178,16 @@ enum {
#define RK8XX_ID_MSK 0xfff0
-struct rk808_reg_table { +struct rk8xx_reg_table { char *name; u8 reg_ctl; u8 reg_vol; };
-struct rk808_priv { +struct rk8xx_priv { int variant; };
-int rk808_spl_configure_buck(struct udevice *pmic, int buck, int uvolt); +int rk8xx_spl_configure_buck(struct udevice *pmic, int buck, int uvolt);
#endif

Since this driver can be used for rk8xx series pmic, let's rename rk808 to rk8xx, to make it clear.
Configs parts are done by sed -i "s/RK808/RK8XX/g" `grep RK808 -lr ./`
Signed-off-by: Jacob Chen jacob-chen@iotwrt.com ---
Changes in v2: - rename rk808 to rk8xx
arch/arm/mach-rockchip/rk3288/sdram_rk3288.c | 6 +-- configs/chromebit_mickey_defconfig | 4 +- configs/chromebook_jerry_defconfig | 4 +- configs/chromebook_minnie_defconfig | 4 +- configs/fennec-rk3288_defconfig | 4 +- configs/popmetal-rk3288_defconfig | 4 +- configs/sandbox_defconfig | 4 +- configs/sandbox_noblk_defconfig | 4 +- configs/sandbox_spl_defconfig | 4 +- configs/tinker-rk3288_defconfig | 4 +- drivers/power/pmic/Kconfig | 6 +-- drivers/power/pmic/Makefile | 2 +- drivers/power/pmic/{rk808.c => rk8xx.c} | 46 +++++++++--------- drivers/power/regulator/Kconfig | 8 ++-- drivers/power/regulator/Makefile | 2 +- drivers/power/regulator/{rk808.c => rk8xx.c} | 70 ++++++++++++++-------------- include/power/{rk808_pmic.h => rk8xx_pmic.h} | 10 ++-- 17 files changed, 93 insertions(+), 93 deletions(-) rename drivers/power/pmic/{rk808.c => rk8xx.c} (65%) rename drivers/power/regulator/{rk808.c => rk8xx.c} (82%) rename include/power/{rk808_pmic.h => rk8xx_pmic.h} (95%)
Applied to u-boot-rockchip/next, thanks!
participants (3)
-
Jacob Chen
-
Jacob Chen
-
sjg@google.com