Message ID | 1350892326-5125-1-git-send-email-linus.walleij@stericsson.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Acked-by: Ulf Hansson <ulf.hansson@linaro.org> On 22 October 2012 09:52, Linus Walleij <linus.walleij@stericsson.com> wrote: > From: Linus Walleij <linus.walleij@linaro.org> > > This fetches the pinctrl resource for the MMCI driver, and if > a "default" state is found, it is activated. > > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> > --- > drivers/mmc/host/mmci.c | 18 ++++++++++++++++++ > drivers/mmc/host/mmci.h | 4 ++++ > 2 files changed, 22 insertions(+) > > diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c > index edc3e9b..269566d 100644 > --- a/drivers/mmc/host/mmci.c > +++ b/drivers/mmc/host/mmci.c > @@ -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> > @@ -1360,6 +1361,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_err(&dev->dev, "could not set default pins\n"); > + } else > + dev_err(&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"); > diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h > index d437ccf..d34d8c0 100644 > --- a/drivers/mmc/host/mmci.h > +++ b/drivers/mmc/host/mmci.h > @@ -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; > -- > 1.7.11.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-mmc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Oct 22, 2012 at 09:52:06AM +0200, Linus Walleij wrote: > + /* 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_err(&dev->dev, "could not set default pins\n"); > + } else > + dev_err(&dev->dev, "could not get default pinstate\n"); Umm, are these errors or warnings? Arguably, because we continue, these seem to me to be warnings. In my mind, a warning message is one which is reporting a condition which we can continue from, whereas an error message is a condition which causes immediate failure. (Think about GCC... with warnings you still get code, but the code may not be correct, but if you see an error message you don't get any code.)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index edc3e9b..269566d 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c @@ -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> @@ -1360,6 +1361,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_err(&dev->dev, "could not set default pins\n"); + } else + dev_err(&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"); diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h index d437ccf..d34d8c0 100644 --- a/drivers/mmc/host/mmci.h +++ b/drivers/mmc/host/mmci.h @@ -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;