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 {
|