Skip to content

Fixes and cleanups - #12

Open
mdias wants to merge 8 commits into
JacKeTUs:masterfrom
mdias:fixes-and-cleanups
Open

mdias wants to merge 8 commits into
JacKeTUs:masterfrom
mdias:fixes-and-cleanups

Conversation

@mdias

@mdias mdias commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Most of these changes are the result of having AI (Opus 5) flag some issues that it found. The most important one being the rescale of saturation values for condition reports, where we were mapping values from -10000 to 10000 when in reality these saturation values are unsigned and must map from 0 to 10000.

The issue was very visible when using a spring effect with values that mapped into negative integers. The wheel would freak out a little bit :)
Perhaps this is the issue some users talked about regarding some games (F1 iirc) feeling different on linux, not sure.

Tested on Simagic Alpha Evo, firmware 228

@GulBroz

GulBroz commented Aug 27, 2026

Copy link
Copy Markdown

Thanks a lot!

I put those on top of my fixes to avoid driver crashes, and it solved the one big problem I had; some games (wreckfest, ACC) as soon as they activated FFB brutally turn the wheel left (or right?) - I almost broke a wrist the 1st time - and kept applying a constant force, making it unplayable. Now it's gone. :)

I can't tell about the feeling compared to Windows, because that was just a quick test and nothing was tuned correctly, not the base, not the games.

Simagic Alpha EVO Pro / Firmware 2.3.4 on Nobara 44 / kernel 7.2.0

@mdias

mdias commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

@GulBroz No problem!

I had a look at your patch, and it looks good, but I don't understand why you don't have a valid hid input. Do you know if that's specific to your OS environment or is it something from the newer firmware versions?

Regarding the sudden turn of the wheel you had, this was the issue with bad mapping of saturation values in condition reports. The wheel doesn't appear to use those for all types of effects, but it uses it for the Spring effect, so if those games used it, it created that effect.
Strangely I remember trying ACC a long time ago and I didn't have this issue. But that was probably an older firmware and I also don't recall if I had game spring on etc.

@GulBroz

GulBroz commented Aug 28, 2026

Copy link
Copy Markdown

I don't know if it's firmware related or not (I did not try Linux before I flashed the base to 2.3.4...)

But it declares 2 separate interfaces, one that manages FFB (the "Joystick" one), and a 2nd one (the simple "Device") for I don't know what:

dmesg when powering on the base, no driver loaded:

[   76.051807] usb 1-5.2: new full-speed USB device number 16 using xhci_hcd
[   76.160979] usb 1-5.2: New USB device found, idVendor=3670, idProduct=0501, bcdDevice= 2.10
[   76.162024] usb 1-5.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[   76.162025] usb 1-5.2: Product: SIMAGIC Alpha EVO Pro
[   76.162026] usb 1-5.2: Manufacturer: SIMAGIC
[   76.162026] usb 1-5.2: SerialNumber: ****************
[   76.173977] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 768 type 1
[   76.173979] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 769 type 1
[   76.173979] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 770 type 1
[   76.173980] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 771 type 1
[   76.173980] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 772 type 1
[   76.173981] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 773 type 1
[   76.173981] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 774 type 1
[   76.173981] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 775 type 1
[   76.173982] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 776 type 1
[   76.173982] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 777 type 1
[   76.174011] input: SIMAGIC SIMAGIC Alpha EVO Pro as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.2/1-5.2:1.0/0003:3670:0501.0014/input/input52
[   76.174292] hid-generic 0003:3670:0501.0014: input,hidraw17: USB HID v1.11 Joystick [SIMAGIC SIMAGIC Alpha EVO Pro] on usb-0000:00:14.0-5.2/input0
[   76.175094] hid-generic 0003:3670:0501.0015: hiddev102,hidraw18: USB HID v1.11 Device [SIMAGIC SIMAGIC Alpha EVO Pro] on usb-0000:00:14.0-5.2/input1

When loading driver:

[  210.771985] hid_simagic_ff: loading out-of-tree module taints kernel.
[  210.771989] hid_simagic_ff: module verification failed: signature and/or required key missing - tainting kernel
[  210.791836] hid_map_usage: 26 callbacks suppressed
[  210.791837] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 768 type 1
[  210.791839] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 769 type 1
[  210.791839] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 770 type 1
[  210.791840] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 771 type 1
[  210.791840] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 772 type 1
[  210.791840] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 773 type 1
[  210.791841] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 774 type 1
[  210.791841] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 775 type 1
[  210.791841] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 776 type 1
[  210.791842] SIMAGIC SIMAGIC Alpha EVO Pro: Invalid code 777 type 1
[  210.791865] input: SIMAGIC SIMAGIC Alpha EVO Pro as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.2/1-5.2:1.0/0003:3670:0501.0014/input/input53
[  210.791929] simagic-ff 0003:3670:0501.0014: input,hidraw17: USB HID v1.11 Joystick [SIMAGIC SIMAGIC Alpha EVO Pro] on usb-0000:00:14.0-5.2/input0
[  210.791939] input input53: Force feedback for Simagic wheel
[  210.792040] simagic-ff 0003:3670:0501.0015: hiddev102,hidraw18: USB HID v1.11 Device [SIMAGIC SIMAGIC Alpha EVO Pro] on usb-0000:00:14.0-5.2/input1
[  210.792041] simagic-ff 0003:3670:0501.0015: no inputs found
[  210.792041] simagic-ff 0003:3670:0501.0015: No force feedback

and then in sysfs exposed by driver:

$ ll  /sys/bus/hid/drivers/simagic-ff/
total 0
lrwxrwxrwx 1 root root    0 28 août  10:06 0003:3670:0501.0014 -> ../../../../devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.2/1-5.2:1.0/0003:3670:0501.0014
lrwxrwxrwx 1 root root    0 28 août  10:06 0003:3670:0501.0015 -> ../../../../devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.2/1-5.2:1.1/0003:3670:0501.0015
--w------- 1 root root 4096 28 août  10:06 bind
lrwxrwxrwx 1 root root    0 28 août  10:06 module -> ../../../../module/hid_simagic_ff
--w------- 1 root root 4096 28 août  10:06 new_id
--w------- 1 root root 4096 28 août  10:05 uevent
--w------- 1 root root 4096 28 août  10:06 unbind

$ ll  /sys/bus/hid/drivers/simagic-ff/0003\:3670\:0501.0014/
total 0
-rw-rw-r-- 1 root root 4096 28 août  10:07 angle_lock
-rw-rw-r-- 1 root root 4096 28 août  10:07 angle_lock_strength
-rw-rw-r-- 1 root root 4096 28 août  10:07 center_damper
-r--r--r-- 1 root root 4096 28 août  10:07 country
lrwxrwxrwx 1 root root    0 28 août  10:05 driver -> ../../../../../../../../bus/hid/drivers/simagic-ff
-rw-rw-r-- 1 root root 4096 28 août  10:07 feedback_detail
-rw-rw-r-- 1 root root 4096 28 août  10:07 ff_strength
-rw-rw-r-- 1 root root 4096 28 août  10:07 filter_level
-r--r--r-- 1 root root 4096 28 août  10:07 fw_version
-rw-rw-r-- 1 root root 4096 28 août  10:07 game_centering
-rw-rw-r-- 1 root root 4096 28 août  10:07 game_damper
-rw-rw-r-- 1 root root 4096 28 août  10:07 game_friction
-rw-rw-r-- 1 root root 4096 28 août  10:07 game_inertia
drwxr-xr-x 3 root root    0 28 août  10:05 hidraw
drwxr-xr-x 3 root root    0 28 août  10:05 input
-rw-rw-r-- 1 root root 4096 28 août  10:07 max_angle
-rw-rw-r-- 1 root root 4096 28 août  10:07 mechanical_centering
-rw-rw-r-- 1 root root 4096 28 août  10:07 mechanical_damper
-rw-rw-r-- 1 root root 4096 28 août  10:07 mechanical_friction
-rw-rw-r-- 1 root root 4096 28 août  10:07 mechanical_inertia
-r--r--r-- 1 root root 4096 28 août  10:07 modalias
drwxr-xr-x 2 root root    0 28 août  10:07 power
-r--r--r-- 1 root root 4096 28 août  10:03 report_descriptor
-rw-rw-r-- 1 root root 4096 28 août  10:07 ring_light_enabled
-rw-rw-r-- 1 root root 4096 28 août  10:07 slew_rate_control
lrwxrwxrwx 1 root root    0 28 août  10:03 subsystem -> ../../../../../../../../bus/hid
-rw-r--r-- 1 root root 4096 28 août  10:03 uevent
-r--r--r-- 1 root root 4096 28 août  10:07 wheel_channel
-rw-rw-r-- 1 root root 4096 28 août  10:07 wheel_rotation_speed

$ ll  /sys/bus/hid/drivers/simagic-ff/0003\:3670\:0501.0015/
total 0
-r--r--r-- 1 root root 4096 28 août  10:07 country
lrwxrwxrwx 1 root root    0 28 août  10:05 driver -> ../../../../../../../../bus/hid/drivers/simagic-ff
drwxr-xr-x 3 root root    0 28 août  10:05 hidraw
-r--r--r-- 1 root root 4096 28 août  10:07 modalias
drwxr-xr-x 2 root root    0 28 août  10:07 power
-r--r--r-- 1 root root 4096 28 août  10:03 report_descriptor
lrwxrwxrwx 1 root root    0 28 août  10:03 subsystem -> ../../../../../../../../bus/hid
-rw-r--r-- 1 root root 4096 28 août  10:03 uevent

Edit:

  1. this is with both fixes applied (yours and mine)
  2. without my fix, the 2nd interface showed all sysfs entries but they were not functional (for instance, it was not possible to change ff_strength), and it was crashing all the time

@mdias

mdias commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

After upgrading the FW of my wheel to latest (2.3.4) I can confirm the driver crashed on load.
Adding your list_empty checks fixes the issue 👍

I didn't need to fix the simagic_ff_initffb failure part. I think you had issues there because it wasn't doing the hid_hw_stop before.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants