diff options
author | Mark Kettenis <kettenis@cvs.openbsd.org> | 2022-10-10 17:45:36 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@cvs.openbsd.org> | 2022-10-10 17:45:36 +0000 |
commit | fb5b53b451e2a6fcd78e2f19588719be28974b4e (patch) | |
tree | 7ac3ddfb916b247071b162899115a51a4b2f1adc /sys/dev/fdt | |
parent | 9e9aab0e9acbb664986e93e4bcea2f0c8cb12391 (diff) |
Add support for the RK817 PMIC.
ok patrick@, mlarkin@
Diffstat (limited to 'sys/dev/fdt')
-rw-r--r-- | sys/dev/fdt/rkpmic.c | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/sys/dev/fdt/rkpmic.c b/sys/dev/fdt/rkpmic.c index d432a0d4fa0..23e0fb7abd0 100644 --- a/sys/dev/fdt/rkpmic.c +++ b/sys/dev/fdt/rkpmic.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rkpmic.c,v 1.10 2022/06/28 23:43:12 naddy Exp $ */ +/* $OpenBSD: rkpmic.c,v 1.11 2022/10/10 17:45:35 kettenis Exp $ */ /* * Copyright (c) 2017 Mark Kettenis <kettenis@openbsd.org> * @@ -229,6 +229,33 @@ const struct rkpmic_regdata rk809_regdata[] = { { } }; +/* + * Used by RK817 for BOOST + * 0-7: 4.7V-5.4V,step=100mV + */ +const struct rkpmic_vsel_range rk817_boost_range[] = { + { 4700000, 100000, 0, 7 }, + {} +}; + +const struct rkpmic_regdata rk817_regdata[] = { + { "DCDC_REG1", 0xbb, 0x7f, rk809_vsel_range1 }, + { "DCDC_REG2", 0xbe, 0x7f, rk809_vsel_range1 }, + { "DCDC_REG3", 0xc1, 0x7f, rk809_vsel_range1 }, + { "DCDC_REG4", 0xc4, 0x7f, rk809_vsel_range2 }, + { "LDO_REG1", 0xcc, 0x7f, rk809_vsel_range4 }, + { "LDO_REG2", 0xce, 0x7f, rk809_vsel_range4 }, + { "LDO_REG3", 0xd0, 0x7f, rk809_vsel_range4 }, + { "LDO_REG4", 0xd2, 0x7f, rk809_vsel_range4 }, + { "LDO_REG5", 0xd4, 0x7f, rk809_vsel_range4 }, + { "LDO_REG6", 0xd6, 0x7f, rk809_vsel_range4 }, + { "LDO_REG7", 0xd8, 0x7f, rk809_vsel_range4 }, + { "LDO_REG8", 0xda, 0x7f, rk809_vsel_range4 }, + { "LDO_REG9", 0xdc, 0x7f, rk809_vsel_range4 }, + { "BOOST", 0xde, 0x07, rk817_boost_range }, + { } +}; + struct rkpmic_softc { struct device sc_dev; i2c_tag_t sc_tag; @@ -265,7 +292,8 @@ rkpmic_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,rk809") == 0 || + strcmp(ia->ia_name, "rockchip,rk817") == 0); } void @@ -295,11 +323,16 @@ rkpmic_attach(struct device *parent, struct device *self, void *aux) sc->sc_rtc_ctrl_reg = RK808_RTC_CTRL; sc->sc_rtc_status_reg = RK808_RTC_STATUS; sc->sc_regdata = rk808_regdata; - } else { + } else if (OF_is_compatible(node, "rockchip,rk809")) { chip = "RK809"; sc->sc_rtc_ctrl_reg = RK809_RTC_CTRL; sc->sc_rtc_status_reg = RK809_RTC_STATUS; sc->sc_regdata = rk809_regdata; + } else { + chip = "RK817"; + sc->sc_rtc_ctrl_reg = RK809_RTC_CTRL; + sc->sc_rtc_status_reg = RK809_RTC_STATUS; + sc->sc_regdata = rk817_regdata; } printf(": %s\n", chip); |