1*4882a593SmuzhiyunNaming and data format standards for sysfs files 2*4882a593Smuzhiyun================================================ 3*4882a593Smuzhiyun 4*4882a593SmuzhiyunThe libsensors library offers an interface to the raw sensors data 5*4882a593Smuzhiyunthrough the sysfs interface. Since lm-sensors 3.0.0, libsensors is 6*4882a593Smuzhiyuncompletely chip-independent. It assumes that all the kernel drivers 7*4882a593Smuzhiyunimplement the standard sysfs interface described in this document. 8*4882a593SmuzhiyunThis makes adding or updating support for any given chip very easy, as 9*4882a593Smuzhiyunlibsensors, and applications using it, do not need to be modified. 10*4882a593SmuzhiyunThis is a major improvement compared to lm-sensors 2. 11*4882a593Smuzhiyun 12*4882a593SmuzhiyunNote that motherboards vary widely in the connections to sensor chips. 13*4882a593SmuzhiyunThere is no standard that ensures, for example, that the second 14*4882a593Smuzhiyuntemperature sensor is connected to the CPU, or that the second fan is on 15*4882a593Smuzhiyunthe CPU. Also, some values reported by the chips need some computation 16*4882a593Smuzhiyunbefore they make full sense. For example, most chips can only measure 17*4882a593Smuzhiyunvoltages between 0 and +4V. Other voltages are scaled back into that 18*4882a593Smuzhiyunrange using external resistors. Since the values of these resistors 19*4882a593Smuzhiyuncan change from motherboard to motherboard, the conversions cannot be 20*4882a593Smuzhiyunhard coded into the driver and have to be done in user space. 21*4882a593Smuzhiyun 22*4882a593SmuzhiyunFor this reason, even if we aim at a chip-independent libsensors, it will 23*4882a593Smuzhiyunstill require a configuration file (e.g. /etc/sensors.conf) for proper 24*4882a593Smuzhiyunvalues conversion, labeling of inputs and hiding of unused inputs. 25*4882a593Smuzhiyun 26*4882a593SmuzhiyunAn alternative method that some programs use is to access the sysfs 27*4882a593Smuzhiyunfiles directly. This document briefly describes the standards that the 28*4882a593Smuzhiyundrivers follow, so that an application program can scan for entries and 29*4882a593Smuzhiyunaccess this data in a simple and consistent way. That said, such programs 30*4882a593Smuzhiyunwill have to implement conversion, labeling and hiding of inputs. For 31*4882a593Smuzhiyunthis reason, it is still not recommended to bypass the library. 32*4882a593Smuzhiyun 33*4882a593SmuzhiyunEach chip gets its own directory in the sysfs /sys/devices tree. To 34*4882a593Smuzhiyunfind all sensor chips, it is easier to follow the device symlinks from 35*4882a593Smuzhiyun`/sys/class/hwmon/hwmon*`. 36*4882a593Smuzhiyun 37*4882a593SmuzhiyunUp to lm-sensors 3.0.0, libsensors looks for hardware monitoring attributes 38*4882a593Smuzhiyunin the "physical" device directory. Since lm-sensors 3.0.1, attributes found 39*4882a593Smuzhiyunin the hwmon "class" device directory are also supported. Complex drivers 40*4882a593Smuzhiyun(e.g. drivers for multifunction chips) may want to use this possibility to 41*4882a593Smuzhiyunavoid namespace pollution. The only drawback will be that older versions of 42*4882a593Smuzhiyunlibsensors won't support the driver in question. 43*4882a593Smuzhiyun 44*4882a593SmuzhiyunAll sysfs values are fixed point numbers. 45*4882a593Smuzhiyun 46*4882a593SmuzhiyunThere is only one value per file, unlike the older /proc specification. 47*4882a593SmuzhiyunThe common scheme for files naming is: <type><number>_<item>. Usual 48*4882a593Smuzhiyuntypes for sensor chips are "in" (voltage), "temp" (temperature) and 49*4882a593Smuzhiyun"fan" (fan). Usual items are "input" (measured value), "max" (high 50*4882a593Smuzhiyunthreshold, "min" (low threshold). Numbering usually starts from 1, 51*4882a593Smuzhiyunexcept for voltages which start from 0 (because most data sheets use 52*4882a593Smuzhiyunthis). A number is always used for elements that can be present more 53*4882a593Smuzhiyunthan once, even if there is a single element of the given type on the 54*4882a593Smuzhiyunspecific chip. Other files do not refer to a specific element, so 55*4882a593Smuzhiyunthey have a simple name, and no number. 56*4882a593Smuzhiyun 57*4882a593SmuzhiyunAlarms are direct indications read from the chips. The drivers do NOT 58*4882a593Smuzhiyunmake comparisons of readings to thresholds. This allows violations 59*4882a593Smuzhiyunbetween readings to be caught and alarmed. The exact definition of an 60*4882a593Smuzhiyunalarm (for example, whether a threshold must be met or must be exceeded 61*4882a593Smuzhiyunto cause an alarm) is chip-dependent. 62*4882a593Smuzhiyun 63*4882a593SmuzhiyunWhen setting values of hwmon sysfs attributes, the string representation of 64*4882a593Smuzhiyunthe desired value must be written, note that strings which are not a number 65*4882a593Smuzhiyunare interpreted as 0! For more on how written strings are interpreted see the 66*4882a593Smuzhiyun"sysfs attribute writes interpretation" section at the end of this file. 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun------------------------------------------------------------------------- 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun======= =========================================== 71*4882a593Smuzhiyun`[0-*]` denotes any positive number starting from 0 72*4882a593Smuzhiyun`[1-*]` denotes any positive number starting from 1 73*4882a593SmuzhiyunRO read only value 74*4882a593SmuzhiyunWO write only value 75*4882a593SmuzhiyunRW read/write value 76*4882a593Smuzhiyun======= =========================================== 77*4882a593Smuzhiyun 78*4882a593SmuzhiyunRead/write values may be read-only for some chips, depending on the 79*4882a593Smuzhiyunhardware implementation. 80*4882a593Smuzhiyun 81*4882a593SmuzhiyunAll entries (except name) are optional, and should only be created in a 82*4882a593Smuzhiyungiven driver if the chip has the feature. 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun***************** 86*4882a593SmuzhiyunGlobal attributes 87*4882a593Smuzhiyun***************** 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun`name` 90*4882a593Smuzhiyun The chip name. 91*4882a593Smuzhiyun This should be a short, lowercase string, not containing 92*4882a593Smuzhiyun whitespace, dashes, or the wildcard character '*'. 93*4882a593Smuzhiyun This attribute represents the chip name. It is the only 94*4882a593Smuzhiyun mandatory attribute. 95*4882a593Smuzhiyun I2C devices get this attribute created automatically. 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun RO 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun`update_interval` 100*4882a593Smuzhiyun The interval at which the chip will update readings. 101*4882a593Smuzhiyun Unit: millisecond 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun RW 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun Some devices have a variable update rate or interval. 106*4882a593Smuzhiyun This attribute can be used to change it to the desired value. 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun******** 110*4882a593SmuzhiyunVoltages 111*4882a593Smuzhiyun******** 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun`in[0-*]_min` 114*4882a593Smuzhiyun Voltage min value. 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun Unit: millivolt 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun RW 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun`in[0-*]_lcrit` 121*4882a593Smuzhiyun Voltage critical min value. 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun Unit: millivolt 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun RW 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun If voltage drops to or below this limit, the system may 128*4882a593Smuzhiyun take drastic action such as power down or reset. At the very 129*4882a593Smuzhiyun least, it should report a fault. 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun`in[0-*]_max` 132*4882a593Smuzhiyun Voltage max value. 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun Unit: millivolt 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun RW 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun`in[0-*]_crit` 139*4882a593Smuzhiyun Voltage critical max value. 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun Unit: millivolt 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun RW 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun If voltage reaches or exceeds this limit, the system may 146*4882a593Smuzhiyun take drastic action such as power down or reset. At the very 147*4882a593Smuzhiyun least, it should report a fault. 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun`in[0-*]_input` 150*4882a593Smuzhiyun Voltage input value. 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun Unit: millivolt 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun RO 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun Voltage measured on the chip pin. 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun Actual voltage depends on the scaling resistors on the 159*4882a593Smuzhiyun motherboard, as recommended in the chip datasheet. 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun This varies by chip and by motherboard. 162*4882a593Smuzhiyun Because of this variation, values are generally NOT scaled 163*4882a593Smuzhiyun by the chip driver, and must be done by the application. 164*4882a593Smuzhiyun However, some drivers (notably lm87 and via686a) 165*4882a593Smuzhiyun do scale, because of internal resistors built into a chip. 166*4882a593Smuzhiyun These drivers will output the actual voltage. Rule of 167*4882a593Smuzhiyun thumb: drivers should report the voltage values at the 168*4882a593Smuzhiyun "pins" of the chip. 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun`in[0-*]_average` 171*4882a593Smuzhiyun Average voltage 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun Unit: millivolt 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun RO 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun`in[0-*]_lowest` 178*4882a593Smuzhiyun Historical minimum voltage 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun Unit: millivolt 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun RO 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun`in[0-*]_highest` 185*4882a593Smuzhiyun Historical maximum voltage 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun Unit: millivolt 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun RO 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun`in[0-*]_reset_history` 192*4882a593Smuzhiyun Reset inX_lowest and inX_highest 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun WO 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun`in_reset_history` 197*4882a593Smuzhiyun Reset inX_lowest and inX_highest for all sensors 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun WO 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun`in[0-*]_label` 202*4882a593Smuzhiyun Suggested voltage channel label. 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun Text string 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun Should only be created if the driver has hints about what 207*4882a593Smuzhiyun this voltage channel is being used for, and user-space 208*4882a593Smuzhiyun doesn't. In all other cases, the label is provided by 209*4882a593Smuzhiyun user-space. 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun RO 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun`in[0-*]_enable` 214*4882a593Smuzhiyun Enable or disable the sensors. 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun When disabled the sensor read will return -ENODATA. 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun - 1: Enable 219*4882a593Smuzhiyun - 0: Disable 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun RW 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun`cpu[0-*]_vid` 224*4882a593Smuzhiyun CPU core reference voltage. 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun Unit: millivolt 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun RO 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun Not always correct. 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun`vrm` 233*4882a593Smuzhiyun Voltage Regulator Module version number. 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun RW (but changing it should no more be necessary) 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun Originally the VRM standard version multiplied by 10, but now 238*4882a593Smuzhiyun an arbitrary number, as not all standards have a version 239*4882a593Smuzhiyun number. 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun Affects the way the driver calculates the CPU core reference 242*4882a593Smuzhiyun voltage from the vid pins. 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun`in[0-*]_rated_min` 245*4882a593Smuzhiyun Minimum rated voltage. 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun Unit: millivolt 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun RO 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun`in[0-*]_rated_max` 252*4882a593Smuzhiyun Maximum rated voltage. 253*4882a593Smuzhiyun 254*4882a593Smuzhiyun Unit: millivolt 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun RO 257*4882a593Smuzhiyun 258*4882a593SmuzhiyunAlso see the Alarms section for status flags associated with voltages. 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun**** 262*4882a593SmuzhiyunFans 263*4882a593Smuzhiyun**** 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun`fan[1-*]_min` 266*4882a593Smuzhiyun Fan minimum value 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun Unit: revolution/min (RPM) 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun RW 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun`fan[1-*]_max` 273*4882a593Smuzhiyun Fan maximum value 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun Unit: revolution/min (RPM) 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun Only rarely supported by the hardware. 278*4882a593Smuzhiyun RW 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun`fan[1-*]_input` 281*4882a593Smuzhiyun Fan input value. 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun Unit: revolution/min (RPM) 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun RO 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun`fan[1-*]_div` 288*4882a593Smuzhiyun Fan divisor. 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun Integer value in powers of two (1, 2, 4, 8, 16, 32, 64, 128). 291*4882a593Smuzhiyun 292*4882a593Smuzhiyun RW 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun Some chips only support values 1, 2, 4 and 8. 295*4882a593Smuzhiyun Note that this is actually an internal clock divisor, which 296*4882a593Smuzhiyun affects the measurable speed range, not the read value. 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun`fan[1-*]_pulses` 299*4882a593Smuzhiyun Number of tachometer pulses per fan revolution. 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun Integer value, typically between 1 and 4. 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun RW 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun This value is a characteristic of the fan connected to the 306*4882a593Smuzhiyun device's input, so it has to be set in accordance with the fan 307*4882a593Smuzhiyun model. 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun Should only be created if the chip has a register to configure 310*4882a593Smuzhiyun the number of pulses. In the absence of such a register (and 311*4882a593Smuzhiyun thus attribute) the value assumed by all devices is 2 pulses 312*4882a593Smuzhiyun per fan revolution. 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun`fan[1-*]_target` 315*4882a593Smuzhiyun Desired fan speed 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun Unit: revolution/min (RPM) 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun RW 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun Only makes sense if the chip supports closed-loop fan speed 322*4882a593Smuzhiyun control based on the measured fan speed. 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun`fan[1-*]_label` 325*4882a593Smuzhiyun Suggested fan channel label. 326*4882a593Smuzhiyun 327*4882a593Smuzhiyun Text string 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun Should only be created if the driver has hints about what 330*4882a593Smuzhiyun this fan channel is being used for, and user-space doesn't. 331*4882a593Smuzhiyun In all other cases, the label is provided by user-space. 332*4882a593Smuzhiyun 333*4882a593Smuzhiyun RO 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun`fan[1-*]_enable` 336*4882a593Smuzhiyun Enable or disable the sensors. 337*4882a593Smuzhiyun 338*4882a593Smuzhiyun When disabled the sensor read will return -ENODATA. 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun - 1: Enable 341*4882a593Smuzhiyun - 0: Disable 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun RW 344*4882a593Smuzhiyun 345*4882a593SmuzhiyunAlso see the Alarms section for status flags associated with fans. 346*4882a593Smuzhiyun 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun*** 349*4882a593SmuzhiyunPWM 350*4882a593Smuzhiyun*** 351*4882a593Smuzhiyun 352*4882a593Smuzhiyun`pwm[1-*]` 353*4882a593Smuzhiyun Pulse width modulation fan control. 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun Integer value in the range 0 to 255 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun RW 358*4882a593Smuzhiyun 359*4882a593Smuzhiyun 255 is max or 100%. 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun`pwm[1-*]_enable` 362*4882a593Smuzhiyun Fan speed control method: 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun - 0: no fan speed control (i.e. fan at full speed) 365*4882a593Smuzhiyun - 1: manual fan speed control enabled (using `pwm[1-*]`) 366*4882a593Smuzhiyun - 2+: automatic fan speed control enabled 367*4882a593Smuzhiyun 368*4882a593Smuzhiyun Check individual chip documentation files for automatic mode 369*4882a593Smuzhiyun details. 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun RW 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun`pwm[1-*]_mode` 374*4882a593Smuzhiyun - 0: DC mode (direct current) 375*4882a593Smuzhiyun - 1: PWM mode (pulse-width modulation) 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun RW 378*4882a593Smuzhiyun 379*4882a593Smuzhiyun`pwm[1-*]_freq` 380*4882a593Smuzhiyun Base PWM frequency in Hz. 381*4882a593Smuzhiyun 382*4882a593Smuzhiyun Only possibly available when pwmN_mode is PWM, but not always 383*4882a593Smuzhiyun present even then. 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun RW 386*4882a593Smuzhiyun 387*4882a593Smuzhiyun`pwm[1-*]_auto_channels_temp` 388*4882a593Smuzhiyun Select which temperature channels affect this PWM output in 389*4882a593Smuzhiyun auto mode. 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun Bitfield, 1 is temp1, 2 is temp2, 4 is temp3 etc... 392*4882a593Smuzhiyun Which values are possible depend on the chip used. 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun RW 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun`pwm[1-*]_auto_point[1-*]_pwm` / `pwm[1-*]_auto_point[1-*]_temp` / `pwm[1-*]_auto_point[1-*]_temp_hyst` 397*4882a593Smuzhiyun Define the PWM vs temperature curve. 398*4882a593Smuzhiyun 399*4882a593Smuzhiyun Number of trip points is chip-dependent. Use this for chips 400*4882a593Smuzhiyun which associate trip points to PWM output channels. 401*4882a593Smuzhiyun 402*4882a593Smuzhiyun RW 403*4882a593Smuzhiyun 404*4882a593Smuzhiyun`temp[1-*]_auto_point[1-*]_pwm` / `temp[1-*]_auto_point[1-*]_temp` / `temp[1-*]_auto_point[1-*]_temp_hyst` 405*4882a593Smuzhiyun Define the PWM vs temperature curve. 406*4882a593Smuzhiyun 407*4882a593Smuzhiyun Number of trip points is chip-dependent. Use this for chips 408*4882a593Smuzhiyun which associate trip points to temperature channels. 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun RW 411*4882a593Smuzhiyun 412*4882a593SmuzhiyunThere is a third case where trip points are associated to both PWM output 413*4882a593Smuzhiyunchannels and temperature channels: the PWM values are associated to PWM 414*4882a593Smuzhiyunoutput channels while the temperature values are associated to temperature 415*4882a593Smuzhiyunchannels. In that case, the result is determined by the mapping between 416*4882a593Smuzhiyuntemperature inputs and PWM outputs. When several temperature inputs are 417*4882a593Smuzhiyunmapped to a given PWM output, this leads to several candidate PWM values. 418*4882a593SmuzhiyunThe actual result is up to the chip, but in general the highest candidate 419*4882a593Smuzhiyunvalue (fastest fan speed) wins. 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun 422*4882a593Smuzhiyun************ 423*4882a593SmuzhiyunTemperatures 424*4882a593Smuzhiyun************ 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun`temp[1-*]_type` 427*4882a593Smuzhiyun Sensor type selection. 428*4882a593Smuzhiyun 429*4882a593Smuzhiyun Integers 1 to 6 430*4882a593Smuzhiyun 431*4882a593Smuzhiyun RW 432*4882a593Smuzhiyun 433*4882a593Smuzhiyun - 1: CPU embedded diode 434*4882a593Smuzhiyun - 2: 3904 transistor 435*4882a593Smuzhiyun - 3: thermal diode 436*4882a593Smuzhiyun - 4: thermistor 437*4882a593Smuzhiyun - 5: AMD AMDSI 438*4882a593Smuzhiyun - 6: Intel PECI 439*4882a593Smuzhiyun 440*4882a593Smuzhiyun Not all types are supported by all chips 441*4882a593Smuzhiyun 442*4882a593Smuzhiyun`temp[1-*]_max` 443*4882a593Smuzhiyun Temperature max value. 444*4882a593Smuzhiyun 445*4882a593Smuzhiyun Unit: millidegree Celsius (or millivolt, see below) 446*4882a593Smuzhiyun 447*4882a593Smuzhiyun RW 448*4882a593Smuzhiyun 449*4882a593Smuzhiyun`temp[1-*]_min` 450*4882a593Smuzhiyun Temperature min value. 451*4882a593Smuzhiyun 452*4882a593Smuzhiyun Unit: millidegree Celsius 453*4882a593Smuzhiyun 454*4882a593Smuzhiyun RW 455*4882a593Smuzhiyun 456*4882a593Smuzhiyun`temp[1-*]_max_hyst` 457*4882a593Smuzhiyun Temperature hysteresis value for max limit. 458*4882a593Smuzhiyun 459*4882a593Smuzhiyun Unit: millidegree Celsius 460*4882a593Smuzhiyun 461*4882a593Smuzhiyun Must be reported as an absolute temperature, NOT a delta 462*4882a593Smuzhiyun from the max value. 463*4882a593Smuzhiyun 464*4882a593Smuzhiyun RW 465*4882a593Smuzhiyun 466*4882a593Smuzhiyun`temp[1-*]_min_hyst` 467*4882a593Smuzhiyun Temperature hysteresis value for min limit. 468*4882a593Smuzhiyun Unit: millidegree Celsius 469*4882a593Smuzhiyun 470*4882a593Smuzhiyun Must be reported as an absolute temperature, NOT a delta 471*4882a593Smuzhiyun from the min value. 472*4882a593Smuzhiyun 473*4882a593Smuzhiyun RW 474*4882a593Smuzhiyun 475*4882a593Smuzhiyun`temp[1-*]_input` 476*4882a593Smuzhiyun Temperature input value. 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun Unit: millidegree Celsius 479*4882a593Smuzhiyun 480*4882a593Smuzhiyun RO 481*4882a593Smuzhiyun 482*4882a593Smuzhiyun`temp[1-*]_crit` 483*4882a593Smuzhiyun Temperature critical max value, typically greater than 484*4882a593Smuzhiyun corresponding temp_max values. 485*4882a593Smuzhiyun 486*4882a593Smuzhiyun Unit: millidegree Celsius 487*4882a593Smuzhiyun 488*4882a593Smuzhiyun RW 489*4882a593Smuzhiyun 490*4882a593Smuzhiyun`temp[1-*]_crit_hyst` 491*4882a593Smuzhiyun Temperature hysteresis value for critical limit. 492*4882a593Smuzhiyun 493*4882a593Smuzhiyun Unit: millidegree Celsius 494*4882a593Smuzhiyun 495*4882a593Smuzhiyun Must be reported as an absolute temperature, NOT a delta 496*4882a593Smuzhiyun from the critical value. 497*4882a593Smuzhiyun 498*4882a593Smuzhiyun RW 499*4882a593Smuzhiyun 500*4882a593Smuzhiyun`temp[1-*]_emergency` 501*4882a593Smuzhiyun Temperature emergency max value, for chips supporting more than 502*4882a593Smuzhiyun two upper temperature limits. Must be equal or greater than 503*4882a593Smuzhiyun corresponding temp_crit values. 504*4882a593Smuzhiyun 505*4882a593Smuzhiyun Unit: millidegree Celsius 506*4882a593Smuzhiyun 507*4882a593Smuzhiyun RW 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun`temp[1-*]_emergency_hyst` 510*4882a593Smuzhiyun Temperature hysteresis value for emergency limit. 511*4882a593Smuzhiyun 512*4882a593Smuzhiyun Unit: millidegree Celsius 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun Must be reported as an absolute temperature, NOT a delta 515*4882a593Smuzhiyun from the emergency value. 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun RW 518*4882a593Smuzhiyun 519*4882a593Smuzhiyun`temp[1-*]_lcrit` 520*4882a593Smuzhiyun Temperature critical min value, typically lower than 521*4882a593Smuzhiyun corresponding temp_min values. 522*4882a593Smuzhiyun 523*4882a593Smuzhiyun Unit: millidegree Celsius 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun RW 526*4882a593Smuzhiyun 527*4882a593Smuzhiyun`temp[1-*]_lcrit_hyst` 528*4882a593Smuzhiyun Temperature hysteresis value for critical min limit. 529*4882a593Smuzhiyun 530*4882a593Smuzhiyun Unit: millidegree Celsius 531*4882a593Smuzhiyun 532*4882a593Smuzhiyun Must be reported as an absolute temperature, NOT a delta 533*4882a593Smuzhiyun from the critical min value. 534*4882a593Smuzhiyun 535*4882a593Smuzhiyun RW 536*4882a593Smuzhiyun 537*4882a593Smuzhiyun`temp[1-*]_offset` 538*4882a593Smuzhiyun Temperature offset which is added to the temperature reading 539*4882a593Smuzhiyun by the chip. 540*4882a593Smuzhiyun 541*4882a593Smuzhiyun Unit: millidegree Celsius 542*4882a593Smuzhiyun 543*4882a593Smuzhiyun Read/Write value. 544*4882a593Smuzhiyun 545*4882a593Smuzhiyun`temp[1-*]_label` 546*4882a593Smuzhiyun Suggested temperature channel label. 547*4882a593Smuzhiyun 548*4882a593Smuzhiyun Text string 549*4882a593Smuzhiyun 550*4882a593Smuzhiyun Should only be created if the driver has hints about what 551*4882a593Smuzhiyun this temperature channel is being used for, and user-space 552*4882a593Smuzhiyun doesn't. In all other cases, the label is provided by 553*4882a593Smuzhiyun user-space. 554*4882a593Smuzhiyun 555*4882a593Smuzhiyun RO 556*4882a593Smuzhiyun 557*4882a593Smuzhiyun`temp[1-*]_lowest` 558*4882a593Smuzhiyun Historical minimum temperature 559*4882a593Smuzhiyun 560*4882a593Smuzhiyun Unit: millidegree Celsius 561*4882a593Smuzhiyun 562*4882a593Smuzhiyun RO 563*4882a593Smuzhiyun 564*4882a593Smuzhiyun`temp[1-*]_highest` 565*4882a593Smuzhiyun Historical maximum temperature 566*4882a593Smuzhiyun 567*4882a593Smuzhiyun Unit: millidegree Celsius 568*4882a593Smuzhiyun 569*4882a593Smuzhiyun RO 570*4882a593Smuzhiyun 571*4882a593Smuzhiyun`temp[1-*]_reset_history` 572*4882a593Smuzhiyun Reset temp_lowest and temp_highest 573*4882a593Smuzhiyun 574*4882a593Smuzhiyun WO 575*4882a593Smuzhiyun 576*4882a593Smuzhiyun`temp_reset_history` 577*4882a593Smuzhiyun Reset temp_lowest and temp_highest for all sensors 578*4882a593Smuzhiyun 579*4882a593Smuzhiyun WO 580*4882a593Smuzhiyun 581*4882a593Smuzhiyun`temp[1-*]_enable` 582*4882a593Smuzhiyun Enable or disable the sensors. 583*4882a593Smuzhiyun 584*4882a593Smuzhiyun When disabled the sensor read will return -ENODATA. 585*4882a593Smuzhiyun 586*4882a593Smuzhiyun - 1: Enable 587*4882a593Smuzhiyun - 0: Disable 588*4882a593Smuzhiyun 589*4882a593Smuzhiyun RW 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun`temp[1-*]_rated_min` 592*4882a593Smuzhiyun Minimum rated temperature. 593*4882a593Smuzhiyun 594*4882a593Smuzhiyun Unit: millidegree Celsius 595*4882a593Smuzhiyun 596*4882a593Smuzhiyun RO 597*4882a593Smuzhiyun 598*4882a593Smuzhiyun`temp[1-*]_rated_max` 599*4882a593Smuzhiyun Maximum rated temperature. 600*4882a593Smuzhiyun 601*4882a593Smuzhiyun Unit: millidegree Celsius 602*4882a593Smuzhiyun 603*4882a593Smuzhiyun RO 604*4882a593Smuzhiyun 605*4882a593SmuzhiyunSome chips measure temperature using external thermistors and an ADC, and 606*4882a593Smuzhiyunreport the temperature measurement as a voltage. Converting this voltage 607*4882a593Smuzhiyunback to a temperature (or the other way around for limits) requires 608*4882a593Smuzhiyunmathematical functions not available in the kernel, so the conversion 609*4882a593Smuzhiyunmust occur in user space. For these chips, all temp* files described 610*4882a593Smuzhiyunabove should contain values expressed in millivolt instead of millidegree 611*4882a593SmuzhiyunCelsius. In other words, such temperature channels are handled as voltage 612*4882a593Smuzhiyunchannels by the driver. 613*4882a593Smuzhiyun 614*4882a593SmuzhiyunAlso see the Alarms section for status flags associated with temperatures. 615*4882a593Smuzhiyun 616*4882a593Smuzhiyun 617*4882a593Smuzhiyun******** 618*4882a593SmuzhiyunCurrents 619*4882a593Smuzhiyun******** 620*4882a593Smuzhiyun 621*4882a593Smuzhiyun`curr[1-*]_max` 622*4882a593Smuzhiyun Current max value 623*4882a593Smuzhiyun 624*4882a593Smuzhiyun Unit: milliampere 625*4882a593Smuzhiyun 626*4882a593Smuzhiyun RW 627*4882a593Smuzhiyun 628*4882a593Smuzhiyun`curr[1-*]_min` 629*4882a593Smuzhiyun Current min value. 630*4882a593Smuzhiyun 631*4882a593Smuzhiyun Unit: milliampere 632*4882a593Smuzhiyun 633*4882a593Smuzhiyun RW 634*4882a593Smuzhiyun 635*4882a593Smuzhiyun`curr[1-*]_lcrit` 636*4882a593Smuzhiyun Current critical low value 637*4882a593Smuzhiyun 638*4882a593Smuzhiyun Unit: milliampere 639*4882a593Smuzhiyun 640*4882a593Smuzhiyun RW 641*4882a593Smuzhiyun 642*4882a593Smuzhiyun`curr[1-*]_crit` 643*4882a593Smuzhiyun Current critical high value. 644*4882a593Smuzhiyun 645*4882a593Smuzhiyun Unit: milliampere 646*4882a593Smuzhiyun 647*4882a593Smuzhiyun RW 648*4882a593Smuzhiyun 649*4882a593Smuzhiyun`curr[1-*]_input` 650*4882a593Smuzhiyun Current input value 651*4882a593Smuzhiyun 652*4882a593Smuzhiyun Unit: milliampere 653*4882a593Smuzhiyun 654*4882a593Smuzhiyun RO 655*4882a593Smuzhiyun 656*4882a593Smuzhiyun`curr[1-*]_average` 657*4882a593Smuzhiyun Average current use 658*4882a593Smuzhiyun 659*4882a593Smuzhiyun Unit: milliampere 660*4882a593Smuzhiyun 661*4882a593Smuzhiyun RO 662*4882a593Smuzhiyun 663*4882a593Smuzhiyun`curr[1-*]_lowest` 664*4882a593Smuzhiyun Historical minimum current 665*4882a593Smuzhiyun 666*4882a593Smuzhiyun Unit: milliampere 667*4882a593Smuzhiyun 668*4882a593Smuzhiyun RO 669*4882a593Smuzhiyun 670*4882a593Smuzhiyun`curr[1-*]_highest` 671*4882a593Smuzhiyun Historical maximum current 672*4882a593Smuzhiyun Unit: milliampere 673*4882a593Smuzhiyun RO 674*4882a593Smuzhiyun 675*4882a593Smuzhiyun`curr[1-*]_reset_history` 676*4882a593Smuzhiyun Reset currX_lowest and currX_highest 677*4882a593Smuzhiyun 678*4882a593Smuzhiyun WO 679*4882a593Smuzhiyun 680*4882a593Smuzhiyun`curr_reset_history` 681*4882a593Smuzhiyun Reset currX_lowest and currX_highest for all sensors 682*4882a593Smuzhiyun 683*4882a593Smuzhiyun WO 684*4882a593Smuzhiyun 685*4882a593Smuzhiyun`curr[1-*]_enable` 686*4882a593Smuzhiyun Enable or disable the sensors. 687*4882a593Smuzhiyun 688*4882a593Smuzhiyun When disabled the sensor read will return -ENODATA. 689*4882a593Smuzhiyun 690*4882a593Smuzhiyun - 1: Enable 691*4882a593Smuzhiyun - 0: Disable 692*4882a593Smuzhiyun 693*4882a593Smuzhiyun RW 694*4882a593Smuzhiyun 695*4882a593Smuzhiyun`curr[1-*]_rated_min` 696*4882a593Smuzhiyun Minimum rated current. 697*4882a593Smuzhiyun 698*4882a593Smuzhiyun Unit: milliampere 699*4882a593Smuzhiyun 700*4882a593Smuzhiyun RO 701*4882a593Smuzhiyun 702*4882a593Smuzhiyun`curr[1-*]_rated_max` 703*4882a593Smuzhiyun Maximum rated current. 704*4882a593Smuzhiyun 705*4882a593Smuzhiyun Unit: milliampere 706*4882a593Smuzhiyun 707*4882a593Smuzhiyun RO 708*4882a593Smuzhiyun 709*4882a593SmuzhiyunAlso see the Alarms section for status flags associated with currents. 710*4882a593Smuzhiyun 711*4882a593Smuzhiyun***** 712*4882a593SmuzhiyunPower 713*4882a593Smuzhiyun***** 714*4882a593Smuzhiyun 715*4882a593Smuzhiyun`power[1-*]_average` 716*4882a593Smuzhiyun Average power use 717*4882a593Smuzhiyun 718*4882a593Smuzhiyun Unit: microWatt 719*4882a593Smuzhiyun 720*4882a593Smuzhiyun RO 721*4882a593Smuzhiyun 722*4882a593Smuzhiyun`power[1-*]_average_interval` 723*4882a593Smuzhiyun Power use averaging interval. A poll 724*4882a593Smuzhiyun notification is sent to this file if the 725*4882a593Smuzhiyun hardware changes the averaging interval. 726*4882a593Smuzhiyun 727*4882a593Smuzhiyun Unit: milliseconds 728*4882a593Smuzhiyun 729*4882a593Smuzhiyun RW 730*4882a593Smuzhiyun 731*4882a593Smuzhiyun`power[1-*]_average_interval_max` 732*4882a593Smuzhiyun Maximum power use averaging interval 733*4882a593Smuzhiyun 734*4882a593Smuzhiyun Unit: milliseconds 735*4882a593Smuzhiyun 736*4882a593Smuzhiyun RO 737*4882a593Smuzhiyun 738*4882a593Smuzhiyun`power[1-*]_average_interval_min` 739*4882a593Smuzhiyun Minimum power use averaging interval 740*4882a593Smuzhiyun 741*4882a593Smuzhiyun Unit: milliseconds 742*4882a593Smuzhiyun 743*4882a593Smuzhiyun RO 744*4882a593Smuzhiyun 745*4882a593Smuzhiyun`power[1-*]_average_highest` 746*4882a593Smuzhiyun Historical average maximum power use 747*4882a593Smuzhiyun 748*4882a593Smuzhiyun Unit: microWatt 749*4882a593Smuzhiyun 750*4882a593Smuzhiyun RO 751*4882a593Smuzhiyun 752*4882a593Smuzhiyun`power[1-*]_average_lowest` 753*4882a593Smuzhiyun Historical average minimum power use 754*4882a593Smuzhiyun 755*4882a593Smuzhiyun Unit: microWatt 756*4882a593Smuzhiyun 757*4882a593Smuzhiyun RO 758*4882a593Smuzhiyun 759*4882a593Smuzhiyun`power[1-*]_average_max` 760*4882a593Smuzhiyun A poll notification is sent to 761*4882a593Smuzhiyun `power[1-*]_average` when power use 762*4882a593Smuzhiyun rises above this value. 763*4882a593Smuzhiyun 764*4882a593Smuzhiyun Unit: microWatt 765*4882a593Smuzhiyun 766*4882a593Smuzhiyun RW 767*4882a593Smuzhiyun 768*4882a593Smuzhiyun`power[1-*]_average_min` 769*4882a593Smuzhiyun A poll notification is sent to 770*4882a593Smuzhiyun `power[1-*]_average` when power use 771*4882a593Smuzhiyun sinks below this value. 772*4882a593Smuzhiyun 773*4882a593Smuzhiyun Unit: microWatt 774*4882a593Smuzhiyun 775*4882a593Smuzhiyun RW 776*4882a593Smuzhiyun 777*4882a593Smuzhiyun`power[1-*]_input` 778*4882a593Smuzhiyun Instantaneous power use 779*4882a593Smuzhiyun 780*4882a593Smuzhiyun Unit: microWatt 781*4882a593Smuzhiyun 782*4882a593Smuzhiyun RO 783*4882a593Smuzhiyun 784*4882a593Smuzhiyun`power[1-*]_input_highest` 785*4882a593Smuzhiyun Historical maximum power use 786*4882a593Smuzhiyun 787*4882a593Smuzhiyun Unit: microWatt 788*4882a593Smuzhiyun 789*4882a593Smuzhiyun RO 790*4882a593Smuzhiyun 791*4882a593Smuzhiyun`power[1-*]_input_lowest` 792*4882a593Smuzhiyun Historical minimum power use 793*4882a593Smuzhiyun 794*4882a593Smuzhiyun Unit: microWatt 795*4882a593Smuzhiyun 796*4882a593Smuzhiyun RO 797*4882a593Smuzhiyun 798*4882a593Smuzhiyun`power[1-*]_reset_history` 799*4882a593Smuzhiyun Reset input_highest, input_lowest, 800*4882a593Smuzhiyun average_highest and average_lowest. 801*4882a593Smuzhiyun 802*4882a593Smuzhiyun WO 803*4882a593Smuzhiyun 804*4882a593Smuzhiyun`power[1-*]_accuracy` 805*4882a593Smuzhiyun Accuracy of the power meter. 806*4882a593Smuzhiyun 807*4882a593Smuzhiyun Unit: Percent 808*4882a593Smuzhiyun 809*4882a593Smuzhiyun RO 810*4882a593Smuzhiyun 811*4882a593Smuzhiyun`power[1-*]_cap` 812*4882a593Smuzhiyun If power use rises above this limit, the 813*4882a593Smuzhiyun system should take action to reduce power use. 814*4882a593Smuzhiyun A poll notification is sent to this file if the 815*4882a593Smuzhiyun cap is changed by the hardware. The `*_cap` 816*4882a593Smuzhiyun files only appear if the cap is known to be 817*4882a593Smuzhiyun enforced by hardware. 818*4882a593Smuzhiyun 819*4882a593Smuzhiyun Unit: microWatt 820*4882a593Smuzhiyun 821*4882a593Smuzhiyun RW 822*4882a593Smuzhiyun 823*4882a593Smuzhiyun`power[1-*]_cap_hyst` 824*4882a593Smuzhiyun Margin of hysteresis built around capping and 825*4882a593Smuzhiyun notification. 826*4882a593Smuzhiyun 827*4882a593Smuzhiyun Unit: microWatt 828*4882a593Smuzhiyun 829*4882a593Smuzhiyun RW 830*4882a593Smuzhiyun 831*4882a593Smuzhiyun`power[1-*]_cap_max` 832*4882a593Smuzhiyun Maximum cap that can be set. 833*4882a593Smuzhiyun 834*4882a593Smuzhiyun Unit: microWatt 835*4882a593Smuzhiyun 836*4882a593Smuzhiyun RO 837*4882a593Smuzhiyun 838*4882a593Smuzhiyun`power[1-*]_cap_min` 839*4882a593Smuzhiyun Minimum cap that can be set. 840*4882a593Smuzhiyun 841*4882a593Smuzhiyun Unit: microWatt 842*4882a593Smuzhiyun 843*4882a593Smuzhiyun RO 844*4882a593Smuzhiyun 845*4882a593Smuzhiyun`power[1-*]_max` 846*4882a593Smuzhiyun Maximum power. 847*4882a593Smuzhiyun 848*4882a593Smuzhiyun Unit: microWatt 849*4882a593Smuzhiyun 850*4882a593Smuzhiyun RW 851*4882a593Smuzhiyun 852*4882a593Smuzhiyun`power[1-*]_crit` 853*4882a593Smuzhiyun Critical maximum power. 854*4882a593Smuzhiyun 855*4882a593Smuzhiyun If power rises to or above this limit, the 856*4882a593Smuzhiyun system is expected take drastic action to reduce 857*4882a593Smuzhiyun power consumption, such as a system shutdown or 858*4882a593Smuzhiyun a forced powerdown of some devices. 859*4882a593Smuzhiyun 860*4882a593Smuzhiyun Unit: microWatt 861*4882a593Smuzhiyun 862*4882a593Smuzhiyun RW 863*4882a593Smuzhiyun 864*4882a593Smuzhiyun`power[1-*]_enable` 865*4882a593Smuzhiyun Enable or disable the sensors. 866*4882a593Smuzhiyun 867*4882a593Smuzhiyun When disabled the sensor read will return 868*4882a593Smuzhiyun -ENODATA. 869*4882a593Smuzhiyun 870*4882a593Smuzhiyun - 1: Enable 871*4882a593Smuzhiyun - 0: Disable 872*4882a593Smuzhiyun 873*4882a593Smuzhiyun RW 874*4882a593Smuzhiyun 875*4882a593Smuzhiyun`power[1-*]_rated_min` 876*4882a593Smuzhiyun Minimum rated power. 877*4882a593Smuzhiyun 878*4882a593Smuzhiyun Unit: microWatt 879*4882a593Smuzhiyun 880*4882a593Smuzhiyun RO 881*4882a593Smuzhiyun 882*4882a593Smuzhiyun`power[1-*]_rated_max` 883*4882a593Smuzhiyun Maximum rated power. 884*4882a593Smuzhiyun 885*4882a593Smuzhiyun Unit: microWatt 886*4882a593Smuzhiyun 887*4882a593Smuzhiyun RO 888*4882a593Smuzhiyun 889*4882a593SmuzhiyunAlso see the Alarms section for status flags associated with power readings. 890*4882a593Smuzhiyun 891*4882a593Smuzhiyun****** 892*4882a593SmuzhiyunEnergy 893*4882a593Smuzhiyun****** 894*4882a593Smuzhiyun 895*4882a593Smuzhiyun`energy[1-*]_input` 896*4882a593Smuzhiyun Cumulative energy use 897*4882a593Smuzhiyun 898*4882a593Smuzhiyun Unit: microJoule 899*4882a593Smuzhiyun 900*4882a593Smuzhiyun RO 901*4882a593Smuzhiyun 902*4882a593Smuzhiyun`energy[1-*]_enable` 903*4882a593Smuzhiyun Enable or disable the sensors. 904*4882a593Smuzhiyun 905*4882a593Smuzhiyun When disabled the sensor read will return 906*4882a593Smuzhiyun -ENODATA. 907*4882a593Smuzhiyun 908*4882a593Smuzhiyun - 1: Enable 909*4882a593Smuzhiyun - 0: Disable 910*4882a593Smuzhiyun 911*4882a593Smuzhiyun RW 912*4882a593Smuzhiyun 913*4882a593Smuzhiyun******** 914*4882a593SmuzhiyunHumidity 915*4882a593Smuzhiyun******** 916*4882a593Smuzhiyun 917*4882a593Smuzhiyun`humidity[1-*]_input` 918*4882a593Smuzhiyun Humidity 919*4882a593Smuzhiyun 920*4882a593Smuzhiyun Unit: milli-percent (per cent mille, pcm) 921*4882a593Smuzhiyun 922*4882a593Smuzhiyun RO 923*4882a593Smuzhiyun 924*4882a593Smuzhiyun 925*4882a593Smuzhiyun`humidity[1-*]_enable` 926*4882a593Smuzhiyun Enable or disable the sensors 927*4882a593Smuzhiyun 928*4882a593Smuzhiyun When disabled the sensor read will return 929*4882a593Smuzhiyun -ENODATA. 930*4882a593Smuzhiyun 931*4882a593Smuzhiyun - 1: Enable 932*4882a593Smuzhiyun - 0: Disable 933*4882a593Smuzhiyun 934*4882a593Smuzhiyun RW 935*4882a593Smuzhiyun 936*4882a593Smuzhiyun`humidity[1-*]_rated_min` 937*4882a593Smuzhiyun Minimum rated humidity. 938*4882a593Smuzhiyun 939*4882a593Smuzhiyun Unit: milli-percent (per cent mille, pcm) 940*4882a593Smuzhiyun 941*4882a593Smuzhiyun RO 942*4882a593Smuzhiyun 943*4882a593Smuzhiyun`humidity[1-*]_rated_max` 944*4882a593Smuzhiyun Maximum rated humidity. 945*4882a593Smuzhiyun 946*4882a593Smuzhiyun Unit: milli-percent (per cent mille, pcm) 947*4882a593Smuzhiyun 948*4882a593Smuzhiyun RO 949*4882a593Smuzhiyun 950*4882a593Smuzhiyun****** 951*4882a593SmuzhiyunAlarms 952*4882a593Smuzhiyun****** 953*4882a593Smuzhiyun 954*4882a593SmuzhiyunEach channel or limit may have an associated alarm file, containing a 955*4882a593Smuzhiyunboolean value. 1 means than an alarm condition exists, 0 means no alarm. 956*4882a593Smuzhiyun 957*4882a593SmuzhiyunUsually a given chip will either use channel-related alarms, or 958*4882a593Smuzhiyunlimit-related alarms, not both. The driver should just reflect the hardware 959*4882a593Smuzhiyunimplementation. 960*4882a593Smuzhiyun 961*4882a593Smuzhiyun+-------------------------------+-----------------------+ 962*4882a593Smuzhiyun| **`in[0-*]_alarm`, | Channel alarm | 963*4882a593Smuzhiyun| `curr[1-*]_alarm`, | | 964*4882a593Smuzhiyun| `power[1-*]_alarm`, | - 0: no alarm | 965*4882a593Smuzhiyun| `fan[1-*]_alarm`, | - 1: alarm | 966*4882a593Smuzhiyun| `temp[1-*]_alarm`** | | 967*4882a593Smuzhiyun| | RO | 968*4882a593Smuzhiyun+-------------------------------+-----------------------+ 969*4882a593Smuzhiyun 970*4882a593Smuzhiyun**OR** 971*4882a593Smuzhiyun 972*4882a593Smuzhiyun+-------------------------------+-----------------------+ 973*4882a593Smuzhiyun| **`in[0-*]_min_alarm`, | Limit alarm | 974*4882a593Smuzhiyun| `in[0-*]_max_alarm`, | | 975*4882a593Smuzhiyun| `in[0-*]_lcrit_alarm`, | - 0: no alarm | 976*4882a593Smuzhiyun| `in[0-*]_crit_alarm`, | - 1: alarm | 977*4882a593Smuzhiyun| `curr[1-*]_min_alarm`, | | 978*4882a593Smuzhiyun| `curr[1-*]_max_alarm`, | RO | 979*4882a593Smuzhiyun| `curr[1-*]_lcrit_alarm`, | | 980*4882a593Smuzhiyun| `curr[1-*]_crit_alarm`, | | 981*4882a593Smuzhiyun| `power[1-*]_cap_alarm`, | | 982*4882a593Smuzhiyun| `power[1-*]_max_alarm`, | | 983*4882a593Smuzhiyun| `power[1-*]_crit_alarm`, | | 984*4882a593Smuzhiyun| `fan[1-*]_min_alarm`, | | 985*4882a593Smuzhiyun| `fan[1-*]_max_alarm`, | | 986*4882a593Smuzhiyun| `temp[1-*]_min_alarm`, | | 987*4882a593Smuzhiyun| `temp[1-*]_max_alarm`, | | 988*4882a593Smuzhiyun| `temp[1-*]_lcrit_alarm`, | | 989*4882a593Smuzhiyun| `temp[1-*]_crit_alarm`, | | 990*4882a593Smuzhiyun| `temp[1-*]_emergency_alarm`** | | 991*4882a593Smuzhiyun+-------------------------------+-----------------------+ 992*4882a593Smuzhiyun 993*4882a593SmuzhiyunEach input channel may have an associated fault file. This can be used 994*4882a593Smuzhiyunto notify open diodes, unconnected fans etc. where the hardware 995*4882a593Smuzhiyunsupports it. When this boolean has value 1, the measurement for that 996*4882a593Smuzhiyunchannel should not be trusted. 997*4882a593Smuzhiyun 998*4882a593Smuzhiyun`fan[1-*]_fault` / `temp[1-*]_fault` 999*4882a593Smuzhiyun Input fault condition 1000*4882a593Smuzhiyun 1001*4882a593Smuzhiyun - 0: no fault occurred 1002*4882a593Smuzhiyun - 1: fault condition 1003*4882a593Smuzhiyun 1004*4882a593Smuzhiyun RO 1005*4882a593Smuzhiyun 1006*4882a593SmuzhiyunSome chips also offer the possibility to get beeped when an alarm occurs: 1007*4882a593Smuzhiyun 1008*4882a593Smuzhiyun`beep_enable` 1009*4882a593Smuzhiyun Master beep enable 1010*4882a593Smuzhiyun 1011*4882a593Smuzhiyun - 0: no beeps 1012*4882a593Smuzhiyun - 1: beeps 1013*4882a593Smuzhiyun 1014*4882a593Smuzhiyun RW 1015*4882a593Smuzhiyun 1016*4882a593Smuzhiyun`in[0-*]_beep`, `curr[1-*]_beep`, `fan[1-*]_beep`, `temp[1-*]_beep`, 1017*4882a593Smuzhiyun Channel beep 1018*4882a593Smuzhiyun 1019*4882a593Smuzhiyun - 0: disable 1020*4882a593Smuzhiyun - 1: enable 1021*4882a593Smuzhiyun 1022*4882a593Smuzhiyun RW 1023*4882a593Smuzhiyun 1024*4882a593SmuzhiyunIn theory, a chip could provide per-limit beep masking, but no such chip 1025*4882a593Smuzhiyunwas seen so far. 1026*4882a593Smuzhiyun 1027*4882a593SmuzhiyunOld drivers provided a different, non-standard interface to alarms and 1028*4882a593Smuzhiyunbeeps. These interface files are deprecated, but will be kept around 1029*4882a593Smuzhiyunfor compatibility reasons: 1030*4882a593Smuzhiyun 1031*4882a593Smuzhiyun`alarms` 1032*4882a593Smuzhiyun Alarm bitmask. 1033*4882a593Smuzhiyun 1034*4882a593Smuzhiyun RO 1035*4882a593Smuzhiyun 1036*4882a593Smuzhiyun Integer representation of one to four bytes. 1037*4882a593Smuzhiyun 1038*4882a593Smuzhiyun A '1' bit means an alarm. 1039*4882a593Smuzhiyun 1040*4882a593Smuzhiyun Chips should be programmed for 'comparator' mode so that 1041*4882a593Smuzhiyun the alarm will 'come back' after you read the register 1042*4882a593Smuzhiyun if it is still valid. 1043*4882a593Smuzhiyun 1044*4882a593Smuzhiyun Generally a direct representation of a chip's internal 1045*4882a593Smuzhiyun alarm registers; there is no standard for the position 1046*4882a593Smuzhiyun of individual bits. For this reason, the use of this 1047*4882a593Smuzhiyun interface file for new drivers is discouraged. Use 1048*4882a593Smuzhiyun `individual *_alarm` and `*_fault` files instead. 1049*4882a593Smuzhiyun Bits are defined in kernel/include/sensors.h. 1050*4882a593Smuzhiyun 1051*4882a593Smuzhiyun`beep_mask` 1052*4882a593Smuzhiyun Bitmask for beep. 1053*4882a593Smuzhiyun Same format as 'alarms' with the same bit locations, 1054*4882a593Smuzhiyun use discouraged for the same reason. Use individual 1055*4882a593Smuzhiyun `*_beep` files instead. 1056*4882a593Smuzhiyun RW 1057*4882a593Smuzhiyun 1058*4882a593Smuzhiyun 1059*4882a593Smuzhiyun******************* 1060*4882a593SmuzhiyunIntrusion detection 1061*4882a593Smuzhiyun******************* 1062*4882a593Smuzhiyun 1063*4882a593Smuzhiyun`intrusion[0-*]_alarm` 1064*4882a593Smuzhiyun Chassis intrusion detection 1065*4882a593Smuzhiyun 1066*4882a593Smuzhiyun - 0: OK 1067*4882a593Smuzhiyun - 1: intrusion detected 1068*4882a593Smuzhiyun 1069*4882a593Smuzhiyun RW 1070*4882a593Smuzhiyun 1071*4882a593Smuzhiyun Contrary to regular alarm flags which clear themselves 1072*4882a593Smuzhiyun automatically when read, this one sticks until cleared by 1073*4882a593Smuzhiyun the user. This is done by writing 0 to the file. Writing 1074*4882a593Smuzhiyun other values is unsupported. 1075*4882a593Smuzhiyun 1076*4882a593Smuzhiyun`intrusion[0-*]_beep` 1077*4882a593Smuzhiyun Chassis intrusion beep 1078*4882a593Smuzhiyun 1079*4882a593Smuzhiyun 0: disable 1080*4882a593Smuzhiyun 1: enable 1081*4882a593Smuzhiyun 1082*4882a593Smuzhiyun RW 1083*4882a593Smuzhiyun 1084*4882a593Smuzhiyun**************************** 1085*4882a593SmuzhiyunAverage sample configuration 1086*4882a593Smuzhiyun**************************** 1087*4882a593Smuzhiyun 1088*4882a593SmuzhiyunDevices allowing for reading {in,power,curr,temp}_average values may export 1089*4882a593Smuzhiyunattributes for controlling number of samples used to compute average. 1090*4882a593Smuzhiyun 1091*4882a593Smuzhiyun+--------------+---------------------------------------------------------------+ 1092*4882a593Smuzhiyun| samples | Sets number of average samples for all types of measurements. | 1093*4882a593Smuzhiyun| | | 1094*4882a593Smuzhiyun| | RW | 1095*4882a593Smuzhiyun+--------------+---------------------------------------------------------------+ 1096*4882a593Smuzhiyun| in_samples | Sets number of average samples for specific type of | 1097*4882a593Smuzhiyun| power_samples| measurements. | 1098*4882a593Smuzhiyun| curr_samples | | 1099*4882a593Smuzhiyun| temp_samples | Note that on some devices it won't be possible to set all of | 1100*4882a593Smuzhiyun| | them to different values so changing one might also change | 1101*4882a593Smuzhiyun| | some others. | 1102*4882a593Smuzhiyun| | | 1103*4882a593Smuzhiyun| | RW | 1104*4882a593Smuzhiyun+--------------+---------------------------------------------------------------+ 1105*4882a593Smuzhiyun 1106*4882a593Smuzhiyunsysfs attribute writes interpretation 1107*4882a593Smuzhiyun------------------------------------- 1108*4882a593Smuzhiyun 1109*4882a593Smuzhiyunhwmon sysfs attributes always contain numbers, so the first thing to do is to 1110*4882a593Smuzhiyunconvert the input to a number, there are 2 ways todo this depending whether 1111*4882a593Smuzhiyunthe number can be negative or not:: 1112*4882a593Smuzhiyun 1113*4882a593Smuzhiyun unsigned long u = simple_strtoul(buf, NULL, 10); 1114*4882a593Smuzhiyun long s = simple_strtol(buf, NULL, 10); 1115*4882a593Smuzhiyun 1116*4882a593SmuzhiyunWith buf being the buffer with the user input being passed by the kernel. 1117*4882a593SmuzhiyunNotice that we do not use the second argument of strto[u]l, and thus cannot 1118*4882a593Smuzhiyuntell when 0 is returned, if this was really 0 or is caused by invalid input. 1119*4882a593SmuzhiyunThis is done deliberately as checking this everywhere would add a lot of 1120*4882a593Smuzhiyuncode to the kernel. 1121*4882a593Smuzhiyun 1122*4882a593SmuzhiyunNotice that it is important to always store the converted value in an 1123*4882a593Smuzhiyununsigned long or long, so that no wrap around can happen before any further 1124*4882a593Smuzhiyunchecking. 1125*4882a593Smuzhiyun 1126*4882a593SmuzhiyunAfter the input string is converted to an (unsigned) long, the value should be 1127*4882a593Smuzhiyunchecked if its acceptable. Be careful with further conversions on the value 1128*4882a593Smuzhiyunbefore checking it for validity, as these conversions could still cause a wrap 1129*4882a593Smuzhiyunaround before the check. For example do not multiply the result, and only 1130*4882a593Smuzhiyunadd/subtract if it has been divided before the add/subtract. 1131*4882a593Smuzhiyun 1132*4882a593SmuzhiyunWhat to do if a value is found to be invalid, depends on the type of the 1133*4882a593Smuzhiyunsysfs attribute that is being set. If it is a continuous setting like a 1134*4882a593SmuzhiyuntempX_max or inX_max attribute, then the value should be clamped to its 1135*4882a593Smuzhiyunlimits using clamp_val(value, min_limit, max_limit). If it is not continuous 1136*4882a593Smuzhiyunlike for example a tempX_type, then when an invalid value is written, 1137*4882a593Smuzhiyun-EINVAL should be returned. 1138*4882a593Smuzhiyun 1139*4882a593SmuzhiyunExample1, temp1_max, register is a signed 8 bit value (-128 - 127 degrees):: 1140*4882a593Smuzhiyun 1141*4882a593Smuzhiyun long v = simple_strtol(buf, NULL, 10) / 1000; 1142*4882a593Smuzhiyun v = clamp_val(v, -128, 127); 1143*4882a593Smuzhiyun /* write v to register */ 1144*4882a593Smuzhiyun 1145*4882a593SmuzhiyunExample2, fan divider setting, valid values 2, 4 and 8:: 1146*4882a593Smuzhiyun 1147*4882a593Smuzhiyun unsigned long v = simple_strtoul(buf, NULL, 10); 1148*4882a593Smuzhiyun 1149*4882a593Smuzhiyun switch (v) { 1150*4882a593Smuzhiyun case 2: v = 1; break; 1151*4882a593Smuzhiyun case 4: v = 2; break; 1152*4882a593Smuzhiyun case 8: v = 3; break; 1153*4882a593Smuzhiyun default: 1154*4882a593Smuzhiyun return -EINVAL; 1155*4882a593Smuzhiyun } 1156*4882a593Smuzhiyun /* write v to register */ 1157