• Thomas Gleixner's avatar
    genirq: Handle NOAUTOEN interrupt setup proper · 201d7f47
    Thomas Gleixner authored
    If an interrupt is marked NOAUTOEN then request_irq() installs the action,
    but does not enable the interrupt via startup_irq().  The interrupt is
    enabled via enable_irq() later from the driver. enable_irq() calls
    irq_enable().
    
    That means that for interrupts which have a irq_startup() callback this
    callback is never invoked. Neither is irq_domain_activate_irq() invoked for
    such interrupts.
    
    If an interrupt depends on irq_startup() or irq_domain_activate_irq() then
    the enable via irq_enable() is not enough.
    
    Add a status flag IRQD_IRQ_STARTED_UP and use this to select the proper
    mechanism in enable_irq(). Use the flag also to avoid pointless calls into
    the low level functions.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Acked-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Cc: dianders@chromium.org
    Cc: jeffy <jeffy.chen@rock-chips.com>
    Cc: Brian Norris <briannorris@chromium.org>
    Cc: tfiga@chromium.org
    Link: http://lkml.kernel.org/r/20170531100212.130986205@linutronix.de
    201d7f47
chip.c 30.9 KB