From: Dong Aisheng <aisheng.dong@nxp.com> To: linux-mmc@vger.kernel.org Cc: aisheng.dong@nxp.com, ulf.hansson@linaro.org, dongas86@gmail.com, chris@printf.net, haibo.chen@nxp.com, adrian.hunter@intel.com, shawnguo@kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH 04/23] mmc: sdhci: re-factor sdhci_start_signal_voltage() Date: Sat, 16 Apr 2016 01:29:28 +0800 [thread overview] Message-ID: <1460741387-23815-5-git-send-email-aisheng.dong@nxp.com> (raw) In-Reply-To: <1460741387-23815-1-git-send-email-aisheng.dong@nxp.com> Handle host and regulator signal voltage switch separately. Move host signal voltage switch code into a separated function sdhci_do_signal_voltage_switch() first, the following patches will remove the regulator voltage switch code and use the common mmc_regulator_set_vqmmc() instead. Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> --- drivers/mmc/host/sdhci.c | 97 ++++++++++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 40 deletions(-) diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 839aa4c..7f63f5d 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -1657,19 +1657,10 @@ static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable) spin_unlock_irqrestore(&host->lock, flags); } -static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc, - struct mmc_ios *ios) +static int sdhci_do_signal_voltage_switch(struct sdhci_host *host, + struct mmc_ios *ios) { - struct sdhci_host *host = mmc_priv(mmc); u16 ctrl; - int ret; - - /* - * Signal Voltage Switching is only applicable for Host Controllers - * v3.00 and above. - */ - if (host->version < SDHCI_SPEC_300) - return 0; ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); @@ -1679,15 +1670,6 @@ static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc, ctrl &= ~SDHCI_CTRL_VDD_180; sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); - if (!IS_ERR(mmc->supply.vqmmc)) { - ret = regulator_set_voltage(mmc->supply.vqmmc, 2700000, - 3600000); - if (ret) { - pr_warn("%s: Switching to 3.3V signalling voltage failed\n", - mmc_hostname(mmc)); - return -EIO; - } - } /* Wait for 5ms */ usleep_range(5000, 5500); @@ -1697,20 +1679,10 @@ static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc, return 0; pr_warn("%s: 3.3V regulator output did not became stable\n", - mmc_hostname(mmc)); + mmc_hostname(host->mmc)); return -EAGAIN; case MMC_SIGNAL_VOLTAGE_180: - if (!IS_ERR(mmc->supply.vqmmc)) { - ret = regulator_set_voltage(mmc->supply.vqmmc, - 1700000, 1950000); - if (ret) { - pr_warn("%s: Switching to 1.8V signalling voltage failed\n", - mmc_hostname(mmc)); - return -EIO; - } - } - /* * Enable 1.8V Signal Enable in the Host Control2 * register @@ -1728,18 +1700,63 @@ static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc, return 0; pr_warn("%s: 1.8V regulator output did not became stable\n", - mmc_hostname(mmc)); + mmc_hostname(host->mmc)); return -EAGAIN; + default: + /* No signal voltage switch required */ + return 0; + } +} + +static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc, + struct mmc_ios *ios) +{ + struct sdhci_host *host = mmc_priv(mmc); + int ret; + + /* + * Signal Voltage Switching is only applicable for Host Controllers + * v3.00 and above. + */ + if (host->version < SDHCI_SPEC_300) + return 0; + + ret = sdhci_do_signal_voltage_switch(host, ios); + if (ret) + return 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); + if (ret) { + pr_warn("%s: Switching to 3.3V signalling voltage failed\n", + mmc_hostname(mmc)); + return -EIO; + } + + return 0; + case MMC_SIGNAL_VOLTAGE_180: + ret = regulator_set_voltage(mmc->supply.vqmmc, + 1700000, 1950000); + if (ret) { + pr_warn("%s: Switching to 1.8V signalling voltage failed\n", + mmc_hostname(mmc)); + return -EIO; + } + + return 0; case MMC_SIGNAL_VOLTAGE_120: - if (!IS_ERR(mmc->supply.vqmmc)) { - ret = regulator_set_voltage(mmc->supply.vqmmc, 1100000, - 1300000); - if (ret) { - pr_warn("%s: Switching to 1.2V signalling voltage failed\n", - mmc_hostname(mmc)); - return -EIO; - } + ret = regulator_set_voltage(mmc->supply.vqmmc, 1100000, + 1300000); + if (ret) { + pr_warn("%s: Switching to 1.2V signalling voltage failed\n", + mmc_hostname(mmc)); + return -EIO; } return 0; default: -- 1.9.1
WARNING: multiple messages have this Message-ID (diff)
From: aisheng.dong@nxp.com (Dong Aisheng) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 04/23] mmc: sdhci: re-factor sdhci_start_signal_voltage() Date: Sat, 16 Apr 2016 01:29:28 +0800 [thread overview] Message-ID: <1460741387-23815-5-git-send-email-aisheng.dong@nxp.com> (raw) In-Reply-To: <1460741387-23815-1-git-send-email-aisheng.dong@nxp.com> Handle host and regulator signal voltage switch separately. Move host signal voltage switch code into a separated function sdhci_do_signal_voltage_switch() first, the following patches will remove the regulator voltage switch code and use the common mmc_regulator_set_vqmmc() instead. Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> --- drivers/mmc/host/sdhci.c | 97 ++++++++++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 40 deletions(-) diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 839aa4c..7f63f5d 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -1657,19 +1657,10 @@ static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable) spin_unlock_irqrestore(&host->lock, flags); } -static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc, - struct mmc_ios *ios) +static int sdhci_do_signal_voltage_switch(struct sdhci_host *host, + struct mmc_ios *ios) { - struct sdhci_host *host = mmc_priv(mmc); u16 ctrl; - int ret; - - /* - * Signal Voltage Switching is only applicable for Host Controllers - * v3.00 and above. - */ - if (host->version < SDHCI_SPEC_300) - return 0; ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2); @@ -1679,15 +1670,6 @@ static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc, ctrl &= ~SDHCI_CTRL_VDD_180; sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2); - if (!IS_ERR(mmc->supply.vqmmc)) { - ret = regulator_set_voltage(mmc->supply.vqmmc, 2700000, - 3600000); - if (ret) { - pr_warn("%s: Switching to 3.3V signalling voltage failed\n", - mmc_hostname(mmc)); - return -EIO; - } - } /* Wait for 5ms */ usleep_range(5000, 5500); @@ -1697,20 +1679,10 @@ static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc, return 0; pr_warn("%s: 3.3V regulator output did not became stable\n", - mmc_hostname(mmc)); + mmc_hostname(host->mmc)); return -EAGAIN; case MMC_SIGNAL_VOLTAGE_180: - if (!IS_ERR(mmc->supply.vqmmc)) { - ret = regulator_set_voltage(mmc->supply.vqmmc, - 1700000, 1950000); - if (ret) { - pr_warn("%s: Switching to 1.8V signalling voltage failed\n", - mmc_hostname(mmc)); - return -EIO; - } - } - /* * Enable 1.8V Signal Enable in the Host Control2 * register @@ -1728,18 +1700,63 @@ static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc, return 0; pr_warn("%s: 1.8V regulator output did not became stable\n", - mmc_hostname(mmc)); + mmc_hostname(host->mmc)); return -EAGAIN; + default: + /* No signal voltage switch required */ + return 0; + } +} + +static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc, + struct mmc_ios *ios) +{ + struct sdhci_host *host = mmc_priv(mmc); + int ret; + + /* + * Signal Voltage Switching is only applicable for Host Controllers + * v3.00 and above. + */ + if (host->version < SDHCI_SPEC_300) + return 0; + + ret = sdhci_do_signal_voltage_switch(host, ios); + if (ret) + return 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); + if (ret) { + pr_warn("%s: Switching to 3.3V signalling voltage failed\n", + mmc_hostname(mmc)); + return -EIO; + } + + return 0; + case MMC_SIGNAL_VOLTAGE_180: + ret = regulator_set_voltage(mmc->supply.vqmmc, + 1700000, 1950000); + if (ret) { + pr_warn("%s: Switching to 1.8V signalling voltage failed\n", + mmc_hostname(mmc)); + return -EIO; + } + + return 0; case MMC_SIGNAL_VOLTAGE_120: - if (!IS_ERR(mmc->supply.vqmmc)) { - ret = regulator_set_voltage(mmc->supply.vqmmc, 1100000, - 1300000); - if (ret) { - pr_warn("%s: Switching to 1.2V signalling voltage failed\n", - mmc_hostname(mmc)); - return -EIO; - } + ret = regulator_set_voltage(mmc->supply.vqmmc, 1100000, + 1300000); + if (ret) { + pr_warn("%s: Switching to 1.2V signalling voltage failed\n", + mmc_hostname(mmc)); + return -EIO; } return 0; default: -- 1.9.1
next prev parent reply other threads:[~2016-04-15 17:29 UTC|newest] Thread overview: 170+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-04-15 17:29 [PATCH 00/23] a few sdhci/imx clean up and fix patches Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 01/23] mmc: sdhci: removed unneeded function wrappers Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 10:27 ` Adrian Hunter 2016-04-22 10:27 ` Adrian Hunter 2016-05-10 6:32 ` Adrian Hunter 2016-05-10 6:32 ` Adrian Hunter 2016-05-10 9:46 ` Ulf Hansson 2016-05-10 9:46 ` Ulf Hansson 2016-04-15 17:29 ` [PATCH 02/23] mmc: sdhci: move sdhci_get_cd() forward to avoid declaration Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 10:27 ` Adrian Hunter 2016-04-22 10:27 ` Adrian Hunter 2016-04-24 9:17 ` Dong Aisheng 2016-04-24 9:17 ` Dong Aisheng 2016-04-27 20:26 ` Adrian Hunter 2016-04-27 20:26 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 03/23] mmc: core: fix a comment typo Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 10:28 ` Adrian Hunter 2016-04-22 10:28 ` Adrian Hunter 2016-04-15 17:29 ` Dong Aisheng [this message] 2016-04-15 17:29 ` [PATCH 04/23] mmc: sdhci: re-factor sdhci_start_signal_voltage() Dong Aisheng 2016-04-22 11:43 ` Adrian Hunter 2016-04-22 11:43 ` Adrian Hunter 2016-04-24 9:14 ` Dong Aisheng 2016-04-24 9:14 ` Dong Aisheng 2016-04-27 20:26 ` Adrian Hunter 2016-04-27 20:26 ` Adrian Hunter 2016-04-28 3:09 ` Dong Aisheng 2016-04-28 3:09 ` Dong Aisheng 2016-04-28 6:39 ` Adrian Hunter 2016-04-28 6:39 ` Adrian Hunter 2016-04-28 7:15 ` Jaehoon Chung 2016-04-28 7:15 ` Jaehoon Chung 2016-04-28 7:44 ` Adrian Hunter 2016-04-28 7:44 ` Adrian Hunter 2016-04-28 8:30 ` Jaehoon Chung 2016-04-28 8:30 ` Jaehoon Chung 2016-04-28 14:09 ` Dong Aisheng 2016-04-28 14:09 ` Dong Aisheng 2016-04-28 23:06 ` Jaehoon Chung 2016-04-28 23:06 ` Jaehoon Chung 2016-04-28 13:14 ` Dong Aisheng 2016-04-28 13:14 ` Dong Aisheng 2016-04-28 13:36 ` Adrian Hunter 2016-04-28 13:36 ` Adrian Hunter 2016-04-28 14:28 ` Dong Aisheng 2016-04-28 14:28 ` Dong Aisheng 2016-04-29 7:32 ` Adrian Hunter 2016-04-29 7:32 ` Adrian Hunter 2016-04-29 7:57 ` Dong Aisheng 2016-04-29 7:57 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 05/23] mmc: core: mmc_regulator_set_vqmmc not return error if vqmmc/vmmc not exist Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 06/23] mmc: sdhci: using common mmc_regulator_set_vqmmc() Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 11:48 ` Adrian Hunter 2016-04-22 11:48 ` Adrian Hunter 2016-04-24 9:25 ` Dong Aisheng 2016-04-24 9:25 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 07/23] mmc: sdhci: check SDHCI_QUIRK2_NO_1_8_V when do voltage switch Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 12:30 ` Adrian Hunter 2016-04-22 12:30 ` Adrian Hunter 2016-04-24 9:56 ` Dong Aisheng 2016-04-24 9:56 ` Dong Aisheng 2016-04-27 20:27 ` Adrian Hunter 2016-04-27 20:27 ` Adrian Hunter 2016-04-28 13:24 ` Dong Aisheng 2016-04-28 13:24 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 08/23] mmc: sdhci: rename quirk SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 12:33 ` Adrian Hunter 2016-04-22 12:33 ` Adrian Hunter 2016-04-24 10:00 ` Dong Aisheng 2016-04-24 10:00 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 09/23] mmc: sdhci: fix incorrect get data interrupt during no data transfer Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 6:51 ` Adrian Hunter 2016-05-10 6:51 ` Adrian Hunter 2016-05-17 4:31 ` Ritesh Harjani 2016-05-17 4:31 ` Ritesh Harjani 2016-05-17 5:58 ` Adrian Hunter 2016-05-17 5:58 ` Adrian Hunter 2016-05-26 14:59 ` Ritesh Harjani 2016-05-26 14:59 ` Ritesh Harjani 2016-05-26 11:41 ` Dong Aisheng 2016-05-26 11:41 ` Dong Aisheng 2016-05-26 11:59 ` Adrian Hunter 2016-05-26 11:59 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 10/23] mmc: core: disable auto retune during card detection process Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-22 12:48 ` Adrian Hunter 2016-04-22 12:48 ` Adrian Hunter 2016-04-24 10:47 ` Dong Aisheng 2016-04-24 10:47 ` Dong Aisheng 2016-04-28 7:04 ` Adrian Hunter 2016-04-28 7:04 ` Adrian Hunter 2016-04-28 13:22 ` Dong Aisheng 2016-04-28 13:22 ` Dong Aisheng 2016-04-29 6:54 ` Adrian Hunter 2016-04-29 6:54 ` Adrian Hunter 2016-04-29 7:42 ` Dong Aisheng 2016-04-29 7:42 ` Dong Aisheng 2016-05-10 6:55 ` Adrian Hunter 2016-05-10 6:55 ` Adrian Hunter 2016-05-31 10:18 ` Dong Aisheng 2016-05-31 10:18 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 11/23] mmc: sdhci-esdhci-imx: remove SDHCI_QUIRK_BROKEN_TIMEOUT_VAL Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 9:30 ` Adrian Hunter 2016-05-10 9:30 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 12/23] mmc: sdhci-esdhc-imx: add esdhc specific suspend resume callback Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 9:35 ` Adrian Hunter 2016-05-10 9:35 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 13/23] mmc: sdhci-esdhc-imx: restore watermark level setting after resume Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 9:30 ` Adrian Hunter 2016-05-10 9:30 ` Adrian Hunter 2016-05-31 7:18 ` Dong Aisheng 2016-05-31 7:18 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 14/23] mmc: sdhci-esdhci-imx: disable DLL delay line settings explicitly Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 11:02 ` Adrian Hunter 2016-05-10 11:02 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 15/23] mmc: sdhci-esdhc-imx: support setting tuning start point Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 11:17 ` Adrian Hunter 2016-05-10 11:17 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 16/23] doc: dt: fsl-imx-esdhc: add set tuning start point binding Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 17/23] mmc: sdhci: add standard hw auto retuning support Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 8:35 ` Adrian Hunter 2016-05-10 8:35 ` Adrian Hunter 2016-05-26 12:11 ` Dong Aisheng 2016-05-26 12:11 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 18/23] mmc: sdhci-esdhc-imx: enable hw auto retuning for STD_TUNING Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 11:19 ` Adrian Hunter 2016-05-10 11:19 ` Adrian Hunter 2016-05-26 12:21 ` Dong Aisheng 2016-05-26 12:21 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 19/23] mmc: sdhci-esdhc-imx: enable hw auto retuning for MAN_TUNING Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 11:24 ` Adrian Hunter 2016-05-10 11:24 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 20/23] mmc: sdhci-esdhc-imx: fix strobe DLL lock wrong clock issue Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 12:03 ` Adrian Hunter 2016-05-10 12:03 ` Adrian Hunter 2016-05-26 11:47 ` Dong Aisheng 2016-05-26 11:47 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 21/23] mmc: sdhci-esdhc-imx: factor out hw related intialization into function Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 12:15 ` Adrian Hunter 2016-05-10 12:15 ` Adrian Hunter 2016-05-26 11:45 ` Dong Aisheng 2016-05-26 11:45 ` Dong Aisheng 2016-04-15 17:29 ` [PATCH 22/23] mmc: sdhci-esdhc-imx: move tuning static configuration into hwinit function Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 13:07 ` Adrian Hunter 2016-05-10 13:07 ` Adrian Hunter 2016-04-15 17:29 ` [PATCH 23/23] mmc: sdhci-esdhc-imx: clear tuning bits during hwinit Dong Aisheng 2016-04-15 17:29 ` Dong Aisheng 2016-05-10 13:10 ` Adrian Hunter 2016-05-10 13:10 ` Adrian Hunter
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1460741387-23815-5-git-send-email-aisheng.dong@nxp.com \ --to=aisheng.dong@nxp.com \ --cc=adrian.hunter@intel.com \ --cc=chris@printf.net \ --cc=dongas86@gmail.com \ --cc=haibo.chen@nxp.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-mmc@vger.kernel.org \ --cc=shawnguo@kernel.org \ --cc=ulf.hansson@linaro.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.