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