Commit | Line | Data |
---|---|---|
44f5a408 | 1 | Kernel driver pmbus |
1f234ff1 | 2 | =================== |
44f5a408 GR |
3 | |
4 | Supported chips: | |
1f234ff1 | 5 | |
ea541c18 ER |
6 | * Flex BMR310, BMR453, BMR454, BMR456, BMR457, BMR458, BMR480, |
7 | BMR490, BMR491, BMR492 | |
1f234ff1 | 8 | |
ea541c18 ER |
9 | Prefixes: 'bmr310', 'bmr453', 'bmr454', 'bmr456', 'bmr457', 'bmr458', 'bmr480', |
10 | 'bmr490', 'bmr491', 'bmr492' | |
1f234ff1 | 11 | |
44f5a408 | 12 | Addresses scanned: - |
1f234ff1 | 13 | |
ea541c18 ER |
14 | Datasheets: |
15 | ||
16 | https://flexpowermodules.com/products | |
1f234ff1 | 17 | |
1f234ff1 | 18 | |
e0455e38 | 19 | * ON Semiconductor ADP4000, NCP4200, NCP4208 |
1f234ff1 | 20 | |
e0455e38 | 21 | Prefixes: 'adp4000', 'ncp4200', 'ncp4208' |
1f234ff1 | 22 | |
e0455e38 | 23 | Addresses scanned: - |
1f234ff1 | 24 | |
e0455e38 | 25 | Datasheets: |
1f234ff1 | 26 | |
f12d634f | 27 | https://www.onsemi.com/pub_link/Collateral/ADP4000-D.PDF |
1f234ff1 | 28 | |
f12d634f | 29 | https://www.onsemi.com/pub_link/Collateral/NCP4200-D.PDF |
1f234ff1 | 30 | |
f12d634f | 31 | https://www.onsemi.com/pub_link/Collateral/JUNE%202009-%20REV.%200.PDF |
1f234ff1 | 32 | |
bc365a7f | 33 | * Lineage Power |
1f234ff1 | 34 | |
21633409 | 35 | Prefixes: 'mdt040', 'pdt003', 'pdt006', 'pdt012', 'udt020' |
1f234ff1 | 36 | |
bc365a7f | 37 | Addresses scanned: - |
1f234ff1 | 38 | |
bc365a7f | 39 | Datasheets: |
1f234ff1 | 40 | |
bc365a7f | 41 | http://www.lineagepower.com/oem/pdf/PDT003A0X.pdf |
1f234ff1 | 42 | |
bc365a7f | 43 | http://www.lineagepower.com/oem/pdf/PDT006A0X.pdf |
1f234ff1 | 44 | |
bc365a7f | 45 | http://www.lineagepower.com/oem/pdf/PDT012A0X.pdf |
1f234ff1 | 46 | |
bc365a7f | 47 | http://www.lineagepower.com/oem/pdf/UDT020A0X.pdf |
1f234ff1 | 48 | |
21633409 | 49 | http://www.lineagepower.com/oem/pdf/MDT040A0X.pdf |
1f234ff1 | 50 | |
cfca3789 | 51 | * Texas Instruments TPS40400, TPS544B20, TPS544B25, TPS544C20, TPS544C25 |
1f234ff1 | 52 | |
cfca3789 | 53 | Prefixes: 'tps40400', 'tps544b20', 'tps544b25', 'tps544c20', 'tps544c25' |
1f234ff1 | 54 | |
c5f35c9d | 55 | Addresses scanned: - |
1f234ff1 | 56 | |
c5f35c9d | 57 | Datasheets: |
1f234ff1 | 58 | |
f12d634f | 59 | https://www.ti.com/lit/gpn/tps40400 |
1f234ff1 | 60 | |
f12d634f | 61 | https://www.ti.com/lit/gpn/tps544b20 |
1f234ff1 | 62 | |
f12d634f | 63 | https://www.ti.com/lit/gpn/tps544b25 |
1f234ff1 | 64 | |
f12d634f | 65 | https://www.ti.com/lit/gpn/tps544c20 |
1f234ff1 | 66 | |
f12d634f | 67 | https://www.ti.com/lit/gpn/tps544c25 |
1f234ff1 | 68 | |
1a1ea120 GR |
69 | * Maxim MAX20796 |
70 | ||
71 | Prefix: 'max20796' | |
72 | ||
73 | Addresses scanned: - | |
74 | ||
75 | Datasheet: | |
76 | ||
77 | Not published | |
78 | ||
44f5a408 | 79 | * Generic PMBus devices |
1f234ff1 | 80 | |
44f5a408 | 81 | Prefix: 'pmbus' |
1f234ff1 | 82 | |
44f5a408 | 83 | Addresses scanned: - |
1f234ff1 | 84 | |
44f5a408 GR |
85 | Datasheet: n.a. |
86 | ||
1f234ff1 | 87 | |
e3333e57 | 88 | Author: Guenter Roeck <linux@roeck-us.net> |
44f5a408 GR |
89 | |
90 | ||
91 | Description | |
92 | ----------- | |
93 | ||
92417dad | 94 | This driver supports hardware monitoring for various PMBus compliant devices. |
44f5a408 GR |
95 | It supports voltage, current, power, and temperature sensors as supported |
96 | by the device. | |
97 | ||
98 | Each monitored channel has its own high and low limits, plus a critical | |
99 | limit. | |
100 | ||
101 | Fan support will be added in a later version of this driver. | |
102 | ||
103 | ||
104 | Usage Notes | |
105 | ----------- | |
106 | ||
107 | This driver does not probe for PMBus devices, since there is no register | |
108 | which can be safely used to identify the chip (The MFG_ID register is not | |
109 | supported by all chips), and since there is no well defined address range for | |
110 | PMBus devices. You will have to instantiate the devices explicitly. | |
111 | ||
112 | Example: the following will load the driver for an LTC2978 at address 0x60 | |
1f234ff1 MCC |
113 | on I2C bus #1:: |
114 | ||
115 | $ modprobe pmbus | |
116 | $ echo ltc2978 0x60 > /sys/bus/i2c/devices/i2c-1/new_device | |
44f5a408 GR |
117 | |
118 | ||
119 | Platform data support | |
120 | --------------------- | |
121 | ||
122 | Support for additional PMBus chips can be added by defining chip parameters in | |
123 | a new chip specific driver file. For example, (untested) code to add support for | |
1f234ff1 | 124 | Emerson DS1200 power modules might look as follows:: |
44f5a408 | 125 | |
1f234ff1 | 126 | static struct pmbus_driver_info ds1200_info = { |
44f5a408 GR |
127 | .pages = 1, |
128 | /* Note: All other sensors are in linear mode */ | |
129 | .direct[PSC_VOLTAGE_OUT] = true, | |
130 | .direct[PSC_TEMPERATURE] = true, | |
131 | .direct[PSC_CURRENT_OUT] = true, | |
132 | .m[PSC_VOLTAGE_IN] = 1, | |
133 | .b[PSC_VOLTAGE_IN] = 0, | |
134 | .R[PSC_VOLTAGE_IN] = 3, | |
135 | .m[PSC_VOLTAGE_OUT] = 1, | |
136 | .b[PSC_VOLTAGE_OUT] = 0, | |
137 | .R[PSC_VOLTAGE_OUT] = 3, | |
138 | .m[PSC_TEMPERATURE] = 1, | |
139 | .b[PSC_TEMPERATURE] = 0, | |
140 | .R[PSC_TEMPERATURE] = 3, | |
141 | .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN | PMBUS_HAVE_STATUS_INPUT | |
142 | | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | |
143 | | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | |
144 | | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT | |
145 | | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP | |
146 | | PMBUS_HAVE_FAN12 | PMBUS_HAVE_STATUS_FAN12, | |
1f234ff1 | 147 | }; |
44f5a408 | 148 | |
dd431939 | 149 | static int ds1200_probe(struct i2c_client *client) |
1f234ff1 | 150 | { |
dd431939 | 151 | return pmbus_do_probe(client, &ds1200_info); |
1f234ff1 | 152 | } |
44f5a408 | 153 | |
1f234ff1 | 154 | static const struct i2c_device_id ds1200_id[] = { |
44f5a408 GR |
155 | {"ds1200", 0}, |
156 | {} | |
1f234ff1 | 157 | }; |
44f5a408 | 158 | |
1f234ff1 | 159 | MODULE_DEVICE_TABLE(i2c, ds1200_id); |
44f5a408 | 160 | |
1f234ff1 MCC |
161 | /* This is the driver that will be inserted */ |
162 | static struct i2c_driver ds1200_driver = { | |
44f5a408 GR |
163 | .driver = { |
164 | .name = "ds1200", | |
165 | }, | |
4a754aba | 166 | .probe = ds1200_probe, |
44f5a408 | 167 | .id_table = ds1200_id, |
1f234ff1 | 168 | }; |
44f5a408 | 169 | |
1f234ff1 MCC |
170 | static int __init ds1200_init(void) |
171 | { | |
44f5a408 | 172 | return i2c_add_driver(&ds1200_driver); |
1f234ff1 | 173 | } |
44f5a408 | 174 | |
1f234ff1 MCC |
175 | static void __exit ds1200_exit(void) |
176 | { | |
44f5a408 | 177 | i2c_del_driver(&ds1200_driver); |
1f234ff1 | 178 | } |
44f5a408 GR |
179 | |
180 | ||
181 | Sysfs entries | |
182 | ------------- | |
183 | ||
184 | When probing the chip, the driver identifies which PMBus registers are | |
185 | supported, and determines available sensors from this information. | |
02582e9b | 186 | Attribute files only exist if respective sensors are supported by the chip. |
44f5a408 GR |
187 | Labels are provided to inform the user about the sensor associated with |
188 | a given sysfs entry. | |
189 | ||
190 | The following attributes are supported. Limits are read-write; all other | |
191 | attributes are read-only. | |
192 | ||
1f234ff1 | 193 | ======================= ======================================================== |
44f5a408 | 194 | inX_input Measured voltage. From READ_VIN or READ_VOUT register. |
25985edc | 195 | inX_min Minimum Voltage. |
44f5a408 GR |
196 | From VIN_UV_WARN_LIMIT or VOUT_UV_WARN_LIMIT register. |
197 | inX_max Maximum voltage. | |
198 | From VIN_OV_WARN_LIMIT or VOUT_OV_WARN_LIMIT register. | |
25985edc | 199 | inX_lcrit Critical minimum Voltage. |
44f5a408 GR |
200 | From VIN_UV_FAULT_LIMIT or VOUT_UV_FAULT_LIMIT register. |
201 | inX_crit Critical maximum voltage. | |
202 | From VIN_OV_FAULT_LIMIT or VOUT_OV_FAULT_LIMIT register. | |
203 | inX_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. | |
204 | inX_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. | |
205 | inX_lcrit_alarm Voltage critical low alarm. | |
206 | From VOLTAGE_UV_FAULT status. | |
207 | inX_crit_alarm Voltage critical high alarm. | |
208 | From VOLTAGE_OV_FAULT status. | |
209 | inX_label "vin", "vcap", or "voutY" | |
787c095e ZL |
210 | inX_rated_min Minimum rated voltage. |
211 | From MFR_VIN_MIN or MFR_VOUT_MIN register. | |
212 | inX_rated_max Maximum rated voltage. | |
213 | From MFR_VIN_MAX or MFR_VOUT_MAX register. | |
44f5a408 GR |
214 | |
215 | currX_input Measured current. From READ_IIN or READ_IOUT register. | |
216 | currX_max Maximum current. | |
217 | From IIN_OC_WARN_LIMIT or IOUT_OC_WARN_LIMIT register. | |
25985edc | 218 | currX_lcrit Critical minimum output current. |
44f5a408 GR |
219 | From IOUT_UC_FAULT_LIMIT register. |
220 | currX_crit Critical maximum current. | |
221 | From IIN_OC_FAULT_LIMIT or IOUT_OC_FAULT_LIMIT register. | |
222 | currX_alarm Current high alarm. | |
223 | From IIN_OC_WARNING or IOUT_OC_WARNING status. | |
180b3d88 GR |
224 | currX_max_alarm Current high alarm. |
225 | From IIN_OC_WARN_LIMIT or IOUT_OC_WARN_LIMIT status. | |
44f5a408 GR |
226 | currX_lcrit_alarm Output current critical low alarm. |
227 | From IOUT_UC_FAULT status. | |
228 | currX_crit_alarm Current critical high alarm. | |
229 | From IIN_OC_FAULT or IOUT_OC_FAULT status. | |
16358542 GR |
230 | currX_label "iin", "iinY", "iinY.Z", "ioutY", or "ioutY.Z", |
231 | where Y reflects the page number and Z reflects the | |
232 | phase. | |
787c095e ZL |
233 | currX_rated_max Maximum rated current. |
234 | From MFR_IIN_MAX or MFR_IOUT_MAX register. | |
44f5a408 GR |
235 | |
236 | powerX_input Measured power. From READ_PIN or READ_POUT register. | |
237 | powerX_cap Output power cap. From POUT_MAX register. | |
238 | powerX_max Power limit. From PIN_OP_WARN_LIMIT or | |
239 | POUT_OP_WARN_LIMIT register. | |
240 | powerX_crit Critical output power limit. | |
241 | From POUT_OP_FAULT_LIMIT register. | |
242 | powerX_alarm Power high alarm. | |
243 | From PIN_OP_WARNING or POUT_OP_WARNING status. | |
244 | powerX_crit_alarm Output power critical high alarm. | |
245 | From POUT_OP_FAULT status. | |
16358542 GR |
246 | powerX_label "pin", "pinY", "pinY.Z", "poutY", or "poutY.Z", |
247 | where Y reflects the page number and Z reflects the | |
248 | phase. | |
787c095e ZL |
249 | powerX_rated_max Maximum rated power. |
250 | From MFR_PIN_MAX or MFR_POUT_MAX register. | |
44f5a408 | 251 | |
180b3d88 | 252 | tempX_input Measured temperature. |
44f5a408 | 253 | From READ_TEMPERATURE_X register. |
787c095e | 254 | tempX_min Minimum temperature. From UT_WARN_LIMIT register. |
180b3d88 GR |
255 | tempX_max Maximum temperature. From OT_WARN_LIMIT register. |
256 | tempX_lcrit Critical low temperature. | |
44f5a408 | 257 | From UT_FAULT_LIMIT register. |
180b3d88 | 258 | tempX_crit Critical high temperature. |
44f5a408 GR |
259 | From OT_FAULT_LIMIT register. |
260 | tempX_min_alarm Chip temperature low alarm. Set by comparing | |
261 | READ_TEMPERATURE_X with UT_WARN_LIMIT if | |
262 | TEMP_UT_WARNING status is set. | |
263 | tempX_max_alarm Chip temperature high alarm. Set by comparing | |
264 | READ_TEMPERATURE_X with OT_WARN_LIMIT if | |
265 | TEMP_OT_WARNING status is set. | |
266 | tempX_lcrit_alarm Chip temperature critical low alarm. Set by comparing | |
267 | READ_TEMPERATURE_X with UT_FAULT_LIMIT if | |
268 | TEMP_UT_FAULT status is set. | |
269 | tempX_crit_alarm Chip temperature critical high alarm. Set by comparing | |
270 | READ_TEMPERATURE_X with OT_FAULT_LIMIT if | |
271 | TEMP_OT_FAULT status is set. | |
787c095e ZL |
272 | tempX_rated_min Minimum rated temperature. |
273 | From MFR_TAMBIENT_MIN register. | |
274 | tempX_rated_max Maximum rated temperature. | |
275 | From MFR_TAMBIENT_MAX, MFR_MAX_TEMP_1, MFR_MAX_TEMP_2 or | |
276 | MFR_MAX_TEMP_3 register. | |
1f234ff1 | 277 | ======================= ======================================================== |