Date: Mon, 16 Dec 2019 18:05:28 +0000 (UTC) From: Emmanuel Vadot <manu@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r355812 - stable/12/sys/arm64/rockchip Message-ID: <201912161805.xBGI5SFV073192@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: manu Date: Mon Dec 16 18:05:28 2019 New Revision: 355812 URL: https://svnweb.freebsd.org/changeset/base/355812 Log: MFC r355648-r355649 r355648: arm64: rockchip: rk_pinctrl: Add bias parsing based on the SoC type Not all rockchip have the same value for pullup/pulldown so add a function per SoC and call the right one to have the proper value. r355649: arm64: rockchip: rk_pinctrl: Fix parse_bias for RK3399 Only bank 0 and bank 2 are different than other rockchip SoC, fix this. While here remove some debug printfs that where added in r355648 X-MFC-With: r355648 Modified: stable/12/sys/arm64/rockchip/rk_pinctrl.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/arm64/rockchip/rk_pinctrl.c ============================================================================== --- stable/12/sys/arm64/rockchip/rk_pinctrl.c Mon Dec 16 18:04:31 2019 (r355811) +++ stable/12/sys/arm64/rockchip/rk_pinctrl.c Mon Dec 16 18:05:28 2019 (r355812) @@ -101,6 +101,7 @@ struct rk_pinctrl_conf { uint32_t ngpio_bank; uint32_t (*get_pd_offset)(struct rk_pinctrl_softc *, uint32_t); struct syscon *(*get_syscon)(struct rk_pinctrl_softc *, uint32_t); + int (*parse_bias)(phandle_t, int); }; struct rk_pinctrl_softc { @@ -371,6 +372,19 @@ rk3288_get_syscon(struct rk_pinctrl_softc *sc, uint32_ return (sc->grf); } +static int +rk3288_parse_bias(phandle_t node, int bank) +{ + if (OF_hasprop(node, "bias-disable")) + return (0); + if (OF_hasprop(node, "bias-pull-up")) + return (1); + if (OF_hasprop(node, "bias-pull-down")) + return (2); + + return (-1); +} + struct rk_pinctrl_conf rk3288_conf = { .iomux_conf = rk3288_iomux_bank, .iomux_nbanks = nitems(rk3288_iomux_bank), @@ -382,6 +396,7 @@ struct rk_pinctrl_conf rk3288_conf = { .ngpio_bank = nitems(rk3288_gpio_bank), .get_pd_offset = rk3288_get_pd_offset, .get_syscon = rk3288_get_syscon, + .parse_bias = rk3288_parse_bias, }; static struct rk_pinctrl_gpio rk3328_gpio_bank[] = { @@ -525,6 +540,7 @@ struct rk_pinctrl_conf rk3328_conf = { .ngpio_bank = nitems(rk3328_gpio_bank), .get_pd_offset = rk3328_get_pd_offset, .get_syscon = rk3328_get_syscon, + .parse_bias = rk3288_parse_bias, }; static struct rk_pinctrl_gpio rk3399_gpio_bank[] = { @@ -618,6 +634,36 @@ rk3399_get_syscon(struct rk_pinctrl_softc *sc, uint32_ return (sc->grf); } +static int +rk3399_parse_bias(phandle_t node, int bank) +{ + int pullup, pulldown; + + if (OF_hasprop(node, "bias-disable")) + return (0); + + switch (bank) { + case 0: + case 2: + pullup = 3; + pulldown = 1; + break; + case 1: + case 3: + case 4: + pullup = 1; + pulldown = 2; + break; + } + + if (OF_hasprop(node, "bias-pull-up")) + return (pullup); + if (OF_hasprop(node, "bias-pull-down")) + return (pulldown); + + return (-1); +} + struct rk_pinctrl_conf rk3399_conf = { .iomux_conf = rk3399_iomux_bank, .iomux_nbanks = nitems(rk3399_iomux_bank), @@ -629,6 +675,7 @@ struct rk_pinctrl_conf rk3399_conf = { .ngpio_bank = nitems(rk3399_gpio_bank), .get_pd_offset = rk3399_get_pd_offset, .get_syscon = rk3399_get_syscon, + .parse_bias = rk3399_parse_bias, }; static struct ofw_compat_data compat_data[] = { @@ -639,19 +686,6 @@ static struct ofw_compat_data compat_data[] = { }; static int -rk_pinctrl_parse_bias(phandle_t node) -{ - if (OF_hasprop(node, "bias-disable")) - return (0); - if (OF_hasprop(node, "bias-pull-up")) - return (1); - if (OF_hasprop(node, "bias-pull-down")) - return (2); - - return (-1); -} - -static int rk_pinctrl_parse_drive(struct rk_pinctrl_softc *sc, phandle_t node, uint32_t bank, uint32_t subbank, uint32_t *drive, uint32_t *offset) { @@ -843,7 +877,7 @@ rk_pinctrl_configure_pin(struct rk_pinctrl_softc *sc, SYSCON_MODIFY_4(syscon, reg, mask, function << bit | (mask << 16)); /* Pull-Up/Down */ - bias = rk_pinctrl_parse_bias(pin_conf); + bias = sc->conf->parse_bias(pin_conf, bank); if (bias >= 0) { reg = sc->conf->get_pd_offset(sc, bank);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201912161805.xBGI5SFV073192>