Subject: [RFC PATCH] gpio/omap: Fix IRQ handling for SPARSE_IRQ

From: [email-masked] (Cousson, Benoit)
Date: Fri, 24 Feb 2012 16:12:32 +0100

On 2/24/2012 4:09 PM, DebBarma, Tarun Kanti wrote:
> Hi Benoit,
>
> On Fri, Feb 24, 2012 at 7:26 PM, Cousson, Benoit<[email-masked]>  wrote:
>> On 2/24/2012 2:53 PM, DebBarma, Tarun Kanti wrote:
>>>
>>> On Fri, Feb 24, 2012 at 7:02 PM, Cousson, Benoit<[email-masked]>    wrote:
>>>>
>>>> On 2/24/2012 2:24 PM, DebBarma, Tarun Kanti wrote:
>>>>>
>>>>>
>>>>> Hi Benoit,
>>>>>
>>>>> On Fri, Feb 24, 2012 at 4:07 PM, DebBarma, Tarun Kanti
>>>>> <[email-masked]>      wrote:
>>>>>>
>>>>>>
>>>>>> On Fri, Feb 24, 2012 at 3:41 PM, Cousson, Benoit<[email-masked]>
>>>>>>   wrote:
>>>>>>>
>>>>>>>
>>>>>>> + Tarun
>>>>>>>
>>>>>>>
>>>>>>> On 2/24/2012 12:08 AM, Tony Lindgren wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> * Cousson, Benoit<[email-masked]>        [120223 14:14]:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> The GPIO driver is still relying on internal OMAP IRQ defines that
>>>>>>>>> are not relevant anymore if OMAP is built with SPARSE_IRQ.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Great :)
>>>>>>>>
>>>>>>>>> Please note that this patch is still RFC, because I do not know
>>>>>>>>> how to fix properly the ugly cpu_class_is_omap1 and the dependency
>>>>>>>>> with IH_MPUIO_BASE to detect a MPUIO.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Sounds like gpio_to_irq() needs to be set in the
>>>>>>>> arch/arm/*omap*/gpio*.c then.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> In fact, after a second thought, that might even work for OMAP1
>>>>>>> because
>>>>>>> I'm
>>>>>>> using the proper base (IRQ and GPIO) to convert the IRQ number.
>>>>>>>
>>>>>>>
>>>>>>> static int irq_to_gpio(struct gpio_bank *bank, unsigned int gpio_irq)
>>>>>>> {
>>>>>>>
>>>>>>>         return gpio_irq - bank->irq_base + bank->chip.base;
>>>>>>> }
>>>>>>>
>>>>>>> But it might be good to test it on OMAP1 platform.
>>>>>>>
>>>>>>>
>>>>>>> Tarun,
>>>>>>>
>>>>>>> Do you have an OMAP1 board to test that.
>>>>>>
>>>>>>
>>>>>> Yes, I will test on OMAP1 board.
>>>>>
>>>>>
>>>>> I have booted the image on OMAP1 with following change.
>>>>> I guess bank->irq_base was a typo?
>>>>
>>>>
>>>>
>>>> Not at all :-), it was done on purpose to get rid if the static IRQ
>>>> definition.
>>>
>>> BTW, it was giving me following compilation error...
>>> drivers/gpio/gpio-omap.c: In function 'irq_to_gpio':
>>> drivers/gpio/gpio-omap.c:90: error: 'struct gpio_bank' has no member
>>> named 'irq_base'
>>> make[2]: *** [drivers/gpio/gpio-omap.o] Error 1
>>
>>
>> Oh, that's different... you are missing the cleanup patches from the DT
>> series I did before this one:
>>
>> eaabbb0 gpio/omap: Fix IRQ handling for SPARSE_IRQ
>> fa560a7 arm/dts: OMAP3: Add gpio nodes
>> bfeb298 arm/dts: OMAP4: Add gpio nodes
>> 3062158 gpio/omap: Add DT support to GPIO driver
>> a140d12 gpio/omap: Use devm_ API and add request_mem_region
>> 0416689 gpio/omap: Remove bank->id information and misc cleanup
>> 249f60c Merge branch 'for_3.4/gpio_cleanup_fixes_v9' of
>> git://gitorious.org/~tarunkanti/omap-sw-deve
>>
>> I'll push a temp branch for you.
>
> I have pulled from git://gitorious.org/omap-pm/linux.git for_3.4/dt_gpio_dt.
> It is working on OMAP1710.

Hehe, that's cool.

I'll repost the gpio DT series and add that one in it.

Thanks a lot.
Benoit