• Ido Yariv's avatar
    wl12xx: Switch to level trigger interrupts · 2da69b89
    Ido Yariv authored
    The interrupt of the wl12xx is a level interrupt in nature, since the
    interrupt line is not auto-reset. However, since resetting the interrupt
    requires bus transactions, this cannot be done from an interrupt
    context. Thus, requesting a level interrupt would require to disable the
    irq and re-enable it after the HW is acknowledged. Since we now request
    a threaded irq, this can also be done by specifying the IRQF_ONESHOT
    flag.
    
    Triggering on an edge can be problematic in some platforms, if the
    sampling frequency is not sufficient for detecting very frequent
    interrupts. In case an interrupt is missed, the driver will hang as the
    interrupt line will stay high until it is acknowledged by the driver,
    which will never happen.
    
    Fix this by requesting a level triggered interrupt, with the
    IRQF_ONESHOT flag.
    Signed-off-by: default avatarIdo Yariv <ido@wizery.com>
    Reviewed-by: default avatarLuciano Coelho <coelho@ti.com>
    Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
    2da69b89
sdio.c 7.72 KB