diff options
author | Guenter Roeck <guenter.roeck@ericsson.com> | 2011-07-09 16:17:43 -0400 |
---|---|---|
committer | Guenter Roeck <guenter.roeck@ericsson.com> | 2011-07-28 20:09:54 -0400 |
commit | 98591dbe633eace43a20ffa2907861fbef97237b (patch) | |
tree | 4ab8d736a823c4f6175f8adfad5dd17527ec0ce0 /drivers/hwmon | |
parent | 70e94b276c21638a0a37908f6696a6b122944dea (diff) |
hwmon: (max34440) Add support for peak attributes
Add support for voltage, current, 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/max34440.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/drivers/hwmon/pmbus/max34440.c b/drivers/hwmon/pmbus/max34440.c index 2e30046a116e..fda621d2e458 100644 --- a/drivers/hwmon/pmbus/max34440.c +++ b/drivers/hwmon/pmbus/max34440.c | |||
@@ -27,11 +27,70 @@ | |||
27 | 27 | ||
28 | enum chips { max34440, max34441 }; | 28 | enum chips { max34440, max34441 }; |
29 | 29 | ||
30 | #define MAX34440_MFR_VOUT_PEAK 0xd4 | ||
31 | #define MAX34440_MFR_IOUT_PEAK 0xd5 | ||
32 | #define MAX34440_MFR_TEMPERATURE_PEAK 0xd6 | ||
33 | |||
30 | #define MAX34440_STATUS_OC_WARN (1 << 0) | 34 | #define MAX34440_STATUS_OC_WARN (1 << 0) |
31 | #define MAX34440_STATUS_OC_FAULT (1 << 1) | 35 | #define MAX34440_STATUS_OC_FAULT (1 << 1) |
32 | #define MAX34440_STATUS_OT_FAULT (1 << 5) | 36 | #define MAX34440_STATUS_OT_FAULT (1 << 5) |
33 | #define MAX34440_STATUS_OT_WARN (1 << 6) | 37 | #define MAX34440_STATUS_OT_WARN (1 << 6) |
34 | 38 | ||
39 | static int max34440_read_word_data(struct i2c_client *client, int page, int reg) | ||
40 | { | ||
41 | int ret; | ||
42 | |||
43 | switch (reg) { | ||
44 | case PMBUS_VIRT_READ_VOUT_MAX: | ||
45 | ret = pmbus_read_word_data(client, page, | ||
46 | MAX34440_MFR_VOUT_PEAK); | ||
47 | break; | ||
48 | case PMBUS_VIRT_READ_IOUT_MAX: | ||
49 | ret = pmbus_read_word_data(client, page, | ||
50 | MAX34440_MFR_IOUT_PEAK); | ||
51 | break; | ||
52 | case PMBUS_VIRT_READ_TEMP_MAX: | ||
53 | ret = pmbus_read_word_data(client, page, | ||
54 | MAX34440_MFR_TEMPERATURE_PEAK); | ||
55 | break; | ||
56 | case PMBUS_VIRT_RESET_VOUT_HISTORY: | ||
57 | case PMBUS_VIRT_RESET_IOUT_HISTORY: | ||
58 | case PMBUS_VIRT_RESET_TEMP_HISTORY: | ||
59 | ret = 0; | ||
60 | break; | ||
61 | default: | ||
62 | ret = -ENODATA; | ||
63 | break; | ||
64 | } | ||
65 | return ret; | ||
66 | } | ||
67 | |||
68 | static int max34440_write_word_data(struct i2c_client *client, int page, | ||
69 | int reg, u16 word) | ||
70 | { | ||
71 | int ret; | ||
72 | |||
73 | switch (reg) { | ||
74 | case PMBUS_VIRT_RESET_VOUT_HISTORY: | ||
75 | ret = pmbus_write_word_data(client, page, | ||
76 | MAX34440_MFR_VOUT_PEAK, 0); | ||
77 | break; | ||
78 | case PMBUS_VIRT_RESET_IOUT_HISTORY: | ||
79 | ret = pmbus_write_word_data(client, page, | ||
80 | MAX34440_MFR_IOUT_PEAK, 0); | ||
81 | break; | ||
82 | case PMBUS_VIRT_RESET_TEMP_HISTORY: | ||
83 | ret = pmbus_write_word_data(client, page, | ||
84 | MAX34440_MFR_TEMPERATURE_PEAK, | ||
85 | 0xffff); | ||
86 | break; | ||
87 | default: | ||
88 | ret = -ENODATA; | ||
89 | break; | ||
90 | } | ||
91 | return ret; | ||
92 | } | ||
93 | |||
35 | static int max34440_read_byte_data(struct i2c_client *client, int page, int reg) | 94 | static int max34440_read_byte_data(struct i2c_client *client, int page, int reg) |
36 | { | 95 | { |
37 | int ret; | 96 | int ret; |
@@ -109,6 +168,8 @@ static struct pmbus_driver_info max34440_info[] = { | |||
109 | .func[12] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, | 168 | .func[12] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, |
110 | .func[13] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, | 169 | .func[13] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, |
111 | .read_byte_data = max34440_read_byte_data, | 170 | .read_byte_data = max34440_read_byte_data, |
171 | .read_word_data = max34440_read_word_data, | ||
172 | .write_word_data = max34440_write_word_data, | ||
112 | }, | 173 | }, |
113 | [max34441] = { | 174 | [max34441] = { |
114 | .pages = 12, | 175 | .pages = 12, |
@@ -150,6 +211,8 @@ static struct pmbus_driver_info max34440_info[] = { | |||
150 | .func[10] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, | 211 | .func[10] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, |
151 | .func[11] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, | 212 | .func[11] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, |
152 | .read_byte_data = max34440_read_byte_data, | 213 | .read_byte_data = max34440_read_byte_data, |
214 | .read_word_data = max34440_read_word_data, | ||
215 | .write_word_data = max34440_write_word_data, | ||
153 | }, | 216 | }, |
154 | }; | 217 | }; |
155 | 218 | ||