On 17/03/16 16:00, Ulf Hansson wrote: > On 17 March 2016 at 14:54, Ludovic Desroches > <ludovic.desroches@xxxxxxxxx> wrote: >> It is impossible to wake-up on card detect event because when sdhci >> controller is runtime suspended, it is assumed that all clocks are >> disabled so we can't get irqs. >> If the device is removable and there is no gpio to manage the card >> detection then polling is used. It doesn't mean card detection is broken. >> It is curently we only way to wake-up on card event if using runtime pm. >> >> Signed-off-by: Ludovic Desroches <ludovic.desroches@xxxxxxxxx> > > I have applied this for next (4.6) so to get it tested in linux-next. > > Adrian, please tell me if you have any objections then I will drop it > (or add your ack). It is fine by me. Acked-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> > > Thanks and kind regards > Uffe > >> --- >> >> Changes: >> - v2: >> - remove SDHCI_QUIRK_BROKEN_CARD_DETECTION quirk if set by the broken-cd >> property. >> >> drivers/mmc/host/sdhci-of-at91.c | 20 ++++++++++++++++++++ >> 1 file changed, 20 insertions(+) >> >> diff --git a/drivers/mmc/host/sdhci-of-at91.c b/drivers/mmc/host/sdhci-of-at91.c >> index 35c02fc..2703aa9 100644 >> --- a/drivers/mmc/host/sdhci-of-at91.c >> +++ b/drivers/mmc/host/sdhci-of-at91.c >> @@ -18,6 +18,7 @@ >> #include <linux/err.h> >> #include <linux/io.h> >> #include <linux/mmc/host.h> >> +#include <linux/mmc/slot-gpio.h> >> #include <linux/module.h> >> #include <linux/of.h> >> #include <linux/of_device.h> >> @@ -204,6 +205,25 @@ static int sdhci_at91_probe(struct platform_device *pdev) >> if (ret) >> goto pm_runtime_disable; >> >> + /* >> + * When calling sdhci_runtime_suspend_host(), the sdhci layer makes >> + * the assumption that all the clocks of the controller are disabled. >> + * It means we can't get irq from it when it is runtime suspended. >> + * For that reason, it is not planned to wake-up on a card detect irq >> + * from the controller. >> + * If we want to use runtime PM and to be able to wake-up on card >> + * insertion, we have to use a GPIO for the card detection or we can >> + * use polling. Be aware that using polling will resume/suspend the >> + * controller between each attempt. >> + * Disable SDHCI_QUIRK_BROKEN_CARD_DETECTION to be sure nobody tries >> + * to enable polling via device tree with broken-cd property. >> + */ >> + if (!(host->mmc->caps & MMC_CAP_NONREMOVABLE) && >> + IS_ERR_VALUE(mmc_gpio_get_cd(host->mmc))) { >> + host->mmc->caps |= MMC_CAP_NEEDS_POLL; >> + host->quirks &= ~SDHCI_QUIRK_BROKEN_CARD_DETECTION; >> + } >> + >> pm_runtime_put_autosuspend(&pdev->dev); >> >> return 0; >> -- >> 2.5.0 >> > -- 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