Skip to content

Commit 1209d59

Browse files
raagjadavandy-shev
authored andcommitted
pinctrl: intel: refine intel_config_set_pull() function
Improve intel_config_set_pull() implementation in Intel pinctrl driver by: - Reducing scope of spinlock by moving unneeded operations out of it. - Utilizing temporary variables for common operations. - Limiting IO operations to positive cases. Signed-off-by: Raag Jadav <[email protected]> Acked-by: Mika Westerberg <[email protected]> Signed-off-by: Andy Shevchenko <[email protected]>
1 parent f29047a commit 1209d59

File tree

1 file changed

+21
-20
lines changed

1 file changed

+21
-20
lines changed

drivers/pinctrl/intel/pinctrl-intel.c

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -674,16 +674,8 @@ static int intel_config_set_pull(struct intel_pinctrl *pctrl, unsigned int pin,
674674
unsigned int param = pinconf_to_config_param(config);
675675
unsigned int arg = pinconf_to_config_argument(config);
676676
const struct intel_community *community;
677+
u32 term = 0, up = 0, value;
677678
void __iomem *padcfg1;
678-
u32 value;
679-
680-
community = intel_get_community(pctrl, pin);
681-
padcfg1 = intel_get_padcfg(pctrl, pin, PADCFG1);
682-
683-
guard(raw_spinlock_irqsave)(&pctrl->lock);
684-
685-
value = readl(padcfg1);
686-
value &= ~(PADCFG1_TERM_MASK | PADCFG1_TERM_UP);
687679

688680
/* Set default strength value in case none is given */
689681
if (arg == 1)
@@ -696,47 +688,49 @@ static int intel_config_set_pull(struct intel_pinctrl *pctrl, unsigned int pin,
696688
case PIN_CONFIG_BIAS_PULL_UP:
697689
switch (arg) {
698690
case 20000:
699-
value |= PADCFG1_TERM_20K << PADCFG1_TERM_SHIFT;
691+
term = PADCFG1_TERM_20K;
700692
break;
701693
case 5000:
702-
value |= PADCFG1_TERM_5K << PADCFG1_TERM_SHIFT;
694+
term = PADCFG1_TERM_5K;
703695
break;
704696
case 4000:
705-
value |= PADCFG1_TERM_4K << PADCFG1_TERM_SHIFT;
697+
term = PADCFG1_TERM_4K;
706698
break;
707699
case 1000:
708-
value |= PADCFG1_TERM_1K << PADCFG1_TERM_SHIFT;
700+
term = PADCFG1_TERM_1K;
709701
break;
710702
case 833:
711-
value |= PADCFG1_TERM_833 << PADCFG1_TERM_SHIFT;
703+
term = PADCFG1_TERM_833;
712704
break;
713705
default:
714706
return -EINVAL;
715707
}
716708

717-
value |= PADCFG1_TERM_UP;
709+
up = PADCFG1_TERM_UP;
718710
break;
719711

720712
case PIN_CONFIG_BIAS_PULL_DOWN:
713+
community = intel_get_community(pctrl, pin);
714+
721715
switch (arg) {
722716
case 20000:
723-
value |= PADCFG1_TERM_20K << PADCFG1_TERM_SHIFT;
717+
term = PADCFG1_TERM_20K;
724718
break;
725719
case 5000:
726-
value |= PADCFG1_TERM_5K << PADCFG1_TERM_SHIFT;
720+
term = PADCFG1_TERM_5K;
727721
break;
728722
case 4000:
729-
value |= PADCFG1_TERM_4K << PADCFG1_TERM_SHIFT;
723+
term = PADCFG1_TERM_4K;
730724
break;
731725
case 1000:
732726
if (!(community->features & PINCTRL_FEATURE_1K_PD))
733727
return -EINVAL;
734-
value |= PADCFG1_TERM_1K << PADCFG1_TERM_SHIFT;
728+
term = PADCFG1_TERM_1K;
735729
break;
736730
case 833:
737731
if (!(community->features & PINCTRL_FEATURE_1K_PD))
738732
return -EINVAL;
739-
value |= PADCFG1_TERM_833 << PADCFG1_TERM_SHIFT;
733+
term = PADCFG1_TERM_833;
740734
break;
741735
default:
742736
return -EINVAL;
@@ -748,6 +742,13 @@ static int intel_config_set_pull(struct intel_pinctrl *pctrl, unsigned int pin,
748742
return -EINVAL;
749743
}
750744

745+
padcfg1 = intel_get_padcfg(pctrl, pin, PADCFG1);
746+
747+
guard(raw_spinlock_irqsave)(&pctrl->lock);
748+
749+
value = readl(padcfg1);
750+
value = (value & ~PADCFG1_TERM_MASK) | (term << PADCFG1_TERM_SHIFT);
751+
value = (value & ~PADCFG1_TERM_UP) | up;
751752
writel(value, padcfg1);
752753

753754
return 0;

0 commit comments

Comments
 (0)