• Linus Walleij's avatar
    drivers: platform: parse IRQ flags from resources · 7085a740
    Linus Walleij authored
    This fixes a regression from the net subsystem:
    After commit d52fdbb7
    "smc91x: retrieve IRQ and trigger flags in a modern way"
    a regression would appear on some legacy platforms such
    as the ARM PXA Zylonite that specify IRQ resources like
    this:
    
    static struct resource r = {
           .start  = X,
           .end    = X,
           .flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
    };
    
    The previous code would retrieve the resource and parse
    the high edge setting in the SMC91x driver, a use pattern
    that means every driver specifying an IRQ flag from a
    static resource need to parse resource flags and apply
    them at runtime.
    
    As we switched the code to use IRQ descriptors to retrieve
    the the trigger type like this:
    
      irqd_get_trigger_type(irq_get_irq_data(...));
    
    the code would work for new platforms using e.g. device
    tree as the backing irq descriptor would have its flags
    properly set, whereas this kind of oldstyle static
    resources at no point assign the trigger flags to the
    corresponding IRQ descriptor.
    
    To make the behaviour identical on modern device tree
    and legacy static platform data platforms, modify
    platform_get_irq() to assign the trigger flags to the
    irq descriptor when a client looks up an IRQ from static
    resources.
    
    Fixes: d52fdbb7 ("smc91x: retrieve IRQ and trigger flags in a modern way")
    Tested-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    7085a740
platform.c 32.9 KB