All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lars-Peter Clausen <lars@metafoo.de>
To: Chris Ball <cjb@laptop.org>
Cc: Antonio Ospite <ospite@studenti.unina.it>,
	linux-mmc@vger.kernel.org, Will Newton <will.newton@gmail.com>,
	Linus Walleij <linus.walleij@stericsson.com>,
	Rabin Vincent <rabin.vincent@stericsson.com>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	Madhusudhan Chikkature <madhu.cr@ti.com>,
	Mark Brown <broonie@opensource.wolfsonmicro.com>,
	linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] mmc: fix handling NULL returned from regulator_get()
Date: Wed, 18 May 2011 19:10:44 -0700	[thread overview]
Message-ID: <4DD47C24.1080404@metafoo.de> (raw)
In-Reply-To: <m3vcx7el5h.fsf@pullcord.laptop.org>

On 05/18/2011 02:47 PM, Chris Ball wrote:
> Hi Antonio, thanks for doing this,
> 
> On Wed, May 18 2011, Antonio Ospite wrote:
>> When regulator_get() is stubbed down it returns NULL, handle this case
>> when deciding whether the driver can use the regulator or not.
>>
>> Remember: IS_ERR(NULL) is false, see also this discussion for more
>> insight: http://comments.gmane.org/gmane.linux.kernel.mmc/7934
>>
>> Now that regulator_get() is handled correctly, the ifdef on
>> CONFIG_REGULATOR in mmci.c can go away as well.
>>
>> Signed-off-by: Antonio Ospite <ospite@studenti.unina.it>
>> ---
>>
>>  drivers/mmc/host/dw_mmc.c     |    2 +-
>>  drivers/mmc/host/mmci.c       |    4 +---
>>  drivers/mmc/host/mxcmmc.c     |    2 +-
>>  drivers/mmc/host/omap_hsmmc.c |    4 ++--
>>  drivers/mmc/host/sdhci.c      |    2 +-
>>  5 files changed, 6 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
>> index 87e1f57..5be1325 100644
>> --- a/drivers/mmc/host/dw_mmc.c
>> +++ b/drivers/mmc/host/dw_mmc.c
>> @@ -1442,7 +1442,7 @@ static int __init dw_mci_init_slot(struct dw_mci *host, unsigned int id)
>>  #endif /* CONFIG_MMC_DW_IDMAC */
>>  
>>  	host->vmmc = regulator_get(mmc_dev(mmc), "vmmc");
>> -	if (IS_ERR(host->vmmc)) {
>> +	if (IS_ERR_OR_NULL(host->vmmc)) {
>>  		printk(KERN_INFO "%s: no vmmc regulator found\n", mmc_hostname(mmc));
>>  		host->vmmc = NULL;
>>  	} else
>> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
>> index 259ece0..45fd4fe 100644
>> --- a/drivers/mmc/host/omap_hsmmc.c
>> +++ b/drivers/mmc/host/omap_hsmmc.c
>> @@ -405,7 +405,7 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host)
>>  	}
>>  
>>  	reg = regulator_get(host->dev, "vmmc");
>> -	if (IS_ERR(reg)) {
>> +	if (IS_ERR_OR_NULL(reg)) {
>>  		dev_dbg(host->dev, "vmmc regulator missing\n");
>>  		/*
>>  		* HACK: until fixed.c regulator is usable,
>>  	} else {
>> [...] 
> I think I like this change for every driver *except* sdhci -- users who
> compile with CONFIG_REGULATOR=n (i.e. most distros) will start seeing
> "mmc0: no vmmc regulator found" when they boot their x86 laptops, and
> printing a cryptic regulator error message when regulator support isn't
> even compiled in seems uncalled for.
> 
> So, I think my suggestion is to merge all but the last hunk of the
> patch.  How do others feel about it?
> 

dw_mmc and omap_hsmmc will also print error messages if the regulator framework
is not build-in. I suggest to use something like:

if (IS_ERR(vmmc)) {
	... do error handling
} else if(vmmc) {
	... use regulator
} else {
	... fallback code to initialize ocr_avail
}

- Lars

WARNING: multiple messages have this Message-ID (diff)
From: lars@metafoo.de (Lars-Peter Clausen)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] mmc: fix handling NULL returned from regulator_get()
Date: Wed, 18 May 2011 19:10:44 -0700	[thread overview]
Message-ID: <4DD47C24.1080404@metafoo.de> (raw)
In-Reply-To: <m3vcx7el5h.fsf@pullcord.laptop.org>

On 05/18/2011 02:47 PM, Chris Ball wrote:
> Hi Antonio, thanks for doing this,
> 
> On Wed, May 18 2011, Antonio Ospite wrote:
>> When regulator_get() is stubbed down it returns NULL, handle this case
>> when deciding whether the driver can use the regulator or not.
>>
>> Remember: IS_ERR(NULL) is false, see also this discussion for more
>> insight: http://comments.gmane.org/gmane.linux.kernel.mmc/7934
>>
>> Now that regulator_get() is handled correctly, the ifdef on
>> CONFIG_REGULATOR in mmci.c can go away as well.
>>
>> Signed-off-by: Antonio Ospite <ospite@studenti.unina.it>
>> ---
>>
>>  drivers/mmc/host/dw_mmc.c     |    2 +-
>>  drivers/mmc/host/mmci.c       |    4 +---
>>  drivers/mmc/host/mxcmmc.c     |    2 +-
>>  drivers/mmc/host/omap_hsmmc.c |    4 ++--
>>  drivers/mmc/host/sdhci.c      |    2 +-
>>  5 files changed, 6 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
>> index 87e1f57..5be1325 100644
>> --- a/drivers/mmc/host/dw_mmc.c
>> +++ b/drivers/mmc/host/dw_mmc.c
>> @@ -1442,7 +1442,7 @@ static int __init dw_mci_init_slot(struct dw_mci *host, unsigned int id)
>>  #endif /* CONFIG_MMC_DW_IDMAC */
>>  
>>  	host->vmmc = regulator_get(mmc_dev(mmc), "vmmc");
>> -	if (IS_ERR(host->vmmc)) {
>> +	if (IS_ERR_OR_NULL(host->vmmc)) {
>>  		printk(KERN_INFO "%s: no vmmc regulator found\n", mmc_hostname(mmc));
>>  		host->vmmc = NULL;
>>  	} else
>> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
>> index 259ece0..45fd4fe 100644
>> --- a/drivers/mmc/host/omap_hsmmc.c
>> +++ b/drivers/mmc/host/omap_hsmmc.c
>> @@ -405,7 +405,7 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host)
>>  	}
>>  
>>  	reg = regulator_get(host->dev, "vmmc");
>> -	if (IS_ERR(reg)) {
>> +	if (IS_ERR_OR_NULL(reg)) {
>>  		dev_dbg(host->dev, "vmmc regulator missing\n");
>>  		/*
>>  		* HACK: until fixed.c regulator is usable,
>>  	} else {
>> [...] 
> I think I like this change for every driver *except* sdhci -- users who
> compile with CONFIG_REGULATOR=n (i.e. most distros) will start seeing
> "mmc0: no vmmc regulator found" when they boot their x86 laptops, and
> printing a cryptic regulator error message when regulator support isn't
> even compiled in seems uncalled for.
> 
> So, I think my suggestion is to merge all but the last hunk of the
> patch.  How do others feel about it?
> 

dw_mmc and omap_hsmmc will also print error messages if the regulator framework
is not build-in. I suggest to use something like:

if (IS_ERR(vmmc)) {
	... do error handling
} else if(vmmc) {
	... use regulator
} else {
	... fallback code to initialize ocr_avail
}

- Lars

  reply	other threads:[~2011-05-19  2:11 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-18 21:37 [PATCH] mmc: fix handling NULL returned from regulator_get() Antonio Ospite
2011-05-18 21:37 ` Antonio Ospite
2011-05-18 21:47 ` Chris Ball
2011-05-18 21:47   ` Chris Ball
2011-05-19  2:10   ` Lars-Peter Clausen [this message]
2011-05-19  2:10     ` Lars-Peter Clausen
2011-05-19  5:14     ` Jaehoon Chung
2011-05-19  5:14       ` Jaehoon Chung

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4DD47C24.1080404@metafoo.de \
    --to=lars@metafoo.de \
    --cc=broonie@opensource.wolfsonmicro.com \
    --cc=cjb@laptop.org \
    --cc=linus.walleij@stericsson.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=madhu.cr@ti.com \
    --cc=ospite@studenti.unina.it \
    --cc=rabin.vincent@stericsson.com \
    --cc=s.hauer@pengutronix.de \
    --cc=will.newton@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.