Skip to content

GPD Win Mini 2025 (AI 370 / G1617-02): Gyro not working — two fixes needed #314

Description

@shivito1

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

  1. Install HHD on CachyOS Deckify (or any Arch-based distro) on a GPD Win Mini 2025
  2. Enable DualSense emulation in HHD
  3. Open Steam and attempt to use gyro in any game
  4. Observe gyro does nothing
  5. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions