• Doug Anderson's avatar
    pinctrl: rockchip: Fix enable/disable/mask/unmask · f2dd028c
    Doug Anderson authored
    The Rockchip pinctrl driver was only implementing the "mask" and
    "unmask" operations though the hardware actually has two distinct
    things: enable/disable and mask/unmask.  It was implementing the
    "mask" operations as a hardware enable/disable and always leaving all
    interrupts unmasked.
    
    I believe that the old system had some downsides, specifically:
    - (Untested) if an interrupt went off while interrupts were "masked"
      it would be lost.  Now it will be kept track of.
    - If someone wanted to change an interrupt back into a GPIO (is such a
      thing sensible?) by calling irq_disable() it wouldn't actually take
      effect.  That's because Linux does some extra optimizations when
      there's no true "disable" function: it does a lazy mask.
    
    Let's actually implement enable/disable/mask/unmask properly.
    Signed-off-by: default avatarDoug Anderson <dianders@chromium.org>
    Reviewed-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
    Reviewed-by: default avatarHeiko Stuebner <heiko@sntech.de>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    f2dd028c
pinctrl-rockchip.c 53.1 KB