2013/3/1 Philip Rakity <prakity@xxxxxxxxxx>: > > On Mar 1, 2013, at 9:40 AM, Kevin Liu <kliu5@xxxxxxxxxxx> wrote: > >> in function sdhci_request: >> 1. If quirk SDHCI_QUIRK_BROKEN_CARD_DETECTION is selected, there is no >> card detection available and polling must be used. Gpio detect must >> _not_ be supported under this case. >> Change the sequence to check SDHCI_QUIRK_BROKEN_CARD_DETECTION first, >> which make code more clear. >> 2. nonremovable card should be also assumed always present. >> >> in function sdhci_enable_irq_wakeups: >> 1. nonremovable card should be also assumed no insert/remove wakeup >> needed like some sdio cards which is nonremovable and can wakeup host >> only by card int. >> >> Signed-off-by: Kevin Liu <kliu5@xxxxxxxxxxx> >> --- >> drivers/mmc/host/sdhci.c | 30 ++++++++++++++++-------------- >> 1 file changed, 16 insertions(+), 14 deletions(-) >> >> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c >> index c94fd6c..e4ada0d 100644 >> --- a/drivers/mmc/host/sdhci.c >> +++ b/drivers/mmc/host/sdhci.c >> @@ -1337,19 +1337,20 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) >> >> host->mrq = mrq; >> >> - /* >> - * Firstly check card presence from cd-gpio. The return could >> - * be one of the following possibilities: >> - * negative: cd-gpio is not available >> - * zero: cd-gpio is used, and card is removed >> - * one: cd-gpio is used, and card is present >> - */ >> - present = mmc_gpio_get_cd(host->mmc); >> - if (present < 0) { >> - /* If polling, assume that the card is always present. */ >> - if (host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) >> - present = 1; >> - else >> + /* If polling/nonremovable, assume that the card is always present. */ >> + if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) || >> + (host->mmc->caps & MMC_CAP_NONREMOVABLE)) { >> + present = 1; >> + } else { >> + /* >> + * Firstly check card presence from cd-gpio. The return could >> + * be one of the following possibilities: >> + * negative: cd-gpio is not available >> + * zero: cd-gpio is used, and card is removed >> + * one: cd-gpio is used, and card is present >> + */ >> + present = mmc_gpio_get_cd(host->mmc); >> + if (IS_ERR_VALUE(present)) >> present = sdhci_readl(host, SDHCI_PRESENT_STATE) & >> SDHCI_CARD_PRESENT; > > Hi Kevin > > does it make sense to move this logic to a more generic function (static inline ?) > int sdhci_card_present () > > and encapsulate all the logic there for gpio cd, present state (card is there) etc. > > Philip > Philip, Good idea...Will call the function "sdhci_do_get_cd" introdunced in my previous patch. Thanks! Kevin >> } >> @@ -2504,7 +2505,8 @@ void sdhci_enable_irq_wakeups(struct sdhci_host *host) >> val = sdhci_readb(host, SDHCI_WAKE_UP_CONTROL); >> val |= mask ; >> /* Avoid fake wake up */ >> - if (host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) >> + if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) || >> + (host->mmc->caps & MMC_CAP_NONREMOVABLE)) >> val &= ~(SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE); >> sdhci_writeb(host, val, SDHCI_WAKE_UP_CONTROL); >> } >> -- >> 1.7.9.5 >> > -- 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