mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-03 11:13:56 +08:00
Late GPIO fix:
- Fix a runtime PM suspend/resume bug in the RCAR driver -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJW2EMyAAoJEEEQszewGV1zyccQAITkJRDI4loy9EJLuOZqbYBG zmKuLJeempbH3o5dtBIcEia7UI+c0jrVrFehfUTPfPAduuHx6Thg6awuOwnoeBBY K6cVispZfXL6ZpeQW7I7ykcxSW3tSzLRMaNuzG75Uq7hkFuaRXJsi0K0TfB1B8Yn A3qwrldlxP5y/rHff7Xz7sCfuwjaf60MYFEjQr0/pa9uVhgpXmEDWGWuT9WzoqTG InX4D6YIrAYbG1RKIbZnc8e2BdwJsCD70ldKIPlHUtORu/iyfObcadl0AT6xD3uB mHq9cooHwq+cMsH44DqF2i7KwzQjh2goujCO3eXW2E1CzYTjO9gRxXb3KoTgbkxn BEj08+tByBMwuiiwqqcACiAMQk5MlWzM8qQwQehxo6bnYmxzS9N+NJOq7btnxwmC yHIjyjYs1IWb0gwlSehkKFT6JLiP4pbCBt34dcJbfSUwpHAwzQzzsYymNHDkwQzJ pqGIU9JX/dWc1uvp6tLSmXuOh8YQvzj7sowSNkIiW9aX1OQpH+7xCE3b7vKZRZgt jibAfDKCPq/5bLEKbvGZggkTz6AqW56utaovTLnN7FiMbMEnATBXKP3MRrltDBj/ +rll1hDbPYc8wL6qvGEI5V5wcCGxr6vL8GBloQbjxQfywN0F/+wcnJKl9cWE5xOf KCH97QpF+N9ZsuDPJIPZ =5Ovl -----END PGP SIGNATURE----- Merge tag 'gpio-v4.5-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio Pull late GPIO fix from Linus Walleij: "Regressions never arrive when you want them to, so here is a late fix for the Renesas RCAR GPIO driver. It only affects that driver on the very specific Renesas platforms: - Fix a runtime PM suspend/resume bug in the RCAR driver" * tag 'gpio-v4.5-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: gpio: rcar: Add Runtime PM handling for interrupts
This commit is contained in:
commit
4237b2e6c6
@ -196,6 +196,44 @@ static int gpio_rcar_irq_set_wake(struct irq_data *d, unsigned int on)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void gpio_rcar_irq_bus_lock(struct irq_data *d)
|
||||||
|
{
|
||||||
|
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
|
||||||
|
struct gpio_rcar_priv *p = gpiochip_get_data(gc);
|
||||||
|
|
||||||
|
pm_runtime_get_sync(&p->pdev->dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gpio_rcar_irq_bus_sync_unlock(struct irq_data *d)
|
||||||
|
{
|
||||||
|
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
|
||||||
|
struct gpio_rcar_priv *p = gpiochip_get_data(gc);
|
||||||
|
|
||||||
|
pm_runtime_put(&p->pdev->dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int gpio_rcar_irq_request_resources(struct irq_data *d)
|
||||||
|
{
|
||||||
|
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
|
||||||
|
struct gpio_rcar_priv *p = gpiochip_get_data(gc);
|
||||||
|
int error;
|
||||||
|
|
||||||
|
error = pm_runtime_get_sync(&p->pdev->dev);
|
||||||
|
if (error < 0)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gpio_rcar_irq_release_resources(struct irq_data *d)
|
||||||
|
{
|
||||||
|
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
|
||||||
|
struct gpio_rcar_priv *p = gpiochip_get_data(gc);
|
||||||
|
|
||||||
|
pm_runtime_put(&p->pdev->dev);
|
||||||
|
}
|
||||||
|
|
||||||
static irqreturn_t gpio_rcar_irq_handler(int irq, void *dev_id)
|
static irqreturn_t gpio_rcar_irq_handler(int irq, void *dev_id)
|
||||||
{
|
{
|
||||||
struct gpio_rcar_priv *p = dev_id;
|
struct gpio_rcar_priv *p = dev_id;
|
||||||
@ -450,6 +488,10 @@ static int gpio_rcar_probe(struct platform_device *pdev)
|
|||||||
irq_chip->irq_unmask = gpio_rcar_irq_enable;
|
irq_chip->irq_unmask = gpio_rcar_irq_enable;
|
||||||
irq_chip->irq_set_type = gpio_rcar_irq_set_type;
|
irq_chip->irq_set_type = gpio_rcar_irq_set_type;
|
||||||
irq_chip->irq_set_wake = gpio_rcar_irq_set_wake;
|
irq_chip->irq_set_wake = gpio_rcar_irq_set_wake;
|
||||||
|
irq_chip->irq_bus_lock = gpio_rcar_irq_bus_lock;
|
||||||
|
irq_chip->irq_bus_sync_unlock = gpio_rcar_irq_bus_sync_unlock;
|
||||||
|
irq_chip->irq_request_resources = gpio_rcar_irq_request_resources;
|
||||||
|
irq_chip->irq_release_resources = gpio_rcar_irq_release_resources;
|
||||||
irq_chip->flags = IRQCHIP_SET_TYPE_MASKED | IRQCHIP_MASK_ON_SUSPEND;
|
irq_chip->flags = IRQCHIP_SET_TYPE_MASKED | IRQCHIP_MASK_ON_SUSPEND;
|
||||||
|
|
||||||
ret = gpiochip_add_data(gpio_chip, p);
|
ret = gpiochip_add_data(gpio_chip, p);
|
||||||
|
Loading…
Reference in New Issue
Block a user