sdhci: add regulator support
PATCH 53/177 sdhci: add regulator support
From: Marek Szyprowski <[email protected]>
This patch adds support for regulator API to sdhci core driver. Regulators can be used to disable power in suspended state to reduce dissipated energy.
Signed-off-by Marek Szyprowski <[email protected]>
Signed-off-by Kyungmin Park <[email protected]>
Acked-by Mark Brown <[email protected]>
Cc <[email protected]>
Signed-off-by Andrew Morton <[email protected]>
---
drivers/mmc/host/sdhci.c | 26 +++++++++++++++++++++++++- drivers/mmc/host/sdhci.h | 2 ++ 2 files changed, 27 insertions(+), 1 deletion(-)
drivers/mmc/host/sdhci.c renamed from drivers/mmc/host/sdhci.c~sdhci-add-regulator-support +25 -1
@@ -19,6 +19,7 @@#include <linux/dma-mapping.h> #include <linux/slab.h> #include <linux/scatterlist.h> +#include <linux/regulator/consumer.h> #include <linux/leds.h>
@@ -1608,7 +1609,10 @@ int sdhci_suspend_host(struct sdhci_hostfree_irq (host->irq, host); -return 0 ; +if (host->vmmc) + ret =regulator_disable (host->vmmc); + +return ret; }EXPORT_SYMBOL_GPL (sdhci_suspend_host);
@@ -1617,6 +1621,13 @@ int sdhci_resume_host(struct sdhci_host {int ret; +if (host->vmmc) { +int ret =regulator_enable (host->vmmc); +if (ret) +return ret; + } + +if (host->flags & (SDHCI_USE_SDMA |SDHCI_USE_ADMA )) {if (host->ops->enable_dma) host->ops->enable_dma (host);
@@ -1889,6 +1900,14 @@ int sdhci_add_host(struct sdhci_host *hoif (ret) goto untasklet; + host->vmmc =regulator_get (mmc_dev (mmc),"vmmc" ); +if (IS_ERR (host->vmmc)) { +printk (KERN_INFO "%s: no vmmc regulator found\n" ,mmc_hostname (mmc)); + host->vmmc =NULL ; + }else { +regulator_enable (host->vmmc); + } +sdhci_init (host,0 );#ifdef CONFIG_MMC_DEBUG
@@ -1973,6 +1992,11 @@ void sdhci_remove_host(struct sdhci_hosttasklet_kill (&host->card_tasklet);tasklet_kill (&host->finish_tasklet); +if (host->vmmc) { +regulator_disable (host->vmmc); +regulator_put (host->vmmc); + } +kfree (host->adma_desc);kfree (host->align_buffer);
drivers/mmc/host/sdhci.h renamed from drivers/mmc/host/sdhci.h~sdhci-add-regulator-support +2 -0
@@ -249,6 +249,8 @@ struct sdhci_host {const struct sdhci_ops *ops;/* Low level hw interface */ +struct regulator *vmmc;/* Power regulator */ +/* Internal data */ struct mmc_host *mmc;/* MMC structure */ u64 dma_mask;/* custom DMA mask */
_