* [PATCH 0/3] mmc: usdhi6rol0: UHS support @ 2016-04-18 9:38 Lars Persson 2016-04-18 9:38 ` [PATCH 1/3] mmc: dt: usdhi6rol0: add optional pinctrl binding Lars Persson ` (2 more replies) 0 siblings, 3 replies; 5+ messages in thread From: Lars Persson @ 2016-04-18 9:38 UTC (permalink / raw) To: linux-mmc, devicetree Cc: g.liakhovetski, ulf.hansson, robh+dt, pawel.moll, mark.rutland, ijc+devicetree, galak, Lars Persson This patch set adds UHS support to the usdhi6rol0 driver, with control of the regulator and pin state settings. Guennadi Liakhovetski (1): mmc: usdhi6rol0: add support for UHS modes Lars Persson (2): mmc: dt: usdhi6rol0: add optional pinctrl binding mmc: usdhi6rol0: add pinctrl to set pin drive strength .../devicetree/bindings/mmc/usdhi6rol0.txt | 4 ++ drivers/mmc/host/usdhi6rol0.c | 70 ++++++++++++++++++++++ 2 files changed, 74 insertions(+) -- 2.1.4 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] mmc: dt: usdhi6rol0: add optional pinctrl binding 2016-04-18 9:38 [PATCH 0/3] mmc: usdhi6rol0: UHS support Lars Persson @ 2016-04-18 9:38 ` Lars Persson [not found] ` <cover.1460971625.git.larper-VrBV9hrLPhE@public.gmane.org> 2016-04-18 9:38 ` [PATCH 3/3] mmc: usdhi6rol0: add pinctrl to set pin drive strength Lars Persson 2 siblings, 0 replies; 5+ messages in thread From: Lars Persson @ 2016-04-18 9:38 UTC (permalink / raw) To: linux-mmc, devicetree Cc: g.liakhovetski, ulf.hansson, robh+dt, pawel.moll, mark.rutland, ijc+devicetree, galak, Lars Persson Add a pinctrl binding to specify different pin settings for high speed modes and UHS modes. Signed-off-by: Lars Persson <larper@axis.com> --- Documentation/devicetree/bindings/mmc/usdhi6rol0.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt b/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt index 8babdaa..9dd9478 100644 --- a/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt +++ b/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt @@ -12,6 +12,10 @@ Optional properties: - vmmc-supply: a phandle of a regulator, supplying Vcc to the card - vqmmc-supply: a phandle of a regulator, supplying VccQ to the card +- pinctrl-names: Must contain a "default" entry and optionally a "pins_uhs" + entry for the UHS pin configuration. +- pinctrl-N: One property for each name listed in pinctrl-names, see + ../pinctrl/pinctrl-bindings.txt. Additionally any standard mmc bindings from mmc.txt can be used. -- 2.1.4 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <cover.1460971625.git.larper-VrBV9hrLPhE@public.gmane.org>]
* [PATCH 2/3] mmc: usdhi6rol0: add support for UHS modes [not found] ` <cover.1460971625.git.larper-VrBV9hrLPhE@public.gmane.org> @ 2016-04-18 9:38 ` Lars Persson 2016-04-18 11:18 ` Ulf Hansson 0 siblings, 1 reply; 5+ messages in thread From: Lars Persson @ 2016-04-18 9:38 UTC (permalink / raw) To: linux-mmc-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA Cc: g.liakhovetski-Mmb7MZpHnFY, ulf.hansson-QSEj5FYQhm4dnm+yROfE0A, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, pawel.moll-5wv7dgnIgG8, mark.rutland-5wv7dgnIgG8, ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg, galak-sgV2jX0FEOL9JmXXK+q4OQ, Phil Edworthy, Lars Persson From: Guennadi Liakhovetski <g.liakhovetski-Mmb7MZpHnFY@public.gmane.org> The mmc core will only enable UHS modes if the host supports the .start_signal_voltage_switch() operation. Add this method to the v08r07 driver even if there's actually nothing to do in it. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski-Mmb7MZpHnFY@public.gmane.org> Signed-off-by: Phil Edworthy <phil-r1wpeF5ryA4gsBAKwltoeQ@public.gmane.org> Signed-off-by: Lars Persson <larper-VrBV9hrLPhE@public.gmane.org> --- drivers/mmc/host/usdhi6rol0.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/mmc/host/usdhi6rol0.c b/drivers/mmc/host/usdhi6rol0.c index 807c06e..5dde31b 100644 --- a/drivers/mmc/host/usdhi6rol0.c +++ b/drivers/mmc/host/usdhi6rol0.c @@ -23,6 +23,7 @@ #include <linux/module.h> #include <linux/pagemap.h> #include <linux/platform_device.h> +#include <linux/regulator/consumer.h> #include <linux/scatterlist.h> #include <linux/string.h> #include <linux/time.h> @@ -1147,12 +1148,43 @@ static void usdhi6_enable_sdio_irq(struct mmc_host *mmc, int enable) } } +static int usdhi6_sig_volt_switch(struct mmc_host *mmc, struct mmc_ios *ios) +{ + int ret; + + if (IS_ERR(mmc->supply.vqmmc)) + return 0; + + switch (ios->signal_voltage) { + case MMC_SIGNAL_VOLTAGE_330: + ret = regulator_set_voltage(mmc->supply.vqmmc, + 2700000, 3600000); + break; + case MMC_SIGNAL_VOLTAGE_180: + ret = regulator_set_voltage(mmc->supply.vqmmc, + 1700000, 1950000); + break; + case MMC_SIGNAL_VOLTAGE_120: + ret = regulator_set_voltage(mmc->supply.vqmmc, + 1100000, 1300000); + break; + default: + return 0; + } + + if (ret < 0) + dev_warn(mmc_dev(mmc), "Voltage switch failed: %d\n", ret); + + return ret; +} + static struct mmc_host_ops usdhi6_ops = { .request = usdhi6_request, .set_ios = usdhi6_set_ios, .get_cd = usdhi6_get_cd, .get_ro = usdhi6_get_ro, .enable_sdio_irq = usdhi6_enable_sdio_irq, + .start_signal_voltage_switch = usdhi6_sig_volt_switch, }; /* State machine handlers */ -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/3] mmc: usdhi6rol0: add support for UHS modes 2016-04-18 9:38 ` [PATCH 2/3] mmc: usdhi6rol0: add support for UHS modes Lars Persson @ 2016-04-18 11:18 ` Ulf Hansson 0 siblings, 0 replies; 5+ messages in thread From: Ulf Hansson @ 2016-04-18 11:18 UTC (permalink / raw) To: Lars Persson Cc: linux-mmc, devicetree@vger.kernel.org, Guennadi Liakhovetski, Rob Herring, Paweł Moll, Mark Rutland, Ian Campbell, Kumar Gala, Phil Edworthy, Lars Persson On 18 April 2016 at 11:38, Lars Persson <lars.persson@axis.com> wrote: > From: Guennadi Liakhovetski <g.liakhovetski@gmx.de> > > The mmc core will only enable UHS modes if the host supports the > .start_signal_voltage_switch() operation. Add this method to the v08r07 > driver even if there's actually nothing to do in it. > > Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> > Signed-off-by: Phil Edworthy <phil@edworthys.org> > Signed-off-by: Lars Persson <larper@axis.com> > --- > drivers/mmc/host/usdhi6rol0.c | 32 ++++++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/drivers/mmc/host/usdhi6rol0.c b/drivers/mmc/host/usdhi6rol0.c > index 807c06e..5dde31b 100644 > --- a/drivers/mmc/host/usdhi6rol0.c > +++ b/drivers/mmc/host/usdhi6rol0.c > @@ -23,6 +23,7 @@ > #include <linux/module.h> > #include <linux/pagemap.h> > #include <linux/platform_device.h> > +#include <linux/regulator/consumer.h> > #include <linux/scatterlist.h> > #include <linux/string.h> > #include <linux/time.h> > @@ -1147,12 +1148,43 @@ static void usdhi6_enable_sdio_irq(struct mmc_host *mmc, int enable) > } > } > > +static int usdhi6_sig_volt_switch(struct mmc_host *mmc, struct mmc_ios *ios) > +{ > + int ret; > + > + if (IS_ERR(mmc->supply.vqmmc)) > + return 0; > + > + switch (ios->signal_voltage) { > + case MMC_SIGNAL_VOLTAGE_330: > + ret = regulator_set_voltage(mmc->supply.vqmmc, > + 2700000, 3600000); > + break; > + case MMC_SIGNAL_VOLTAGE_180: > + ret = regulator_set_voltage(mmc->supply.vqmmc, > + 1700000, 1950000); > + break; > + case MMC_SIGNAL_VOLTAGE_120: > + ret = regulator_set_voltage(mmc->supply.vqmmc, > + 1100000, 1300000); > + break; > + default: > + return 0; > + } Please replace this switch statement with a call to mmc_regulator_set_vqmmc() instead. > + > + if (ret < 0) > + dev_warn(mmc_dev(mmc), "Voltage switch failed: %d\n", ret); > + > + return ret; > +} > + > static struct mmc_host_ops usdhi6_ops = { > .request = usdhi6_request, > .set_ios = usdhi6_set_ios, > .get_cd = usdhi6_get_cd, > .get_ro = usdhi6_get_ro, > .enable_sdio_irq = usdhi6_enable_sdio_irq, > + .start_signal_voltage_switch = usdhi6_sig_volt_switch, > }; > > /* State machine handlers */ > -- > 2.1.4 > Kind regards Uffe ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 3/3] mmc: usdhi6rol0: add pinctrl to set pin drive strength 2016-04-18 9:38 [PATCH 0/3] mmc: usdhi6rol0: UHS support Lars Persson 2016-04-18 9:38 ` [PATCH 1/3] mmc: dt: usdhi6rol0: add optional pinctrl binding Lars Persson [not found] ` <cover.1460971625.git.larper-VrBV9hrLPhE@public.gmane.org> @ 2016-04-18 9:38 ` Lars Persson 2 siblings, 0 replies; 5+ messages in thread From: Lars Persson @ 2016-04-18 9:38 UTC (permalink / raw) To: linux-mmc, devicetree Cc: g.liakhovetski, ulf.hansson, robh+dt, pawel.moll, mark.rutland, ijc+devicetree, galak, Lars Persson Some boards need different pin drive strength for the UHS mode. Add an optional pinctrl setting with two pin states covering UHS speeds and other speeds. Signed-off-by: Lars Persson <larper@axis.com> --- drivers/mmc/host/usdhi6rol0.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/usdhi6rol0.c b/drivers/mmc/host/usdhi6rol0.c index 5dde31b..4675ec0 100644 --- a/drivers/mmc/host/usdhi6rol0.c +++ b/drivers/mmc/host/usdhi6rol0.c @@ -22,6 +22,7 @@ #include <linux/mmc/sdio.h> #include <linux/module.h> #include <linux/pagemap.h> +#include <linux/pinctrl/consumer.h> #include <linux/platform_device.h> #include <linux/regulator/consumer.h> #include <linux/scatterlist.h> @@ -199,6 +200,11 @@ struct usdhi6_host { struct dma_chan *chan_rx; struct dma_chan *chan_tx; bool dma_active; + + /* Pin control */ + struct pinctrl *pinctrl; + struct pinctrl_state *pins_default; + struct pinctrl_state *pins_uhs; }; /* I/O primitives */ @@ -1148,6 +1154,24 @@ static void usdhi6_enable_sdio_irq(struct mmc_host *mmc, int enable) } } +static int usdhi6_set_pinstates(struct usdhi6_host *host, int voltage) +{ + if (IS_ERR(host->pinctrl) || IS_ERR(host->pins_default) || + IS_ERR(host->pins_uhs)) + return 0; + + switch (voltage) { + case MMC_SIGNAL_VOLTAGE_180: + case MMC_SIGNAL_VOLTAGE_120: + return pinctrl_select_state(host->pinctrl, + host->pins_uhs); + + default: + return pinctrl_select_state(host->pinctrl, + host->pins_default); + } +} + static int usdhi6_sig_volt_switch(struct mmc_host *mmc, struct mmc_ios *ios) { int ret; @@ -1172,8 +1196,15 @@ static int usdhi6_sig_volt_switch(struct mmc_host *mmc, struct mmc_ios *ios) return 0; } - if (ret < 0) + if (ret < 0) { dev_warn(mmc_dev(mmc), "Voltage switch failed: %d\n", ret); + return ret; + } + + ret = usdhi6_set_pinstates(mmc_priv(mmc), ios->signal_voltage); + if (ret) + dev_warn_once(mmc_dev(mmc), + "Failed to set pinstate err=%d\n", ret); return ret; } @@ -1836,6 +1867,13 @@ static int usdhi6_probe(struct platform_device *pdev) mmc->f_max = host->imclk; mmc->f_min = host->imclk / 512; + host->pinctrl = devm_pinctrl_get(&pdev->dev); + if (!IS_ERR(host->pinctrl)) { + host->pins_default = pinctrl_lookup_state(host->pinctrl, + PINCTRL_STATE_DEFAULT); + host->pins_uhs = pinctrl_lookup_state(host->pinctrl, + "pins_uhs"); + } platform_set_drvdata(pdev, host); ret = mmc_add_host(mmc); -- 2.1.4 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-04-18 11:18 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-04-18 9:38 [PATCH 0/3] mmc: usdhi6rol0: UHS support Lars Persson 2016-04-18 9:38 ` [PATCH 1/3] mmc: dt: usdhi6rol0: add optional pinctrl binding Lars Persson [not found] ` <cover.1460971625.git.larper-VrBV9hrLPhE@public.gmane.org> 2016-04-18 9:38 ` [PATCH 2/3] mmc: usdhi6rol0: add support for UHS modes Lars Persson 2016-04-18 11:18 ` Ulf Hansson 2016-04-18 9:38 ` [PATCH 3/3] mmc: usdhi6rol0: add pinctrl to set pin drive strength Lars Persson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).