aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/mouse
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2006-10-05 09:55:46 -0400
committerDavid Howells <dhowells@warthog.cambridge.redhat.com>2006-10-05 10:10:12 -0400
commit7d12e780e003f93433d49ce78cfedf4b4c52adc5 (patch)
tree6748550400445c11a306b132009f3001e3525df8 /drivers/input/mouse
parentda482792a6d1a3fbaaa25fae867b343fb4db3246 (diff)
IRQ: Maintain regs pointer globally rather than passing to IRQ handlers
Maintain a per-CPU global "struct pt_regs *" variable which can be used instead of passing regs around manually through all ~1800 interrupt handlers in the Linux kernel. The regs pointer is used in few places, but it potentially costs both stack space and code to pass it around. On the FRV arch, removing the regs parameter from all the genirq function results in a 20% speed up of the IRQ exit path (ie: from leaving timer_interrupt() to leaving do_IRQ()). Where appropriate, an arch may override the generic storage facility and do something different with the variable. On FRV, for instance, the address is maintained in GR28 at all times inside the kernel as part of general exception handling. Having looked over the code, it appears that the parameter may be handed down through up to twenty or so layers of functions. Consider a USB character device attached to a USB hub, attached to a USB controller that posts its interrupts through a cascaded auxiliary interrupt controller. A character device driver may want to pass regs to the sysrq handler through the input layer which adds another few layers of parameter passing. I've build this code with allyesconfig for x86_64 and i386. I've runtested the main part of the code on FRV and i386, though I can't test most of the drivers. I've also done partial conversion for powerpc and MIPS - these at least compile with minimal configurations. This will affect all archs. Mostly the changes should be relatively easy. Take do_IRQ(), store the regs pointer at the beginning, saving the old one: struct pt_regs *old_regs = set_irq_regs(regs); And put the old one back at the end: set_irq_regs(old_regs); Don't pass regs through to generic_handle_irq() or __do_IRQ(). In timer_interrupt(), this sort of change will be necessary: - update_process_times(user_mode(regs)); - profile_tick(CPU_PROFILING, regs); + update_process_times(user_mode(get_irq_regs())); + profile_tick(CPU_PROFILING); I'd like to move update_process_times()'s use of get_irq_regs() into itself, except that i386, alone of the archs, uses something other than user_mode(). Some notes on the interrupt handling in the drivers: (*) input_dev() is now gone entirely. The regs pointer is no longer stored in the input_dev struct. (*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking. It does something different depending on whether it's been supplied with a regs pointer or not. (*) Various IRQ handler function pointers have been moved to type irq_handler_t. Signed-Off-By: David Howells <dhowells@redhat.com> (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)
Diffstat (limited to 'drivers/input/mouse')
-rw-r--r--drivers/input/mouse/alps.c10
-rw-r--r--drivers/input/mouse/amimouse.c4
-rw-r--r--drivers/input/mouse/hil_ptr.c2
-rw-r--r--drivers/input/mouse/inport.c4
-rw-r--r--drivers/input/mouse/lifebook.c4
-rw-r--r--drivers/input/mouse/logibm.c3
-rw-r--r--drivers/input/mouse/logips2pp.c4
-rw-r--r--drivers/input/mouse/pc110pad.c9
-rw-r--r--drivers/input/mouse/psmouse-base.c16
-rw-r--r--drivers/input/mouse/psmouse.h2
-rw-r--r--drivers/input/mouse/rpcmouse.c4
-rw-r--r--drivers/input/mouse/sermouse.c14
-rw-r--r--drivers/input/mouse/synaptics.c15
-rw-r--r--drivers/input/mouse/vsxxxaa.c22
14 files changed, 43 insertions, 70 deletions
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index 450b68a619fd..4e71a66fc7fc 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -76,7 +76,7 @@ static const struct alps_model_info alps_model_data[] = {
76 * on a dualpoint, etc. 76 * on a dualpoint, etc.
77 */ 77 */
78 78
79static void alps_process_packet(struct psmouse *psmouse, struct pt_regs *regs) 79static void alps_process_packet(struct psmouse *psmouse)
80{ 80{
81 struct alps_data *priv = psmouse->private; 81 struct alps_data *priv = psmouse->private;
82 unsigned char *packet = psmouse->packet; 82 unsigned char *packet = psmouse->packet;
@@ -85,8 +85,6 @@ static void alps_process_packet(struct psmouse *psmouse, struct pt_regs *regs)
85 int x, y, z, ges, fin, left, right, middle; 85 int x, y, z, ges, fin, left, right, middle;
86 int back = 0, forward = 0; 86 int back = 0, forward = 0;
87 87
88 input_regs(dev, regs);
89
90 if ((packet[0] & 0xc8) == 0x08) { /* 3-byte PS/2 packet */ 88 if ((packet[0] & 0xc8) == 0x08) { /* 3-byte PS/2 packet */
91 input_report_key(dev2, BTN_LEFT, packet[0] & 1); 89 input_report_key(dev2, BTN_LEFT, packet[0] & 1);
92 input_report_key(dev2, BTN_RIGHT, packet[0] & 2); 90 input_report_key(dev2, BTN_RIGHT, packet[0] & 2);
@@ -181,13 +179,13 @@ static void alps_process_packet(struct psmouse *psmouse, struct pt_regs *regs)
181 input_sync(dev); 179 input_sync(dev);
182} 180}
183 181
184static psmouse_ret_t alps_process_byte(struct psmouse *psmouse, struct pt_regs *regs) 182static psmouse_ret_t alps_process_byte(struct psmouse *psmouse)
185{ 183{
186 struct alps_data *priv = psmouse->private; 184 struct alps_data *priv = psmouse->private;
187 185
188 if ((psmouse->packet[0] & 0xc8) == 0x08) { /* PS/2 packet */ 186 if ((psmouse->packet[0] & 0xc8) == 0x08) { /* PS/2 packet */
189 if (psmouse->pktcnt == 3) { 187 if (psmouse->pktcnt == 3) {
190 alps_process_packet(psmouse, regs); 188 alps_process_packet(psmouse);
191 return PSMOUSE_FULL_PACKET; 189 return PSMOUSE_FULL_PACKET;
192 } 190 }
193 return PSMOUSE_GOOD_DATA; 191 return PSMOUSE_GOOD_DATA;
@@ -202,7 +200,7 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse, struct pt_regs *
202 return PSMOUSE_BAD_DATA; 200 return PSMOUSE_BAD_DATA;
203 201
204 if (psmouse->pktcnt == 6) { 202 if (psmouse->pktcnt == 6) {
205 alps_process_packet(psmouse, regs); 203 alps_process_packet(psmouse);
206 return PSMOUSE_FULL_PACKET; 204 return PSMOUSE_FULL_PACKET;
207 } 205 }
208 206
diff --git a/drivers/input/mouse/amimouse.c b/drivers/input/mouse/amimouse.c
index c8b2cc9f184c..599a7b2dc519 100644
--- a/drivers/input/mouse/amimouse.c
+++ b/drivers/input/mouse/amimouse.c
@@ -36,7 +36,7 @@ MODULE_LICENSE("GPL");
36static int amimouse_lastx, amimouse_lasty; 36static int amimouse_lastx, amimouse_lasty;
37static struct input_dev *amimouse_dev; 37static struct input_dev *amimouse_dev;
38 38
39static irqreturn_t amimouse_interrupt(int irq, void *dummy, struct pt_regs *fp) 39static irqreturn_t amimouse_interrupt(int irq, void *dummy)
40{ 40{
41 unsigned short joy0dat, potgor; 41 unsigned short joy0dat, potgor;
42 int nx, ny, dx, dy; 42 int nx, ny, dx, dy;
@@ -59,8 +59,6 @@ static irqreturn_t amimouse_interrupt(int irq, void *dummy, struct pt_regs *fp)
59 59
60 potgor = amiga_custom.potgor; 60 potgor = amiga_custom.potgor;
61 61
62 input_regs(amimouse_dev, fp);
63
64 input_report_rel(amimouse_dev, REL_X, dx); 62 input_report_rel(amimouse_dev, REL_X, dx);
65 input_report_rel(amimouse_dev, REL_Y, dy); 63 input_report_rel(amimouse_dev, REL_Y, dy);
66 64
diff --git a/drivers/input/mouse/hil_ptr.c b/drivers/input/mouse/hil_ptr.c
index 69f02178c528..402b057e986e 100644
--- a/drivers/input/mouse/hil_ptr.c
+++ b/drivers/input/mouse/hil_ptr.c
@@ -190,7 +190,7 @@ static void hil_ptr_process_err(struct hil_ptr *ptr) {
190} 190}
191 191
192static irqreturn_t hil_ptr_interrupt(struct serio *serio, 192static irqreturn_t hil_ptr_interrupt(struct serio *serio,
193 unsigned char data, unsigned int flags, struct pt_regs *regs) 193 unsigned char data, unsigned int flags)
194{ 194{
195 struct hil_ptr *ptr; 195 struct hil_ptr *ptr;
196 hil_packet packet; 196 hil_packet packet;
diff --git a/drivers/input/mouse/inport.c b/drivers/input/mouse/inport.c
index 50f1fed10be4..e1252fa9a107 100644
--- a/drivers/input/mouse/inport.c
+++ b/drivers/input/mouse/inport.c
@@ -88,15 +88,13 @@ __obsolete_setup("inport_irq=");
88 88
89static struct input_dev *inport_dev; 89static struct input_dev *inport_dev;
90 90
91static irqreturn_t inport_interrupt(int irq, void *dev_id, struct pt_regs *regs) 91static irqreturn_t inport_interrupt(int irq, void *dev_id)
92{ 92{
93 unsigned char buttons; 93 unsigned char buttons;
94 94
95 outb(INPORT_REG_MODE, INPORT_CONTROL_PORT); 95 outb(INPORT_REG_MODE, INPORT_CONTROL_PORT);
96 outb(INPORT_MODE_HOLD | INPORT_MODE_IRQ | INPORT_MODE_BASE, INPORT_DATA_PORT); 96 outb(INPORT_MODE_HOLD | INPORT_MODE_IRQ | INPORT_MODE_BASE, INPORT_DATA_PORT);
97 97
98 input_regs(inport_dev, regs);
99
100 outb(INPORT_REG_X, INPORT_CONTROL_PORT); 98 outb(INPORT_REG_X, INPORT_CONTROL_PORT);
101 input_report_rel(inport_dev, REL_X, inb(INPORT_DATA_PORT)); 99 input_report_rel(inport_dev, REL_X, inb(INPORT_DATA_PORT));
102 100
diff --git a/drivers/input/mouse/lifebook.c b/drivers/input/mouse/lifebook.c
index 5e9d25067513..c57e8853b949 100644
--- a/drivers/input/mouse/lifebook.c
+++ b/drivers/input/mouse/lifebook.c
@@ -62,7 +62,7 @@ static struct dmi_system_id lifebook_dmi_table[] = {
62}; 62};
63 63
64 64
65static psmouse_ret_t lifebook_process_byte(struct psmouse *psmouse, struct pt_regs *regs) 65static psmouse_ret_t lifebook_process_byte(struct psmouse *psmouse)
66{ 66{
67 unsigned char *packet = psmouse->packet; 67 unsigned char *packet = psmouse->packet;
68 struct input_dev *dev = psmouse->dev; 68 struct input_dev *dev = psmouse->dev;
@@ -70,8 +70,6 @@ static psmouse_ret_t lifebook_process_byte(struct psmouse *psmouse, struct pt_re
70 if (psmouse->pktcnt != 3) 70 if (psmouse->pktcnt != 3)
71 return PSMOUSE_GOOD_DATA; 71 return PSMOUSE_GOOD_DATA;
72 72
73 input_regs(dev, regs);
74
75 /* calculate X and Y */ 73 /* calculate X and Y */
76 if ((packet[0] & 0x08) == 0x00) { 74 if ((packet[0] & 0x08) == 0x00) {
77 input_report_abs(dev, ABS_X, 75 input_report_abs(dev, ABS_X,
diff --git a/drivers/input/mouse/logibm.c b/drivers/input/mouse/logibm.c
index 9c7ce38806d7..8e9c2f3d69a8 100644
--- a/drivers/input/mouse/logibm.c
+++ b/drivers/input/mouse/logibm.c
@@ -79,7 +79,7 @@ __obsolete_setup("logibm_irq=");
79 79
80static struct input_dev *logibm_dev; 80static struct input_dev *logibm_dev;
81 81
82static irqreturn_t logibm_interrupt(int irq, void *dev_id, struct pt_regs *regs) 82static irqreturn_t logibm_interrupt(int irq, void *dev_id)
83{ 83{
84 char dx, dy; 84 char dx, dy;
85 unsigned char buttons; 85 unsigned char buttons;
@@ -95,7 +95,6 @@ static irqreturn_t logibm_interrupt(int irq, void *dev_id, struct pt_regs *regs)
95 dy |= (buttons & 0xf) << 4; 95 dy |= (buttons & 0xf) << 4;
96 buttons = ~buttons >> 5; 96 buttons = ~buttons >> 5;
97 97
98 input_regs(logibm_dev, regs);
99 input_report_rel(logibm_dev, REL_X, dx); 98 input_report_rel(logibm_dev, REL_X, dx);
100 input_report_rel(logibm_dev, REL_Y, dy); 99 input_report_rel(logibm_dev, REL_Y, dy);
101 input_report_key(logibm_dev, BTN_RIGHT, buttons & 1); 100 input_report_key(logibm_dev, BTN_RIGHT, buttons & 1);
diff --git a/drivers/input/mouse/logips2pp.c b/drivers/input/mouse/logips2pp.c
index 7972eecbcfe4..8a4f862709e7 100644
--- a/drivers/input/mouse/logips2pp.c
+++ b/drivers/input/mouse/logips2pp.c
@@ -39,7 +39,7 @@ struct ps2pp_info {
39 * Process a PS2++ or PS2T++ packet. 39 * Process a PS2++ or PS2T++ packet.
40 */ 40 */
41 41
42static psmouse_ret_t ps2pp_process_byte(struct psmouse *psmouse, struct pt_regs *regs) 42static psmouse_ret_t ps2pp_process_byte(struct psmouse *psmouse)
43{ 43{
44 struct input_dev *dev = psmouse->dev; 44 struct input_dev *dev = psmouse->dev;
45 unsigned char *packet = psmouse->packet; 45 unsigned char *packet = psmouse->packet;
@@ -51,8 +51,6 @@ static psmouse_ret_t ps2pp_process_byte(struct psmouse *psmouse, struct pt_regs
51 * Full packet accumulated, process it 51 * Full packet accumulated, process it
52 */ 52 */
53 53
54 input_regs(dev, regs);
55
56 if ((packet[0] & 0x48) == 0x48 && (packet[1] & 0x02) == 0x02) { 54 if ((packet[0] & 0x48) == 0x48 && (packet[1] & 0x02) == 0x02) {
57 55
58 /* Logitech extended packet */ 56 /* Logitech extended packet */
diff --git a/drivers/input/mouse/pc110pad.c b/drivers/input/mouse/pc110pad.c
index d284ea712151..8c075aa7223b 100644
--- a/drivers/input/mouse/pc110pad.c
+++ b/drivers/input/mouse/pc110pad.c
@@ -57,7 +57,7 @@ static struct input_dev *pc110pad_dev;
57static int pc110pad_data[3]; 57static int pc110pad_data[3];
58static int pc110pad_count; 58static int pc110pad_count;
59 59
60static irqreturn_t pc110pad_interrupt(int irq, void *ptr, struct pt_regs *regs) 60static irqreturn_t pc110pad_interrupt(int irq, void *ptr)
61{ 61{
62 int value = inb_p(pc110pad_io); 62 int value = inb_p(pc110pad_io);
63 int handshake = inb_p(pc110pad_io + 2); 63 int handshake = inb_p(pc110pad_io + 2);
@@ -71,7 +71,6 @@ static irqreturn_t pc110pad_interrupt(int irq, void *ptr, struct pt_regs *regs)
71 if (pc110pad_count < 3) 71 if (pc110pad_count < 3)
72 return IRQ_HANDLED; 72 return IRQ_HANDLED;
73 73
74 input_regs(pc110pad_dev, regs);
75 input_report_key(pc110pad_dev, BTN_TOUCH, 74 input_report_key(pc110pad_dev, BTN_TOUCH,
76 pc110pad_data[0] & 0x01); 75 pc110pad_data[0] & 0x01);
77 input_report_abs(pc110pad_dev, ABS_X, 76 input_report_abs(pc110pad_dev, ABS_X,
@@ -91,9 +90,9 @@ static void pc110pad_close(struct input_dev *dev)
91 90
92static int pc110pad_open(struct input_dev *dev) 91static int pc110pad_open(struct input_dev *dev)
93{ 92{
94 pc110pad_interrupt(0, NULL, NULL); 93 pc110pad_interrupt(0, NULL);
95 pc110pad_interrupt(0, NULL, NULL); 94 pc110pad_interrupt(0, NULL);
96 pc110pad_interrupt(0, NULL, NULL); 95 pc110pad_interrupt(0, NULL);
97 outb(PC110PAD_ON, pc110pad_io + 2); 96 outb(PC110PAD_ON, pc110pad_io + 2);
98 pc110pad_count = 0; 97 pc110pad_count = 0;
99 98
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
index 9fb7eb6b0f71..6f9b2c7cc9c2 100644
--- a/drivers/input/mouse/psmouse-base.c
+++ b/drivers/input/mouse/psmouse-base.c
@@ -124,7 +124,7 @@ struct psmouse_protocol {
124 * relevant events to the input module once full packet has arrived. 124 * relevant events to the input module once full packet has arrived.
125 */ 125 */
126 126
127static psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse, struct pt_regs *regs) 127static psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse)
128{ 128{
129 struct input_dev *dev = psmouse->dev; 129 struct input_dev *dev = psmouse->dev;
130 unsigned char *packet = psmouse->packet; 130 unsigned char *packet = psmouse->packet;
@@ -136,8 +136,6 @@ static psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse, struct pt_reg
136 * Full packet accumulated, process it 136 * Full packet accumulated, process it
137 */ 137 */
138 138
139 input_regs(dev, regs);
140
141/* 139/*
142 * Scroll wheel on IntelliMice, scroll buttons on NetMice 140 * Scroll wheel on IntelliMice, scroll buttons on NetMice
143 */ 141 */
@@ -231,9 +229,9 @@ static void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_st
231 * by calling corresponding protocol handler. 229 * by calling corresponding protocol handler.
232 */ 230 */
233 231
234static int psmouse_handle_byte(struct psmouse *psmouse, struct pt_regs *regs) 232static int psmouse_handle_byte(struct psmouse *psmouse)
235{ 233{
236 psmouse_ret_t rc = psmouse->protocol_handler(psmouse, regs); 234 psmouse_ret_t rc = psmouse->protocol_handler(psmouse);
237 235
238 switch (rc) { 236 switch (rc) {
239 case PSMOUSE_BAD_DATA: 237 case PSMOUSE_BAD_DATA:
@@ -271,7 +269,7 @@ static int psmouse_handle_byte(struct psmouse *psmouse, struct pt_regs *regs)
271 */ 269 */
272 270
273static irqreturn_t psmouse_interrupt(struct serio *serio, 271static irqreturn_t psmouse_interrupt(struct serio *serio,
274 unsigned char data, unsigned int flags, struct pt_regs *regs) 272 unsigned char data, unsigned int flags)
275{ 273{
276 struct psmouse *psmouse = serio_get_drvdata(serio); 274 struct psmouse *psmouse = serio_get_drvdata(serio);
277 275
@@ -327,7 +325,7 @@ static irqreturn_t psmouse_interrupt(struct serio *serio,
327 * Not a new device, try processing first byte normally 325 * Not a new device, try processing first byte normally
328 */ 326 */
329 psmouse->pktcnt = 1; 327 psmouse->pktcnt = 1;
330 if (psmouse_handle_byte(psmouse, regs)) 328 if (psmouse_handle_byte(psmouse))
331 goto out; 329 goto out;
332 330
333 psmouse->packet[psmouse->pktcnt++] = data; 331 psmouse->packet[psmouse->pktcnt++] = data;
@@ -346,7 +344,7 @@ static irqreturn_t psmouse_interrupt(struct serio *serio,
346 } 344 }
347 345
348 psmouse->last = jiffies; 346 psmouse->last = jiffies;
349 psmouse_handle_byte(psmouse, regs); 347 psmouse_handle_byte(psmouse);
350 348
351 out: 349 out:
352 return IRQ_HANDLED; 350 return IRQ_HANDLED;
@@ -940,7 +938,7 @@ static void psmouse_resync(void *p)
940 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); 938 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
941 for (i = 0; i < psmouse->pktsize; i++) { 939 for (i = 0; i < psmouse->pktsize; i++) {
942 psmouse->pktcnt++; 940 psmouse->pktcnt++;
943 rc = psmouse->protocol_handler(psmouse, NULL); 941 rc = psmouse->protocol_handler(psmouse);
944 if (rc != PSMOUSE_GOOD_DATA) 942 if (rc != PSMOUSE_GOOD_DATA)
945 break; 943 break;
946 } 944 }
diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
index 4d9107fba6a1..1b74cae8a556 100644
--- a/drivers/input/mouse/psmouse.h
+++ b/drivers/input/mouse/psmouse.h
@@ -62,7 +62,7 @@ struct psmouse {
62 unsigned int resync_time; 62 unsigned int resync_time;
63 unsigned int smartscroll; /* Logitech only */ 63 unsigned int smartscroll; /* Logitech only */
64 64
65 psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse, struct pt_regs *regs); 65 psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse);
66 void (*set_rate)(struct psmouse *psmouse, unsigned int rate); 66 void (*set_rate)(struct psmouse *psmouse, unsigned int rate);
67 void (*set_resolution)(struct psmouse *psmouse, unsigned int resolution); 67 void (*set_resolution)(struct psmouse *psmouse, unsigned int resolution);
68 68
diff --git a/drivers/input/mouse/rpcmouse.c b/drivers/input/mouse/rpcmouse.c
index 872b30bf7aad..ea0468569610 100644
--- a/drivers/input/mouse/rpcmouse.c
+++ b/drivers/input/mouse/rpcmouse.c
@@ -36,7 +36,7 @@ MODULE_LICENSE("GPL");
36static short rpcmouse_lastx, rpcmouse_lasty; 36static short rpcmouse_lastx, rpcmouse_lasty;
37static struct input_dev *rpcmouse_dev; 37static struct input_dev *rpcmouse_dev;
38 38
39static irqreturn_t rpcmouse_irq(int irq, void *dev_id, struct pt_regs *regs) 39static irqreturn_t rpcmouse_irq(int irq, void *dev_id)
40{ 40{
41 struct input_dev *dev = dev_id; 41 struct input_dev *dev = dev_id;
42 short x, y, dx, dy, b; 42 short x, y, dx, dy, b;
@@ -51,8 +51,6 @@ static irqreturn_t rpcmouse_irq(int irq, void *dev_id, struct pt_regs *regs)
51 rpcmouse_lastx = x; 51 rpcmouse_lastx = x;
52 rpcmouse_lasty = y; 52 rpcmouse_lasty = y;
53 53
54 input_regs(dev, regs);
55
56 input_report_rel(dev, REL_X, dx); 54 input_report_rel(dev, REL_X, dx);
57 input_report_rel(dev, REL_Y, -dy); 55 input_report_rel(dev, REL_Y, -dy);
58 56
diff --git a/drivers/input/mouse/sermouse.c b/drivers/input/mouse/sermouse.c
index 680b32353884..2a272c5daf08 100644
--- a/drivers/input/mouse/sermouse.c
+++ b/drivers/input/mouse/sermouse.c
@@ -61,13 +61,11 @@ struct sermouse {
61 * second, which is as good as a PS/2 or USB mouse. 61 * second, which is as good as a PS/2 or USB mouse.
62 */ 62 */
63 63
64static void sermouse_process_msc(struct sermouse *sermouse, signed char data, struct pt_regs *regs) 64static void sermouse_process_msc(struct sermouse *sermouse, signed char data)
65{ 65{
66 struct input_dev *dev = sermouse->dev; 66 struct input_dev *dev = sermouse->dev;
67 signed char *buf = sermouse->buf; 67 signed char *buf = sermouse->buf;
68 68
69 input_regs(dev, regs);
70
71 switch (sermouse->count) { 69 switch (sermouse->count) {
72 70
73 case 0: 71 case 0:
@@ -104,15 +102,13 @@ static void sermouse_process_msc(struct sermouse *sermouse, signed char data, st
104 * standard 3-byte packets and 1200 bps. 102 * standard 3-byte packets and 1200 bps.
105 */ 103 */
106 104
107static void sermouse_process_ms(struct sermouse *sermouse, signed char data, struct pt_regs *regs) 105static void sermouse_process_ms(struct sermouse *sermouse, signed char data)
108{ 106{
109 struct input_dev *dev = sermouse->dev; 107 struct input_dev *dev = sermouse->dev;
110 signed char *buf = sermouse->buf; 108 signed char *buf = sermouse->buf;
111 109
112 if (data & 0x40) sermouse->count = 0; 110 if (data & 0x40) sermouse->count = 0;
113 111
114 input_regs(dev, regs);
115
116 switch (sermouse->count) { 112 switch (sermouse->count) {
117 113
118 case 0: 114 case 0:
@@ -206,7 +202,7 @@ static void sermouse_process_ms(struct sermouse *sermouse, signed char data, str
206 */ 202 */
207 203
208static irqreturn_t sermouse_interrupt(struct serio *serio, 204static irqreturn_t sermouse_interrupt(struct serio *serio,
209 unsigned char data, unsigned int flags, struct pt_regs *regs) 205 unsigned char data, unsigned int flags)
210{ 206{
211 struct sermouse *sermouse = serio_get_drvdata(serio); 207 struct sermouse *sermouse = serio_get_drvdata(serio);
212 208
@@ -214,9 +210,9 @@ static irqreturn_t sermouse_interrupt(struct serio *serio,
214 sermouse->last = jiffies; 210 sermouse->last = jiffies;
215 211
216 if (sermouse->type > SERIO_SUN) 212 if (sermouse->type > SERIO_SUN)
217 sermouse_process_ms(sermouse, data, regs); 213 sermouse_process_ms(sermouse, data);
218 else 214 else
219 sermouse_process_msc(sermouse, data, regs); 215 sermouse_process_msc(sermouse, data);
220 return IRQ_HANDLED; 216 return IRQ_HANDLED;
221} 217}
222 218
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
index 392108c436ba..49ac696d6cff 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
@@ -216,13 +216,13 @@ static void synaptics_pass_pt_packet(struct serio *ptport, unsigned char *packet
216 struct psmouse *child = serio_get_drvdata(ptport); 216 struct psmouse *child = serio_get_drvdata(ptport);
217 217
218 if (child && child->state == PSMOUSE_ACTIVATED) { 218 if (child && child->state == PSMOUSE_ACTIVATED) {
219 serio_interrupt(ptport, packet[1], 0, NULL); 219 serio_interrupt(ptport, packet[1], 0);
220 serio_interrupt(ptport, packet[4], 0, NULL); 220 serio_interrupt(ptport, packet[4], 0);
221 serio_interrupt(ptport, packet[5], 0, NULL); 221 serio_interrupt(ptport, packet[5], 0);
222 if (child->pktsize == 4) 222 if (child->pktsize == 4)
223 serio_interrupt(ptport, packet[2], 0, NULL); 223 serio_interrupt(ptport, packet[2], 0);
224 } else 224 } else
225 serio_interrupt(ptport, packet[1], 0, NULL); 225 serio_interrupt(ptport, packet[1], 0);
226} 226}
227 227
228static void synaptics_pt_activate(struct psmouse *psmouse) 228static void synaptics_pt_activate(struct psmouse *psmouse)
@@ -469,13 +469,10 @@ static unsigned char synaptics_detect_pkt_type(struct psmouse *psmouse)
469 return SYN_NEWABS_STRICT; 469 return SYN_NEWABS_STRICT;
470} 470}
471 471
472static psmouse_ret_t synaptics_process_byte(struct psmouse *psmouse, struct pt_regs *regs) 472static psmouse_ret_t synaptics_process_byte(struct psmouse *psmouse)
473{ 473{
474 struct input_dev *dev = psmouse->dev;
475 struct synaptics_data *priv = psmouse->private; 474 struct synaptics_data *priv = psmouse->private;
476 475
477 input_regs(dev, regs);
478
479 if (psmouse->pktcnt >= 6) { /* Full packet received */ 476 if (psmouse->pktcnt >= 6) { /* Full packet received */
480 if (unlikely(priv->pkt_type == SYN_NEWABS)) 477 if (unlikely(priv->pkt_type == SYN_NEWABS))
481 priv->pkt_type = synaptics_detect_pkt_type(psmouse); 478 priv->pkt_type = synaptics_detect_pkt_type(psmouse);
diff --git a/drivers/input/mouse/vsxxxaa.c b/drivers/input/mouse/vsxxxaa.c
index 47edcfd022ba..ffdb50eee93d 100644
--- a/drivers/input/mouse/vsxxxaa.c
+++ b/drivers/input/mouse/vsxxxaa.c
@@ -211,7 +211,7 @@ vsxxxaa_smells_like_packet (struct vsxxxaa *mouse, unsigned char type, size_t le
211} 211}
212 212
213static void 213static void
214vsxxxaa_handle_REL_packet (struct vsxxxaa *mouse, struct pt_regs *regs) 214vsxxxaa_handle_REL_packet (struct vsxxxaa *mouse)
215{ 215{
216 struct input_dev *dev = mouse->dev; 216 struct input_dev *dev = mouse->dev;
217 unsigned char *buf = mouse->buf; 217 unsigned char *buf = mouse->buf;
@@ -258,7 +258,6 @@ vsxxxaa_handle_REL_packet (struct vsxxxaa *mouse, struct pt_regs *regs)
258 /* 258 /*
259 * Report what we've found so far... 259 * Report what we've found so far...
260 */ 260 */
261 input_regs (dev, regs);
262 input_report_key (dev, BTN_LEFT, left); 261 input_report_key (dev, BTN_LEFT, left);
263 input_report_key (dev, BTN_MIDDLE, middle); 262 input_report_key (dev, BTN_MIDDLE, middle);
264 input_report_key (dev, BTN_RIGHT, right); 263 input_report_key (dev, BTN_RIGHT, right);
@@ -269,7 +268,7 @@ vsxxxaa_handle_REL_packet (struct vsxxxaa *mouse, struct pt_regs *regs)
269} 268}
270 269
271static void 270static void
272vsxxxaa_handle_ABS_packet (struct vsxxxaa *mouse, struct pt_regs *regs) 271vsxxxaa_handle_ABS_packet (struct vsxxxaa *mouse)
273{ 272{
274 struct input_dev *dev = mouse->dev; 273 struct input_dev *dev = mouse->dev;
275 unsigned char *buf = mouse->buf; 274 unsigned char *buf = mouse->buf;
@@ -312,7 +311,6 @@ vsxxxaa_handle_ABS_packet (struct vsxxxaa *mouse, struct pt_regs *regs)
312 /* 311 /*
313 * Report what we've found so far... 312 * Report what we've found so far...
314 */ 313 */
315 input_regs (dev, regs);
316 input_report_key (dev, BTN_LEFT, left); 314 input_report_key (dev, BTN_LEFT, left);
317 input_report_key (dev, BTN_MIDDLE, middle); 315 input_report_key (dev, BTN_MIDDLE, middle);
318 input_report_key (dev, BTN_RIGHT, right); 316 input_report_key (dev, BTN_RIGHT, right);
@@ -323,7 +321,7 @@ vsxxxaa_handle_ABS_packet (struct vsxxxaa *mouse, struct pt_regs *regs)
323} 321}
324 322
325static void 323static void
326vsxxxaa_handle_POR_packet (struct vsxxxaa *mouse, struct pt_regs *regs) 324vsxxxaa_handle_POR_packet (struct vsxxxaa *mouse)
327{ 325{
328 struct input_dev *dev = mouse->dev; 326 struct input_dev *dev = mouse->dev;
329 unsigned char *buf = mouse->buf; 327 unsigned char *buf = mouse->buf;
@@ -367,7 +365,6 @@ vsxxxaa_handle_POR_packet (struct vsxxxaa *mouse, struct pt_regs *regs)
367 365
368 if (error <= 0x1f) { 366 if (error <= 0x1f) {
369 /* No (serious) error. Report buttons */ 367 /* No (serious) error. Report buttons */
370 input_regs (dev, regs);
371 input_report_key (dev, BTN_LEFT, left); 368 input_report_key (dev, BTN_LEFT, left);
372 input_report_key (dev, BTN_MIDDLE, middle); 369 input_report_key (dev, BTN_MIDDLE, middle);
373 input_report_key (dev, BTN_RIGHT, right); 370 input_report_key (dev, BTN_RIGHT, right);
@@ -395,7 +392,7 @@ vsxxxaa_handle_POR_packet (struct vsxxxaa *mouse, struct pt_regs *regs)
395} 392}
396 393
397static void 394static void
398vsxxxaa_parse_buffer (struct vsxxxaa *mouse, struct pt_regs *regs) 395vsxxxaa_parse_buffer (struct vsxxxaa *mouse)
399{ 396{
400 unsigned char *buf = mouse->buf; 397 unsigned char *buf = mouse->buf;
401 int stray_bytes; 398 int stray_bytes;
@@ -432,7 +429,7 @@ vsxxxaa_parse_buffer (struct vsxxxaa *mouse, struct pt_regs *regs)
432 continue; 429 continue;
433 } 430 }
434 431
435 vsxxxaa_handle_REL_packet (mouse, regs); 432 vsxxxaa_handle_REL_packet (mouse);
436 continue; /* More to parse? */ 433 continue; /* More to parse? */
437 } 434 }
438 435
@@ -446,7 +443,7 @@ vsxxxaa_parse_buffer (struct vsxxxaa *mouse, struct pt_regs *regs)
446 continue; 443 continue;
447 } 444 }
448 445
449 vsxxxaa_handle_ABS_packet (mouse, regs); 446 vsxxxaa_handle_ABS_packet (mouse);
450 continue; /* More to parse? */ 447 continue; /* More to parse? */
451 } 448 }
452 449
@@ -460,7 +457,7 @@ vsxxxaa_parse_buffer (struct vsxxxaa *mouse, struct pt_regs *regs)
460 continue; 457 continue;
461 } 458 }
462 459
463 vsxxxaa_handle_POR_packet (mouse, regs); 460 vsxxxaa_handle_POR_packet (mouse);
464 continue; /* More to parse? */ 461 continue; /* More to parse? */
465 } 462 }
466 463
@@ -469,13 +466,12 @@ vsxxxaa_parse_buffer (struct vsxxxaa *mouse, struct pt_regs *regs)
469} 466}
470 467
471static irqreturn_t 468static irqreturn_t
472vsxxxaa_interrupt (struct serio *serio, unsigned char data, unsigned int flags, 469vsxxxaa_interrupt (struct serio *serio, unsigned char data, unsigned int flags)
473 struct pt_regs *regs)
474{ 470{
475 struct vsxxxaa *mouse = serio_get_drvdata (serio); 471 struct vsxxxaa *mouse = serio_get_drvdata (serio);
476 472
477 vsxxxaa_queue_byte (mouse, data); 473 vsxxxaa_queue_byte (mouse, data);
478 vsxxxaa_parse_buffer (mouse, regs); 474 vsxxxaa_parse_buffer (mouse);
479 475
480 return IRQ_HANDLED; 476 return IRQ_HANDLED;
481} 477}