unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
        unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
 
-       mutex_lock(&kpad->gpio_lock);
+       guard(mutex)(&kpad->gpio_lock);
 
        if (val)
                kpad->dat_out[bank] |= bit;
 
        adp5589_write(kpad->client, kpad->var->reg(ADP5589_GPO_DATA_OUT_A) +
                      bank, kpad->dat_out[bank]);
-
-       mutex_unlock(&kpad->gpio_lock);
 }
 
 static int adp5589_gpio_direction_input(struct gpio_chip *chip, unsigned off)
        struct adp5589_kpad *kpad = gpiochip_get_data(chip);
        unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
        unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
-       int ret;
 
-       mutex_lock(&kpad->gpio_lock);
+       guard(mutex)(&kpad->gpio_lock);
 
        kpad->dir[bank] &= ~bit;
-       ret = adp5589_write(kpad->client,
-                           kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
-                           kpad->dir[bank]);
-
-       mutex_unlock(&kpad->gpio_lock);
-
-       return ret;
+       return adp5589_write(kpad->client,
+                            kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
+                            kpad->dir[bank]);
 }
 
 static int adp5589_gpio_direction_output(struct gpio_chip *chip,
        struct adp5589_kpad *kpad = gpiochip_get_data(chip);
        unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
        unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
-       int ret;
+       int error;
 
-       mutex_lock(&kpad->gpio_lock);
+       guard(mutex)(&kpad->gpio_lock);
 
        kpad->dir[bank] |= bit;
 
        else
                kpad->dat_out[bank] &= ~bit;
 
-       ret = adp5589_write(kpad->client, kpad->var->reg(ADP5589_GPO_DATA_OUT_A)
-                           + bank, kpad->dat_out[bank]);
-       ret |= adp5589_write(kpad->client,
-                            kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
-                            kpad->dir[bank]);
+       error = adp5589_write(kpad->client,
+                             kpad->var->reg(ADP5589_GPO_DATA_OUT_A) + bank,
+                             kpad->dat_out[bank]);
+       if (error)
+               return error;
 
-       mutex_unlock(&kpad->gpio_lock);
+       error = adp5589_write(kpad->client,
+                             kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
+                             kpad->dir[bank]);
+       if (error)
+               return error;
 
-       return ret;
+       return 0;
 }
 
 static int adp5589_build_gpiomap(struct adp5589_kpad *kpad,