1*4882a593SmuzhiyunKernel driver pmbus 2*4882a593Smuzhiyun=================== 3*4882a593Smuzhiyun 4*4882a593SmuzhiyunSupported chips: 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun * Ericsson BMR453, BMR454 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun Prefixes: 'bmr453', 'bmr454' 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun Addresses scanned: - 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun Datasheet: 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun http://archive.ericsson.net/service/internet/picov/get?DocNo=28701-EN/LZT146395 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun * ON Semiconductor ADP4000, NCP4200, NCP4208 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun Prefixes: 'adp4000', 'ncp4200', 'ncp4208' 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun Addresses scanned: - 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun Datasheets: 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun https://www.onsemi.com/pub_link/Collateral/ADP4000-D.PDF 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun https://www.onsemi.com/pub_link/Collateral/NCP4200-D.PDF 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun https://www.onsemi.com/pub_link/Collateral/JUNE%202009-%20REV.%200.PDF 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun * Lineage Power 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun Prefixes: 'mdt040', 'pdt003', 'pdt006', 'pdt012', 'udt020' 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun Addresses scanned: - 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun Datasheets: 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun http://www.lineagepower.com/oem/pdf/PDT003A0X.pdf 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun http://www.lineagepower.com/oem/pdf/PDT006A0X.pdf 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun http://www.lineagepower.com/oem/pdf/PDT012A0X.pdf 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun http://www.lineagepower.com/oem/pdf/UDT020A0X.pdf 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun http://www.lineagepower.com/oem/pdf/MDT040A0X.pdf 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun * Texas Instruments TPS40400, TPS544B20, TPS544B25, TPS544C20, TPS544C25 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun Prefixes: 'tps40400', 'tps544b20', 'tps544b25', 'tps544c20', 'tps544c25' 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun Addresses scanned: - 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun Datasheets: 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun https://www.ti.com/lit/gpn/tps40400 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun https://www.ti.com/lit/gpn/tps544b20 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun https://www.ti.com/lit/gpn/tps544b25 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun https://www.ti.com/lit/gpn/tps544c20 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun https://www.ti.com/lit/gpn/tps544c25 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun * Maxim MAX20796 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun Prefix: 'max20796' 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun Addresses scanned: - 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun Datasheet: 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun Not published 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun * Generic PMBus devices 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun Prefix: 'pmbus' 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun Addresses scanned: - 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun Datasheet: n.a. 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun 85*4882a593SmuzhiyunAuthor: Guenter Roeck <linux@roeck-us.net> 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun 88*4882a593SmuzhiyunDescription 89*4882a593Smuzhiyun----------- 90*4882a593Smuzhiyun 91*4882a593SmuzhiyunThis driver supports hardware monitoring for various PMBus compliant devices. 92*4882a593SmuzhiyunIt supports voltage, current, power, and temperature sensors as supported 93*4882a593Smuzhiyunby the device. 94*4882a593Smuzhiyun 95*4882a593SmuzhiyunEach monitored channel has its own high and low limits, plus a critical 96*4882a593Smuzhiyunlimit. 97*4882a593Smuzhiyun 98*4882a593SmuzhiyunFan support will be added in a later version of this driver. 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun 101*4882a593SmuzhiyunUsage Notes 102*4882a593Smuzhiyun----------- 103*4882a593Smuzhiyun 104*4882a593SmuzhiyunThis driver does not probe for PMBus devices, since there is no register 105*4882a593Smuzhiyunwhich can be safely used to identify the chip (The MFG_ID register is not 106*4882a593Smuzhiyunsupported by all chips), and since there is no well defined address range for 107*4882a593SmuzhiyunPMBus devices. You will have to instantiate the devices explicitly. 108*4882a593Smuzhiyun 109*4882a593SmuzhiyunExample: the following will load the driver for an LTC2978 at address 0x60 110*4882a593Smuzhiyunon I2C bus #1:: 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun $ modprobe pmbus 113*4882a593Smuzhiyun $ echo ltc2978 0x60 > /sys/bus/i2c/devices/i2c-1/new_device 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun 116*4882a593SmuzhiyunPlatform data support 117*4882a593Smuzhiyun--------------------- 118*4882a593Smuzhiyun 119*4882a593SmuzhiyunSupport for additional PMBus chips can be added by defining chip parameters in 120*4882a593Smuzhiyuna new chip specific driver file. For example, (untested) code to add support for 121*4882a593SmuzhiyunEmerson DS1200 power modules might look as follows:: 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun static struct pmbus_driver_info ds1200_info = { 124*4882a593Smuzhiyun .pages = 1, 125*4882a593Smuzhiyun /* Note: All other sensors are in linear mode */ 126*4882a593Smuzhiyun .direct[PSC_VOLTAGE_OUT] = true, 127*4882a593Smuzhiyun .direct[PSC_TEMPERATURE] = true, 128*4882a593Smuzhiyun .direct[PSC_CURRENT_OUT] = true, 129*4882a593Smuzhiyun .m[PSC_VOLTAGE_IN] = 1, 130*4882a593Smuzhiyun .b[PSC_VOLTAGE_IN] = 0, 131*4882a593Smuzhiyun .R[PSC_VOLTAGE_IN] = 3, 132*4882a593Smuzhiyun .m[PSC_VOLTAGE_OUT] = 1, 133*4882a593Smuzhiyun .b[PSC_VOLTAGE_OUT] = 0, 134*4882a593Smuzhiyun .R[PSC_VOLTAGE_OUT] = 3, 135*4882a593Smuzhiyun .m[PSC_TEMPERATURE] = 1, 136*4882a593Smuzhiyun .b[PSC_TEMPERATURE] = 0, 137*4882a593Smuzhiyun .R[PSC_TEMPERATURE] = 3, 138*4882a593Smuzhiyun .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN | PMBUS_HAVE_STATUS_INPUT 139*4882a593Smuzhiyun | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT 140*4882a593Smuzhiyun | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT 141*4882a593Smuzhiyun | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT 142*4882a593Smuzhiyun | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP 143*4882a593Smuzhiyun | PMBUS_HAVE_FAN12 | PMBUS_HAVE_STATUS_FAN12, 144*4882a593Smuzhiyun }; 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun static int ds1200_probe(struct i2c_client *client) 147*4882a593Smuzhiyun { 148*4882a593Smuzhiyun return pmbus_do_probe(client, &ds1200_info); 149*4882a593Smuzhiyun } 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun static int ds1200_remove(struct i2c_client *client) 152*4882a593Smuzhiyun { 153*4882a593Smuzhiyun return pmbus_do_remove(client); 154*4882a593Smuzhiyun } 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun static const struct i2c_device_id ds1200_id[] = { 157*4882a593Smuzhiyun {"ds1200", 0}, 158*4882a593Smuzhiyun {} 159*4882a593Smuzhiyun }; 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun MODULE_DEVICE_TABLE(i2c, ds1200_id); 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun /* This is the driver that will be inserted */ 164*4882a593Smuzhiyun static struct i2c_driver ds1200_driver = { 165*4882a593Smuzhiyun .driver = { 166*4882a593Smuzhiyun .name = "ds1200", 167*4882a593Smuzhiyun }, 168*4882a593Smuzhiyun .probe_new = ds1200_probe, 169*4882a593Smuzhiyun .remove = ds1200_remove, 170*4882a593Smuzhiyun .id_table = ds1200_id, 171*4882a593Smuzhiyun }; 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun static int __init ds1200_init(void) 174*4882a593Smuzhiyun { 175*4882a593Smuzhiyun return i2c_add_driver(&ds1200_driver); 176*4882a593Smuzhiyun } 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun static void __exit ds1200_exit(void) 179*4882a593Smuzhiyun { 180*4882a593Smuzhiyun i2c_del_driver(&ds1200_driver); 181*4882a593Smuzhiyun } 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun 184*4882a593SmuzhiyunSysfs entries 185*4882a593Smuzhiyun------------- 186*4882a593Smuzhiyun 187*4882a593SmuzhiyunWhen probing the chip, the driver identifies which PMBus registers are 188*4882a593Smuzhiyunsupported, and determines available sensors from this information. 189*4882a593SmuzhiyunAttribute files only exist if respective sensors are supported by the chip. 190*4882a593SmuzhiyunLabels are provided to inform the user about the sensor associated with 191*4882a593Smuzhiyuna given sysfs entry. 192*4882a593Smuzhiyun 193*4882a593SmuzhiyunThe following attributes are supported. Limits are read-write; all other 194*4882a593Smuzhiyunattributes are read-only. 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun======================= ======================================================== 197*4882a593SmuzhiyuninX_input Measured voltage. From READ_VIN or READ_VOUT register. 198*4882a593SmuzhiyuninX_min Minimum Voltage. 199*4882a593Smuzhiyun From VIN_UV_WARN_LIMIT or VOUT_UV_WARN_LIMIT register. 200*4882a593SmuzhiyuninX_max Maximum voltage. 201*4882a593Smuzhiyun From VIN_OV_WARN_LIMIT or VOUT_OV_WARN_LIMIT register. 202*4882a593SmuzhiyuninX_lcrit Critical minimum Voltage. 203*4882a593Smuzhiyun From VIN_UV_FAULT_LIMIT or VOUT_UV_FAULT_LIMIT register. 204*4882a593SmuzhiyuninX_crit Critical maximum voltage. 205*4882a593Smuzhiyun From VIN_OV_FAULT_LIMIT or VOUT_OV_FAULT_LIMIT register. 206*4882a593SmuzhiyuninX_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. 207*4882a593SmuzhiyuninX_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. 208*4882a593SmuzhiyuninX_lcrit_alarm Voltage critical low alarm. 209*4882a593Smuzhiyun From VOLTAGE_UV_FAULT status. 210*4882a593SmuzhiyuninX_crit_alarm Voltage critical high alarm. 211*4882a593Smuzhiyun From VOLTAGE_OV_FAULT status. 212*4882a593SmuzhiyuninX_label "vin", "vcap", or "voutY" 213*4882a593SmuzhiyuninX_rated_min Minimum rated voltage. 214*4882a593Smuzhiyun From MFR_VIN_MIN or MFR_VOUT_MIN register. 215*4882a593SmuzhiyuninX_rated_max Maximum rated voltage. 216*4882a593Smuzhiyun From MFR_VIN_MAX or MFR_VOUT_MAX register. 217*4882a593Smuzhiyun 218*4882a593SmuzhiyuncurrX_input Measured current. From READ_IIN or READ_IOUT register. 219*4882a593SmuzhiyuncurrX_max Maximum current. 220*4882a593Smuzhiyun From IIN_OC_WARN_LIMIT or IOUT_OC_WARN_LIMIT register. 221*4882a593SmuzhiyuncurrX_lcrit Critical minimum output current. 222*4882a593Smuzhiyun From IOUT_UC_FAULT_LIMIT register. 223*4882a593SmuzhiyuncurrX_crit Critical maximum current. 224*4882a593Smuzhiyun From IIN_OC_FAULT_LIMIT or IOUT_OC_FAULT_LIMIT register. 225*4882a593SmuzhiyuncurrX_alarm Current high alarm. 226*4882a593Smuzhiyun From IIN_OC_WARNING or IOUT_OC_WARNING status. 227*4882a593SmuzhiyuncurrX_max_alarm Current high alarm. 228*4882a593Smuzhiyun From IIN_OC_WARN_LIMIT or IOUT_OC_WARN_LIMIT status. 229*4882a593SmuzhiyuncurrX_lcrit_alarm Output current critical low alarm. 230*4882a593Smuzhiyun From IOUT_UC_FAULT status. 231*4882a593SmuzhiyuncurrX_crit_alarm Current critical high alarm. 232*4882a593Smuzhiyun From IIN_OC_FAULT or IOUT_OC_FAULT status. 233*4882a593SmuzhiyuncurrX_label "iin", "iinY", "iinY.Z", "ioutY", or "ioutY.Z", 234*4882a593Smuzhiyun where Y reflects the page number and Z reflects the 235*4882a593Smuzhiyun phase. 236*4882a593SmuzhiyuncurrX_rated_max Maximum rated current. 237*4882a593Smuzhiyun From MFR_IIN_MAX or MFR_IOUT_MAX register. 238*4882a593Smuzhiyun 239*4882a593SmuzhiyunpowerX_input Measured power. From READ_PIN or READ_POUT register. 240*4882a593SmuzhiyunpowerX_cap Output power cap. From POUT_MAX register. 241*4882a593SmuzhiyunpowerX_max Power limit. From PIN_OP_WARN_LIMIT or 242*4882a593Smuzhiyun POUT_OP_WARN_LIMIT register. 243*4882a593SmuzhiyunpowerX_crit Critical output power limit. 244*4882a593Smuzhiyun From POUT_OP_FAULT_LIMIT register. 245*4882a593SmuzhiyunpowerX_alarm Power high alarm. 246*4882a593Smuzhiyun From PIN_OP_WARNING or POUT_OP_WARNING status. 247*4882a593SmuzhiyunpowerX_crit_alarm Output power critical high alarm. 248*4882a593Smuzhiyun From POUT_OP_FAULT status. 249*4882a593SmuzhiyunpowerX_label "pin", "pinY", "pinY.Z", "poutY", or "poutY.Z", 250*4882a593Smuzhiyun where Y reflects the page number and Z reflects the 251*4882a593Smuzhiyun phase. 252*4882a593SmuzhiyunpowerX_rated_max Maximum rated power. 253*4882a593Smuzhiyun From MFR_PIN_MAX or MFR_POUT_MAX register. 254*4882a593Smuzhiyun 255*4882a593SmuzhiyuntempX_input Measured temperature. 256*4882a593Smuzhiyun From READ_TEMPERATURE_X register. 257*4882a593SmuzhiyuntempX_min Minimum temperature. From UT_WARN_LIMIT register. 258*4882a593SmuzhiyuntempX_max Maximum temperature. From OT_WARN_LIMIT register. 259*4882a593SmuzhiyuntempX_lcrit Critical low temperature. 260*4882a593Smuzhiyun From UT_FAULT_LIMIT register. 261*4882a593SmuzhiyuntempX_crit Critical high temperature. 262*4882a593Smuzhiyun From OT_FAULT_LIMIT register. 263*4882a593SmuzhiyuntempX_min_alarm Chip temperature low alarm. Set by comparing 264*4882a593Smuzhiyun READ_TEMPERATURE_X with UT_WARN_LIMIT if 265*4882a593Smuzhiyun TEMP_UT_WARNING status is set. 266*4882a593SmuzhiyuntempX_max_alarm Chip temperature high alarm. Set by comparing 267*4882a593Smuzhiyun READ_TEMPERATURE_X with OT_WARN_LIMIT if 268*4882a593Smuzhiyun TEMP_OT_WARNING status is set. 269*4882a593SmuzhiyuntempX_lcrit_alarm Chip temperature critical low alarm. Set by comparing 270*4882a593Smuzhiyun READ_TEMPERATURE_X with UT_FAULT_LIMIT if 271*4882a593Smuzhiyun TEMP_UT_FAULT status is set. 272*4882a593SmuzhiyuntempX_crit_alarm Chip temperature critical high alarm. Set by comparing 273*4882a593Smuzhiyun READ_TEMPERATURE_X with OT_FAULT_LIMIT if 274*4882a593Smuzhiyun TEMP_OT_FAULT status is set. 275*4882a593SmuzhiyuntempX_rated_min Minimum rated temperature. 276*4882a593Smuzhiyun From MFR_TAMBIENT_MIN register. 277*4882a593SmuzhiyuntempX_rated_max Maximum rated temperature. 278*4882a593Smuzhiyun From MFR_TAMBIENT_MAX, MFR_MAX_TEMP_1, MFR_MAX_TEMP_2 or 279*4882a593Smuzhiyun MFR_MAX_TEMP_3 register. 280*4882a593Smuzhiyun======================= ======================================================== 281