Commit e01a0296 authored by Tomasz Pakuła's avatar Tomasz Pakuła Committed by Jiri Kosina
Browse files

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: default avatarTomasz Pakuła <tomasz.pakula.oficjalny@gmail.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.com>
parent 79b95d74
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -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;
	/* 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;