• Lee Jones's avatar
    pinctrl/abx500: move IRQ handling to ab8500-core · ac652d79
    Lee Jones authored
    In its current state the gpio-ab8500 driver looks after some GPIO
    lines found on the AB8500 MFD chip. It also controls all of its
    own IRQ handling for these GPIOs by inventing some virtual IRQs
    and handing those out to sub-devices. There has been quite a bit
    of controversy over this and it was a contributing factor to the
    driver being marked as BROKEN in Mainline.
    
    The reason for adopting this method was due to added complexity
    in the hardware. Unusually, each GPIO has two separate IRQs
    associated with it, one for a rising and a different one for a
    falling interrupt. Using this method complicates matters further
    because the GPIO IRQs are actually sandwiched between a bunch
    of IRQs which are handled solely by the AB8500 core driver.
    
    The best way for us to take this forward is to get rid of the
    virtual IRQs and only hand out the rising IRQ lines. If a
    sub-driver wishes to request a falling interrupt, they can do
    so by requesting a rising line in the normal way. They just
    have to add IRQ_TYPE_EDGE_FALLING or IRQ_TYPE_EDGE_BOTH, if
    they require both in the flags. Then if a falling IRQ is
    triggered, the AB8500 core driver will know how to handle the
    added complexity accordingly. This should greatly simply things.
    Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
    [Augment to keep irq_base for a while (removed later)]
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    ac652d79
pinctrl-abx500.c 25.9 KB