diff options
author | Guenter Roeck <guenter.roeck@ericsson.com> | 2011-07-09 13:10:19 -0700 |
---|---|---|
committer | Guenter Roeck <guenter.roeck@ericsson.com> | 2011-07-28 17:09:53 -0700 |
commit | 8ebed854506301f4f67e75c73cae967d4a45ab4d (patch) | |
tree | 931d27507b081f39551cc1092b5db6fd1812f9a0 /drivers/hwmon | |
parent | c576e30cd0c9814b3b45772d46924d796f538dee (diff) | |
download | op-kernel-dev-8ebed854506301f4f67e75c73cae967d4a45ab4d.zip op-kernel-dev-8ebed854506301f4f67e75c73cae967d4a45ab4d.tar.gz |
hwmon: (max16064) Add support for peak attributes
Add support for voltage and temperature peak (historic maximum) attributes.
Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Reviewed-by: Robert Coulson <robert.coulson@ericsson.com>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r-- | drivers/hwmon/pmbus/max16064.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/drivers/hwmon/pmbus/max16064.c b/drivers/hwmon/pmbus/max16064.c index 78e20bc..e50b296 100644 --- a/drivers/hwmon/pmbus/max16064.c +++ b/drivers/hwmon/pmbus/max16064.c @@ -25,6 +25,55 @@ #include <linux/i2c.h> #include "pmbus.h" +#define MAX16064_MFR_VOUT_PEAK 0xd4 +#define MAX16064_MFR_TEMPERATURE_PEAK 0xd6 + +static int max16064_read_word_data(struct i2c_client *client, int page, int reg) +{ + int ret; + + switch (reg) { + case PMBUS_VIRT_READ_VOUT_MAX: + ret = pmbus_read_word_data(client, page, + MAX16064_MFR_VOUT_PEAK); + break; + case PMBUS_VIRT_READ_TEMP_MAX: + ret = pmbus_read_word_data(client, page, + MAX16064_MFR_TEMPERATURE_PEAK); + break; + case PMBUS_VIRT_RESET_VOUT_HISTORY: + case PMBUS_VIRT_RESET_TEMP_HISTORY: + ret = 0; + break; + default: + ret = -ENODATA; + break; + } + return ret; +} + +static int max16064_write_word_data(struct i2c_client *client, int page, + int reg, u16 word) +{ + int ret; + + switch (reg) { + case PMBUS_VIRT_RESET_VOUT_HISTORY: + ret = pmbus_write_word_data(client, page, + MAX16064_MFR_VOUT_PEAK, 0); + break; + case PMBUS_VIRT_RESET_TEMP_HISTORY: + ret = pmbus_write_word_data(client, page, + MAX16064_MFR_TEMPERATURE_PEAK, + 0xffff); + break; + default: + ret = -ENODATA; + break; + } + return ret; +} + static struct pmbus_driver_info max16064_info = { .pages = 4, .format[PSC_VOLTAGE_IN] = direct, @@ -44,6 +93,8 @@ static struct pmbus_driver_info max16064_info = { .func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT, .func[2] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT, .func[3] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT, + .read_word_data = max16064_read_word_data, + .write_word_data = max16064_write_word_data, }; static int max16064_probe(struct i2c_client *client, |