]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
gpio: thunderx: use new GPIO line value setter callbacks
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Wed, 2 Jul 2025 09:14:05 +0000 (11:14 +0200)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Mon, 7 Jul 2025 07:45:30 +0000 (09:45 +0200)
struct gpio_chip now has callbacks for setting line values that return
an integer, allowing to indicate failures. Convert the driver to using
them.

Link: https://lore.kernel.org/r/20250702-gpiochip-set-rv-gpio-round3-v1-4-0d23be74f71d@linaro.org
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-thunderx.c

index 5b851e904c11f5381cd4890828ecd956b78e2f00..eb6a1f0279c09a832ac71d76de8f696d9c28dd17 100644 (file)
@@ -116,8 +116,8 @@ static int thunderx_gpio_dir_in(struct gpio_chip *chip, unsigned int line)
        return 0;
 }
 
-static void thunderx_gpio_set(struct gpio_chip *chip, unsigned int line,
-                             int value)
+static int thunderx_gpio_set(struct gpio_chip *chip, unsigned int line,
+                            int value)
 {
        struct thunderx_gpio *txgpio = gpiochip_get_data(chip);
        int bank = line / 64;
@@ -127,6 +127,8 @@ static void thunderx_gpio_set(struct gpio_chip *chip, unsigned int line,
                (bank * GPIO_2ND_BANK) + (value ? GPIO_TX_SET : GPIO_TX_CLR);
 
        writeq(BIT_ULL(bank_bit), reg);
+
+       return 0;
 }
 
 static int thunderx_gpio_dir_out(struct gpio_chip *chip, unsigned int line,
@@ -269,9 +271,9 @@ static int thunderx_gpio_get(struct gpio_chip *chip, unsigned int line)
                return masked_bits != 0;
 }
 
-static void thunderx_gpio_set_multiple(struct gpio_chip *chip,
-                                      unsigned long *mask,
-                                      unsigned long *bits)
+static int thunderx_gpio_set_multiple(struct gpio_chip *chip,
+                                     unsigned long *mask,
+                                     unsigned long *bits)
 {
        int bank;
        u64 set_bits, clear_bits;
@@ -283,6 +285,8 @@ static void thunderx_gpio_set_multiple(struct gpio_chip *chip,
                writeq(set_bits, txgpio->register_base + (bank * GPIO_2ND_BANK) + GPIO_TX_SET);
                writeq(clear_bits, txgpio->register_base + (bank * GPIO_2ND_BANK) + GPIO_TX_CLR);
        }
+
+       return 0;
 }
 
 static void thunderx_gpio_irq_ack(struct irq_data *d)
@@ -529,8 +533,8 @@ static int thunderx_gpio_probe(struct pci_dev *pdev,
        chip->direction_input = thunderx_gpio_dir_in;
        chip->get = thunderx_gpio_get;
        chip->direction_output = thunderx_gpio_dir_out;
-       chip->set = thunderx_gpio_set;
-       chip->set_multiple = thunderx_gpio_set_multiple;
+       chip->set_rv = thunderx_gpio_set;
+       chip->set_multiple_rv = thunderx_gpio_set_multiple;
        chip->set_config = thunderx_gpio_set_config;
        girq = &chip->irq;
        gpio_irq_chip_set_chip(girq, &thunderx_gpio_irq_chip);