1d19e470bSSrinivas Pandruvada.. SPDX-License-Identifier: GPL-2.0
2d19e470bSSrinivas Pandruvada
3d19e470bSSrinivas Pandruvada===========================
4d19e470bSSrinivas PandruvadaACPI Fan Performance States
5d19e470bSSrinivas Pandruvada===========================
6d19e470bSSrinivas Pandruvada
7d19e470bSSrinivas PandruvadaWhen the optional _FPS object is present under an ACPI device representing a
8d19e470bSSrinivas Pandruvadafan (for example, PNP0C0B or INT3404), the ACPI fan driver creates additional
9d19e470bSSrinivas Pandruvada"state*" attributes in the sysfs directory of the ACPI device in question.
10d19e470bSSrinivas PandruvadaThese attributes list properties of fan performance states.
11d19e470bSSrinivas Pandruvada
12d19e470bSSrinivas PandruvadaFor more information on _FPS refer to the ACPI specification at:
13d19e470bSSrinivas Pandruvada
14d19e470bSSrinivas Pandruvadahttp://uefi.org/specifications
15d19e470bSSrinivas Pandruvada
16d19e470bSSrinivas PandruvadaFor instance, the contents of the INT3404 ACPI device sysfs directory
17d19e470bSSrinivas Pandruvadamay look as follows::
18d19e470bSSrinivas Pandruvada
19d19e470bSSrinivas Pandruvada $ ls -l /sys/bus/acpi/devices/INT3404:00/
20d19e470bSSrinivas Pandruvada total 0
21d19e470bSSrinivas Pandruvada ...
22d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 20:38 state0
23d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 20:38 state1
24d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 20:38 state10
25d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 20:38 state11
26d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 20:38 state2
27d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 20:38 state3
28d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 20:38 state4
29d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 20:38 state5
30d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 20:38 state6
31d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 20:38 state7
32d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 20:38 state8
33d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 20:38 state9
34d19e470bSSrinivas Pandruvada -r--r--r-- 1 root root 4096 Dec 13 01:00 status
35d19e470bSSrinivas Pandruvada ...
36d19e470bSSrinivas Pandruvada
37d19e470bSSrinivas Pandruvadawhere each of the "state*" files represents one performance state of the fan
38d19e470bSSrinivas Pandruvadaand contains a colon-separated list of 5 integer numbers (fields) with the
39d19e470bSSrinivas Pandruvadafollowing interpretation::
40d19e470bSSrinivas Pandruvada
41d19e470bSSrinivas Pandruvada  control_percent:trip_point_index:speed_rpm:noise_level_mdb:power_mw
42d19e470bSSrinivas Pandruvada
43d19e470bSSrinivas Pandruvada* ``control_percent``: The percent value to be used to set the fan speed to a
44d19e470bSSrinivas Pandruvada  specific level using the _FSL object (0-100).
45d19e470bSSrinivas Pandruvada
46d19e470bSSrinivas Pandruvada* ``trip_point_index``: The active cooling trip point number that corresponds
47d19e470bSSrinivas Pandruvada  to this performance state (0-9).
48d19e470bSSrinivas Pandruvada
49d19e470bSSrinivas Pandruvada* ``speed_rpm``: Speed of the fan in rotations per minute.
50d19e470bSSrinivas Pandruvada
51d19e470bSSrinivas Pandruvada* ``noise_level_mdb``: Audible noise emitted by the fan in this state in
52d19e470bSSrinivas Pandruvada  millidecibels.
53d19e470bSSrinivas Pandruvada
54d19e470bSSrinivas Pandruvada* ``power_mw``: Power draw of the fan in this state in milliwatts.
55d19e470bSSrinivas Pandruvada
56d19e470bSSrinivas PandruvadaFor example::
57d19e470bSSrinivas Pandruvada
58d19e470bSSrinivas Pandruvada $cat /sys/bus/acpi/devices/INT3404:00/state1
59d19e470bSSrinivas Pandruvada 25:0:3200:12500:1250
60d19e470bSSrinivas Pandruvada
61d19e470bSSrinivas PandruvadaWhen a given field is not populated or its value provided by the platform
62d19e470bSSrinivas Pandruvadafirmware is invalid, the "not-defined" string is shown instead of the value.
630750b8fcSSrinivas Pandruvada
640750b8fcSSrinivas PandruvadaACPI Fan Fine Grain Control
650750b8fcSSrinivas Pandruvada=============================
660750b8fcSSrinivas Pandruvada
670750b8fcSSrinivas PandruvadaWhen _FIF object specifies support for fine grain control, then fan speed
680750b8fcSSrinivas Pandruvadacan be set from 0 to 100% with the recommended minimum "step size" via
690750b8fcSSrinivas Pandruvada_FSL object. User can adjust fan speed using thermal sysfs cooling device.
700750b8fcSSrinivas Pandruvada
710750b8fcSSrinivas PandruvadaHere use can look at fan performance states for a reference speed (speed_rpm)
720750b8fcSSrinivas Pandruvadaand set it by changing cooling device cur_state. If the fine grain control
730750b8fcSSrinivas Pandruvadais supported then user can also adjust to some other speeds which are
740750b8fcSSrinivas Pandruvadanot defined in the performance states.
750750b8fcSSrinivas Pandruvada
760750b8fcSSrinivas PandruvadaThe support of fine grain control is presented via sysfs attribute
770750b8fcSSrinivas Pandruvada"fine_grain_control". If fine grain control is present, this attribute
780750b8fcSSrinivas Pandruvadawill show "1" otherwise "0".
790750b8fcSSrinivas Pandruvada
800750b8fcSSrinivas PandruvadaThis sysfs attribute is presented in the same directory as performance states.
810750b8fcSSrinivas Pandruvada
820750b8fcSSrinivas PandruvadaACPI Fan Performance Feedback
830750b8fcSSrinivas Pandruvada=============================
840750b8fcSSrinivas Pandruvada
850750b8fcSSrinivas PandruvadaThe optional _FST object provides status information for the fan device.
860750b8fcSSrinivas PandruvadaThis includes field to provide current fan speed in revolutions per minute
870750b8fcSSrinivas Pandruvadaat which the fan is rotating.
880750b8fcSSrinivas Pandruvada
890750b8fcSSrinivas PandruvadaThis speed is presented in the sysfs using the attribute "fan_speed_rpm",
900750b8fcSSrinivas Pandruvadain the same directory as performance states.
91