git: 5db5bd5f3987 - main - Add drive strength setting for RK3568 pinctrl driver. Partially from https://reviews.freebsd.org/D36027
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 08 Aug 2022 04:43:36 UTC
The branch main has been updated by ganbold: URL: https://cgit.FreeBSD.org/src/commit/?id=5db5bd5f39871facd0c633b7d1e98931eb57d442 commit 5db5bd5f39871facd0c633b7d1e98931eb57d442 Author: Ganbold Tsagaankhuu <ganbold@FreeBSD.org> AuthorDate: 2022-08-08 04:42:22 +0000 Commit: Ganbold Tsagaankhuu <ganbold@FreeBSD.org> CommitDate: 2022-08-08 04:42:22 +0000 Add drive strength setting for RK3568 pinctrl driver. Partially from https://reviews.freebsd.org/D36027 Submitted by: sos --- sys/arm64/rockchip/rk_pinctrl.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/sys/arm64/rockchip/rk_pinctrl.c b/sys/arm64/rockchip/rk_pinctrl.c index ae633f052a21..6d0d93aee439 100644 --- a/sys/arm64/rockchip/rk_pinctrl.c +++ b/sys/arm64/rockchip/rk_pinctrl.c @@ -1171,11 +1171,31 @@ rk_pinctrl_configure_pin(struct rk_pinctrl_softc *sc, uint32_t *pindata) } /* Then drive strength */ - rv = rk_pinctrl_parse_drive(sc, pin_conf, bank, subbank, &drive, ®); - if (rv == 0) { - bit = (pin % 8) * 2; - mask = (0x3 << bit); - SYSCON_MODIFY_4(syscon, reg, mask, drive << bit | (mask << 16)); + if (ofw_bus_node_is_compatible(ofw_bus_get_node(sc->dev), + "rockchip,rk3568-pinctrl")) { + uint32_t value; + if (OF_getencprop(pin_conf, "drive-strength", &value, + sizeof(value)) == 0) { + if (bank) + reg = 0x01c0 + (bank * 0x40) + (pin / 2 * 4); + else + reg = 0x0070 + (pin / 2 * 4); + + drive = ((1 << (value + 1)) - 1) << (pin % 2); + + mask = 0x3f << (pin % 2);; + + SYSCON_WRITE_4(syscon, reg, drive | (mask << 16)); + } + } else { + rv = rk_pinctrl_parse_drive(sc, pin_conf, bank, subbank, &drive, + ®); + if (rv == 0) { + bit = (pin % 8) * 2; + mask = (0x3 << bit); + SYSCON_MODIFY_4(syscon, reg, mask, + drive << bit | (mask << 16)); + } } /* Finally set the pin function */