On 27 August 2014 15:13, Linus Walleij <linus.walleij@xxxxxxxxxx> wrote: > 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@xxxxxxxxx> > Cc: Russell King <linux@xxxxxxxxxxxxxxxx> > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> Thanks! Applied for next. Kind regards Uffe > --- > ChangeLog v1->v2: > - Skip excess error/info/debug report prints. > --- > drivers/mmc/host/mmci.c | 39 +++++++++++++++++++++++++++++---------- > 1 file changed, 29 insertions(+), 10 deletions(-) > > diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c > index e4d470704150..4aec22439d0e 100644 > --- a/drivers/mmc/host/mmci.c > +++ b/drivers/mmc/host/mmci.c > @@ -1658,16 +1658,35 @@ static int mmci_probe(struct amba_device *dev, > writel(0, host->base + MMCIMASK1); > writel(0xfff, host->base + MMCICLEAR); > > - /* If DT, cd/wp gpios must be supplied through it. */ > - if (!np && gpio_is_valid(plat->gpio_cd)) { > - ret = mmc_gpio_request_cd(mmc, plat->gpio_cd, 0); > - if (ret) > - goto clk_disable; > - } > - if (!np && gpio_is_valid(plat->gpio_wp)) { > - ret = mmc_gpio_request_ro(mmc, plat->gpio_wp); > - if (ret) > - goto clk_disable; > + /* > + * 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); > + if (ret) > + goto clk_disable; > + } > + } > + > + 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); > + if (ret) > + goto clk_disable; > + } > + } > } > > ret = devm_request_irq(&dev->dev, dev->irq[0], mmci_irq, IRQF_SHARED, > -- > 1.9.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-mmc" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html