aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/pinctrl/pinctrl-sunxi.c8
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
471static int sunxi_pinctrl_gpio_of_xlate(struct gpio_chip *gc, 477static int sunxi_pinctrl_gpio_of_xlate(struct gpio_chip *gc,