Thread (10 messages) 10 messages, 3 authors, 2021-09-24

Re: [PATCH 5/5] mmc: sdhci-omap: Configure optional wakeirq

From: Grygorii Strashko <grygorii.strashko@ti.com>
Date: 2021-09-22 15:23:21
Also in: linux-mmc, linux-omap


On 21/09/2021 14:16, Tony Lindgren wrote:
quoted hunk ↗ jump to hunk
Configure optional wakeirq. This may be optionally configured for SDIO
dat1 pin for wake-up events for SoCs that support deeper idle states.

Signed-off-by: Tony Lindgren <tony@atomide.com>
---
  drivers/mmc/host/sdhci-omap.c | 19 +++++++++++++++++++
  1 file changed, 19 insertions(+)
diff --git a/drivers/mmc/host/sdhci-omap.c b/drivers/mmc/host/sdhci-omap.c
--- a/drivers/mmc/host/sdhci-omap.c
+++ b/drivers/mmc/host/sdhci-omap.c
@@ -12,8 +12,10 @@
  #include <linux/module.h>
  #include <linux/of.h>
  #include <linux/of_device.h>
+#include <linux/of_irq.h>
  #include <linux/platform_device.h>
  #include <linux/pm_runtime.h>
+#include <linux/pm_wakeirq.h>
  #include <linux/regulator/consumer.h>
  #include <linux/pinctrl/consumer.h>
  #include <linux/sys_soc.h>
@@ -117,6 +119,7 @@ struct sdhci_omap_host {
  
  	struct pinctrl		*pinctrl;
  	struct pinctrl_state	**pinctrl_state;
+	int			wakeirq;
  	unsigned long		context_valid:1;
  	unsigned long		is_runtime_suspended:1;
  	unsigned long		needs_resume:1;
@@ -1360,6 +1363,21 @@ static int sdhci_omap_probe(struct platform_device *pdev)
  	sdhci_omap_context_save(omap_host);
  	omap_host->context_valid = 1;
  
+	of_irq_get_byname(dev->of_node, "wakeup");
No assign to omap_host->wakeirq
quoted hunk ↗ jump to hunk
+	if (omap_host->wakeirq == -EPROBE_DEFER) {
+		ret = -EPROBE_DEFER;
+		goto err_cleanup_host;
+	}
+	if (omap_host->wakeirq > 0) {
+		device_init_wakeup(dev, true);
+		ret = dev_pm_set_dedicated_wake_irq(dev, omap_host->wakeirq);
+		if (ret) {
+			device_init_wakeup(dev, false);
+			goto err_cleanup_host;
+		}
+		host->mmc->pm_caps |= MMC_PM_WAKE_SDIO_IRQ;
+	}
+
  	pm_runtime_put_sync(dev);
  
  	return 0;
@@ -1385,6 +1403,7 @@ static int sdhci_omap_remove(struct platform_device *pdev)
  
  	pm_runtime_get_sync(dev);
  	sdhci_remove_host(host, true);
+	dev_pm_clear_wake_irq(dev);
  	pm_runtime_put_sync(dev);
  	pm_runtime_disable(dev);
  	sdhci_pltfm_free(pdev);
-- 
Best regards,
grygorii
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help