mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
HID: pidff: Do not set out of range trigger button
Some games (mainly observed with Kylotonn's WRC Serises) set trigger button to a random value, or always the same one, out of range. I observed 307 and other values but, for example, my Moza R9 only exposes 128 buttons AND it's trigger button field is 8-bit. This causes errors to appear in dmesg. Only set the trigger button and trigger interval in the trigger button is in range of the field. Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficjalny@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
parent
79b95d7447
commit
e01a029654
|
|
@ -523,9 +523,19 @@ static void pidff_set_effect_report(struct pidff_device *pidff,
|
|||
pidff_set_duration(&pidff->set_effect[PID_DURATION],
|
||||
effect->replay.length);
|
||||
|
||||
pidff->set_effect[PID_TRIGGER_BUTTON].value[0] = effect->trigger.button;
|
||||
pidff_set_time(&pidff->set_effect[PID_TRIGGER_REPEAT_INT],
|
||||
effect->trigger.interval);
|
||||
/* Some games set this to random values that can be out of range */
|
||||
s32 trigger_button_max =
|
||||
pidff->set_effect[PID_TRIGGER_BUTTON].field->logical_maximum;
|
||||
if (effect->trigger.button <= trigger_button_max) {
|
||||
pidff->set_effect[PID_TRIGGER_BUTTON].value[0] =
|
||||
effect->trigger.button;
|
||||
pidff_set_time(&pidff->set_effect[PID_TRIGGER_REPEAT_INT],
|
||||
effect->trigger.interval);
|
||||
} else {
|
||||
pidff->set_effect[PID_TRIGGER_BUTTON].value[0] = 0;
|
||||
pidff->set_effect[PID_TRIGGER_REPEAT_INT].value[0] = 0;
|
||||
}
|
||||
|
||||
pidff->set_effect[PID_GAIN].value[0] =
|
||||
pidff->set_effect[PID_GAIN].field->logical_maximum;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user