[PATCH v2] gpio: davinci: implement .get_direction()

Bartosz Golaszewski posted 1 patch 4 weeks, 1 day ago
drivers/gpio/gpio-davinci.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
[PATCH v2] gpio: davinci: implement .get_direction()
Posted by Bartosz Golaszewski 4 weeks, 1 day ago
It's strongly recommended for GPIO drivers to always implement the
.get_direction() callback - even for fixed-direction controllers.

GPIO core will even emit a warning if the callback is missing, when
users try to read the direction of a pin.

Implement .get_direction() for gpio-davinci.

Reported-by: Michael Walle <mwalle@kernel.org>
Closes: https://lore.kernel.org/all/DFJAFK3DTBOZ.3G2P3A5IH34GF@kernel.org/
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
---
I sent v1 too fast and forgot to Cc Keerthy. Sorry for the noise.

Changes in v2:
- use unsigned int instead of unsigned
- Cc davinci-gpio maintainer

 drivers/gpio/gpio-davinci.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c
index 538f27209ce7..97780f27ce5b 100644
--- a/drivers/gpio/gpio-davinci.c
+++ b/drivers/gpio/gpio-davinci.c
@@ -6,6 +6,7 @@
  * Copyright (c) 2007, MontaVista Software, Inc. <source@mvista.com>
  */
 
+#include <linux/cleanup.h>
 #include <linux/gpio/driver.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
@@ -109,6 +110,22 @@ davinci_direction_out(struct gpio_chip *chip, unsigned offset, int value)
 	return __davinci_direction(chip, offset, true, value);
 }
 
+static int davinci_get_direction(struct gpio_chip *chip, unsigned int offset)
+{
+	struct davinci_gpio_controller *d = gpiochip_get_data(chip);
+	struct davinci_gpio_regs __iomem *g;
+	u32 mask = __gpio_mask(offset), val;
+	int bank = offset / 32;
+
+	g = d->regs[bank];
+
+	guard(spinlock_irqsave)(&d->lock);
+
+	val = readl_relaxed(&g->dir);
+
+	return (val & mask) ? GPIO_LINE_DIRECTION_IN : GPIO_LINE_DIRECTION_OUT;
+}
+
 /*
  * Read the pin's value (works even if it's set up as output);
  * returns zero/nonzero.
@@ -203,6 +220,7 @@ static int davinci_gpio_probe(struct platform_device *pdev)
 	chips->chip.get = davinci_gpio_get;
 	chips->chip.direction_output = davinci_direction_out;
 	chips->chip.set = davinci_gpio_set;
+	chips->chip.get_direction = davinci_get_direction;
 
 	chips->chip.ngpio = ngpio;
 	chips->chip.base = -1;
-- 
2.47.3
Re: [PATCH v2] gpio: davinci: implement .get_direction()
Posted by Bartosz Golaszewski 3 weeks, 5 days ago
On Fri, 09 Jan 2026 14:08:32 +0100, Bartosz Golaszewski wrote:
> It's strongly recommended for GPIO drivers to always implement the
> .get_direction() callback - even for fixed-direction controllers.
> 
> GPIO core will even emit a warning if the callback is missing, when
> users try to read the direction of a pin.
> 
> Implement .get_direction() for gpio-davinci.
> 
> [...]

Applied, thanks!

[1/1] gpio: davinci: implement .get_direction()
      commit: c18790018799155e58d5a11c6697f9c398bf8b60

Best regards,
-- 
Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Re: [PATCH v2] gpio: davinci: implement .get_direction()
Posted by Linus Walleij 4 weeks, 1 day ago
On Fri, Jan 9, 2026 at 2:08 PM Bartosz Golaszewski
<bartosz.golaszewski@oss.qualcomm.com> wrote:

> It's strongly recommended for GPIO drivers to always implement the
> .get_direction() callback - even for fixed-direction controllers.
>
> GPIO core will even emit a warning if the callback is missing, when
> users try to read the direction of a pin.
>
> Implement .get_direction() for gpio-davinci.
>
> Reported-by: Michael Walle <mwalle@kernel.org>
> Closes: https://lore.kernel.org/all/DFJAFK3DTBOZ.3G2P3A5IH34GF@kernel.org/
> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>

Reviewed-by: Linus Walleij <linusw@kernel.org>

Yours,
Linus Walleij
Re: [PATCH v2] gpio: davinci: implement .get_direction()
Posted by Michael Walle 4 weeks, 1 day ago
Hi,

On Fri Jan 9, 2026 at 2:08 PM CET, Bartosz Golaszewski wrote:
> It's strongly recommended for GPIO drivers to always implement the
> .get_direction() callback - even for fixed-direction controllers.
>
> GPIO core will even emit a warning if the callback is missing, when
> users try to read the direction of a pin.
>
> Implement .get_direction() for gpio-davinci.

I must be blind! I didn't see the direction register and I assumed
that the direction is fixed and only known by the pinctrl (as on k3
SoCs, you have to hardcode the directions of GPIOs in the device
tree.

Thanks for taking care.

> Reported-by: Michael Walle <mwalle@kernel.org>
> Closes: https://lore.kernel.org/all/DFJAFK3DTBOZ.3G2P3A5IH34GF@kernel.org/
> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>

This will need a

Fixes: a060b8c511ab ("gpiolib: implement low-level, shared GPIO support")

Otherwise the sa67 board will be broken with the defconfig (or any
config enabled ARCH_QCOM).

Tested-by: Michael Walle <mwalle@kernel.org> # on sa67

-michael
Re: [PATCH v2] gpio: davinci: implement .get_direction()
Posted by Bartosz Golaszewski 4 weeks, 1 day ago
On Fri, Jan 9, 2026 at 3:12 PM Michael Walle <mwalle@kernel.org> wrote:
>
> Hi,
>
> On Fri Jan 9, 2026 at 2:08 PM CET, Bartosz Golaszewski wrote:
> > It's strongly recommended for GPIO drivers to always implement the
> > .get_direction() callback - even for fixed-direction controllers.
> >
> > GPIO core will even emit a warning if the callback is missing, when
> > users try to read the direction of a pin.
> >
> > Implement .get_direction() for gpio-davinci.
>
> I must be blind! I didn't see the direction register and I assumed
> that the direction is fixed and only known by the pinctrl (as on k3
> SoCs, you have to hardcode the directions of GPIOs in the device
> tree.
>
> Thanks for taking care.
>
> > Reported-by: Michael Walle <mwalle@kernel.org>
> > Closes: https://lore.kernel.org/all/DFJAFK3DTBOZ.3G2P3A5IH34GF@kernel.org/
> > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
>
> This will need a
>
> Fixes: a060b8c511ab ("gpiolib: implement low-level, shared GPIO support")
>
> Otherwise the sa67 board will be broken with the defconfig (or any
> config enabled ARCH_QCOM).
>

Can you confirm, you're still seeing the issue with:

    https://lore.kernel.org/all/20260108-gpio-shared-false-positive-v1-1-5dbf8d1b2f7d@oss.qualcomm.com/

?

Bartosz

> Tested-by: Michael Walle <mwalle@kernel.org> # on sa67
>
> -michael
Re: [PATCH v2] gpio: davinci: implement .get_direction()
Posted by Michael Walle 4 weeks, 1 day ago
>> This will need a
>>
>> Fixes: a060b8c511ab ("gpiolib: implement low-level, shared GPIO support")
>>
>> Otherwise the sa67 board will be broken with the defconfig (or any
>> config enabled ARCH_QCOM).
>>
>
> Can you confirm, you're still seeing the issue with:
>
>     https://lore.kernel.org/all/20260108-gpio-shared-false-positive-v1-1-5dbf8d1b2f7d@oss.qualcomm.com/

Yes, latest next, with that patch applied, still causes the same
issue. I don't think it's a false positive as the same gpio is used
as enable for two different regulators :)

-michael
Re: [PATCH v2] gpio: davinci: implement .get_direction()
Posted by Bartosz Golaszewski 4 weeks, 1 day ago
On Fri, Jan 9, 2026 at 3:48 PM Michael Walle <mwalle@kernel.org> wrote:
>
> >> This will need a
> >>
> >> Fixes: a060b8c511ab ("gpiolib: implement low-level, shared GPIO support")
> >>
> >> Otherwise the sa67 board will be broken with the defconfig (or any
> >> config enabled ARCH_QCOM).
> >>
> >
> > Can you confirm, you're still seeing the issue with:
> >
> >     https://lore.kernel.org/all/20260108-gpio-shared-false-positive-v1-1-5dbf8d1b2f7d@oss.qualcomm.com/
>
> Yes, latest next, with that patch applied, still causes the same
> issue. I don't think it's a false positive as the same gpio is used
> as enable for two different regulators :)
>

Yes, I responded under the other thread. Let's add Fixes: and use this
as the solution?

Bart
Re: [PATCH v2] gpio: davinci: implement .get_direction()
Posted by Michael Walle 4 weeks, 1 day ago
On Fri Jan 9, 2026 at 3:51 PM CET, Bartosz Golaszewski wrote:
> On Fri, Jan 9, 2026 at 3:48 PM Michael Walle <mwalle@kernel.org> wrote:
>>
>> >> This will need a
>> >>
>> >> Fixes: a060b8c511ab ("gpiolib: implement low-level, shared GPIO support")
>> >>
>> >> Otherwise the sa67 board will be broken with the defconfig (or any
>> >> config enabled ARCH_QCOM).
>> >>
>> >
>> > Can you confirm, you're still seeing the issue with:
>> >
>> >     https://lore.kernel.org/all/20260108-gpio-shared-false-positive-v1-1-5dbf8d1b2f7d@oss.qualcomm.com/
>>
>> Yes, latest next, with that patch applied, still causes the same
>> issue. I don't think it's a false positive as the same gpio is used
>> as enable for two different regulators :)
>>
>
> Yes, I responded under the other thread. Let's add Fixes: and use this
> as the solution?

Was just about to reply to the other thread, but lets keep it here:

Yes please, that will work for me.

Thanks,
-michael