diff mbox

[v3,11/11] mmc: sdhci-pxav3: add signal_voltage_switch function

Message ID 1348569546-13242-12-git-send-email-keyuan.liu@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Kevin Liu Sept. 25, 2012, 10:39 a.m. UTC
From: Kevin Liu <kliu5@marvell.com>

Signed-off-by: Bin Wang <binw@marvell.com>
Signed-off-by: Philip Rakity <prakity@marvell.com>
Signed-off-by: Kevin Liu <kliu5@marvell.com>
---
 drivers/mmc/host/sdhci-pxav3.c          |   25 +++++++++++++++++++++++++
 include/linux/platform_data/pxa_sdhci.h |    2 ++
 2 files changed, 27 insertions(+), 0 deletions(-)
diff mbox

Patch

diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c
index 04db9f1..2746bb5 100644
--- a/drivers/mmc/host/sdhci-pxav3.c
+++ b/drivers/mmc/host/sdhci-pxav3.c
@@ -163,10 +163,35 @@  static int pxav3_set_uhs_signaling(struct sdhci_host *host, unsigned int uhs)
 	return 0;
 }
 
+static void pxav3_signal_voltage_switch(struct sdhci_host *host, u8 vol)
+{
+	struct platform_device *pdev = to_platform_device(mmc_dev(host->mmc));
+	struct sdhci_pxa_platdata *pdata = pdev->dev.platform_data;
+	unsigned int set;
+
+	switch (vol) {
+	case MMC_SIGNAL_VOLTAGE_330:
+		set = 3300000;
+		break;
+	case MMC_SIGNAL_VOLTAGE_180:
+		set = 1800000;
+		break;
+	case MMC_SIGNAL_VOLTAGE_120:
+		set = 1200000;
+		break;
+	default:
+		set = 3300000;
+		break;
+	}
+	if (pdata && pdata->signal_voltage_switch)
+		pdata->signal_voltage_switch(set);
+}
+
 static struct sdhci_ops pxav3_sdhci_ops = {
 	.platform_reset_exit = pxav3_set_private_registers,
 	.set_uhs_signaling = pxav3_set_uhs_signaling,
 	.platform_send_init_74_clocks = pxav3_gen_init_74_clocks,
+	.signal_voltage_switch = pxav3_signal_voltage_switch,
 };
 
 #ifdef CONFIG_OF
diff --git a/include/linux/platform_data/pxa_sdhci.h b/include/linux/platform_data/pxa_sdhci.h
index fdf38d6..3b94ab1 100644
--- a/include/linux/platform_data/pxa_sdhci.h
+++ b/include/linux/platform_data/pxa_sdhci.h
@@ -40,6 +40,7 @@ 
  * @quirks: quirks of platfrom
  * @quirks2: quirks2 of platfrom
  * @pm_caps: pm_caps of platfrom
+ * @signal_voltage_switch: soc/platfrom handling needed for voltage switch
  */
 struct sdhci_pxa_platdata {
 	unsigned int	flags;
@@ -54,6 +55,7 @@  struct sdhci_pxa_platdata {
 	unsigned int	quirks;
 	unsigned int	quirks2;
 	unsigned int	pm_caps;
+	void    (*signal_voltage_switch)(unsigned int set);
 };
 
 struct sdhci_pxa {