aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input
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
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')
-rw-r--r--drivers/input/joystick/amijoy.c4
-rw-r--r--drivers/input/joystick/iforce/iforce-packets.c6
-rw-r--r--drivers/input/joystick/iforce/iforce-serio.c4
-rw-r--r--drivers/input/joystick/iforce/iforce-usb.c8
-rw-r--r--drivers/input/joystick/iforce/iforce.h2
-rw-r--r--drivers/input/joystick/magellan.c8
-rw-r--r--drivers/input/joystick/spaceball.c8
-rw-r--r--drivers/input/joystick/spaceorb.c8
-rw-r--r--drivers/input/joystick/stinger.c8
-rw-r--r--drivers/input/joystick/twidjoy.c8
-rw-r--r--drivers/input/joystick/warrior.c10
-rw-r--r--drivers/input/keyboard/amikbd.c4
-rw-r--r--drivers/input/keyboard/atkbd.c4
-rw-r--r--drivers/input/keyboard/corgikbd.c9
-rw-r--r--drivers/input/keyboard/hil_kbd.c2
-rw-r--r--drivers/input/keyboard/hilkbd.c2
-rw-r--r--drivers/input/keyboard/lkkbd.c5
-rw-r--r--drivers/input/keyboard/locomokbd.c8
-rw-r--r--drivers/input/keyboard/newtonkbd.c3
-rw-r--r--drivers/input/keyboard/omap-keypad.c3
-rw-r--r--drivers/input/keyboard/spitzkbd.c10
-rw-r--r--drivers/input/keyboard/stowaway.c3
-rw-r--r--drivers/input/keyboard/sunkbd.c3
-rw-r--r--drivers/input/keyboard/xtkbd.c3
-rw-r--r--drivers/input/misc/ixp4xx-beeper.c2
-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
-rw-r--r--drivers/input/serio/ambakmi.c4
-rw-r--r--drivers/input/serio/ct82c710.c4
-rw-r--r--drivers/input/serio/gscps2.c6
-rw-r--r--drivers/input/serio/hp_sdc.c4
-rw-r--r--drivers/input/serio/i8042.c12
-rw-r--r--drivers/input/serio/maceps2.c5
-rw-r--r--drivers/input/serio/parkbd.c4
-rw-r--r--drivers/input/serio/pcips2.c4
-rw-r--r--drivers/input/serio/q40kbd.c4
-rw-r--r--drivers/input/serio/rpckbd.c6
-rw-r--r--drivers/input/serio/sa1111ps2.c6
-rw-r--r--drivers/input/serio/serio.c4
-rw-r--r--drivers/input/serio/serio_raw.c2
-rw-r--r--drivers/input/serio/serport.c5
-rw-r--r--drivers/input/touchscreen/ads7846.c2
-rw-r--r--drivers/input/touchscreen/corgi_ts.c13
-rw-r--r--drivers/input/touchscreen/elo.c17
-rw-r--r--drivers/input/touchscreen/gunze.c7
-rw-r--r--drivers/input/touchscreen/h3600_ts_input.c14
-rw-r--r--drivers/input/touchscreen/hp680_ts_input.c2
-rw-r--r--drivers/input/touchscreen/mk712.c3
-rw-r--r--drivers/input/touchscreen/mtouch.c11
-rw-r--r--drivers/input/touchscreen/penmount.c3
-rw-r--r--drivers/input/touchscreen/touchright.c3
-rw-r--r--drivers/input/touchscreen/touchwin.c3
64 files changed, 157 insertions, 239 deletions
diff --git a/drivers/input/joystick/amijoy.c b/drivers/input/joystick/amijoy.c
index 7249d324297b..650acf3a30b7 100644
--- a/drivers/input/joystick/amijoy.c
+++ b/drivers/input/joystick/amijoy.c
@@ -57,7 +57,7 @@ static DEFINE_MUTEX(amijoy_mutex);
57static struct input_dev *amijoy_dev[2]; 57static struct input_dev *amijoy_dev[2];
58static char *amijoy_phys[2] = { "amijoy/input0", "amijoy/input1" }; 58static char *amijoy_phys[2] = { "amijoy/input0", "amijoy/input1" };
59 59
60static irqreturn_t amijoy_interrupt(int irq, void *dummy, struct pt_regs *fp) 60static irqreturn_t amijoy_interrupt(int irq, void *dummy)
61{ 61{
62 int i, data = 0, button = 0; 62 int i, data = 0, button = 0;
63 63
@@ -69,8 +69,6 @@ static irqreturn_t amijoy_interrupt(int irq, void *dummy, struct pt_regs *fp)
69 case 1: data = ~amiga_custom.joy1dat; button = (~ciaa.pra >> 7) & 1; break; 69 case 1: data = ~amiga_custom.joy1dat; button = (~ciaa.pra >> 7) & 1; break;
70 } 70 }
71 71
72 input_regs(amijoy_dev[i], fp);
73
74 input_report_key(amijoy_dev[i], BTN_TRIGGER, button); 72 input_report_key(amijoy_dev[i], BTN_TRIGGER, button);
75 73
76 input_report_abs(amijoy_dev[i], ABS_X, ((data >> 1) & 1) - ((data >> 9) & 1)); 74 input_report_abs(amijoy_dev[i], ABS_X, ((data >> 1) & 1) - ((data >> 9) & 1));
diff --git a/drivers/input/joystick/iforce/iforce-packets.c b/drivers/input/joystick/iforce/iforce-packets.c
index 8632d47a7fbe..808f05932a6f 100644
--- a/drivers/input/joystick/iforce/iforce-packets.c
+++ b/drivers/input/joystick/iforce/iforce-packets.c
@@ -155,7 +155,7 @@ static int mark_core_as_ready(struct iforce *iforce, unsigned short addr)
155 return -1; 155 return -1;
156} 156}
157 157
158void iforce_process_packet(struct iforce *iforce, u16 cmd, unsigned char *data, struct pt_regs *regs) 158void iforce_process_packet(struct iforce *iforce, u16 cmd, unsigned char *data)
159{ 159{
160 struct input_dev *dev = iforce->dev; 160 struct input_dev *dev = iforce->dev;
161 int i; 161 int i;
@@ -183,9 +183,6 @@ void iforce_process_packet(struct iforce *iforce, u16 cmd, unsigned char *data,
183 183
184 case 0x01: /* joystick position data */ 184 case 0x01: /* joystick position data */
185 case 0x03: /* wheel position data */ 185 case 0x03: /* wheel position data */
186
187 input_regs(dev, regs);
188
189 if (HI(cmd) == 1) { 186 if (HI(cmd) == 1) {
190 input_report_abs(dev, ABS_X, (__s16) (((__s16)data[1] << 8) | data[0])); 187 input_report_abs(dev, ABS_X, (__s16) (((__s16)data[1] << 8) | data[0]));
191 input_report_abs(dev, ABS_Y, (__s16) (((__s16)data[3] << 8) | data[2])); 188 input_report_abs(dev, ABS_Y, (__s16) (((__s16)data[3] << 8) | data[2]));
@@ -224,7 +221,6 @@ void iforce_process_packet(struct iforce *iforce, u16 cmd, unsigned char *data,
224 break; 221 break;
225 222
226 case 0x02: /* status report */ 223 case 0x02: /* status report */
227 input_regs(dev, regs);
228 input_report_key(dev, BTN_DEAD, data[0] & 0x02); 224 input_report_key(dev, BTN_DEAD, data[0] & 0x02);
229 input_sync(dev); 225 input_sync(dev);
230 226
diff --git a/drivers/input/joystick/iforce/iforce-serio.c b/drivers/input/joystick/iforce/iforce-serio.c
index 64a78c515484..ca08f45c2040 100644
--- a/drivers/input/joystick/iforce/iforce-serio.c
+++ b/drivers/input/joystick/iforce/iforce-serio.c
@@ -81,7 +81,7 @@ static void iforce_serio_write_wakeup(struct serio *serio)
81} 81}
82 82
83static irqreturn_t iforce_serio_irq(struct serio *serio, 83static irqreturn_t iforce_serio_irq(struct serio *serio,
84 unsigned char data, unsigned int flags, struct pt_regs *regs) 84 unsigned char data, unsigned int flags)
85{ 85{
86 struct iforce *iforce = serio_get_drvdata(serio); 86 struct iforce *iforce = serio_get_drvdata(serio);
87 87
@@ -115,7 +115,7 @@ static irqreturn_t iforce_serio_irq(struct serio *serio,
115 } 115 }
116 116
117 if (iforce->idx == iforce->len) { 117 if (iforce->idx == iforce->len) {
118 iforce_process_packet(iforce, (iforce->id << 8) | iforce->idx, iforce->data, regs); 118 iforce_process_packet(iforce, (iforce->id << 8) | iforce->idx, iforce->data);
119 iforce->pkt = 0; 119 iforce->pkt = 0;
120 iforce->id = 0; 120 iforce->id = 0;
121 iforce->len = 0; 121 iforce->len = 0;
diff --git a/drivers/input/joystick/iforce/iforce-usb.c b/drivers/input/joystick/iforce/iforce-usb.c
index fe79d158456d..105112fb7b57 100644
--- a/drivers/input/joystick/iforce/iforce-usb.c
+++ b/drivers/input/joystick/iforce/iforce-usb.c
@@ -74,7 +74,7 @@ void iforce_usb_xmit(struct iforce *iforce)
74 spin_unlock_irqrestore(&iforce->xmit_lock, flags); 74 spin_unlock_irqrestore(&iforce->xmit_lock, flags);
75} 75}
76 76
77static void iforce_usb_irq(struct urb *urb, struct pt_regs *regs) 77static void iforce_usb_irq(struct urb *urb)
78{ 78{
79 struct iforce *iforce = urb->context; 79 struct iforce *iforce = urb->context;
80 int status; 80 int status;
@@ -96,7 +96,7 @@ static void iforce_usb_irq(struct urb *urb, struct pt_regs *regs)
96 } 96 }
97 97
98 iforce_process_packet(iforce, 98 iforce_process_packet(iforce,
99 (iforce->data[0] << 8) | (urb->actual_length - 1), iforce->data + 1, regs); 99 (iforce->data[0] << 8) | (urb->actual_length - 1), iforce->data + 1);
100 100
101exit: 101exit:
102 status = usb_submit_urb (urb, GFP_ATOMIC); 102 status = usb_submit_urb (urb, GFP_ATOMIC);
@@ -105,7 +105,7 @@ exit:
105 __FUNCTION__, status); 105 __FUNCTION__, status);
106} 106}
107 107
108static void iforce_usb_out(struct urb *urb, struct pt_regs *regs) 108static void iforce_usb_out(struct urb *urb)
109{ 109{
110 struct iforce *iforce = urb->context; 110 struct iforce *iforce = urb->context;
111 111
@@ -119,7 +119,7 @@ static void iforce_usb_out(struct urb *urb, struct pt_regs *regs)
119 wake_up(&iforce->wait); 119 wake_up(&iforce->wait);
120} 120}
121 121
122static void iforce_usb_ctrl(struct urb *urb, struct pt_regs *regs) 122static void iforce_usb_ctrl(struct urb *urb)
123{ 123{
124 struct iforce *iforce = urb->context; 124 struct iforce *iforce = urb->context;
125 if (urb->status) return; 125 if (urb->status) return;
diff --git a/drivers/input/joystick/iforce/iforce.h b/drivers/input/joystick/iforce/iforce.h
index 947df2739843..ffaeaefa1a42 100644
--- a/drivers/input/joystick/iforce/iforce.h
+++ b/drivers/input/joystick/iforce/iforce.h
@@ -160,7 +160,7 @@ void iforce_delete_device(struct iforce *iforce);
160 160
161/* iforce-packets.c */ 161/* iforce-packets.c */
162int iforce_control_playback(struct iforce*, u16 id, unsigned int); 162int iforce_control_playback(struct iforce*, u16 id, unsigned int);
163void iforce_process_packet(struct iforce *iforce, u16 cmd, unsigned char *data, struct pt_regs *regs); 163void iforce_process_packet(struct iforce *iforce, u16 cmd, unsigned char *data);
164int iforce_send_packet(struct iforce *iforce, u16 cmd, unsigned char* data); 164int iforce_send_packet(struct iforce *iforce, u16 cmd, unsigned char* data);
165void iforce_dump_packet(char *msg, u16 cmd, unsigned char *data) ; 165void iforce_dump_packet(char *msg, u16 cmd, unsigned char *data) ;
166int iforce_get_id_packet(struct iforce *iforce, char *packet); 166int iforce_get_id_packet(struct iforce *iforce, char *packet);
diff --git a/drivers/input/joystick/magellan.c b/drivers/input/joystick/magellan.c
index 168b1061a03b..e3d19444ba2e 100644
--- a/drivers/input/joystick/magellan.c
+++ b/drivers/input/joystick/magellan.c
@@ -82,7 +82,7 @@ static int magellan_crunch_nibbles(unsigned char *data, int count)
82 return 0; 82 return 0;
83} 83}
84 84
85static void magellan_process_packet(struct magellan* magellan, struct pt_regs *regs) 85static void magellan_process_packet(struct magellan* magellan)
86{ 86{
87 struct input_dev *dev = magellan->dev; 87 struct input_dev *dev = magellan->dev;
88 unsigned char *data = magellan->data; 88 unsigned char *data = magellan->data;
@@ -90,8 +90,6 @@ static void magellan_process_packet(struct magellan* magellan, struct pt_regs *r
90 90
91 if (!magellan->idx) return; 91 if (!magellan->idx) return;
92 92
93 input_regs(dev, regs);
94
95 switch (magellan->data[0]) { 93 switch (magellan->data[0]) {
96 94
97 case 'd': /* Axis data */ 95 case 'd': /* Axis data */
@@ -115,12 +113,12 @@ static void magellan_process_packet(struct magellan* magellan, struct pt_regs *r
115} 113}
116 114
117static irqreturn_t magellan_interrupt(struct serio *serio, 115static irqreturn_t magellan_interrupt(struct serio *serio,
118 unsigned char data, unsigned int flags, struct pt_regs *regs) 116 unsigned char data, unsigned int flags)
119{ 117{
120 struct magellan* magellan = serio_get_drvdata(serio); 118 struct magellan* magellan = serio_get_drvdata(serio);
121 119
122 if (data == '\r') { 120 if (data == '\r') {
123 magellan_process_packet(magellan, regs); 121 magellan_process_packet(magellan);
124 magellan->idx = 0; 122 magellan->idx = 0;
125 } else { 123 } else {
126 if (magellan->idx < MAGELLAN_MAX_LENGTH) 124 if (magellan->idx < MAGELLAN_MAX_LENGTH)
diff --git a/drivers/input/joystick/spaceball.c b/drivers/input/joystick/spaceball.c
index 7a19ee052972..2a9808cf826f 100644
--- a/drivers/input/joystick/spaceball.c
+++ b/drivers/input/joystick/spaceball.c
@@ -82,7 +82,7 @@ struct spaceball {
82 * SpaceBall. 82 * SpaceBall.
83 */ 83 */
84 84
85static void spaceball_process_packet(struct spaceball* spaceball, struct pt_regs *regs) 85static void spaceball_process_packet(struct spaceball* spaceball)
86{ 86{
87 struct input_dev *dev = spaceball->dev; 87 struct input_dev *dev = spaceball->dev;
88 unsigned char *data = spaceball->data; 88 unsigned char *data = spaceball->data;
@@ -90,8 +90,6 @@ static void spaceball_process_packet(struct spaceball* spaceball, struct pt_regs
90 90
91 if (spaceball->idx < 2) return; 91 if (spaceball->idx < 2) return;
92 92
93 input_regs(dev, regs);
94
95 switch (spaceball->data[0]) { 93 switch (spaceball->data[0]) {
96 94
97 case 'D': /* Ball data */ 95 case 'D': /* Ball data */
@@ -151,13 +149,13 @@ static void spaceball_process_packet(struct spaceball* spaceball, struct pt_regs
151 */ 149 */
152 150
153static irqreturn_t spaceball_interrupt(struct serio *serio, 151static irqreturn_t spaceball_interrupt(struct serio *serio,
154 unsigned char data, unsigned int flags, struct pt_regs *regs) 152 unsigned char data, unsigned int flags)
155{ 153{
156 struct spaceball *spaceball = serio_get_drvdata(serio); 154 struct spaceball *spaceball = serio_get_drvdata(serio);
157 155
158 switch (data) { 156 switch (data) {
159 case 0xd: 157 case 0xd:
160 spaceball_process_packet(spaceball, regs); 158 spaceball_process_packet(spaceball);
161 spaceball->idx = 0; 159 spaceball->idx = 0;
162 spaceball->escape = 0; 160 spaceball->escape = 0;
163 break; 161 break;
diff --git a/drivers/input/joystick/spaceorb.c b/drivers/input/joystick/spaceorb.c
index 3e2782e79834..c4db0247c5fb 100644
--- a/drivers/input/joystick/spaceorb.c
+++ b/drivers/input/joystick/spaceorb.c
@@ -74,7 +74,7 @@ static unsigned char *spaceorb_errors[] = { "EEPROM storing 0 failed", "Receive
74 * SpaceOrb. 74 * SpaceOrb.
75 */ 75 */
76 76
77static void spaceorb_process_packet(struct spaceorb *spaceorb, struct pt_regs *regs) 77static void spaceorb_process_packet(struct spaceorb *spaceorb)
78{ 78{
79 struct input_dev *dev = spaceorb->dev; 79 struct input_dev *dev = spaceorb->dev;
80 unsigned char *data = spaceorb->data; 80 unsigned char *data = spaceorb->data;
@@ -86,8 +86,6 @@ static void spaceorb_process_packet(struct spaceorb *spaceorb, struct pt_regs *r
86 for (i = 0; i < spaceorb->idx; i++) c ^= data[i]; 86 for (i = 0; i < spaceorb->idx; i++) c ^= data[i];
87 if (c) return; 87 if (c) return;
88 88
89 input_regs(dev, regs);
90
91 switch (data[0]) { 89 switch (data[0]) {
92 90
93 case 'R': /* Reset packet */ 91 case 'R': /* Reset packet */
@@ -131,12 +129,12 @@ static void spaceorb_process_packet(struct spaceorb *spaceorb, struct pt_regs *r
131} 129}
132 130
133static irqreturn_t spaceorb_interrupt(struct serio *serio, 131static irqreturn_t spaceorb_interrupt(struct serio *serio,
134 unsigned char data, unsigned int flags, struct pt_regs *regs) 132 unsigned char data, unsigned int flags)
135{ 133{
136 struct spaceorb* spaceorb = serio_get_drvdata(serio); 134 struct spaceorb* spaceorb = serio_get_drvdata(serio);
137 135
138 if (~data & 0x80) { 136 if (~data & 0x80) {
139 if (spaceorb->idx) spaceorb_process_packet(spaceorb, regs); 137 if (spaceorb->idx) spaceorb_process_packet(spaceorb);
140 spaceorb->idx = 0; 138 spaceorb->idx = 0;
141 } 139 }
142 if (spaceorb->idx < SPACEORB_MAX_LENGTH) 140 if (spaceorb->idx < SPACEORB_MAX_LENGTH)
diff --git a/drivers/input/joystick/stinger.c b/drivers/input/joystick/stinger.c
index 011ec4858e15..1ffb03223311 100644
--- a/drivers/input/joystick/stinger.c
+++ b/drivers/input/joystick/stinger.c
@@ -64,15 +64,13 @@ struct stinger {
64 * Stinger. It updates the data accordingly. 64 * Stinger. It updates the data accordingly.
65 */ 65 */
66 66
67static void stinger_process_packet(struct stinger *stinger, struct pt_regs *regs) 67static void stinger_process_packet(struct stinger *stinger)
68{ 68{
69 struct input_dev *dev = stinger->dev; 69 struct input_dev *dev = stinger->dev;
70 unsigned char *data = stinger->data; 70 unsigned char *data = stinger->data;
71 71
72 if (!stinger->idx) return; 72 if (!stinger->idx) return;
73 73
74 input_regs(dev, regs);
75
76 input_report_key(dev, BTN_A, ((data[0] & 0x20) >> 5)); 74 input_report_key(dev, BTN_A, ((data[0] & 0x20) >> 5));
77 input_report_key(dev, BTN_B, ((data[0] & 0x10) >> 4)); 75 input_report_key(dev, BTN_B, ((data[0] & 0x10) >> 4));
78 input_report_key(dev, BTN_C, ((data[0] & 0x08) >> 3)); 76 input_report_key(dev, BTN_C, ((data[0] & 0x08) >> 3));
@@ -99,7 +97,7 @@ static void stinger_process_packet(struct stinger *stinger, struct pt_regs *regs
99 */ 97 */
100 98
101static irqreturn_t stinger_interrupt(struct serio *serio, 99static irqreturn_t stinger_interrupt(struct serio *serio,
102 unsigned char data, unsigned int flags, struct pt_regs *regs) 100 unsigned char data, unsigned int flags)
103{ 101{
104 struct stinger *stinger = serio_get_drvdata(serio); 102 struct stinger *stinger = serio_get_drvdata(serio);
105 103
@@ -109,7 +107,7 @@ static irqreturn_t stinger_interrupt(struct serio *serio,
109 stinger->data[stinger->idx++] = data; 107 stinger->data[stinger->idx++] = data;
110 108
111 if (stinger->idx == 4) { 109 if (stinger->idx == 4) {
112 stinger_process_packet(stinger, regs); 110 stinger_process_packet(stinger);
113 stinger->idx = 0; 111 stinger->idx = 0;
114 } 112 }
115 113
diff --git a/drivers/input/joystick/twidjoy.c b/drivers/input/joystick/twidjoy.c
index 076f237d9654..49085df2d631 100644
--- a/drivers/input/joystick/twidjoy.c
+++ b/drivers/input/joystick/twidjoy.c
@@ -104,7 +104,7 @@ struct twidjoy {
104 * Twiddler. It updates the data accordingly. 104 * Twiddler. It updates the data accordingly.
105 */ 105 */
106 106
107static void twidjoy_process_packet(struct twidjoy *twidjoy, struct pt_regs *regs) 107static void twidjoy_process_packet(struct twidjoy *twidjoy)
108{ 108{
109 struct input_dev *dev = twidjoy->dev; 109 struct input_dev *dev = twidjoy->dev;
110 unsigned char *data = twidjoy->data; 110 unsigned char *data = twidjoy->data;
@@ -113,8 +113,6 @@ static void twidjoy_process_packet(struct twidjoy *twidjoy, struct pt_regs *regs
113 113
114 button_bits = ((data[1] & 0x7f) << 7) | (data[0] & 0x7f); 114 button_bits = ((data[1] & 0x7f) << 7) | (data[0] & 0x7f);
115 115
116 input_regs(dev, regs);
117
118 for (bp = twidjoy_buttons; bp->bitmask; bp++) { 116 for (bp = twidjoy_buttons; bp->bitmask; bp++) {
119 int value = (button_bits & (bp->bitmask << bp->bitshift)) >> bp->bitshift; 117 int value = (button_bits & (bp->bitmask << bp->bitshift)) >> bp->bitshift;
120 int i; 118 int i;
@@ -141,7 +139,7 @@ static void twidjoy_process_packet(struct twidjoy *twidjoy, struct pt_regs *regs
141 * packet processing routine. 139 * packet processing routine.
142 */ 140 */
143 141
144static irqreturn_t twidjoy_interrupt(struct serio *serio, unsigned char data, unsigned int flags, struct pt_regs *regs) 142static irqreturn_t twidjoy_interrupt(struct serio *serio, unsigned char data, unsigned int flags)
145{ 143{
146 struct twidjoy *twidjoy = serio_get_drvdata(serio); 144 struct twidjoy *twidjoy = serio_get_drvdata(serio);
147 145
@@ -158,7 +156,7 @@ static irqreturn_t twidjoy_interrupt(struct serio *serio, unsigned char data, un
158 twidjoy->data[twidjoy->idx++] = data; 156 twidjoy->data[twidjoy->idx++] = data;
159 157
160 if (twidjoy->idx == TWIDJOY_MAX_LENGTH) { 158 if (twidjoy->idx == TWIDJOY_MAX_LENGTH) {
161 twidjoy_process_packet(twidjoy, regs); 159 twidjoy_process_packet(twidjoy);
162 twidjoy->idx = 0; 160 twidjoy->idx = 0;
163 } 161 }
164 162
diff --git a/drivers/input/joystick/warrior.c b/drivers/input/joystick/warrior.c
index f9c1a03214eb..35edea1ab955 100644
--- a/drivers/input/joystick/warrior.c
+++ b/drivers/input/joystick/warrior.c
@@ -64,15 +64,13 @@ struct warrior {
64 * Warrior. It updates the data accordingly. 64 * Warrior. It updates the data accordingly.
65 */ 65 */
66 66
67static void warrior_process_packet(struct warrior *warrior, struct pt_regs *regs) 67static void warrior_process_packet(struct warrior *warrior)
68{ 68{
69 struct input_dev *dev = warrior->dev; 69 struct input_dev *dev = warrior->dev;
70 unsigned char *data = warrior->data; 70 unsigned char *data = warrior->data;
71 71
72 if (!warrior->idx) return; 72 if (!warrior->idx) return;
73 73
74 input_regs(dev, regs);
75
76 switch ((data[0] >> 4) & 7) { 74 switch ((data[0] >> 4) & 7) {
77 case 1: /* Button data */ 75 case 1: /* Button data */
78 input_report_key(dev, BTN_TRIGGER, data[3] & 1); 76 input_report_key(dev, BTN_TRIGGER, data[3] & 1);
@@ -101,12 +99,12 @@ static void warrior_process_packet(struct warrior *warrior, struct pt_regs *regs
101 */ 99 */
102 100
103static irqreturn_t warrior_interrupt(struct serio *serio, 101static irqreturn_t warrior_interrupt(struct serio *serio,
104 unsigned char data, unsigned int flags, struct pt_regs *regs) 102 unsigned char data, unsigned int flags)
105{ 103{
106 struct warrior *warrior = serio_get_drvdata(serio); 104 struct warrior *warrior = serio_get_drvdata(serio);
107 105
108 if (data & 0x80) { 106 if (data & 0x80) {
109 if (warrior->idx) warrior_process_packet(warrior, regs); 107 if (warrior->idx) warrior_process_packet(warrior);
110 warrior->idx = 0; 108 warrior->idx = 0;
111 warrior->len = warrior_lengths[(data >> 4) & 7]; 109 warrior->len = warrior_lengths[(data >> 4) & 7];
112 } 110 }
@@ -115,7 +113,7 @@ static irqreturn_t warrior_interrupt(struct serio *serio,
115 warrior->data[warrior->idx++] = data; 113 warrior->data[warrior->idx++] = data;
116 114
117 if (warrior->idx == warrior->len) { 115 if (warrior->idx == warrior->len) {
118 if (warrior->idx) warrior_process_packet(warrior, regs); 116 if (warrior->idx) warrior_process_packet(warrior);
119 warrior->idx = 0; 117 warrior->idx = 0;
120 warrior->len = 0; 118 warrior->len = 0;
121 } 119 }
diff --git a/drivers/input/keyboard/amikbd.c b/drivers/input/keyboard/amikbd.c
index f1f9db9d282c..8abdbd0ee8f9 100644
--- a/drivers/input/keyboard/amikbd.c
+++ b/drivers/input/keyboard/amikbd.c
@@ -158,7 +158,7 @@ static const char *amikbd_messages[8] = {
158 158
159static struct input_dev *amikbd_dev; 159static struct input_dev *amikbd_dev;
160 160
161static irqreturn_t amikbd_interrupt(int irq, void *dummy, struct pt_regs *fp) 161static irqreturn_t amikbd_interrupt(int irq, void *dummy)
162{ 162{
163 unsigned char scancode, down; 163 unsigned char scancode, down;
164 164
@@ -171,8 +171,6 @@ static irqreturn_t amikbd_interrupt(int irq, void *dummy, struct pt_regs *fp)
171 scancode >>= 1; 171 scancode >>= 1;
172 172
173 if (scancode < 0x78) { /* scancodes < 0x78 are keys */ 173 if (scancode < 0x78) { /* scancodes < 0x78 are keys */
174 input_regs(amikbd_dev, fp);
175
176 if (scancode == 98) { /* CapsLock is a toggle switch key on Amiga */ 174 if (scancode == 98) { /* CapsLock is a toggle switch key on Amiga */
177 input_report_key(amikbd_dev, scancode, 1); 175 input_report_key(amikbd_dev, scancode, 1);
178 input_report_key(amikbd_dev, scancode, 0); 176 input_report_key(amikbd_dev, scancode, 0);
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index 40244d4ce0f1..b6ef9eaad1dc 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -318,7 +318,7 @@ static unsigned int atkbd_compat_scancode(struct atkbd *atkbd, unsigned int code
318 */ 318 */
319 319
320static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data, 320static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
321 unsigned int flags, struct pt_regs *regs) 321 unsigned int flags)
322{ 322{
323 struct atkbd *atkbd = serio_get_drvdata(serio); 323 struct atkbd *atkbd = serio_get_drvdata(serio);
324 struct input_dev *dev = atkbd->dev; 324 struct input_dev *dev = atkbd->dev;
@@ -458,7 +458,6 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
458 atkbd->time = jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]) / 2; 458 atkbd->time = jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]) / 2;
459 } 459 }
460 460
461 input_regs(dev, regs);
462 input_event(dev, EV_KEY, keycode, value); 461 input_event(dev, EV_KEY, keycode, value);
463 input_sync(dev); 462 input_sync(dev);
464 463
@@ -469,7 +468,6 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
469 } 468 }
470 469
471 if (atkbd->scroll) { 470 if (atkbd->scroll) {
472 input_regs(dev, regs);
473 if (click != -1) 471 if (click != -1)
474 input_report_key(dev, BTN_MIDDLE, click); 472 input_report_key(dev, BTN_MIDDLE, click);
475 input_report_rel(dev, REL_WHEEL, scroll); 473 input_report_rel(dev, REL_WHEEL, scroll);
diff --git a/drivers/input/keyboard/corgikbd.c b/drivers/input/keyboard/corgikbd.c
index 1e03153b9bca..cb70970625b5 100644
--- a/drivers/input/keyboard/corgikbd.c
+++ b/drivers/input/keyboard/corgikbd.c
@@ -129,7 +129,7 @@ static inline void corgikbd_reset_col(int col)
129 */ 129 */
130 130
131/* Scan the hardware keyboard and push any changes up through the input layer */ 131/* Scan the hardware keyboard and push any changes up through the input layer */
132static void corgikbd_scankeyboard(struct corgikbd *corgikbd_data, struct pt_regs *regs) 132static void corgikbd_scankeyboard(struct corgikbd *corgikbd_data)
133{ 133{
134 unsigned int row, col, rowd; 134 unsigned int row, col, rowd;
135 unsigned long flags; 135 unsigned long flags;
@@ -140,9 +140,6 @@ static void corgikbd_scankeyboard(struct corgikbd *corgikbd_data, struct pt_regs
140 140
141 spin_lock_irqsave(&corgikbd_data->lock, flags); 141 spin_lock_irqsave(&corgikbd_data->lock, flags);
142 142
143 if (regs)
144 input_regs(corgikbd_data->input, regs);
145
146 num_pressed = 0; 143 num_pressed = 0;
147 for (col = 0; col < KB_COLS; col++) { 144 for (col = 0; col < KB_COLS; col++) {
148 /* 145 /*
@@ -191,14 +188,14 @@ static void corgikbd_scankeyboard(struct corgikbd *corgikbd_data, struct pt_regs
191/* 188/*
192 * corgi keyboard interrupt handler. 189 * corgi keyboard interrupt handler.
193 */ 190 */
194static irqreturn_t corgikbd_interrupt(int irq, void *dev_id, struct pt_regs *regs) 191static irqreturn_t corgikbd_interrupt(int irq, void *dev_id)
195{ 192{
196 struct corgikbd *corgikbd_data = dev_id; 193 struct corgikbd *corgikbd_data = dev_id;
197 194
198 if (!timer_pending(&corgikbd_data->timer)) { 195 if (!timer_pending(&corgikbd_data->timer)) {
199 /** wait chattering delay **/ 196 /** wait chattering delay **/
200 udelay(20); 197 udelay(20);
201 corgikbd_scankeyboard(corgikbd_data, regs); 198 corgikbd_scankeyboard(corgikbd_data);
202 } 199 }
203 200
204 return IRQ_HANDLED; 201 return IRQ_HANDLED;
diff --git a/drivers/input/keyboard/hil_kbd.c b/drivers/input/keyboard/hil_kbd.c
index 2e4abdc26367..c9b0b8978cd8 100644
--- a/drivers/input/keyboard/hil_kbd.c
+++ b/drivers/input/keyboard/hil_kbd.c
@@ -198,7 +198,7 @@ static void hil_kbd_process_err(struct hil_kbd *kbd) {
198} 198}
199 199
200static irqreturn_t hil_kbd_interrupt(struct serio *serio, 200static irqreturn_t hil_kbd_interrupt(struct serio *serio,
201 unsigned char data, unsigned int flags, struct pt_regs *regs) 201 unsigned char data, unsigned int flags)
202{ 202{
203 struct hil_kbd *kbd; 203 struct hil_kbd *kbd;
204 hil_packet packet; 204 hil_packet packet;
diff --git a/drivers/input/keyboard/hilkbd.c b/drivers/input/keyboard/hilkbd.c
index d22c7c624296..54bc569db4b0 100644
--- a/drivers/input/keyboard/hilkbd.c
+++ b/drivers/input/keyboard/hilkbd.c
@@ -150,7 +150,7 @@ static inline void handle_data(unsigned char s, unsigned char c)
150/* 150/*
151 * Handle HIL interrupts. 151 * Handle HIL interrupts.
152 */ 152 */
153static irqreturn_t hil_interrupt(int irq, void *handle, struct pt_regs *regs) 153static irqreturn_t hil_interrupt(int irq, void *handle)
154{ 154{
155 unsigned char s, c; 155 unsigned char s, c;
156 156
diff --git a/drivers/input/keyboard/lkkbd.c b/drivers/input/keyboard/lkkbd.c
index 5174224cadb4..708d5a1bc3d2 100644
--- a/drivers/input/keyboard/lkkbd.c
+++ b/drivers/input/keyboard/lkkbd.c
@@ -453,8 +453,7 @@ lkkbd_detection_done (struct lkkbd *lk)
453 * is received. 453 * is received.
454 */ 454 */
455static irqreturn_t 455static irqreturn_t
456lkkbd_interrupt (struct serio *serio, unsigned char data, unsigned int flags, 456lkkbd_interrupt (struct serio *serio, unsigned char data, unsigned int flags)
457 struct pt_regs *regs)
458{ 457{
459 struct lkkbd *lk = serio_get_drvdata (serio); 458 struct lkkbd *lk = serio_get_drvdata (serio);
460 int i; 459 int i;
@@ -473,7 +472,6 @@ lkkbd_interrupt (struct serio *serio, unsigned char data, unsigned int flags,
473 472
474 switch (data) { 473 switch (data) {
475 case LK_ALL_KEYS_UP: 474 case LK_ALL_KEYS_UP:
476 input_regs (lk->dev, regs);
477 for (i = 0; i < ARRAY_SIZE (lkkbd_keycode); i++) 475 for (i = 0; i < ARRAY_SIZE (lkkbd_keycode); i++)
478 if (lk->keycode[i] != KEY_RESERVED) 476 if (lk->keycode[i] != KEY_RESERVED)
479 input_report_key (lk->dev, lk->keycode[i], 0); 477 input_report_key (lk->dev, lk->keycode[i], 0);
@@ -501,7 +499,6 @@ lkkbd_interrupt (struct serio *serio, unsigned char data, unsigned int flags,
501 499
502 default: 500 default:
503 if (lk->keycode[data] != KEY_RESERVED) { 501 if (lk->keycode[data] != KEY_RESERVED) {
504 input_regs (lk->dev, regs);
505 if (!test_bit (lk->keycode[data], lk->dev->key)) 502 if (!test_bit (lk->keycode[data], lk->dev->key))
506 input_report_key (lk->dev, lk->keycode[data], 1); 503 input_report_key (lk->dev, lk->keycode[data], 1);
507 else 504 else
diff --git a/drivers/input/keyboard/locomokbd.c b/drivers/input/keyboard/locomokbd.c
index 83906f80ba21..fd33c9cc3272 100644
--- a/drivers/input/keyboard/locomokbd.c
+++ b/drivers/input/keyboard/locomokbd.c
@@ -126,7 +126,7 @@ static inline void locomokbd_reset_col(unsigned long membase, int col)
126 */ 126 */
127 127
128/* Scan the hardware keyboard and push any changes up through the input layer */ 128/* Scan the hardware keyboard and push any changes up through the input layer */
129static void locomokbd_scankeyboard(struct locomokbd *locomokbd, struct pt_regs *regs) 129static void locomokbd_scankeyboard(struct locomokbd *locomokbd)
130{ 130{
131 unsigned int row, col, rowd, scancode; 131 unsigned int row, col, rowd, scancode;
132 unsigned long flags; 132 unsigned long flags;
@@ -135,8 +135,6 @@ static void locomokbd_scankeyboard(struct locomokbd *locomokbd, struct pt_regs *
135 135
136 spin_lock_irqsave(&locomokbd->lock, flags); 136 spin_lock_irqsave(&locomokbd->lock, flags);
137 137
138 input_regs(locomokbd->input, regs);
139
140 locomokbd_charge_all(membase); 138 locomokbd_charge_all(membase);
141 139
142 num_pressed = 0; 140 num_pressed = 0;
@@ -171,13 +169,13 @@ static void locomokbd_scankeyboard(struct locomokbd *locomokbd, struct pt_regs *
171/* 169/*
172 * LoCoMo keyboard interrupt handler. 170 * LoCoMo keyboard interrupt handler.
173 */ 171 */
174static irqreturn_t locomokbd_interrupt(int irq, void *dev_id, struct pt_regs *regs) 172static irqreturn_t locomokbd_interrupt(int irq, void *dev_id)
175{ 173{
176 struct locomokbd *locomokbd = dev_id; 174 struct locomokbd *locomokbd = dev_id;
177 /** wait chattering delay **/ 175 /** wait chattering delay **/
178 udelay(100); 176 udelay(100);
179 177
180 locomokbd_scankeyboard(locomokbd, regs); 178 locomokbd_scankeyboard(locomokbd);
181 179
182 return IRQ_HANDLED; 180 return IRQ_HANDLED;
183} 181}
diff --git a/drivers/input/keyboard/newtonkbd.c b/drivers/input/keyboard/newtonkbd.c
index 40a3f551247e..9282e4e082bd 100644
--- a/drivers/input/keyboard/newtonkbd.c
+++ b/drivers/input/keyboard/newtonkbd.c
@@ -65,13 +65,12 @@ struct nkbd {
65}; 65};
66 66
67static irqreturn_t nkbd_interrupt(struct serio *serio, 67static irqreturn_t nkbd_interrupt(struct serio *serio,
68 unsigned char data, unsigned int flags, struct pt_regs *regs) 68 unsigned char data, unsigned int flags)
69{ 69{
70 struct nkbd *nkbd = serio_get_drvdata(serio); 70 struct nkbd *nkbd = serio_get_drvdata(serio);
71 71
72 /* invalid scan codes are probably the init sequence, so we ignore them */ 72 /* invalid scan codes are probably the init sequence, so we ignore them */
73 if (nkbd->keycode[data & NKBD_KEY]) { 73 if (nkbd->keycode[data & NKBD_KEY]) {
74 input_regs(nkbd->dev, regs);
75 input_report_key(nkbd->dev, nkbd->keycode[data & NKBD_KEY], data & NKBD_PRESS); 74 input_report_key(nkbd->dev, nkbd->keycode[data & NKBD_KEY], data & NKBD_PRESS);
76 input_sync(nkbd->dev); 75 input_sync(nkbd->dev);
77 } 76 }
diff --git a/drivers/input/keyboard/omap-keypad.c b/drivers/input/keyboard/omap-keypad.c
index d436287d1d2e..5680a6d95b2b 100644
--- a/drivers/input/keyboard/omap-keypad.c
+++ b/drivers/input/keyboard/omap-keypad.c
@@ -97,8 +97,7 @@ static u8 get_row_gpio_val(struct omap_kp *omap_kp)
97#define get_row_gpio_val(x) 0 97#define get_row_gpio_val(x) 0
98#endif 98#endif
99 99
100static irqreturn_t omap_kp_interrupt(int irq, void *dev_id, 100static irqreturn_t omap_kp_interrupt(int irq, void *dev_id)
101 struct pt_regs *regs)
102{ 101{
103 struct omap_kp *omap_kp = dev_id; 102 struct omap_kp *omap_kp = dev_id;
104 103
diff --git a/drivers/input/keyboard/spitzkbd.c b/drivers/input/keyboard/spitzkbd.c
index e385710233f4..8b18c009e3e0 100644
--- a/drivers/input/keyboard/spitzkbd.c
+++ b/drivers/input/keyboard/spitzkbd.c
@@ -176,7 +176,7 @@ static inline int spitzkbd_get_row_status(int col)
176 */ 176 */
177 177
178/* Scan the hardware keyboard and push any changes up through the input layer */ 178/* Scan the hardware keyboard and push any changes up through the input layer */
179static void spitzkbd_scankeyboard(struct spitzkbd *spitzkbd_data, struct pt_regs *regs) 179static void spitzkbd_scankeyboard(struct spitzkbd *spitzkbd_data)
180{ 180{
181 unsigned int row, col, rowd; 181 unsigned int row, col, rowd;
182 unsigned long flags; 182 unsigned long flags;
@@ -187,8 +187,6 @@ static void spitzkbd_scankeyboard(struct spitzkbd *spitzkbd_data, struct pt_regs
187 187
188 spin_lock_irqsave(&spitzkbd_data->lock, flags); 188 spin_lock_irqsave(&spitzkbd_data->lock, flags);
189 189
190 input_regs(spitzkbd_data->input, regs);
191
192 num_pressed = 0; 190 num_pressed = 0;
193 for (col = 0; col < KB_COLS; col++) { 191 for (col = 0; col < KB_COLS; col++) {
194 /* 192 /*
@@ -239,14 +237,14 @@ static void spitzkbd_scankeyboard(struct spitzkbd *spitzkbd_data, struct pt_regs
239/* 237/*
240 * spitz keyboard interrupt handler. 238 * spitz keyboard interrupt handler.
241 */ 239 */
242static irqreturn_t spitzkbd_interrupt(int irq, void *dev_id, struct pt_regs *regs) 240static irqreturn_t spitzkbd_interrupt(int irq, void *dev_id)
243{ 241{
244 struct spitzkbd *spitzkbd_data = dev_id; 242 struct spitzkbd *spitzkbd_data = dev_id;
245 243
246 if (!timer_pending(&spitzkbd_data->timer)) { 244 if (!timer_pending(&spitzkbd_data->timer)) {
247 /** wait chattering delay **/ 245 /** wait chattering delay **/
248 udelay(20); 246 udelay(20);
249 spitzkbd_scankeyboard(spitzkbd_data, regs); 247 spitzkbd_scankeyboard(spitzkbd_data);
250 } 248 }
251 249
252 return IRQ_HANDLED; 250 return IRQ_HANDLED;
@@ -267,7 +265,7 @@ static void spitzkbd_timer_callback(unsigned long data)
267 * We debounce the switches and pass them to the input system. 265 * We debounce the switches and pass them to the input system.
268 */ 266 */
269 267
270static irqreturn_t spitzkbd_hinge_isr(int irq, void *dev_id, struct pt_regs *regs) 268static irqreturn_t spitzkbd_hinge_isr(int irq, void *dev_id)
271{ 269{
272 struct spitzkbd *spitzkbd_data = dev_id; 270 struct spitzkbd *spitzkbd_data = dev_id;
273 271
diff --git a/drivers/input/keyboard/stowaway.c b/drivers/input/keyboard/stowaway.c
index 04c54c57f25c..e60937d17b1c 100644
--- a/drivers/input/keyboard/stowaway.c
+++ b/drivers/input/keyboard/stowaway.c
@@ -71,13 +71,12 @@ struct skbd {
71}; 71};
72 72
73static irqreturn_t skbd_interrupt(struct serio *serio, unsigned char data, 73static irqreturn_t skbd_interrupt(struct serio *serio, unsigned char data,
74 unsigned int flags, struct pt_regs *regs) 74 unsigned int flags)
75{ 75{
76 struct skbd *skbd = serio_get_drvdata(serio); 76 struct skbd *skbd = serio_get_drvdata(serio);
77 struct input_dev *dev = skbd->dev; 77 struct input_dev *dev = skbd->dev;
78 78
79 if (skbd->keycode[data & SKBD_KEY_MASK]) { 79 if (skbd->keycode[data & SKBD_KEY_MASK]) {
80 input_regs(dev, regs);
81 input_report_key(dev, skbd->keycode[data & SKBD_KEY_MASK], 80 input_report_key(dev, skbd->keycode[data & SKBD_KEY_MASK],
82 !(data & SKBD_RELEASE)); 81 !(data & SKBD_RELEASE));
83 input_sync(dev); 82 input_sync(dev);
diff --git a/drivers/input/keyboard/sunkbd.c b/drivers/input/keyboard/sunkbd.c
index 9dbd7b85686d..cac4781103c3 100644
--- a/drivers/input/keyboard/sunkbd.c
+++ b/drivers/input/keyboard/sunkbd.c
@@ -94,7 +94,7 @@ struct sunkbd {
94 */ 94 */
95 95
96static irqreturn_t sunkbd_interrupt(struct serio *serio, 96static irqreturn_t sunkbd_interrupt(struct serio *serio,
97 unsigned char data, unsigned int flags, struct pt_regs *regs) 97 unsigned char data, unsigned int flags)
98{ 98{
99 struct sunkbd* sunkbd = serio_get_drvdata(serio); 99 struct sunkbd* sunkbd = serio_get_drvdata(serio);
100 100
@@ -129,7 +129,6 @@ static irqreturn_t sunkbd_interrupt(struct serio *serio,
129 break; 129 break;
130 130
131 if (sunkbd->keycode[data & SUNKBD_KEY]) { 131 if (sunkbd->keycode[data & SUNKBD_KEY]) {
132 input_regs(sunkbd->dev, regs);
133 input_report_key(sunkbd->dev, sunkbd->keycode[data & SUNKBD_KEY], !(data & SUNKBD_RELEASE)); 132 input_report_key(sunkbd->dev, sunkbd->keycode[data & SUNKBD_KEY], !(data & SUNKBD_RELEASE));
134 input_sync(sunkbd->dev); 133 input_sync(sunkbd->dev);
135 } else { 134 } else {
diff --git a/drivers/input/keyboard/xtkbd.c b/drivers/input/keyboard/xtkbd.c
index 0821d53cf0c1..8c11dc935454 100644
--- a/drivers/input/keyboard/xtkbd.c
+++ b/drivers/input/keyboard/xtkbd.c
@@ -64,7 +64,7 @@ struct xtkbd {
64}; 64};
65 65
66static irqreturn_t xtkbd_interrupt(struct serio *serio, 66static irqreturn_t xtkbd_interrupt(struct serio *serio,
67 unsigned char data, unsigned int flags, struct pt_regs *regs) 67 unsigned char data, unsigned int flags)
68{ 68{
69 struct xtkbd *xtkbd = serio_get_drvdata(serio); 69 struct xtkbd *xtkbd = serio_get_drvdata(serio);
70 70
@@ -75,7 +75,6 @@ static irqreturn_t xtkbd_interrupt(struct serio *serio,
75 default: 75 default:
76 76
77 if (xtkbd->keycode[data & XTKBD_KEY]) { 77 if (xtkbd->keycode[data & XTKBD_KEY]) {
78 input_regs(xtkbd->dev, regs);
79 input_report_key(xtkbd->dev, xtkbd->keycode[data & XTKBD_KEY], !(data & XTKBD_RELEASE)); 78 input_report_key(xtkbd->dev, xtkbd->keycode[data & XTKBD_KEY], !(data & XTKBD_RELEASE));
80 input_sync(xtkbd->dev); 79 input_sync(xtkbd->dev);
81 } else { 80 } else {
diff --git a/drivers/input/misc/ixp4xx-beeper.c b/drivers/input/misc/ixp4xx-beeper.c
index 805b636e73d9..105c6fc27823 100644
--- a/drivers/input/misc/ixp4xx-beeper.c
+++ b/drivers/input/misc/ixp4xx-beeper.c
@@ -79,7 +79,7 @@ static int ixp4xx_spkr_event(struct input_dev *dev, unsigned int type, unsigned
79 return 0; 79 return 0;
80} 80}
81 81
82static irqreturn_t ixp4xx_spkr_interrupt(int irq, void *dev_id, struct pt_regs *regs) 82static irqreturn_t ixp4xx_spkr_interrupt(int irq, void *dev_id)
83{ 83{
84 /* clear interrupt */ 84 /* clear interrupt */
85 *IXP4XX_OSST = IXP4XX_OSST_TIMER_2_PEND; 85 *IXP4XX_OSST = IXP4XX_OSST_TIMER_2_PEND;
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}
diff --git a/drivers/input/serio/ambakmi.c b/drivers/input/serio/ambakmi.c
index 3df5eedf8f31..5a7b49c35539 100644
--- a/drivers/input/serio/ambakmi.c
+++ b/drivers/input/serio/ambakmi.c
@@ -37,14 +37,14 @@ struct amba_kmi_port {
37 unsigned int open; 37 unsigned int open;
38}; 38};
39 39
40static irqreturn_t amba_kmi_int(int irq, void *dev_id, struct pt_regs *regs) 40static irqreturn_t amba_kmi_int(int irq, void *dev_id)
41{ 41{
42 struct amba_kmi_port *kmi = dev_id; 42 struct amba_kmi_port *kmi = dev_id;
43 unsigned int status = readb(KMIIR); 43 unsigned int status = readb(KMIIR);
44 int handled = IRQ_NONE; 44 int handled = IRQ_NONE;
45 45
46 while (status & KMIIR_RXINTR) { 46 while (status & KMIIR_RXINTR) {
47 serio_interrupt(kmi->io, readb(KMIDATA), 0, regs); 47 serio_interrupt(kmi->io, readb(KMIDATA), 0);
48 status = readb(KMIIR); 48 status = readb(KMIIR);
49 handled = IRQ_HANDLED; 49 handled = IRQ_HANDLED;
50 } 50 }
diff --git a/drivers/input/serio/ct82c710.c b/drivers/input/serio/ct82c710.c
index bc6e87add093..0d35018c23a9 100644
--- a/drivers/input/serio/ct82c710.c
+++ b/drivers/input/serio/ct82c710.c
@@ -71,9 +71,9 @@ static struct resource ct82c710_iores;
71 * is waiting in the 82C710. 71 * is waiting in the 82C710.
72 */ 72 */
73 73
74static irqreturn_t ct82c710_interrupt(int cpl, void *dev_id, struct pt_regs * regs) 74static irqreturn_t ct82c710_interrupt(int cpl, void *dev_id)
75{ 75{
76 return serio_interrupt(ct82c710_port, inb(CT82C710_DATA), 0, regs); 76 return serio_interrupt(ct82c710_port, inb(CT82C710_DATA), 0);
77} 77}
78 78
79/* 79/*
diff --git a/drivers/input/serio/gscps2.c b/drivers/input/serio/gscps2.c
index cde036a92168..081fdc3c7737 100644
--- a/drivers/input/serio/gscps2.c
+++ b/drivers/input/serio/gscps2.c
@@ -82,7 +82,7 @@ MODULE_DEVICE_TABLE(parisc, gscps2_device_tbl);
82#define GSC_ID_MOUSE 1 82#define GSC_ID_MOUSE 1
83 83
84 84
85static irqreturn_t gscps2_interrupt(int irq, void *dev, struct pt_regs *regs); 85static irqreturn_t gscps2_interrupt(int irq, void *dev);
86 86
87#define BUFFER_SIZE 0x0f 87#define BUFFER_SIZE 0x0f
88 88
@@ -226,7 +226,7 @@ static LIST_HEAD(ps2port_list);
226 * later. 226 * later.
227 */ 227 */
228 228
229static irqreturn_t gscps2_interrupt(int irq, void *dev, struct pt_regs *regs) 229static irqreturn_t gscps2_interrupt(int irq, void *dev)
230{ 230{
231 struct gscps2port *ps2port; 231 struct gscps2port *ps2port;
232 232
@@ -267,7 +267,7 @@ static irqreturn_t gscps2_interrupt(int irq, void *dev, struct pt_regs *regs)
267 rxflags = ((status & GSC_STAT_TERR) ? SERIO_TIMEOUT : 0 ) | 267 rxflags = ((status & GSC_STAT_TERR) ? SERIO_TIMEOUT : 0 ) |
268 ((status & GSC_STAT_PERR) ? SERIO_PARITY : 0 ); 268 ((status & GSC_STAT_PERR) ? SERIO_PARITY : 0 );
269 269
270 serio_interrupt(ps2port->port, data, rxflags, regs); 270 serio_interrupt(ps2port->port, data, rxflags);
271 271
272 } /* while() */ 272 } /* while() */
273 273
diff --git a/drivers/input/serio/hp_sdc.c b/drivers/input/serio/hp_sdc.c
index a10348bb25e9..ba7b920347e3 100644
--- a/drivers/input/serio/hp_sdc.c
+++ b/drivers/input/serio/hp_sdc.c
@@ -202,7 +202,7 @@ static void hp_sdc_take (int irq, void *dev_id, uint8_t status, uint8_t data) {
202 } 202 }
203} 203}
204 204
205static irqreturn_t hp_sdc_isr(int irq, void *dev_id, struct pt_regs * regs) { 205static irqreturn_t hp_sdc_isr(int irq, void *dev_id) {
206 uint8_t status, data; 206 uint8_t status, data;
207 207
208 status = hp_sdc_status_in8(); 208 status = hp_sdc_status_in8();
@@ -253,7 +253,7 @@ static irqreturn_t hp_sdc_isr(int irq, void *dev_id, struct pt_regs * regs) {
253} 253}
254 254
255 255
256static irqreturn_t hp_sdc_nmisr(int irq, void *dev_id, struct pt_regs * regs) { 256static irqreturn_t hp_sdc_nmisr(int irq, void *dev_id) {
257 int status; 257 int status;
258 258
259 status = hp_sdc_status_in8(); 259 status = hp_sdc_status_in8();
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index 1bb0c76a9259..09b06e605b50 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
@@ -108,7 +108,7 @@ static unsigned char i8042_kbd_irq_registered;
108static unsigned char i8042_aux_irq_registered; 108static unsigned char i8042_aux_irq_registered;
109static struct platform_device *i8042_platform_device; 109static struct platform_device *i8042_platform_device;
110 110
111static irqreturn_t i8042_interrupt(int irq, void *dev_id, struct pt_regs *regs); 111static irqreturn_t i8042_interrupt(int irq, void *dev_id);
112 112
113/* 113/*
114 * The i8042_wait_read() and i8042_wait_write functions wait for the i8042 to 114 * The i8042_wait_read() and i8042_wait_write functions wait for the i8042 to
@@ -271,7 +271,7 @@ static int i8042_aux_write(struct serio *serio, unsigned char c)
271 * characters later. 271 * characters later.
272 */ 272 */
273 273
274 i8042_interrupt(0, NULL, NULL); 274 i8042_interrupt(0, NULL);
275 return retval; 275 return retval;
276} 276}
277 277
@@ -309,7 +309,7 @@ static void i8042_stop(struct serio *serio)
309 * to the upper layers. 309 * to the upper layers.
310 */ 310 */
311 311
312static irqreturn_t i8042_interrupt(int irq, void *dev_id, struct pt_regs *regs) 312static irqreturn_t i8042_interrupt(int irq, void *dev_id)
313{ 313{
314 struct i8042_port *port; 314 struct i8042_port *port;
315 unsigned long flags; 315 unsigned long flags;
@@ -379,7 +379,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id, struct pt_regs *regs)
379 dfl & SERIO_TIMEOUT ? ", timeout" : ""); 379 dfl & SERIO_TIMEOUT ? ", timeout" : "");
380 380
381 if (likely(port->exists)) 381 if (likely(port->exists))
382 serio_interrupt(port->serio, data, dfl, regs); 382 serio_interrupt(port->serio, data, dfl);
383 383
384 ret = 1; 384 ret = 1;
385 out: 385 out:
@@ -519,7 +519,7 @@ static int __devinit i8042_check_mux(void)
519static struct completion i8042_aux_irq_delivered __devinitdata; 519static struct completion i8042_aux_irq_delivered __devinitdata;
520static int i8042_irq_being_tested __devinitdata; 520static int i8042_irq_being_tested __devinitdata;
521 521
522static irqreturn_t __devinit i8042_aux_test_irq(int irq, void *dev_id, struct pt_regs *regs) 522static irqreturn_t __devinit i8042_aux_test_irq(int irq, void *dev_id)
523{ 523{
524 unsigned long flags; 524 unsigned long flags;
525 unsigned char str, data; 525 unsigned char str, data;
@@ -905,7 +905,7 @@ static int i8042_resume(struct platform_device *dev)
905 if (i8042_ports[I8042_KBD_PORT_NO].serio) 905 if (i8042_ports[I8042_KBD_PORT_NO].serio)
906 i8042_enable_kbd_port(); 906 i8042_enable_kbd_port();
907 907
908 i8042_interrupt(0, NULL, NULL); 908 i8042_interrupt(0, NULL);
909 909
910 return 0; 910 return 0;
911} 911}
diff --git a/drivers/input/serio/maceps2.c b/drivers/input/serio/maceps2.c
index f08a5d0cd5fa..558200e96d0f 100644
--- a/drivers/input/serio/maceps2.c
+++ b/drivers/input/serio/maceps2.c
@@ -72,8 +72,7 @@ static int maceps2_write(struct serio *dev, unsigned char val)
72 return -1; 72 return -1;
73} 73}
74 74
75static irqreturn_t maceps2_interrupt(int irq, void *dev_id, 75static irqreturn_t maceps2_interrupt(int irq, void *dev_id)
76 struct pt_regs *regs)
77{ 76{
78 struct serio *dev = dev_id; 77 struct serio *dev = dev_id;
79 struct mace_ps2port *port = ((struct maceps2_data *)dev->port_data)->port; 78 struct mace_ps2port *port = ((struct maceps2_data *)dev->port_data)->port;
@@ -81,7 +80,7 @@ static irqreturn_t maceps2_interrupt(int irq, void *dev_id,
81 80
82 if (port->status & PS2_STATUS_RX_FULL) { 81 if (port->status & PS2_STATUS_RX_FULL) {
83 byte = port->rx; 82 byte = port->rx;
84 serio_interrupt(dev, byte & 0xff, 0, regs); 83 serio_interrupt(dev, byte & 0xff, 0);
85 } 84 }
86 85
87 return IRQ_HANDLED; 86 return IRQ_HANDLED;
diff --git a/drivers/input/serio/parkbd.c b/drivers/input/serio/parkbd.c
index a5c1fb3a4a51..688610e86a3e 100644
--- a/drivers/input/serio/parkbd.c
+++ b/drivers/input/serio/parkbd.c
@@ -102,7 +102,7 @@ static int parkbd_write(struct serio *port, unsigned char c)
102 return 0; 102 return 0;
103} 103}
104 104
105static void parkbd_interrupt(int irq, void *dev_id, struct pt_regs *regs) 105static void parkbd_interrupt(int irq, void *dev_id)
106{ 106{
107 107
108 if (parkbd_writing) { 108 if (parkbd_writing) {
@@ -134,7 +134,7 @@ static void parkbd_interrupt(int irq, void *dev_id, struct pt_regs *regs)
134 parkbd_buffer |= (parkbd_readlines() >> 1) << parkbd_counter++; 134 parkbd_buffer |= (parkbd_readlines() >> 1) << parkbd_counter++;
135 135
136 if (parkbd_counter == parkbd_mode + 10) 136 if (parkbd_counter == parkbd_mode + 10)
137 serio_interrupt(parkbd_port, (parkbd_buffer >> (2 - parkbd_mode)) & 0xff, 0, regs); 137 serio_interrupt(parkbd_port, (parkbd_buffer >> (2 - parkbd_mode)) & 0xff, 0);
138 } 138 }
139 139
140 parkbd_last = jiffies; 140 parkbd_last = jiffies;
diff --git a/drivers/input/serio/pcips2.c b/drivers/input/serio/pcips2.c
index fb727c665253..ea5e3c6ddb62 100644
--- a/drivers/input/serio/pcips2.c
+++ b/drivers/input/serio/pcips2.c
@@ -58,7 +58,7 @@ static int pcips2_write(struct serio *io, unsigned char val)
58 return 0; 58 return 0;
59} 59}
60 60
61static irqreturn_t pcips2_interrupt(int irq, void *devid, struct pt_regs *regs) 61static irqreturn_t pcips2_interrupt(int irq, void *devid)
62{ 62{
63 struct pcips2_data *ps2if = devid; 63 struct pcips2_data *ps2if = devid;
64 unsigned char status, scancode; 64 unsigned char status, scancode;
@@ -80,7 +80,7 @@ static irqreturn_t pcips2_interrupt(int irq, void *devid, struct pt_regs *regs)
80 if (hweight8(scancode) & 1) 80 if (hweight8(scancode) & 1)
81 flag ^= SERIO_PARITY; 81 flag ^= SERIO_PARITY;
82 82
83 serio_interrupt(ps2if->io, scancode, flag, regs); 83 serio_interrupt(ps2if->io, scancode, flag);
84 } while (1); 84 } while (1);
85 return IRQ_RETVAL(handled); 85 return IRQ_RETVAL(handled);
86} 86}
diff --git a/drivers/input/serio/q40kbd.c b/drivers/input/serio/q40kbd.c
index d3827c5fe119..cb89aff2e160 100644
--- a/drivers/input/serio/q40kbd.c
+++ b/drivers/input/serio/q40kbd.c
@@ -53,14 +53,14 @@ DEFINE_SPINLOCK(q40kbd_lock);
53static struct serio *q40kbd_port; 53static struct serio *q40kbd_port;
54static struct platform_device *q40kbd_device; 54static struct platform_device *q40kbd_device;
55 55
56static irqreturn_t q40kbd_interrupt(int irq, void *dev_id, struct pt_regs *regs) 56static irqreturn_t q40kbd_interrupt(int irq, void *dev_id)
57{ 57{
58 unsigned long flags; 58 unsigned long flags;
59 59
60 spin_lock_irqsave(&q40kbd_lock, flags); 60 spin_lock_irqsave(&q40kbd_lock, flags);
61 61
62 if (Q40_IRQ_KEYB_MASK & master_inb(INTERRUPT_REG)) 62 if (Q40_IRQ_KEYB_MASK & master_inb(INTERRUPT_REG))
63 serio_interrupt(q40kbd_port, master_inb(KEYCODE_REG), 0, regs); 63 serio_interrupt(q40kbd_port, master_inb(KEYCODE_REG), 0);
64 64
65 master_outb(-1, KEYBOARD_UNLOCK_REG); 65 master_outb(-1, KEYBOARD_UNLOCK_REG);
66 66
diff --git a/drivers/input/serio/rpckbd.c b/drivers/input/serio/rpckbd.c
index 513d37fc1acf..49f84315cb32 100644
--- a/drivers/input/serio/rpckbd.c
+++ b/drivers/input/serio/rpckbd.c
@@ -56,7 +56,7 @@ static int rpckbd_write(struct serio *port, unsigned char val)
56 return 0; 56 return 0;
57} 57}
58 58
59static irqreturn_t rpckbd_rx(int irq, void *dev_id, struct pt_regs *regs) 59static irqreturn_t rpckbd_rx(int irq, void *dev_id)
60{ 60{
61 struct serio *port = dev_id; 61 struct serio *port = dev_id;
62 unsigned int byte; 62 unsigned int byte;
@@ -65,13 +65,13 @@ static irqreturn_t rpckbd_rx(int irq, void *dev_id, struct pt_regs *regs)
65 while (iomd_readb(IOMD_KCTRL) & (1 << 5)) { 65 while (iomd_readb(IOMD_KCTRL) & (1 << 5)) {
66 byte = iomd_readb(IOMD_KARTRX); 66 byte = iomd_readb(IOMD_KARTRX);
67 67
68 serio_interrupt(port, byte, 0, regs); 68 serio_interrupt(port, byte, 0);
69 handled = IRQ_HANDLED; 69 handled = IRQ_HANDLED;
70 } 70 }
71 return handled; 71 return handled;
72} 72}
73 73
74static irqreturn_t rpckbd_tx(int irq, void *dev_id, struct pt_regs *regs) 74static irqreturn_t rpckbd_tx(int irq, void *dev_id)
75{ 75{
76 return IRQ_HANDLED; 76 return IRQ_HANDLED;
77} 77}
diff --git a/drivers/input/serio/sa1111ps2.c b/drivers/input/serio/sa1111ps2.c
index ebd9976fc811..559508795af1 100644
--- a/drivers/input/serio/sa1111ps2.c
+++ b/drivers/input/serio/sa1111ps2.c
@@ -40,7 +40,7 @@ struct ps2if {
40 * at the most one, but we loop for safety. If there was a 40 * at the most one, but we loop for safety. If there was a
41 * framing error, we have to manually clear the status. 41 * framing error, we have to manually clear the status.
42 */ 42 */
43static irqreturn_t ps2_rxint(int irq, void *dev_id, struct pt_regs *regs) 43static irqreturn_t ps2_rxint(int irq, void *dev_id)
44{ 44{
45 struct ps2if *ps2if = dev_id; 45 struct ps2if *ps2if = dev_id;
46 unsigned int scancode, flag, status; 46 unsigned int scancode, flag, status;
@@ -58,7 +58,7 @@ static irqreturn_t ps2_rxint(int irq, void *dev_id, struct pt_regs *regs)
58 if (hweight8(scancode) & 1) 58 if (hweight8(scancode) & 1)
59 flag ^= SERIO_PARITY; 59 flag ^= SERIO_PARITY;
60 60
61 serio_interrupt(ps2if->io, scancode, flag, regs); 61 serio_interrupt(ps2if->io, scancode, flag);
62 62
63 status = sa1111_readl(ps2if->base + SA1111_PS2STAT); 63 status = sa1111_readl(ps2if->base + SA1111_PS2STAT);
64 } 64 }
@@ -69,7 +69,7 @@ static irqreturn_t ps2_rxint(int irq, void *dev_id, struct pt_regs *regs)
69/* 69/*
70 * Completion of ps2 write 70 * Completion of ps2 write
71 */ 71 */
72static irqreturn_t ps2_txint(int irq, void *dev_id, struct pt_regs *regs) 72static irqreturn_t ps2_txint(int irq, void *dev_id)
73{ 73{
74 struct ps2if *ps2if = dev_id; 74 struct ps2if *ps2if = dev_id;
75 unsigned int status; 75 unsigned int status;
diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
index 3e76ad71c9a0..960fae3c3cea 100644
--- a/drivers/input/serio/serio.c
+++ b/drivers/input/serio/serio.c
@@ -911,7 +911,7 @@ void serio_close(struct serio *serio)
911} 911}
912 912
913irqreturn_t serio_interrupt(struct serio *serio, 913irqreturn_t serio_interrupt(struct serio *serio,
914 unsigned char data, unsigned int dfl, struct pt_regs *regs) 914 unsigned char data, unsigned int dfl)
915{ 915{
916 unsigned long flags; 916 unsigned long flags;
917 irqreturn_t ret = IRQ_NONE; 917 irqreturn_t ret = IRQ_NONE;
@@ -919,7 +919,7 @@ irqreturn_t serio_interrupt(struct serio *serio,
919 spin_lock_irqsave(&serio->lock, flags); 919 spin_lock_irqsave(&serio->lock, flags);
920 920
921 if (likely(serio->drv)) { 921 if (likely(serio->drv)) {
922 ret = serio->drv->interrupt(serio, data, dfl, regs); 922 ret = serio->drv->interrupt(serio, data, dfl);
923 } else if (!dfl && serio->registered) { 923 } else if (!dfl && serio->registered) {
924 serio_rescan(serio); 924 serio_rescan(serio);
925 ret = IRQ_HANDLED; 925 ret = IRQ_HANDLED;
diff --git a/drivers/input/serio/serio_raw.c b/drivers/input/serio/serio_raw.c
index 71a8eea816cb..ba2a2035d648 100644
--- a/drivers/input/serio/serio_raw.c
+++ b/drivers/input/serio/serio_raw.c
@@ -250,7 +250,7 @@ static struct file_operations serio_raw_fops = {
250 *********************************************************************/ 250 *********************************************************************/
251 251
252static irqreturn_t serio_raw_interrupt(struct serio *serio, unsigned char data, 252static irqreturn_t serio_raw_interrupt(struct serio *serio, unsigned char data,
253 unsigned int dfl, struct pt_regs *regs) 253 unsigned int dfl)
254{ 254{
255 struct serio_raw *serio_raw = serio_get_drvdata(serio); 255 struct serio_raw *serio_raw = serio_get_drvdata(serio);
256 struct serio_raw_list *list; 256 struct serio_raw_list *list;
diff --git a/drivers/input/serio/serport.c b/drivers/input/serio/serport.c
index 54a680cc704d..e1a3a79ab3f9 100644
--- a/drivers/input/serio/serport.c
+++ b/drivers/input/serio/serport.c
@@ -117,9 +117,6 @@ static void serport_ldisc_close(struct tty_struct *tty)
117 * serport_ldisc_receive() is called by the low level tty driver when characters 117 * serport_ldisc_receive() is called by the low level tty driver when characters
118 * are ready for us. We forward the characters, one by one to the 'interrupt' 118 * are ready for us. We forward the characters, one by one to the 'interrupt'
119 * routine. 119 * routine.
120 *
121 * FIXME: We should get pt_regs from the tty layer and forward them to
122 * serio_interrupt here.
123 */ 120 */
124 121
125static void serport_ldisc_receive(struct tty_struct *tty, const unsigned char *cp, char *fp, int count) 122static void serport_ldisc_receive(struct tty_struct *tty, const unsigned char *cp, char *fp, int count)
@@ -134,7 +131,7 @@ static void serport_ldisc_receive(struct tty_struct *tty, const unsigned char *c
134 goto out; 131 goto out;
135 132
136 for (i = 0; i < count; i++) 133 for (i = 0; i < count; i++)
137 serio_interrupt(serport->serio, cp[i], 0, NULL); 134 serio_interrupt(serport->serio, cp[i], 0);
138 135
139out: 136out:
140 spin_unlock_irqrestore(&serport->lock, flags); 137 spin_unlock_irqrestore(&serport->lock, flags);
diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
index 66e411badf70..f56d6a0f0624 100644
--- a/drivers/input/touchscreen/ads7846.c
+++ b/drivers/input/touchscreen/ads7846.c
@@ -487,7 +487,7 @@ static void ads7846_timer(unsigned long handle)
487 spin_unlock_irq(&ts->lock); 487 spin_unlock_irq(&ts->lock);
488} 488}
489 489
490static irqreturn_t ads7846_irq(int irq, void *handle, struct pt_regs *regs) 490static irqreturn_t ads7846_irq(int irq, void *handle)
491{ 491{
492 struct ads7846 *ts = handle; 492 struct ads7846 *ts = handle;
493 unsigned long flags; 493 unsigned long flags;
diff --git a/drivers/input/touchscreen/corgi_ts.c b/drivers/input/touchscreen/corgi_ts.c
index 9b66271d3ba8..ca79b2246195 100644
--- a/drivers/input/touchscreen/corgi_ts.c
+++ b/drivers/input/touchscreen/corgi_ts.c
@@ -173,7 +173,7 @@ static int read_xydata(struct corgi_ts *corgi_ts)
173 return 1; 173 return 1;
174} 174}
175 175
176static void new_data(struct corgi_ts *corgi_ts, struct pt_regs *regs) 176static void new_data(struct corgi_ts *corgi_ts)
177{ 177{
178 if (corgi_ts->power_mode != PWR_MODE_ACTIVE) 178 if (corgi_ts->power_mode != PWR_MODE_ACTIVE)
179 return; 179 return;
@@ -181,7 +181,6 @@ static void new_data(struct corgi_ts *corgi_ts, struct pt_regs *regs)
181 if (!corgi_ts->tc.pressure && corgi_ts->pendown == 0) 181 if (!corgi_ts->tc.pressure && corgi_ts->pendown == 0)
182 return; 182 return;
183 183
184 input_regs(corgi_ts->input, regs);
185 input_report_abs(corgi_ts->input, ABS_X, corgi_ts->tc.x); 184 input_report_abs(corgi_ts->input, ABS_X, corgi_ts->tc.x);
186 input_report_abs(corgi_ts->input, ABS_Y, corgi_ts->tc.y); 185 input_report_abs(corgi_ts->input, ABS_Y, corgi_ts->tc.y);
187 input_report_abs(corgi_ts->input, ABS_PRESSURE, corgi_ts->tc.pressure); 186 input_report_abs(corgi_ts->input, ABS_PRESSURE, corgi_ts->tc.pressure);
@@ -189,14 +188,14 @@ static void new_data(struct corgi_ts *corgi_ts, struct pt_regs *regs)
189 input_sync(corgi_ts->input); 188 input_sync(corgi_ts->input);
190} 189}
191 190
192static void ts_interrupt_main(struct corgi_ts *corgi_ts, int isTimer, struct pt_regs *regs) 191static void ts_interrupt_main(struct corgi_ts *corgi_ts, int isTimer)
193{ 192{
194 if ((GPLR(IRQ_TO_GPIO(corgi_ts->irq_gpio)) & GPIO_bit(IRQ_TO_GPIO(corgi_ts->irq_gpio))) == 0) { 193 if ((GPLR(IRQ_TO_GPIO(corgi_ts->irq_gpio)) & GPIO_bit(IRQ_TO_GPIO(corgi_ts->irq_gpio))) == 0) {
195 /* Disable Interrupt */ 194 /* Disable Interrupt */
196 set_irq_type(corgi_ts->irq_gpio, IRQT_NOEDGE); 195 set_irq_type(corgi_ts->irq_gpio, IRQT_NOEDGE);
197 if (read_xydata(corgi_ts)) { 196 if (read_xydata(corgi_ts)) {
198 corgi_ts->pendown = 1; 197 corgi_ts->pendown = 1;
199 new_data(corgi_ts, regs); 198 new_data(corgi_ts);
200 } 199 }
201 mod_timer(&corgi_ts->timer, jiffies + HZ / 100); 200 mod_timer(&corgi_ts->timer, jiffies + HZ / 100);
202 } else { 201 } else {
@@ -208,7 +207,7 @@ static void ts_interrupt_main(struct corgi_ts *corgi_ts, int isTimer, struct pt_
208 207
209 if (corgi_ts->pendown) { 208 if (corgi_ts->pendown) {
210 corgi_ts->tc.pressure = 0; 209 corgi_ts->tc.pressure = 0;
211 new_data(corgi_ts, regs); 210 new_data(corgi_ts);
212 } 211 }
213 212
214 /* Enable Falling Edge */ 213 /* Enable Falling Edge */
@@ -223,10 +222,10 @@ static void corgi_ts_timer(unsigned long data)
223 ts_interrupt_main(corgits_data, 1, NULL); 222 ts_interrupt_main(corgits_data, 1, NULL);
224} 223}
225 224
226static irqreturn_t ts_interrupt(int irq, void *dev_id, struct pt_regs *regs) 225static irqreturn_t ts_interrupt(int irq, void *dev_id)
227{ 226{
228 struct corgi_ts *corgits_data = dev_id; 227 struct corgi_ts *corgits_data = dev_id;
229 ts_interrupt_main(corgits_data, 0, regs); 228 ts_interrupt_main(corgits_data, 0);
230 return IRQ_HANDLED; 229 return IRQ_HANDLED;
231} 230}
232 231
diff --git a/drivers/input/touchscreen/elo.c b/drivers/input/touchscreen/elo.c
index ab565335ee44..913e1b73bb0e 100644
--- a/drivers/input/touchscreen/elo.c
+++ b/drivers/input/touchscreen/elo.c
@@ -67,7 +67,7 @@ struct elo {
67 char phys[32]; 67 char phys[32];
68}; 68};
69 69
70static void elo_process_data_10(struct elo *elo, unsigned char data, struct pt_regs *regs) 70static void elo_process_data_10(struct elo *elo, unsigned char data)
71{ 71{
72 struct input_dev *dev = elo->dev; 72 struct input_dev *dev = elo->dev;
73 73
@@ -95,7 +95,6 @@ static void elo_process_data_10(struct elo *elo, unsigned char data, struct pt_r
95 break; 95 break;
96 } 96 }
97 if (likely(elo->data[1] == ELO10_TOUCH_PACKET)) { 97 if (likely(elo->data[1] == ELO10_TOUCH_PACKET)) {
98 input_regs(dev, regs);
99 input_report_abs(dev, ABS_X, (elo->data[4] << 8) | elo->data[3]); 98 input_report_abs(dev, ABS_X, (elo->data[4] << 8) | elo->data[3]);
100 input_report_abs(dev, ABS_Y, (elo->data[6] << 8) | elo->data[5]); 99 input_report_abs(dev, ABS_Y, (elo->data[6] << 8) | elo->data[5]);
101 if (elo->data[2] & ELO10_PRESSURE) 100 if (elo->data[2] & ELO10_PRESSURE)
@@ -116,7 +115,7 @@ static void elo_process_data_10(struct elo *elo, unsigned char data, struct pt_r
116 elo->csum += data; 115 elo->csum += data;
117} 116}
118 117
119static void elo_process_data_6(struct elo *elo, unsigned char data, struct pt_regs *regs) 118static void elo_process_data_6(struct elo *elo, unsigned char data)
120{ 119{
121 struct input_dev *dev = elo->dev; 120 struct input_dev *dev = elo->dev;
122 121
@@ -134,7 +133,6 @@ static void elo_process_data_6(struct elo *elo, unsigned char data, struct pt_re
134 break; 133 break;
135 } 134 }
136 135
137 input_regs(dev, regs);
138 input_report_abs(dev, ABS_X, ((elo->data[0] & 0x3f) << 6) | (elo->data[1] & 0x3f)); 136 input_report_abs(dev, ABS_X, ((elo->data[0] & 0x3f) << 6) | (elo->data[1] & 0x3f));
139 input_report_abs(dev, ABS_Y, ((elo->data[2] & 0x3f) << 6) | (elo->data[3] & 0x3f)); 137 input_report_abs(dev, ABS_Y, ((elo->data[2] & 0x3f) << 6) | (elo->data[3] & 0x3f));
140 138
@@ -164,7 +162,7 @@ static void elo_process_data_6(struct elo *elo, unsigned char data, struct pt_re
164 } 162 }
165} 163}
166 164
167static void elo_process_data_3(struct elo *elo, unsigned char data, struct pt_regs *regs) 165static void elo_process_data_3(struct elo *elo, unsigned char data)
168{ 166{
169 struct input_dev *dev = elo->dev; 167 struct input_dev *dev = elo->dev;
170 168
@@ -177,7 +175,6 @@ static void elo_process_data_3(struct elo *elo, unsigned char data, struct pt_re
177 elo->idx = 0; 175 elo->idx = 0;
178 break; 176 break;
179 case 2: 177 case 2:
180 input_regs(dev, regs);
181 input_report_key(dev, BTN_TOUCH, !(elo->data[1] & 0x80)); 178 input_report_key(dev, BTN_TOUCH, !(elo->data[1] & 0x80));
182 input_report_abs(dev, ABS_X, elo->data[1]); 179 input_report_abs(dev, ABS_X, elo->data[1]);
183 input_report_abs(dev, ABS_Y, elo->data[2]); 180 input_report_abs(dev, ABS_Y, elo->data[2]);
@@ -188,22 +185,22 @@ static void elo_process_data_3(struct elo *elo, unsigned char data, struct pt_re
188} 185}
189 186
190static irqreturn_t elo_interrupt(struct serio *serio, 187static irqreturn_t elo_interrupt(struct serio *serio,
191 unsigned char data, unsigned int flags, struct pt_regs *regs) 188 unsigned char data, unsigned int flags)
192{ 189{
193 struct elo *elo = serio_get_drvdata(serio); 190 struct elo *elo = serio_get_drvdata(serio);
194 191
195 switch(elo->id) { 192 switch(elo->id) {
196 case 0: 193 case 0:
197 elo_process_data_10(elo, data, regs); 194 elo_process_data_10(elo, data);
198 break; 195 break;
199 196
200 case 1: 197 case 1:
201 case 2: 198 case 2:
202 elo_process_data_6(elo, data, regs); 199 elo_process_data_6(elo, data);
203 break; 200 break;
204 201
205 case 3: 202 case 3:
206 elo_process_data_3(elo, data, regs); 203 elo_process_data_3(elo, data);
207 break; 204 break;
208 } 205 }
209 206
diff --git a/drivers/input/touchscreen/gunze.c b/drivers/input/touchscreen/gunze.c
index b769b21973b7..817c2198933d 100644
--- a/drivers/input/touchscreen/gunze.c
+++ b/drivers/input/touchscreen/gunze.c
@@ -60,7 +60,7 @@ struct gunze {
60 char phys[32]; 60 char phys[32];
61}; 61};
62 62
63static void gunze_process_packet(struct gunze* gunze, struct pt_regs *regs) 63static void gunze_process_packet(struct gunze* gunze)
64{ 64{
65 struct input_dev *dev = gunze->dev; 65 struct input_dev *dev = gunze->dev;
66 66
@@ -70,7 +70,6 @@ static void gunze_process_packet(struct gunze* gunze, struct pt_regs *regs)
70 return; 70 return;
71 } 71 }
72 72
73 input_regs(dev, regs);
74 input_report_abs(dev, ABS_X, simple_strtoul(gunze->data + 1, NULL, 10)); 73 input_report_abs(dev, ABS_X, simple_strtoul(gunze->data + 1, NULL, 10));
75 input_report_abs(dev, ABS_Y, 1024 - simple_strtoul(gunze->data + 6, NULL, 10)); 74 input_report_abs(dev, ABS_Y, 1024 - simple_strtoul(gunze->data + 6, NULL, 10));
76 input_report_key(dev, BTN_TOUCH, gunze->data[0] == 'T'); 75 input_report_key(dev, BTN_TOUCH, gunze->data[0] == 'T');
@@ -78,12 +77,12 @@ static void gunze_process_packet(struct gunze* gunze, struct pt_regs *regs)
78} 77}
79 78
80static irqreturn_t gunze_interrupt(struct serio *serio, 79static irqreturn_t gunze_interrupt(struct serio *serio,
81 unsigned char data, unsigned int flags, struct pt_regs *regs) 80 unsigned char data, unsigned int flags)
82{ 81{
83 struct gunze* gunze = serio_get_drvdata(serio); 82 struct gunze* gunze = serio_get_drvdata(serio);
84 83
85 if (data == '\r') { 84 if (data == '\r') {
86 gunze_process_packet(gunze, regs); 85 gunze_process_packet(gunze);
87 gunze->idx = 0; 86 gunze->idx = 0;
88 } else { 87 } else {
89 if (gunze->idx < GUNZE_MAX_LENGTH) 88 if (gunze->idx < GUNZE_MAX_LENGTH)
diff --git a/drivers/input/touchscreen/h3600_ts_input.c b/drivers/input/touchscreen/h3600_ts_input.c
index e2b910018773..d9e61ee05ea9 100644
--- a/drivers/input/touchscreen/h3600_ts_input.c
+++ b/drivers/input/touchscreen/h3600_ts_input.c
@@ -106,19 +106,18 @@ struct h3600_dev {
106 char phys[32]; 106 char phys[32];
107}; 107};
108 108
109static irqreturn_t action_button_handler(int irq, void *dev_id, struct pt_regs *regs) 109static irqreturn_t action_button_handler(int irq, void *dev_id)
110{ 110{
111 int down = (GPLR & GPIO_BITSY_ACTION_BUTTON) ? 0 : 1; 111 int down = (GPLR & GPIO_BITSY_ACTION_BUTTON) ? 0 : 1;
112 struct input_dev *dev = (struct input_dev *) dev_id; 112 struct input_dev *dev = (struct input_dev *) dev_id;
113 113
114 input_regs(dev, regs);
115 input_report_key(dev, KEY_ENTER, down); 114 input_report_key(dev, KEY_ENTER, down);
116 input_sync(dev); 115 input_sync(dev);
117 116
118 return IRQ_HANDLED; 117 return IRQ_HANDLED;
119} 118}
120 119
121static irqreturn_t npower_button_handler(int irq, void *dev_id, struct pt_regs *regs) 120static irqreturn_t npower_button_handler(int irq, void *dev_id)
122{ 121{
123 int down = (GPLR & GPIO_BITSY_NPOWER_BUTTON) ? 0 : 1; 122 int down = (GPLR & GPIO_BITSY_NPOWER_BUTTON) ? 0 : 1;
124 struct input_dev *dev = (struct input_dev *) dev_id; 123 struct input_dev *dev = (struct input_dev *) dev_id;
@@ -127,7 +126,6 @@ static irqreturn_t npower_button_handler(int irq, void *dev_id, struct pt_regs *
127 * This interrupt is only called when we release the key. So we have 126 * This interrupt is only called when we release the key. So we have
128 * to fake a key press. 127 * to fake a key press.
129 */ 128 */
130 input_regs(dev, regs);
131 input_report_key(dev, KEY_SUSPEND, 1); 129 input_report_key(dev, KEY_SUSPEND, 1);
132 input_report_key(dev, KEY_SUSPEND, down); 130 input_report_key(dev, KEY_SUSPEND, down);
133 input_sync(dev); 131 input_sync(dev);
@@ -165,14 +163,12 @@ unsigned int h3600_flite_power(struct input_dev *dev, enum flite_pwr pwr)
165 * packets. Some packets coming from serial are not touchscreen related. In 163 * packets. Some packets coming from serial are not touchscreen related. In
166 * this case we send them off to be processed elsewhere. 164 * this case we send them off to be processed elsewhere.
167 */ 165 */
168static void h3600ts_process_packet(struct h3600_dev *ts, struct pt_regs *regs) 166static void h3600ts_process_packet(struct h3600_dev *ts)
169{ 167{
170 struct input_dev *dev = ts->dev; 168 struct input_dev *dev = ts->dev;
171 static int touched = 0; 169 static int touched = 0;
172 int key, down = 0; 170 int key, down = 0;
173 171
174 input_regs(dev, regs);
175
176 switch (ts->event) { 172 switch (ts->event) {
177 /* 173 /*
178 Buttons - returned as a single byte 174 Buttons - returned as a single byte
@@ -301,7 +297,7 @@ static int state;
301#define STATE_EOF 3 /* state where we decode checksum or EOF */ 297#define STATE_EOF 3 /* state where we decode checksum or EOF */
302 298
303static irqreturn_t h3600ts_interrupt(struct serio *serio, unsigned char data, 299static irqreturn_t h3600ts_interrupt(struct serio *serio, unsigned char data,
304 unsigned int flags, struct pt_regs *regs) 300 unsigned int flags)
305{ 301{
306 struct h3600_dev *ts = serio_get_drvdata(serio); 302 struct h3600_dev *ts = serio_get_drvdata(serio);
307 303
@@ -333,7 +329,7 @@ static irqreturn_t h3600ts_interrupt(struct serio *serio, unsigned char data,
333 case STATE_EOF: 329 case STATE_EOF:
334 state = STATE_SOF; 330 state = STATE_SOF;
335 if (data == CHAR_EOF || data == ts->chksum) 331 if (data == CHAR_EOF || data == ts->chksum)
336 h3600ts_process_packet(ts, regs); 332 h3600ts_process_packet(ts);
337 break; 333 break;
338 default: 334 default:
339 printk("Error3\n"); 335 printk("Error3\n");
diff --git a/drivers/input/touchscreen/hp680_ts_input.c b/drivers/input/touchscreen/hp680_ts_input.c
index ee6c2f40cdf6..e31c6c55b2e2 100644
--- a/drivers/input/touchscreen/hp680_ts_input.c
+++ b/drivers/input/touchscreen/hp680_ts_input.c
@@ -66,7 +66,7 @@ static void do_softint(void *data)
66 enable_irq(HP680_TS_IRQ); 66 enable_irq(HP680_TS_IRQ);
67} 67}
68 68
69static irqreturn_t hp680_ts_interrupt(int irq, void *dev, struct pt_regs *regs) 69static irqreturn_t hp680_ts_interrupt(int irq, void *dev)
70{ 70{
71 disable_irq_nosync(irq); 71 disable_irq_nosync(irq);
72 schedule_delayed_work(&work, HZ / 20); 72 schedule_delayed_work(&work, HZ / 20);
diff --git a/drivers/input/touchscreen/mk712.c b/drivers/input/touchscreen/mk712.c
index 3226830eea08..4cbcaa6a71e5 100644
--- a/drivers/input/touchscreen/mk712.c
+++ b/drivers/input/touchscreen/mk712.c
@@ -80,7 +80,7 @@ MODULE_PARM_DESC(irq, "IRQ of MK712 touchscreen controller");
80static struct input_dev *mk712_dev; 80static struct input_dev *mk712_dev;
81static DEFINE_SPINLOCK(mk712_lock); 81static DEFINE_SPINLOCK(mk712_lock);
82 82
83static irqreturn_t mk712_interrupt(int irq, void *dev_id, struct pt_regs *regs) 83static irqreturn_t mk712_interrupt(int irq, void *dev_id)
84{ 84{
85 unsigned char status; 85 unsigned char status;
86 static int debounce = 1; 86 static int debounce = 1;
@@ -88,7 +88,6 @@ static irqreturn_t mk712_interrupt(int irq, void *dev_id, struct pt_regs *regs)
88 static unsigned short last_y; 88 static unsigned short last_y;
89 89
90 spin_lock(&mk712_lock); 90 spin_lock(&mk712_lock);
91 input_regs(mk712_dev, regs);
92 91
93 status = inb(mk712_io + MK712_STATUS); 92 status = inb(mk712_io + MK712_STATUS);
94 93
diff --git a/drivers/input/touchscreen/mtouch.c b/drivers/input/touchscreen/mtouch.c
index 8647a905df80..3b4c61664b63 100644
--- a/drivers/input/touchscreen/mtouch.c
+++ b/drivers/input/touchscreen/mtouch.c
@@ -63,12 +63,11 @@ struct mtouch {
63 char phys[32]; 63 char phys[32];
64}; 64};
65 65
66static void mtouch_process_format_tablet(struct mtouch *mtouch, struct pt_regs *regs) 66static void mtouch_process_format_tablet(struct mtouch *mtouch)
67{ 67{
68 struct input_dev *dev = mtouch->dev; 68 struct input_dev *dev = mtouch->dev;
69 69
70 if (MTOUCH_FORMAT_TABLET_LENGTH == ++mtouch->idx) { 70 if (MTOUCH_FORMAT_TABLET_LENGTH == ++mtouch->idx) {
71 input_regs(dev, regs);
72 input_report_abs(dev, ABS_X, MTOUCH_GET_XC(mtouch->data)); 71 input_report_abs(dev, ABS_X, MTOUCH_GET_XC(mtouch->data));
73 input_report_abs(dev, ABS_Y, MTOUCH_MAX_YC - MTOUCH_GET_YC(mtouch->data)); 72 input_report_abs(dev, ABS_Y, MTOUCH_MAX_YC - MTOUCH_GET_YC(mtouch->data));
74 input_report_key(dev, BTN_TOUCH, MTOUCH_GET_TOUCHED(mtouch->data)); 73 input_report_key(dev, BTN_TOUCH, MTOUCH_GET_TOUCHED(mtouch->data));
@@ -78,7 +77,7 @@ static void mtouch_process_format_tablet(struct mtouch *mtouch, struct pt_regs *
78 } 77 }
79} 78}
80 79
81static void mtouch_process_response(struct mtouch *mtouch, struct pt_regs *regs) 80static void mtouch_process_response(struct mtouch *mtouch)
82{ 81{
83 if (MTOUCH_RESPONSE_END_BYTE == mtouch->data[mtouch->idx++]) { 82 if (MTOUCH_RESPONSE_END_BYTE == mtouch->data[mtouch->idx++]) {
84 /* FIXME - process response */ 83 /* FIXME - process response */
@@ -90,16 +89,16 @@ static void mtouch_process_response(struct mtouch *mtouch, struct pt_regs *regs)
90} 89}
91 90
92static irqreturn_t mtouch_interrupt(struct serio *serio, 91static irqreturn_t mtouch_interrupt(struct serio *serio,
93 unsigned char data, unsigned int flags, struct pt_regs *regs) 92 unsigned char data, unsigned int flags)
94{ 93{
95 struct mtouch* mtouch = serio_get_drvdata(serio); 94 struct mtouch* mtouch = serio_get_drvdata(serio);
96 95
97 mtouch->data[mtouch->idx] = data; 96 mtouch->data[mtouch->idx] = data;
98 97
99 if (MTOUCH_FORMAT_TABLET_STATUS_BIT & mtouch->data[0]) 98 if (MTOUCH_FORMAT_TABLET_STATUS_BIT & mtouch->data[0])
100 mtouch_process_format_tablet(mtouch, regs); 99 mtouch_process_format_tablet(mtouch);
101 else if (MTOUCH_RESPONSE_BEGIN_BYTE == mtouch->data[0]) 100 else if (MTOUCH_RESPONSE_BEGIN_BYTE == mtouch->data[0])
102 mtouch_process_response(mtouch, regs); 101 mtouch_process_response(mtouch);
103 else 102 else
104 printk(KERN_DEBUG "mtouch.c: unknown/unsynchronized data from device, byte %x\n",mtouch->data[0]); 103 printk(KERN_DEBUG "mtouch.c: unknown/unsynchronized data from device, byte %x\n",mtouch->data[0]);
105 104
diff --git a/drivers/input/touchscreen/penmount.c b/drivers/input/touchscreen/penmount.c
index f7370109d43e..6c7d0c2c76cc 100644
--- a/drivers/input/touchscreen/penmount.c
+++ b/drivers/input/touchscreen/penmount.c
@@ -46,7 +46,7 @@ struct pm {
46}; 46};
47 47
48static irqreturn_t pm_interrupt(struct serio *serio, 48static irqreturn_t pm_interrupt(struct serio *serio,
49 unsigned char data, unsigned int flags, struct pt_regs *regs) 49 unsigned char data, unsigned int flags)
50{ 50{
51 struct pm *pm = serio_get_drvdata(serio); 51 struct pm *pm = serio_get_drvdata(serio);
52 struct input_dev *dev = pm->dev; 52 struct input_dev *dev = pm->dev;
@@ -55,7 +55,6 @@ static irqreturn_t pm_interrupt(struct serio *serio,
55 55
56 if (pm->data[0] & 0x80) { 56 if (pm->data[0] & 0x80) {
57 if (PM_MAX_LENGTH == ++pm->idx) { 57 if (PM_MAX_LENGTH == ++pm->idx) {
58 input_regs(dev, regs);
59 input_report_abs(dev, ABS_X, pm->data[2] * 128 + pm->data[1]); 58 input_report_abs(dev, ABS_X, pm->data[2] * 128 + pm->data[1]);
60 input_report_abs(dev, ABS_Y, pm->data[4] * 128 + pm->data[3]); 59 input_report_abs(dev, ABS_Y, pm->data[4] * 128 + pm->data[3]);
61 input_report_key(dev, BTN_TOUCH, !!(pm->data[0] & 0x40)); 60 input_report_key(dev, BTN_TOUCH, !!(pm->data[0] & 0x40));
diff --git a/drivers/input/touchscreen/touchright.c b/drivers/input/touchscreen/touchright.c
index 1c89fa538651..c74f74e57af0 100644
--- a/drivers/input/touchscreen/touchright.c
+++ b/drivers/input/touchscreen/touchright.c
@@ -56,7 +56,7 @@ struct tr {
56}; 56};
57 57
58static irqreturn_t tr_interrupt(struct serio *serio, 58static irqreturn_t tr_interrupt(struct serio *serio,
59 unsigned char data, unsigned int flags, struct pt_regs *regs) 59 unsigned char data, unsigned int flags)
60{ 60{
61 struct tr *tr = serio_get_drvdata(serio); 61 struct tr *tr = serio_get_drvdata(serio);
62 struct input_dev *dev = tr->dev; 62 struct input_dev *dev = tr->dev;
@@ -65,7 +65,6 @@ static irqreturn_t tr_interrupt(struct serio *serio,
65 65
66 if ((tr->data[0] & TR_FORMAT_STATUS_MASK) == TR_FORMAT_STATUS_BYTE) { 66 if ((tr->data[0] & TR_FORMAT_STATUS_MASK) == TR_FORMAT_STATUS_BYTE) {
67 if (++tr->idx == TR_LENGTH) { 67 if (++tr->idx == TR_LENGTH) {
68 input_regs(dev, regs);
69 input_report_abs(dev, ABS_X, 68 input_report_abs(dev, ABS_X,
70 (tr->data[1] << 5) | (tr->data[2] >> 1)); 69 (tr->data[1] << 5) | (tr->data[2] >> 1));
71 input_report_abs(dev, ABS_Y, 70 input_report_abs(dev, ABS_Y,
diff --git a/drivers/input/touchscreen/touchwin.c b/drivers/input/touchscreen/touchwin.c
index a7b4c755958e..9911820fa2fe 100644
--- a/drivers/input/touchscreen/touchwin.c
+++ b/drivers/input/touchscreen/touchwin.c
@@ -60,7 +60,7 @@ struct tw {
60}; 60};
61 61
62static irqreturn_t tw_interrupt(struct serio *serio, 62static irqreturn_t tw_interrupt(struct serio *serio,
63 unsigned char data, unsigned int flags, struct pt_regs *regs) 63 unsigned char data, unsigned int flags)
64{ 64{
65 struct tw *tw = serio_get_drvdata(serio); 65 struct tw *tw = serio_get_drvdata(serio);
66 struct input_dev *dev = tw->dev; 66 struct input_dev *dev = tw->dev;
@@ -70,7 +70,6 @@ static irqreturn_t tw_interrupt(struct serio *serio,
70 tw->data[tw->idx++] = data; 70 tw->data[tw->idx++] = data;
71 /* verify length and that the two Y's are the same */ 71 /* verify length and that the two Y's are the same */
72 if (tw->idx == TW_LENGTH && tw->data[1] == tw->data[2]) { 72 if (tw->idx == TW_LENGTH && tw->data[1] == tw->data[2]) {
73 input_regs(dev, regs);
74 input_report_abs(dev, ABS_X, tw->data[0]); 73 input_report_abs(dev, ABS_X, tw->data[0]);
75 input_report_abs(dev, ABS_Y, tw->data[1]); 74 input_report_abs(dev, ABS_Y, tw->data[1]);
76 input_report_key(dev, BTN_TOUCH, 1); 75 input_report_key(dev, BTN_TOUCH, 1);