• Thomas Petazzoni's avatar
    gpio: zynq: properly support runtime PM for GPIO used as interrupts · c2df3de0
    Thomas Petazzoni authored
    The Zynq GPIO driver currently implements runtime PM by:
    
     - Enabling runtime PM support in ->probe() and letting the runtime PM
       reference counter drop to zero at the end of ->probe().
    
     - Increasing the runtime PM reference counter in ->request() and
       decreasing it in ->free().
    
    However, the latter is not sufficient: when a GPIO is used as an
    interrupt, ->request() and ->free() are not called. Due to this, the
    runtime PM counter remains to zero when the only GPIOs in use are used
    as interrupts, causing them to simply not work.
    
    To address this problem, this commit implement the
    ->irq_request_resources() and ->irq_release_resources() hooks,
    ensuring that the runtime PM counter is properly
    incremented/decremented. Since we override the default hooks, we keep
    the existing behavior by making sure they call gpiochip_reqres_irq() /
    gpiochip_relres_irq() respectively.
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@bootlin.com>
    Reviewed-by: default avatarShubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    c2df3de0
gpio-zynq.c 29.3 KB