From 7a8255d9442cb35ec6e7c3ed2b0a71d9a0711c1b Mon Sep 17 00:00:00 2001 From: Robert Nelson Date: Tue, 1 Apr 2014 16:55:30 -0500 Subject: [PATCH 1/9] Revert "mmc: mxs: use mmc_of_parse to parse devicetree properties" This reverts commit d1a1dfb2f5dad3fbcea71b95791d525f4775cff5. --- drivers/mmc/host/mxs-mmc.c | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c index 073e871..13016e2 100644 --- a/drivers/mmc/host/mxs-mmc.c +++ b/drivers/mmc/host/mxs-mmc.c @@ -76,11 +76,7 @@ static int mxs_mmc_get_cd(struct mmc_host *mmc) { struct mxs_mmc_host *host = mmc_priv(mmc); struct mxs_ssp *ssp = &host->ssp; - int present, ret; - - ret = mmc_gpio_get_cd(mmc); - if (ret >= 0) - return ret; + int present; present = !(readl(ssp->base + HW_SSP_STATUS(ssp)) & BM_SSP_STATUS_CARD_DETECT); @@ -568,12 +564,15 @@ static int mxs_mmc_probe(struct platform_device *pdev) { const struct of_device_id *of_id = of_match_device(mxs_mmc_dt_ids, &pdev->dev); + struct device_node *np = pdev->dev.of_node; struct mxs_mmc_host *host; struct mmc_host *mmc; struct resource *iores; - int ret = 0, irq_err; + int ret = 0, irq_err, gpio; struct regulator *reg_vmmc; + enum of_gpio_flags flags; struct mxs_ssp *ssp; + u32 bus_width = 0; iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); irq_err = platform_get_irq(pdev, 0); @@ -634,13 +633,29 @@ static int mxs_mmc_probe(struct platform_device *pdev) mmc->caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SDIO_IRQ | MMC_CAP_NEEDS_POLL; - mmc->f_min = 400000; - mmc->f_max = 288000000; + of_property_read_u32(np, "bus-width", &bus_width); + if (bus_width == 4) + mmc->caps |= MMC_CAP_4_BIT_DATA; + else if (bus_width == 8) + mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA; + if (of_property_read_bool(np, "broken-cd")) + mmc->caps |= MMC_CAP_NEEDS_POLL; + if (of_property_read_bool(np, "non-removable")) + mmc->caps |= MMC_CAP_NONREMOVABLE; + gpio = of_get_named_gpio_flags(np, "wp-gpios", 0, &flags); + if (gpio_is_valid(gpio)) { + ret = mmc_gpio_request_ro(mmc, gpio); + if (ret) + goto out_clk_disable; + if (!(flags & OF_GPIO_ACTIVE_LOW)) + mmc->caps2 |= MMC_CAP2_RO_ACTIVE_HIGH; + } - ret = mmc_of_parse(mmc); - if (ret) - goto out_clk_disable; + if (of_property_read_bool(np, "cd-inverted")) + mmc->caps2 |= MMC_CAP2_CD_ACTIVE_HIGH; + mmc->f_min = 400000; + mmc->f_max = 288000000; mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; mmc->max_segs = 52; -- 1.9.0