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@xxxxxxxxxx> Cc: Richard Leitner <dev@xxxxxxxxxx> Cc: Krzysztof Kozlowski <k.kozlowski@xxxxxxxxxxx> Cc: Lars-Peter Clausen <lars@xxxxxxxxxx> Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> --- ChangeLog v1->v2: - Just obtain the other regulator exactly like the first without trying to be fancy. --- drivers/iio/magnetometer/ak8975.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c index 609a2c401b5d..e0e43f497f40 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. */ @@ -396,10 +397,26 @@ static int ak8975_power_on(struct i2c_client *client) } else { 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(&client->dev, "vid"); + if (IS_ERR_OR_NULL(data->vid)) { + ret = PTR_ERR(data->vdd); + if (ret == -ENODEV) + ret = 0; + } else { + ret = regulator_enable(data->vdd); + } + 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 -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html