GPD Win Mini 2025 (AI 370 / G1617-02): Gyro not working — two fixes needed
Device Information
| Field |
Value |
| Device |
GPD Win Mini 2025 |
| CPU |
AMD AI 370 |
| DMI String |
G1617-02 |
| OS |
CachyOS Deckify |
| Kernel |
7.0.1-1-cachyos-deckify |
| HHD Version |
4.1.8-1 |
| IMU Chip |
BMI260 (ACPI name: BMI0160, IIO name: bmi260) |
Symptom
Gyro does nothing in Steam despite HHD running correctly and DualSense emulation active.
The virtual DualSense device is created and visible in Steam, but tilting the device produces
no gyro output.
HHD log shows the following error approximately 2 seconds after launch:
GPDW ERROR IMU Did not send information for 2s. Disabling Gyro Sync.
The IIO device exists and is readable at /sys/bus/iio/devices/iio:device0 with name bmi260,
and raw axis reads work correctly:
cat /sys/bus/iio/devices/iio:device0/name
# bmi260
cat /sys/bus/iio/devices/iio:device0/in_anglvel_x_raw
# 4 (non-zero, sensor is alive)
Root Cause 1 — imu.py: bmi260 missing from IMU_NAMES
File: hhd/controller/physical/imu.py
The IMU_NAMES list is used by find_sensor() to locate the IIO device by reading
/sys/bus/iio/devices/iio:deviceX/name and checking if any entry in IMU_NAMES is
a substring of the name string. The match is case-sensitive.
The AI 370's BMI260 chip reports its IIO name as lowercase bmi260. The list only
contains BMI0260 (uppercase ACPI style), so the match silently fails and
find_sensor() returns None. HHD then waits 2 seconds for IMU data that never
arrives and disables gyro sync.
# Current (broken)
IMU_NAMES = ["bmi323-imu", "BMI0160", "BMI0260", "i2c-10EC5280:00", "i2c-BOSC0260:00"]
# Fixed
IMU_NAMES = ["bmi323-imu", "BMI0160", "BMI0260", "bmi260", "bmi160", "i2c-10EC5280:00", "i2c-BOSC0260:00"]
Root Cause 2 — __init__.py: hrtimer missing from G1617-02 config
File: hhd/device/gpd/win/__init__.py
The G1617-02 device config does not set "hrtimer": True. In base.py, the
controller loop only sets up the IIO buffer trigger when dconf.get("hrtimer", False)
is True:
if dconf.get("hrtimer", False):
start_imu = d_timer.open()
if start_imu:
prepare(d_imu)
Without a trigger assigned, the Linux IIO subsystem refuses to enable the buffer.
Attempting to enable scan elements while the buffer has no trigger returns
Invalid argument. This means even if Fix 1 is applied and the sensor is found,
no data can be read from the buffer because the trigger was never configured.
# Current (broken)
"G1617-02": {
"name": "GPD Win Mini (2025)",
"touchpad": True,
"wincontrols": False,
},
# Fixed
"G1617-02": {
"name": "GPD Win Mini (2025)",
"touchpad": True,
"wincontrols": False,
"hrtimer": True,
},
Confirmation
After applying both fixes, clearing the Python bytecode cache, and restarting
hhd.service, the log now shows:
imu INFO Found device 'bmi260' at /sys/bus/iio/devices/iio:device0
imu INFO Found device 'bmi260' at /sys/bus/iio/devices/iio:device0
No IMU timeout error appears. Gyro functions correctly in Steam with DualSense
emulation enabled.
Additional Notes
-
The ACPI firmware on this device reports the chip as BMI0160 in the sysfs path
(.../i2c-BMI0160:00/iio:device0) but the bmi260 kernel driver correctly
identifies it as a BMI260. This ACPI naming quirk is what led to the wrong sensor
name bmi160 being written into state.json by earlier troubleshooting attempts —
worth noting in case other users report the same confusion.
-
The G1617-01 (original GPD Win Mini) config also does not set hrtimer,
but that device may use a different IMU or driver path. This report is specific
to the 2025 model with the AI 370 and BMI260.
-
Both fixes are minimal, targeted, and do not affect any other device configs.
Steps to Reproduce
- Install HHD on CachyOS Deckify (or any Arch-based distro) on a GPD Win Mini 2025
- Enable DualSense emulation in HHD
- Open Steam and attempt to use gyro in any game
- Observe gyro does nothing
- Check HHD log:
IMU Did not send information for 2s. Disabling Gyro Sync.
Reported by a GPD Win Mini 2025 AI 370 user on CachyOS Deckify.
Both fixes verified working on kernel 7.0.1-1-cachyos-deckify, HHD 4.1.8-1.
GPD Win Mini 2025 (AI 370 / G1617-02): Gyro not working — two fixes needed
Device Information
bmi260)Symptom
Gyro does nothing in Steam despite HHD running correctly and DualSense emulation active.
The virtual DualSense device is created and visible in Steam, but tilting the device produces
no gyro output.
HHD log shows the following error approximately 2 seconds after launch:
The IIO device exists and is readable at
/sys/bus/iio/devices/iio:device0with namebmi260,and raw axis reads work correctly:
Root Cause 1 —
imu.py:bmi260missing fromIMU_NAMESFile:
hhd/controller/physical/imu.pyThe
IMU_NAMESlist is used byfind_sensor()to locate the IIO device by reading/sys/bus/iio/devices/iio:deviceX/nameand checking if any entry inIMU_NAMESisa substring of the name string. The match is case-sensitive.
The AI 370's BMI260 chip reports its IIO name as lowercase
bmi260. The list onlycontains
BMI0260(uppercase ACPI style), so the match silently fails andfind_sensor()returnsNone. HHD then waits 2 seconds for IMU data that neverarrives and disables gyro sync.
Root Cause 2 —
__init__.py:hrtimermissing fromG1617-02configFile:
hhd/device/gpd/win/__init__.pyThe
G1617-02device config does not set"hrtimer": True. Inbase.py, thecontroller loop only sets up the IIO buffer trigger when
dconf.get("hrtimer", False)is
True:Without a trigger assigned, the Linux IIO subsystem refuses to enable the buffer.
Attempting to enable scan elements while the buffer has no trigger returns
Invalid argument. This means even if Fix 1 is applied and the sensor is found,no data can be read from the buffer because the trigger was never configured.
Confirmation
After applying both fixes, clearing the Python bytecode cache, and restarting
hhd.service, the log now shows:No IMU timeout error appears. Gyro functions correctly in Steam with DualSense
emulation enabled.
Additional Notes
The ACPI firmware on this device reports the chip as
BMI0160in the sysfs path(
.../i2c-BMI0160:00/iio:device0) but thebmi260kernel driver correctlyidentifies it as a BMI260. This ACPI naming quirk is what led to the wrong sensor
name
bmi160being written intostate.jsonby earlier troubleshooting attempts —worth noting in case other users report the same confusion.
The
G1617-01(original GPD Win Mini) config also does not sethrtimer,but that device may use a different IMU or driver path. This report is specific
to the 2025 model with the AI 370 and BMI260.
Both fixes are minimal, targeted, and do not affect any other device configs.
Steps to Reproduce
IMU Did not send information for 2s. Disabling Gyro Sync.Reported by a GPD Win Mini 2025 AI 370 user on CachyOS Deckify.
Both fixes verified working on kernel 7.0.1-1-cachyos-deckify, HHD 4.1.8-1.