On 23 June 2016 at 13:00, Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote: > host->card_busy() was introduced for SD voltage switching which checks all > 4 data lines. > > Increasingly, host->card_busy is being used to poll the the busy signal > which is only data line 0 (DAT[0]). > > The current logic in sdhci_card_busy() does not work in that case because > it returns false if any of the data lines is high. It also ignores > possibilities: > - data lines 1-3 are not connected and could show at any level > - data lines 1-2 can be used by SDIO for other purposes > > According to the SD specification, it is OK to check any of the data lines > for voltage switching, so change to use DAT[0] only. > > Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> > --- > > > It would probably be better for this patch to go before > "mmc: mmc: Use ->card_busy() to detect busy cards in __mmc_switch()" > Thanks, applied for next and prior the above mentioned patch! Kind regards Uffe > > drivers/mmc/host/sdhci.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c > index ec14b5d61fc6..15bdbcb99170 100644 > --- a/drivers/mmc/host/sdhci.c > +++ b/drivers/mmc/host/sdhci.c > @@ -1811,10 +1811,10 @@ static int sdhci_card_busy(struct mmc_host *mmc) > struct sdhci_host *host = mmc_priv(mmc); > u32 present_state; > > - /* Check whether DAT[3:0] is 0000 */ > + /* Check whether DAT[0] is 0 */ > present_state = sdhci_readl(host, SDHCI_PRESENT_STATE); > > - return !(present_state & SDHCI_DATA_LVL_MASK); > + return !(present_state & SDHCI_DATA_0_LVL_MASK); > } > > static int sdhci_prepare_hs400_tuning(struct mmc_host *mmc, struct mmc_ios *ios) > -- > 1.9.1 > -- 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