Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1220079

[PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according to bus clock

From Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Newsgroups linux.kernel
Subject [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according to bus clock
Date 2015-09-07 13:30 +0200
Message-ID <q62Mz-47x-39@gated-at.bofh.it> (permalink)
References <q62Mx-47x-7@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Different bus clock may need different pin setting.
For example, fast bus clock like 208Mhz need pin drive fast
while slow bus clock prefer pin drive slow to guarantee
signal quality.

So this patch creates two states,
  - Default (slow/normal) pin state
  - And fast pin state for higher freq bus speed.

And selection of pin state is done based on timing mode.

Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Kevin Liu <kliu5@marvell.com>
---
 drivers/mmc/host/sdhci-pxav3.c | 45 +++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c
index c2b2b78..d933f75 100644
--- a/drivers/mmc/host/sdhci-pxav3.c
+++ b/drivers/mmc/host/sdhci-pxav3.c
@@ -35,6 +35,7 @@
 #include <linux/pm.h>
 #include <linux/pm_runtime.h>
 #include <linux/mbus.h>
+#include <linux/pinctrl/consumer.h>
 
 #include "sdhci.h"
 #include "sdhci-pltfm.h"
@@ -92,6 +93,10 @@ struct sdhci_pxa {
 	void __iomem *io_pwr_reg;
 	void __iomem *io_pwr_lock_reg;
 	struct sdhci_pxa_data *data;
+
+	struct pinctrl *pinctrl;
+	struct pinctrl_state *pins_default;
+	struct pinctrl_state *pins_fast;
 };
 
 static struct sdhci_pxa_data pxav3_data_v1 = {
@@ -298,6 +303,33 @@ static void pxav3_gen_init_74_clocks(struct sdhci_host *host, u8 power_mode)
 	pxa->power_mode = power_mode;
 }
 
+static int pxav3_select_pinstate(struct sdhci_host *host, unsigned int uhs)
+{
+	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+	struct sdhci_pxa *pxa = pltfm_host->priv;
+	struct pinctrl_state *pinctrl;
+
+	if (IS_ERR(pxa->pinctrl) ||
+		IS_ERR(pxa->pins_default) ||
+		IS_ERR(pxa->pins_fast))
+		return -EINVAL;
+
+	switch (uhs) {
+	case MMC_TIMING_UHS_SDR50:
+	case MMC_TIMING_UHS_SDR104:
+	case MMC_TIMING_MMC_HS200:
+	case MMC_TIMING_MMC_HS400:
+		pinctrl = pxa->pins_fast;
+		break;
+	default:
+		/* back to default state for other legacy timing */
+		pinctrl = pxa->pins_default;
+		break;
+	}
+
+	return pinctrl_select_state(pxa->pinctrl, pinctrl);
+}
+
 static void pxav3_set_uhs_signaling(struct sdhci_host *host, unsigned int uhs)
 {
 	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
@@ -353,6 +385,8 @@ static void pxav3_set_uhs_signaling(struct sdhci_host *host, unsigned int uhs)
 	dev_dbg(mmc_dev(host->mmc),
 		"%s uhs = %d, ctrl_2 = %04X\n",
 		__func__, uhs, ctrl_2);
+
+	pxav3_select_pinstate(host, uhs);
 }
 
 static void pxav3_voltage_switch(struct sdhci_host *host,
@@ -416,7 +450,6 @@ static void pxav3_set_clock(struct sdhci_host *host, unsigned int clock)
 		/* TX internal clock selection */
 		pxav3_set_tx_clock(host);
 	}
-
 }
 
 static const struct sdhci_ops pxav3_sdhci_ops = {
@@ -586,6 +619,16 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
 		}
 	}
 
+	pxa->pinctrl = devm_pinctrl_get(dev);
+	if (!IS_ERR(pxa->pinctrl)) {
+		pxa->pins_default = pinctrl_lookup_state(pxa->pinctrl, "default");
+		if (IS_ERR(pxa->pins_default))
+			dev_err(dev, "could not get default pinstate\n");
+		pxa->pins_fast = pinctrl_lookup_state(pxa->pinctrl, "fast");
+		if (IS_ERR(pxa->pins_fast))
+			dev_info(dev, "could not get fast pinstate\n");
+	}
+
 	pm_runtime_get_noresume(&pdev->dev);
 	pm_runtime_set_active(&pdev->dev);
 	pm_runtime_set_autosuspend_delay(&pdev->dev, PXAV3_RPM_DELAY_MS);
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH-v2 0/7] mmc: sdhci-pxav3: Enable support for PXA1928 SDCHI controller Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2015-09-07 13:30 +0200
  [PATCH-v2 6/7] mmc: sdhci: add new quirk for setting BUS_POWER & BUS_VLT fields Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2015-09-07 13:30 +0200
  [PATCH-v2 7/7] mmc: sdhci: enable SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON for pxa1928 Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2015-09-07 13:30 +0200
  [PATCH-v2 1/7] mmc: sdhci-pxav3: Enable pxa1928 device support Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2015-09-07 13:30 +0200
  [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according to bus clock Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2015-09-07 13:30 +0200
    Re: [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according  to bus clock Jisheng Zhang <jszhang@marvell.com> - 2015-09-08 09:00 +0200
      Re: [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according to  bus clock Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2015-09-08 12:00 +0200
    Re: [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according  to bus clock Jisheng Zhang <jszhang@marvell.com> - 2015-09-08 09:00 +0200
      Re: [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according to  bus clock Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2015-09-08 11:40 +0200
        Re: [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according  to bus clock Jisheng Zhang <jszhang@marvell.com> - 2015-09-08 12:00 +0200
          Re: [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according  to bus clock Jisheng Zhang <jszhang@marvell.com> - 2015-09-08 12:10 +0200
            Re: [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according to  bus clock Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2015-09-08 14:20 +0200
          Re: [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according to  bus clock Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2015-09-08 12:10 +0200
    Re: [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according to  bus clock Linus Walleij <linus.walleij@linaro.org> - 2015-09-08 16:50 +0200
      Re: [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according to  bus clock Vaibhav Hiremath <vaibhav.hiremath@linaro.org> - 2015-09-08 17:10 +0200
        Re: [PATCH-v2 4/7] mmc: sdhci-pxav3: Add pinctl setting according to  bus clock Linus Walleij <linus.walleij@linaro.org> - 2015-09-09 10:50 +0200

csiph-web