Commit 26ebdbf8 authored by Shubhrajyoti Datta's avatar Shubhrajyoti Datta Committed by Bartosz Golaszewski

gpio: zynq: Disable the irq if it is not a wakeup source

If gpio is not set to wake disable the interrupt. ATF set all slaves with
enabled interrupts as wakeup sources and if gpio is used in r5 then it
wakes up linux.
Signed-off-by: default avatarShubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
Signed-off-by: default avatarMichal Simek <michal.simek@xilinx.com>
Signed-off-by: default avatarBartosz Golaszewski <bgolaszewski@baylibre.com>
parent 67500244
...@@ -735,6 +735,9 @@ static int __maybe_unused zynq_gpio_suspend(struct device *dev) ...@@ -735,6 +735,9 @@ static int __maybe_unused zynq_gpio_suspend(struct device *dev)
struct zynq_gpio *gpio = dev_get_drvdata(dev); struct zynq_gpio *gpio = dev_get_drvdata(dev);
struct irq_data *data = irq_get_irq_data(gpio->irq); struct irq_data *data = irq_get_irq_data(gpio->irq);
if (!device_may_wakeup(dev))
disable_irq(gpio->irq);
if (!irqd_is_wakeup_set(data)) { if (!irqd_is_wakeup_set(data)) {
zynq_gpio_save_context(gpio); zynq_gpio_save_context(gpio);
return pm_runtime_force_suspend(dev); return pm_runtime_force_suspend(dev);
...@@ -749,6 +752,9 @@ static int __maybe_unused zynq_gpio_resume(struct device *dev) ...@@ -749,6 +752,9 @@ static int __maybe_unused zynq_gpio_resume(struct device *dev)
struct irq_data *data = irq_get_irq_data(gpio->irq); struct irq_data *data = irq_get_irq_data(gpio->irq);
int ret; int ret;
if (!device_may_wakeup(dev))
enable_irq(gpio->irq);
if (!irqd_is_wakeup_set(data)) { if (!irqd_is_wakeup_set(data)) {
ret = pm_runtime_force_resume(dev); ret = pm_runtime_force_resume(dev);
zynq_gpio_restore_context(gpio); zynq_gpio_restore_context(gpio);
...@@ -956,6 +962,8 @@ static int zynq_gpio_probe(struct platform_device *pdev) ...@@ -956,6 +962,8 @@ static int zynq_gpio_probe(struct platform_device *pdev)
goto err_pm_put; goto err_pm_put;
} }
irq_set_status_flags(gpio->irq, IRQ_DISABLE_UNLAZY);
device_init_wakeup(&pdev->dev, 1);
pm_runtime_put(&pdev->dev); pm_runtime_put(&pdev->dev);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment