Re: [PATCH v2 1/3] hwmon: (lm90) Add power control
From: Alexander Shiyan <hidden>
Date: 2013-08-08 07:18:04
Also in:
linux-arm-kernel, lkml
quoted hunk ↗ jump to hunk
The device lm90 can be controlled by the vdd rail. Adding the power control support to power on/off the vdd rail. And make sure that power is enabled before accessing the device. Signed-off-by: Wei Ni <redacted> --- drivers/hwmon/lm90.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+)diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
[...]
+static void lm90_power_control(struct i2c_client *client, bool is_enable)
+{
+ struct lm90_data *data = i2c_get_clientdata(client);
+ int ret;
+
+ if (!data->lm90_reg)
+ return;
+
+ mutex_lock(&data->update_lock);
+
+ if (is_enable)
+ ret = regulator_enable(data->lm90_reg);
+ else
+ ret = regulator_disable(data->lm90_reg);
+
+ if (ret < 0)
+ dev_err(&client->dev,
+ "Error in %s rail vdd, error %d\n",
+ (is_enable) ? "enabling" : "disabling", ret);
+ else
+ dev_info(&client->dev, "success in %s rail vdd\n",
+ (is_enable) ? "enabling" : "disabling");dev_dbg() ?
quoted hunk ↗ jump to hunk
+ + mutex_unlock(&data->update_lock); +} + static int lm90_probe(struct i2c_client *client, const struct i2c_device_id *id) {@@ -1406,6 +1434,20 @@ static int lm90_probe(struct i2c_client *client, i2c_set_clientdata(client, data); mutex_init(&data->update_lock); + data->lm90_reg = regulator_get(&client->dev, "vdd"); + if (IS_ERR_OR_NULL(data->lm90_reg)) {
What about deferred probe? if (PTR_ERR(data->lm90_reg) == -EPROBE_DEFER) return -EPROBE_DEFER;
+ if (PTR_ERR(data->lm90_reg) == -ENODEV) + dev_info(&client->dev, + "No regulator found for vdd. Assuming vdd is always powered.");
On my opinion it is unnecessary message.
+ else + dev_warn(&client->dev, + "Error [%ld] in getting the regulator handle for vdd.\n", + PTR_ERR(data->lm90_reg));
Ditto.
+ data->lm90_reg = NULL;
You can just use !IS_ERR(data->lm90_reg) macro in the future, rather than set this to NULL. [...] ---