Commit 98591dbe633eace43a20ffa2907861fbef97237b

Authored by Guenter Roeck
1 parent 70e94b276c

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