]> git.dujemihanovic.xyz Git - linux.git/commitdiff
Input: adp5588-keys - use guard notation when acquiring mutexes
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 26 Aug 2024 17:22:01 +0000 (18:22 +0100)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 29 Aug 2024 01:49:05 +0000 (18:49 -0700)
This makes the code more compact and error handling more robust.

Acked-by: Michael Hennerich <michael.hennerich@analog.com>
Link: https://lore.kernel.org/r/20240826-adp5588_gpio_support-v11-1-3e5ac2bd31b7@analog.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/keyboard/adp5588-keys.c

index 1b0279393df4bbd3bce4399b0b35279c3fdec3f6..09bcfc6b9408a51fba8f38b0b0b45d93c1fd2b13 100644 (file)
@@ -221,15 +221,13 @@ static int adp5588_gpio_get_value(struct gpio_chip *chip, unsigned int off)
        unsigned int bit = ADP5588_BIT(kpad->gpiomap[off]);
        int val;
 
-       mutex_lock(&kpad->gpio_lock);
+       guard(mutex)(&kpad->gpio_lock);
 
        if (kpad->dir[bank] & bit)
                val = kpad->dat_out[bank];
        else
                val = adp5588_read(kpad->client, GPIO_DAT_STAT1 + bank);
 
-       mutex_unlock(&kpad->gpio_lock);
-
        return !!(val & bit);
 }
 
@@ -240,7 +238,7 @@ static void adp5588_gpio_set_value(struct gpio_chip *chip,
        unsigned int bank = ADP5588_BANK(kpad->gpiomap[off]);
        unsigned int bit = ADP5588_BIT(kpad->gpiomap[off]);
 
-       mutex_lock(&kpad->gpio_lock);
+       guard(mutex)(&kpad->gpio_lock);
 
        if (val)
                kpad->dat_out[bank] |= bit;
@@ -248,8 +246,6 @@ static void adp5588_gpio_set_value(struct gpio_chip *chip,
                kpad->dat_out[bank] &= ~bit;
 
        adp5588_write(kpad->client, GPIO_DAT_OUT1 + bank, kpad->dat_out[bank]);
-
-       mutex_unlock(&kpad->gpio_lock);
 }
 
 static int adp5588_gpio_set_config(struct gpio_chip *chip,  unsigned int off,
@@ -259,7 +255,6 @@ static int adp5588_gpio_set_config(struct gpio_chip *chip,  unsigned int off,
        unsigned int bank = ADP5588_BANK(kpad->gpiomap[off]);
        unsigned int bit = ADP5588_BIT(kpad->gpiomap[off]);
        bool pull_disable;
-       int ret;
 
        switch (pinconf_to_config_param(config)) {
        case PIN_CONFIG_BIAS_PULL_UP:
@@ -272,19 +267,15 @@ static int adp5588_gpio_set_config(struct gpio_chip *chip,  unsigned int off,
                return -ENOTSUPP;
        }
 
-       mutex_lock(&kpad->gpio_lock);
+       guard(mutex)(&kpad->gpio_lock);
 
        if (pull_disable)
                kpad->pull_dis[bank] |= bit;
        else
                kpad->pull_dis[bank] &= bit;
 
-       ret = adp5588_write(kpad->client, GPIO_PULL1 + bank,
-                           kpad->pull_dis[bank]);
-
-       mutex_unlock(&kpad->gpio_lock);
-
-       return ret;
+       return adp5588_write(kpad->client, GPIO_PULL1 + bank,
+                            kpad->pull_dis[bank]);
 }
 
 static int adp5588_gpio_direction_input(struct gpio_chip *chip, unsigned int off)
@@ -292,16 +283,11 @@ static int adp5588_gpio_direction_input(struct gpio_chip *chip, unsigned int off
        struct adp5588_kpad *kpad = gpiochip_get_data(chip);
        unsigned int bank = ADP5588_BANK(kpad->gpiomap[off]);
        unsigned int bit = ADP5588_BIT(kpad->gpiomap[off]);
-       int ret;
 
-       mutex_lock(&kpad->gpio_lock);
+       guard(mutex)(&kpad->gpio_lock);
 
        kpad->dir[bank] &= ~bit;
-       ret = adp5588_write(kpad->client, GPIO_DIR1 + bank, kpad->dir[bank]);
-
-       mutex_unlock(&kpad->gpio_lock);
-
-       return ret;
+       return adp5588_write(kpad->client, GPIO_DIR1 + bank, kpad->dir[bank]);
 }
 
 static int adp5588_gpio_direction_output(struct gpio_chip *chip,
@@ -310,9 +296,9 @@ static int adp5588_gpio_direction_output(struct gpio_chip *chip,
        struct adp5588_kpad *kpad = gpiochip_get_data(chip);
        unsigned int bank = ADP5588_BANK(kpad->gpiomap[off]);
        unsigned int bit = ADP5588_BIT(kpad->gpiomap[off]);
-       int ret;
+       int error;
 
-       mutex_lock(&kpad->gpio_lock);
+       guard(mutex)(&kpad->gpio_lock);
 
        kpad->dir[bank] |= bit;
 
@@ -321,17 +307,16 @@ static int adp5588_gpio_direction_output(struct gpio_chip *chip,
        else
                kpad->dat_out[bank] &= ~bit;
 
-       ret = adp5588_write(kpad->client, GPIO_DAT_OUT1 + bank,
-                           kpad->dat_out[bank]);
-       if (ret)
-               goto out_unlock;
-
-       ret = adp5588_write(kpad->client, GPIO_DIR1 + bank, kpad->dir[bank]);
+       error = adp5588_write(kpad->client, GPIO_DAT_OUT1 + bank,
+                             kpad->dat_out[bank]);
+       if (error)
+               return error;
 
-out_unlock:
-       mutex_unlock(&kpad->gpio_lock);
+       error = adp5588_write(kpad->client, GPIO_DIR1 + bank, kpad->dir[bank]);
+       if (error)
+               return error;
 
-       return ret;
+       return 0;
 }
 
 static int adp5588_build_gpiomap(struct adp5588_kpad *kpad)