blob: 2658ddee70eb47a16ea97fa795f10845deb970e1 [file] [log] [blame]
Guenter Roeck44f5a402010-06-28 14:29:03 -07001Kernel driver pmbus
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -03002===================
Guenter Roeck44f5a402010-06-28 14:29:03 -07003
4Supported chips:
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -03005
Guenter Roeck443830f2011-10-01 17:35:44 -07006 * Ericsson BMR453, BMR454
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -03007
Guenter Roeck443830f2011-10-01 17:35:44 -07008 Prefixes: 'bmr453', 'bmr454'
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -03009
Guenter Roeck44f5a402010-06-28 14:29:03 -070010 Addresses scanned: -
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030011
Guenter Roeck44f5a402010-06-28 14:29:03 -070012 Datasheet:
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030013
Guenter Roeck44f5a402010-06-28 14:29:03 -070014 http://archive.ericsson.net/service/internet/picov/get?DocNo=28701-EN/LZT146395
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030015
Guenter Roecke0455e32011-06-25 15:13:44 -070016 * ON Semiconductor ADP4000, NCP4200, NCP4208
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030017
Guenter Roecke0455e32011-06-25 15:13:44 -070018 Prefixes: 'adp4000', 'ncp4200', 'ncp4208'
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030019
Guenter Roecke0455e32011-06-25 15:13:44 -070020 Addresses scanned: -
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030021
Guenter Roecke0455e32011-06-25 15:13:44 -070022 Datasheets:
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030023
Guenter Roecke0455e32011-06-25 15:13:44 -070024 http://www.onsemi.com/pub_link/Collateral/ADP4000-D.PDF
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030025
Guenter Roecke0455e32011-06-25 15:13:44 -070026 http://www.onsemi.com/pub_link/Collateral/NCP4200-D.PDF
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030027
Guenter Roecke0455e32011-06-25 15:13:44 -070028 http://www.onsemi.com/pub_link/Collateral/JUNE%202009-%20REV.%200.PDF
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030029
Guenter Roeckbc365a72011-09-15 10:43:40 -070030 * Lineage Power
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030031
Guenter Roeck21633402012-02-28 11:00:54 -080032 Prefixes: 'mdt040', 'pdt003', 'pdt006', 'pdt012', 'udt020'
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030033
Guenter Roeckbc365a72011-09-15 10:43:40 -070034 Addresses scanned: -
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030035
Guenter Roeckbc365a72011-09-15 10:43:40 -070036 Datasheets:
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030037
Guenter Roeckbc365a72011-09-15 10:43:40 -070038 http://www.lineagepower.com/oem/pdf/PDT003A0X.pdf
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030039
Guenter Roeckbc365a72011-09-15 10:43:40 -070040 http://www.lineagepower.com/oem/pdf/PDT006A0X.pdf
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030041
Guenter Roeckbc365a72011-09-15 10:43:40 -070042 http://www.lineagepower.com/oem/pdf/PDT012A0X.pdf
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030043
Guenter Roeckbc365a72011-09-15 10:43:40 -070044 http://www.lineagepower.com/oem/pdf/UDT020A0X.pdf
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030045
Guenter Roeck21633402012-02-28 11:00:54 -080046 http://www.lineagepower.com/oem/pdf/MDT040A0X.pdf
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030047
Guenter Roeckcfca3782015-08-07 20:55:59 -070048 * Texas Instruments TPS40400, TPS544B20, TPS544B25, TPS544C20, TPS544C25
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030049
Guenter Roeckcfca3782015-08-07 20:55:59 -070050 Prefixes: 'tps40400', 'tps544b20', 'tps544b25', 'tps544c20', 'tps544c25'
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030051
Guenter Roeckc5f35c92012-02-28 10:24:54 -080052 Addresses scanned: -
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030053
Guenter Roeckc5f35c92012-02-28 10:24:54 -080054 Datasheets:
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030055
Guenter Roeckc5f35c92012-02-28 10:24:54 -080056 http://www.ti.com/lit/gpn/tps40400
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030057
Guenter Roeckcfca3782015-08-07 20:55:59 -070058 http://www.ti.com/lit/gpn/tps544b20
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030059
Guenter Roeckcfca3782015-08-07 20:55:59 -070060 http://www.ti.com/lit/gpn/tps544b25
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030061
Guenter Roeckcfca3782015-08-07 20:55:59 -070062 http://www.ti.com/lit/gpn/tps544c20
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030063
Guenter Roeckcfca3782015-08-07 20:55:59 -070064 http://www.ti.com/lit/gpn/tps544c25
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030065
Guenter Roeck1a1ea122019-12-13 13:36:36 -080066 * Maxim MAX20796
67
68 Prefix: 'max20796'
69
70 Addresses scanned: -
71
72 Datasheet:
73
74 Not published
75
Guenter Roeck44f5a402010-06-28 14:29:03 -070076 * Generic PMBus devices
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030077
Guenter Roeck44f5a402010-06-28 14:29:03 -070078 Prefix: 'pmbus'
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030079
Guenter Roeck44f5a402010-06-28 14:29:03 -070080 Addresses scanned: -
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030081
Guenter Roeck44f5a402010-06-28 14:29:03 -070082 Datasheet: n.a.
83
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -030084
Guenter Roecke3333e52013-02-20 20:58:42 -080085Author: Guenter Roeck <linux@roeck-us.net>
Guenter Roeck44f5a402010-06-28 14:29:03 -070086
87
88Description
89-----------
90
Masanari Iida92417da2016-02-28 12:57:57 +090091This driver supports hardware monitoring for various PMBus compliant devices.
Guenter Roeck44f5a402010-06-28 14:29:03 -070092It supports voltage, current, power, and temperature sensors as supported
93by the device.
94
95Each monitored channel has its own high and low limits, plus a critical
96limit.
97
98Fan support will be added in a later version of this driver.
99
100
101Usage Notes
102-----------
103
104This driver does not probe for PMBus devices, since there is no register
105which can be safely used to identify the chip (The MFG_ID register is not
106supported by all chips), and since there is no well defined address range for
107PMBus devices. You will have to instantiate the devices explicitly.
108
109Example: the following will load the driver for an LTC2978 at address 0x60
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300110on I2C bus #1::
111
112 $ modprobe pmbus
113 $ echo ltc2978 0x60 > /sys/bus/i2c/devices/i2c-1/new_device
Guenter Roeck44f5a402010-06-28 14:29:03 -0700114
115
116Platform data support
117---------------------
118
119Support for additional PMBus chips can be added by defining chip parameters in
120a new chip specific driver file. For example, (untested) code to add support for
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300121Emerson DS1200 power modules might look as follows::
Guenter Roeck44f5a402010-06-28 14:29:03 -0700122
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300123 static struct pmbus_driver_info ds1200_info = {
Guenter Roeck44f5a402010-06-28 14:29:03 -0700124 .pages = 1,
125 /* Note: All other sensors are in linear mode */
126 .direct[PSC_VOLTAGE_OUT] = true,
127 .direct[PSC_TEMPERATURE] = true,
128 .direct[PSC_CURRENT_OUT] = true,
129 .m[PSC_VOLTAGE_IN] = 1,
130 .b[PSC_VOLTAGE_IN] = 0,
131 .R[PSC_VOLTAGE_IN] = 3,
132 .m[PSC_VOLTAGE_OUT] = 1,
133 .b[PSC_VOLTAGE_OUT] = 0,
134 .R[PSC_VOLTAGE_OUT] = 3,
135 .m[PSC_TEMPERATURE] = 1,
136 .b[PSC_TEMPERATURE] = 0,
137 .R[PSC_TEMPERATURE] = 3,
138 .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN | PMBUS_HAVE_STATUS_INPUT
139 | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT
140 | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT
141 | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT
142 | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP
143 | PMBUS_HAVE_FAN12 | PMBUS_HAVE_STATUS_FAN12,
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300144 };
Guenter Roeck44f5a402010-06-28 14:29:03 -0700145
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300146 static int ds1200_probe(struct i2c_client *client,
147 const struct i2c_device_id *id)
148 {
Guenter Roeck44f5a402010-06-28 14:29:03 -0700149 return pmbus_do_probe(client, id, &ds1200_info);
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300150 }
Guenter Roeck44f5a402010-06-28 14:29:03 -0700151
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300152 static int ds1200_remove(struct i2c_client *client)
153 {
Guenter Roeck44f5a402010-06-28 14:29:03 -0700154 return pmbus_do_remove(client);
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300155 }
Guenter Roeck44f5a402010-06-28 14:29:03 -0700156
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300157 static const struct i2c_device_id ds1200_id[] = {
Guenter Roeck44f5a402010-06-28 14:29:03 -0700158 {"ds1200", 0},
159 {}
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300160 };
Guenter Roeck44f5a402010-06-28 14:29:03 -0700161
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300162 MODULE_DEVICE_TABLE(i2c, ds1200_id);
Guenter Roeck44f5a402010-06-28 14:29:03 -0700163
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300164 /* This is the driver that will be inserted */
165 static struct i2c_driver ds1200_driver = {
Guenter Roeck44f5a402010-06-28 14:29:03 -0700166 .driver = {
167 .name = "ds1200",
168 },
169 .probe = ds1200_probe,
170 .remove = ds1200_remove,
171 .id_table = ds1200_id,
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300172 };
Guenter Roeck44f5a402010-06-28 14:29:03 -0700173
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300174 static int __init ds1200_init(void)
175 {
Guenter Roeck44f5a402010-06-28 14:29:03 -0700176 return i2c_add_driver(&ds1200_driver);
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300177 }
Guenter Roeck44f5a402010-06-28 14:29:03 -0700178
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300179 static void __exit ds1200_exit(void)
180 {
Guenter Roeck44f5a402010-06-28 14:29:03 -0700181 i2c_del_driver(&ds1200_driver);
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300182 }
Guenter Roeck44f5a402010-06-28 14:29:03 -0700183
184
185Sysfs entries
186-------------
187
188When probing the chip, the driver identifies which PMBus registers are
189supported, and determines available sensors from this information.
Masanari Iida02582e92012-08-22 19:11:26 +0900190Attribute files only exist if respective sensors are supported by the chip.
Guenter Roeck44f5a402010-06-28 14:29:03 -0700191Labels are provided to inform the user about the sensor associated with
192a given sysfs entry.
193
194The following attributes are supported. Limits are read-write; all other
195attributes are read-only.
196
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300197======================= ========================================================
Guenter Roeck44f5a402010-06-28 14:29:03 -0700198inX_input Measured voltage. From READ_VIN or READ_VOUT register.
Lucas De Marchi25985ed2011-03-30 22:57:33 -0300199inX_min Minimum Voltage.
Guenter Roeck44f5a402010-06-28 14:29:03 -0700200 From VIN_UV_WARN_LIMIT or VOUT_UV_WARN_LIMIT register.
201inX_max Maximum voltage.
202 From VIN_OV_WARN_LIMIT or VOUT_OV_WARN_LIMIT register.
Lucas De Marchi25985ed2011-03-30 22:57:33 -0300203inX_lcrit Critical minimum Voltage.
Guenter Roeck44f5a402010-06-28 14:29:03 -0700204 From VIN_UV_FAULT_LIMIT or VOUT_UV_FAULT_LIMIT register.
205inX_crit Critical maximum voltage.
206 From VIN_OV_FAULT_LIMIT or VOUT_OV_FAULT_LIMIT register.
207inX_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
208inX_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
209inX_lcrit_alarm Voltage critical low alarm.
210 From VOLTAGE_UV_FAULT status.
211inX_crit_alarm Voltage critical high alarm.
212 From VOLTAGE_OV_FAULT status.
213inX_label "vin", "vcap", or "voutY"
214
215currX_input Measured current. From READ_IIN or READ_IOUT register.
216currX_max Maximum current.
217 From IIN_OC_WARN_LIMIT or IOUT_OC_WARN_LIMIT register.
Lucas De Marchi25985ed2011-03-30 22:57:33 -0300218currX_lcrit Critical minimum output current.
Guenter Roeck44f5a402010-06-28 14:29:03 -0700219 From IOUT_UC_FAULT_LIMIT register.
220currX_crit Critical maximum current.
221 From IIN_OC_FAULT_LIMIT or IOUT_OC_FAULT_LIMIT register.
222currX_alarm Current high alarm.
223 From IIN_OC_WARNING or IOUT_OC_WARNING status.
Guenter Roeck180b3d82011-04-18 09:48:58 -0700224currX_max_alarm Current high alarm.
225 From IIN_OC_WARN_LIMIT or IOUT_OC_WARN_LIMIT status.
Guenter Roeck44f5a402010-06-28 14:29:03 -0700226currX_lcrit_alarm Output current critical low alarm.
227 From IOUT_UC_FAULT status.
228currX_crit_alarm Current critical high alarm.
229 From IIN_OC_FAULT or IOUT_OC_FAULT status.
Guenter Roeck16358542020-01-13 15:30:14 -0800230currX_label "iin", "iinY", "iinY.Z", "ioutY", or "ioutY.Z",
231 where Y reflects the page number and Z reflects the
232 phase.
Guenter Roeck44f5a402010-06-28 14:29:03 -0700233
234powerX_input Measured power. From READ_PIN or READ_POUT register.
235powerX_cap Output power cap. From POUT_MAX register.
236powerX_max Power limit. From PIN_OP_WARN_LIMIT or
237 POUT_OP_WARN_LIMIT register.
238powerX_crit Critical output power limit.
239 From POUT_OP_FAULT_LIMIT register.
240powerX_alarm Power high alarm.
241 From PIN_OP_WARNING or POUT_OP_WARNING status.
242powerX_crit_alarm Output power critical high alarm.
243 From POUT_OP_FAULT status.
Guenter Roeck16358542020-01-13 15:30:14 -0800244powerX_label "pin", "pinY", "pinY.Z", "poutY", or "poutY.Z",
245 where Y reflects the page number and Z reflects the
246 phase.
Guenter Roeck44f5a402010-06-28 14:29:03 -0700247
Guenter Roeck180b3d82011-04-18 09:48:58 -0700248tempX_input Measured temperature.
Guenter Roeck44f5a402010-06-28 14:29:03 -0700249 From READ_TEMPERATURE_X register.
Guenter Roeck180b3d82011-04-18 09:48:58 -0700250tempX_min Mimimum temperature. From UT_WARN_LIMIT register.
251tempX_max Maximum temperature. From OT_WARN_LIMIT register.
252tempX_lcrit Critical low temperature.
Guenter Roeck44f5a402010-06-28 14:29:03 -0700253 From UT_FAULT_LIMIT register.
Guenter Roeck180b3d82011-04-18 09:48:58 -0700254tempX_crit Critical high temperature.
Guenter Roeck44f5a402010-06-28 14:29:03 -0700255 From OT_FAULT_LIMIT register.
256tempX_min_alarm Chip temperature low alarm. Set by comparing
257 READ_TEMPERATURE_X with UT_WARN_LIMIT if
258 TEMP_UT_WARNING status is set.
259tempX_max_alarm Chip temperature high alarm. Set by comparing
260 READ_TEMPERATURE_X with OT_WARN_LIMIT if
261 TEMP_OT_WARNING status is set.
262tempX_lcrit_alarm Chip temperature critical low alarm. Set by comparing
263 READ_TEMPERATURE_X with UT_FAULT_LIMIT if
264 TEMP_UT_FAULT status is set.
265tempX_crit_alarm Chip temperature critical high alarm. Set by comparing
266 READ_TEMPERATURE_X with OT_FAULT_LIMIT if
267 TEMP_OT_FAULT status is set.
Mauro Carvalho Chehab1f234ff2019-04-17 06:46:26 -0300268======================= ========================================================