* [PATCH v4 0/3] mmc: usdhi6rol0: UHS support @ 2016-04-21 13:55 Lars Persson [not found] ` <cover.1461246772.git.larper-VrBV9hrLPhE@public.gmane.org> ` (2 more replies) 0 siblings, 3 replies; 8+ messages in thread From: Lars Persson @ 2016-04-21 13:55 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, Lars Persson This patch set adds UHS support to the usdhi6rol0 driver, with control of the regulator and pin state settings. Changes since v3: - No error print for failure of mmc_regulator_set_vqmmc(). - Do not set UHS caps if the vqmmc regulator is missing. - No not set UHS caps if the no-1-8-v property is set. Changes since v2: - dt: renamed pins_uhs to state_uhs. - dt: made default optional in pinctrl-names. - dt: document that use of state_uhs also requires a default pin state. - add error handling for missing pin states. Changes since v1: - Use mmc_regulator_set_vqmmc(). Lars Persson (3): mmc: dt: usdhi6rol0: add optional pinctrl binding mmc: usdhi6rol0: add support for UHS modes mmc: usdhi6rol0: add pinctrl to set pin drive strength .../devicetree/bindings/mmc/usdhi6rol0.txt | 6 ++ drivers/mmc/host/usdhi6rol0.c | 71 +++++++++++++++++++++- 2 files changed, 76 insertions(+), 1 deletion(-) -- 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 [flat|nested] 8+ messages in thread
[parent not found: <cover.1461246772.git.larper-VrBV9hrLPhE@public.gmane.org>]
* [PATCH v4 1/3] mmc: dt: usdhi6rol0: add optional pinctrl binding [not found] ` <cover.1461246772.git.larper-VrBV9hrLPhE@public.gmane.org> @ 2016-04-21 13:55 ` Lars Persson 2016-04-22 20:27 ` Rob Herring 0 siblings, 1 reply; 8+ messages in thread From: Lars Persson @ 2016-04-21 13:55 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, Lars Persson Add a pinctrl binding to specify different pin settings for high speed modes and UHS modes. Signed-off-by: Lars Persson <larper-VrBV9hrLPhE@public.gmane.org> --- Documentation/devicetree/bindings/mmc/usdhi6rol0.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt b/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt index 8babdaa..6d1b797 100644 --- a/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt +++ b/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt @@ -12,6 +12,12 @@ 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: Can contain a "default" entry and a "state_uhs" + entry. The state_uhs entry is used together with the default + entry when the board requires distinct settings for UHS speeds. + +- 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 -- 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] 8+ messages in thread
* Re: [PATCH v4 1/3] mmc: dt: usdhi6rol0: add optional pinctrl binding 2016-04-21 13:55 ` [PATCH v4 1/3] mmc: dt: usdhi6rol0: add optional pinctrl binding Lars Persson @ 2016-04-22 20:27 ` Rob Herring 2016-04-26 12:23 ` Lars Persson 0 siblings, 1 reply; 8+ messages in thread From: Rob Herring @ 2016-04-22 20:27 UTC (permalink / raw) To: Lars Persson Cc: linux-mmc, devicetree, g.liakhovetski, ulf.hansson, pawel.moll, mark.rutland, ijc+devicetree, galak, Lars Persson On Thu, Apr 21, 2016 at 03:55:42PM +0200, Lars Persson wrote: > 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 | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt b/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt > index 8babdaa..6d1b797 100644 > --- a/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt > +++ b/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt > @@ -12,6 +12,12 @@ 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: Can contain a "default" entry and a "state_uhs" Don't use underscores. Just "uhs" should be sufficient, right? > + entry. The state_uhs entry is used together with the default > + entry when the board requires distinct settings for UHS speeds. > + > +- 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 [flat|nested] 8+ messages in thread
* Re: [PATCH v4 1/3] mmc: dt: usdhi6rol0: add optional pinctrl binding 2016-04-22 20:27 ` Rob Herring @ 2016-04-26 12:23 ` Lars Persson 2016-04-26 13:19 ` Rob Herring 0 siblings, 1 reply; 8+ messages in thread From: Lars Persson @ 2016-04-26 12:23 UTC (permalink / raw) To: Rob Herring, Lars Persson Cc: linux-mmc-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, g.liakhovetski-Mmb7MZpHnFY, ulf.hansson-QSEj5FYQhm4dnm+yROfE0A, pawel.moll-5wv7dgnIgG8, mark.rutland-5wv7dgnIgG8, ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg, galak-sgV2jX0FEOL9JmXXK+q4OQ On 04/22/2016 10:27 PM, Rob Herring wrote: > On Thu, Apr 21, 2016 at 03:55:42PM +0200, Lars Persson wrote: >> Add a pinctrl binding to specify different pin settings for high speed >> modes and UHS modes. >> >> Signed-off-by: Lars Persson <larper-VrBV9hrLPhE@public.gmane.org> >> --- >> Documentation/devicetree/bindings/mmc/usdhi6rol0.txt | 6 ++++++ >> 1 file changed, 6 insertions(+) >> >> diff --git a/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt b/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt >> index 8babdaa..6d1b797 100644 >> --- a/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt >> +++ b/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt >> @@ -12,6 +12,12 @@ 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: Can contain a "default" entry and a "state_uhs" > > Don't use underscores. Just "uhs" should be sufficient, right? I do not object to this, but for consistency it seems better with state_uhs that existing bindings use. > >> + entry. The state_uhs entry is used together with the default >> + entry when the board requires distinct settings for UHS speeds. >> + >> +- 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 >> -- 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 [flat|nested] 8+ messages in thread
* Re: [PATCH v4 1/3] mmc: dt: usdhi6rol0: add optional pinctrl binding 2016-04-26 12:23 ` Lars Persson @ 2016-04-26 13:19 ` Rob Herring 0 siblings, 0 replies; 8+ messages in thread From: Rob Herring @ 2016-04-26 13:19 UTC (permalink / raw) To: Lars Persson Cc: Lars Persson, linux-mmc@vger.kernel.org, devicetree@vger.kernel.org, Guennadi Liakhovetski, Ulf Hansson, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala On Tue, Apr 26, 2016 at 7:23 AM, Lars Persson <lars.persson@axis.com> wrote: > > > On 04/22/2016 10:27 PM, Rob Herring wrote: >> >> On Thu, Apr 21, 2016 at 03:55:42PM +0200, Lars Persson wrote: >>> >>> 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 | 6 ++++++ >>> 1 file changed, 6 insertions(+) >>> >>> diff --git a/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt >>> b/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt >>> index 8babdaa..6d1b797 100644 >>> --- a/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt >>> +++ b/Documentation/devicetree/bindings/mmc/usdhi6rol0.txt >>> @@ -12,6 +12,12 @@ 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: Can contain a "default" entry and a "state_uhs" >> >> >> Don't use underscores. Just "uhs" should be sufficient, right? > > > I do not object to this, but for consistency it seems better with state_uhs > that existing bindings use. Okay. Consistency is better. Rob ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 2/3] mmc: usdhi6rol0: add support for UHS modes 2016-04-21 13:55 [PATCH v4 0/3] mmc: usdhi6rol0: UHS support Lars Persson [not found] ` <cover.1461246772.git.larper-VrBV9hrLPhE@public.gmane.org> @ 2016-04-21 13:55 ` Lars Persson 2016-04-22 12:53 ` Ulf Hansson 2016-04-21 13:55 ` [PATCH v4 3/3] mmc: usdhi6rol0: add pinctrl to set pin drive strength Lars Persson 2 siblings, 1 reply; 8+ messages in thread From: Lars Persson @ 2016-04-21 13:55 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 start_signal_voltage_switch() operation to support enabling of UHS modes. Signed-off-by: Lars Persson <larper@axis.com> --- drivers/mmc/host/usdhi6rol0.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/usdhi6rol0.c b/drivers/mmc/host/usdhi6rol0.c index 807c06e..28fe5c7 100644 --- a/drivers/mmc/host/usdhi6rol0.c +++ b/drivers/mmc/host/usdhi6rol0.c @@ -21,6 +21,7 @@ #include <linux/mmc/sd.h> #include <linux/mmc/sdio.h> #include <linux/module.h> +#include <linux/of.h> #include <linux/pagemap.h> #include <linux/platform_device.h> #include <linux/scatterlist.h> @@ -1147,12 +1148,22 @@ 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; + + ret = mmc_regulator_set_vqmmc(mmc, ios); + + 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 */ @@ -1785,7 +1796,17 @@ static int usdhi6_probe(struct platform_device *pdev) mmc->ops = &usdhi6_ops; mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED | - MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_DDR50 | MMC_CAP_SDIO_IRQ; + MMC_CAP_SDIO_IRQ; + + /* + * A vqmmc regulator with a 1.8V mode is mandatory to support + * UHS modes. + */ + if (!of_property_read_bool(dev->of_node, "no-1-8-v") && + !IS_ERR(mmc->supply.vqmmc)) { + mmc->caps |= MMC_CAP_UHS_DDR50 | MMC_CAP_UHS_SDR50; + } + /* Set .max_segs to some random number. Feel free to adjust. */ mmc->max_segs = 32; mmc->max_blk_size = 512; -- 2.1.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v4 2/3] mmc: usdhi6rol0: add support for UHS modes 2016-04-21 13:55 ` [PATCH v4 2/3] mmc: usdhi6rol0: add support for UHS modes Lars Persson @ 2016-04-22 12:53 ` Ulf Hansson 0 siblings, 0 replies; 8+ messages in thread From: Ulf Hansson @ 2016-04-22 12:53 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, Lars Persson On 21 April 2016 at 15:55, Lars Persson <lars.persson@axis.com> wrote: > Add a start_signal_voltage_switch() operation to support enabling of > UHS modes. > > Signed-off-by: Lars Persson <larper@axis.com> > --- > drivers/mmc/host/usdhi6rol0.c | 23 ++++++++++++++++++++++- > 1 file changed, 22 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/host/usdhi6rol0.c b/drivers/mmc/host/usdhi6rol0.c > index 807c06e..28fe5c7 100644 > --- a/drivers/mmc/host/usdhi6rol0.c > +++ b/drivers/mmc/host/usdhi6rol0.c > @@ -21,6 +21,7 @@ > #include <linux/mmc/sd.h> > #include <linux/mmc/sdio.h> > #include <linux/module.h> > +#include <linux/of.h> > #include <linux/pagemap.h> > #include <linux/platform_device.h> > #include <linux/scatterlist.h> > @@ -1147,12 +1148,22 @@ 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; > + > + ret = mmc_regulator_set_vqmmc(mmc, ios); > + > + 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 */ > @@ -1785,7 +1796,17 @@ static int usdhi6_probe(struct platform_device *pdev) > > mmc->ops = &usdhi6_ops; > mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED | > - MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_DDR50 | MMC_CAP_SDIO_IRQ; Oh, this was weird. The driver already claimed to support UHS mode, but when in fact it didn't. :-) Perhaps that change deserves its own fixup patch? > + MMC_CAP_SDIO_IRQ; > + > + /* > + * A vqmmc regulator with a 1.8V mode is mandatory to support > + * UHS modes. > + */ > + if (!of_property_read_bool(dev->of_node, "no-1-8-v") && No, please don't use this binding. Instead there is already bindings for MMC_CAP_UHS_DDR50 and MMC_CAP_UHS_SDR50, please use them instead. > + !IS_ERR(mmc->supply.vqmmc)) { > + mmc->caps |= MMC_CAP_UHS_DDR50 | MMC_CAP_UHS_SDR50; > + } > + > /* Set .max_segs to some random number. Feel free to adjust. */ > mmc->max_segs = 32; > mmc->max_blk_size = 512; > -- > 2.1.4 > Kind regards Uffe ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 3/3] mmc: usdhi6rol0: add pinctrl to set pin drive strength 2016-04-21 13:55 [PATCH v4 0/3] mmc: usdhi6rol0: UHS support Lars Persson [not found] ` <cover.1461246772.git.larper-VrBV9hrLPhE@public.gmane.org> 2016-04-21 13:55 ` [PATCH v4 2/3] mmc: usdhi6rol0: add support for UHS modes Lars Persson @ 2016-04-21 13:55 ` Lars Persson 2 siblings, 0 replies; 8+ messages in thread From: Lars Persson @ 2016-04-21 13:55 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 | 48 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/drivers/mmc/host/usdhi6rol0.c b/drivers/mmc/host/usdhi6rol0.c index 28fe5c7..38c418c 100644 --- a/drivers/mmc/host/usdhi6rol0.c +++ b/drivers/mmc/host/usdhi6rol0.c @@ -23,6 +23,7 @@ #include <linux/module.h> #include <linux/of.h> #include <linux/pagemap.h> +#include <linux/pinctrl/consumer.h> #include <linux/platform_device.h> #include <linux/scatterlist.h> #include <linux/string.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,12 +1154,35 @@ 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->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; ret = mmc_regulator_set_vqmmc(mmc, ios); + if (ret < 0) + 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; } @@ -1741,6 +1770,25 @@ static int usdhi6_probe(struct platform_device *pdev) host->wait = USDHI6_WAIT_FOR_REQUEST; host->timeout = msecs_to_jiffies(4000); + host->pinctrl = devm_pinctrl_get(&pdev->dev); + if (IS_ERR(host->pinctrl)) { + ret = PTR_ERR(host->pinctrl); + goto e_free_mmc; + } + + host->pins_uhs = pinctrl_lookup_state(host->pinctrl, "state_uhs"); + if (!IS_ERR(host->pins_uhs)) { + host->pins_default = pinctrl_lookup_state(host->pinctrl, + PINCTRL_STATE_DEFAULT); + + if (IS_ERR(host->pins_default)) { + dev_err(dev, + "UHS pinctrl requires a default pin state.\n"); + ret = PTR_ERR(host->pins_default); + goto e_free_mmc; + } + } + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); host->base = devm_ioremap_resource(dev, res); if (IS_ERR(host->base)) { -- 2.1.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2016-04-26 13:19 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-04-21 13:55 [PATCH v4 0/3] mmc: usdhi6rol0: UHS support Lars Persson [not found] ` <cover.1461246772.git.larper-VrBV9hrLPhE@public.gmane.org> 2016-04-21 13:55 ` [PATCH v4 1/3] mmc: dt: usdhi6rol0: add optional pinctrl binding Lars Persson 2016-04-22 20:27 ` Rob Herring 2016-04-26 12:23 ` Lars Persson 2016-04-26 13:19 ` Rob Herring 2016-04-21 13:55 ` [PATCH v4 2/3] mmc: usdhi6rol0: add support for UHS modes Lars Persson 2016-04-22 12:53 ` Ulf Hansson 2016-04-21 13:55 ` [PATCH v4 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).