Kernel driver arctic_fan_controller

Supported devices:

  • ARCTIC Fan Controller (USB HID, VID 0x3904, PID 0xF001)

Author: Aureo Serrano de Souza <aureo.serrano@arctic.de>

Description

This driver provides hwmon support for the ARCTIC Fan Controller, a USB Custom HID device with 10 fan channels. The device sends IN reports about once per second containing current RPM values (bytes 11-30, 10 x uint16 LE). Fan speed control is manual-only: the device does not change PWM autonomously; it only applies a new duty cycle when it receives an OUT report from the host.

After the device applies an OUT report, it sends back a 2-byte ACK IN report (Report ID 0x02, byte 1 = 0x00 on success) confirming the command was applied.

Usage notes

Since it is a USB device, hotplug is supported. The device is autodetected.

The device does not support GET_REPORT, so the driver cannot read back the current hardware PWM state at probe time. The cached PWM values (readable via pwm[1-10]) start at 0 and reflect only values that have been successfully written. Because each OUT report carries all 10 channel values, writing a single channel also sends the cached values for all other channels. Users should set all channels to the desired values before relying on the cached state.

On system suspend, the device may lose power and reset its PWM channels to hardware defaults. The driver clears its cached duty values on resume so that reads reflect the unknown hardware state rather than stale pre-suspend values. Userspace is responsible for re-applying the desired duty cycles after resume.

Sysfs entries

fan[1-10]_input

Fan speed in RPM (read-only). Updated from IN reports at ~1 Hz.

pwm[1-10]

PWM duty cycle (0-255). Write: sends an OUT report setting the duty cycle (scaled from 0-255 to 0-100% for the device); the cached value is updated only after the device ACKs the command with a success status. Read: returns the last successfully written value; initialized to 0 at driver load and after resume (hardware state unknown).