gpio: Set proper argument value to set_config
authorMaxime Ripard <maxime.ripard@bootlin.com>
Thu, 14 Mar 2019 19:32:50 +0000 (20:32 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 4 Apr 2019 17:04:28 +0000 (00:04 +0700)
The gpio_set_config function creates a pinconf configuration for a given
pinc_config_param.

However, it always uses an arg of 0, which might not be a valid argument
for a given param. A good example of that would be the bias parameters,
where 0 means that the pull up or down resistor is null, and the pin is
directly connected to VCC/GND.

The framework uses in some other places the value 1 as a default argument
to enable the pull resistor, so let's use the same one here.

Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpiolib.c

index f41ad88..e5c3c4b 100644 (file)
@@ -2565,8 +2565,20 @@ EXPORT_SYMBOL_GPL(gpiochip_free_own_desc);
 static int gpio_set_config(struct gpio_chip *gc, unsigned offset,
                           enum pin_config_param mode)
 {
-       unsigned long config = { PIN_CONF_PACKED(mode, 0) };
+       unsigned long config;
+       unsigned arg;
 
+       switch (mode) {
+       case PIN_CONFIG_BIAS_PULL_DOWN:
+       case PIN_CONFIG_BIAS_PULL_UP:
+               arg = 1;
+               break;
+
+       default:
+               arg = 0;
+       }
+
+       config = PIN_CONF_PACKED(mode, arg);
        return gc->set_config ? gc->set_config(gc, offset, config) : -ENOTSUPP;
 }