mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 16:01:44 -04:00
mmc: host: renesas_sdhi_core: support selecting an optional mux
Some hardware designs route data or control signals through a mux to support multiple devices on a single sdhi 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. SD/SDIO/eMMC are not well suited for runtime switching between different cards, however boot-time selection is possible and useful - in particular considering dt overlays. Add support for an optional SD/SDIO/eMMC 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> Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
@@ -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>
|
||||
@@ -1062,6 +1063,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 mux_state *mux_state;
|
||||
struct tmio_mmc_host *host;
|
||||
struct renesas_sdhi *priv;
|
||||
int num_irqs, irq, ret, i;
|
||||
@@ -1116,6 +1118,10 @@ int renesas_sdhi_probe(struct platform_device *pdev,
|
||||
"state_uhs");
|
||||
}
|
||||
|
||||
mux_state = devm_mux_state_get_optional_selected(&pdev->dev, NULL);
|
||||
if (IS_ERR(mux_state))
|
||||
return PTR_ERR(mux_state);
|
||||
|
||||
host = tmio_mmc_host_alloc(pdev, mmc_data);
|
||||
if (IS_ERR(host))
|
||||
return PTR_ERR(host);
|
||||
|
||||
Reference in New Issue
Block a user