Commit 98591dbe633eace43a20ffa2907861fbef97237b
1 parent
70e94b276c
Exists in
master
and in
6 other branches
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>
Showing 2 changed files with 69 additions and 0 deletions Side-by-side Diff
Documentation/hwmon/max34440
... | ... | @@ -56,6 +56,8 @@ |
56 | 56 | in[1-6]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. |
57 | 57 | in[1-6]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status. |
58 | 58 | in[1-6]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status. |
59 | +in[1-6]_highest Historical maximum voltage. | |
60 | +in[1-6]_reset_history Write any value to reset history. | |
59 | 61 | |
60 | 62 | curr[1-6]_label "iout[1-6]". |
61 | 63 | curr[1-6]_input Measured current. From READ_IOUT register. |
... | ... | @@ -63,6 +65,8 @@ |
63 | 65 | curr[1-6]_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register. |
64 | 66 | curr[1-6]_max_alarm Current high alarm. From IOUT_OC_WARNING status. |
65 | 67 | curr[1-6]_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status. |
68 | +curr[1-6]_highest Historical maximum current. | |
69 | +curr[1-6]_reset_history Write any value to reset history. | |
66 | 70 | |
67 | 71 | in6 and curr6 attributes only exist for MAX34440. |
68 | 72 | |
... | ... | @@ -75,6 +79,8 @@ |
75 | 79 | temp[1-8]_crit Critical high temperature. From OT_FAULT_LIMIT register. |
76 | 80 | temp[1-8]_max_alarm Temperature high alarm. |
77 | 81 | temp[1-8]_crit_alarm Temperature critical high alarm. |
82 | +temp[1-8]_highest Historical maximum temperature. | |
83 | +temp[1-8]_reset_history Write any value to reset history. | |
78 | 84 | |
79 | 85 | temp7 and temp8 attributes only exist for MAX34440. |
drivers/hwmon/pmbus/max34440.c
... | ... | @@ -27,11 +27,70 @@ |
27 | 27 | |
28 | 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 | 34 | #define MAX34440_STATUS_OC_WARN (1 << 0) |
31 | 35 | #define MAX34440_STATUS_OC_FAULT (1 << 1) |
32 | 36 | #define MAX34440_STATUS_OT_FAULT (1 << 5) |
33 | 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 | 94 | static int max34440_read_byte_data(struct i2c_client *client, int page, int reg) |
36 | 95 | { |
37 | 96 | int ret; |
... | ... | @@ -109,6 +168,8 @@ |
109 | 168 | .func[12] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, |
110 | 169 | .func[13] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, |
111 | 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 | 174 | [max34441] = { |
114 | 175 | .pages = 12, |
... | ... | @@ -150,6 +211,8 @@ |
150 | 211 | .func[10] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, |
151 | 212 | .func[11] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP, |
152 | 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 |