HID: pidff: Compute INFINITE value instead of using hardcoded 0xffff
authorTomasz Pakuła <tomasz.pakula.oficjalny@gmail.com>
Tue, 25 Feb 2025 22:30:02 +0000 (23:30 +0100)
committerJiri Kosina <jkosina@suse.com>
Tue, 4 Mar 2025 20:42:44 +0000 (21:42 +0100)
As per USB PID standard:
INFINITE - Referrers to the maximum value of a range. i.e. if in an 8
bit unsigned field the value of 255 would indicate INFINITE.

Detecting 0xffff (U16_MAX) is still important as we MIGHT get this value
as infinite from some native software as 0 was never actually defined
in Linux' FF api as the infinite value. I'm working on it though.

Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficjalny@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/usbhid/hid-pidff.c

index 74b033a4ac1b8ece665f325471cdc114eae67bb1..a614438e43bd86c8342c58cd07fcf1b5e78730d5 100644 (file)
@@ -283,8 +283,9 @@ static void pidff_set_duration(struct pidff_usage *usage, u16 duration)
        if (duration == FF_INFINITE)
                duration = PID_INFINITE;
 
+       /* PID defines INFINITE as the max possible value for duration field */
        if (duration == PID_INFINITE) {
-               usage->value[0] = PID_INFINITE;
+               usage->value[0] = (1U << usage->field->report_size) - 1;
                return;
        }