diff mbox

[1/3] mmc: sdhci: let GPIO based card detection have higher precedence

Message ID 1435312810-23957-2-git-send-email-ivan.ivanov@linaro.org (mailing list archive)
State Not Applicable, archived
Delegated to: Andy Gross
Headers show

Commit Message

Ivan T. Ivanov June 26, 2015, 10 a.m. UTC
Controller could have BROKEN_CARD_DETECTION quirk set, but drivers
could use GPIO to detect card present state. Let, when defined, GPIO
take precedence, so drivers could properly detect card state and not
use polling.

Signed-off-by: Ivan T. Ivanov <ivan.ivanov@linaro.org>
---
 drivers/mmc/host/sdhci.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

--
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Adrian Hunter June 26, 2015, 10:19 a.m. UTC | #1
On 26/06/15 13:00, Ivan T. Ivanov wrote:
> Controller could have BROKEN_CARD_DETECTION quirk set, but drivers
> could use GPIO to detect card present state. Let, when defined, GPIO
> take precedence, so drivers could properly detect card state and not
> use polling.
> 
> Signed-off-by: Ivan T. Ivanov <ivan.ivanov@linaro.org>
> ---
>  drivers/mmc/host/sdhci.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index bc14452..8bafb9f 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -1601,15 +1601,18 @@ static int sdhci_do_get_cd(struct sdhci_host *host)
>  	if (host->flags & SDHCI_DEVICE_DEAD)
>  		return 0;
> 
> +	/*
> +	 * Try slot gpio detect, if defined it take precedence
> +	 * over build in controller functionality
> +	 */
> +	if (!IS_ERR_VALUE(gpio_cd))
> +		return !!gpio_cd;
> +

You've also put it above the MMC_CAP_NONREMOVABLE check which doesn't seem
right.

>  	/* If polling/nonremovable, assume that the card is always present. */
>  	if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) ||
>  	    (host->mmc->caps & MMC_CAP_NONREMOVABLE))
>  		return 1;
> 
> -	/* Try slot gpio detect */
> -	if (!IS_ERR_VALUE(gpio_cd))
> -		return !!gpio_cd;
> -
>  	/* Host native card detect */
>  	return !!(sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT);
>  }
> --
> 1.9.1
> 
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ivan T. Ivanov June 26, 2015, 11 a.m. UTC | #2
On Fri, 2015-06-26 at 13:19 +0300, Adrian Hunter wrote:
> On 26/06/15 13:00, Ivan T. Ivanov wrote:
> > Controller could have BROKEN_CARD_DETECTION quirk set, but drivers
> > could use GPIO to detect card present state. Let, when defined, GPIO
> > take precedence, so drivers could properly detect card state and not
> > use polling.
> > 
> > Signed-off-by: Ivan T. Ivanov ivanov@linaro.org>
> > ---
> >  drivers/mmc/host/sdhci.c | 11 +++++++----
> >  1 file changed, 7 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> > index bc14452..8bafb9f 100644
> > --- a/drivers/mmc/host/sdhci.c
> > +++ b/drivers/mmc/host/sdhci.c
> > @@ -1601,15 +1601,18 @@ static int sdhci_do_get_cd(struct sdhci_host *host)
> >         if (host->flags & SDHCI_DEVICE_DEAD)
> >                 return 0;
> > 
> > +       /*
> > +               * Try slot gpio detect, if defined it take precedence
> > +               * over build in controller functionality
> > +               */
> > +       if (!IS_ERR_VALUE(gpio_cd))
> > +               return !!gpio_cd;
> > +
> 
> You've also put it above the MMC_CAP_NONREMOVABLE check which doesn't seem
> right.
> 

Probably, but what are the chances that this is valid GIO for non-removable cards.
I could rework it if you insist.

Thank you,
Ivan

> >         /* If polling/nonremovable, assume that the card is always present. */
> >         if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) ||
> >                                         (host->mmc->caps & MMC_CAP_NONREMOVABLE))
> >                 return 1;
> > 
> > -       /* Try slot gpio detect */
> > -       if (!IS_ERR_VALUE(gpio_cd))
> > -               return !!gpio_cd;
> > -
> >         /* Host native card detect */
> >         return !!(sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT);
> >  }
> > --
> > 1.9.1
> > 
> > 
> > 
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Adrian Hunter June 26, 2015, 11:09 a.m. UTC | #3
On 26/06/15 14:00, Ivan T. Ivanov wrote:
> 
> On Fri, 2015-06-26 at 13:19 +0300, Adrian Hunter wrote:
>> On 26/06/15 13:00, Ivan T. Ivanov wrote:
>>> Controller could have BROKEN_CARD_DETECTION quirk set, but drivers
>>> could use GPIO to detect card present state. Let, when defined, GPIO
>>> take precedence, so drivers could properly detect card state and not
>>> use polling.
>>>
>>> Signed-off-by: Ivan T. Ivanov ivanov@linaro.org>
>>> ---
>>>  drivers/mmc/host/sdhci.c | 11 +++++++----
>>>  1 file changed, 7 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
>>> index bc14452..8bafb9f 100644
>>> --- a/drivers/mmc/host/sdhci.c
>>> +++ b/drivers/mmc/host/sdhci.c
>>> @@ -1601,15 +1601,18 @@ static int sdhci_do_get_cd(struct sdhci_host *host)
>>>         if (host->flags & SDHCI_DEVICE_DEAD)
>>>                 return 0;
>>>
>>> +       /*
>>> +               * Try slot gpio detect, if defined it take precedence
>>> +               * over build in controller functionality
>>> +               */
>>> +       if (!IS_ERR_VALUE(gpio_cd))
>>> +               return !!gpio_cd;
>>> +
>>
>> You've also put it above the MMC_CAP_NONREMOVABLE check which doesn't seem
>> right.
>>
> 
> Probably, but what are the chances that this is valid GIO for non-removable cards.
> I could rework it if you insist.

It is nicer not to have to think "what are the chances", and nicer that the
logic is strictly correct, so yes please.

> 
> Thank you,
> Ivan
> 
>>>         /* If polling/nonremovable, assume that the card is always present. */
>>>         if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) ||
>>>                                         (host->mmc->caps & MMC_CAP_NONREMOVABLE))
>>>                 return 1;
>>>
>>> -       /* Try slot gpio detect */
>>> -       if (!IS_ERR_VALUE(gpio_cd))
>>> -               return !!gpio_cd;
>>> -
>>>         /* Host native card detect */
>>>         return !!(sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT);
>>>  }
>>> --
>>> 1.9.1
>>>
>>>
>>>
>>
>>
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ivan T. Ivanov June 26, 2015, 11:12 a.m. UTC | #4
On Fri, 2015-06-26 at 14:09 +0300, Adrian Hunter wrote:
> On 26/06/15 14:00, Ivan T. Ivanov wrote:
> > On Fri, 2015-06-26 at 13:19 +0300, Adrian Hunter wrote:
> > > On 26/06/15 13:00, Ivan T. Ivanov wrote:
> > > > Controller could have BROKEN_CARD_DETECTION quirk set, but drivers
> > > > could use GPIO to detect card present state. Let, when defined, GPIO
> > > > take precedence, so drivers could properly detect card state and not
> > > > use polling.
> > > > 
> > > > Signed-off-by: Ivan T. Ivanov ivanov@linaro.org>
> > > > ---
> > > >  drivers/mmc/host/sdhci.c | 11 +++++++----
> > > >  1 file changed, 7 insertions(+), 4 deletions(-)
> > > > 
> > > > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> > > > index bc14452..8bafb9f 100644
> > > > --- a/drivers/mmc/host/sdhci.c
> > > > +++ b/drivers/mmc/host/sdhci.c
> > > > @@ -1601,15 +1601,18 @@ static int sdhci_do_get_cd(struct sdhci_host *host)
> > > >         if (host->flags & SDHCI_DEVICE_DEAD)
> > > >                 return 0;
> > > > 
> > > > +       /*
> > > > +               * Try slot gpio detect, if defined it take precedence
> > > > +               * over build in controller functionality
> > > > +               */
> > > > +       if (!IS_ERR_VALUE(gpio_cd))
> > > > +               return !!gpio_cd;
> > > > +
> > > 
> > > You've also put it above the MMC_CAP_NONREMOVABLE check which doesn't seem
> > > right.
> > > 
> > 
> > Probably, but what are the chances that this is valid GIO for non-removable cards.
> > I could rework it if you insist.
> 
> It is nicer not to have to think "what are the chances", and nicer that the
> logic is strictly correct, so yes please.
> 

Sure, will do.

Thanks,
Ivan
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" 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 bc14452..8bafb9f 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1601,15 +1601,18 @@  static int sdhci_do_get_cd(struct sdhci_host *host)
 	if (host->flags & SDHCI_DEVICE_DEAD)
 		return 0;

+	/*
+	 * Try slot gpio detect, if defined it take precedence
+	 * over build in controller functionality
+	 */
+	if (!IS_ERR_VALUE(gpio_cd))
+		return !!gpio_cd;
+
 	/* If polling/nonremovable, assume that the card is always present. */
 	if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) ||
 	    (host->mmc->caps & MMC_CAP_NONREMOVABLE))
 		return 1;

-	/* Try slot gpio detect */
-	if (!IS_ERR_VALUE(gpio_cd))
-		return !!gpio_cd;
-
 	/* Host native card detect */
 	return !!(sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT);
 }