mmc: usdhi6rol0: UHS support
Subsystems (3)
Lars Persson
maintainerv5 cover mmc: usdhi6rol0: UHS support
This patch set adds UHS support to the usdhi6rol0 driver, with control of the regulator and pin state settings.
Changes since v4:
- Add a fix patch to remove UHS capabilities that were announced without actual driver support.
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 (4):
mmc: dt: usdhi6rol0: add optional pinctrl binding
mmc: usdhi6rol0: do not announce UHS capabilities
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 | 60 +++++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-)
Signature · 1 line
2.1.4
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH v5 1/4 mmc: dt: usdhi6rol0: add optional pinctrl binding
Add a pinctrl binding to specify different pin settings for high speed modes and UHS modes.
--- Documentation/devicetree/bindings/mmc/usdhi6rol0.txt | 6 ++++++ 1 file changed, 6 insertions(+)
Documentation/devicetree/bindings/mmc/usdhi6rol0.txt +6 -0
@@ -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.
Signature · 6 lines
2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 1/4] mmc: dt: usdhi6rol0: add optional pinctrl binding
Quoted 7 lines · Lars Persson
Add a pinctrl binding to specify different pin settings for high speed modes and UHS modes.
Signed-off-by Lars Persson <[email protected]>--- Documentation/devicetree/bindings/mmc/usdhi6rol0.txt | 6 ++++++ 1 file changed, 6 insertions(+)
PATCH v5 2/4 mmc: usdhi6rol0: do not announce UHS capabilities
In reply to a message not in the archiveThe driver in its current form does not support UHS at all due to a missing start_signal_voltage_switch callback.
Also when this callback is added we should let the device tree control UHS capabilities using the standard mmc bindings.
--- drivers/mmc/host/usdhi6rol0.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/mmc/host/usdhi6rol0.c +1 -1
@@ -1785,7 +1785,7 @@ 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 ;/* Set .max_segs to some random number. Feel free to adjust. */ mmc->max_segs =32 ; mmc->max_blk_size =512 ;
Signature · 6 lines
2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v5 3/4 mmc: usdhi6rol0: add support for UHS modes
In reply to a message not in the archiveAdd a start_signal_voltage_switch() operation to support enabling of UHS modes.
--- drivers/mmc/host/usdhi6rol0.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
drivers/mmc/host/usdhi6rol0.c +10 -0
@@ -1147,12 +1147,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 */
Signature · 6 lines
2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v5 4/4 mmc: usdhi6rol0: add pinctrl to set pin drive strength
In reply to a message not in the archiveSome 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.
--- drivers/mmc/host/usdhi6rol0.c | 48 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+)
drivers/mmc/host/usdhi6rol0.c +48 -0
@@ -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/scatterlist.h> #include <linux/string.h>
@@ -198,6 +199,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 */
@@ -1147,12 +1153,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; }
@@ -1740,6 +1769,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)) {
Signature · 6 lines
2.1.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Ulf Hansson
AppliedQuoted 27 lines · Lars Persson
This patch set adds UHS support to the usdhi6rol0 driver, with control of the regulator and pin state settings.
Changes since v4:
- Add a fix patch to remove UHS capabilities that were announced without actual driver support.Changes since v3:
- No error print for failure ofmmc_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: renamedpins_uhstostate_uhs.
- dt: made default optional in pinctrl-names.
- dt: document that use ofstate_uhsalso requires a default pin state.
- add error handling for missing pin states.Changes since v1:
- Usemmc_regulator_set_vqmmc().Lars Persson (4):
mmc: dt: usdhi6rol0: add optional pinctrl binding
mmc: usdhi6rol0: do not announce UHS capabilities
mmc: usdhi6rol0: add support for UHS modes
mmc: usdhi6rol0: add pinctrl to set pin drive strength
Quoted 4 lines
.../devicetree/bindings/mmc/usdhi6rol0.txt | 6 +++ drivers/mmc/host/usdhi6rol0.c | 60 +++++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-)
Thanks, applied for next!
Kind regards
Uffe