diff mbox

[02/35] mfd: ab8500-gpadc: Allow tvout regulator to be missing

Message ID 1360933026-30325-3-git-send-email-lee.jones@linaro.org (mailing list archive)
State New, archived
Headers show

Commit Message

Lee Jones Feb. 15, 2013, 12:56 p.m. UTC
From: Jonas Aaberg <jonas.aberg@stericsson.com>

Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org
---
 drivers/mfd/ab8500-gpadc.c |   19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

Comments

Mark Brown Feb. 20, 2013, 1:23 p.m. UTC | #1
On Fri, Feb 15, 2013 at 12:56:33PM +0000, Lee Jones wrote:

> +	if (gpadc->regu)
> +		regulator_disable(gpadc->regu);

No explanation for this in the changelog and missing error handling like
this is pretty much always terrible style.  Why are we doing this?
Lee Jones Feb. 20, 2013, 4:38 p.m. UTC | #2
On Wed, 20 Feb 2013, Mark Brown wrote:

> On Fri, Feb 15, 2013 at 12:56:33PM +0000, Lee Jones wrote:
> 
> > +	if (gpadc->regu)
> > +		regulator_disable(gpadc->regu);
> 
> No explanation for this in the changelog and missing error handling like
> this is pretty much always terrible style.  Why are we doing this?

No idea, and Jonas is on parental leave.

Perhaps one of the other guys have an explanation?
diff mbox

Patch

diff --git a/drivers/mfd/ab8500-gpadc.c b/drivers/mfd/ab8500-gpadc.c
index 9ed3afc..34c1d04 100644
--- a/drivers/mfd/ab8500-gpadc.c
+++ b/drivers/mfd/ab8500-gpadc.c
@@ -140,6 +140,9 @@  struct ab8500_gpadc *ab8500_gpadc_get(char *name)
 {
 	struct ab8500_gpadc *gpadc;
 
+	if (list_empty(&ab8500_gpadc_list))
+		return NULL;
+
 	list_for_each_entry(gpadc, &ab8500_gpadc_list, node) {
 		if (!strcmp(name, dev_name(gpadc->dev)))
 		    return gpadc;
@@ -587,7 +590,8 @@  static int ab8500_gpadc_runtime_suspend(struct device *dev)
 {
 	struct ab8500_gpadc *gpadc = dev_get_drvdata(dev);
 
-	regulator_disable(gpadc->regu);
+	if (gpadc->regu)
+		regulator_disable(gpadc->regu);
 	return 0;
 }
 
@@ -595,7 +599,8 @@  static int ab8500_gpadc_runtime_resume(struct device *dev)
 {
 	struct ab8500_gpadc *gpadc = dev_get_drvdata(dev);
 
-	regulator_enable(gpadc->regu);
+	if (gpadc->regu)
+		regulator_enable(gpadc->regu);
 	return 0;
 }
 
@@ -670,9 +675,8 @@  static int ab8500_gpadc_probe(struct platform_device *pdev)
 	/* VTVout LDO used to power up ab8500-GPADC */
 	gpadc->regu = regulator_get(&pdev->dev, "vddadc");
 	if (IS_ERR(gpadc->regu)) {
-		ret = PTR_ERR(gpadc->regu);
-		dev_err(gpadc->dev, "failed to get vtvout LDO\n");
-		goto fail_irq;
+		dev_warn(gpadc->dev, "failed to get vtvout LDO\n");
+		gpadc->regu = NULL;
 	}
 
 	platform_set_drvdata(pdev, gpadc);
@@ -688,8 +692,6 @@  static int ab8500_gpadc_probe(struct platform_device *pdev)
 	list_add_tail(&gpadc->node, &ab8500_gpadc_list);
 	dev_dbg(gpadc->dev, "probe success\n");
 	return 0;
-fail_irq:
-	free_irq(gpadc->irq, gpadc);
 fail:
 	kfree(gpadc);
 	gpadc = NULL;
@@ -708,7 +710,8 @@  static int ab8500_gpadc_remove(struct platform_device *pdev)
 	pm_runtime_get_sync(gpadc->dev);
 	pm_runtime_disable(gpadc->dev);
 
-	regulator_disable(gpadc->regu);
+	if (gpadc->regu)
+		regulator_disable(gpadc->regu);
 
 	pm_runtime_set_suspended(gpadc->dev);