ARM: 7562/2: MMCI: fetch pinctrl handle and set default state
authorLinus Walleij <linus.walleij@linaro.org>
Mon, 29 Oct 2012 13:39:30 +0000 (14:39 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 4 Nov 2012 10:31:46 +0000 (10:31 +0000)
This fetches the pinctrl resource for the MMCI driver, and if
a "default" state is found, it is activated.

Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/mmc/host/mmci.c
drivers/mmc/host/mmci.h

index cd0fbee0b1c0ad2e33da671cb2d7d7110c0c540b..9446c176e7442663fdea226f25fd35983679c2ef 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/amba/mmci.h>
 #include <linux/pm_runtime.h>
 #include <linux/types.h>
+#include <linux/pinctrl/consumer.h>
 
 #include <asm/div64.h>
 #include <asm/io.h>
@@ -1366,6 +1367,23 @@ static int __devinit mmci_probe(struct amba_device *dev,
                mmc->f_max = min(host->mclk, fmax);
        dev_dbg(mmc_dev(mmc), "clocking block at %u Hz\n", mmc->f_max);
 
+       host->pinctrl = devm_pinctrl_get(&dev->dev);
+       if (IS_ERR(host->pinctrl)) {
+               ret = PTR_ERR(host->pinctrl);
+               goto clk_disable;
+       }
+
+       host->pins_default = pinctrl_lookup_state(host->pinctrl,
+                       PINCTRL_STATE_DEFAULT);
+
+       /* enable pins to be muxed in and configured */
+       if (!IS_ERR(host->pins_default)) {
+               ret = pinctrl_select_state(host->pinctrl, host->pins_default);
+               if (ret)
+                       dev_warn(&dev->dev, "could not set default pins\n");
+       } else
+               dev_warn(&dev->dev, "could not get default pinstate\n");
+
 #ifdef CONFIG_REGULATOR
        /* If we're using the regulator framework, try to fetch a regulator */
        host->vcc = regulator_get(&dev->dev, "vmmc");
index d437ccf62d6bcc76a41862f68b48408f0711c5af..d34d8c0add8e640c3a65e1e772acb0ae61682837 100644 (file)
@@ -195,6 +195,10 @@ struct mmci_host {
        unsigned int            size;
        struct regulator        *vcc;
 
+       /* pinctrl handles */
+       struct pinctrl          *pinctrl;
+       struct pinctrl_state    *pins_default;
+
 #ifdef CONFIG_DMA_ENGINE
        /* DMA stuff */
        struct dma_chan         *dma_current;