提交 2cd17224 编写于 作者: S Simon Baatz 提交者: Chris Ball

mmc: mvsdio: use standard MMC device-tree binding parser mmc_of_parse()

Instead of parsing the DT binding on our own, use the standard parser
mmc_of_parse(), introduced by commit 6c56e7a0.
Signed-off-by: NSimon Baatz <gmbnomis@gmail.com>
Tested-by: NAndrew Lunn <andrew@lunn.ch>
Signed-off-by: NChris Ball <cjb@laptop.org>
上级 47caa84f
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
#define DRIVER_NAME "mvsdio" #define DRIVER_NAME "mvsdio"
static int maxfreq = MVSD_CLOCKRATE_MAX; static int maxfreq;
static int nodma; static int nodma;
struct mvsd_host { struct mvsd_host {
...@@ -685,7 +685,6 @@ static int __init mvsd_probe(struct platform_device *pdev) ...@@ -685,7 +685,6 @@ static int __init mvsd_probe(struct platform_device *pdev)
const struct mbus_dram_target_info *dram; const struct mbus_dram_target_info *dram;
struct resource *r; struct resource *r;
int ret, irq; int ret, irq;
int gpio_card_detect, gpio_write_protect;
struct pinctrl *pinctrl; struct pinctrl *pinctrl;
r = platform_get_resource(pdev, IORESOURCE_MEM, 0); r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
...@@ -718,6 +717,20 @@ static int __init mvsd_probe(struct platform_device *pdev) ...@@ -718,6 +717,20 @@ static int __init mvsd_probe(struct platform_device *pdev)
if (!IS_ERR(host->clk)) if (!IS_ERR(host->clk))
clk_prepare_enable(host->clk); clk_prepare_enable(host->clk);
mmc->ops = &mvsd_ops;
mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
mmc->f_min = DIV_ROUND_UP(host->base_clock, MVSD_BASE_DIV_MAX);
mmc->f_max = MVSD_CLOCKRATE_MAX;
mmc->max_blk_size = 2048;
mmc->max_blk_count = 65535;
mmc->max_segs = 1;
mmc->max_seg_size = mmc->max_blk_size * mmc->max_blk_count;
mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
if (np) { if (np) {
if (IS_ERR(host->clk)) { if (IS_ERR(host->clk)) {
dev_err(&pdev->dev, "DT platforms must have a clock associated\n"); dev_err(&pdev->dev, "DT platforms must have a clock associated\n");
...@@ -726,35 +739,38 @@ static int __init mvsd_probe(struct platform_device *pdev) ...@@ -726,35 +739,38 @@ static int __init mvsd_probe(struct platform_device *pdev)
} }
host->base_clock = clk_get_rate(host->clk) / 2; host->base_clock = clk_get_rate(host->clk) / 2;
gpio_card_detect = of_get_named_gpio(np, "cd-gpios", 0); ret = mmc_of_parse(mmc);
gpio_write_protect = of_get_named_gpio(np, "wp-gpios", 0); if (ret < 0)
goto out;
} else { } else {
const struct mvsdio_platform_data *mvsd_data; const struct mvsdio_platform_data *mvsd_data;
mvsd_data = pdev->dev.platform_data; mvsd_data = pdev->dev.platform_data;
if (!mvsd_data) { if (!mvsd_data) {
ret = -ENXIO; ret = -ENXIO;
goto out; goto out;
} }
mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ |
MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED;
host->base_clock = mvsd_data->clock / 2; host->base_clock = mvsd_data->clock / 2;
gpio_card_detect = mvsd_data->gpio_card_detect ? : -EINVAL; /* GPIO 0 regarded as invalid for backward compatibility */
gpio_write_protect = mvsd_data->gpio_write_protect ? : -EINVAL; if (mvsd_data->gpio_card_detect &&
} gpio_is_valid(mvsd_data->gpio_card_detect)) {
ret = mmc_gpio_request_cd(mmc,
mmc->ops = &mvsd_ops; mvsd_data->gpio_card_detect);
if (ret)
mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; goto out;
mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ | } else {
MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED; mmc->caps |= MMC_CAP_NEEDS_POLL;
}
mmc->f_min = DIV_ROUND_UP(host->base_clock, MVSD_BASE_DIV_MAX);
mmc->f_max = maxfreq;
mmc->max_blk_size = 2048; if (mvsd_data->gpio_write_protect &&
mmc->max_blk_count = 65535; gpio_is_valid(mvsd_data->gpio_write_protect))
mmc_gpio_request_ro(mmc, mvsd_data->gpio_write_protect);
}
mmc->max_segs = 1; if (maxfreq)
mmc->max_seg_size = mmc->max_blk_size * mmc->max_blk_count; mmc->f_max = maxfreq;
mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
spin_lock_init(&host->lock); spin_lock_init(&host->lock);
...@@ -777,15 +793,6 @@ static int __init mvsd_probe(struct platform_device *pdev) ...@@ -777,15 +793,6 @@ static int __init mvsd_probe(struct platform_device *pdev)
goto out; goto out;
} }
if (gpio_is_valid(gpio_card_detect)) {
ret = mmc_gpio_request_cd(mmc, gpio_card_detect);
if (ret)
goto out;
} else
mmc->caps |= MMC_CAP_NEEDS_POLL;
mmc_gpio_request_ro(mmc, gpio_write_protect);
setup_timer(&host->timer, mvsd_timeout_timer, (unsigned long)host); setup_timer(&host->timer, mvsd_timeout_timer, (unsigned long)host);
platform_set_drvdata(pdev, mmc); platform_set_drvdata(pdev, mmc);
ret = mmc_add_host(mmc); ret = mmc_add_host(mmc);
...@@ -793,10 +800,10 @@ static int __init mvsd_probe(struct platform_device *pdev) ...@@ -793,10 +800,10 @@ static int __init mvsd_probe(struct platform_device *pdev)
goto out; goto out;
if (!(mmc->caps & MMC_CAP_NEEDS_POLL)) if (!(mmc->caps & MMC_CAP_NEEDS_POLL))
dev_notice(&pdev->dev, "using GPIO %d for card detection\n", dev_notice(&pdev->dev, "using GPIO for card detection\n");
gpio_card_detect);
else else
dev_notice(&pdev->dev, "lacking card detect (fall back to polling)\n"); dev_notice(&pdev->dev,
"lacking card detect (fall back to polling)\n");
return 0; return 0;
out: out:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册