pinctrl: intel: Set default bias in case no particular value given
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 14 Oct 2020 10:46:38 +0000 (13:46 +0300)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 26 Oct 2020 11:26:50 +0000 (13:26 +0200)
When GPIO library asks pin control to set the bias, it doesn't pass
any value of it and argument is considered boolean (and this is true
for ACPI GpioIo() / GpioInt() resources, by the way). Thus, individual
drivers must behave well, when they got the resistance value of 1 Ohm,
i.e. transforming it to sane default.

In case of Intel pin control hardware the 5 kOhm sounds plausible
because on one hand it's a minimum of resistors present in all
hardware generations and at the same time it's high enough to minimize
leakage current (will be only 200 uA with the above choice).

Fixes: e57725eabf87 ("pinctrl: intel: Add support for hardware debouncer")
Reported-by: Jamie McClymont <jamie@kwiius.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/pinctrl/intel/pinctrl-intel.c

index f97b049..1c10ab1 100644 (file)
@@ -683,6 +683,10 @@ static int intel_config_set_pull(struct intel_pinctrl *pctrl, unsigned int pin,
 
                value |= PADCFG1_TERM_UP;
 
+               /* Set default strength value in case none is given */
+               if (arg == 1)
+                       arg = 5000;
+
                switch (arg) {
                case 20000:
                        value |= PADCFG1_TERM_20K << PADCFG1_TERM_SHIFT;
@@ -705,6 +709,10 @@ static int intel_config_set_pull(struct intel_pinctrl *pctrl, unsigned int pin,
        case PIN_CONFIG_BIAS_PULL_DOWN:
                value &= ~(PADCFG1_TERM_UP | PADCFG1_TERM_MASK);
 
+               /* Set default strength value in case none is given */
+               if (arg == 1)
+                       arg = 5000;
+
                switch (arg) {
                case 20000:
                        value |= PADCFG1_TERM_20K << PADCFG1_TERM_SHIFT;