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>
This commit is contained in:
parent
90e96fdd01
commit
b21d3f3452
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user