Thread (41 messages) 41 messages, 6 authors, 2013-08-09

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.

[...]

---
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help