linux-mmc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 3/3] MMC/SD: add callback function to detect card
@ 2009-12-04  7:55 r66093
  2010-01-06  2:40 ` Huang Changming-R66093
  2010-08-27 19:05 ` Chris Ball
  0 siblings, 2 replies; 9+ messages in thread
From: r66093 @ 2009-12-04  7:55 UTC (permalink / raw)
  To: linux-mmc; +Cc: Jerry Huang

From: Jerry Huang <Chang-Ming.Huang@freescale.com>

Add callback function to check if the card has been removed.

in order to check if the card has been removed, the function mmc_send_status will send commad CMD13 to card and ask the card to send its status register to driver, which will generate interrupt repeatly and make the system bad.
Therefore, get_cd callback is used to detect the card if the driver has.

Signed-off-by: Jerry Huang <Chang-Ming.Huang@freescale.com>
---
 drivers/mmc/core/mmc.c |    5 ++++-
 drivers/mmc/core/sd.c  |    5 ++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 06084db..c5c676d 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -494,7 +494,10 @@ static void mmc_detect(struct mmc_host *host)
 	/*
 	 * Just check if our card has been removed.
 	 */
-	err = mmc_send_status(host->card, NULL);
+	if (host->ops->get_cd)
+		err = !host->ops->get_cd(host);
+	else
+		err = mmc_send_status(host->card, NULL);
 
 	mmc_release_host(host);
 
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index cd81c39..3cf1f38 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -548,7 +548,10 @@ static void mmc_sd_detect(struct mmc_host *host)
 	/*
 	 * Just check if our card has been removed.
 	 */
-	err = mmc_send_status(host->card, NULL);
+	if (host->ops->get_cd)
+		err = !host->ops->get_cd(host);
+	else
+		err = mmc_send_status(host->card, NULL);
 
 	mmc_release_host(host);
 
-- 
1.6.4


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* RE: [PATCH 3/3] MMC/SD: add callback function to detect card
  2009-12-04  7:55 [PATCH 3/3] MMC/SD: add callback function to detect card r66093
@ 2010-01-06  2:40 ` Huang Changming-R66093
  2010-08-27 19:05 ` Chris Ball
  1 sibling, 0 replies; 9+ messages in thread
From: Huang Changming-R66093 @ 2010-01-06  2:40 UTC (permalink / raw)
  To: Huang Changming-R66093, linux-mmc

Dear all,
Have any advice about these patchs for SDHC?

Thanks and Best Regards
Jerry Huang
 
Beijing office, Freescale Semiconductor
 

> -----Original Message-----
> From: Huang Changming-R66093 
> Sent: Friday, December 04, 2009 3:55 PM
> To: linux-mmc@vger.kernel.org
> Cc: Huang Changming-R66093
> Subject: [PATCH 3/3] MMC/SD: add callback function to detect card
> 
> From: Jerry Huang <Chang-Ming.Huang@freescale.com>
> 
> Add callback function to check if the card has been removed.
> 
> in order to check if the card has been removed, the function 
> mmc_send_status will send commad CMD13 to card and ask the 
> card to send its status register to driver, which will 
> generate interrupt repeatly and make the system bad.
> Therefore, get_cd callback is used to detect the card if the 
> driver has.
> 
> Signed-off-by: Jerry Huang <Chang-Ming.Huang@freescale.com>
> ---
>  drivers/mmc/core/mmc.c |    5 ++++-
>  drivers/mmc/core/sd.c  |    5 ++++-
>  2 files changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c 
> index 06084db..c5c676d 100644
> --- a/drivers/mmc/core/mmc.c
> +++ b/drivers/mmc/core/mmc.c
> @@ -494,7 +494,10 @@ static void mmc_detect(struct mmc_host *host)
>  	/*
>  	 * Just check if our card has been removed.
>  	 */
> -	err = mmc_send_status(host->card, NULL);
> +	if (host->ops->get_cd)
> +		err = !host->ops->get_cd(host);
> +	else
> +		err = mmc_send_status(host->card, NULL);
>  
>  	mmc_release_host(host);
>  
> diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c 
> index cd81c39..3cf1f38 100644
> --- a/drivers/mmc/core/sd.c
> +++ b/drivers/mmc/core/sd.c
> @@ -548,7 +548,10 @@ static void mmc_sd_detect(struct mmc_host *host)
>  	/*
>  	 * Just check if our card has been removed.
>  	 */
> -	err = mmc_send_status(host->card, NULL);
> +	if (host->ops->get_cd)
> +		err = !host->ops->get_cd(host);
> +	else
> +		err = mmc_send_status(host->card, NULL);
>  
>  	mmc_release_host(host);
>  
> --
> 1.6.4
> 
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] MMC/SD: add callback function to detect card
  2009-12-04  7:55 [PATCH 3/3] MMC/SD: add callback function to detect card r66093
  2010-01-06  2:40 ` Huang Changming-R66093
@ 2010-08-27 19:05 ` Chris Ball
  2010-08-31 19:10   ` Matt Fleming
  1 sibling, 1 reply; 9+ messages in thread
From: Chris Ball @ 2010-08-27 19:05 UTC (permalink / raw)
  To: r66093; +Cc: linux-mmc, Jerry Huang

Hi,

On Fri, Dec 04, 2009 at 03:55:09PM +0800, r66093@freescale.com wrote:
> From: Jerry Huang <Chang-Ming.Huang@freescale.com>
> 
> Add callback function to check if the card has been removed.
> 
> in order to check if the card has been removed, the function mmc_send_status will send commad CMD13 to card and ask the card to send its status register to driver, which will generate interrupt repeatly and make the system bad.
> Therefore, get_cd callback is used to detect the card if the driver has.
> 
> Signed-off-by: Jerry Huang <Chang-Ming.Huang@freescale.com>
> ---
>  drivers/mmc/core/mmc.c |    5 ++++-
>  drivers/mmc/core/sd.c  |    5 ++++-
>  2 files changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
> index 06084db..c5c676d 100644
> --- a/drivers/mmc/core/mmc.c
> +++ b/drivers/mmc/core/mmc.c
> @@ -494,7 +494,10 @@ static void mmc_detect(struct mmc_host *host)
>  	/*
>  	 * Just check if our card has been removed.
>  	 */
> -	err = mmc_send_status(host->card, NULL);
> +	if (host->ops->get_cd)
> +		err = !host->ops->get_cd(host);
> +	else
> +		err = mmc_send_status(host->card, NULL);
>  
>  	mmc_release_host(host);
>  
> diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
> index cd81c39..3cf1f38 100644
> --- a/drivers/mmc/core/sd.c
> +++ b/drivers/mmc/core/sd.c
> @@ -548,7 +548,10 @@ static void mmc_sd_detect(struct mmc_host *host)
>  	/*
>  	 * Just check if our card has been removed.
>  	 */
> -	err = mmc_send_status(host->card, NULL);
> +	if (host->ops->get_cd)
> +		err = !host->ops->get_cd(host);
> +	else
> +		err = mmc_send_status(host->card, NULL);
>  
>  	mmc_release_host(host);
>  
> -- 
> 1.6.4

This patchset wasn't replied to -- any comments on it from the list?

-- 
Chris Ball   <cjb@laptop.org>   <http://printf.net/>
One Laptop Per Child

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] MMC/SD: add callback function to detect card
  2010-08-27 19:05 ` Chris Ball
@ 2010-08-31 19:10   ` Matt Fleming
  2010-08-31 19:23     ` Adrian Hunter
  0 siblings, 1 reply; 9+ messages in thread
From: Matt Fleming @ 2010-08-31 19:10 UTC (permalink / raw)
  To: Chris Ball; +Cc: r66093, linux-mmc, Jerry Huang

On Fri, Aug 27, 2010 at 08:05:13PM +0100, Chris Ball wrote:
> Hi,
> 
> On Fri, Dec 04, 2009 at 03:55:09PM +0800, r66093@freescale.com wrote:
> > From: Jerry Huang <Chang-Ming.Huang@freescale.com>
> > 
> > Add callback function to check if the card has been removed.
> > 
> > in order to check if the card has been removed, the function mmc_send_status will send commad CMD13 to card and ask the card to send its status register to driver, which will generate interrupt repeatly and make the system bad.
> > Therefore, get_cd callback is used to detect the card if the driver has.
> > 
> > Signed-off-by: Jerry Huang <Chang-Ming.Huang@freescale.com>
> > ---
> >  drivers/mmc/core/mmc.c |    5 ++++-
> >  drivers/mmc/core/sd.c  |    5 ++++-
> >  2 files changed, 8 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
> > index 06084db..c5c676d 100644
> > --- a/drivers/mmc/core/mmc.c
> > +++ b/drivers/mmc/core/mmc.c
> > @@ -494,7 +494,10 @@ static void mmc_detect(struct mmc_host *host)
> >  	/*
> >  	 * Just check if our card has been removed.
> >  	 */
> > -	err = mmc_send_status(host->card, NULL);
> > +	if (host->ops->get_cd)
> > +		err = !host->ops->get_cd(host);
> > +	else
> > +		err = mmc_send_status(host->card, NULL);
> >  
> >  	mmc_release_host(host);
> >  
> > diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
> > index cd81c39..3cf1f38 100644
> > --- a/drivers/mmc/core/sd.c
> > +++ b/drivers/mmc/core/sd.c
> > @@ -548,7 +548,10 @@ static void mmc_sd_detect(struct mmc_host *host)
> >  	/*
> >  	 * Just check if our card has been removed.
> >  	 */
> > -	err = mmc_send_status(host->card, NULL);
> > +	if (host->ops->get_cd)
> > +		err = !host->ops->get_cd(host);
> > +	else
> > +		err = mmc_send_status(host->card, NULL);
> >  
> >  	mmc_release_host(host);
> >  
> > -- 
> > 1.6.4
> 
> This patchset wasn't replied to -- any comments on it from the list?

I think this change makes sense, although it needs to be a bit smarter
with error handling because the get_cd() functions can return -ENOSYS if
they are not implemented (but the function pointer is still valid).

	int err = 0;

	if (host->ops->get_cd) {
		err = host->ops->get_cd(host);
		if (err >= 0)
			err = !err;
	}

	if (!host->ops->get_cd || err < 0)
		err = mmc_send_status(host->card, NULL);

Thoughts?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] MMC/SD: add callback function to detect card
  2010-08-31 19:10   ` Matt Fleming
@ 2010-08-31 19:23     ` Adrian Hunter
  2010-08-31 19:38       ` Matt Fleming
  2010-08-31 19:40       ` Adrian Hunter
  0 siblings, 2 replies; 9+ messages in thread
From: Adrian Hunter @ 2010-08-31 19:23 UTC (permalink / raw)
  To: Matt Fleming
  Cc: Chris Ball, r66093@freescale.com, linux-mmc@vger.kernel.org,
	Jerry Huang

Matt Fleming wrote:
> On Fri, Aug 27, 2010 at 08:05:13PM +0100, Chris Ball wrote:
>> Hi,
>>
>> On Fri, Dec 04, 2009 at 03:55:09PM +0800, r66093@freescale.com wrote:
>>> From: Jerry Huang <Chang-Ming.Huang@freescale.com>
>>>
>>> Add callback function to check if the card has been removed.
>>>
>>> in order to check if the card has been removed, the function mmc_send_status will send commad CMD13 to card and ask the card to send its status register to driver, which will generate interrupt repeatly and make the system bad.
>>> Therefore, get_cd callback is used to detect the card if the driver has.
>>>
>>> Signed-off-by: Jerry Huang <Chang-Ming.Huang@freescale.com>
>>> ---
>>>  drivers/mmc/core/mmc.c |    5 ++++-
>>>  drivers/mmc/core/sd.c  |    5 ++++-
>>>  2 files changed, 8 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
>>> index 06084db..c5c676d 100644
>>> --- a/drivers/mmc/core/mmc.c
>>> +++ b/drivers/mmc/core/mmc.c
>>> @@ -494,7 +494,10 @@ static void mmc_detect(struct mmc_host *host)
>>>  	/*
>>>  	 * Just check if our card has been removed.
>>>  	 */
>>> -	err = mmc_send_status(host->card, NULL);
>>> +	if (host->ops->get_cd)
>>> +		err = !host->ops->get_cd(host);
>>> +	else
>>> +		err = mmc_send_status(host->card, NULL);
>>>  
>>>  	mmc_release_host(host);
>>>  
>>> diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
>>> index cd81c39..3cf1f38 100644
>>> --- a/drivers/mmc/core/sd.c
>>> +++ b/drivers/mmc/core/sd.c
>>> @@ -548,7 +548,10 @@ static void mmc_sd_detect(struct mmc_host *host)
>>>  	/*
>>>  	 * Just check if our card has been removed.
>>>  	 */
>>> -	err = mmc_send_status(host->card, NULL);
>>> +	if (host->ops->get_cd)
>>> +		err = !host->ops->get_cd(host);
>>> +	else
>>> +		err = mmc_send_status(host->card, NULL);
>>>  
>>>  	mmc_release_host(host);
>>>  
>>> -- 
>>> 1.6.4
>> This patchset wasn't replied to -- any comments on it from the list?
> 
> I think this change makes sense, although it needs to be a bit smarter
> with error handling because the get_cd() functions can return -ENOSYS if
> they are not implemented (but the function pointer is still valid).
> 
> 	int err = 0;
> 
> 	if (host->ops->get_cd) {
> 		err = host->ops->get_cd(host);
> 		if (err >= 0)
> 			err = !err;
> 	}
> 
> 	if (!host->ops->get_cd || err < 0)
> 		err = mmc_send_status(host->card, NULL);
> 
> Thoughts?

I am not sure it won't cause problems.

If you change the card then card detect will return true because
there is a card but send status will fail because the card is not
initialised.  So the two do not seem equivalent.

> --
> 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
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] MMC/SD: add callback function to detect card
  2010-08-31 19:23     ` Adrian Hunter
@ 2010-08-31 19:38       ` Matt Fleming
  2010-08-31 19:40       ` Adrian Hunter
  1 sibling, 0 replies; 9+ messages in thread
From: Matt Fleming @ 2010-08-31 19:38 UTC (permalink / raw)
  To: Adrian Hunter
  Cc: Chris Ball, r66093@freescale.com, linux-mmc@vger.kernel.org,
	Jerry Huang

On Tue, Aug 31, 2010 at 10:23:23PM +0300, Adrian Hunter wrote:
> Matt Fleming wrote:
> >On Fri, Aug 27, 2010 at 08:05:13PM +0100, Chris Ball wrote:
> >>Hi,
> >>
> >>On Fri, Dec 04, 2009 at 03:55:09PM +0800, r66093@freescale.com wrote:
> >>>From: Jerry Huang <Chang-Ming.Huang@freescale.com>
> >>>
> >>>Add callback function to check if the card has been removed.
> >>>
> >>>in order to check if the card has been removed, the function mmc_send_status will send commad CMD13 to card and ask the card to send its status register to driver, which will generate interrupt repeatly and make the system bad.
> >>>Therefore, get_cd callback is used to detect the card if the driver has.
> >>>
> >>>Signed-off-by: Jerry Huang <Chang-Ming.Huang@freescale.com>
> >>>---
> >>> drivers/mmc/core/mmc.c |    5 ++++-
> >>> drivers/mmc/core/sd.c  |    5 ++++-
> >>> 2 files changed, 8 insertions(+), 2 deletions(-)
> >>>
> >>>diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
> >>>index 06084db..c5c676d 100644
> >>>--- a/drivers/mmc/core/mmc.c
> >>>+++ b/drivers/mmc/core/mmc.c
> >>>@@ -494,7 +494,10 @@ static void mmc_detect(struct mmc_host *host)
> >>> 	/*
> >>> 	 * Just check if our card has been removed.
> >>> 	 */
> >>>-	err = mmc_send_status(host->card, NULL);
> >>>+	if (host->ops->get_cd)
> >>>+		err = !host->ops->get_cd(host);
> >>>+	else
> >>>+		err = mmc_send_status(host->card, NULL);
> >>> 	mmc_release_host(host);
> >>>diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
> >>>index cd81c39..3cf1f38 100644
> >>>--- a/drivers/mmc/core/sd.c
> >>>+++ b/drivers/mmc/core/sd.c
> >>>@@ -548,7 +548,10 @@ static void mmc_sd_detect(struct mmc_host *host)
> >>> 	/*
> >>> 	 * Just check if our card has been removed.
> >>> 	 */
> >>>-	err = mmc_send_status(host->card, NULL);
> >>>+	if (host->ops->get_cd)
> >>>+		err = !host->ops->get_cd(host);
> >>>+	else
> >>>+		err = mmc_send_status(host->card, NULL);
> >>> 	mmc_release_host(host);
> >>>-- 
> >>>1.6.4
> >>This patchset wasn't replied to -- any comments on it from the list?
> >
> >I think this change makes sense, although it needs to be a bit smarter
> >with error handling because the get_cd() functions can return -ENOSYS if
> >they are not implemented (but the function pointer is still valid).
> >
> >	int err = 0;
> >
> >	if (host->ops->get_cd) {
> >		err = host->ops->get_cd(host);
> >		if (err >= 0)
> >			err = !err;
> >	}
> >
> >	if (!host->ops->get_cd || err < 0)
> >		err = mmc_send_status(host->card, NULL);
> >
> >Thoughts?
> 
> I am not sure it won't cause problems.
> 
> If you change the card then card detect will return true because
> there is a card but send status will fail because the card is not
> initialised.  So the two do not seem equivalent.

Are you sure that the SEND_STATUS will fail if the card hasn't been
initialised? We don't actually look at the response from the SEND_STATUS
command, just whether the command itself failed or succeeded. Even if
the card isn't initialised, the command should succeed. And when we
return from mmc_rescan() we'll initialise the card anyway.

I'm not sure it won't cause problems either and I'd feel a lot more
confident if someone could test it on their hardware though ;-) None of
my boards implement the get_cd function.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] MMC/SD: add callback function to detect card
  2010-08-31 19:23     ` Adrian Hunter
  2010-08-31 19:38       ` Matt Fleming
@ 2010-08-31 19:40       ` Adrian Hunter
  2010-08-31 19:57         ` Adrian Hunter
  1 sibling, 1 reply; 9+ messages in thread
From: Adrian Hunter @ 2010-08-31 19:40 UTC (permalink / raw)
  To: Matt Fleming
  Cc: Chris Ball, r66093@freescale.com, linux-mmc@vger.kernel.org,
	Jerry Huang

Adrian Hunter wrote:
> Matt Fleming wrote:
>> On Fri, Aug 27, 2010 at 08:05:13PM +0100, Chris Ball wrote:
>>> Hi,
>>>
>>> On Fri, Dec 04, 2009 at 03:55:09PM +0800, r66093@freescale.com wrote:
>>>> From: Jerry Huang <Chang-Ming.Huang@freescale.com>
>>>>
>>>> Add callback function to check if the card has been removed.
>>>>
>>>> in order to check if the card has been removed, the function mmc_send_status will send commad CMD13 to card and ask the card to send its status register to driver, which will generate interrupt repeatly and make the system bad.
>>>> Therefore, get_cd callback is used to detect the card if the driver has.
>>>>
>>>> Signed-off-by: Jerry Huang <Chang-Ming.Huang@freescale.com>
>>>> ---
>>>>  drivers/mmc/core/mmc.c |    5 ++++-
>>>>  drivers/mmc/core/sd.c  |    5 ++++-
>>>>  2 files changed, 8 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
>>>> index 06084db..c5c676d 100644
>>>> --- a/drivers/mmc/core/mmc.c
>>>> +++ b/drivers/mmc/core/mmc.c
>>>> @@ -494,7 +494,10 @@ static void mmc_detect(struct mmc_host *host)
>>>>  	/*
>>>>  	 * Just check if our card has been removed.
>>>>  	 */
>>>> -	err = mmc_send_status(host->card, NULL);
>>>> +	if (host->ops->get_cd)
>>>> +		err = !host->ops->get_cd(host);
>>>> +	else
>>>> +		err = mmc_send_status(host->card, NULL);
>>>>  
>>>>  	mmc_release_host(host);
>>>>  
>>>> diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
>>>> index cd81c39..3cf1f38 100644
>>>> --- a/drivers/mmc/core/sd.c
>>>> +++ b/drivers/mmc/core/sd.c
>>>> @@ -548,7 +548,10 @@ static void mmc_sd_detect(struct mmc_host *host)
>>>>  	/*
>>>>  	 * Just check if our card has been removed.
>>>>  	 */
>>>> -	err = mmc_send_status(host->card, NULL);
>>>> +	if (host->ops->get_cd)
>>>> +		err = !host->ops->get_cd(host);
>>>> +	else
>>>> +		err = mmc_send_status(host->card, NULL);
>>>>  
>>>>  	mmc_release_host(host);
>>>>  
>>>> -- 
>>>> 1.6.4
>>> This patchset wasn't replied to -- any comments on it from the list?
>> I think this change makes sense, although it needs to be a bit smarter
>> with error handling because the get_cd() functions can return -ENOSYS if
>> they are not implemented (but the function pointer is still valid).
>>
>> 	int err = 0;
>>
>> 	if (host->ops->get_cd) {
>> 		err = host->ops->get_cd(host);
>> 		if (err >= 0)
>> 			err = !err;
>> 	}
>>
>> 	if (!host->ops->get_cd || err < 0)
>> 		err = mmc_send_status(host->card, NULL);
>>
>> Thoughts?
> 
> I am not sure it won't cause problems.
> 
> If you change the card then card detect will return true because
> there is a card but send status will fail because the card is not
> initialised.  So the two do not seem equivalent.

But maybe the following?

	int err = 0;

	if (host->ops->get_cd)
		err = !host->ops->get_cd(host);

	if (!err)
		err = mmc_send_status(host->card, NULL);



> 
>> --
>> 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
>>
> 
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] MMC/SD: add callback function to detect card
  2010-08-31 19:40       ` Adrian Hunter
@ 2010-08-31 19:57         ` Adrian Hunter
  2010-09-05 21:46           ` Matt Fleming
  0 siblings, 1 reply; 9+ messages in thread
From: Adrian Hunter @ 2010-08-31 19:57 UTC (permalink / raw)
  To: Matt Fleming
  Cc: Chris Ball, r66093@freescale.com, linux-mmc@vger.kernel.org,
	Jerry Huang

Adrian Hunter wrote:
> Adrian Hunter wrote:
>> Matt Fleming wrote:
>>> On Fri, Aug 27, 2010 at 08:05:13PM +0100, Chris Ball wrote:
>>>> Hi,
>>>>
>>>> On Fri, Dec 04, 2009 at 03:55:09PM +0800, r66093@freescale.com wrote:
>>>>> From: Jerry Huang <Chang-Ming.Huang@freescale.com>
>>>>>
>>>>> Add callback function to check if the card has been removed.
>>>>>
>>>>> in order to check if the card has been removed, the function mmc_send_status will send commad CMD13 to card and ask the card to send its status register to driver, which will generate interrupt repeatly and make the system bad.
>>>>> Therefore, get_cd callback is used to detect the card if the driver has.
>>>>>
>>>>> Signed-off-by: Jerry Huang <Chang-Ming.Huang@freescale.com>
>>>>> ---
>>>>>  drivers/mmc/core/mmc.c |    5 ++++-
>>>>>  drivers/mmc/core/sd.c  |    5 ++++-
>>>>>  2 files changed, 8 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
>>>>> index 06084db..c5c676d 100644
>>>>> --- a/drivers/mmc/core/mmc.c
>>>>> +++ b/drivers/mmc/core/mmc.c
>>>>> @@ -494,7 +494,10 @@ static void mmc_detect(struct mmc_host *host)
>>>>>  	/*
>>>>>  	 * Just check if our card has been removed.
>>>>>  	 */
>>>>> -	err = mmc_send_status(host->card, NULL);
>>>>> +	if (host->ops->get_cd)
>>>>> +		err = !host->ops->get_cd(host);
>>>>> +	else
>>>>> +		err = mmc_send_status(host->card, NULL);
>>>>>  
>>>>>  	mmc_release_host(host);
>>>>>  
>>>>> diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
>>>>> index cd81c39..3cf1f38 100644
>>>>> --- a/drivers/mmc/core/sd.c
>>>>> +++ b/drivers/mmc/core/sd.c
>>>>> @@ -548,7 +548,10 @@ static void mmc_sd_detect(struct mmc_host *host)
>>>>>  	/*
>>>>>  	 * Just check if our card has been removed.
>>>>>  	 */
>>>>> -	err = mmc_send_status(host->card, NULL);
>>>>> +	if (host->ops->get_cd)
>>>>> +		err = !host->ops->get_cd(host);
>>>>> +	else
>>>>> +		err = mmc_send_status(host->card, NULL);
>>>>>  
>>>>>  	mmc_release_host(host);
>>>>>  
>>>>> -- 
>>>>> 1.6.4
>>>> This patchset wasn't replied to -- any comments on it from the list?
>>> I think this change makes sense, although it needs to be a bit smarter
>>> with error handling because the get_cd() functions can return -ENOSYS if
>>> they are not implemented (but the function pointer is still valid).
>>>
>>> 	int err = 0;
>>>
>>> 	if (host->ops->get_cd) {
>>> 		err = host->ops->get_cd(host);
>>> 		if (err >= 0)
>>> 			err = !err;
>>> 	}
>>>
>>> 	if (!host->ops->get_cd || err < 0)
>>> 		err = mmc_send_status(host->card, NULL);
>>>
>>> Thoughts?
>> I am not sure it won't cause problems.
>>
>> If you change the card then card detect will return true because
>> there is a card but send status will fail because the card is not
>> initialised.  So the two do not seem equivalent.
> 
> But maybe the following?
> 
> 	int err = 0;
> 
> 	if (host->ops->get_cd)
> 		err = !host->ops->get_cd(host);
> 
> 	if (!err)
> 		err = mmc_send_status(host->card, NULL);

But now I think it should be in the mmc_rescan() function
because that is where the main other use of .get_cd()
is, and also the only call of .detect().


>>> --
>>> 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
>>>
>>
> 
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] MMC/SD: add callback function to detect card
  2010-08-31 19:57         ` Adrian Hunter
@ 2010-09-05 21:46           ` Matt Fleming
  0 siblings, 0 replies; 9+ messages in thread
From: Matt Fleming @ 2010-09-05 21:46 UTC (permalink / raw)
  To: Adrian Hunter
  Cc: Chris Ball, r66093@freescale.com, linux-mmc@vger.kernel.org,
	Jerry Huang

On Tue, Aug 31, 2010 at 10:57:25PM +0300, Adrian Hunter wrote:
> 
> But now I think it should be in the mmc_rescan() function
> because that is where the main other use of .get_cd()
> is, and also the only call of .detect().

That's a very good point. Aren't we duplicating the code in mmc_rescan()
with this patch? If there's something that mmc_rescan() isn't doing,
wouldn't it be better to modify that function instead of pushing it down
into the bus_ops detect functions?

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2010-09-05 21:46 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-04  7:55 [PATCH 3/3] MMC/SD: add callback function to detect card r66093
2010-01-06  2:40 ` Huang Changming-R66093
2010-08-27 19:05 ` Chris Ball
2010-08-31 19:10   ` Matt Fleming
2010-08-31 19:23     ` Adrian Hunter
2010-08-31 19:38       ` Matt Fleming
2010-08-31 19:40       ` Adrian Hunter
2010-08-31 19:57         ` Adrian Hunter
2010-09-05 21:46           ` Matt Fleming

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).