xref: /linux/Documentation/hwmon/arctic_fan_controller.rst (revision 805185b7c7a1069e407b6f7b3bc98e44d415f484)
1.. SPDX-License-Identifier: GPL-2.0-or-later
2
3Kernel driver arctic_fan_controller
4=====================================
5
6Supported devices:
7
8* ARCTIC Fan Controller (USB HID, VID 0x3904, PID 0xF001)
9
10Author: Aureo Serrano de Souza <aureo.serrano@arctic.de>
11
12Description
13-----------
14
15This driver provides hwmon support for the ARCTIC Fan Controller, a USB
16Custom HID device with 10 fan channels. The device sends IN reports about
17once per second containing current RPM values (bytes 11-30, 10 x uint16 LE).
18Fan speed control is manual-only: the device does not change PWM
19autonomously; it only applies a new duty cycle when it receives an OUT
20report from the host.
21
22After the device applies an OUT report, it sends back a 2-byte ACK IN
23report (Report ID 0x02, byte 1 = 0x00 on success) confirming the command
24was applied.
25
26Usage notes
27-----------
28
29Since it is a USB device, hotplug is supported. The device is autodetected.
30
31The device does not support GET_REPORT, so the driver cannot read back the
32current hardware PWM state at probe time. The cached PWM values (readable
33via pwm[1-10]) start at 0 and reflect only values that have been
34successfully written. Because each OUT report carries all 10 channel values,
35writing a single channel also sends the cached values for all other channels.
36Users should set all channels to the desired values before relying on the
37cached state.
38
39On system suspend, the device may lose power and reset its PWM channels to
40hardware defaults. The driver clears its cached duty values on resume so
41that reads reflect the unknown hardware state rather than stale pre-suspend
42values. Userspace is responsible for re-applying the desired duty cycles
43after resume.
44
45Sysfs entries
46-------------
47
48================ ==============================================================
49fan[1-10]_input  Fan speed in RPM (read-only). Updated from IN reports at ~1 Hz.
50pwm[1-10]        PWM duty cycle (0-255). Write: sends an OUT report setting the
51                 duty cycle (scaled from 0-255 to 0-100% for the device);
52                 the cached value is updated only after the device ACKs the
53                 command with a success status. Read: returns the last
54                 successfully written value; initialized to 0 at driver load
55                 and after resume (hardware state unknown).
56================ ==============================================================
57