bk://kernel.bkbits.net/vojtech/input
vojtech@silver.ucw.cz|ChangeSet|20050122101929|63227 vojtech

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2005/01/22 16:16:13-08:00 akpm@bix.(none) 
#   Merge bk://kernel.bkbits.net/vojtech/input
#   into bix.(none):/usr/src/bk-input
# 
# drivers/usb/input/hid-core.c
#   2005/01/22 16:16:09-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# Documentation/kernel-parameters.txt
#   2005/01/22 16:16:08-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/22 11:19:29+01:00 vojtech@silver.ucw.cz 
#   Merge silver.ucw.cz:/home/vojtech/bk/linus
#   into silver.ucw.cz:/home/vojtech/bk/input
# 
# drivers/usb/input/hid-core.c
#   2005/01/22 11:19:23+01:00 vojtech@silver.ucw.cz +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/19 14:21:45-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input
# 
# drivers/usb/input/hid-core.c
#   2005/01/19 14:21:39-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/13 13:32:43+01:00 vojtech@suse.cz 
#   input: Handle -EILSEQ return code in the HID driver completion
#          handlers as unplug.
#          Flush request queue on unplug, too.
#   
#   Signed-off-by: Vojtech Pavlik <vojtech@suse.cz>
# 
# drivers/usb/input/hid-core.c
#   2005/01/13 13:32:33+01:00 vojtech@suse.cz +18 -5
#   input: Handle -EILSEQ return code in the HID driver completion
#          handlers as unplug.
#          Flush request queue on unplug, too.
#   
#   Signed-off-by: Vojtech Pavlik <vojtech@suse.cz>
# 
# ChangeSet
#   2005/01/13 13:20:07+01:00 vojtech@suse.cz 
#   Merge bkbits:input-new into suse.cz:/home/vojtech/bk/input
# 
# Documentation/kernel-parameters.txt
#   2005/01/13 13:20:04+01:00 vojtech@suse.cz +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/12 12:29:03-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input
# 
# Documentation/kernel-parameters.txt
#   2005/01/12 12:28:59-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/11 17:45:14+01:00 vojtech@silver.ucw.cz 
#   input: Add support for H-Wheel on Microsoft Explorer and Logitech MX
#          USB HID mice.
#   
#   Signed-off-by: Vojtech Pavlik <vojtech@suse.cz>
# 
# drivers/usb/input/hid.h
#   2005/01/11 17:45:02+01:00 vojtech@silver.ucw.cz +1 -0
#   input: Add support for H-Wheel on Microsoft Explorer and Logitech MX
#          USB HID mice.
# 
# drivers/usb/input/hid-input.c
#   2005/01/11 17:45:02+01:00 vojtech@silver.ucw.cz +9 -3
#   input: Add support for H-Wheel on Microsoft Explorer and Logitech MX
#          USB HID mice.
# 
# drivers/usb/input/hid-debug.h
#   2005/01/11 17:45:02+01:00 vojtech@silver.ucw.cz +14 -10
#   input: Add support for H-Wheel on Microsoft Explorer and Logitech MX
#          USB HID mice.
# 
# ChangeSet
#   2005/01/11 13:15:31+01:00 vojtech@silver.ucw.cz 
#   Merge silver.ucw.cz:/home/vojtech/bk/linus
#   into silver.ucw.cz:/home/vojtech/bk/input
# 
# Documentation/kernel-parameters.txt
#   2005/01/11 13:15:23+01:00 vojtech@silver.ucw.cz +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/11 11:05:32+01:00 vojtech@silver.ucw.cz 
#   Merge bkbits:input into silver.ucw.cz:/home/vojtech/bk/input
# 
# Documentation/kernel-parameters.txt
#   2005/01/11 11:05:25+01:00 vojtech@silver.ucw.cz +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/10 15:05:31-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input
# 
# drivers/usb/input/hid-core.c
#   2005/01/10 15:05:26-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/08 21:50:33-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input
# 
# Documentation/kernel-parameters.txt
#   2005/01/08 21:50:29-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/04 23:27:11-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input
# 
# Documentation/kernel-parameters.txt
#   2005/01/04 23:27:07-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/04 14:15:59-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input
# 
# Documentation/kernel-parameters.txt
#   2005/01/04 14:15:55-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/04 00:25:03-08:00 akpm@bix.(none) 
#   Merge bk://kernel.bkbits.net/vojtech/input
#   into bix.(none):/usr/src/bk-input
# 
# Documentation/kernel-parameters.txt
#   2005/01/04 00:24:59-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/04 00:23:10-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input
# 
# Documentation/kernel-parameters.txt
#   2005/01/04 00:23:05-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/02 11:54:40+01:00 vojtech@silver.ucw.cz 
#   Merge silver.ucw.cz:/home/vojtech/bk/linus
#   into silver.ucw.cz:/home/vojtech/bk/input
# 
# Documentation/kernel-parameters.txt
#   2005/01/02 11:54:34+01:00 vojtech@silver.ucw.cz +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/12/29 18:24:03-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input
# 
# Documentation/kernel-parameters.txt
#   2004/12/29 18:23:57-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/12/28 20:48:26-08:00 akpm@bix.(none) 
#   Merge bk://kernel.bkbits.net/vojtech/input
#   into bix.(none):/usr/src/bk-input
# 
# drivers/usb/input/hid-core.c
#   2004/12/28 20:48:22-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/input/tsdev.c
#   2004/12/28 20:48:22-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/input/mousedev.c
#   2004/12/28 20:48:22-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/input/joydev.c
#   2004/12/28 20:48:22-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/input/evdev.c
#   2004/12/28 20:48:22-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# Documentation/kernel-parameters.txt
#   2004/12/28 20:48:22-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/12/25 08:59:48-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-input
# 
# drivers/input/tsdev.c
#   2004/12/25 08:59:44-08:00 akpm@bix.(none) +0 -5
#   Auto merged
# 
# drivers/input/mousedev.c
#   2004/12/25 08:59:44-08:00 akpm@bix.(none) +0 -2
#   Auto merged
# 
# drivers/input/joydev.c
#   2004/12/25 08:59:44-08:00 akpm@bix.(none) +0 -2
#   Auto merged
# 
# drivers/input/evdev.c
#   2004/12/25 08:59:44-08:00 akpm@bix.(none) +0 -2
#   Auto merged
# 
# ChangeSet
#   2004/12/16 13:33:00-08:00 akpm@bix.(none) 
#   Merge bk://kernel.bkbits.net/vojtech/input
#   into bix.(none):/usr/src/bk-input
# 
# drivers/usb/input/hid-core.c
#   2004/12/16 13:32:57-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# Documentation/kernel-parameters.txt
#   2004/12/16 13:32:57-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
diff -Nru a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c
--- a/drivers/usb/input/hid-core.c	2005-01-23 22:39:29 -08:00
+++ b/drivers/usb/input/hid-core.c	2005-01-23 22:39:29 -08:00
@@ -925,8 +925,9 @@
 			break;
 		case -ECONNRESET:	/* unlink */
 		case -ENOENT:
-		case -ESHUTDOWN:
 		case -EPERM:
+		case -ESHUTDOWN:	/* unplug */
+		case -EILSEQ:		/* unplug timeout on uhci */
 			return;
 		case -ETIMEDOUT:	/* NAK */
 			break;
@@ -1136,12 +1137,15 @@
 {
 	struct hid_device *hid = urb->context;
 	unsigned long flags;
+	int unplug = 0;
 
 	switch (urb->status) {
 		case 0:			/* success */
+		case -ESHUTDOWN:	/* unplug */
+		case -EILSEQ:		/* unplug timeout on uhci */
+			unplug = 1;
 		case -ECONNRESET:	/* unlink */
 		case -ENOENT:
-		case -ESHUTDOWN:
 			break;
 		default:		/* error */
 			warn("output irq status %d received", urb->status);
@@ -1149,7 +1153,10 @@
 
 	spin_lock_irqsave(&hid->outlock, flags);
 
-	hid->outtail = (hid->outtail + 1) & (HID_OUTPUT_FIFO_SIZE - 1);
+	if (unplug)
+		hid->outtail = hid->outhead;
+	else
+		hid->outtail = (hid->outtail + 1) & (HID_OUTPUT_FIFO_SIZE - 1);
 
 	if (hid->outhead != hid->outtail) {
 		if (hid_submit_out(hid)) {
@@ -1173,6 +1180,7 @@
 {
 	struct hid_device *hid = urb->context;
 	unsigned long flags;
+	int unplug = 0;
 
 	spin_lock_irqsave(&hid->ctrllock, flags);
 
@@ -1180,16 +1188,21 @@
 		case 0:			/* success */
 			if (hid->ctrl[hid->ctrltail].dir == USB_DIR_IN) 
 				hid_input_report(hid->ctrl[hid->ctrltail].report->type, urb, regs);
+		case -ESHUTDOWN:	/* unplug */
+		case -EILSEQ:		/* unplug timectrl on uhci */
+			unplug = 1;
 		case -ECONNRESET:	/* unlink */
 		case -ENOENT:
-		case -ESHUTDOWN:
 		case -EPIPE:		/* report not available */
 			break;
 		default:		/* error */
 			warn("ctrl urb status %d received", urb->status);
 	}
 
-	hid->ctrltail = (hid->ctrltail + 1) & (HID_CONTROL_FIFO_SIZE - 1);
+	if (unplug)
+		hid->ctrltail = hid->ctrlhead;
+	else
+		hid->ctrltail = (hid->ctrltail + 1) & (HID_CONTROL_FIFO_SIZE - 1);
 
 	if (hid->ctrlhead != hid->ctrltail) {
 		if (hid_submit_ctrl(hid)) {
diff -Nru a/drivers/usb/input/hid-debug.h b/drivers/usb/input/hid-debug.h
--- a/drivers/usb/input/hid-debug.h	2005-01-23 22:39:29 -08:00
+++ b/drivers/usb/input/hid-debug.h	2005-01-23 22:39:29 -08:00
@@ -81,15 +81,21 @@
       {0, 0x8b, "SystemMenuLeft"},
       {0, 0x8c, "SystemMenuUp"},
       {0, 0x8d, "SystemMenuDown"},
-    {0, 0x90, "D-padUp"},
-    {0, 0x91, "D-padDown"},
-    {0, 0x92, "D-padRight"},
-    {0, 0x93, "D-padLeft"},
+      {0, 0x90, "D-PadUp"},
+      {0, 0x91, "D-PadDown"},
+      {0, 0x92, "D-PadRight"},
+      {0, 0x93, "D-PadLeft"},
   {  7, 0, "Keyboard" },
+      {0, 0x01, "NumLock"},
+      {0, 0x02, "CapsLock"},
+      {0, 0x03, "ScrollLock"},
+      {0, 0x04, "Compose"},
+      {0, 0x05, "Kana"},
   {  8, 0, "LED" },
   {  9, 0, "Button" },
   { 10, 0, "Ordinal" },
-  { 12, 0, "Hotkey" },
+  { 12, 0, "Consumer" },
+      {0, 0x238, "HorizontalWheel"},
   { 13, 0, "Digitizers" },
     {0, 0x01, "Digitizer"},
     {0, 0x02, "Pen"},
@@ -653,12 +659,10 @@
 	[KEY_SLOW] = "Slow",			[KEY_SHUFFLE] = "Shuffle",
 	[KEY_BREAK] = "Break",			[KEY_PREVIOUS] = "Previous",
 	[KEY_DIGITS] = "Digits",		[KEY_TEEN] = "TEEN",
-	[KEY_TWEN] = "TWEN",			[KEY_DEL_EOL] = "Delete EOL",
-	[KEY_DEL_EOS] = "Delete EOS",		[KEY_INS_LINE] = "Insert line",
-	[KEY_DEL_LINE] = "Delete line",
+	[KEY_TWEN] = "TWEN",			[KEY_DEL_EOL] = "DeleteEOL",
+	[KEY_DEL_EOS] = "DeleteEOS",		[KEY_INS_LINE] = "InsertLine",
+	[KEY_DEL_LINE] = "DeleteLine",
 };
-
-static char *absval[5] = { "Value", "Min  ", "Max  ", "Fuzz ", "Flat " };
 
 static char *relatives[REL_MAX + 1] = {
 	[0 ... REL_MAX] = NULL,
diff -Nru a/drivers/usb/input/hid-input.c b/drivers/usb/input/hid-input.c
--- a/drivers/usb/input/hid-input.c	2005-01-23 22:39:29 -08:00
+++ b/drivers/usb/input/hid-input.c	2005-01-23 22:39:29 -08:00
@@ -185,7 +185,9 @@
 			break;
 
 		case HID_UP_LED:
-			map_led((usage->hid - 1) & 0xf);
+			if (usage->hid - 1 >= LED_MAX)
+				goto ignore;
+			map_led(usage->hid - 1);
 			break;
 
 		case HID_UP_DIGITIZER:
@@ -231,7 +233,6 @@
 
 		case HID_UP_CONSUMER:	/* USB HUT v1.1, pages 56-62 */
 
-			set_bit(EV_REP, input->evbit);
 			switch (usage->hid & HID_USAGE) {
 				case 0x000: goto ignore;
 				case 0x034: map_key_clear(KEY_SLEEP);		break;
@@ -268,6 +269,7 @@
 				case 0x226: map_key_clear(KEY_STOP);		break;
 				case 0x227: map_key_clear(KEY_REFRESH);		break;
 				case 0x22a: map_key_clear(KEY_BOOKMARKS);	break;
+				case 0x238: map_rel(REL_HWHEEL);		break;
 				default:    goto unknown;
 			}
 			break;
@@ -288,9 +290,13 @@
 				case 0x084: map_key_clear(KEY_FINANCE);		break;
 				case 0x085: map_key_clear(KEY_SPORT);		break;
 				case 0x086: map_key_clear(KEY_SHOP);	        break;
-				default:    goto unknown;
+				default:    goto ignore;
 			}
 			break;
+
+		case HID_UP_MSVENDOR:
+
+			goto ignore;
 			
 		case HID_UP_PID:
 
diff -Nru a/drivers/usb/input/hid.h b/drivers/usb/input/hid.h
--- a/drivers/usb/input/hid.h	2005-01-23 22:39:29 -08:00
+++ b/drivers/usb/input/hid.h	2005-01-23 22:39:29 -08:00
@@ -181,6 +181,7 @@
 #define HID_UP_DIGITIZER 	0x000d0000
 #define HID_UP_PID 		0x000f0000
 #define HID_UP_HPVENDOR         0xff7f0000
+#define HID_UP_MSVENDOR		0xff000000
 
 #define HID_USAGE		0x0000ffff
 
