[PATCH] mmc: core: Pass node pointer to mmc_of_parse

Jan Glauber
2017-01-21T10:59:56Z

Extend mmc_of_parse to get the device node pointer as an
additional argument instead of using the device node of the
mmc device.

While this has no effect for the current users it allows
mmc_of_parse to be used by mmc controllers with multiple slots
per device. These controllers can then pass the child node of the
slot.

Signed-off-by: Jan Glauber <jglauber@cavium.com>
---
drivers/mmc/core/host.c | 8 +++-----
drivers/mmc/host/davinci_mmc.c | 2 +-
drivers/mmc/host/dw_mmc.c | 2 +-
drivers/mmc/host/meson-gx-mmc.c | 2 +-
drivers/mmc/host/mmci.c | 2 +-
drivers/mmc/host/moxart-mmc.c | 2 +-
drivers/mmc/host/mtk-sd.c | 2 +-
drivers/mmc/host/mvsdio.c | 2 +-
drivers/mmc/host/mxcmmc.c | 2 +-
drivers/mmc/host/mxs-mmc.c | 2 +-
drivers/mmc/host/omap_hsmmc.c | 2 +-
drivers/mmc/host/sdhci-bcm-kona.c | 2 +-
drivers/mmc/host/sdhci-brcmstb.c | 2 +-
drivers/mmc/host/sdhci-cadence.c | 2 +-
drivers/mmc/host/sdhci-dove.c | 2 +-
drivers/mmc/host/sdhci-esdhc-imx.c | 2 +-
drivers/mmc/host/sdhci-iproc.c | 2 +-
drivers/mmc/host/sdhci-msm.c | 2 +-
drivers/mmc/host/sdhci-of-arasan.c | 2 +-
drivers/mmc/host/sdhci-of-at91.c | 2 +-
drivers/mmc/host/sdhci-of-esdhc.c | 2 +-
drivers/mmc/host/sdhci-pic32.c | 2 +-
drivers/mmc/host/sdhci-pxav3.c | 2 +-
drivers/mmc/host/sdhci-s3c.c | 2 +-
drivers/mmc/host/sdhci-st.c | 2 +-
drivers/mmc/host/sdhci-tegra.c | 2 +-
drivers/mmc/host/sdhci_f_sdh30.c | 2 +-
drivers/mmc/host/sh_mmcif.c | 2 +-
drivers/mmc/host/sunxi-mmc.c | 2 +-
drivers/mmc/host/tmio_mmc_pio.c | 2 +-
drivers/mmc/host/usdhi6rol0.c | 2 +-
include/linux/mmc/host.h | 2 +-
32 files changed, 34 insertions(+), 36 deletions(-)

diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
index 98f25ff..444faac 100644
--- a/drivers/mmc/core/host.c
+++ b/drivers/mmc/core/host.c
@@ -171,25 +171,23 @@ static void mmc_retune_timer(unsigned long data)
/**
* mmc_of_parse() - parse host's device-tree node
* @host: host whose node should be parsed.
+ * @np: node that should be parsed.
*
* To keep the rest of the MMC subsystem unaware of whether DT has been
* used to to instantiate and configure this host instance or not, we
* parse the properties and set respective generic mmc-host flags and
* parameters.
*/
-int mmc_of_parse(struct mmc_host *host)
+int mmc_of_parse(struct mmc_host *host, struct device_node *np)
{
- struct device_node *np;
u32 bus_width;
int ret;
bool cd_cap_invert, cd_gpio_invert = false;
bool ro_cap_invert, ro_gpio_invert = false;

- if (!host->parent || !host->parent->of_node)
+ if (!np)
return 0;

- np = host->parent->of_node;
-
/* "bus-width" is translated to MMC_CAP_*_BIT_DATA flags */
if (of_property_read_u32(np, "bus-width", &bus_width) < 0) {
dev_dbg(host->parent,
diff --git a/drivers/mmc/host/davinci_mmc.c b/drivers/mmc/host/davinci_mmc.c
index 36b5af8..1ce9375 100644
--- a/drivers/mmc/host/davinci_mmc.c
+++ b/drivers/mmc/host/davinci_mmc.c
@@ -1257,7 +1257,7 @@ static int __init davinci_mmcsd_probe(struct platform_device *pdev)
match = of_match_device(davinci_mmc_dt_ids, &pdev->dev);
if (match) {
pdev->id_entry = match->data;
- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, pdev->dev.of_node);
if (ret) {
dev_err(&pdev->dev,
"could not parse of data: %d\n", ret);
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index b44306b..0f10000 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -2673,7 +2673,7 @@ static int dw_mci_init_slot(struct dw_mci *host, unsigned int id)
if (host->pdata->caps2)
mmc->caps2 = host->pdata->caps2;

- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, host->dev->of_node);
if (ret)
goto err_host_allocated;

diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
index 0973935..2cfb959 100644
--- a/drivers/mmc/host/meson-gx-mmc.c
+++ b/drivers/mmc/host/meson-gx-mmc.c
@@ -740,7 +740,7 @@ static int meson_mmc_probe(struct platform_device *pdev)
if (ret == -EPROBE_DEFER)
goto free_host;

- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, pdev->dev.of_node);
if (ret) {
dev_warn(&pdev->dev, "error parsing DT: %d\n", ret);
goto free_host;
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 01a8047..36bb957 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -1505,7 +1505,7 @@ static struct mmc_host_ops mmci_ops = {
static int mmci_of_parse(struct device_node *np, struct mmc_host *mmc)
{
struct mmci_host *host = mmc_priv(mmc);
- int ret = mmc_of_parse(mmc);
+ int ret = mmc_of_parse(mmc, np);

if (ret)
return ret;
diff --git a/drivers/mmc/host/moxart-mmc.c b/drivers/mmc/host/moxart-mmc.c
index bbad309..c710d4f 100644
--- a/drivers/mmc/host/moxart-mmc.c
+++ b/drivers/mmc/host/moxart-mmc.c
@@ -599,7 +599,7 @@ static int moxart_probe(struct platform_device *pdev)
goto out;
}

- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, node);
if (ret)
goto out;

diff --git a/drivers/mmc/host/mtk-sd.c b/drivers/mmc/host/mtk-sd.c
index 10ef2ae..cdbe76c 100644
--- a/drivers/mmc/host/mtk-sd.c
+++ b/drivers/mmc/host/mtk-sd.c
@@ -1497,7 +1497,7 @@ static int msdc_drv_probe(struct platform_device *pdev)
return -ENOMEM;

host = mmc_priv(mmc);
- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, pdev->dev.of_node);
if (ret)
goto host_free;

diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c
index 42296e5..614372f 100644
--- a/drivers/mmc/host/mvsdio.c
+++ b/drivers/mmc/host/mvsdio.c
@@ -750,7 +750,7 @@ static int mvsd_probe(struct platform_device *pdev)
mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;

host->base_clock = clk_get_rate(host->clk) / 2;
- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, np);
if (ret < 0)
goto out;
if (maxfreq)
diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
index fb3ca82..2d180e0 100644
--- a/drivers/mmc/host/mxcmmc.c
+++ b/drivers/mmc/host/mxcmmc.c
@@ -1031,7 +1031,7 @@ static int mxcmci_probe(struct platform_device *pdev)

host->phys_base = res->start;

- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, pdev->dev.of_node);
if (ret)
goto out_free;
mmc->ops = &mxcmci_ops;
diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c
index c8b8ac6..f6bf639 100644
--- a/drivers/mmc/host/mxs-mmc.c
+++ b/drivers/mmc/host/mxs-mmc.c
@@ -649,7 +649,7 @@ static int mxs_mmc_probe(struct platform_device *pdev)
mmc->f_min = 400000;
mmc->f_max = 288000000;

- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, np);
if (ret)
goto out_clk_disable;

diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index ad11c4c..9f883d2 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -2028,7 +2028,7 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
goto err;
}

- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, pdev->dev.of_node);
if (ret)
goto err1;

diff --git a/drivers/mmc/host/sdhci-bcm-kona.c b/drivers/mmc/host/sdhci-bcm-kona.c
index 51dd2fd..ad4e129 100644
--- a/drivers/mmc/host/sdhci-bcm-kona.c
+++ b/drivers/mmc/host/sdhci-bcm-kona.c
@@ -235,7 +235,7 @@ static int sdhci_bcm_kona_probe(struct platform_device *pdev)
kona_dev = sdhci_pltfm_priv(pltfm_priv);
mutex_init(&kona_dev->write_lock);

- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, dev->of_node);
if (ret)
goto err_pltfm_free;

diff --git a/drivers/mmc/host/sdhci-brcmstb.c b/drivers/mmc/host/sdhci-brcmstb.c
index 159f6f6..2dc77cb 100644
--- a/drivers/mmc/host/sdhci-brcmstb.c
+++ b/drivers/mmc/host/sdhci-brcmstb.c
@@ -90,7 +90,7 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev)
host->mmc->caps2 |= MMC_CAP2_HC_ERASE_SZ;

sdhci_get_of_property(pdev);
- mmc_of_parse(host->mmc);
+ mmc_of_parse(host->mmc, pdev->dev.of_node);

/*
* Supply the existing CAPS, but clear the UHS modes. This
diff --git a/drivers/mmc/host/sdhci-cadence.c b/drivers/mmc/host/sdhci-cadence.c
index 4b0ecb9..20c363a 100644
--- a/drivers/mmc/host/sdhci-cadence.c
+++ b/drivers/mmc/host/sdhci-cadence.c
@@ -242,7 +242,7 @@ static int sdhci_cdns_probe(struct platform_device *pdev)
host->ioaddr += SDHCI_CDNS_SRS_BASE;
host->mmc_host_ops.execute_tuning = sdhci_cdns_execute_tuning;

- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, pdev->dev.of_node);
if (ret)
goto free;

diff --git a/drivers/mmc/host/sdhci-dove.c b/drivers/mmc/host/sdhci-dove.c
index de9f960..6b117b6 100644
--- a/drivers/mmc/host/sdhci-dove.c
+++ b/drivers/mmc/host/sdhci-dove.c
@@ -92,7 +92,7 @@ static int sdhci_dove_probe(struct platform_device *pdev)
if (!IS_ERR(pltfm_host->clk))
clk_prepare_enable(pltfm_host->clk);

- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, pdev->dev.of_node);
if (ret)
goto err_sdhci_add;

diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
index 7123ef9..32288ac 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -1098,7 +1098,7 @@ sdhci_esdhc_imx_probe_dt(struct platform_device *pdev,
}

/* call to generic mmc_of_parse to support additional capabilities */
- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, np);
if (ret)
return ret;

diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c
index d7046d6..244a167 100644
--- a/drivers/mmc/host/sdhci-iproc.c
+++ b/drivers/mmc/host/sdhci-iproc.c
@@ -253,7 +253,7 @@ static int sdhci_iproc_probe(struct platform_device *pdev)

iproc_host->data = iproc_data;

- mmc_of_parse(host->mmc);
+ mmc_of_parse(host->mmc, pdev->dev.of_node);
sdhci_get_of_property(pdev);

host->mmc->caps |= iproc_host->data->mmc_caps;
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
index 32879b8..0bd5764 100644
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
@@ -1066,7 +1066,7 @@ static int sdhci_msm_probe(struct platform_device *pdev)
msm_host->mmc = host->mmc;
msm_host->pdev = pdev;

- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, pdev->dev.of_node);
if (ret)
goto pltfm_free;

diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c
index 410a55b..205dae9 100644
--- a/drivers/mmc/host/sdhci-of-arasan.c
+++ b/drivers/mmc/host/sdhci-of-arasan.c
@@ -658,7 +658,7 @@ static int sdhci_arasan_probe(struct platform_device *pdev)
if (ret)
goto clk_disable_all;

- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, pdev->dev.of_node);
if (ret) {
dev_err(&pdev->dev, "parsing dt failed (%u)\n", ret);
goto unreg_clk;
diff --git a/drivers/mmc/host/sdhci-of-at91.c b/drivers/mmc/host/sdhci-of-at91.c
index 2f9ad21..4a335b6 100644
--- a/drivers/mmc/host/sdhci-of-at91.c
+++ b/drivers/mmc/host/sdhci-of-at91.c
@@ -260,7 +260,7 @@ static int sdhci_at91_probe(struct platform_device *pdev)
clk_prepare_enable(priv->mainck);
clk_prepare_enable(priv->gck);

- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, pdev->dev.of_node);
if (ret)
goto clocks_disable_unprepare;

diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c
index 9a6eb44..c48eaa1 100644
--- a/drivers/mmc/host/sdhci-of-esdhc.c
+++ b/drivers/mmc/host/sdhci-of-esdhc.c
@@ -659,7 +659,7 @@ static int sdhci_esdhc_probe(struct platform_device *pdev)
}

/* call to generic mmc_of_parse to support additional capabilities */
- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, np);
if (ret)
goto err;

diff --git a/drivers/mmc/host/sdhci-pic32.c b/drivers/mmc/host/sdhci-pic32.c
index 72c13b6..3703cb4 100644
--- a/drivers/mmc/host/sdhci-pic32.c
+++ b/drivers/mmc/host/sdhci-pic32.c
@@ -189,7 +189,7 @@ static int pic32_sdhci_probe(struct platform_device *pdev)
goto err_base_clk;
}

- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, pdev->dev.of_node);
if (ret)
goto err_base_clk;

diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c
index d0f5c05..6530c68 100644
--- a/drivers/mmc/host/sdhci-pxav3.c
+++ b/drivers/mmc/host/sdhci-pxav3.c
@@ -430,7 +430,7 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)

match = of_match_device(of_match_ptr(sdhci_pxav3_of_match), &pdev->dev);
if (match) {
- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, np);
if (ret)
goto err_of_parse;
sdhci_get_of_property(pdev);
diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c
index de219ca..f34c70b3 100644
--- a/drivers/mmc/host/sdhci-s3c.c
+++ b/drivers/mmc/host/sdhci-s3c.c
@@ -617,7 +617,7 @@ static int sdhci_s3c_probe(struct platform_device *pdev)
pm_runtime_use_autosuspend(&pdev->dev);
pm_suspend_ignore_children(&pdev->dev, 1);

- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, pdev->dev.of_node);
if (ret)
goto err_req_regs;

diff --git a/drivers/mmc/host/sdhci-st.c b/drivers/mmc/host/sdhci-st.c
index ed92ce72..6cb3f8a 100644
--- a/drivers/mmc/host/sdhci-st.c
+++ b/drivers/mmc/host/sdhci-st.c
@@ -388,7 +388,7 @@ static int sdhci_st_probe(struct platform_device *pdev)
pdata = sdhci_pltfm_priv(pltfm_host);
pdata->rstc = rstc;

- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, np);
if (ret) {
dev_err(&pdev->dev, "Failed mmc_of_parse\n");
goto err_of;
diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
index 20b6ff5..1748eb9 100644
--- a/drivers/mmc/host/sdhci-tegra.c
+++ b/drivers/mmc/host/sdhci-tegra.c
@@ -466,7 +466,7 @@ static int sdhci_tegra_probe(struct platform_device *pdev)
tegra_host->pad_calib_required = false;
tegra_host->soc_data = soc_data;

- rc = mmc_of_parse(host->mmc);
+ rc = mmc_of_parse(host->mmc, pdev->dev.of_node);
if (rc)
goto err_parse_dt;

diff --git a/drivers/mmc/host/sdhci_f_sdh30.c b/drivers/mmc/host/sdhci_f_sdh30.c
index 111b66f..afb054f 100644
--- a/drivers/mmc/host/sdhci_f_sdh30.c
+++ b/drivers/mmc/host/sdhci_f_sdh30.c
@@ -126,7 +126,7 @@ static int sdhci_f_sdh30_probe(struct platform_device *pdev)
host->quirks2 = SDHCI_QUIRK2_SUPPORT_SINGLE |
SDHCI_QUIRK2_TUNING_WORK_AROUND;

- ret = mmc_of_parse(host->mmc);
+ ret = mmc_of_parse(host->mmc, dev->of_node);
if (ret)
goto err;

diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
index 9007784..925dc47 100644
--- a/drivers/mmc/host/sh_mmcif.c
+++ b/drivers/mmc/host/sh_mmcif.c
@@ -1435,7 +1435,7 @@ static int sh_mmcif_probe(struct platform_device *pdev)
if (!mmc)
return -ENOMEM;

- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, dev->of_node);
if (ret < 0)
goto err_host;

diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c
index b1d1303..95772e0 100644
--- a/drivers/mmc/host/sunxi-mmc.c
+++ b/drivers/mmc/host/sunxi-mmc.c
@@ -1253,7 +1253,7 @@ static int sunxi_mmc_probe(struct platform_device *pdev)
if (host->cfg->clk_delays)
mmc->caps |= MMC_CAP_1_8V_DDR;

- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, pdev->dev.of_node);
if (ret)
goto error_free_dma;

diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c
index 2064fa1..9db27e7 100644
--- a/drivers/mmc/host/tmio_mmc_pio.c
+++ b/drivers/mmc/host/tmio_mmc_pio.c
@@ -1143,7 +1143,7 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host,
if (!res_ctl)
return -EINVAL;

- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, pdev->dev.of_node);
if (ret < 0)
goto host_free;

diff --git a/drivers/mmc/host/usdhi6rol0.c b/drivers/mmc/host/usdhi6rol0.c
index 1bd5f1a..cd728be 100644
--- a/drivers/mmc/host/usdhi6rol0.c
+++ b/drivers/mmc/host/usdhi6rol0.c
@@ -1760,7 +1760,7 @@ static int usdhi6_probe(struct platform_device *pdev)
if (ret == -EPROBE_DEFER)
goto e_free_mmc;

- ret = mmc_of_parse(mmc);
+ ret = mmc_of_parse(mmc, dev->of_node);
if (ret < 0)
goto e_free_mmc;

diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 8bc8841..cc6f909 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -401,7 +401,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *);
int mmc_add_host(struct mmc_host *);
void mmc_remove_host(struct mmc_host *);
void mmc_free_host(struct mmc_host *);
-int mmc_of_parse(struct mmc_host *host);
+int mmc_of_parse(struct mmc_host *host, struct device_node *);

static inline void *mmc_priv(struct mmc_host *host)
{
--
2.9.0.rc0.21.g7777322