diff options
-rw-r--r-- | drivers/pinctrl/pinctrl-sunxi.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/pinctrl/pinctrl-sunxi.c b/drivers/pinctrl/pinctrl-sunxi.c index 7b3a56c0bccd..8ed4b4a3d755 100644 --- a/drivers/pinctrl/pinctrl-sunxi.c +++ b/drivers/pinctrl/pinctrl-sunxi.c | |||
@@ -464,8 +464,14 @@ static void sunxi_pinctrl_gpio_set(struct gpio_chip *chip, | |||
464 | struct sunxi_pinctrl *pctl = dev_get_drvdata(chip->dev); | 464 | struct sunxi_pinctrl *pctl = dev_get_drvdata(chip->dev); |
465 | u32 reg = sunxi_data_reg(offset); | 465 | u32 reg = sunxi_data_reg(offset); |
466 | u8 index = sunxi_data_offset(offset); | 466 | u8 index = sunxi_data_offset(offset); |
467 | u32 regval = readl(pctl->membase + reg); | ||
467 | 468 | ||
468 | writel((value & DATA_PINS_MASK) << index, pctl->membase + reg); | 469 | if (value) |
470 | regval |= BIT(index); | ||
471 | else | ||
472 | regval &= ~(BIT(index)); | ||
473 | |||
474 | writel(regval, pctl->membase + reg); | ||
469 | } | 475 | } |
470 | 476 | ||
471 | static int sunxi_pinctrl_gpio_of_xlate(struct gpio_chip *gc, | 477 | static int sunxi_pinctrl_gpio_of_xlate(struct gpio_chip *gc, |