Skip to content

Commit 9580ba2

Browse files
committed
pinctrl: lynxpoint: Simplify code with cleanup helpers
Use macros defined in linux/cleanup.h to automate resource lifetime control in the driver. Acked-by: Mika Westerberg <[email protected]> Reviewed-by: Linus Walleij <[email protected]> Signed-off-by: Andy Shevchenko <[email protected]>
1 parent 228fe71 commit 9580ba2

File tree

1 file changed

+21
-51
lines changed

1 file changed

+21
-51
lines changed

drivers/pinctrl/intel/pinctrl-lynxpoint.c

Lines changed: 21 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <linux/acpi.h>
1111
#include <linux/array_size.h>
1212
#include <linux/bitops.h>
13+
#include <linux/cleanup.h>
1314
#include <linux/gpio/driver.h>
1415
#include <linux/interrupt.h>
1516
#include <linux/io.h>
@@ -291,10 +292,9 @@ static int lp_pinmux_set_mux(struct pinctrl_dev *pctldev,
291292
{
292293
struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev);
293294
const struct intel_pingroup *grp = &lg->soc->groups[group];
294-
unsigned long flags;
295295
int i;
296296

297-
raw_spin_lock_irqsave(&lg->lock, flags);
297+
guard(raw_spinlock_irqsave)(&lg->lock);
298298

299299
/* Now enable the mux setting for each pin in the group */
300300
for (i = 0; i < grp->grp.npins; i++) {
@@ -312,8 +312,6 @@ static int lp_pinmux_set_mux(struct pinctrl_dev *pctldev,
312312
iowrite32(value, reg);
313313
}
314314

315-
raw_spin_unlock_irqrestore(&lg->lock, flags);
316-
317315
return 0;
318316
}
319317

@@ -334,10 +332,9 @@ static int lp_gpio_request_enable(struct pinctrl_dev *pctldev,
334332
struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev);
335333
void __iomem *reg = lp_gpio_reg(&lg->chip, pin, LP_CONFIG1);
336334
void __iomem *conf2 = lp_gpio_reg(&lg->chip, pin, LP_CONFIG2);
337-
unsigned long flags;
338335
u32 value;
339336

340-
raw_spin_lock_irqsave(&lg->lock, flags);
337+
guard(raw_spinlock_irqsave)(&lg->lock);
341338

342339
/*
343340
* Reconfigure pin to GPIO mode if needed and issue a warning,
@@ -352,8 +349,6 @@ static int lp_gpio_request_enable(struct pinctrl_dev *pctldev,
352349
/* Enable input sensing */
353350
lp_gpio_enable_input(conf2);
354351

355-
raw_spin_unlock_irqrestore(&lg->lock, flags);
356-
357352
return 0;
358353
}
359354

@@ -363,14 +358,11 @@ static void lp_gpio_disable_free(struct pinctrl_dev *pctldev,
363358
{
364359
struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev);
365360
void __iomem *conf2 = lp_gpio_reg(&lg->chip, pin, LP_CONFIG2);
366-
unsigned long flags;
367361

368-
raw_spin_lock_irqsave(&lg->lock, flags);
362+
guard(raw_spinlock_irqsave)(&lg->lock);
369363

370364
/* Disable input sensing */
371365
lp_gpio_disable_input(conf2);
372-
373-
raw_spin_unlock_irqrestore(&lg->lock, flags);
374366
}
375367

376368
static int lp_gpio_set_direction(struct pinctrl_dev *pctldev,
@@ -379,10 +371,9 @@ static int lp_gpio_set_direction(struct pinctrl_dev *pctldev,
379371
{
380372
struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev);
381373
void __iomem *reg = lp_gpio_reg(&lg->chip, pin, LP_CONFIG1);
382-
unsigned long flags;
383374
u32 value;
384375

385-
raw_spin_lock_irqsave(&lg->lock, flags);
376+
guard(raw_spinlock_irqsave)(&lg->lock);
386377

387378
value = ioread32(reg);
388379
value &= ~DIR_BIT;
@@ -400,8 +391,6 @@ static int lp_gpio_set_direction(struct pinctrl_dev *pctldev,
400391
}
401392
iowrite32(value, reg);
402393

403-
raw_spin_unlock_irqrestore(&lg->lock, flags);
404-
405394
return 0;
406395
}
407396

@@ -421,13 +410,11 @@ static int lp_pin_config_get(struct pinctrl_dev *pctldev, unsigned int pin,
421410
struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev);
422411
void __iomem *conf2 = lp_gpio_reg(&lg->chip, pin, LP_CONFIG2);
423412
enum pin_config_param param = pinconf_to_config_param(*config);
424-
unsigned long flags;
425413
u32 value, pull;
426414
u16 arg;
427415

428-
raw_spin_lock_irqsave(&lg->lock, flags);
429-
value = ioread32(conf2);
430-
raw_spin_unlock_irqrestore(&lg->lock, flags);
416+
scoped_guard(raw_spinlock_irqsave, &lg->lock)
417+
value = ioread32(conf2);
431418

432419
pull = value & GPIWP_MASK;
433420

@@ -464,11 +451,10 @@ static int lp_pin_config_set(struct pinctrl_dev *pctldev, unsigned int pin,
464451
struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev);
465452
void __iomem *conf2 = lp_gpio_reg(&lg->chip, pin, LP_CONFIG2);
466453
enum pin_config_param param;
467-
unsigned long flags;
468-
int i, ret = 0;
454+
unsigned int i;
469455
u32 value;
470456

471-
raw_spin_lock_irqsave(&lg->lock, flags);
457+
guard(raw_spinlock_irqsave)(&lg->lock);
472458

473459
value = ioread32(conf2);
474460

@@ -489,19 +475,13 @@ static int lp_pin_config_set(struct pinctrl_dev *pctldev, unsigned int pin,
489475
value |= GPIWP_UP;
490476
break;
491477
default:
492-
ret = -ENOTSUPP;
478+
return -ENOTSUPP;
493479
}
494-
495-
if (ret)
496-
break;
497480
}
498481

499-
if (!ret)
500-
iowrite32(value, conf2);
482+
iowrite32(value, conf2);
501483

502-
raw_spin_unlock_irqrestore(&lg->lock, flags);
503-
504-
return ret;
484+
return 0;
505485
}
506486

507487
static const struct pinconf_ops lptlp_pinconf_ops = {
@@ -527,16 +507,13 @@ static void lp_gpio_set(struct gpio_chip *chip, unsigned int offset, int value)
527507
{
528508
struct intel_pinctrl *lg = gpiochip_get_data(chip);
529509
void __iomem *reg = lp_gpio_reg(chip, offset, LP_CONFIG1);
530-
unsigned long flags;
531510

532-
raw_spin_lock_irqsave(&lg->lock, flags);
511+
guard(raw_spinlock_irqsave)(&lg->lock);
533512

534513
if (value)
535514
iowrite32(ioread32(reg) | OUT_LVL_BIT, reg);
536515
else
537516
iowrite32(ioread32(reg) & ~OUT_LVL_BIT, reg);
538-
539-
raw_spin_unlock_irqrestore(&lg->lock, flags);
540517
}
541518

542519
static int lp_gpio_direction_input(struct gpio_chip *chip, unsigned int offset)
@@ -592,11 +569,10 @@ static void lp_irq_ack(struct irq_data *d)
592569
struct intel_pinctrl *lg = gpiochip_get_data(gc);
593570
irq_hw_number_t hwirq = irqd_to_hwirq(d);
594571
void __iomem *reg = lp_gpio_reg(&lg->chip, hwirq, LP_INT_STAT);
595-
unsigned long flags;
596572

597-
raw_spin_lock_irqsave(&lg->lock, flags);
573+
guard(raw_spinlock_irqsave)(&lg->lock);
574+
598575
iowrite32(BIT(hwirq % 32), reg);
599-
raw_spin_unlock_irqrestore(&lg->lock, flags);
600576
}
601577

602578
static void lp_irq_unmask(struct irq_data *d)
@@ -613,13 +589,11 @@ static void lp_irq_enable(struct irq_data *d)
613589
struct intel_pinctrl *lg = gpiochip_get_data(gc);
614590
irq_hw_number_t hwirq = irqd_to_hwirq(d);
615591
void __iomem *reg = lp_gpio_reg(&lg->chip, hwirq, LP_INT_ENABLE);
616-
unsigned long flags;
617592

618593
gpiochip_enable_irq(gc, hwirq);
619594

620-
raw_spin_lock_irqsave(&lg->lock, flags);
621-
iowrite32(ioread32(reg) | BIT(hwirq % 32), reg);
622-
raw_spin_unlock_irqrestore(&lg->lock, flags);
595+
scoped_guard(raw_spinlock_irqsave, &lg->lock)
596+
iowrite32(ioread32(reg) | BIT(hwirq % 32), reg);
623597
}
624598

625599
static void lp_irq_disable(struct irq_data *d)
@@ -628,11 +602,9 @@ static void lp_irq_disable(struct irq_data *d)
628602
struct intel_pinctrl *lg = gpiochip_get_data(gc);
629603
irq_hw_number_t hwirq = irqd_to_hwirq(d);
630604
void __iomem *reg = lp_gpio_reg(&lg->chip, hwirq, LP_INT_ENABLE);
631-
unsigned long flags;
632605

633-
raw_spin_lock_irqsave(&lg->lock, flags);
634-
iowrite32(ioread32(reg) & ~BIT(hwirq % 32), reg);
635-
raw_spin_unlock_irqrestore(&lg->lock, flags);
606+
scoped_guard(raw_spinlock_irqsave, &lg->lock)
607+
iowrite32(ioread32(reg) & ~BIT(hwirq % 32), reg);
636608

637609
gpiochip_disable_irq(gc, hwirq);
638610
}
@@ -642,7 +614,6 @@ static int lp_irq_set_type(struct irq_data *d, unsigned int type)
642614
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
643615
struct intel_pinctrl *lg = gpiochip_get_data(gc);
644616
irq_hw_number_t hwirq = irqd_to_hwirq(d);
645-
unsigned long flags;
646617
void __iomem *reg;
647618
u32 value;
648619

@@ -656,7 +627,8 @@ static int lp_irq_set_type(struct irq_data *d, unsigned int type)
656627
return -EBUSY;
657628
}
658629

659-
raw_spin_lock_irqsave(&lg->lock, flags);
630+
guard(raw_spinlock_irqsave)(&lg->lock);
631+
660632
value = ioread32(reg);
661633

662634
/* set both TRIG_SEL and INV bits to 0 for rising edge */
@@ -682,8 +654,6 @@ static int lp_irq_set_type(struct irq_data *d, unsigned int type)
682654
else if (type & IRQ_TYPE_LEVEL_MASK)
683655
irq_set_handler_locked(d, handle_level_irq);
684656

685-
raw_spin_unlock_irqrestore(&lg->lock, flags);
686-
687657
return 0;
688658
}
689659

0 commit comments

Comments
 (0)