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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 21/09/2021 14:16, Tony Lindgren wrote:
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@xxxxxxxxxxx>
---
  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

+	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



[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux