ACPI: fan: Expose fan performance state information
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Fri, 13 Dec 2019 23:48:40 +0000 (15:48 -0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 19 Dec 2019 21:35:04 +0000 (22:35 +0100)
commitd19e470b6605c900db21fc7b34c66b6891a79983
tree95662e23d4bceb438df7a5971b52896929d927d5
parentd1eef1c619749b2a57e514a3fa67d9a516ffa919
ACPI: fan: Expose fan performance state information

When _FPS indicates variable speed fan support, the thermal cooling
device for fan shows max performance state count as "max_state"
(greater than or equal to 1).

But the thermal cooling device doesn't expose the properties of each
performance state. This is not enough for smart fan control user
space software, which also considers speed, power and noise level.

This change exposes the properties of the fan performance states
in the sysfs directory of the ACPI device representing the fan,
that is

/sys/bus/acpi/devices/devices/INT3404:00

or

/sys/bus/platform/devices/PNP0C0B:00.

For example:

$ ls /sys/bus/acpi/devices/INT3404\:00
description  path           state0   state11  state4  state7  status
hid          physical_node  state1   state2   state5  state8  subsystem
modalias     power          state10  state3   state6  state9  uevent
uid          wakeup

where each state* attribute lists the properties of a fan performance
state in the following format:

control_percent:trip_point:speed_rpm:noise_level_mdb:power_mw

$ cat /sys/bus/acpi/devices/INT3404\:00/state10
95:0:11600:47500:4500

as documented in

Documentation/admin-guide/acpi/fan_performance_states.rst

While at it, return the correct error code from acpi_fan_probe()
when acpi_fan_get_fps() or acpi_fan_get_fif() fails.

Suggested-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject, changelog, documentation ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Documentation/admin-guide/acpi/fan_performance_states.rst [new file with mode: 0644]
Documentation/admin-guide/acpi/index.rst
drivers/acpi/fan.c