Fix pull-up/pull-down configuration to honor the argument parameter: when argument is non-zero, enable the requested pull direction; when argument is zero, clear all pull bits to disable.
Signed-off-by: Eric Chung <[email protected]> --- v7: - Simplify pull-up/pull-down configuration by using a single clrsetbits_le32() call. v6: - Fix pull-up/pull-down configuration. --- drivers/pinctrl/spacemit/pinctrl-k1.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/pinctrl/spacemit/pinctrl-k1.c b/drivers/pinctrl/spacemit/pinctrl-k1.c index 6ed511879daf..4e65fad1e8c5 100644 --- a/drivers/pinctrl/spacemit/pinctrl-k1.c +++ b/drivers/pinctrl/spacemit/pinctrl-k1.c @@ -409,7 +409,6 @@ static int spacemit_pinconf_set(struct udevice *dev, unsigned int pin_selector, struct spacemit_pinctrl_data *data; struct spacemit_pinctrl_priv *priv = dev_get_priv(dev); void __iomem *addr; - u32 mask; unsigned int io_type; u8 ds; bool found; @@ -424,12 +423,12 @@ static int spacemit_pinconf_set(struct udevice *dev, unsigned int pin_selector, clrbits_le32(addr, PAD_PULLUP | PAD_PULLDOWN | PAD_PULL_EN); break; case PIN_CONFIG_BIAS_PULL_DOWN: - mask = PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN; - clrsetbits_le32(addr, mask, PAD_PULLDOWN | PAD_PULL_EN); + clrsetbits_le32(addr, PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN, + argument ? PAD_PULLDOWN | PAD_PULL_EN : 0); break; case PIN_CONFIG_BIAS_PULL_UP: - mask = PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN; - clrsetbits_le32(addr, mask, PAD_PULLUP | PAD_PULL_EN); + clrsetbits_le32(addr, PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN, + argument ? PAD_PULLUP | PAD_PULL_EN : 0); break; case PIN_CONFIG_DRIVE_STRENGTH: io_type = IO_TYPE_1V8; -- 2.51.0
