summaryrefslogtreecommitdiffstats
path: root/drivers/iio/magnetometer
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2016-06-29 14:08:34 +0200
committerJonathan Cameron <jic23@kernel.org>2016-06-30 21:39:51 +0200
commitb21d3f3452ec3a060c8f576a97adfdd4329b3157 (patch)
treeb049c5869c3ee67158a0a360d0b149c22d7c1cec /drivers/iio/magnetometer
parentiio: magn: ak8975: fix regulator usage (diff)
downloadlinux-b21d3f3452ec3a060c8f576a97adfdd4329b3157.tar.xz
linux-b21d3f3452ec3a060c8f576a97adfdd4329b3157.zip
iio: magn: ak8975: add Vid regulator
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. 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> Cc: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/iio/magnetometer')
-rw-r--r--drivers/iio/magnetometer/ak8975.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c
index def693cf7c7a..ca69f8da4eef 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. */
@@ -399,6 +400,19 @@ static int ak8975_power_on(struct i2c_client *client)
"Failed to enable specified Vdd supply\n");
return ret;
}
+
+ data->vid = devm_regulator_get(&client->dev, "vid");
+ if (IS_ERR(data->vid)) {
+ ret = PTR_ERR(data->vid);
+ } else {
+ 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. */
@@ -407,6 +421,7 @@ static void ak8975_power_off(const struct i2c_client *client)
const struct iio_dev *indio_dev = i2c_get_clientdata(client);
const struct ak8975_data *data = iio_priv(indio_dev);
+ regulator_disable(data->vid);
regulator_disable(data->vdd);
}