diff options
Diffstat (limited to 'drivers/pinctrl/pinctrl-as3722.c')
-rw-r--r-- | drivers/pinctrl/pinctrl-as3722.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/pinctrl/pinctrl-as3722.c b/drivers/pinctrl/pinctrl-as3722.c index 92ed4b2e3c07..c862f9c0e9ce 100644 --- a/drivers/pinctrl/pinctrl-as3722.c +++ b/drivers/pinctrl/pinctrl-as3722.c | |||
@@ -64,7 +64,6 @@ struct as3722_pin_function { | |||
64 | }; | 64 | }; |
65 | 65 | ||
66 | struct as3722_gpio_pin_control { | 66 | struct as3722_gpio_pin_control { |
67 | bool enable_gpio_invert; | ||
68 | unsigned mode_prop; | 67 | unsigned mode_prop; |
69 | int io_function; | 68 | int io_function; |
70 | }; | 69 | }; |
@@ -320,10 +319,8 @@ static int as3722_pinctrl_gpio_set_direction(struct pinctrl_dev *pctldev, | |||
320 | return mode; | 319 | return mode; |
321 | } | 320 | } |
322 | 321 | ||
323 | if (as_pci->gpio_control[offset].enable_gpio_invert) | 322 | return as3722_update_bits(as3722, AS3722_GPIOn_CONTROL_REG(offset), |
324 | mode |= AS3722_GPIO_INV; | 323 | AS3722_GPIO_MODE_MASK, mode); |
325 | |||
326 | return as3722_write(as3722, AS3722_GPIOn_CONTROL_REG(offset), mode); | ||
327 | } | 324 | } |
328 | 325 | ||
329 | static const struct pinmux_ops as3722_pinmux_ops = { | 326 | static const struct pinmux_ops as3722_pinmux_ops = { |
@@ -496,10 +493,18 @@ static void as3722_gpio_set(struct gpio_chip *chip, unsigned offset, | |||
496 | { | 493 | { |
497 | struct as3722_pctrl_info *as_pci = to_as_pci(chip); | 494 | struct as3722_pctrl_info *as_pci = to_as_pci(chip); |
498 | struct as3722 *as3722 = as_pci->as3722; | 495 | struct as3722 *as3722 = as_pci->as3722; |
499 | int en_invert = as_pci->gpio_control[offset].enable_gpio_invert; | 496 | int en_invert; |
500 | u32 val; | 497 | u32 val; |
501 | int ret; | 498 | int ret; |
502 | 499 | ||
500 | ret = as3722_read(as3722, AS3722_GPIOn_CONTROL_REG(offset), &val); | ||
501 | if (ret < 0) { | ||
502 | dev_err(as_pci->dev, | ||
503 | "GPIO_CONTROL%d_REG read failed: %d\n", offset, ret); | ||
504 | return; | ||
505 | } | ||
506 | en_invert = !!(val & AS3722_GPIO_INV); | ||
507 | |||
503 | if (value) | 508 | if (value) |
504 | val = (en_invert) ? 0 : AS3722_GPIOn_SIGNAL(offset); | 509 | val = (en_invert) ? 0 : AS3722_GPIOn_SIGNAL(offset); |
505 | else | 510 | else |