RE: [PATCH v3 5/5] pinctrl: renesas: pinctrl-rzg2l: Add IRQ domain to handle GPIO interrupt

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Prabhakar,

Thanks for the example.

> Subject: Re: [PATCH v3 5/5] pinctrl: renesas: pinctrl-rzg2l: Add IRQ domain
> to handle GPIO interrupt
> 
> > But "offset" is a number from the GPIO offset space (0-122), while
> 
> The "offset" reported by kernel is 120-511:
> 
> root@smarc-rzg2l:~# cat /sys/kernel/debug/gpio
> gpiochip0: GPIOs 120-511, parent: platform/11030000.pinctrl,
> 11030000.pinctrl:
>  gpio-120 (P0_0                )
>  gpio-121 (P0_1                )
>  gpio-122 (P0_2                )
>  gpio-123 (P0_3                )
>  gpio-124 (P0_4                )
> .....
>  gpio-507 (P48_3               )
>  gpio-508 (P48_4               )
>  gpio-509 (P48_5               )
>  gpio-510 (P48_6               )
>  gpio-511 (P48_7               )
> 
> > irq_find_mapping() expects a number from the domain's IRQ space, which
> > is only 0-31?
> >
> Nope, let me demonstrate with an example, I have configured the gpio pins
> as GPIO keys in DTS:
> 
> +       keyboard {
> +               compatible = "gpio-keys";
> +               status = "okay";
> +
> +               key-1 {
> +                       gpios = <&pinctrl RZG2L_GPIO(43, 0)
> GPIO_ACTIVE_HIGH>;
> +                       linux,code = <KEY_1>;
> +                       linux,input-type = <EV_KEY>;
> +                       wakeup-source;
> +                       label = "SW1";
> +               };
> +
> +               key-2 {
> +                       gpios = <&pinctrl RZG2L_GPIO(41, 0)
> GPIO_ACTIVE_HIGH>;
> +                       linux,code = <KEY_2>;
> +                       linux,input-type = <EV_KEY>;
> +                       wakeup-source;
> +                       label = "SW2";
> +               };
> +
> +               key-3 {
> +                       gpios = <&pinctrl RZG2L_GPIO(43, 1)
> GPIO_ACTIVE_HIGH>;
> +                       linux,code = <KEY_3>;
> +                       linux,input-type = <EV_KEY>;
> +                       wakeup-source;
> +                       label = "SW3";
> +               };
> +       };
> 
> root@smarc-rzg2l:~# cat /proc/interrupts | grep SW root@smarc-rzg2l:~#
> root@smarc-rzg2l:~# insmod gpio_keys.ko [  925.002720] input: keyboard as
> /devices/platform/keyboard/input/input3
> root@smarc-rzg2l:~# cat /proc/interrupts | grep SW
>  82:          0          0 11030000.pinctrl 344 Edge      SW1
>  83:          0          0 11030000.pinctrl 328 Edge      SW2
>  84:          0          0 11030000.pinctrl 345 Edge      SW3
> root@smarc-rzg2l:~#
> 
> In here 82/83/84 are virq and 344/328/345 are hwirq, which can be confirmed
> from sysfs file:

>From your example, Looks like

I believe from interrupt statistics point of view, cat /proc/interrupts should report actual gpioint number (0->122) corresponding to pin index for SW1, SW2 and SW3 ??

May be another mapping required for pinindex to gpioint to get proper statistics??

>From usage point, another point is, who will track gpioint statistics, pinctrl driver or framework??

Example Use case:- create gpioint0-30 which will fill tint0-tint30.

Then insmod gpioint corresponding to SW1 and trigger 1 interrupt and check cat /proc/interrupts for tint31 and SW1
Then rmmode gpioint corresponding to SW1 and insmod SW2 and trigger 5 interrupts and check cat /proc/interrupts for tint31 and SW2
Then rmmode gpioint corresponding to SW2 and insmod SW3 and trigger 7 interrupts and check cat /proc/interrupts for tint31 and SW3
Then rmmode gpioint corresponding to SW3 and insmod SW1 and check cat /proc/interrupts for tint31 and SW1
Then rmmode gpioint corresponding to SW1 and insmod SW2 and check cat /proc/interrupts for tint31 and SW2

Tint31 should report 13 interrupts
gpioint corresponding to SW1 should report 1 interrupt
gpioint corresponding to SW2 should report 5 interrupts
gpioint corresponding to SW3 should report 7 interrupts

Cheers,
Biju







[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux