diff mbox series

pinctrl: renesas: rzg2l: Always call rzg2l_gpio_request() for interrupt pins

Message ID 20241003131642.472298-1-prabhakar.mahadev-lad.rj@bp.renesas.com
State New
Headers show
Series pinctrl: renesas: rzg2l: Always call rzg2l_gpio_request() for interrupt pins | expand

Commit Message

Prabhakar Oct. 3, 2024, 1:16 p.m. UTC
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

Ensure that rzg2l_gpio_request() is called for GPIO pins configured as
interrupts, regardless of whether they are muxed in u-boot. This
guarantees that the pinctrl core is aware of the GPIO pin usage via
pinctrl_gpio_request(), which is invoked through rzg2l_gpio_request().

Fixes: 2fd4fe19d0150 ("pinctrl: renesas: rzg2l: Configure interrupt input mode")
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
Output before this patch on G2L/SMARC:
root@smarc-rzg2l:~# cat /sys/kernel/debug/pinctrl/11030000.pinctrl-pinctrl-rzg2l/pinmux-pins | grep P2_1
pin 17 (P2_1): UNCLAIMED

Output after this patch G2L/SMARC:
root@smarc-rzg2l:~# cat /sys/kernel/debug/pinctrl/11030000.pinctrl-pinctrl-rzg2l/pinmux-pins | grep P2_1
pin 17 (P2_1): GPIO 11030000.pinctrl:529
---
 drivers/pinctrl/renesas/pinctrl-rzg2l.c | 15 +++------------
 1 file changed, 3 insertions(+), 12 deletions(-)

Comments

Geert Uytterhoeven Oct. 3, 2024, 1:46 p.m. UTC | #1
Hi Prabhakar,

On Thu, Oct 3, 2024 at 3:16 PM Prabhakar <prabhakar.csengg@gmail.com> wrote:
> From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
>
> Ensure that rzg2l_gpio_request() is called for GPIO pins configured as
> interrupts, regardless of whether they are muxed in u-boot. This
> guarantees that the pinctrl core is aware of the GPIO pin usage via
> pinctrl_gpio_request(), which is invoked through rzg2l_gpio_request().
>
> Fixes: 2fd4fe19d0150 ("pinctrl: renesas: rzg2l: Configure interrupt input mode")
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

Thanks for your patch!

> Output before this patch on G2L/SMARC:
> root@smarc-rzg2l:~# cat /sys/kernel/debug/pinctrl/11030000.pinctrl-pinctrl-rzg2l/pinmux-pins | grep P2_1
> pin 17 (P2_1): UNCLAIMED
>
> Output after this patch G2L/SMARC:
> root@smarc-rzg2l:~# cat /sys/kernel/debug/pinctrl/11030000.pinctrl-pinctrl-rzg2l/pinmux-pins | grep P2_1
> pin 17 (P2_1): GPIO 11030000.pinctrl:529

Just wondering: is this restored to UNCLAIMED after releasing the
interrupt (i.e. after unbinding the ADV7535 driver)?

Gr{oetje,eeting}s,

                        Geert
Prabhakar Oct. 3, 2024, 3:32 p.m. UTC | #2
Hi Geert,

On Thu, Oct 3, 2024 at 2:46 PM Geert Uytterhoeven <geert@linux-m68k.org> wrote:
>
> Hi Prabhakar,
>
> On Thu, Oct 3, 2024 at 3:16 PM Prabhakar <prabhakar.csengg@gmail.com> wrote:
> > From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> >
> > Ensure that rzg2l_gpio_request() is called for GPIO pins configured as
> > interrupts, regardless of whether they are muxed in u-boot. This
> > guarantees that the pinctrl core is aware of the GPIO pin usage via
> > pinctrl_gpio_request(), which is invoked through rzg2l_gpio_request().
> >
> > Fixes: 2fd4fe19d0150 ("pinctrl: renesas: rzg2l: Configure interrupt input mode")
> > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
>
> Thanks for your patch!
>
> > Output before this patch on G2L/SMARC:
> > root@smarc-rzg2l:~# cat /sys/kernel/debug/pinctrl/11030000.pinctrl-pinctrl-rzg2l/pinmux-pins | grep P2_1
> > pin 17 (P2_1): UNCLAIMED
> >
> > Output after this patch G2L/SMARC:
> > root@smarc-rzg2l:~# cat /sys/kernel/debug/pinctrl/11030000.pinctrl-pinctrl-rzg2l/pinmux-pins | grep P2_1
> > pin 17 (P2_1): GPIO 11030000.pinctrl:529
>
> Just wondering: is this restored to UNCLAIMED after releasing the
> interrupt (i.e. after unbinding the ADV7535 driver)?
>
Actually it doesn't report `UNCLAIMED` after `modprobe -r adv7511`,
pinmux-pins reports P2_1 is claimed 11030000.pinctrl:529. `modprobe
adv7511` later succeeds though (maybe because it's the same device).
rzg2l_gpio_free() is called from the rzg2l_gpio_irq_domain_free()
path, either this path is not being called when IRQ is freed or the
adv7511 isn't releasing the IRQ.

Cheers,
Prabhakar
diff mbox series

Patch

diff --git a/drivers/pinctrl/renesas/pinctrl-rzg2l.c b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
index 60ef20ca3ccf..1dceaf8290ea 100644
--- a/drivers/pinctrl/renesas/pinctrl-rzg2l.c
+++ b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
@@ -2368,20 +2368,11 @@  static const struct irq_chip rzg2l_gpio_irqchip = {
 
 static int rzg2l_gpio_interrupt_input_mode(struct gpio_chip *chip, unsigned int offset)
 {
-	struct rzg2l_pinctrl *pctrl = gpiochip_get_data(chip);
-	const struct pinctrl_pin_desc *pin_desc = &pctrl->desc.pins[offset];
-	u64 *pin_data = pin_desc->drv_data;
-	u32 off = RZG2L_PIN_CFG_TO_PORT_OFFSET(*pin_data);
-	u8 bit = RZG2L_PIN_ID_TO_PIN(offset);
-	u8 reg8;
 	int ret;
 
-	reg8 = readb(pctrl->base + PMC(off));
-	if (reg8 & BIT(bit)) {
-		ret = rzg2l_gpio_request(chip, offset);
-		if (ret)
-			return ret;
-	}
+	ret = rzg2l_gpio_request(chip, offset);
+	if (ret)
+		return ret;
 
 	return rzg2l_gpio_direction_input(chip, offset);
 }