From: Bartosz Golaszewski <[email protected]>

struct gpio_chip now has callbacks for setting line values that return
an integer, allowing to indicate failures. Convert the driver to using
them.

Signed-off-by: Bartosz Golaszewski <[email protected]>
---
 drivers/gpio/gpio-twl4030.c | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/drivers/gpio/gpio-twl4030.c b/drivers/gpio/gpio-twl4030.c
index 
c5d7825f19c18bfa84083aa5a46e48d174b8fce6..e39e39e3ef85b7c60c1f29f78c11d6eeccec6206
 100644
--- a/drivers/gpio/gpio-twl4030.c
+++ b/drivers/gpio/gpio-twl4030.c
@@ -120,7 +120,7 @@ static u8 cached_leden;
  * external pullup is needed.  We could also expose the integrated PWM
  * as a LED brightness control; we initialize it as "always on".
  */
-static void twl4030_led_set_value(int led, int value)
+static int twl4030_led_set_value(int led, int value)
 {
        u8 mask = LEDEN_LEDAON | LEDEN_LEDAPWM;
 
@@ -132,8 +132,8 @@ static void twl4030_led_set_value(int led, int value)
        else
                cached_leden |= mask;
 
-       WARN_ON_ONCE(twl_i2c_write_u8(TWL4030_MODULE_LED, cached_leden,
-                                     TWL4030_LED_LEDEN_REG));
+       return twl_i2c_write_u8(TWL4030_MODULE_LED, cached_leden,
+                               TWL4030_LED_LEDEN_REG);
 }
 
 static int twl4030_set_gpio_direction(int gpio, int is_input)
@@ -278,7 +278,7 @@ static void twl_free(struct gpio_chip *chip, unsigned 
offset)
 
        mutex_lock(&priv->mutex);
        if (offset >= TWL4030_GPIO_MAX) {
-               twl4030_led_set_value(offset - TWL4030_GPIO_MAX, 1);
+               WARN_ON_ONCE(twl4030_led_set_value(offset - TWL4030_GPIO_MAX, 
1));
                goto out;
        }
 
@@ -334,15 +334,16 @@ static int twl_get(struct gpio_chip *chip, unsigned 
offset)
        return ret;
 }
 
-static void twl_set(struct gpio_chip *chip, unsigned offset, int value)
+static int twl_set(struct gpio_chip *chip, unsigned int offset, int value)
 {
        struct gpio_twl4030_priv *priv = gpiochip_get_data(chip);
+       int ret;
 
        mutex_lock(&priv->mutex);
        if (offset < TWL4030_GPIO_MAX)
-               twl4030_set_gpio_dataout(offset, value);
+               ret = twl4030_set_gpio_dataout(offset, value);
        else
-               twl4030_led_set_value(offset - TWL4030_GPIO_MAX, value);
+               ret = twl4030_led_set_value(offset - TWL4030_GPIO_MAX, value);
 
        if (value)
                priv->out_state |= BIT(offset);
@@ -350,6 +351,8 @@ static void twl_set(struct gpio_chip *chip, unsigned 
offset, int value)
                priv->out_state &= ~BIT(offset);
 
        mutex_unlock(&priv->mutex);
+
+       return ret;
 }
 
 static int twl_direction_out(struct gpio_chip *chip, unsigned offset, int 
value)
@@ -373,9 +376,7 @@ static int twl_direction_out(struct gpio_chip *chip, 
unsigned offset, int value)
        priv->direction |= BIT(offset);
        mutex_unlock(&priv->mutex);
 
-       twl_set(chip, offset, value);
-
-       return ret;
+       return twl_set(chip, offset, value);
 }
 
 static int twl_get_direction(struct gpio_chip *chip, unsigned offset)
@@ -418,7 +419,7 @@ static const struct gpio_chip template_chip = {
        .direction_output       = twl_direction_out,
        .get_direction          = twl_get_direction,
        .get                    = twl_get,
-       .set                    = twl_set,
+       .set_rv                 = twl_set,
        .to_irq                 = twl_to_irq,
        .can_sleep              = true,
 };

-- 
2.48.1


Reply via email to