Skip to content

Commit

Permalink
pinctrl: abx500: allow to set pull up
Browse files Browse the repository at this point in the history
On ABx500 chip family, all pins support only pull down except for
AB8540 which supports pull up/down on some pins.
Rework abx500_pin_config_set to be able to set pull up on
pins which support this feature.

Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
  • Loading branch information
Patrice Chotard authored and Linus Walleij committed Jun 16, 2013
1 parent 10a8be5 commit 9ed3cd3
Showing 1 changed file with 23 additions and 1 deletion.
24 changes: 23 additions & 1 deletion drivers/pinctrl/pinctrl-abx500.c
Original file line number Diff line number Diff line change
Expand Up @@ -725,7 +725,7 @@ static int abx500_pin_config_set(struct pinctrl_dev *pctldev,
struct pullud *pullud = pct->soc->pullud;
struct gpio_chip *chip = &pct->chip;
unsigned offset;
int ret;
int ret = 0;
enum pin_config_param param = pinconf_to_config_param(config);
enum pin_config_param argument = pinconf_to_config_argument(config);

Expand Down Expand Up @@ -763,6 +763,28 @@ static int abx500_pin_config_set(struct pinctrl_dev *pctldev,
offset, argument ? 0 : 1);
break;

case PIN_CONFIG_BIAS_PULL_UP:
/*
* if argument = 1 set the pull up
* else clear the pull up
*/
ret = abx500_gpio_direction_input(chip, offset);
/*
* Some chips only support pull down, while some actually
* support both pull up and pull down. Such chips have
* a "pullud" range specified for the pins that support
* both features. If the pin is not within that range, do
* nothing
*/
if (pullud &&
pin >= pullud->first_pin &&
pin <= pullud->last_pin) {
ret = abx500_config_pull_updown(pct,
pin,
argument ? ABX500_GPIO_PULL_UP : ABX500_GPIO_PULL_NONE);
}
break;

case PIN_CONFIG_OUTPUT:
ret = abx500_gpio_direction_output(chip, offset, argument);

Expand Down

0 comments on commit 9ed3cd3

Please sign in to comment.