gpiolib: of: Improve gpiolib-of support pull up/down on expanders
PATCH 1/2 gpiolib: of: Improve gpiolib-of support pull up/down on expanders
When using GPIO expanders attached to I2C ports, their set_config function needs to be passed a config setting which contains options to enable pull up or pull down bias feature. In order to set this config properly, the gpio parser needs to handle GPIO_PULL_UP and GPIO_PULL_DOWN.
This patch enables the flags corresponding to GPIO_PULL_UP and GPIO_PULL_DOWN.
drivers/gpio/gpiolib-of.c +10 -0
@@ -344,6 +344,12 @@ struct gpio_desc *gpiod_get_from_of_node(struct device_node *node,if (transitory) lflags |=GPIO_TRANSITORY ; +if (flags &OF_GPIO_PULL_UP ) + lflags |=GPIO_PULL_UP ; + +if (flags &OF_GPIO_PULL_DOWN ) + lflags |=GPIO_PULL_DOWN ; + ret =gpiod_configure_flags (desc, propname, lflags, dflags);if (ret <0 ) {gpiod_put (desc);
@@ -585,6 +591,10 @@ static struct gpio_desc *of_parse_own_gpio(struct device_node *np, *lflags |=GPIO_ACTIVE_LOW ;if (xlate_flags &OF_GPIO_TRANSITORY ) *lflags |=GPIO_TRANSITORY ; +if (xlate_flags &OF_GPIO_PULL_UP ) + *lflags |=GPIO_PULL_UP ; +if (xlate_flags &OF_GPIO_PULL_DOWN ) + *lflags |=GPIO_PULL_DOWN ;if (of_property_read_bool (np,"input" )) *dflags |=GPIOD_IN ;
Signature · 1 line
2.25.1
PATCH 2/2 gpio: pca953x: Fix pca953x_gpio_set_config
pca953x_gpio_set_config is setup to support pull-up/down bias. Currently the driver uses a variable called 'config' to determine which options to use. Unfortunately, this is incorrect.
This patch uses function pinconf_to_config_param(config), which converts this 'config' parameter back to pinconfig to determine which option to use.
drivers/gpio/gpio-pca953x.c +1 -1
@@ -531,7 +531,7 @@ static int pca953x_gpio_set_config(struct gpio_chip *gc, unsigned int offset, {struct pca953x_chip *chip =gpiochip_get_data (gc); -switch (config) { +switch (pinconf_to_config_param (config)) {case PIN_CONFIG_BIAS_PULL_UP :case PIN_CONFIG_BIAS_PULL_DOWN :return pca953x_gpio_set_pull_up_down (chip, offset, config);
Signature · 1 line
2.25.1
Re: [PATCH 2/2] gpio: pca953x: Fix pca953x_gpio_set_config
niedz., 12 kwi 2020 o 03:34 Adam Ford <[email protected]> napisał(a):
Quoted 27 lines
pca953x_gpio_set_configis setup to support pull-up/down bias. Currently the driver uses a variable called 'config' to determine which options to use. Unfortunately, this is incorrect.This patch uses function
pinconf_to_config_param(config), which converts this 'config' parameter back to pinconfig to determine which option to use.Fixes 15add06841a3 ("gpio: pca953x: add ->set_config implementation")Signed-off-by Adam Ford <[email protected]>drivers/gpio/gpio-pca953x.c +1
-2@@ -531,7 +531,7 @@ static int pca953x_gpio_set_config(struct gpio_chip *gc, unsigned int offset, {struct pca953x_chip *chip =gpiochip_get_data (gc); -switch (config) { +switch (pinconf_to_config_param (config)) {case PIN_CONFIG_BIAS_PULL_UP :case PIN_CONFIG_BIAS_PULL_DOWN :return pca953x_gpio_set_pull_up_down (chip, offset, config); --
Quoted 2 lines
2.25.1
Patch applied for fixes, thanks!
Bart
niedz., 12 kwi 2020 o 03:34 Adam Ford <[email protected]> napisał(a):
Quoted 40 lines
When using GPIO expanders attached to I2C ports, their
set_configfunction needs to be passed a config setting which contains options to enable pull up or pull down bias feature. In order to set this config properly, the gpio parser needs to handleGPIO_PULL_UPandGPIO_PULL_DOWN.This patch enables the flags corresponding to
GPIO_PULL_UPandGPIO_PULL_DOWN.Signed-off-by Adam Ford <[email protected]>drivers/gpio/gpiolib-of.c +10
-1@@ -344,6 +344,12 @@ struct gpio_desc *gpiod_get_from_of_node(struct device_node *node,if (transitory) lflags |=GPIO_TRANSITORY ; +if (flags &OF_GPIO_PULL_UP ) + lflags |=GPIO_PULL_UP ; + +if (flags &OF_GPIO_PULL_DOWN ) + lflags |=GPIO_PULL_DOWN ; + ret =gpiod_configure_flags (desc, propname, lflags, dflags);if (ret <0 ) {gpiod_put (desc);@@ -585,6 +591,10 @@ static struct gpio_desc *of_parse_own_gpio(struct device_node *np, *lflags |=GPIO_ACTIVE_LOW ;if (xlate_flags &OF_GPIO_TRANSITORY ) *lflags |=GPIO_TRANSITORY ; +if (xlate_flags &OF_GPIO_PULL_UP ) + *lflags |=GPIO_PULL_UP ; +if (xlate_flags &OF_GPIO_PULL_DOWN ) + *lflags |=GPIO_PULL_DOWN ;if (of_property_read_bool (np,"input" )) *dflags |=GPIOD_IN ; --
Quoted 2 lines
2.25.1
Patch applied, thanks!
Bart