[PATCH 1/1] ARM: OMAP3: igep0020: set GPIO mode for mux mcspi1_cs2 pin

Javier Martinez Canillas javier at dowhile0.org
Tue Jul 17 03:11:16 EDT 2012


On Tue, Jul 10, 2012 at 9:24 AM, Enric Balletbò i Serra
<eballetbo at gmail.com> wrote:
>
>
> 2012/7/10 Javier Martinez Canillas <javier at dowhile0.org>
>>
>> According to the IGEPv2 Rev.C data-sheet the LAN9221i pin 14 (IRQ) is
>> connected to the OMAP3730 mcspi1_cs2 pin. Since this omap mux pin acts
>> as an IRQ line, it has to be configured as an input GPIO.
>>
>> IGEPv2 platform code sets the smsc911x_cfg->gpio_irq to GPIO 176 but
>> since the mux pin default mode is MODE7 (safe_mode) the driver fails
>> when trying to register the IRQ with the following error message:
>>
>> [    1.994598] smsc911x: Driver version 2008-10-21
>> [    3.704162] irq 272: nobody cared (try booting with the "irqpoll"
>> option)
>> [    3.711364] [<c001a114>] (unwind_backtrace+0x0/0xf0) from [<c009a0d4>]
>> (__report_bad_irq+0x20/0xbc)
>> [    3.720916] [<c009a0d4>] (__report_bad_irq+0x20/0xbc) from [<c009a41c>]
>> (note_interrupt+0x1d8/0x238)
>> [    3.730560] [<c009a41c>] (note_interrupt+0x1d8/0x238) from [<c0098234>]
>> (handle_irq_event_percpu+0xc0/0x260)
>> [    3.740936] [<c0098234>] (handle_irq_event_percpu+0xc0/0x260) from
>> [<c0098410>] (handle_irq_event+0x3c/0x5c)
>> [    3.751312] [<c0098410>] (handle_irq_event+0x3c/0x5c) from [<c009abe0>]
>> (handle_level_irq+0xac/0x10c)
>> [    3.761047] [<c009abe0>] (handle_level_irq+0xac/0x10c) from
>> [<c0097a34>] (generic_handle_irq+0x30/0x48)
>> [    3.770935] [<c0097a34>] (generic_handle_irq+0x30/0x48) from
>> [<c02a6b74>] (gpio_irq_handler+0x180/0x1d4)
>> [    3.780944] [<c02a6b74>] (gpio_irq_handler+0x180/0x1d4) from
>> [<c0097a34>] (generic_handle_irq+0x30/0x48)
>> [    3.790954] [<c0097a34>] (generic_handle_irq+0x30/0x48) from
>> [<c0013e18>] (handle_IRQ+0x4c/0xac)
>> [    3.800231] [<c0013e18>] (handle_IRQ+0x4c/0xac) from [<c000858c>]
>> (omap3_intc_handle_irq+0x60/0x74)
>> [    3.809783] [<c000858c>] (omap3_intc_handle_irq+0x60/0x74) from
>> [<c04979e4>] (__irq_svc+0x44/0x60)
>> [    3.819213] Exception stack(0xee42fde0 to 0xee42fe28)
>> [    3.824554] fde0: 00000001 00000001 00000000 00000000 60000013 c06cce14
>> c06cce14 00000110
>> [    3.833190] fe00: 00000000 c06ccdf4 60000013 ee41d000 fb058064 ee42fe28
>> c0089e08 c04976b4
>> [    3.841796] fe20: 20000013 ffffffff
>> [    3.845489] [<c04979e4>] (__irq_svc+0x44/0x60) from [<c04976b4>]
>> (_raw_spin_unlock_irqrestore+0x34/0x44)
>> [    3.855499] [<c04976b4>] (_raw_spin_unlock_irqrestore+0x34/0x44) from
>> [<c0099744>] (__setup_irq+0x1b8/0x3f0)
>> [    3.865875] [<c0099744>] (__setup_irq+0x1b8/0x3f0) from [<c0099a34>]
>> (request_threaded_irq+0xb8/0x140)
>> [    3.875701] [<c0099a34>] (request_threaded_irq+0xb8/0x140) from
>> [<c0487950>] (smsc911x_drv_probe+0x75c/0x11a4)
>> [    3.886260] [<c0487950>] (smsc911x_drv_probe+0x75c/0x11a4) from
>> [<c02e9bcc>] (platform_drv_probe+0x18/0x1c)
>> [    3.906707] [<c02e89b8>] (driver_probe_device+0x90/0x210) from
>> [<c02e8bcc>] (__driver_attach+0x94/0x98)
>> [    3.916625] [<c02e8bcc>] (__driver_attach+0x94/0x98) from [<c02e7298>]
>> (bus_for_each_dev+0x50/0x7c)
>> [    3.926177] [<c02e7298>] (bus_for_each_dev+0x50/0x7c) from [<c02e81d4>]
>> (bus_add_driver+0x184/0x248)
>> [    3.935821] [<c02e81d4>] (bus_add_driver+0x184/0x248) from [<c02e909c>]
>> (driver_register+0x78/0x12c)
>> [    3.945465] [<c02e909c>] (driver_register+0x78/0x12c) from [<c0008648>]
>> (do_one_initcall+0x34/0x178)
>> [    3.955108] [<c0008648>] (do_one_initcall+0x34/0x178) from [<c066e8f4>]
>> (kernel_init+0xfc/0x1c0)
>> [    3.964385] [<c066e8f4>] (kernel_init+0xfc/0x1c0) from [<c00140b0>]
>> (kernel_thread_exit+0x0/0x8)
>> [    3.973632] handlers:
>> [    3.976043] [<c034e2cc>] smsc911x_irqhandler
>> [    3.980560] Disabling IRQ #272
>>
>> Signed-off-by: Javier Martinez Canillas <javier at dowhile0.org>
>> ---
>>  arch/arm/mach-omap2/board-igep0020.c |    2 ++
>>  1 files changed, 2 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/board-igep0020.c
>> b/arch/arm/mach-omap2/board-igep0020.c
>> index 7491529..2821448 100644
>> --- a/arch/arm/mach-omap2/board-igep0020.c
>> +++ b/arch/arm/mach-omap2/board-igep0020.c
>> @@ -554,6 +554,8 @@ static const struct usbhs_omap_board_data
>> igep3_usbhs_bdata __initconst = {
>>
>>  #ifdef CONFIG_OMAP_MUX
>>  static struct omap_board_mux board_mux[] __initdata = {
>> +       /* SMSC9221 LAN Controller ETH IRQ (GPIO_176) */
>> +       OMAP3_MUX(MCSPI1_CS2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
>>         { .reg_offset = OMAP_MUX_TERMINATOR },
>>  };
>>  #endif
>> --
>> 1.7.7.6
>>
>
> Acked-by: Enric Balletbo i Serra <eballetbo at gmail.com>
> Tested-by: Enric Balletbo i Serra <eballetbo at gmail.com>
>
> Thanks Javier,

Hi Tony,

Just pinging to see if you have further comments on this patch or if
it can be applied. It solves a bug on IGEPv2 boards.

I know the trend is to move away from board code. I'll start working
on an device tree for the IGEPv2 but it will take some time until is
ready (and I'm not sure if all the OMAP3 support is already present on
DT).

So could you please take bug fixes for the board code in the meantime?

Thanks a lot and best regards,
Javier



More information about the linux-arm-kernel mailing list