]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
HID: pidff: Use correct effect type in effect update
authorOleg Makarenko <oleg@makarenk.ooo>
Tue, 9 Jun 2026 16:00:27 +0000 (19:00 +0300)
committerJiri Kosina <jkosina@suse.com>
Wed, 10 Jun 2026 16:00:28 +0000 (18:00 +0200)
When updating an existing effect, the effect type from the last created
effect was sent to the device instead of the updated one.
This caused incorrect reports when a game creates multiple different
effects and updates only one that is not the last created.

Fixes FFB in multiple games that create multiple simultaneous effects
(Forza Horizon 5/6).

Fixes: 224ee88fe395 ("Input: add force feedback driver for PID devices")
Cc: stable@vger.kernel.org
Tested-by: Oliver Roundtree <oroundtree1@gmail.com>
Co-developed-by: Ryno Kotzé <lemon.xah@gmail.com>
Signed-off-by: Ryno Kotzé <lemon.xah@gmail.com>
Signed-off-by: Oleg Makarenko <oleg@makarenk.ooo>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/usbhid/hid-pidff.c

index c45f182d044800e6d6c8103c14f6143542244858..5f4395f7c6458b42945d88429dcc3bad95512a69 100644 (file)
@@ -522,7 +522,7 @@ static void pidff_set_effect_report(struct pidff_device *pidff,
        pidff->set_effect[PID_EFFECT_BLOCK_INDEX].value[0] =
                pidff->block_load[PID_EFFECT_BLOCK_INDEX].value[0];
        pidff->set_effect_type->value[0] =
-               pidff->create_new_effect_type->value[0];
+               pidff_get_effect_type_id(pidff, effect);
 
        pidff_set_duration(&pidff->set_effect[PID_DURATION],
                           effect->replay.length);