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]>

---
v6:
- Fix pull-up/pull-down configuration.
---
 drivers/pinctrl/spacemit/pinctrl-k1.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/pinctrl/spacemit/pinctrl-k1.c 
b/drivers/pinctrl/spacemit/pinctrl-k1.c
index 6ed511879da..454bc307ba3 100644
--- a/drivers/pinctrl/spacemit/pinctrl-k1.c
+++ b/drivers/pinctrl/spacemit/pinctrl-k1.c
@@ -425,11 +425,17 @@ static int spacemit_pinconf_set(struct udevice *dev, 
unsigned int pin_selector,
                break;
        case PIN_CONFIG_BIAS_PULL_DOWN:
                mask = PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN;
-               clrsetbits_le32(addr, mask, PAD_PULLDOWN | PAD_PULL_EN);
+               if (argument)
+                       clrsetbits_le32(addr, mask, PAD_PULLDOWN | PAD_PULL_EN);
+               else
+                       clrbits_le32(addr, PAD_PULLDOWN | PAD_PULL_EN);
                break;
        case PIN_CONFIG_BIAS_PULL_UP:
                mask = PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN;
-               clrsetbits_le32(addr, mask, PAD_PULLUP | PAD_PULL_EN);
+               if (argument)
+                       clrsetbits_le32(addr, mask, PAD_PULLUP | PAD_PULL_EN);
+               else
+                       clrbits_le32(addr, PAD_PULLUP | PAD_PULL_EN);
                break;
        case PIN_CONFIG_DRIVE_STRENGTH:
                io_type = IO_TYPE_1V8;

-- 
2.51.0

Reply via email to