mmc: jz4740: Let the pinctrl driver configure the pins
authorPaul Cercueil <paul@crapouillou.net>
Fri, 12 May 2017 16:53:03 +0000 (18:53 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 22 May 2017 15:20:02 +0000 (17:20 +0200)
Now that the JZ4740 and similar SoCs have a pinctrl driver, we rely on
the pins being properly configured before the driver probes.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/mmc/host/jz4740_mmc.c

index 57e254aac48d01beb14e51b9512da74e4513b57a..7db8c7a8d38df162879199be9a4941387d243f2f 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/irq.h>
 #include <linux/interrupt.h>
 #include <linux/module.h>
+#include <linux/pinctrl/consumer.h>
 #include <linux/platform_device.h>
 #include <linux/delay.h>
 #include <linux/scatterlist.h>
@@ -27,7 +28,6 @@
 
 #include <linux/bitops.h>
 #include <linux/gpio.h>
-#include <asm/mach-jz4740/gpio.h>
 #include <asm/cacheflush.h>
 #include <linux/dma-mapping.h>
 #include <linux/dmaengine.h>
@@ -901,15 +901,6 @@ static const struct mmc_host_ops jz4740_mmc_ops = {
        .enable_sdio_irq = jz4740_mmc_enable_sdio_irq,
 };
 
-static const struct jz_gpio_bulk_request jz4740_mmc_pins[] = {
-       JZ_GPIO_BULK_PIN(MSC_CMD),
-       JZ_GPIO_BULK_PIN(MSC_CLK),
-       JZ_GPIO_BULK_PIN(MSC_DATA0),
-       JZ_GPIO_BULK_PIN(MSC_DATA1),
-       JZ_GPIO_BULK_PIN(MSC_DATA2),
-       JZ_GPIO_BULK_PIN(MSC_DATA3),
-};
-
 static int jz4740_mmc_request_gpio(struct device *dev, int gpio,
        const char *name, bool output, int value)
 {
@@ -973,15 +964,6 @@ static void jz4740_mmc_free_gpios(struct platform_device *pdev)
                gpio_free(pdata->gpio_power);
 }
 
-static inline size_t jz4740_mmc_num_pins(struct jz4740_mmc_host *host)
-{
-       size_t num_pins = ARRAY_SIZE(jz4740_mmc_pins);
-       if (host->pdata && host->pdata->data_1bit)
-               num_pins -= 3;
-
-       return num_pins;
-}
-
 static int jz4740_mmc_probe(struct platform_device* pdev)
 {
        int ret;
@@ -1022,15 +1004,9 @@ static int jz4740_mmc_probe(struct platform_device* pdev)
                goto err_free_host;
        }
 
-       ret = jz_gpio_bulk_request(jz4740_mmc_pins, jz4740_mmc_num_pins(host));
-       if (ret) {
-               dev_err(&pdev->dev, "Failed to request mmc pins: %d\n", ret);
-               goto err_free_host;
-       }
-
        ret = jz4740_mmc_request_gpios(mmc, pdev);
        if (ret)
-               goto err_gpio_bulk_free;
+               goto err_release_dma;
 
        mmc->ops = &jz4740_mmc_ops;
        mmc->f_min = JZ_MMC_CLK_RATE / 128;
@@ -1086,10 +1062,9 @@ err_free_irq:
        free_irq(host->irq, host);
 err_free_gpios:
        jz4740_mmc_free_gpios(pdev);
-err_gpio_bulk_free:
+err_release_dma:
        if (host->use_dma)
                jz4740_mmc_release_dma_channels(host);
-       jz_gpio_bulk_free(jz4740_mmc_pins, jz4740_mmc_num_pins(host));
 err_free_host:
        mmc_free_host(mmc);
 
@@ -1109,7 +1084,6 @@ static int jz4740_mmc_remove(struct platform_device *pdev)
        free_irq(host->irq, host);
 
        jz4740_mmc_free_gpios(pdev);
-       jz_gpio_bulk_free(jz4740_mmc_pins, jz4740_mmc_num_pins(host));
 
        if (host->use_dma)
                jz4740_mmc_release_dma_channels(host);
@@ -1123,20 +1097,12 @@ static int jz4740_mmc_remove(struct platform_device *pdev)
 
 static int jz4740_mmc_suspend(struct device *dev)
 {
-       struct jz4740_mmc_host *host = dev_get_drvdata(dev);
-
-       jz_gpio_bulk_suspend(jz4740_mmc_pins, jz4740_mmc_num_pins(host));
-
-       return 0;
+       return pinctrl_pm_select_sleep_state(dev);
 }
 
 static int jz4740_mmc_resume(struct device *dev)
 {
-       struct jz4740_mmc_host *host = dev_get_drvdata(dev);
-
-       jz_gpio_bulk_resume(jz4740_mmc_pins, jz4740_mmc_num_pins(host));
-
-       return 0;
+       return pinctrl_pm_select_default_state(dev);
 }
 
 static SIMPLE_DEV_PM_OPS(jz4740_mmc_pm_ops, jz4740_mmc_suspend,