Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pinctrl: meson: implement the gpio_chip get_direction callback

Implement the get_direction callback so we read the direction from the
actual GPIO controller register. This is recommended by the gpio_chip
kernel doc.

Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Link: https://lore.kernel.org/r/20200417183349.1283092-2-martin.blumenstingl@googlemail.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

authored by

Martin Blumenstingl and committed by
Linus Walleij
ef1d0bce 4e3ec9e4

+13
+13
drivers/pinctrl/meson/pinctrl-meson.c
··· 549 549 .is_generic = true, 550 550 }; 551 551 552 + static int meson_gpio_get_direction(struct gpio_chip *chip, unsigned gpio) 553 + { 554 + struct meson_pinctrl *pc = gpiochip_get_data(chip); 555 + int ret; 556 + 557 + ret = meson_pinconf_get_output(pc, gpio); 558 + if (ret < 0) 559 + return ret; 560 + 561 + return ret ? GPIO_LINE_DIRECTION_OUT : GPIO_LINE_DIRECTION_IN; 562 + } 563 + 552 564 static int meson_gpio_direction_input(struct gpio_chip *chip, unsigned gpio) 553 565 { 554 566 return meson_pinconf_set_output(gpiochip_get_data(chip), gpio, false); ··· 603 591 pc->chip.parent = pc->dev; 604 592 pc->chip.request = gpiochip_generic_request; 605 593 pc->chip.free = gpiochip_generic_free; 594 + pc->chip.get_direction = meson_gpio_get_direction; 606 595 pc->chip.direction_input = meson_gpio_direction_input; 607 596 pc->chip.direction_output = meson_gpio_direction_output; 608 597 pc->chip.get = meson_gpio_get;