add GPIOD_OPEN_DRAIN flag which cant parsed properly Problem: for example cant power video system for sm1 g12a socs because OPEN_DRAIN flag cant parsed
DTS examples: ``` $ grep GPIO_OPEN_DRAIN\> arch/arm/dts/meson-*.dt* arch/arm/dts/meson-g12a-sei510.dts: gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>; arch/arm/dts/meson-g12a-u200.dts: gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>; arch/arm/dts/meson-gx-libretech-pc.dtsi: gpio = <&gpio GPIOH_3 GPIO_OPEN_DRAIN>; arch/arm/dts/meson-khadas-vim3.dtsi: gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>; arch/arm/dts/meson-sm1-sei610.dts: gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>; ``` Signed-off-by: Artem Lapkin <a...@khadas.com> --- drivers/gpio/gpio-uclass.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c index bad6b71e0c..6225f32457 100644 --- a/drivers/gpio/gpio-uclass.c +++ b/drivers/gpio/gpio-uclass.c @@ -574,6 +574,15 @@ int dm_gpio_set_value(const struct gpio_desc *desc, int value) if (ret) return ret; + if (desc->flags & GPIOD_OPEN_DRAIN) { + if (value) + gpio_get_ops(desc->dev)->direction_input(desc->dev, desc->offset); + else + gpio_get_ops(desc->dev)->direction_output(desc->dev, desc->offset, 0); + + return 0; + } + if (desc->flags & GPIOD_ACTIVE_LOW) value = !value; -- 2.25.1