From: Josua Mayer <josua@solid-run.com>
To: Ulf Hansson <ulf.hansson@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Magnus Damm <magnus.damm@gmail.com>,
Wolfram Sang <wsa+renesas@sang-engineering.com>
Cc: Mikhail Anikin <mikhail.anikin@solid-run.com>,
Yazan Shhady <yazan.shhady@solid-run.com>,
Jon Nettleton <jon@solid-run.com>,
linux-mmc@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
Josua Mayer <josua@solid-run.com>
Subject: [PATCH v2 2/2] mmc: host: renesas_sdhi_core: support configuring an optional sdio mux
Date: Mon, 01 Dec 2025 13:31:11 +0100 [thread overview]
Message-ID: <20251201-rz-sdio-mux-v2-2-bcb581b88dd7@solid-run.com> (raw)
In-Reply-To: <20251201-rz-sdio-mux-v2-0-bcb581b88dd7@solid-run.com>
Some hardware designs route sdio signals through a mux to support
multiple devices on a single sdio controller.
In particular SolidRun RZ/G2L/G2LC/V2L System on Module use a mux for
switching between soldered eMMC and an optional microSD on a carrier
board, e.g. for development or provisioning.
SDIO is not well suited for runtime switching between different cards,
however boot-time selection is possible and useful in particular with dt
overlays.
Add support for an optional sdio mux defined in dt and select it during
probe.
Similar functionality already exists in other places, e.g. i2c-omap.
Signed-off-by: Josua Mayer <josua@solid-run.com>
---
drivers/mmc/host/Kconfig | 1 +
drivers/mmc/host/renesas_sdhi.h | 1 +
drivers/mmc/host/renesas_sdhi_core.c | 27 ++++++++++++++++++++++++---
3 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
index 2c963cb6724b9..c01ab7d81a5af 100644
--- a/drivers/mmc/host/Kconfig
+++ b/drivers/mmc/host/Kconfig
@@ -707,6 +707,7 @@ config MMC_SDHI
depends on SUPERH || ARCH_RENESAS || COMPILE_TEST
depends on (RESET_CONTROLLER && REGULATOR) || !OF
select MMC_TMIO_CORE
+ select MULTIPLEXER
help
This provides support for the SDHI SD/SDIO controller found in
Renesas SuperH, ARM and ARM64 based SoCs
diff --git a/drivers/mmc/host/renesas_sdhi.h b/drivers/mmc/host/renesas_sdhi.h
index 084964cecf9d8..9508908d8179f 100644
--- a/drivers/mmc/host/renesas_sdhi.h
+++ b/drivers/mmc/host/renesas_sdhi.h
@@ -97,6 +97,7 @@ struct renesas_sdhi {
struct reset_control *rstc;
struct tmio_mmc_host *host;
struct regulator_dev *rdev;
+ struct mux_state *mux_state;
};
#define host_to_priv(host) \
diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesas_sdhi_core.c
index f56fa2cd208dd..c58f412ea2028 100644
--- a/drivers/mmc/host/renesas_sdhi_core.c
+++ b/drivers/mmc/host/renesas_sdhi_core.c
@@ -26,6 +26,7 @@
#include <linux/mmc/mmc.h>
#include <linux/mmc/slot-gpio.h>
#include <linux/module.h>
+#include <linux/mux/consumer.h>
#include <linux/pinctrl/consumer.h>
#include <linux/pinctrl/pinctrl-state.h>
#include <linux/platform_data/tmio.h>
@@ -1061,6 +1062,7 @@ int renesas_sdhi_probe(struct platform_device *pdev,
struct regulator_dev *rdev;
struct renesas_sdhi_dma *dma_priv;
struct device *dev = &pdev->dev;
+ struct device_node *node = pdev->dev.of_node;
struct tmio_mmc_host *host;
struct renesas_sdhi *priv;
int num_irqs, irq, ret, i;
@@ -1115,9 +1117,25 @@ int renesas_sdhi_probe(struct platform_device *pdev,
"state_uhs");
}
+ if (of_property_present(node, "mux-states")) {
+ priv->mux_state = devm_mux_state_get(&pdev->dev, NULL);
+ if (IS_ERR(priv->mux_state)) {
+ ret = PTR_ERR(priv->mux_state);
+ dev_dbg(&pdev->dev, "failed to get SDIO mux: %d\n", ret);
+ return ret;
+ }
+ ret = mux_state_select(priv->mux_state);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to select SDIO mux: %d\n", ret);
+ return ret;
+ }
+ }
+
host = tmio_mmc_host_alloc(pdev, mmc_data);
- if (IS_ERR(host))
- return PTR_ERR(host);
+ if (IS_ERR(host)) {
+ ret = PTR_ERR(host);
+ goto edselmux;
+ }
priv->host = host;
@@ -1200,7 +1218,7 @@ int renesas_sdhi_probe(struct platform_device *pdev,
ret = renesas_sdhi_clk_enable(host);
if (ret)
- return ret;
+ goto edselmux;
rcfg.of_node = of_get_available_child_by_name(dev->of_node, "vqmmc-regulator");
if (rcfg.of_node) {
@@ -1304,6 +1322,9 @@ int renesas_sdhi_probe(struct platform_device *pdev,
edisclk:
renesas_sdhi_clk_disable(host);
+edselmux:
+ if (priv->mux_state)
+ mux_state_deselect(priv->mux_state);
return ret;
}
EXPORT_SYMBOL_GPL(renesas_sdhi_probe);
--
2.51.0
next prev parent reply other threads:[~2025-12-01 12:31 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-01 12:31 [PATCH v2 0/2] mmc: host: renesas_sdhi_core: support configuring an optional sdio mux Josua Mayer
2025-12-01 12:31 ` [PATCH v2 1/2] dt-bindings: mmc: renesas,sdhi: Add mux-states property Josua Mayer
2025-12-01 13:02 ` Biju Das
2025-12-01 14:00 ` Josua Mayer
2025-12-01 14:15 ` Biju Das
2025-12-08 1:25 ` Rob Herring (Arm)
2025-12-09 12:08 ` Ulf Hansson
2025-12-10 14:49 ` Josua Mayer
2025-12-01 12:31 ` Josua Mayer [this message]
2025-12-08 1:24 ` [PATCH v2 2/2] mmc: host: renesas_sdhi_core: support configuring an optional sdio mux Rob Herring
2025-12-10 14:54 ` Josua Mayer
2025-12-01 13:17 ` [PATCH v2 0/2] " Biju Das
2025-12-01 14:21 ` Josua Mayer
2025-12-01 14:27 ` Biju Das
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=20251201-rz-sdio-mux-v2-2-bcb581b88dd7@solid-run.com \
--to=josua@solid-run.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=geert+renesas@glider.be \
--cc=jon@solid-run.com \
--cc=krzk+dt@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=mikhail.anikin@solid-run.com \
--cc=robh@kernel.org \
--cc=ulf.hansson@linaro.org \
--cc=wsa+renesas@sang-engineering.com \
--cc=yazan.shhady@solid-run.com \
/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).