mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 13:44:15 +08:00
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 6c56e7a
.
Signed-off-by: Simon Baatz <gmbnomis@gmail.com>
Tested-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
parent
47caa84fb6
commit
2cd1722496
@ -35,7 +35,7 @@
|
||||
|
||||
#define DRIVER_NAME "mvsdio"
|
||||
|
||||
static int maxfreq = MVSD_CLOCKRATE_MAX;
|
||||
static int maxfreq;
|
||||
static int nodma;
|
||||
|
||||
struct mvsd_host {
|
||||
@ -685,7 +685,6 @@ static int __init mvsd_probe(struct platform_device *pdev)
|
||||
const struct mbus_dram_target_info *dram;
|
||||
struct resource *r;
|
||||
int ret, irq;
|
||||
int gpio_card_detect, gpio_write_protect;
|
||||
struct pinctrl *pinctrl;
|
||||
|
||||
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
@ -718,6 +717,20 @@ static int __init mvsd_probe(struct platform_device *pdev)
|
||||
if (!IS_ERR(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 (IS_ERR(host->clk)) {
|
||||
dev_err(&pdev->dev, "DT platforms must have a clock associated\n");
|
||||
@ -726,36 +739,39 @@ static int __init mvsd_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
host->base_clock = clk_get_rate(host->clk) / 2;
|
||||
gpio_card_detect = of_get_named_gpio(np, "cd-gpios", 0);
|
||||
gpio_write_protect = of_get_named_gpio(np, "wp-gpios", 0);
|
||||
ret = mmc_of_parse(mmc);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
} else {
|
||||
const struct mvsdio_platform_data *mvsd_data;
|
||||
|
||||
mvsd_data = pdev->dev.platform_data;
|
||||
if (!mvsd_data) {
|
||||
ret = -ENXIO;
|
||||
goto out;
|
||||
}
|
||||
host->base_clock = mvsd_data->clock / 2;
|
||||
gpio_card_detect = mvsd_data->gpio_card_detect ? : -EINVAL;
|
||||
gpio_write_protect = mvsd_data->gpio_write_protect ? : -EINVAL;
|
||||
}
|
||||
|
||||
mmc->ops = &mvsd_ops;
|
||||
|
||||
mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
|
||||
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;
|
||||
/* GPIO 0 regarded as invalid for backward compatibility */
|
||||
if (mvsd_data->gpio_card_detect &&
|
||||
gpio_is_valid(mvsd_data->gpio_card_detect)) {
|
||||
ret = mmc_gpio_request_cd(mmc,
|
||||
mvsd_data->gpio_card_detect);
|
||||
if (ret)
|
||||
goto out;
|
||||
} else {
|
||||
mmc->caps |= MMC_CAP_NEEDS_POLL;
|
||||
}
|
||||
|
||||
mmc->f_min = DIV_ROUND_UP(host->base_clock, MVSD_BASE_DIV_MAX);
|
||||
if (mvsd_data->gpio_write_protect &&
|
||||
gpio_is_valid(mvsd_data->gpio_write_protect))
|
||||
mmc_gpio_request_ro(mmc, mvsd_data->gpio_write_protect);
|
||||
}
|
||||
|
||||
if (maxfreq)
|
||||
mmc->f_max = maxfreq;
|
||||
|
||||
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;
|
||||
|
||||
spin_lock_init(&host->lock);
|
||||
|
||||
host->base = devm_request_and_ioremap(&pdev->dev, r);
|
||||
@ -777,15 +793,6 @@ static int __init mvsd_probe(struct platform_device *pdev)
|
||||
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);
|
||||
platform_set_drvdata(pdev, mmc);
|
||||
ret = mmc_add_host(mmc);
|
||||
@ -793,10 +800,10 @@ static int __init mvsd_probe(struct platform_device *pdev)
|
||||
goto out;
|
||||
|
||||
if (!(mmc->caps & MMC_CAP_NEEDS_POLL))
|
||||
dev_notice(&pdev->dev, "using GPIO %d for card detection\n",
|
||||
gpio_card_detect);
|
||||
dev_notice(&pdev->dev, "using GPIO for card detection\n");
|
||||
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;
|
||||
|
||||
out:
|
||||
|
Loading…
Reference in New Issue
Block a user