@@ -674,16 +674,8 @@ static int intel_config_set_pull(struct intel_pinctrl *pctrl, unsigned int pin,
674
674
unsigned int param = pinconf_to_config_param (config );
675
675
unsigned int arg = pinconf_to_config_argument (config );
676
676
const struct intel_community * community ;
677
+ u32 term = 0 , up = 0 , value ;
677
678
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 );
687
679
688
680
/* Set default strength value in case none is given */
689
681
if (arg == 1 )
@@ -696,47 +688,49 @@ static int intel_config_set_pull(struct intel_pinctrl *pctrl, unsigned int pin,
696
688
case PIN_CONFIG_BIAS_PULL_UP :
697
689
switch (arg ) {
698
690
case 20000 :
699
- value | = PADCFG1_TERM_20K << PADCFG1_TERM_SHIFT ;
691
+ term = PADCFG1_TERM_20K ;
700
692
break ;
701
693
case 5000 :
702
- value | = PADCFG1_TERM_5K << PADCFG1_TERM_SHIFT ;
694
+ term = PADCFG1_TERM_5K ;
703
695
break ;
704
696
case 4000 :
705
- value | = PADCFG1_TERM_4K << PADCFG1_TERM_SHIFT ;
697
+ term = PADCFG1_TERM_4K ;
706
698
break ;
707
699
case 1000 :
708
- value | = PADCFG1_TERM_1K << PADCFG1_TERM_SHIFT ;
700
+ term = PADCFG1_TERM_1K ;
709
701
break ;
710
702
case 833 :
711
- value | = PADCFG1_TERM_833 << PADCFG1_TERM_SHIFT ;
703
+ term = PADCFG1_TERM_833 ;
712
704
break ;
713
705
default :
714
706
return - EINVAL ;
715
707
}
716
708
717
- value | = PADCFG1_TERM_UP ;
709
+ up = PADCFG1_TERM_UP ;
718
710
break ;
719
711
720
712
case PIN_CONFIG_BIAS_PULL_DOWN :
713
+ community = intel_get_community (pctrl , pin );
714
+
721
715
switch (arg ) {
722
716
case 20000 :
723
- value | = PADCFG1_TERM_20K << PADCFG1_TERM_SHIFT ;
717
+ term = PADCFG1_TERM_20K ;
724
718
break ;
725
719
case 5000 :
726
- value | = PADCFG1_TERM_5K << PADCFG1_TERM_SHIFT ;
720
+ term = PADCFG1_TERM_5K ;
727
721
break ;
728
722
case 4000 :
729
- value | = PADCFG1_TERM_4K << PADCFG1_TERM_SHIFT ;
723
+ term = PADCFG1_TERM_4K ;
730
724
break ;
731
725
case 1000 :
732
726
if (!(community -> features & PINCTRL_FEATURE_1K_PD ))
733
727
return - EINVAL ;
734
- value | = PADCFG1_TERM_1K << PADCFG1_TERM_SHIFT ;
728
+ term = PADCFG1_TERM_1K ;
735
729
break ;
736
730
case 833 :
737
731
if (!(community -> features & PINCTRL_FEATURE_1K_PD ))
738
732
return - EINVAL ;
739
- value | = PADCFG1_TERM_833 << PADCFG1_TERM_SHIFT ;
733
+ term = PADCFG1_TERM_833 ;
740
734
break ;
741
735
default :
742
736
return - EINVAL ;
@@ -748,6 +742,13 @@ static int intel_config_set_pull(struct intel_pinctrl *pctrl, unsigned int pin,
748
742
return - EINVAL ;
749
743
}
750
744
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 ;
751
752
writel (value , padcfg1 );
752
753
753
754
return 0 ;
0 commit comments