Re: [PATCH v2] mmc: sdhci-xenon: Add Xenon SDHCI specific system-level PM support

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

 



Hi Zhoujie,

On 2017/7/12 5:56, Zhoujie Wu wrote:
Add Xenon specific system-level suspend and resume support.
Especially during resume, re-configure Xenon specific registers
since registers setting will be lost in suspend if Xenon is power off.


Still you need a 'From: Hu Ziji <huziji@xxxxxxxxxxx>'  segment ahead to
reflect the authorship by using:

git commit --author="Hu Ziji <huziji@xxxxxxxxxxx>"

And please remove his mail from CC since his mail address
is no longer used. BTW, I submited a patch to fix the warning
for sdhci-xenon and the get_maintainer script still shows me that
he maintains this driver. So would you like to take over the
role to maintain this driver or you just like to orphan it?

Signed-off-by: Hu Ziji <huziji@xxxxxxxxxxx>
Signed-off-by: Zhoujie Wu <zjwu@xxxxxxxxxxx>
Tested-by: Jisheng Zhang <jszhang@xxxxxxxxxxx>
---
Hu Ziji has left marvell, submit the patch for him.
  drivers/mmc/host/sdhci-xenon.c | 42 +++++++++++++++++++++++++++++++++++++++++-
  1 file changed, 41 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/sdhci-xenon.c b/drivers/mmc/host/sdhci-xenon.c
index bc1781b..9f399c4 100644
--- a/drivers/mmc/host/sdhci-xenon.c
+++ b/drivers/mmc/host/sdhci-xenon.c
@@ -519,6 +519,46 @@ static int xenon_remove(struct platform_device *pdev)
  	return 0;
  }
+#ifdef CONFIG_PM_SLEEP
+static int xenon_suspend(struct device *dev)
+{
+	struct sdhci_host *host = dev_get_drvdata(dev);
+	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+	int ret;
+
+	ret = sdhci_suspend_host(host);
+	if (ret)
+		return ret;
+
+	clk_disable_unprepare(pltfm_host->clk);
+	return ret;
+}
+
+static int xenon_resume(struct device *dev)
+{
+	struct sdhci_host *host = dev_get_drvdata(dev);
+	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+	int ret;
+
+	ret = clk_prepare_enable(pltfm_host->clk);
+	if (ret)
+		return ret;
+
+	/*
+	 * If SoCs power off the entire Xenon, registers setting will
+	 * be lost.
+	 * Re-configure Xenon specific register to enable current SDHC
+	 */
+	ret = xenon_sdhc_prepare(host);
+	if (ret)
+		return ret;
+
+	return sdhci_resume_host(host);
+}
+#endif
+
+static SIMPLE_DEV_PM_OPS(xenon_pmops, xenon_suspend, xenon_resume);
+
  static const struct of_device_id sdhci_xenon_dt_ids[] = {
  	{ .compatible = "marvell,armada-ap806-sdhci",},
  	{ .compatible = "marvell,armada-cp110-sdhci",},
@@ -531,7 +571,7 @@ static int xenon_remove(struct platform_device *pdev)
  	.driver	= {
  		.name	= "xenon-sdhci",
  		.of_match_table = sdhci_xenon_dt_ids,
-		.pm = &sdhci_pltfm_pmops,
+		.pm = &xenon_pmops,
  	},
  	.probe	= xenon_probe,
  	.remove	= xenon_remove,


--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux