mmc: sdhci: spear: Use the slot GPIO descriptor

Message ID 20180923063320.8844-1-linus.walleij@linaro.org
State New
Headers show
Series
  • mmc: sdhci: spear: Use the slot GPIO descriptor
Related show

Commit Message

Linus Walleij Sept. 23, 2018, 6:33 a.m.
This driver is complicating things for no reason: the "cd"
GPIO can easily be retrieved from the device tree if present
using just mmc_gpiod_request_cd(), which will fetch the
descriptor from the device tree using the standard binding
just fine.

Cc: Viresh Kumar <vireshk@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

---
 drivers/mmc/host/sdhci-spear.c | 33 +++++----------------------------
 1 file changed, 5 insertions(+), 28 deletions(-)

-- 
2.17.1

Comments

Ulf Hansson Sept. 26, 2018, 11:48 p.m. | #1
On 23 September 2018 at 08:33, Linus Walleij <linus.walleij@linaro.org> wrote:
> This driver is complicating things for no reason: the "cd"

> GPIO can easily be retrieved from the device tree if present

> using just mmc_gpiod_request_cd(), which will fetch the

> descriptor from the device tree using the standard binding

> just fine.

>

> Cc: Viresh Kumar <vireshk@kernel.org>

> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>


Applied for next, thanks!

Kind regards
Uffe

> ---

>  drivers/mmc/host/sdhci-spear.c | 33 +++++----------------------------

>  1 file changed, 5 insertions(+), 28 deletions(-)

>

> diff --git a/drivers/mmc/host/sdhci-spear.c b/drivers/mmc/host/sdhci-spear.c

> index 9247d51f2eed..916b5b09c3d1 100644

> --- a/drivers/mmc/host/sdhci-spear.c

> +++ b/drivers/mmc/host/sdhci-spear.c

> @@ -15,13 +15,11 @@

>

>  #include <linux/clk.h>

>  #include <linux/delay.h>

> -#include <linux/gpio.h>

>  #include <linux/highmem.h>

>  #include <linux/module.h>

>  #include <linux/interrupt.h>

>  #include <linux/irq.h>

>  #include <linux/of.h>

> -#include <linux/of_gpio.h>

>  #include <linux/platform_device.h>

>  #include <linux/pm.h>

>  #include <linux/slab.h>

> @@ -32,7 +30,6 @@

>

>  struct spear_sdhci {

>         struct clk *clk;

> -       int card_int_gpio;

>  };

>

>  /* sdhci ops */

> @@ -43,18 +40,6 @@ static const struct sdhci_ops sdhci_pltfm_ops = {

>         .set_uhs_signaling = sdhci_set_uhs_signaling,

>  };

>

> -static void sdhci_probe_config_dt(struct device_node *np,

> -                               struct spear_sdhci *host)

> -{

> -       int cd_gpio;

> -

> -       cd_gpio = of_get_named_gpio(np, "cd-gpios", 0);

> -       if (!gpio_is_valid(cd_gpio))

> -               cd_gpio = -1;

> -

> -       host->card_int_gpio = cd_gpio;

> -}

> -

>  static int sdhci_probe(struct platform_device *pdev)

>  {

>         struct sdhci_host *host;

> @@ -109,21 +94,13 @@ static int sdhci_probe(struct platform_device *pdev)

>                 dev_dbg(&pdev->dev, "Error setting desired clk, clk=%lu\n",

>                                 clk_get_rate(sdhci->clk));

>

> -       sdhci_probe_config_dt(pdev->dev.of_node, sdhci);

>         /*

> -        * It is optional to use GPIOs for sdhci card detection. If

> -        * sdhci->card_int_gpio < 0, then use original sdhci lines otherwise

> -        * GPIO lines. We use the built-in GPIO support for this.

> +        * It is optional to use GPIOs for sdhci card detection. If we

> +        * find a descriptor using slot GPIO, we use it.

>          */

> -       if (sdhci->card_int_gpio >= 0) {

> -               ret = mmc_gpio_request_cd(host->mmc, sdhci->card_int_gpio, 0);

> -               if (ret < 0) {

> -                       dev_dbg(&pdev->dev,

> -                               "failed to request card-detect gpio%d\n",

> -                               sdhci->card_int_gpio);

> -                       goto disable_clk;

> -               }

> -       }

> +       ret = mmc_gpiod_request_cd(host->mmc, "cd", 0, false, 0, NULL);

> +       if (ret == -EPROBE_DEFER)

> +               goto disable_clk;

>

>         ret = sdhci_add_host(host);

>         if (ret)

> --

> 2.17.1

>

Patch

diff --git a/drivers/mmc/host/sdhci-spear.c b/drivers/mmc/host/sdhci-spear.c
index 9247d51f2eed..916b5b09c3d1 100644
--- a/drivers/mmc/host/sdhci-spear.c
+++ b/drivers/mmc/host/sdhci-spear.c
@@ -15,13 +15,11 @@ 
 
 #include <linux/clk.h>
 #include <linux/delay.h>
-#include <linux/gpio.h>
 #include <linux/highmem.h>
 #include <linux/module.h>
 #include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/of.h>
-#include <linux/of_gpio.h>
 #include <linux/platform_device.h>
 #include <linux/pm.h>
 #include <linux/slab.h>
@@ -32,7 +30,6 @@ 
 
 struct spear_sdhci {
 	struct clk *clk;
-	int card_int_gpio;
 };
 
 /* sdhci ops */
@@ -43,18 +40,6 @@  static const struct sdhci_ops sdhci_pltfm_ops = {
 	.set_uhs_signaling = sdhci_set_uhs_signaling,
 };
 
-static void sdhci_probe_config_dt(struct device_node *np,
-				struct spear_sdhci *host)
-{
-	int cd_gpio;
-
-	cd_gpio = of_get_named_gpio(np, "cd-gpios", 0);
-	if (!gpio_is_valid(cd_gpio))
-		cd_gpio = -1;
-
-	host->card_int_gpio = cd_gpio;
-}
-
 static int sdhci_probe(struct platform_device *pdev)
 {
 	struct sdhci_host *host;
@@ -109,21 +94,13 @@  static int sdhci_probe(struct platform_device *pdev)
 		dev_dbg(&pdev->dev, "Error setting desired clk, clk=%lu\n",
 				clk_get_rate(sdhci->clk));
 
-	sdhci_probe_config_dt(pdev->dev.of_node, sdhci);
 	/*
-	 * It is optional to use GPIOs for sdhci card detection. If
-	 * sdhci->card_int_gpio < 0, then use original sdhci lines otherwise
-	 * GPIO lines. We use the built-in GPIO support for this.
+	 * It is optional to use GPIOs for sdhci card detection. If we
+	 * find a descriptor using slot GPIO, we use it.
 	 */
-	if (sdhci->card_int_gpio >= 0) {
-		ret = mmc_gpio_request_cd(host->mmc, sdhci->card_int_gpio, 0);
-		if (ret < 0) {
-			dev_dbg(&pdev->dev,
-				"failed to request card-detect gpio%d\n",
-				sdhci->card_int_gpio);
-			goto disable_clk;
-		}
-	}
+	ret = mmc_gpiod_request_cd(host->mmc, "cd", 0, false, 0, NULL);
+	if (ret == -EPROBE_DEFER)
+		goto disable_clk;
 
 	ret = sdhci_add_host(host);
 	if (ret)