
Signed-off-by: Ziyuan Xu xzy.xu@rock-chips.com ---
drivers/mmc/sdhci.c | 19 +++++++++++++++++++ include/sdhci.h | 1 + 2 files changed, 20 insertions(+)
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c index 58cc0ab..48bac04 100644 --- a/drivers/mmc/sdhci.c +++ b/drivers/mmc/sdhci.c @@ -424,6 +424,23 @@ static void sdhci_set_power(struct sdhci_host *host, unsigned short power) }
#ifdef CONFIG_DM_MMC_OPS +static bool sdhci_card_busy(struct udevice *dev) +{ + struct mmc *mmc = mmc_get_mmc_dev(dev); +#else +static bool sdhci_card_busy(struct mmc *mmc) +{ +#endif + struct sdhci_host *host = mmc->priv; + u32 present_state; + + /* Check whether DAT[0] is 0 */ + present_state = sdhci_readl(host, SDHCI_PRESENT_STATE); + + return !(present_state & SDHCI_DATA_0_LVL); +} + +#ifdef CONFIG_DM_MMC_OPS static int sdhci_set_ios(struct udevice *dev) { struct mmc *mmc = mmc_get_mmc_dev(dev); @@ -510,11 +527,13 @@ int sdhci_probe(struct udevice *dev) }
const struct dm_mmc_ops sdhci_ops = { + .card_busy = sdhci_card_busy, .send_cmd = sdhci_send_command, .set_ios = sdhci_set_ios, }; #else static const struct mmc_ops sdhci_ops = { + .card_busy = sdhci_card_busy, .send_cmd = sdhci_send_command, .set_ios = sdhci_set_ios, .init = sdhci_init, diff --git a/include/sdhci.h b/include/sdhci.h index 6a43271..75432db 100644 --- a/include/sdhci.h +++ b/include/sdhci.h @@ -64,6 +64,7 @@ #define SDHCI_CARD_STATE_STABLE BIT(17) #define SDHCI_CARD_DETECT_PIN_LEVEL BIT(18) #define SDHCI_WRITE_PROTECT BIT(19) +#define SDHCI_DATA_0_LVL BIT(20)
#define SDHCI_HOST_CONTROL 0x28 #define SDHCI_CTRL_LED BIT(0)