diff mbox

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

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

Commit Message

Kevin Liu Sept. 26, 2012, 11:38 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(-)

Comments

Zhangfei Gao Sept. 27, 2012, 7:17 a.m. UTC | #1
> +       if (pdata && pdata->signal_voltage_switch)
> +               pdata->signal_voltage_switch(set);
> +}
> +

>  #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);
>  };
>

Using callback from pdata is in-acceptable.
DT can not doing such way.

/Zhangfei
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
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 {