patch-2.4.0-test9 linux/drivers/usb/hid.c

Next file: linux/drivers/usb/hub.c
Previous file: linux/drivers/usb/devio.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test8/linux/drivers/usb/hid.c linux/drivers/usb/hid.c
@@ -1,5 +1,5 @@
 /*
- * $Id: hid.c,v 1.14 2000/08/14 21:05:26 vojtech Exp $
+ * $Id: hid.c,v 1.16 2000/09/18 21:38:55 vojtech Exp $
  *
  *  Copyright (c) 1999 Andreas Gal
  *  Copyright (c) 2000 Vojtech Pavlik
@@ -924,6 +924,8 @@
 		usage->code = find_next_zero_bit(bit, max + 1, usage->code);
 	}
 
+	if (usage->code > max) return;
+
 	if (usage->type == EV_ABS) {
 		int a = field->logical_minimum;
 		int b = field->logical_maximum;
@@ -936,7 +938,7 @@
 
 	if (usage->hat) {
 		int i;
-		for (i = usage->code; i < usage->code + 2; i++) {
+		for (i = usage->code; i < usage->code + 2 && i <= max; i++) {
 			input->absmax[i] = 1;
 			input->absmin[i] = -1;
 			input->absfuzz[i] = 0;
@@ -1229,6 +1231,7 @@
 	hid->urbout.transfer_buffer_length = 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;
 
 	if (usb_submit_urb(&hid->urbout)) {
 		err("usb_submit_urb(out) failed");
@@ -1286,7 +1289,9 @@
 	if (hid->open++)
 		return 0;
 
-	 if (usb_submit_urb(&hid->urb))
+	hid->urb.dev = hid->dev;
+
+	if (usb_submit_urb(&hid->urb))
 		return -EIO;
 
 	return 0;

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)