提交 ce437aa4 编写于 作者: L Linus Walleij 提交者: Ulf Hansson

mmc: mmci: augment driver to handle gpio descriptors

Currently the MMCI driver will only handle GPIO descriptors
implicitly through the device tree probe glue in mmc_of_init(),
but devices instatiated other ways such as through board files
and passing descriptors using the GPIO descriptor table will
not be able to exploit descriptors.

Augment the driver to look for a GPIO descriptor if device
tree is not used for the device, and if that doesn't work,
fall back to platform data GPIO assignment using the old
API. The end goal is to get rid of the platform data integer
GPIO assingments from the kernel.

This enable the MMCI-embedding platforms to be converted to
GPIO descritor tables.

Cc: Alexandre Courbot <gnurou@gmail.com>
Cc: Russell King <linux@arm.linux.org.uk>
Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
上级 98e90de9
...@@ -1674,17 +1674,36 @@ static int mmci_probe(struct amba_device *dev, ...@@ -1674,17 +1674,36 @@ static int mmci_probe(struct amba_device *dev,
writel(0, host->base + MMCIMASK1); writel(0, host->base + MMCIMASK1);
writel(0xfff, host->base + MMCICLEAR); writel(0xfff, host->base + MMCICLEAR);
/* If DT, cd/wp gpios must be supplied through it. */ /*
if (!np && gpio_is_valid(plat->gpio_cd)) { * If:
* - not using DT but using a descriptor table, or
* - using a table of descriptors ALONGSIDE DT, or
* look up these descriptors named "cd" and "wp" right here, fail
* silently of these do not exist and proceed to try platform data
*/
if (!np) {
ret = mmc_gpiod_request_cd(mmc, "cd", 0, false, 0);
if (ret < 0) {
if (ret == -EPROBE_DEFER)
goto clk_disable;
else if (gpio_is_valid(plat->gpio_cd)) {
ret = mmc_gpio_request_cd(mmc, plat->gpio_cd, 0); ret = mmc_gpio_request_cd(mmc, plat->gpio_cd, 0);
if (ret) if (ret)
goto clk_disable; goto clk_disable;
} }
if (!np && gpio_is_valid(plat->gpio_wp)) { }
ret = mmc_gpiod_request_ro(mmc, "wp", 0, false, 0);
if (ret < 0) {
if (ret == -EPROBE_DEFER)
goto clk_disable;
else if (gpio_is_valid(plat->gpio_wp)) {
ret = mmc_gpio_request_ro(mmc, plat->gpio_wp); ret = mmc_gpio_request_ro(mmc, plat->gpio_wp);
if (ret) if (ret)
goto clk_disable; goto clk_disable;
} }
}
}
ret = devm_request_irq(&dev->dev, dev->irq[0], mmci_irq, IRQF_SHARED, ret = devm_request_irq(&dev->dev, dev->irq[0], mmci_irq, IRQF_SHARED,
DRIVER_NAME " (cmd)", host); DRIVER_NAME " (cmd)", host);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册