Re: [PATCH v2] mmc: sdhci: update check code for cd-broken or nonremovable card

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux