diff mbox

mmc: sdhci: check 1.2v IO capability for SDHC host

Message ID 20140814100559.GB3933@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Chuanxiao.Dong Aug. 14, 2014, 10:05 a.m. UTC
Right now enable 1.2v IO voltage for SDHC is by using vqmmc.
Thus for the host which doesn't have vqmmc, or its vqmmc does
not support 1.2v, directly use MMC_CAP2_HS200 may cause HS200
failure.

So needs to check if vqmmc is able to support 1.2v. If it does
not support, disable 1.2v IO for HS200.

Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com>
---
 drivers/mmc/host/sdhci.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Ulf Hansson Aug. 18, 2014, 9:38 a.m. UTC | #1
On 14 August 2014 12:05, Chuanxiao Dong <chuanxiao.dong@intel.com> wrote:
> Right now enable 1.2v IO voltage for SDHC is by using vqmmc.
> Thus for the host which doesn't have vqmmc, or its vqmmc does
> not support 1.2v, directly use MMC_CAP2_HS200 may cause HS200
> failure.
>
> So needs to check if vqmmc is able to support 1.2v. If it does
> not support, disable 1.2v IO for HS200.
>
> Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com>
> ---
>  drivers/mmc/host/sdhci.c |    6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index c026ec8..6b701e1 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -2999,8 +2999,12 @@ int sdhci_add_host(struct sdhci_host *host)
>                 /* SD3.0: SDR104 is supported so (for eMMC) the caps2
>                  * field can be promoted to support HS200.
>                  */
> -               if (!(host->quirks2 & SDHCI_QUIRK2_BROKEN_HS200))
> +               if (!(host->quirks2 & SDHCI_QUIRK2_BROKEN_HS200)) {
>                         mmc->caps2 |= MMC_CAP2_HS200;
> +                       if (!host->vqmmc || !regulator_is_supported_voltage

This needs a rebase and please use IS_ERR.

(!IS_ERR(mmc->supply.vqmmc) ...

Kind regards
Uffe


> +                                       (host->vqmmc, 1100000, 1300000))
> +                               mmc->caps2 &= ~MMC_CAP2_HS200_1_2V_SDR;
> +               }
>         } else if (caps[1] & SDHCI_SUPPORT_SDR50)
>                 mmc->caps |= MMC_CAP_UHS_SDR50;
>
> --
> 1.7.10.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Chuanxiao.Dong Aug. 19, 2014, 2:06 a.m. UTC | #2
> -----Original Message-----

> From: Ulf Hansson [mailto:ulf.hansson@linaro.org]

> Sent: Monday, August 18, 2014 5:39 PM

> To: Dong, Chuanxiao

> Cc: linux-mmc; chris@printf.org

> Subject: Re: [PATCH] mmc: sdhci: check 1.2v IO capability for SDHC host

> 

> On 14 August 2014 12:05, Chuanxiao Dong <chuanxiao.dong@intel.com>

> wrote:

> > Right now enable 1.2v IO voltage for SDHC is by using vqmmc.

> > Thus for the host which doesn't have vqmmc, or its vqmmc does not

> > support 1.2v, directly use MMC_CAP2_HS200 may cause HS200 failure.

> >

> > So needs to check if vqmmc is able to support 1.2v. If it does not

> > support, disable 1.2v IO for HS200.

> >

> > Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com>

> > ---

> >  drivers/mmc/host/sdhci.c |    6 +++++-

> >  1 file changed, 5 insertions(+), 1 deletion(-)

> >

> > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index

> > c026ec8..6b701e1 100644

> > --- a/drivers/mmc/host/sdhci.c

> > +++ b/drivers/mmc/host/sdhci.c

> > @@ -2999,8 +2999,12 @@ int sdhci_add_host(struct sdhci_host *host)

> >                 /* SD3.0: SDR104 is supported so (for eMMC) the caps2

> >                  * field can be promoted to support HS200.

> >                  */

> > -               if (!(host->quirks2 & SDHCI_QUIRK2_BROKEN_HS200))

> > +               if (!(host->quirks2 & SDHCI_QUIRK2_BROKEN_HS200)) {

> >                         mmc->caps2 |= MMC_CAP2_HS200;

> > +                       if (!host->vqmmc ||

> > + !regulator_is_supported_voltage

> 

> This needs a rebase and please use IS_ERR.

> 

> (!IS_ERR(mmc->supply.vqmmc) ...

Oh, I still use the old mmc-next tree. Will do the rebase;

Thanks
Chuanxiao

> 

> Kind regards

> Uffe

> 

> 

> > +                                       (host->vqmmc, 1100000,

> 1300000))

> > +                               mmc->caps2 &=

> ~MMC_CAP2_HS200_1_2V_SDR;

> > +               }

> >         } else if (caps[1] & SDHCI_SUPPORT_SDR50)

> >                 mmc->caps |= MMC_CAP_UHS_SDR50;

> >

> > --

> > 1.7.10.4

> >

> > --

> > To unsubscribe from this list: send the line "unsubscribe linux-mmc"

> > in the body of a message to majordomo@vger.kernel.org More majordomo

> > info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index c026ec8..6b701e1 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2999,8 +2999,12 @@  int sdhci_add_host(struct sdhci_host *host)
 		/* SD3.0: SDR104 is supported so (for eMMC) the caps2
 		 * field can be promoted to support HS200.
 		 */
-		if (!(host->quirks2 & SDHCI_QUIRK2_BROKEN_HS200))
+		if (!(host->quirks2 & SDHCI_QUIRK2_BROKEN_HS200)) {
 			mmc->caps2 |= MMC_CAP2_HS200;
+			if (!host->vqmmc || !regulator_is_supported_voltage
+					(host->vqmmc, 1100000, 1300000))
+				mmc->caps2 &= ~MMC_CAP2_HS200_1_2V_SDR;
+		}
 	} else if (caps[1] & SDHCI_SUPPORT_SDR50)
 		mmc->caps |= MMC_CAP_UHS_SDR50;