Index: drivers/usb/hid-core.c =================================================================== RCS file: /home/scm/linux-2.4/drivers/usb/hid-core.c,v retrieving revision 1.16 diff -u -r1.16 hid-core.c --- drivers/usb/hid-core.c 31 Mar 2003 22:12:23 -0000 1.16 +++ drivers/usb/hid-core.c 28 Apr 2003 20:35:15 -0000 @@ -752,14 +754,21 @@ unsigned count = field->report_count; unsigned offset = field->report_offset; unsigned size = field->report_size; - __s32 min = field->logical_minimum; - __s32 max = field->logical_maximum; + __s32 min, max; __s32 value[count]; /* WARNING: gcc specific */ + if (field->physical_minimum != field->physical_maximum) { + min = field->physical_minimum; + max = field->physical_maximum; + } else { + min = field->logical_minimum; + max = field->logical_maximum; + } + for (n = 0; n < count; n++) { + __u32 val = extract(data, offset + n * size, size); - value[n] = min < 0 ? snto32(extract(data, offset + n * size, size), size) : - extract(data, offset + n * size, size); + value[n] = min < 0 ? snto32(val, size) : val; if (!(field->flags & HID_MAIN_ITEM_VARIABLE) /* Ignore report if ErrorRollOver */ && value[n] >= min && value[n] <= max Index: drivers/usb/hid-input.c =================================================================== RCS file: /home/scm/linux-2.4/drivers/usb/hid-input.c,v retrieving revision 1.7 diff -u -r1.7 hid-input.c --- drivers/usb/hid-input.c 5 Dec 2002 21:51:39 -0000 1.7 +++ drivers/usb/hid-input.c 28 Apr 2003 20:35:15 -0000 @@ -277,8 +297,15 @@ if (usage->code > max) return; if (usage->type == EV_ABS) { - int a = field->logical_minimum; - int b = field->logical_maximum; + int a, b; + + if (field->physical_minimum != field->physical_maximum) { + a = field->physical_minimum; + b = field->physical_maximum; + } else { + a = field->logical_minimum; + b = field->logical_maximum; + } input->absmin[usage->code] = a; input->absmax[usage->code] = b;