Hi, Anton, No any feedback since posted. Could you give some comment about it? Best Regards Jerry Huang > -----Original Message----- > From: Huang Changming-R66093 > Sent: Tuesday, October 30, 2012 4:13 PM > To: linux-mmc@xxxxxxxxxxxxxxx > Cc: Huang Changming-R66093; Anton Vorontsov; Chris Ball > Subject: [PATCH 4/4 v4] ESDHC: add callback esdhc_of_get_cd to detect > card > > From: Jerry Huang <Chang-Ming.Huang@xxxxxxxxxxxxx> > > In order to check if the card is present, we will read the PRESENT STATE > register and check the bit13(Card detect pin level) and bit15(CINS). > > Signed-off-by: Jerry Huang <Chang-Ming.Huang@xxxxxxxxxxxxx> > CC: Anton Vorontsov <cbouatmailru@xxxxxxxxx> > CC: Chris Ball <cjb@xxxxxxxxxx> > --- > changes for v2: > - add new callback for esdhc to detect the card state > - add the CC > changes for v3: > - enable the controller clock when detect the card state, not core > changes for v4: > - based on the latest version > > drivers/mmc/host/sdhci-of-esdhc.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci- > of-esdhc.c > index 63d219f..7053218 100644 > --- a/drivers/mmc/host/sdhci-of-esdhc.c > +++ b/drivers/mmc/host/sdhci-of-esdhc.c > @@ -179,6 +179,28 @@ static void esdhc_of_platform_init(struct sdhci_host > *host) > host->quirks2 |= SDHCI_QUIRK2_HOST_NO_CMD23; > } > > +/* Return: none zero - the card is presetn; 0 - card is absent */ > +static int esdhc_of_get_cd(struct sdhci_host *host) > +{ > + int present; > + > + if (host->flags & SDHCI_DEVICE_DEAD) > + present = 0; > + else { > + int sysctl = sdhci_be32bs_readl(host, SDHCI_CLOCK_CONTROL); > + /* Enable the controller clock to update the present state */ > + sdhci_be32bs_writel(host, sysctl | SDHCI_CLOCK_INT_EN, > + SDHCI_CLOCK_CONTROL); > + /* Detect the card present or absent */ > + present = sdhci_be32bs_readl(host, SDHCI_PRESENT_STATE); > + present &= (SDHCI_CARD_PRESENT | SDHCI_CARD_CDPL); > + /* Resve the previous to System control register */ > + sdhci_be32bs_writel(host, sysctl, SDHCI_CLOCK_CONTROL); > + } > + > + return present; > +} > + > static struct sdhci_ops sdhci_esdhc_ops = { > .read_l = esdhc_readl, > .read_w = esdhc_readw, > @@ -191,6 +213,7 @@ static struct sdhci_ops sdhci_esdhc_ops = { > .get_max_clock = esdhc_of_get_max_clock, > .get_min_clock = esdhc_of_get_min_clock, > .platform_init = esdhc_of_platform_init, > + .get_cd = esdhc_of_get_cd, > #ifdef CONFIG_PM > .platform_suspend = esdhc_of_suspend, > .platform_resume = esdhc_of_resume, > -- > 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