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