10
10
#include <linux/acpi.h>
11
11
#include <linux/array_size.h>
12
12
#include <linux/bitops.h>
13
+ #include <linux/cleanup.h>
13
14
#include <linux/gpio/driver.h>
14
15
#include <linux/interrupt.h>
15
16
#include <linux/io.h>
@@ -291,10 +292,9 @@ static int lp_pinmux_set_mux(struct pinctrl_dev *pctldev,
291
292
{
292
293
struct intel_pinctrl * lg = pinctrl_dev_get_drvdata (pctldev );
293
294
const struct intel_pingroup * grp = & lg -> soc -> groups [group ];
294
- unsigned long flags ;
295
295
int i ;
296
296
297
- raw_spin_lock_irqsave ( & lg -> lock , flags );
297
+ guard ( raw_spinlock_irqsave )( & lg -> lock );
298
298
299
299
/* Now enable the mux setting for each pin in the group */
300
300
for (i = 0 ; i < grp -> grp .npins ; i ++ ) {
@@ -312,8 +312,6 @@ static int lp_pinmux_set_mux(struct pinctrl_dev *pctldev,
312
312
iowrite32 (value , reg );
313
313
}
314
314
315
- raw_spin_unlock_irqrestore (& lg -> lock , flags );
316
-
317
315
return 0 ;
318
316
}
319
317
@@ -334,10 +332,9 @@ static int lp_gpio_request_enable(struct pinctrl_dev *pctldev,
334
332
struct intel_pinctrl * lg = pinctrl_dev_get_drvdata (pctldev );
335
333
void __iomem * reg = lp_gpio_reg (& lg -> chip , pin , LP_CONFIG1 );
336
334
void __iomem * conf2 = lp_gpio_reg (& lg -> chip , pin , LP_CONFIG2 );
337
- unsigned long flags ;
338
335
u32 value ;
339
336
340
- raw_spin_lock_irqsave ( & lg -> lock , flags );
337
+ guard ( raw_spinlock_irqsave )( & lg -> lock );
341
338
342
339
/*
343
340
* 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,
352
349
/* Enable input sensing */
353
350
lp_gpio_enable_input (conf2 );
354
351
355
- raw_spin_unlock_irqrestore (& lg -> lock , flags );
356
-
357
352
return 0 ;
358
353
}
359
354
@@ -363,14 +358,11 @@ static void lp_gpio_disable_free(struct pinctrl_dev *pctldev,
363
358
{
364
359
struct intel_pinctrl * lg = pinctrl_dev_get_drvdata (pctldev );
365
360
void __iomem * conf2 = lp_gpio_reg (& lg -> chip , pin , LP_CONFIG2 );
366
- unsigned long flags ;
367
361
368
- raw_spin_lock_irqsave ( & lg -> lock , flags );
362
+ guard ( raw_spinlock_irqsave )( & lg -> lock );
369
363
370
364
/* Disable input sensing */
371
365
lp_gpio_disable_input (conf2 );
372
-
373
- raw_spin_unlock_irqrestore (& lg -> lock , flags );
374
366
}
375
367
376
368
static int lp_gpio_set_direction (struct pinctrl_dev * pctldev ,
@@ -379,10 +371,9 @@ static int lp_gpio_set_direction(struct pinctrl_dev *pctldev,
379
371
{
380
372
struct intel_pinctrl * lg = pinctrl_dev_get_drvdata (pctldev );
381
373
void __iomem * reg = lp_gpio_reg (& lg -> chip , pin , LP_CONFIG1 );
382
- unsigned long flags ;
383
374
u32 value ;
384
375
385
- raw_spin_lock_irqsave ( & lg -> lock , flags );
376
+ guard ( raw_spinlock_irqsave )( & lg -> lock );
386
377
387
378
value = ioread32 (reg );
388
379
value &= ~DIR_BIT ;
@@ -400,8 +391,6 @@ static int lp_gpio_set_direction(struct pinctrl_dev *pctldev,
400
391
}
401
392
iowrite32 (value , reg );
402
393
403
- raw_spin_unlock_irqrestore (& lg -> lock , flags );
404
-
405
394
return 0 ;
406
395
}
407
396
@@ -421,13 +410,11 @@ static int lp_pin_config_get(struct pinctrl_dev *pctldev, unsigned int pin,
421
410
struct intel_pinctrl * lg = pinctrl_dev_get_drvdata (pctldev );
422
411
void __iomem * conf2 = lp_gpio_reg (& lg -> chip , pin , LP_CONFIG2 );
423
412
enum pin_config_param param = pinconf_to_config_param (* config );
424
- unsigned long flags ;
425
413
u32 value , pull ;
426
414
u16 arg ;
427
415
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 );
431
418
432
419
pull = value & GPIWP_MASK ;
433
420
@@ -464,11 +451,10 @@ static int lp_pin_config_set(struct pinctrl_dev *pctldev, unsigned int pin,
464
451
struct intel_pinctrl * lg = pinctrl_dev_get_drvdata (pctldev );
465
452
void __iomem * conf2 = lp_gpio_reg (& lg -> chip , pin , LP_CONFIG2 );
466
453
enum pin_config_param param ;
467
- unsigned long flags ;
468
- int i , ret = 0 ;
454
+ unsigned int i ;
469
455
u32 value ;
470
456
471
- raw_spin_lock_irqsave ( & lg -> lock , flags );
457
+ guard ( raw_spinlock_irqsave )( & lg -> lock );
472
458
473
459
value = ioread32 (conf2 );
474
460
@@ -489,19 +475,13 @@ static int lp_pin_config_set(struct pinctrl_dev *pctldev, unsigned int pin,
489
475
value |= GPIWP_UP ;
490
476
break ;
491
477
default :
492
- ret = - ENOTSUPP ;
478
+ return - ENOTSUPP ;
493
479
}
494
-
495
- if (ret )
496
- break ;
497
480
}
498
481
499
- if (!ret )
500
- iowrite32 (value , conf2 );
482
+ iowrite32 (value , conf2 );
501
483
502
- raw_spin_unlock_irqrestore (& lg -> lock , flags );
503
-
504
- return ret ;
484
+ return 0 ;
505
485
}
506
486
507
487
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)
527
507
{
528
508
struct intel_pinctrl * lg = gpiochip_get_data (chip );
529
509
void __iomem * reg = lp_gpio_reg (chip , offset , LP_CONFIG1 );
530
- unsigned long flags ;
531
510
532
- raw_spin_lock_irqsave ( & lg -> lock , flags );
511
+ guard ( raw_spinlock_irqsave )( & lg -> lock );
533
512
534
513
if (value )
535
514
iowrite32 (ioread32 (reg ) | OUT_LVL_BIT , reg );
536
515
else
537
516
iowrite32 (ioread32 (reg ) & ~OUT_LVL_BIT , reg );
538
-
539
- raw_spin_unlock_irqrestore (& lg -> lock , flags );
540
517
}
541
518
542
519
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)
592
569
struct intel_pinctrl * lg = gpiochip_get_data (gc );
593
570
irq_hw_number_t hwirq = irqd_to_hwirq (d );
594
571
void __iomem * reg = lp_gpio_reg (& lg -> chip , hwirq , LP_INT_STAT );
595
- unsigned long flags ;
596
572
597
- raw_spin_lock_irqsave (& lg -> lock , flags );
573
+ guard (raw_spinlock_irqsave )(& lg -> lock );
574
+
598
575
iowrite32 (BIT (hwirq % 32 ), reg );
599
- raw_spin_unlock_irqrestore (& lg -> lock , flags );
600
576
}
601
577
602
578
static void lp_irq_unmask (struct irq_data * d )
@@ -613,13 +589,11 @@ static void lp_irq_enable(struct irq_data *d)
613
589
struct intel_pinctrl * lg = gpiochip_get_data (gc );
614
590
irq_hw_number_t hwirq = irqd_to_hwirq (d );
615
591
void __iomem * reg = lp_gpio_reg (& lg -> chip , hwirq , LP_INT_ENABLE );
616
- unsigned long flags ;
617
592
618
593
gpiochip_enable_irq (gc , hwirq );
619
594
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 );
623
597
}
624
598
625
599
static void lp_irq_disable (struct irq_data * d )
@@ -628,11 +602,9 @@ static void lp_irq_disable(struct irq_data *d)
628
602
struct intel_pinctrl * lg = gpiochip_get_data (gc );
629
603
irq_hw_number_t hwirq = irqd_to_hwirq (d );
630
604
void __iomem * reg = lp_gpio_reg (& lg -> chip , hwirq , LP_INT_ENABLE );
631
- unsigned long flags ;
632
605
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 );
636
608
637
609
gpiochip_disable_irq (gc , hwirq );
638
610
}
@@ -642,7 +614,6 @@ static int lp_irq_set_type(struct irq_data *d, unsigned int type)
642
614
struct gpio_chip * gc = irq_data_get_irq_chip_data (d );
643
615
struct intel_pinctrl * lg = gpiochip_get_data (gc );
644
616
irq_hw_number_t hwirq = irqd_to_hwirq (d );
645
- unsigned long flags ;
646
617
void __iomem * reg ;
647
618
u32 value ;
648
619
@@ -656,7 +627,8 @@ static int lp_irq_set_type(struct irq_data *d, unsigned int type)
656
627
return - EBUSY ;
657
628
}
658
629
659
- raw_spin_lock_irqsave (& lg -> lock , flags );
630
+ guard (raw_spinlock_irqsave )(& lg -> lock );
631
+
660
632
value = ioread32 (reg );
661
633
662
634
/* 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)
682
654
else if (type & IRQ_TYPE_LEVEL_MASK )
683
655
irq_set_handler_locked (d , handle_level_irq );
684
656
685
- raw_spin_unlock_irqrestore (& lg -> lock , flags );
686
-
687
657
return 0 ;
688
658
}
689
659
0 commit comments