On 09/20/2017 02:14 AM, Michal Simek wrote: > From: Borsodi Petr <Petr.Borsodi@xxxx> > > There is a problem with GPIO driver when used as IRQ controller. > It is not working because the module is sleeping (clock is disabled). > The patch enables clocks when IP is used as IRQ controller. I think, it should be solved already in genirq core. commit be45beb "genirq: Add runtime power management support for IRQ chips" > > Signed-off-by: Borsodi Petr <Petr.Borsodi@xxxx> > Signed-off-by: Michal Simek <michal.simek@xxxxxxxxxx> > --- > > Based on discussion with Linus here https://lkml.org/lkml/2017/8/22/400 > --- > drivers/gpio/gpiolib.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > index eb80dac4e26a..17258ad1fadb 100644 > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -1676,14 +1676,22 @@ static void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq) > static int gpiochip_irq_reqres(struct irq_data *d) > { > struct gpio_chip *chip = irq_data_get_irq_chip_data(d); > + int ret; > > if (!try_module_get(chip->gpiodev->owner)) > return -ENODEV; > > + ret = pm_runtime_get_sync(chip->parent); > + if (ret < 0) { > + module_put(chip->gpiodev->owner); > + return ret; > + } > + > if (gpiochip_lock_as_irq(chip, d->hwirq)) { > chip_err(chip, > "unable to lock HW IRQ %lu for IRQ\n", > d->hwirq); > + pm_runtime_put(chip->parent); > module_put(chip->gpiodev->owner); > return -EINVAL; > } > @@ -1695,6 +1703,7 @@ static void gpiochip_irq_relres(struct irq_data *d) > struct gpio_chip *chip = irq_data_get_irq_chip_data(d); > > gpiochip_unlock_as_irq(chip, d->hwirq); > + pm_runtime_put(chip->parent); > module_put(chip->gpiodev->owner); > } > > -- regards, -grygorii -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html