]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
pinctrl: baytrail: Avoid clearing debounce value when turning it off
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 12 Nov 2020 19:03:01 +0000 (21:03 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 Dec 2020 10:25:44 +0000 (11:25 +0100)
[ Upstream commit 0b74e40a4e41f3cbad76dff4c50850d47b525b26 ]

Baytrail pin control has a common register to set up debounce timeout.
When a pin configuration requested debounce to be disabled, the rest
of the pins may still want to have debounce enabled and thus rely on
the common timeout value. Avoid clearing debounce value when turning
it off for one pin while others may still use it.

Fixes: 658b476c742f ("pinctrl: baytrail: Add debounce configuration")
Depends-on: 04ff5a095d66 ("pinctrl: baytrail: Rectify debounce support")
Depends-on: 827e1579e1d5 ("pinctrl: baytrail: Rectify debounce support (part 2)")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/pinctrl/intel/pinctrl-baytrail.c

index 1b00a3f3b419cbbe06cda89e5c7af0ce0c2253cd..b3d478edbbb1c7bd4021c491cf11dbcf2d14c34d 100644 (file)
@@ -1258,7 +1258,6 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,
                        break;
                case PIN_CONFIG_INPUT_DEBOUNCE:
                        debounce = readl(db_reg);
-                       debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
 
                        if (arg)
                                conf |= BYT_DEBOUNCE_EN;
@@ -1267,24 +1266,31 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,
 
                        switch (arg) {
                        case 375:
+                               debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
                                debounce |= BYT_DEBOUNCE_PULSE_375US;
                                break;
                        case 750:
+                               debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
                                debounce |= BYT_DEBOUNCE_PULSE_750US;
                                break;
                        case 1500:
+                               debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
                                debounce |= BYT_DEBOUNCE_PULSE_1500US;
                                break;
                        case 3000:
+                               debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
                                debounce |= BYT_DEBOUNCE_PULSE_3MS;
                                break;
                        case 6000:
+                               debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
                                debounce |= BYT_DEBOUNCE_PULSE_6MS;
                                break;
                        case 12000:
+                               debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
                                debounce |= BYT_DEBOUNCE_PULSE_12MS;
                                break;
                        case 24000:
+                               debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
                                debounce |= BYT_DEBOUNCE_PULSE_24MS;
                                break;
                        default: