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 |
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
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 --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); }