summaryrefslogtreecommitdiff
blob: 543a4e3ba1eed38fae41c7bf6de2c711b863168b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
--- ./drivers/input/mouse/psmouse-base.c.fx2	2006-01-19 19:24:09.000000000 +0300
+++ ./drivers/input/mouse/psmouse-base.c	2006-01-19 19:52:02.000000000 +0300
@@ -173,6 +173,9 @@ static irqreturn_t psmouse_interrupt(str
 		goto out;
 	}
 
+	if (psmouse->state == PSMOUSE_INITIALIZING)
+		goto out;
+
 	if (psmouse->state == PSMOUSE_ACTIVATED &&
 	    psmouse->pktcnt && time_after(jiffies, psmouse->last + HZ/2)) {
 		printk(KERN_WARNING "psmouse.c: %s at %s lost synchronization, throwing %d bytes away.\n",
@@ -669,7 +672,7 @@ static void psmouse_connect(struct serio
 	psmouse->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REL);
 	psmouse->dev.keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);
 	psmouse->dev.relbit[0] = BIT(REL_X) | BIT(REL_Y);
-	psmouse->state = PSMOUSE_CMD_MODE;
+	psmouse->state = PSMOUSE_INITIALIZING;
 	psmouse->serio = serio;
 	psmouse->dev.private = psmouse;
 
@@ -711,6 +714,8 @@ static void psmouse_connect(struct serio
 
 	printk(KERN_INFO "input: %s on %s\n", psmouse->devname, serio->phys);
 
+	psmouse->state = PSMOUSE_CMD_MODE;
+
 	psmouse_initialize(psmouse);
 
 	if (psmouse->ptport) {
@@ -734,7 +739,7 @@ static int psmouse_reconnect(struct seri
 		return -1;
 	}
 
-	psmouse->state = PSMOUSE_CMD_MODE;
+	psmouse->state = PSMOUSE_INITIALIZING;
 	psmouse->acking = psmouse->cmdcnt = psmouse->pktcnt = psmouse->out_of_sync = 0;
 	if (psmouse->reconnect) {
 	       if (psmouse->reconnect(psmouse))
@@ -746,6 +751,8 @@ static int psmouse_reconnect(struct seri
 	/* ok, the device type (and capabilities) match the old one,
 	 * we can continue using it, complete intialization
 	 */
+	psmouse->state = PSMOUSE_CMD_MODE;
+
 	psmouse_initialize(psmouse);
 
 	if (psmouse->ptport) {
--- ./drivers/input/mouse/psmouse.h.fx2	2006-01-19 19:24:09.000000000 +0300
+++ ./drivers/input/mouse/psmouse.h	2006-01-19 19:53:14.000000000 +0300
@@ -21,6 +21,7 @@
 #define PSMOUSE_CMD_MODE	0
 #define PSMOUSE_ACTIVATED	1
 #define PSMOUSE_IGNORE		2
+#define PSMOUSE_INITIALIZING	3
 
 /* psmouse protocol handler return codes */
 typedef enum {