mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-05-08 14:16:12 +02:00
pinctrl: meson: support gpio toggle command
meson_gpio_get() always assumes gpio is configured to input mode. This
is incorrect and breaks `gpio toggle` command:
gpio: pin aobus-banks2 (gpio 2) value is 0
Warning: value of pin is still 1
Fix it by adding the logic to handle both input and output mode.
Fixes: 2009a8d03fe5 ("pinctrl: meson: add GPIO support")
Signed-off-by: Yang Xiwen <forbidden405@outlook.com>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://lore.kernel.org/r/20250617-meson_ppinctrl-v3-1-218d9321a8d2@outlook.com
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
This commit is contained in:
parent
1a367adfd6
commit
033dbc7f9e
@ -117,8 +117,26 @@ int meson_gpio_get(struct udevice *dev, unsigned int offset)
|
||||
struct meson_pinctrl *priv = dev_get_priv(dev->parent);
|
||||
unsigned int reg, bit;
|
||||
int ret;
|
||||
enum gpio_func_t direction;
|
||||
enum meson_reg_type reg_type;
|
||||
|
||||
ret = meson_gpio_calc_reg_and_bit(dev->parent, offset, REG_IN, ®,
|
||||
direction = meson_gpio_get_direction(dev, offset);
|
||||
|
||||
switch (direction) {
|
||||
case GPIOF_INPUT:
|
||||
reg_type = REG_IN;
|
||||
break;
|
||||
|
||||
case GPIOF_OUTPUT:
|
||||
reg_type = REG_OUT;
|
||||
break;
|
||||
|
||||
default:
|
||||
dev_warn(dev, "Failed to get current direction of Pin %u\n", offset);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = meson_gpio_calc_reg_and_bit(dev->parent, offset, reg_type, ®,
|
||||
&bit);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user