From: Victor Shih <victorshihgli@gmail.com>
To: ulf.hansson@linaro.org, adrian.hunter@intel.com
Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org,
benchuanggli@gmail.com, HL.Liu@genesyslogic.com.tw,
Greg.tu@genesyslogic.com.tw, takahiro.akashi@linaro.org,
dlunev@chromium.org,
Victor Shih <victor.shih@genesyslogic.com.tw>
Subject: [PATCH V6 04/24] mmc: core: Extend support for mmc regulators with a vqmmc2
Date: Tue, 13 Dec 2022 17:00:27 +0800 [thread overview]
Message-ID: <20221213090047.3805-5-victor.shih@genesyslogic.com.tw> (raw)
In-Reply-To: <20221213090047.3805-1-victor.shih@genesyslogic.com.tw>
From: Ulf Hansson <ulf.hansson@linaro.org>
Updates in V4:
- Moved the voltage defines into this patch.
Update in previous version:
To allow an additional external regulator to be controlled by an mmc host
driver, let's add support for a vqmmc2 regulator to the mmc core.
For an SD UHS-II interface the vqmmc2 regulator may correspond to the so
called vdd2 supply, as described by the SD spec. Initially, only 1.8V is
needed, hence limit the new helper function, mmc_regulator_set_vqmmc2() to
this too.
Note that, to allow for flexibility mmc host drivers need to manage the
enable/disable of the vqmmc2 regulator themselves, while the regulator is
looked up through the common mmc_regulator_get_supply().
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
---
drivers/mmc/core/regulator.c | 34 ++++++++++++++++++++++++++++++++++
include/linux/mmc/host.h | 11 +++++++++++
2 files changed, 45 insertions(+)
diff --git a/drivers/mmc/core/regulator.c b/drivers/mmc/core/regulator.c
index 609201a467ef..3c189682797c 100644
--- a/drivers/mmc/core/regulator.c
+++ b/drivers/mmc/core/regulator.c
@@ -223,6 +223,33 @@ int mmc_regulator_set_vqmmc(struct mmc_host *mmc, struct mmc_ios *ios)
}
EXPORT_SYMBOL_GPL(mmc_regulator_set_vqmmc);
+/**
+ * mmc_regulator_set_vqmmc2 - Set vqmmc2 as per the ios->vqmmc2_voltage
+ * @mmc: The mmc host to regulate
+ * @ios: The io bus settings
+ *
+ * Sets a new voltage level for the vqmmc2 regulator, which may correspond to
+ * the vdd2 regulator for an SD UHS-II interface. This function is expected to
+ * be called by mmc host drivers.
+ *
+ * Returns a negative error code on failure, zero if the voltage level was
+ * changed successfully or a positive value if the level didn't need to change.
+ */
+int mmc_regulator_set_vqmmc2(struct mmc_host *mmc, struct mmc_ios *ios)
+{
+ if (IS_ERR(mmc->supply.vqmmc2))
+ return -EINVAL;
+
+ switch (ios->vqmmc2_voltage) {
+ case MMC_VQMMC2_VOLTAGE_180:
+ return mmc_regulator_set_voltage_if_supported(
+ mmc->supply.vqmmc2, 1700000, 1800000, 1950000);
+ default:
+ return -EINVAL;
+ }
+}
+EXPORT_SYMBOL_GPL(mmc_regulator_set_vqmmc2);
+
#else
static inline int mmc_regulator_get_ocrmask(struct regulator *supply)
@@ -249,6 +276,7 @@ int mmc_regulator_get_supply(struct mmc_host *mmc)
mmc->supply.vmmc = devm_regulator_get_optional(dev, "vmmc");
mmc->supply.vqmmc = devm_regulator_get_optional(dev, "vqmmc");
+ mmc->supply.vqmmc2 = devm_regulator_get_optional(dev, "vqmmc2");
if (IS_ERR(mmc->supply.vmmc)) {
if (PTR_ERR(mmc->supply.vmmc) == -EPROBE_DEFER)
@@ -268,6 +296,12 @@ int mmc_regulator_get_supply(struct mmc_host *mmc)
dev_dbg(dev, "No vqmmc regulator found\n");
}
+ if (IS_ERR(mmc->supply.vqmmc2)) {
+ if (PTR_ERR(mmc->supply.vqmmc2) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+ dev_dbg(dev, "No vqmmc2 regulator found\n");
+ }
+
return 0;
}
EXPORT_SYMBOL_GPL(mmc_regulator_get_supply);
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 150d10d5e6f8..895bcf7f80b7 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -71,6 +71,9 @@ struct mmc_ios {
#define MMC_SIGNAL_VOLTAGE_180 1
#define MMC_SIGNAL_VOLTAGE_120 2
+ unsigned char vqmmc2_voltage;
+#define MMC_VQMMC2_VOLTAGE_180 0
+
unsigned char drv_type; /* driver type (A, B, C, D) */
#define MMC_SET_DRIVER_TYPE_B 0
@@ -321,6 +324,7 @@ struct mmc_pwrseq;
struct mmc_supply {
struct regulator *vmmc; /* Card power supply */
struct regulator *vqmmc; /* Optional Vccq supply */
+ struct regulator *vqmmc2; /* Optional supply for phy */
};
struct mmc_ctx {
@@ -600,6 +604,7 @@ int mmc_regulator_set_ocr(struct mmc_host *mmc,
struct regulator *supply,
unsigned short vdd_bit);
int mmc_regulator_set_vqmmc(struct mmc_host *mmc, struct mmc_ios *ios);
+int mmc_regulator_set_vqmmc2(struct mmc_host *mmc, struct mmc_ios *ios);
#else
static inline int mmc_regulator_set_ocr(struct mmc_host *mmc,
struct regulator *supply,
@@ -613,6 +618,12 @@ static inline int mmc_regulator_set_vqmmc(struct mmc_host *mmc,
{
return -EINVAL;
}
+
+static inline int mmc_regulator_set_vqmmc2(struct mmc_host *mmc,
+ struct mmc_ios *ios)
+{
+ return -EINVAL;
+}
#endif
int mmc_regulator_get_supply(struct mmc_host *mmc);
--
2.25.1
next prev parent reply other threads:[~2022-12-13 9:01 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-13 9:00 [PATCH V6 00/24] Add support UHS-II for GL9755 Victor Shih
2022-12-13 9:00 ` [PATCH V6 01/24] mmc: core: Cleanup printing of speed mode at card insertion Victor Shih
2023-01-05 21:22 ` Adrian Hunter
2023-02-24 10:22 ` Victor Shih
2022-12-13 9:00 ` [PATCH V6 02/24] mmc: core: Prepare to support SD UHS-II cards Victor Shih
2022-12-13 9:00 ` [PATCH V6 03/24] mmc: core: Announce successful insertion of an SD UHS-II card Victor Shih
2022-12-13 9:00 ` Victor Shih [this message]
2022-12-13 9:00 ` [PATCH V6 05/24] mmc: core: Add definitions for SD UHS-II cards Victor Shih
2023-02-06 16:13 ` Ulf Hansson
2023-02-24 10:23 ` Victor Shih
2023-02-27 15:29 ` Ulf Hansson
2023-02-07 10:59 ` Ulf Hansson
2022-12-13 9:00 ` [PATCH V6 06/24] mmc: core: Support UHS-II card control and access Victor Shih
2023-01-05 21:26 ` Adrian Hunter
2023-02-08 15:30 ` Ulf Hansson
2023-02-24 10:23 ` Victor Shih
2023-02-27 15:19 ` Ulf Hansson
2022-12-13 9:00 ` [PATCH V6 07/24] mmc: sdhci: add UHS-II related definitions in headers Victor Shih
2023-01-05 21:22 ` Adrian Hunter
2023-02-24 10:22 ` Victor Shih
2022-12-13 9:00 ` [PATCH V6 08/24] mmc: sdhci: add UHS-II module and add a kernel configuration Victor Shih
2022-12-13 9:00 ` [PATCH V6 09/24] mmc: sdhci-uhs2: dump UHS-II registers Victor Shih
2023-01-05 21:26 ` Adrian Hunter
2023-02-24 10:22 ` Victor Shih
2022-12-13 9:00 ` [PATCH V6 10/24] mmc: sdhci-uhs2: add reset function and uhs2_mode function Victor Shih
2022-12-13 9:00 ` [PATCH V6 11/24] mmc: sdhci-uhs2: add set_power() to support vdd2 Victor Shih
2023-01-05 21:27 ` Adrian Hunter
2023-02-24 10:22 ` Victor Shih
2022-12-13 9:00 ` [PATCH V6 12/24] mmc: sdhci-uhs2: skip signal_voltage_switch() Victor Shih
2022-12-13 9:00 ` [PATCH V6 13/24] mmc: sdhci-uhs2: add set_timeout() Victor Shih
2022-12-13 9:00 ` [PATCH V6 14/24] mmc: sdhci-uhs2: add set_ios() Victor Shih
2023-01-05 21:27 ` Adrian Hunter
2023-01-26 10:58 ` Victor Shih
2023-01-30 13:16 ` Adrian Hunter
2023-02-24 10:23 ` Victor Shih
2022-12-13 9:00 ` [PATCH V6 15/24] mmc: sdhci-uhs2: add detect_init() to detect the interface Victor Shih
2023-01-05 21:28 ` Adrian Hunter
2023-02-24 10:22 ` Victor Shih
2022-12-13 9:00 ` [PATCH V6 16/24] mmc: sdhci-uhs2: add clock operations Victor Shih
2022-12-13 9:00 ` [PATCH V6 17/24] mmc: sdhci-uhs2: add uhs2_control() to initialise the interface Victor Shih
2023-01-05 21:28 ` Adrian Hunter
2023-02-24 10:22 ` Victor Shih
2022-12-13 9:00 ` [PATCH V6 18/24] mmc: sdhci-uhs2: add request() and others Victor Shih
2023-01-05 21:29 ` Adrian Hunter
2023-02-24 10:22 ` Victor Shih
2022-12-13 9:00 ` [PATCH V6 19/24] mmc: sdhci-uhs2: add irq() " Victor Shih
2023-01-05 21:30 ` Adrian Hunter
2023-02-24 10:22 ` Victor Shih
2022-12-13 9:00 ` [PATCH V6 20/24] mmc: sdhci-uhs2: add add_host() and others to set up the driver Victor Shih
2023-01-05 21:30 ` Adrian Hunter
2023-02-24 10:23 ` Victor Shih
2022-12-13 9:00 ` [PATCH V6 21/24] mmc: sdhci-uhs2: add pre-detect_init hook Victor Shih
2022-12-13 9:00 ` [PATCH V6 22/24] mmc: sdhci-uhs2: add post-mmc_attach_sd hook Victor Shih
2023-01-05 21:31 ` Adrian Hunter
2023-02-24 10:23 ` Victor Shih
2022-12-13 9:00 ` [PATCH V6 23/24] mmc: sdhci-pci: add UHS-II support framework Victor Shih
2022-12-13 9:00 ` [PATCH V6 24/24] mmc: sdhci-pci-gli: enable UHS-II mode for GL9755 Victor Shih
2023-02-08 11:35 ` Ulf Hansson
2023-01-03 11:04 ` [PATCH V6 00/24] Add support UHS-II " Victor Shih
2023-01-03 11:47 ` Ulf Hansson
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=20221213090047.3805-5-victor.shih@genesyslogic.com.tw \
--to=victorshihgli@gmail.com \
--cc=Greg.tu@genesyslogic.com.tw \
--cc=HL.Liu@genesyslogic.com.tw \
--cc=adrian.hunter@intel.com \
--cc=benchuanggli@gmail.com \
--cc=dlunev@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=takahiro.akashi@linaro.org \
--cc=ulf.hansson@linaro.org \
--cc=victor.shih@genesyslogic.com.tw \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).