mmc:implemented HW reset callback in sdhci layer
PATCH v3 2/2 mmc:implemented HW reset callback in sdhci layer
Quoted 1 line
From
24a7a1fe58d4cbc49dde56adb442c97cbbaf690bMon Sep 17 00:00:00 2001
From: Chuanxiao Dong <[email protected]>
Date: Thu, 18 Nov 2010 10:34:42 +0800
Subject: [PATCH 2/2] mmc: implemented hardware reset callback for sdhci layer
The hardware reset callback in sdhci layer cannot really do a reset for eMMC card. It need the real hardware controller to trigger a RST_n signal to do so.
Different sdhci host controller need use reset_emmc callback to implement the RST_n signal.
Signed-off-by Chuanxiao Dong <[email protected]>
--- drivers/mmc/host/sdhci.c | 23 +++++++++++++++++++++++ drivers/mmc/host/sdhci.h | 10 ++++++++++ 2 files changed, 33 insertions(+), 0 deletions(-)
drivers/mmc/host/sdhci.c +23 -0
@@ -1266,11 +1266,34 @@ out:spin_unlock_irqrestore (&host->lock, flags); } +/* +* HW reset callback for eMMC4.4 card +* In this function, HC will do the real HW reset +* for eMMC4.4 card +* +* RETURN VALUE: +* 0: reset emmc successfully +* -ENODEV: no valid hardware to do so +*/ +static int sdhci_hardware_reset (struct mmc_host *mmc) +{ +int err =1 ; +struct sdhci_host *host; + + host =mmc_priv (mmc); + +if (host->ops && host->ops->reset_emmc) + err = host->ops->reset_emmc (host); + +return err; +} +static const struct mmc_host_ops sdhci_ops = { .request = sdhci_request, .set_ios = sdhci_set_ios, .get_ro = sdhci_get_ro, .enable_sdio_irq = sdhci_enable_sdio_irq, + .hardware_reset = sdhci_hardware_reset, };/*****************************************************************************\
drivers/mmc/host/sdhci.h +10 -0
@@ -218,6 +218,16 @@ struct sdhci_ops {void (*platform_send_init_74_clocks)(struct sdhci_host *host,u8 power_mode);unsigned int (*get_ro)(struct sdhci_host *host); +/* +* eMMC card reset callback. +* This callback can be used by sdhci layer to support eMMC4.4 +* hardware reset feature. In this function, should trigger a +* RST_n signal to reset eMMC card. +* return value: +* 0: successfully reset eMMC card. +* -ENODEV: no valid hardware to reset eMMC card. +*/ +int (*reset_emmc)(struct sdhci_host *host); };#ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
Signature · 1 line
1.6.6.1