All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] iio: ak8975: add Vid regulator, use optional API
@ 2016-06-16 15:35 Linus Walleij
  2016-06-16 15:43 ` Lars-Peter Clausen
  0 siblings, 1 reply; 2+ messages in thread
From: Linus Walleij @ 2016-06-16 15:35 UTC (permalink / raw)
  To: Jonathan Cameron, linux-iio, Crestez Dan Leonard
  Cc: Linus Walleij, Gregor Boirie, Richard Leitner,
	Krzysztof Kozlowski

The AK8975 has two power sources: Vdd (analog voltage supply)
and Vid (digital voltage supply). Optionally also obtain the Vid
supply regulator and enable it.

This also switches the AK8975 regulator to use the optional
regulator API instead of using the much-disliked IS_ERR_OR_NULL()
macro.

If an error occurs when enabling one of the regulators: bail out.

Cc: Gregor Boirie <gregor.boirie@parrot.com>
Cc: Richard Leitner <dev@g0hl1n.net>
Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/iio/magnetometer/ak8975.c | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c
index 609a2c401b5d..cb8e79532854 100644
--- a/drivers/iio/magnetometer/ak8975.c
+++ b/drivers/iio/magnetometer/ak8975.c
@@ -379,6 +379,7 @@ struct ak8975_data {
 	u8			cntl_cache;
 	struct iio_mount_matrix orientation;
 	struct regulator	*vdd;
+	struct regulator	*vid;
 };
 
 /* Enable attached power regulator if any. */
@@ -388,18 +389,25 @@ static int ak8975_power_on(struct i2c_client *client)
 	struct ak8975_data *data = iio_priv(indio_dev);
 	int ret;
 
-	data->vdd = devm_regulator_get(&client->dev, "vdd");
-	if (IS_ERR_OR_NULL(data->vdd)) {
-		ret = PTR_ERR(data->vdd);
-		if (ret == -ENODEV)
-			ret = 0;
-	} else {
+	data->vdd = devm_regulator_get_optional(&client->dev, "vdd");
+	if (!IS_ERR(data->vdd)) {
 		ret = regulator_enable(data->vdd);
+		if (ret) {
+			dev_warn(&client->dev,
+				 "Failed to enable specified Vdd supply\n");
+			return ret;
+		}
 	}
-
-	if (ret)
-		dev_err(&client->dev, "failed to enable Vdd supply: %d\n", ret);
-	return ret;
+	data->vid = devm_regulator_get_optional(&client->dev, "vid");
+	if (!IS_ERR(data->vid)) {
+		ret = regulator_enable(data->vid);
+		if (ret) {
+			dev_warn(&client->dev,
+				 "Failed to enable specified Vid supply\n");
+			return ret;
+		}
+	}
+	return 0;
 }
 
 /* Disable attached power regulator if any. */
-- 
2.4.11


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

* Re: [PATCH] iio: ak8975: add Vid regulator, use optional API
  2016-06-16 15:35 [PATCH] iio: ak8975: add Vid regulator, use optional API Linus Walleij
@ 2016-06-16 15:43 ` Lars-Peter Clausen
  0 siblings, 0 replies; 2+ messages in thread
From: Lars-Peter Clausen @ 2016-06-16 15:43 UTC (permalink / raw)
  To: Linus Walleij, Jonathan Cameron, linux-iio, Crestez Dan Leonard
  Cc: Gregor Boirie, Richard Leitner, Krzysztof Kozlowski

On 06/16/2016 05:35 PM, Linus Walleij wrote:
[...]
> +	data->vdd = devm_regulator_get_optional(&client->dev, "vdd");
> +	if (!IS_ERR(data->vdd)) {

This ignores all errors silently and among other things breaks probe
deferral for the regulators.

>  		ret = regulator_enable(data->vdd);
> +		if (ret) {
> +			dev_warn(&client->dev,
> +				 "Failed to enable specified Vdd supply\n");
> +			return ret;
> +		}
>  	}

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

end of thread, other threads:[~2016-06-16 15:43 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-16 15:35 [PATCH] iio: ak8975: add Vid regulator, use optional API Linus Walleij
2016-06-16 15:43 ` Lars-Peter Clausen

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.