2
* pmbus.h - Common defines and structures for PMBus devices
4
* Copyright (c) 2010, 2011 Ericsson AB.
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27
#define PMBUS_PAGE 0x00
28
#define PMBUS_OPERATION 0x01
29
#define PMBUS_ON_OFF_CONFIG 0x02
30
#define PMBUS_CLEAR_FAULTS 0x03
31
#define PMBUS_PHASE 0x04
33
#define PMBUS_CAPABILITY 0x19
34
#define PMBUS_QUERY 0x1A
36
#define PMBUS_VOUT_MODE 0x20
37
#define PMBUS_VOUT_COMMAND 0x21
38
#define PMBUS_VOUT_TRIM 0x22
39
#define PMBUS_VOUT_CAL_OFFSET 0x23
40
#define PMBUS_VOUT_MAX 0x24
41
#define PMBUS_VOUT_MARGIN_HIGH 0x25
42
#define PMBUS_VOUT_MARGIN_LOW 0x26
43
#define PMBUS_VOUT_TRANSITION_RATE 0x27
44
#define PMBUS_VOUT_DROOP 0x28
45
#define PMBUS_VOUT_SCALE_LOOP 0x29
46
#define PMBUS_VOUT_SCALE_MONITOR 0x2A
48
#define PMBUS_COEFFICIENTS 0x30
49
#define PMBUS_POUT_MAX 0x31
51
#define PMBUS_FAN_CONFIG_12 0x3A
52
#define PMBUS_FAN_COMMAND_1 0x3B
53
#define PMBUS_FAN_COMMAND_2 0x3C
54
#define PMBUS_FAN_CONFIG_34 0x3D
55
#define PMBUS_FAN_COMMAND_3 0x3E
56
#define PMBUS_FAN_COMMAND_4 0x3F
58
#define PMBUS_VOUT_OV_FAULT_LIMIT 0x40
59
#define PMBUS_VOUT_OV_FAULT_RESPONSE 0x41
60
#define PMBUS_VOUT_OV_WARN_LIMIT 0x42
61
#define PMBUS_VOUT_UV_WARN_LIMIT 0x43
62
#define PMBUS_VOUT_UV_FAULT_LIMIT 0x44
63
#define PMBUS_VOUT_UV_FAULT_RESPONSE 0x45
64
#define PMBUS_IOUT_OC_FAULT_LIMIT 0x46
65
#define PMBUS_IOUT_OC_FAULT_RESPONSE 0x47
66
#define PMBUS_IOUT_OC_LV_FAULT_LIMIT 0x48
67
#define PMBUS_IOUT_OC_LV_FAULT_RESPONSE 0x49
68
#define PMBUS_IOUT_OC_WARN_LIMIT 0x4A
69
#define PMBUS_IOUT_UC_FAULT_LIMIT 0x4B
70
#define PMBUS_IOUT_UC_FAULT_RESPONSE 0x4C
72
#define PMBUS_OT_FAULT_LIMIT 0x4F
73
#define PMBUS_OT_FAULT_RESPONSE 0x50
74
#define PMBUS_OT_WARN_LIMIT 0x51
75
#define PMBUS_UT_WARN_LIMIT 0x52
76
#define PMBUS_UT_FAULT_LIMIT 0x53
77
#define PMBUS_UT_FAULT_RESPONSE 0x54
78
#define PMBUS_VIN_OV_FAULT_LIMIT 0x55
79
#define PMBUS_VIN_OV_FAULT_RESPONSE 0x56
80
#define PMBUS_VIN_OV_WARN_LIMIT 0x57
81
#define PMBUS_VIN_UV_WARN_LIMIT 0x58
82
#define PMBUS_VIN_UV_FAULT_LIMIT 0x59
84
#define PMBUS_IIN_OC_FAULT_LIMIT 0x5B
85
#define PMBUS_IIN_OC_WARN_LIMIT 0x5D
87
#define PMBUS_POUT_OP_FAULT_LIMIT 0x68
88
#define PMBUS_POUT_OP_WARN_LIMIT 0x6A
89
#define PMBUS_PIN_OP_WARN_LIMIT 0x6B
91
#define PMBUS_STATUS_BYTE 0x78
92
#define PMBUS_STATUS_WORD 0x79
93
#define PMBUS_STATUS_VOUT 0x7A
94
#define PMBUS_STATUS_IOUT 0x7B
95
#define PMBUS_STATUS_INPUT 0x7C
96
#define PMBUS_STATUS_TEMPERATURE 0x7D
97
#define PMBUS_STATUS_CML 0x7E
98
#define PMBUS_STATUS_OTHER 0x7F
99
#define PMBUS_STATUS_MFR_SPECIFIC 0x80
100
#define PMBUS_STATUS_FAN_12 0x81
101
#define PMBUS_STATUS_FAN_34 0x82
103
#define PMBUS_READ_VIN 0x88
104
#define PMBUS_READ_IIN 0x89
105
#define PMBUS_READ_VCAP 0x8A
106
#define PMBUS_READ_VOUT 0x8B
107
#define PMBUS_READ_IOUT 0x8C
108
#define PMBUS_READ_TEMPERATURE_1 0x8D
109
#define PMBUS_READ_TEMPERATURE_2 0x8E
110
#define PMBUS_READ_TEMPERATURE_3 0x8F
111
#define PMBUS_READ_FAN_SPEED_1 0x90
112
#define PMBUS_READ_FAN_SPEED_2 0x91
113
#define PMBUS_READ_FAN_SPEED_3 0x92
114
#define PMBUS_READ_FAN_SPEED_4 0x93
115
#define PMBUS_READ_DUTY_CYCLE 0x94
116
#define PMBUS_READ_FREQUENCY 0x95
117
#define PMBUS_READ_POUT 0x96
118
#define PMBUS_READ_PIN 0x97
120
#define PMBUS_REVISION 0x98
121
#define PMBUS_MFR_ID 0x99
122
#define PMBUS_MFR_MODEL 0x9A
123
#define PMBUS_MFR_REVISION 0x9B
124
#define PMBUS_MFR_LOCATION 0x9C
125
#define PMBUS_MFR_DATE 0x9D
126
#define PMBUS_MFR_SERIAL 0x9E
131
#define PB_CAPABILITY_SMBALERT (1<<4)
132
#define PB_CAPABILITY_ERROR_CHECK (1<<7)
137
#define PB_VOUT_MODE_MODE_MASK 0xe0
138
#define PB_VOUT_MODE_PARAM_MASK 0x1f
140
#define PB_VOUT_MODE_LINEAR 0x00
141
#define PB_VOUT_MODE_VID 0x20
142
#define PB_VOUT_MODE_DIRECT 0x40
147
#define PB_FAN_2_PULSE_MASK ((1 << 0) | (1 << 1))
148
#define PB_FAN_2_RPM (1 << 2)
149
#define PB_FAN_2_INSTALLED (1 << 3)
150
#define PB_FAN_1_PULSE_MASK ((1 << 4) | (1 << 5))
151
#define PB_FAN_1_RPM (1 << 6)
152
#define PB_FAN_1_INSTALLED (1 << 7)
155
* STATUS_BYTE, STATUS_WORD (lower)
157
#define PB_STATUS_NONE_ABOVE (1<<0)
158
#define PB_STATUS_CML (1<<1)
159
#define PB_STATUS_TEMPERATURE (1<<2)
160
#define PB_STATUS_VIN_UV (1<<3)
161
#define PB_STATUS_IOUT_OC (1<<4)
162
#define PB_STATUS_VOUT_OV (1<<5)
163
#define PB_STATUS_OFF (1<<6)
164
#define PB_STATUS_BUSY (1<<7)
167
* STATUS_WORD (upper)
169
#define PB_STATUS_UNKNOWN (1<<8)
170
#define PB_STATUS_OTHER (1<<9)
171
#define PB_STATUS_FANS (1<<10)
172
#define PB_STATUS_POWER_GOOD_N (1<<11)
173
#define PB_STATUS_WORD_MFR (1<<12)
174
#define PB_STATUS_INPUT (1<<13)
175
#define PB_STATUS_IOUT_POUT (1<<14)
176
#define PB_STATUS_VOUT (1<<15)
181
#define PB_POUT_OP_WARNING (1<<0)
182
#define PB_POUT_OP_FAULT (1<<1)
183
#define PB_POWER_LIMITING (1<<2)
184
#define PB_CURRENT_SHARE_FAULT (1<<3)
185
#define PB_IOUT_UC_FAULT (1<<4)
186
#define PB_IOUT_OC_WARNING (1<<5)
187
#define PB_IOUT_OC_LV_FAULT (1<<6)
188
#define PB_IOUT_OC_FAULT (1<<7)
191
* STATUS_VOUT, STATUS_INPUT
193
#define PB_VOLTAGE_UV_FAULT (1<<4)
194
#define PB_VOLTAGE_UV_WARNING (1<<5)
195
#define PB_VOLTAGE_OV_WARNING (1<<6)
196
#define PB_VOLTAGE_OV_FAULT (1<<7)
201
#define PB_PIN_OP_WARNING (1<<0)
202
#define PB_IIN_OC_WARNING (1<<1)
203
#define PB_IIN_OC_FAULT (1<<2)
208
#define PB_TEMP_UT_FAULT (1<<4)
209
#define PB_TEMP_UT_WARNING (1<<5)
210
#define PB_TEMP_OT_WARNING (1<<6)
211
#define PB_TEMP_OT_FAULT (1<<7)
216
#define PB_FAN_AIRFLOW_WARNING (1<<0)
217
#define PB_FAN_AIRFLOW_FAULT (1<<1)
218
#define PB_FAN_FAN2_SPEED_OVERRIDE (1<<2)
219
#define PB_FAN_FAN1_SPEED_OVERRIDE (1<<3)
220
#define PB_FAN_FAN2_WARNING (1<<4)
221
#define PB_FAN_FAN1_WARNING (1<<5)
222
#define PB_FAN_FAN2_FAULT (1<<6)
223
#define PB_FAN_FAN1_FAULT (1<<7)
228
#define PB_CML_FAULT_OTHER_MEM_LOGIC (1<<0)
229
#define PB_CML_FAULT_OTHER_COMM (1<<1)
230
#define PB_CML_FAULT_PROCESSOR (1<<3)
231
#define PB_CML_FAULT_MEMORY (1<<4)
232
#define PB_CML_FAULT_PACKET_ERROR (1<<5)
233
#define PB_CML_FAULT_INVALID_DATA (1<<6)
234
#define PB_CML_FAULT_INVALID_COMMAND (1<<7)
236
enum pmbus_sensor_classes {
244
PSC_NUM_CLASSES /* Number of power sensor classes */
247
#define PMBUS_PAGES 32 /* Per PMBus specification */
249
/* Functionality bit mask */
250
#define PMBUS_HAVE_VIN (1 << 0)
251
#define PMBUS_HAVE_VCAP (1 << 1)
252
#define PMBUS_HAVE_VOUT (1 << 2)
253
#define PMBUS_HAVE_IIN (1 << 3)
254
#define PMBUS_HAVE_IOUT (1 << 4)
255
#define PMBUS_HAVE_PIN (1 << 5)
256
#define PMBUS_HAVE_POUT (1 << 6)
257
#define PMBUS_HAVE_FAN12 (1 << 7)
258
#define PMBUS_HAVE_FAN34 (1 << 8)
259
#define PMBUS_HAVE_TEMP (1 << 9)
260
#define PMBUS_HAVE_TEMP2 (1 << 10)
261
#define PMBUS_HAVE_TEMP3 (1 << 11)
262
#define PMBUS_HAVE_STATUS_VOUT (1 << 12)
263
#define PMBUS_HAVE_STATUS_IOUT (1 << 13)
264
#define PMBUS_HAVE_STATUS_INPUT (1 << 14)
265
#define PMBUS_HAVE_STATUS_TEMP (1 << 15)
266
#define PMBUS_HAVE_STATUS_FAN12 (1 << 16)
267
#define PMBUS_HAVE_STATUS_FAN34 (1 << 17)
269
struct pmbus_driver_info {
270
int pages; /* Total number of pages */
271
bool direct[PSC_NUM_CLASSES];
272
/* true if device uses direct data format
273
for the given sensor class */
275
* Support one set of coefficients for each sensor type
276
* Used for chips providing data in direct mode.
278
int m[PSC_NUM_CLASSES]; /* mantissa for direct data format */
279
int b[PSC_NUM_CLASSES]; /* offset */
280
int R[PSC_NUM_CLASSES]; /* exponent */
282
u32 func[PMBUS_PAGES]; /* Functionality, per page */
284
* The following functions map manufacturing specific register values
285
* to PMBus standard register values. Specify only if mapping is
288
int (*read_byte_data)(struct i2c_client *client, int page, int reg);
290
* The identify function determines supported PMBus functionality.
291
* This function is only necessary if a chip driver supports multiple
292
* chips, and the chip functionality is not pre-determined.
294
int (*identify)(struct i2c_client *client,
295
struct pmbus_driver_info *info);
298
/* Function declarations */
300
int pmbus_set_page(struct i2c_client *client, u8 page);
301
int pmbus_read_word_data(struct i2c_client *client, u8 page, u8 reg);
302
void pmbus_clear_faults(struct i2c_client *client);
303
bool pmbus_check_byte_register(struct i2c_client *client, int page, int reg);
304
bool pmbus_check_word_register(struct i2c_client *client, int page, int reg);
305
int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id,
306
struct pmbus_driver_info *info);
307
int pmbus_do_remove(struct i2c_client *client);
308
const struct pmbus_driver_info *pmbus_get_driver_info(struct i2c_client