pinctrl: merrifield: Set default bias in case no particular value given
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 11 Nov 2020 12:06:05 +0000 (14:06 +0200)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 12 Nov 2020 13:57:33 +0000 (15:57 +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 Merrifield pin control hardware the 20 kOhm sounds plausible
because it gives a good trade off between weakness and minimization of leakage
current (will be only 50 uA with the above choice).

Fixes: 4e80c8f50574 ("pinctrl: intel: Add Intel Merrifield pin controller support")
Depends-on: 2956b5d94a76 ("pinctrl / gpio: Introduce .set_config() callback for GPIO chips")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/pinctrl/intel/pinctrl-merrifield.c

index e4ff8da..3ae141e 100644 (file)
@@ -745,6 +745,10 @@ static int mrfld_config_set_pin(struct mrfld_pinctrl *mp, unsigned int pin,
                mask |= BUFCFG_Px_EN_MASK | BUFCFG_PUPD_VAL_MASK;
                bits |= BUFCFG_PU_EN;
 
+               /* Set default strength value in case none is given */
+               if (arg == 1)
+                       arg = 20000;
+
                switch (arg) {
                case 50000:
                        bits |= BUFCFG_PUPD_VAL_50K << BUFCFG_PUPD_VAL_SHIFT;
@@ -765,6 +769,10 @@ static int mrfld_config_set_pin(struct mrfld_pinctrl *mp, unsigned int pin,
                mask |= BUFCFG_Px_EN_MASK | BUFCFG_PUPD_VAL_MASK;
                bits |= BUFCFG_PD_EN;
 
+               /* Set default strength value in case none is given */
+               if (arg == 1)
+                       arg = 20000;
+
                switch (arg) {
                case 50000:
                        bits |= BUFCFG_PUPD_VAL_50K << BUFCFG_PUPD_VAL_SHIFT;