> From: joshua stein <j...@jcs.org> > Date: Wed, 7 May 2025 21:52:30 -0500 > > --- > sys/dev/fdt/rkpmic.c | 27 ++++++++++++++++++++++++++- > 1 file changed, 26 insertions(+), 1 deletion(-)
Spotted a mistake... > > diff --git a/sys/dev/fdt/rkpmic.c b/sys/dev/fdt/rkpmic.c > index 0094b61e6b9..ccfa50abbf8 100644 > --- a/sys/dev/fdt/rkpmic.c > +++ b/sys/dev/fdt/rkpmic.c > @@ -340,6 +340,23 @@ const struct rkpmic_regdata rk817_regdata[] = { > { } > }; > > +static const struct rkpmic_regdata rk818_regdata[] = { > + { "DCDC_REG1", 0x2f, 0x3f, 0, 0, rk808_vsel_range1 }, > + { "DCDC_REG2", 0x33, 0x3f, 0, 0, rk808_vsel_range1 }, > + { "DCDC_REG3", 0, 0, 0, 0, rk808_vsel_range1 }, > + { "DCDC_REG4", 0x38, 0x0f, 0, 0, rk808_vsel_range4 }, That one seems to be wrong, the documentation says: "... 1.8V~3.3V, step=100Mv" so this could be rk808_vsel_range2. However, it then goes on to list values for 3.4V, 3.5V and 3.6V as well and Linux supports those values. So I think this needs a dedicated range (and a different mask). > + { "LDO_REG1", 0x3b, 0x1f, 0, 0, rk808_vsel_range3 }, > + { "LDO_REG2", 0x3d, 0x1f, 0, 0, rk808_vsel_range3 }, > + { "LDO_REG3", 0x3f, 0x1f, 0, 0, rk808_vsel_range5 }, > + { "LDO_REG4", 0x41, 0x1f, 0, 0, rk808_vsel_range3 }, > + { "LDO_REG5", 0x43, 0x1f, 0, 0, rk808_vsel_range3 }, > + { "LDO_REG6", 0x45, 0x1f, 0, 0, rk808_vsel_range5 }, > + { "LDO_REG7", 0x47, 0x1f, 0, 0, rk808_vsel_range5 }, > + { "LDO_REG8", 0x49, 0x1f, 0, 0, rk808_vsel_range2 }, > + { "LDO_REG9", 0x54, 0x1f, 0, 0, rk808_vsel_range2 }, > + { }, > +}; > + > struct rkpmic_softc { > struct device sc_dev; > int sc_node; > @@ -407,7 +424,8 @@ rkpmic_i2c_match(struct device *parent, void *match, void > *aux) > return (strcmp(ia->ia_name, "rockchip,rk805") == 0 || > strcmp(ia->ia_name, "rockchip,rk808") == 0 || > strcmp(ia->ia_name, "rockchip,rk809") == 0 || > - strcmp(ia->ia_name, "rockchip,rk817") == 0); > + strcmp(ia->ia_name, "rockchip,rk817") == 0 || > + strcmp(ia->ia_name, "rockchip,rk818") == 0); > } > > void > @@ -486,6 +504,13 @@ rkpmic_attach(struct device *parent, struct device > *self, void *aux) > sc->sc_dev_ctrl_reg = RK809_PMIC_SYS_CFG3; > sc->sc_dev_off_val = RK809_PMIC_SYS_CFG3_DEV_OFF; > sc->sc_regdata = rk809_regdata; > + } else if (OF_is_compatible(sc->sc_node, "rockchip,rk818")) { > + chip = "RK818"; > + sc->sc_rtc_ctrl_reg = RK808_RTC_CTRL; > + sc->sc_rtc_status_reg = RK808_RTC_STATUS; > + sc->sc_dev_ctrl_reg = RK808_DEVCTRL; > + sc->sc_dev_off_val = RK808_DEVCTRL_DEV_OFF_RST; > + sc->sc_regdata = rk818_regdata; > } else { > chip = "RK817"; > sc->sc_rtc_ctrl_reg = RK809_RTC_CTRL; > -- > 2.47.1 > >