patch-2.4.4 linux/drivers/usb/hid.c
Next file: linux/drivers/usb/hid.h
Previous file: linux/drivers/usb/devio.c
Back to the patch index
Back to the overall index
- Lines: 55
- Date:
Thu Apr 26 22:17:26 2001
- Orig file:
v2.4.3/linux/drivers/usb/hid.c
- Orig date:
Fri Feb 9 11:30:23 2001
diff -u --recursive --new-file v2.4.3/linux/drivers/usb/hid.c linux/drivers/usb/hid.c
@@ -698,7 +698,7 @@
static __inline__ __u32 s32ton(__s32 value, unsigned n)
{
__s32 a = value >> (n - 1);
- if (a && a != -1) return value > 0 ? 1 << (n - 1) : (1 << n) - 1;
+ if (a && a != -1) return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1;
return value & ((1 << n) - 1);
}
@@ -1016,9 +1016,15 @@
__s32 max = field->logical_maximum;
__s32 value[count]; /* WARNING: gcc specific */
- for (n = 0; n < count; n++)
+ for (n = 0; n < count; n++) {
value[n] = min < 0 ? snto32(extract(data, offset + n * size, size), size) :
extract(data, offset + n * size, size);
+ /* Handle the ErrorRollOver code (1) by simply ignoring this report */
+ if (!(field->flags & HID_MAIN_ITEM_VARIABLE)
+ && value[n] >= min && value[n] <= max
+ && field->usage[value[n] - min].hid == HID_UP_KEYBOARD + 1)
+ return;
+ }
for (n = 0; n < count; n++) {
@@ -1231,7 +1237,7 @@
static int hid_submit_out(struct hid_device *hid)
{
- hid->urbout.transfer_buffer_length = hid->out[hid->outtail].dr.length;
+ hid->urbout.transfer_buffer_length = le16_to_cpup(&hid->out[hid->outtail].dr.length);
hid->urbout.transfer_buffer = hid->out[hid->outtail].buffer;
hid->urbout.setup_packet = (void *) &(hid->out[hid->outtail].dr);
hid->urbout.dev = hid->dev;
@@ -1271,8 +1277,8 @@
hid_set_field(field, offset, value);
hid_output_report(field->report, hid->out[hid->outhead].buffer);
- hid->out[hid->outhead].dr.value = 0x200 | field->report->id;
- hid->out[hid->outhead].dr.length = ((field->report->size - 1) >> 3) + 1;
+ hid->out[hid->outhead].dr.value = cpu_to_le16(0x200 | field->report->id);
+ hid->out[hid->outhead].dr.length = cpu_to_le16((field->report->size + 7) >> 3);
hid->outhead = (hid->outhead + 1) & (HID_CONTROL_FIFO_SIZE - 1);
@@ -1445,7 +1451,7 @@
for (n = 0; n < HID_CONTROL_FIFO_SIZE; n++) {
hid->out[n].dr.requesttype = USB_TYPE_CLASS | USB_RECIP_INTERFACE;
hid->out[n].dr.request = USB_REQ_SET_REPORT;
- hid->out[n].dr.index = hid->ifnum;
+ hid->out[n].dr.index = cpu_to_le16(hid->ifnum);
}
hid->input.name = hid->name;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)