From: Ulf Hansson <ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
To: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
Russell King <linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>,
Linus Walleij
<linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Ulf Hansson <ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Subject: [PATCH 06/20] mmc: mmci: Use the common mmc DT parser
Date: Fri, 21 Mar 2014 13:14:03 +0100 [thread overview]
Message-ID: <1395404057-27835-7-git-send-email-ulf.hansson@linaro.org> (raw)
In-Reply-To: <1395404057-27835-1-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Let mmci DT parser only handle the specific bindings related to mmci
and extend the DT support by converting to the common mmc DT parser.
While both DT and platform data exist, DT takes precedence. If there
are supplied DT data, the card detect and write protect GPIOS are
enforced to be provided through it.
Signed-off-by: Ulf Hansson <ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
---
drivers/mmc/host/mmci.c | 92 +++++++++++++++++------------------------------
1 file changed, 33 insertions(+), 59 deletions(-)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 76e41ba..2e1d1b2 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -1386,58 +1386,31 @@ static struct mmc_host_ops mmci_ops = {
.start_signal_voltage_switch = mmci_sig_volt_switch,
};
-#ifdef CONFIG_OF
static void mmci_dt_populate_generic_pdata(struct device_node *np,
struct mmci_platform_data *pdata)
{
u32 sigdir = 0;
- int bus_width = 0;
if (!of_property_read_u32(np, "signal-direction", &sigdir)) {
sigdir &= MCI_ST_DATA2DIREN|MCI_ST_CMDDIREN|MCI_ST_DATA0DIREN|
MCI_ST_DATA31DIREN|MCI_ST_FBCLKEN|MCI_ST_DATA74DIREN;
pdata->sigdir = sigdir;
}
+}
- pdata->gpio_wp = of_get_named_gpio(np, "wp-gpios", 0);
- pdata->gpio_cd = of_get_named_gpio(np, "cd-gpios", 0);
-
- if (of_get_property(np, "cd-inverted", NULL))
- pdata->cd_invert = true;
- else
- pdata->cd_invert = false;
-
- of_property_read_u32(np, "max-frequency", &pdata->f_max);
- if (!pdata->f_max)
- pr_warn("%s has no 'max-frequency' property\n", np->full_name);
+static int mmci_of_parse(struct device_node *np, struct mmc_host *mmc)
+{
+ int ret = mmc_of_parse(mmc);
+ if (ret)
+ return ret;
if (of_get_property(np, "mmc-cap-mmc-highspeed", NULL))
- pdata->capabilities |= MMC_CAP_MMC_HIGHSPEED;
+ mmc->caps |= MMC_CAP_MMC_HIGHSPEED;
if (of_get_property(np, "mmc-cap-sd-highspeed", NULL))
- pdata->capabilities |= MMC_CAP_SD_HIGHSPEED;
+ mmc->caps |= MMC_CAP_SD_HIGHSPEED;
- of_property_read_u32(np, "bus-width", &bus_width);
- switch (bus_width) {
- case 0 :
- /* No bus-width supplied. */
- break;
- case 4 :
- pdata->capabilities |= MMC_CAP_4_BIT_DATA;
- break;
- case 8 :
- pdata->capabilities |= MMC_CAP_8_BIT_DATA;
- break;
- default :
- pr_warn("%s: Unsupported bus width\n", np->full_name);
- }
-}
-#else
-static void mmci_dt_populate_generic_pdata(struct device_node *np,
- struct mmci_platform_data *pdata)
-{
- return;
+ return 0;
}
-#endif
static int mmci_probe(struct amba_device *dev,
const struct amba_id *id)
@@ -1472,6 +1445,10 @@ static int mmci_probe(struct amba_device *dev,
if (!mmc)
return -ENOMEM;
+ ret = mmci_of_parse(np, mmc);
+ if (ret)
+ goto host_free;
+
host = mmc_priv(mmc);
host->mmc = mmc;
@@ -1525,14 +1502,15 @@ static int mmci_probe(struct amba_device *dev,
else
mmc->f_min = DIV_ROUND_UP(host->mclk, 512);
/*
- * If the platform data supplies a maximum operating
- * frequency, this takes precedence. Else, we fall back
- * to using the module parameter, which has a (low)
- * default value in case it is not specified. Either
- * value must not exceed the clock rate into the block,
- * of course.
+ * If no maximum operating frequency is supplied, fall back to use
+ * the module parameter, which has a (low) default value in case it
+ * is not specified. Either value must not exceed the clock rate into
+ * the block, of course. Also note that DT takes precedence over
+ * platform data.
*/
- if (plat->f_max)
+ if (mmc->f_max)
+ mmc->f_max = min(host->mclk, mmc->f_max);
+ else if (plat->f_max)
mmc->f_max = min(host->mclk, plat->f_max);
else
mmc->f_max = min(host->mclk, fmax);
@@ -1545,11 +1523,14 @@ static int mmci_probe(struct amba_device *dev,
else if (plat->ocr_mask)
dev_warn(mmc_dev(mmc), "Platform OCR mask is ignored\n");
- mmc->caps = plat->capabilities;
- mmc->caps2 = plat->capabilities2;
- if (!plat->cd_invert)
- mmc->caps2 |= MMC_CAP2_CD_ACTIVE_HIGH;
- mmc->caps2 |= MMC_CAP2_RO_ACTIVE_HIGH;
+ /* DT takes precedence over platform data. */
+ mmc->caps = np ? mmc->caps : plat->capabilities;
+ mmc->caps2 = np ? mmc->caps2 : plat->capabilities2;
+ if (!np) {
+ if (!plat->cd_invert)
+ mmc->caps2 |= MMC_CAP2_CD_ACTIVE_HIGH;
+ mmc->caps2 |= MMC_CAP2_RO_ACTIVE_HIGH;
+ }
if (variant->busy_detect) {
mmci_ops.card_busy = mmci_card_busy;
@@ -1561,7 +1542,7 @@ static int mmci_probe(struct amba_device *dev,
mmc->ops = &mmci_ops;
/* We support these PM capabilities. */
- mmc->pm_caps = MMC_PM_KEEP_POWER;
+ mmc->pm_caps |= MMC_PM_KEEP_POWER;
/*
* We can do SGIO
@@ -1598,20 +1579,13 @@ static int mmci_probe(struct amba_device *dev,
writel(0, host->base + MMCIMASK1);
writel(0xfff, host->base + MMCICLEAR);
- if (plat->gpio_cd == -EPROBE_DEFER) {
- ret = -EPROBE_DEFER;
- goto clk_disable;
- }
- if (gpio_is_valid(plat->gpio_cd)) {
+ /* If DT, cd/wp gpios must be supplied through it. */
+ if (!np && gpio_is_valid(plat->gpio_cd)) {
ret = mmc_gpio_request_cd(mmc, plat->gpio_cd, 0);
if (ret)
goto clk_disable;
}
- if (plat->gpio_wp == -EPROBE_DEFER) {
- ret = -EPROBE_DEFER;
- goto clk_disable;
- }
- if (gpio_is_valid(plat->gpio_wp)) {
+ if (!np && gpio_is_valid(plat->gpio_wp)) {
ret = mmc_gpio_request_ro(mmc, plat->gpio_wp);
if (ret)
goto clk_disable;
--
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2014-03-21 12:14 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-21 12:13 [PATCH 00/20] mmc: mmci: Improve DT support Ulf Hansson
[not found] ` <1395404057-27835-1-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-03-21 12:13 ` [PATCH 01/20] mmc: mmci: Convert to the mmc gpio API Ulf Hansson
2014-03-21 12:13 ` [PATCH 02/20] mmc: mmci: Convert to devm functions Ulf Hansson
2014-03-21 12:14 ` [PATCH 03/20] mmc: mmci: Update DT documentation Ulf Hansson
[not found] ` <1395404057-27835-4-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-03-21 15:03 ` Rob Herring
[not found] ` <CAL_JsqJbaxayELNt+d1VSfFyD58eRYQM=d15RaFcFQKbot3iaw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-24 9:03 ` Ulf Hansson
2014-03-21 12:14 ` [PATCH 04/20] mmc: mmci: Move signal directions bits into DT include file Ulf Hansson
[not found] ` <1395404057-27835-5-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-03-25 21:22 ` Linus Walleij
[not found] ` <CACRpkdZSr380FVHkx3uOMFKxKYsExoL-1WYhxVpirFMVc+T3Yw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-25 23:05 ` Ulf Hansson
[not found] ` <CAPDyKFq=PUcFkT901W15KXThzS4cKMJvZToW3JDc3SkXck9VHA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-28 21:03 ` Linus Walleij
[not found] ` <CACRpkdaNY1jM7xN00DEnOMdDxSf==3AqdrkRSXX3dghStvA4hw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-31 13:56 ` Ulf Hansson
2014-03-21 12:14 ` [PATCH 05/20] mmc: mmci: Add DT bindings for signal direction Ulf Hansson
[not found] ` <1395404057-27835-6-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-03-21 15:20 ` Rob Herring
[not found] ` <CAL_JsqLFJbC=ZVgc1xu9MN6iYN2871mxvZoJnAQJw3BQU07B+w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-24 9:14 ` Ulf Hansson
[not found] ` <CAPDyKFrupT7sbT5eBsTC61ELCp_OZTe==Jc_6KUqo9Wb4Xf5dQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-24 13:45 ` Rob Herring
2014-03-21 12:14 ` Ulf Hansson [this message]
2014-03-21 12:14 ` [PATCH 07/20] ARM: ux500: Add mmci signal directions in DT for href Ulf Hansson
2014-03-21 12:14 ` [PATCH 08/20] ARM: ux500: Convert to the common mmc DT bindings for highspeed mode Ulf Hansson
[not found] ` <1395404057-27835-9-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-03-25 21:37 ` Linus Walleij
2014-03-21 12:14 ` [PATCH 09/20] ARM: nomadik: " Ulf Hansson
[not found] ` <1395404057-27835-10-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-03-25 21:37 ` Linus Walleij
2014-03-21 12:14 ` [PATCH 10/20] ARM: u300: " Ulf Hansson
[not found] ` <1395404057-27835-11-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-03-25 21:38 ` Linus Walleij
2014-03-21 12:14 ` [PATCH 11/20] mmc: mmci: Mark the DT bindings for highspeed mode as deprecated Ulf Hansson
2014-03-21 12:14 ` [PATCH 12/20] mmc: mmci: Enable MMC_CAP_CMD23 Ulf Hansson
2014-03-21 12:14 ` [PATCH 13/20] ARM: ux500: Add the mmc capabilities flags to DT Ulf Hansson
[not found] ` <1395404057-27835-14-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-03-25 21:39 ` Linus Walleij
2014-03-21 12:14 ` [PATCH 14/20] regulator: db8500-prcmu: Set 1.8V as a fixed voltage for vsmps2 Ulf Hansson
[not found] ` <1395404057-27835-15-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-03-21 12:25 ` Mark Brown
[not found] ` <20140321122545.GP11706-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-03-21 13:03 ` Ulf Hansson
2014-03-21 17:47 ` Mark Brown
2014-03-21 12:14 ` [PATCH 15/20] ARM: ux500: Add a vmmc regulator through DT for the poped eMMC for href Ulf Hansson
[not found] ` <1395404057-27835-16-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-03-25 21:45 ` Linus Walleij
[not found] ` <CACRpkdbFFqQdWXOHyV8qmxnd0z2CKK9gZFS0ys5YLm2dES7bgQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-26 9:27 ` Ulf Hansson
2014-03-26 9:31 ` Ulf Hansson
2014-03-21 12:14 ` [PATCH 16/20] ARM: ux500: Remove redundant board file for mmci platform data Ulf Hansson
[not found] ` <1395404057-27835-17-git-send-email-ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-03-25 21:45 ` Linus Walleij
2014-03-21 12:14 ` [PATCH 17/20] mmc: mmci: Enforce DT for signal direction Ulf Hansson
2014-03-21 12:14 ` [PATCH 18/20] mmc: mmci: Enforce mmc capabilities through DT Ulf Hansson
2014-03-21 12:14 ` [PATCH 19/20] mmc: mmci: Enforce DMA configuration " Ulf Hansson
2014-03-21 12:14 ` [PATCH 20/20] mmc: mmci: Enforce max frequency " 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=1395404057-27835-7-git-send-email-ulf.hansson@linaro.org \
--to=ulf.hansson-qsej5fyqhm4dnm+yrofe0a@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.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: 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).