* [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.