summaryrefslogtreecommitdiff
path: root/drivers/hwmon/w83795.c
diff options
context:
space:
mode:
authorJean Delvare <khali@linux-fr.org>2010-10-28 22:31:46 +0400
committerJean Delvare <khali@endymion.delvare>2010-10-28 22:31:46 +0400
commit80646b95863ba282330d07290c79254c2f002139 (patch)
treea990d3f36160ebb9530e8a30a237c9266f951a8c /drivers/hwmon/w83795.c
parent86ef4d2fd5921ff0bcfd1c0d88403a08862087bc (diff)
downloadlinux-80646b95863ba282330d07290c79254c2f002139.tar.xz
hwmon: (w83795) Only start monitoring if needed
This saves an SMBus write if monitoring was already enabled. Signed-off-by: Jean Delvare <khali@linux-fr.org>
Diffstat (limited to 'drivers/hwmon/w83795.c')
-rw-r--r--drivers/hwmon/w83795.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/hwmon/w83795.c b/drivers/hwmon/w83795.c
index b45416011c2a..62deffcc64a3 100644
--- a/drivers/hwmon/w83795.c
+++ b/drivers/hwmon/w83795.c
@@ -55,6 +55,7 @@ MODULE_PARM_DESC(reset, "Set to 1 to reset chip, not recommended");
#define W83795_REG_I2C_ADDR 0xfc
#define W83795_REG_CONFIG 0x01
#define W83795_REG_CONFIG_CONFIG48 0x04
+#define W83795_REG_CONFIG_START 0x01
/* Multi-Function Pin Ctrl Registers */
#define W83795_REG_VOLT_CTRL1 0x02
@@ -1664,12 +1665,18 @@ static const struct sensor_device_attribute_2 sda_single_files[] = {
static void w83795_init_client(struct i2c_client *client)
{
+ u8 config;
+
if (reset)
w83795_write(client, W83795_REG_CONFIG, 0x80);
- /* Start monitoring */
- w83795_write(client, W83795_REG_CONFIG,
- w83795_read(client, W83795_REG_CONFIG) | 0x01);
+ /* Start monitoring if needed */
+ config = w83795_read(client, W83795_REG_CONFIG);
+ if (!(config & W83795_REG_CONFIG_START)) {
+ dev_info(&client->dev, "Enabling monitoring operations\n");
+ w83795_write(client, W83795_REG_CONFIG,
+ config | W83795_REG_CONFIG_START);
+ }
}
static int w83795_get_device_id(struct i2c_client *client)