Skip to content

Commit

Permalink
hwmon: (lm90) Add power control
Browse files Browse the repository at this point in the history
The device lm90 can be controlled by the vcc rail.
Adding the regulator support to power on/off the vcc rail.
Enable the "vcc" regulator before accessing the device.

[JD: Rename variables to avoid confusion with registers.]

Signed-off-by: Wei Ni <[email protected]>
Signed-off-by: Jean Delvare <[email protected]>
  • Loading branch information
wni-WeiNi authored and Jean Delvare committed Nov 15, 2013
1 parent 1daaceb commit 3e0f964
Showing 1 changed file with 19 additions and 0 deletions.
19 changes: 19 additions & 0 deletions drivers/hwmon/lm90.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@
#include <linux/mutex.h>
#include <linux/sysfs.h>
#include <linux/interrupt.h>
#include <linux/regulator/consumer.h>

/*
* Addresses to scan
Expand Down Expand Up @@ -366,6 +367,7 @@ enum lm90_temp11_reg_index {
struct lm90_data {
struct device *hwmon_dev;
struct mutex update_lock;
struct regulator *regulator;
char valid; /* zero until following fields are valid */
unsigned long last_updated; /* in jiffies */
int kind;
Expand Down Expand Up @@ -1516,15 +1518,29 @@ static int lm90_probe(struct i2c_client *client,
struct device *dev = &client->dev;
struct i2c_adapter *adapter = to_i2c_adapter(dev->parent);
struct lm90_data *data;
struct regulator *regulator;
int err;

regulator = devm_regulator_get(dev, "vcc");
if (IS_ERR(regulator))
return PTR_ERR(regulator);

err = regulator_enable(regulator);
if (err < 0) {
dev_err(&client->dev,
"Failed to enable regulator: %d\n", err);
return err;
}

data = devm_kzalloc(&client->dev, sizeof(struct lm90_data), GFP_KERNEL);
if (!data)
return -ENOMEM;

i2c_set_clientdata(client, data);
mutex_init(&data->update_lock);

data->regulator = regulator;

/* Set the device type */
data->kind = id->driver_data;
if (data->kind == adm1032) {
Expand Down Expand Up @@ -1604,6 +1620,8 @@ static int lm90_probe(struct i2c_client *client,
lm90_remove_files(client, data);
exit_restore:
lm90_restore_conf(client, data);
regulator_disable(data->regulator);

return err;
}

Expand All @@ -1614,6 +1632,7 @@ static int lm90_remove(struct i2c_client *client)
hwmon_device_unregister(data->hwmon_dev);
lm90_remove_files(client, data);
lm90_restore_conf(client, data);
regulator_disable(data->regulator);

return 0;
}
Expand Down

0 comments on commit 3e0f964

Please sign in to comment.