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

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

 



From: Kevin Liu <kliu5@xxxxxxxxxxx>

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

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 {
-- 
1.7.0.4

--
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