Skip to content

Commit 6fe3b96

Browse files
krzklinusw
authored andcommitted
pinctrl: aw9523: Simplify locking with guard()
Simplify error handling (less gotos) over locks with guard() which also removes possibility (at least by reading the code) of returning uninitialized rc/ret value in aw9523_pconf_set() and aw9523_gpio_get_multiple() functions. Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Signed-off-by: Linus Walleij <linusw@kernel.org>
1 parent b4b224e commit 6fe3b96

1 file changed

Lines changed: 23 additions & 30 deletions

File tree

drivers/pinctrl/pinctrl-aw9523.c

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -291,14 +291,14 @@ static int aw9523_pconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
291291
unsigned int mask, val;
292292
int i, rc;
293293

294-
mutex_lock(&awi->i2c_lock);
294+
guard(mutex)(&awi->i2c_lock);
295295
for (i = 0; i < num_configs; i++) {
296296
param = pinconf_to_config_param(configs[i]);
297297
arg = pinconf_to_config_argument(configs[i]);
298298

299299
rc = aw9523_pcfg_param_to_reg(param, pin, &reg);
300300
if (rc)
301-
goto end;
301+
return rc;
302302

303303
switch (param) {
304304
case PIN_CONFIG_LEVEL:
@@ -307,7 +307,7 @@ static int aw9523_pconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
307307
AW9523_REG_CONF_STATE(pin),
308308
BIT(regbit), 0);
309309
if (rc)
310-
goto end;
310+
return rc;
311311

312312
/* Then, fall through to config output level */
313313
fallthrough;
@@ -323,10 +323,9 @@ static int aw9523_pconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
323323
break;
324324
case PIN_CONFIG_DRIVE_OPEN_DRAIN:
325325
/* Open-Drain is supported only on port 0 */
326-
if (pin >= AW9523_PINS_PER_PORT) {
327-
rc = -ENOTSUPP;
328-
goto end;
329-
}
326+
if (pin >= AW9523_PINS_PER_PORT)
327+
return -ENOTSUPP;
328+
330329
mask = AW9523_GCR_GPOMD_MASK;
331330
val = 0;
332331
break;
@@ -341,17 +340,15 @@ static int aw9523_pconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
341340
val = AW9523_GCR_GPOMD_MASK;
342341
break;
343342
default:
344-
rc = -ENOTSUPP;
345-
goto end;
343+
return -ENOTSUPP;
346344
}
347345

348346
rc = regmap_update_bits(awi->regmap, reg, mask, val);
349347
if (rc)
350-
goto end;
348+
return rc;
351349
}
352-
end:
353-
mutex_unlock(&awi->i2c_lock);
354-
return rc;
350+
351+
return 0;
355352
}
356353

357354
static const struct pinconf_ops aw9523_pinconf_ops = {
@@ -599,14 +596,14 @@ static int aw9523_gpio_get_multiple(struct gpio_chip *chip,
599596
u8 m, state = 0;
600597
int ret;
601598

602-
mutex_lock(&awi->i2c_lock);
599+
guard(mutex)(&awi->i2c_lock);
603600

604601
/* Port 0 (gpio 0-7) */
605602
m = *mask;
606603
if (m) {
607604
ret = _aw9523_gpio_get_multiple(awi, 0, &state, m);
608605
if (ret)
609-
goto out;
606+
return ret;
610607
}
611608
*bits = state;
612609

@@ -616,13 +613,12 @@ static int aw9523_gpio_get_multiple(struct gpio_chip *chip,
616613
ret = _aw9523_gpio_get_multiple(awi, AW9523_PINS_PER_PORT,
617614
&state, m);
618615
if (ret)
619-
goto out;
616+
return ret;
620617

621618
*bits |= (state << 8);
622619
}
623-
out:
624-
mutex_unlock(&awi->i2c_lock);
625-
return ret;
620+
621+
return 0;
626622
}
627623

628624
static int aw9523_gpio_set_multiple(struct gpio_chip *chip,
@@ -632,30 +628,28 @@ static int aw9523_gpio_set_multiple(struct gpio_chip *chip,
632628
struct aw9523 *awi = gpiochip_get_data(chip);
633629
u8 mask_lo, mask_hi, bits_lo, bits_hi;
634630
unsigned int reg;
635-
int ret = 0;
631+
int ret;
636632

637633
mask_lo = *mask;
638634
mask_hi = *mask >> 8;
639635
bits_lo = *bits;
640636
bits_hi = *bits >> 8;
641637

642-
mutex_lock(&awi->i2c_lock);
638+
guard(mutex)(&awi->i2c_lock);
643639
if (mask_hi) {
644640
reg = AW9523_REG_OUT_STATE(AW9523_PINS_PER_PORT);
645641
ret = regmap_write_bits(awi->regmap, reg, mask_hi, bits_hi);
646642
if (ret)
647-
goto out;
643+
return ret;
648644
}
649645
if (mask_lo) {
650646
reg = AW9523_REG_OUT_STATE(0);
651647
ret = regmap_write_bits(awi->regmap, reg, mask_lo, bits_lo);
652648
if (ret)
653-
goto out;
649+
return ret;
654650
}
655651

656-
out:
657-
mutex_unlock(&awi->i2c_lock);
658-
return ret;
652+
return 0;
659653
}
660654

661655
static int aw9523_gpio_set(struct gpio_chip *chip, unsigned int offset,
@@ -695,16 +689,15 @@ static int aw9523_direction_output(struct gpio_chip *chip,
695689
u8 regbit = offset % AW9523_PINS_PER_PORT;
696690
int ret;
697691

698-
mutex_lock(&awi->i2c_lock);
692+
guard(mutex)(&awi->i2c_lock);
699693
ret = regmap_update_bits(awi->regmap, AW9523_REG_OUT_STATE(offset),
700694
BIT(regbit), value ? BIT(regbit) : 0);
701695
if (ret)
702-
goto end;
696+
return ret;
703697

704698
ret = regmap_update_bits(awi->regmap, AW9523_REG_CONF_STATE(offset),
705699
BIT(regbit), 0);
706-
end:
707-
mutex_unlock(&awi->i2c_lock);
700+
708701
return ret;
709702
}
710703

0 commit comments

Comments
 (0)