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