hwmon: (pmbus/ucd9000) Fix error in ucd9000_gpio_set
authorTorben Nielsen <t8927095@gmail.com>
Fri, 18 Jul 2025 09:36:45 +0000 (11:36 +0200)
committerGuenter Roeck <linux@roeck-us.net>
Fri, 18 Jul 2025 16:50:55 +0000 (09:50 -0700)
The GPIO output functionality does not work as intended.

The ucd9000_gpio_set function should set UCD9000_GPIO_CONFIG_OUT_VALUE
(bit 2) in order to change the output value of the selected GPIO.
Instead UCD9000_GPIO_CONFIG_STATUS (bit 3) is set, but this is a
read-only value. This patch fixes the mistake and provides the intended
functionality of the GPIOs.

See UCD90xxx Sequencer and System Health Controller PMBus Command SLVU352C
section 10.43 for reference.

Signed-off-by: Torben Nielsen <t8927095@gmail.com>
Link: https://lore.kernel.org/r/20250718093644.356085-2-t8927095@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/pmbus/ucd9000.c

index 2bc8cccb01fd00c32bc0d21da5da1d67b0b50117..52d4000902d53523bea65dac558926690ecc09b7 100644 (file)
@@ -226,15 +226,15 @@ static int ucd9000_gpio_set(struct gpio_chip *gc, unsigned int offset,
        }
 
        if (value) {
-               if (ret & UCD9000_GPIO_CONFIG_STATUS)
+               if (ret & UCD9000_GPIO_CONFIG_OUT_VALUE)
                        return 0;
 
-               ret |= UCD9000_GPIO_CONFIG_STATUS;
+               ret |= UCD9000_GPIO_CONFIG_OUT_VALUE;
        } else {
-               if (!(ret & UCD9000_GPIO_CONFIG_STATUS))
+               if (!(ret & UCD9000_GPIO_CONFIG_OUT_VALUE))
                        return 0;
 
-               ret &= ~UCD9000_GPIO_CONFIG_STATUS;
+               ret &= ~UCD9000_GPIO_CONFIG_OUT_VALUE;
        }
 
        ret |= UCD9000_GPIO_CONFIG_ENABLE;