xref: /linux/drivers/input/mouse/psmouse-base.c (revision ccea15f45eb0ab12d658f88b5d4be005cb2bb1a7)
1 /*
2  * PS/2 mouse driver
3  *
4  * Copyright (c) 1999-2002 Vojtech Pavlik
5  * Copyright (c) 2003-2004 Dmitry Torokhov
6  */
7 
8 /*
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU General Public License version 2 as published by
11  * the Free Software Foundation.
12  */
13 
14 #include <linux/delay.h>
15 #include <linux/module.h>
16 #include <linux/moduleparam.h>
17 #include <linux/slab.h>
18 #include <linux/interrupt.h>
19 #include <linux/input.h>
20 #include <linux/serio.h>
21 #include <linux/init.h>
22 #include <linux/libps2.h>
23 #include <linux/mutex.h>
24 
25 #include "psmouse.h"
26 #include "synaptics.h"
27 #include "logips2pp.h"
28 #include "alps.h"
29 #include "lifebook.h"
30 #include "trackpoint.h"
31 
32 #define DRIVER_DESC	"PS/2 mouse driver"
33 
34 MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
35 MODULE_DESCRIPTION(DRIVER_DESC);
36 MODULE_LICENSE("GPL");
37 
38 static unsigned int psmouse_max_proto = PSMOUSE_AUTO;
39 static int psmouse_set_maxproto(const char *val, struct kernel_param *kp);
40 static int psmouse_get_maxproto(char *buffer, struct kernel_param *kp);
41 #define param_check_proto_abbrev(name, p)	__param_check(name, p, unsigned int)
42 #define param_set_proto_abbrev			psmouse_set_maxproto
43 #define param_get_proto_abbrev			psmouse_get_maxproto
44 module_param_named(proto, psmouse_max_proto, proto_abbrev, 0644);
45 MODULE_PARM_DESC(proto, "Highest protocol extension to probe (bare, imps, exps, any). Useful for KVM switches.");
46 
47 static unsigned int psmouse_resolution = 200;
48 module_param_named(resolution, psmouse_resolution, uint, 0644);
49 MODULE_PARM_DESC(resolution, "Resolution, in dpi.");
50 
51 static unsigned int psmouse_rate = 100;
52 module_param_named(rate, psmouse_rate, uint, 0644);
53 MODULE_PARM_DESC(rate, "Report rate, in reports per second.");
54 
55 static unsigned int psmouse_smartscroll = 1;
56 module_param_named(smartscroll, psmouse_smartscroll, bool, 0644);
57 MODULE_PARM_DESC(smartscroll, "Logitech Smartscroll autorepeat, 1 = enabled (default), 0 = disabled.");
58 
59 static unsigned int psmouse_resetafter = 5;
60 module_param_named(resetafter, psmouse_resetafter, uint, 0644);
61 MODULE_PARM_DESC(resetafter, "Reset device after so many bad packets (0 = never).");
62 
63 static unsigned int psmouse_resync_time;
64 module_param_named(resync_time, psmouse_resync_time, uint, 0644);
65 MODULE_PARM_DESC(resync_time, "How long can mouse stay idle before forcing resync (in seconds, 0 = never).");
66 
67 PSMOUSE_DEFINE_ATTR(protocol, S_IWUSR | S_IRUGO,
68 			NULL,
69 			psmouse_attr_show_protocol, psmouse_attr_set_protocol);
70 PSMOUSE_DEFINE_ATTR(rate, S_IWUSR | S_IRUGO,
71 			(void *) offsetof(struct psmouse, rate),
72 			psmouse_show_int_attr, psmouse_attr_set_rate);
73 PSMOUSE_DEFINE_ATTR(resolution, S_IWUSR | S_IRUGO,
74 			(void *) offsetof(struct psmouse, resolution),
75 			psmouse_show_int_attr, psmouse_attr_set_resolution);
76 PSMOUSE_DEFINE_ATTR(resetafter, S_IWUSR | S_IRUGO,
77 			(void *) offsetof(struct psmouse, resetafter),
78 			psmouse_show_int_attr, psmouse_set_int_attr);
79 PSMOUSE_DEFINE_ATTR(resync_time, S_IWUSR | S_IRUGO,
80 			(void *) offsetof(struct psmouse, resync_time),
81 			psmouse_show_int_attr, psmouse_set_int_attr);
82 
83 static struct attribute *psmouse_attributes[] = {
84 	&psmouse_attr_protocol.dattr.attr,
85 	&psmouse_attr_rate.dattr.attr,
86 	&psmouse_attr_resolution.dattr.attr,
87 	&psmouse_attr_resetafter.dattr.attr,
88 	&psmouse_attr_resync_time.dattr.attr,
89 	NULL
90 };
91 
92 static struct attribute_group psmouse_attribute_group = {
93 	.attrs	= psmouse_attributes,
94 };
95 
96 __obsolete_setup("psmouse_noext");
97 __obsolete_setup("psmouse_resolution=");
98 __obsolete_setup("psmouse_smartscroll=");
99 __obsolete_setup("psmouse_resetafter=");
100 __obsolete_setup("psmouse_rate=");
101 
102 /*
103  * psmouse_mutex protects all operations changing state of mouse
104  * (connecting, disconnecting, changing rate or resolution via
105  * sysfs). We could use a per-device semaphore but since there
106  * rarely more than one PS/2 mouse connected and since semaphore
107  * is taken in "slow" paths it is not worth it.
108  */
109 static DEFINE_MUTEX(psmouse_mutex);
110 
111 static struct workqueue_struct *kpsmoused_wq;
112 
113 struct psmouse_protocol {
114 	enum psmouse_type type;
115 	char *name;
116 	char *alias;
117 	int maxproto;
118 	int (*detect)(struct psmouse *, int);
119 	int (*init)(struct psmouse *);
120 };
121 
122 /*
123  * psmouse_process_byte() analyzes the PS/2 data stream and reports
124  * relevant events to the input module once full packet has arrived.
125  */
126 
127 static psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse, struct pt_regs *regs)
128 {
129 	struct input_dev *dev = psmouse->dev;
130 	unsigned char *packet = psmouse->packet;
131 
132 	if (psmouse->pktcnt < psmouse->pktsize)
133 		return PSMOUSE_GOOD_DATA;
134 
135 /*
136  * Full packet accumulated, process it
137  */
138 
139 	input_regs(dev, regs);
140 
141 /*
142  * Scroll wheel on IntelliMice, scroll buttons on NetMice
143  */
144 
145 	if (psmouse->type == PSMOUSE_IMPS || psmouse->type == PSMOUSE_GENPS)
146 		input_report_rel(dev, REL_WHEEL, -(signed char) packet[3]);
147 
148 /*
149  * Scroll wheel and buttons on IntelliMouse Explorer
150  */
151 
152 	if (psmouse->type == PSMOUSE_IMEX) {
153 		input_report_rel(dev, REL_WHEEL, (int) (packet[3] & 8) - (int) (packet[3] & 7));
154 		input_report_key(dev, BTN_SIDE, (packet[3] >> 4) & 1);
155 		input_report_key(dev, BTN_EXTRA, (packet[3] >> 5) & 1);
156 	}
157 
158 /*
159  * Extra buttons on Genius NewNet 3D
160  */
161 
162 	if (psmouse->type == PSMOUSE_GENPS) {
163 		input_report_key(dev, BTN_SIDE, (packet[0] >> 6) & 1);
164 		input_report_key(dev, BTN_EXTRA, (packet[0] >> 7) & 1);
165 	}
166 
167 /*
168  * Extra button on ThinkingMouse
169  */
170 	if (psmouse->type == PSMOUSE_THINKPS) {
171 		input_report_key(dev, BTN_EXTRA, (packet[0] >> 3) & 1);
172 		/* Without this bit of weirdness moving up gives wildly high Y changes. */
173 		packet[1] |= (packet[0] & 0x40) << 1;
174 	}
175 
176 /*
177  * Generic PS/2 Mouse
178  */
179 
180 	input_report_key(dev, BTN_LEFT,    packet[0]       & 1);
181 	input_report_key(dev, BTN_MIDDLE, (packet[0] >> 2) & 1);
182 	input_report_key(dev, BTN_RIGHT,  (packet[0] >> 1) & 1);
183 
184 	input_report_rel(dev, REL_X, packet[1] ? (int) packet[1] - (int) ((packet[0] << 4) & 0x100) : 0);
185 	input_report_rel(dev, REL_Y, packet[2] ? (int) ((packet[0] << 3) & 0x100) - (int) packet[2] : 0);
186 
187 	input_sync(dev);
188 
189 	return PSMOUSE_FULL_PACKET;
190 }
191 
192 /*
193  * __psmouse_set_state() sets new psmouse state and resets all flags.
194  */
195 
196 static inline void __psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state)
197 {
198 	psmouse->state = new_state;
199 	psmouse->pktcnt = psmouse->out_of_sync = 0;
200 	psmouse->ps2dev.flags = 0;
201 	psmouse->last = jiffies;
202 }
203 
204 
205 /*
206  * psmouse_set_state() sets new psmouse state and resets all flags and
207  * counters while holding serio lock so fighting with interrupt handler
208  * is not a concern.
209  */
210 
211 static void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state)
212 {
213 	serio_pause_rx(psmouse->ps2dev.serio);
214 	__psmouse_set_state(psmouse, new_state);
215 	serio_continue_rx(psmouse->ps2dev.serio);
216 }
217 
218 /*
219  * psmouse_handle_byte() processes one byte of the input data stream
220  * by calling corresponding protocol handler.
221  */
222 
223 static int psmouse_handle_byte(struct psmouse *psmouse, struct pt_regs *regs)
224 {
225 	psmouse_ret_t rc = psmouse->protocol_handler(psmouse, regs);
226 
227 	switch (rc) {
228 		case PSMOUSE_BAD_DATA:
229 			if (psmouse->state == PSMOUSE_ACTIVATED) {
230 				printk(KERN_WARNING "psmouse.c: %s at %s lost sync at byte %d\n",
231 					psmouse->name, psmouse->phys, psmouse->pktcnt);
232 				if (++psmouse->out_of_sync == psmouse->resetafter) {
233 					__psmouse_set_state(psmouse, PSMOUSE_IGNORE);
234 					printk(KERN_NOTICE "psmouse.c: issuing reconnect request\n");
235 					serio_reconnect(psmouse->ps2dev.serio);
236 					return -1;
237 				}
238 			}
239 			psmouse->pktcnt = 0;
240 			break;
241 
242 		case PSMOUSE_FULL_PACKET:
243 			psmouse->pktcnt = 0;
244 			if (psmouse->out_of_sync) {
245 				psmouse->out_of_sync = 0;
246 				printk(KERN_NOTICE "psmouse.c: %s at %s - driver resynched.\n",
247 					psmouse->name, psmouse->phys);
248 			}
249 			break;
250 
251 		case PSMOUSE_GOOD_DATA:
252 			break;
253 	}
254 	return 0;
255 }
256 
257 /*
258  * psmouse_interrupt() handles incoming characters, either passing them
259  * for normal processing or gathering them as command response.
260  */
261 
262 static irqreturn_t psmouse_interrupt(struct serio *serio,
263 		unsigned char data, unsigned int flags, struct pt_regs *regs)
264 {
265 	struct psmouse *psmouse = serio_get_drvdata(serio);
266 
267 	if (psmouse->state == PSMOUSE_IGNORE)
268 		goto out;
269 
270 	if (flags & (SERIO_PARITY|SERIO_TIMEOUT)) {
271 		if (psmouse->state == PSMOUSE_ACTIVATED)
272 			printk(KERN_WARNING "psmouse.c: bad data from KBC -%s%s\n",
273 				flags & SERIO_TIMEOUT ? " timeout" : "",
274 				flags & SERIO_PARITY ? " bad parity" : "");
275 		ps2_cmd_aborted(&psmouse->ps2dev);
276 		goto out;
277 	}
278 
279 	if (unlikely(psmouse->ps2dev.flags & PS2_FLAG_ACK))
280 		if  (ps2_handle_ack(&psmouse->ps2dev, data))
281 			goto out;
282 
283 	if (unlikely(psmouse->ps2dev.flags & PS2_FLAG_CMD))
284 		if  (ps2_handle_response(&psmouse->ps2dev, data))
285 			goto out;
286 
287 	if (psmouse->state <= PSMOUSE_RESYNCING)
288 		goto out;
289 
290 	if (psmouse->state == PSMOUSE_ACTIVATED &&
291 	    psmouse->pktcnt && time_after(jiffies, psmouse->last + HZ/2)) {
292 		printk(KERN_INFO "psmouse.c: %s at %s lost synchronization, throwing %d bytes away.\n",
293 		       psmouse->name, psmouse->phys, psmouse->pktcnt);
294 		psmouse->badbyte = psmouse->packet[0];
295 		__psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
296 		queue_work(kpsmoused_wq, &psmouse->resync_work);
297 		goto out;
298 	}
299 
300 	psmouse->packet[psmouse->pktcnt++] = data;
301 /*
302  * Check if this is a new device announcement (0xAA 0x00)
303  */
304 	if (unlikely(psmouse->packet[0] == PSMOUSE_RET_BAT && psmouse->pktcnt <= 2)) {
305 		if (psmouse->pktcnt == 1)
306 			goto out;
307 
308 		if (psmouse->packet[1] == PSMOUSE_RET_ID) {
309 			__psmouse_set_state(psmouse, PSMOUSE_IGNORE);
310 			serio_reconnect(serio);
311 			goto out;
312 		}
313 /*
314  * Not a new device, try processing first byte normally
315  */
316 		psmouse->pktcnt = 1;
317 		if (psmouse_handle_byte(psmouse, regs))
318 			goto out;
319 
320 		psmouse->packet[psmouse->pktcnt++] = data;
321 	}
322 
323 /*
324  * See if we need to force resync because mouse was idle for too long
325  */
326 	if (psmouse->state == PSMOUSE_ACTIVATED &&
327 	    psmouse->pktcnt == 1 && psmouse->resync_time &&
328 	    time_after(jiffies, psmouse->last + psmouse->resync_time * HZ)) {
329 		psmouse->badbyte = psmouse->packet[0];
330 		__psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
331 		queue_work(kpsmoused_wq, &psmouse->resync_work);
332 		goto out;
333 	}
334 
335 	psmouse->last = jiffies;
336 	psmouse_handle_byte(psmouse, regs);
337 
338  out:
339 	return IRQ_HANDLED;
340 }
341 
342 
343 /*
344  * psmouse_sliced_command() sends an extended PS/2 command to the mouse
345  * using sliced syntax, understood by advanced devices, such as Logitech
346  * or Synaptics touchpads. The command is encoded as:
347  * 0xE6 0xE8 rr 0xE8 ss 0xE8 tt 0xE8 uu where (rr*64)+(ss*16)+(tt*4)+uu
348  * is the command.
349  */
350 int psmouse_sliced_command(struct psmouse *psmouse, unsigned char command)
351 {
352 	int i;
353 
354 	if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11))
355 		return -1;
356 
357 	for (i = 6; i >= 0; i -= 2) {
358 		unsigned char d = (command >> i) & 3;
359 		if (ps2_command(&psmouse->ps2dev, &d, PSMOUSE_CMD_SETRES))
360 			return -1;
361 	}
362 
363 	return 0;
364 }
365 
366 
367 /*
368  * psmouse_reset() resets the mouse into power-on state.
369  */
370 int psmouse_reset(struct psmouse *psmouse)
371 {
372 	unsigned char param[2];
373 
374 	if (ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_RESET_BAT))
375 		return -1;
376 
377 	if (param[0] != PSMOUSE_RET_BAT && param[1] != PSMOUSE_RET_ID)
378 		return -1;
379 
380 	return 0;
381 }
382 
383 
384 /*
385  * Genius NetMouse magic init.
386  */
387 static int genius_detect(struct psmouse *psmouse, int set_properties)
388 {
389 	struct ps2dev *ps2dev = &psmouse->ps2dev;
390 	unsigned char param[4];
391 
392 	param[0] = 3;
393 	ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);
394 	ps2_command(ps2dev,  NULL, PSMOUSE_CMD_SETSCALE11);
395 	ps2_command(ps2dev,  NULL, PSMOUSE_CMD_SETSCALE11);
396 	ps2_command(ps2dev,  NULL, PSMOUSE_CMD_SETSCALE11);
397 	ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO);
398 
399 	if (param[0] != 0x00 || param[1] != 0x33 || param[2] != 0x55)
400 		return -1;
401 
402 	if (set_properties) {
403 		set_bit(BTN_EXTRA, psmouse->dev->keybit);
404 		set_bit(BTN_SIDE, psmouse->dev->keybit);
405 		set_bit(REL_WHEEL, psmouse->dev->relbit);
406 
407 		psmouse->vendor = "Genius";
408 		psmouse->name = "Mouse";
409 		psmouse->pktsize = 4;
410 	}
411 
412 	return 0;
413 }
414 
415 /*
416  * IntelliMouse magic init.
417  */
418 static int intellimouse_detect(struct psmouse *psmouse, int set_properties)
419 {
420 	struct ps2dev *ps2dev = &psmouse->ps2dev;
421 	unsigned char param[2];
422 
423 	param[0] = 200;
424 	ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE);
425 	param[0] = 100;
426 	ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE);
427 	param[0] =  80;
428 	ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE);
429 	ps2_command(ps2dev, param, PSMOUSE_CMD_GETID);
430 
431 	if (param[0] != 3)
432 		return -1;
433 
434 	if (set_properties) {
435 		set_bit(BTN_MIDDLE, psmouse->dev->keybit);
436 		set_bit(REL_WHEEL, psmouse->dev->relbit);
437 
438 		if (!psmouse->vendor) psmouse->vendor = "Generic";
439 		if (!psmouse->name) psmouse->name = "Wheel Mouse";
440 		psmouse->pktsize = 4;
441 	}
442 
443 	return 0;
444 }
445 
446 /*
447  * Try IntelliMouse/Explorer magic init.
448  */
449 static int im_explorer_detect(struct psmouse *psmouse, int set_properties)
450 {
451 	struct ps2dev *ps2dev = &psmouse->ps2dev;
452 	unsigned char param[2];
453 
454 	intellimouse_detect(psmouse, 0);
455 
456 	param[0] = 200;
457 	ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE);
458 	param[0] = 200;
459 	ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE);
460 	param[0] =  80;
461 	ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE);
462 	ps2_command(ps2dev, param, PSMOUSE_CMD_GETID);
463 
464 	if (param[0] != 4)
465 		return -1;
466 
467 	if (set_properties) {
468 		set_bit(BTN_MIDDLE, psmouse->dev->keybit);
469 		set_bit(REL_WHEEL, psmouse->dev->relbit);
470 		set_bit(BTN_SIDE, psmouse->dev->keybit);
471 		set_bit(BTN_EXTRA, psmouse->dev->keybit);
472 
473 		if (!psmouse->vendor) psmouse->vendor = "Generic";
474 		if (!psmouse->name) psmouse->name = "Explorer Mouse";
475 		psmouse->pktsize = 4;
476 	}
477 
478 	return 0;
479 }
480 
481 /*
482  * Kensington ThinkingMouse / ExpertMouse magic init.
483  */
484 static int thinking_detect(struct psmouse *psmouse, int set_properties)
485 {
486 	struct ps2dev *ps2dev = &psmouse->ps2dev;
487 	unsigned char param[2];
488 	unsigned char seq[] = { 20, 60, 40, 20, 20, 60, 40, 20, 20, 0 };
489 	int i;
490 
491 	param[0] = 10;
492 	ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE);
493 	param[0] = 0;
494 	ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);
495 	for (i = 0; seq[i]; i++)
496 		ps2_command(ps2dev, seq + i, PSMOUSE_CMD_SETRATE);
497 	ps2_command(ps2dev, param, PSMOUSE_CMD_GETID);
498 
499 	if (param[0] != 2)
500 		return -1;
501 
502 	if (set_properties) {
503 		set_bit(BTN_EXTRA, psmouse->dev->keybit);
504 
505 		psmouse->vendor = "Kensington";
506 		psmouse->name = "ThinkingMouse";
507 	}
508 
509 	return 0;
510 }
511 
512 /*
513  * Bare PS/2 protocol "detection". Always succeeds.
514  */
515 static int ps2bare_detect(struct psmouse *psmouse, int set_properties)
516 {
517 	if (set_properties) {
518 		if (!psmouse->vendor) psmouse->vendor = "Generic";
519 		if (!psmouse->name) psmouse->name = "Mouse";
520 	}
521 
522 	return 0;
523 }
524 
525 
526 /*
527  * psmouse_extensions() probes for any extensions to the basic PS/2 protocol
528  * the mouse may have.
529  */
530 
531 static int psmouse_extensions(struct psmouse *psmouse,
532 			      unsigned int max_proto, int set_properties)
533 {
534 	int synaptics_hardware = 0;
535 
536 /*
537  * We always check for lifebook because it does not disturb mouse
538  * (it only checks DMI information).
539  */
540 	if (lifebook_detect(psmouse, set_properties) == 0) {
541 		if (max_proto > PSMOUSE_IMEX) {
542 			if (!set_properties || lifebook_init(psmouse) == 0)
543 				return PSMOUSE_LIFEBOOK;
544 		}
545 	}
546 
547 /*
548  * Try Kensington ThinkingMouse (we try first, because synaptics probe
549  * upsets the thinkingmouse).
550  */
551 
552 	if (max_proto > PSMOUSE_IMEX && thinking_detect(psmouse, set_properties) == 0)
553 		return PSMOUSE_THINKPS;
554 
555 /*
556  * Try Synaptics TouchPad
557  */
558 	if (max_proto > PSMOUSE_PS2 && synaptics_detect(psmouse, set_properties) == 0) {
559 		synaptics_hardware = 1;
560 
561 		if (max_proto > PSMOUSE_IMEX) {
562 			if (!set_properties || synaptics_init(psmouse) == 0)
563 				return PSMOUSE_SYNAPTICS;
564 /*
565  * Some Synaptics touchpads can emulate extended protocols (like IMPS/2).
566  * Unfortunately Logitech/Genius probes confuse some firmware versions so
567  * we'll have to skip them.
568  */
569 			max_proto = PSMOUSE_IMEX;
570 		}
571 /*
572  * Make sure that touchpad is in relative mode, gestures (taps) are enabled
573  */
574 		synaptics_reset(psmouse);
575 	}
576 
577 /*
578  * Try ALPS TouchPad
579  */
580 	if (max_proto > PSMOUSE_IMEX) {
581 		ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
582 		if (alps_detect(psmouse, set_properties) == 0) {
583 			if (!set_properties || alps_init(psmouse) == 0)
584 				return PSMOUSE_ALPS;
585 /*
586  * Init failed, try basic relative protocols
587  */
588 			max_proto = PSMOUSE_IMEX;
589 		}
590 	}
591 
592 	if (max_proto > PSMOUSE_IMEX && genius_detect(psmouse, set_properties) == 0)
593 		return PSMOUSE_GENPS;
594 
595 	if (max_proto > PSMOUSE_IMEX && ps2pp_init(psmouse, set_properties) == 0)
596 		return PSMOUSE_PS2PP;
597 
598 	if (max_proto > PSMOUSE_IMEX && trackpoint_detect(psmouse, set_properties) == 0)
599 		return PSMOUSE_TRACKPOINT;
600 
601 /*
602  * Reset to defaults in case the device got confused by extended
603  * protocol probes. Note that we do full reset becuase some mice
604  * put themselves to sleep when see PSMOUSE_RESET_DIS.
605  */
606 	psmouse_reset(psmouse);
607 
608 	if (max_proto >= PSMOUSE_IMEX && im_explorer_detect(psmouse, set_properties) == 0)
609 		return PSMOUSE_IMEX;
610 
611 	if (max_proto >= PSMOUSE_IMPS && intellimouse_detect(psmouse, set_properties) == 0)
612 		return PSMOUSE_IMPS;
613 
614 /*
615  * Okay, all failed, we have a standard mouse here. The number of the buttons
616  * is still a question, though. We assume 3.
617  */
618 	ps2bare_detect(psmouse, set_properties);
619 
620 	if (synaptics_hardware) {
621 /*
622  * We detected Synaptics hardware but it did not respond to IMPS/2 probes.
623  * We need to reset the touchpad because if there is a track point on the
624  * pass through port it could get disabled while probing for protocol
625  * extensions.
626  */
627 		psmouse_reset(psmouse);
628 	}
629 
630 	return PSMOUSE_PS2;
631 }
632 
633 static struct psmouse_protocol psmouse_protocols[] = {
634 	{
635 		.type		= PSMOUSE_PS2,
636 		.name		= "PS/2",
637 		.alias		= "bare",
638 		.maxproto	= 1,
639 		.detect		= ps2bare_detect,
640 	},
641 	{
642 		.type		= PSMOUSE_PS2PP,
643 		.name		= "PS2++",
644 		.alias		= "logitech",
645 		.detect		= ps2pp_init,
646 	},
647 	{
648 		.type		= PSMOUSE_THINKPS,
649 		.name		= "ThinkPS/2",
650 		.alias		= "thinkps",
651 		.detect		= thinking_detect,
652 	},
653 	{
654 		.type		= PSMOUSE_GENPS,
655 		.name		= "GenPS/2",
656 		.alias		= "genius",
657 		.detect		= genius_detect,
658 	},
659 	{
660 		.type		= PSMOUSE_IMPS,
661 		.name		= "ImPS/2",
662 		.alias		= "imps",
663 		.maxproto	= 1,
664 		.detect		= intellimouse_detect,
665 	},
666 	{
667 		.type		= PSMOUSE_IMEX,
668 		.name		= "ImExPS/2",
669 		.alias		= "exps",
670 		.maxproto	= 1,
671 		.detect		= im_explorer_detect,
672 	},
673 	{
674 		.type		= PSMOUSE_SYNAPTICS,
675 		.name		= "SynPS/2",
676 		.alias		= "synaptics",
677 		.detect		= synaptics_detect,
678 		.init		= synaptics_init,
679 	},
680 	{
681 		.type		= PSMOUSE_ALPS,
682 		.name		= "AlpsPS/2",
683 		.alias		= "alps",
684 		.detect		= alps_detect,
685 		.init		= alps_init,
686 	},
687 	{
688 		.type		= PSMOUSE_LIFEBOOK,
689 		.name		= "LBPS/2",
690 		.alias		= "lifebook",
691 		.init		= lifebook_init,
692 	},
693 	{
694 		.type		= PSMOUSE_TRACKPOINT,
695 		.name		= "TPPS/2",
696 		.alias		= "trackpoint",
697 		.detect		= trackpoint_detect,
698 	},
699 	{
700 		.type		= PSMOUSE_AUTO,
701 		.name		= "auto",
702 		.alias		= "any",
703 		.maxproto	= 1,
704 	},
705 };
706 
707 static struct psmouse_protocol *psmouse_protocol_by_type(enum psmouse_type type)
708 {
709 	int i;
710 
711 	for (i = 0; i < ARRAY_SIZE(psmouse_protocols); i++)
712 		if (psmouse_protocols[i].type == type)
713 			return &psmouse_protocols[i];
714 
715 	WARN_ON(1);
716 	return &psmouse_protocols[0];
717 }
718 
719 static struct psmouse_protocol *psmouse_protocol_by_name(const char *name, size_t len)
720 {
721 	struct psmouse_protocol *p;
722 	int i;
723 
724 	for (i = 0; i < ARRAY_SIZE(psmouse_protocols); i++) {
725 		p = &psmouse_protocols[i];
726 
727 		if ((strlen(p->name) == len && !strncmp(p->name, name, len)) ||
728 		    (strlen(p->alias) == len && !strncmp(p->alias, name, len)))
729 			return &psmouse_protocols[i];
730 	}
731 
732 	return NULL;
733 }
734 
735 
736 /*
737  * psmouse_probe() probes for a PS/2 mouse.
738  */
739 
740 static int psmouse_probe(struct psmouse *psmouse)
741 {
742 	struct ps2dev *ps2dev = &psmouse->ps2dev;
743 	unsigned char param[2];
744 
745 /*
746  * First, we check if it's a mouse. It should send 0x00 or 0x03
747  * in case of an IntelliMouse in 4-byte mode or 0x04 for IM Explorer.
748  * Sunrex K8561 IR Keyboard/Mouse reports 0xff on second and subsequent
749  * ID queries, probably due to a firmware bug.
750  */
751 
752 	param[0] = 0xa5;
753 	if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETID))
754 		return -1;
755 
756 	if (param[0] != 0x00 && param[0] != 0x03 &&
757 	    param[0] != 0x04 && param[0] != 0xff)
758 		return -1;
759 
760 /*
761  * Then we reset and disable the mouse so that it doesn't generate events.
762  */
763 
764 	if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_RESET_DIS))
765 		printk(KERN_WARNING "psmouse.c: Failed to reset mouse on %s\n", ps2dev->serio->phys);
766 
767 	return 0;
768 }
769 
770 /*
771  * Here we set the mouse resolution.
772  */
773 
774 void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution)
775 {
776 	unsigned char params[] = { 0, 1, 2, 2, 3 };
777 
778 	if (resolution == 0 || resolution > 200)
779 		resolution = 200;
780 
781 	ps2_command(&psmouse->ps2dev, &params[resolution / 50], PSMOUSE_CMD_SETRES);
782 	psmouse->resolution = 25 << params[resolution / 50];
783 }
784 
785 /*
786  * Here we set the mouse report rate.
787  */
788 
789 static void psmouse_set_rate(struct psmouse *psmouse, unsigned int rate)
790 {
791 	unsigned char rates[] = { 200, 100, 80, 60, 40, 20, 10, 0 };
792 	int i = 0;
793 
794 	while (rates[i] > rate) i++;
795 	ps2_command(&psmouse->ps2dev, &rates[i], PSMOUSE_CMD_SETRATE);
796 	psmouse->rate = rates[i];
797 }
798 
799 /*
800  * psmouse_initialize() initializes the mouse to a sane state.
801  */
802 
803 static void psmouse_initialize(struct psmouse *psmouse)
804 {
805 /*
806  * We set the mouse into streaming mode.
807  */
808 
809 	ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSTREAM);
810 
811 /*
812  * We set the mouse report rate, resolution and scaling.
813  */
814 
815 	if (psmouse_max_proto != PSMOUSE_PS2) {
816 		psmouse->set_rate(psmouse, psmouse->rate);
817 		psmouse->set_resolution(psmouse, psmouse->resolution);
818 		ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11);
819 	}
820 }
821 
822 /*
823  * psmouse_activate() enables the mouse so that we get motion reports from it.
824  */
825 
826 static void psmouse_activate(struct psmouse *psmouse)
827 {
828 	if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE))
829 		printk(KERN_WARNING "psmouse.c: Failed to enable mouse on %s\n",
830 			psmouse->ps2dev.serio->phys);
831 
832 	psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
833 }
834 
835 
836 /*
837  * psmouse_deactivate() puts the mouse into poll mode so that we don't get motion
838  * reports from it unless we explicitely request it.
839  */
840 
841 static void psmouse_deactivate(struct psmouse *psmouse)
842 {
843 	if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE))
844 		printk(KERN_WARNING "psmouse.c: Failed to deactivate mouse on %s\n",
845 			psmouse->ps2dev.serio->phys);
846 
847 	psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
848 }
849 
850 /*
851  * psmouse_poll() - default poll hanlder. Everyone except for ALPS uses it.
852  */
853 
854 static int psmouse_poll(struct psmouse *psmouse)
855 {
856 	return ps2_command(&psmouse->ps2dev, psmouse->packet,
857 			   PSMOUSE_CMD_POLL | (psmouse->pktsize << 8));
858 }
859 
860 
861 /*
862  * psmouse_resync() attempts to re-validate current protocol.
863  */
864 
865 static void psmouse_resync(void *p)
866 {
867 	struct psmouse *psmouse = p, *parent = NULL;
868 	struct serio *serio = psmouse->ps2dev.serio;
869 	psmouse_ret_t rc = PSMOUSE_GOOD_DATA;
870 	int failed = 0, enabled = 0;
871 	int i;
872 
873 	mutex_lock(&psmouse_mutex);
874 
875 	if (psmouse->state != PSMOUSE_RESYNCING)
876 		goto out;
877 
878 	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
879 		parent = serio_get_drvdata(serio->parent);
880 		psmouse_deactivate(parent);
881 	}
882 
883 /*
884  * Some mice don't ACK commands sent while they are in the middle of
885  * transmitting motion packet. To avoid delay we use ps2_sendbyte()
886  * instead of ps2_command() which would wait for 200ms for an ACK
887  * that may never come.
888  * As an additional quirk ALPS touchpads may not only forget to ACK
889  * disable command but will stop reporting taps, so if we see that
890  * mouse at least once ACKs disable we will do full reconnect if ACK
891  * is missing.
892  */
893 	psmouse->num_resyncs++;
894 
895 	if (ps2_sendbyte(&psmouse->ps2dev, PSMOUSE_CMD_DISABLE, 20)) {
896 		if (psmouse->num_resyncs < 3 || psmouse->acks_disable_command)
897 			failed = 1;
898 	} else
899 		psmouse->acks_disable_command = 1;
900 
901 /*
902  * Poll the mouse. If it was reset the packet will be shorter than
903  * psmouse->pktsize and ps2_command will fail. We do not expect and
904  * do not handle scenario when mouse "upgrades" its protocol while
905  * disconnected since it would require additional delay. If we ever
906  * see a mouse that does it we'll adjust the code.
907  */
908 	if (!failed) {
909 		if (psmouse->poll(psmouse))
910 			failed = 1;
911 		else {
912 			psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
913 			for (i = 0; i < psmouse->pktsize; i++) {
914 				psmouse->pktcnt++;
915 				rc = psmouse->protocol_handler(psmouse, NULL);
916 				if (rc != PSMOUSE_GOOD_DATA)
917 					break;
918 			}
919 			if (rc != PSMOUSE_FULL_PACKET)
920 				failed = 1;
921 			psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
922 		}
923 	}
924 /*
925  * Now try to enable mouse. We try to do that even if poll failed and also
926  * repeat our attempts 5 times, otherwise we may be left out with disabled
927  * mouse.
928  */
929 	for (i = 0; i < 5; i++) {
930 		if (!ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE)) {
931 			enabled = 1;
932 			break;
933 		}
934 		msleep(200);
935 	}
936 
937 	if (!enabled) {
938 		printk(KERN_WARNING "psmouse.c: failed to re-enable mouse on %s\n",
939 			psmouse->ps2dev.serio->phys);
940 		failed = 1;
941 	}
942 
943 	if (failed) {
944 		psmouse_set_state(psmouse, PSMOUSE_IGNORE);
945 		printk(KERN_INFO "psmouse.c: resync failed, issuing reconnect request\n");
946 		serio_reconnect(serio);
947 	} else
948 		psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
949 
950 	if (parent)
951 		psmouse_activate(parent);
952  out:
953 	mutex_unlock(&psmouse_mutex);
954 }
955 
956 /*
957  * psmouse_cleanup() resets the mouse into power-on state.
958  */
959 
960 static void psmouse_cleanup(struct serio *serio)
961 {
962 	struct psmouse *psmouse = serio_get_drvdata(serio);
963 
964 	psmouse_reset(psmouse);
965 }
966 
967 /*
968  * psmouse_disconnect() closes and frees.
969  */
970 
971 static void psmouse_disconnect(struct serio *serio)
972 {
973 	struct psmouse *psmouse, *parent = NULL;
974 
975 	psmouse = serio_get_drvdata(serio);
976 
977 	sysfs_remove_group(&serio->dev.kobj, &psmouse_attribute_group);
978 
979 	mutex_lock(&psmouse_mutex);
980 
981 	psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
982 
983 	/* make sure we don't have a resync in progress */
984 	mutex_unlock(&psmouse_mutex);
985 	flush_workqueue(kpsmoused_wq);
986 	mutex_lock(&psmouse_mutex);
987 
988 	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
989 		parent = serio_get_drvdata(serio->parent);
990 		psmouse_deactivate(parent);
991 	}
992 
993 	if (psmouse->disconnect)
994 		psmouse->disconnect(psmouse);
995 
996 	if (parent && parent->pt_deactivate)
997 		parent->pt_deactivate(parent);
998 
999 	psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1000 
1001 	serio_close(serio);
1002 	serio_set_drvdata(serio, NULL);
1003 	input_unregister_device(psmouse->dev);
1004 	kfree(psmouse);
1005 
1006 	if (parent)
1007 		psmouse_activate(parent);
1008 
1009 	mutex_unlock(&psmouse_mutex);
1010 }
1011 
1012 static int psmouse_switch_protocol(struct psmouse *psmouse, struct psmouse_protocol *proto)
1013 {
1014 	struct input_dev *input_dev = psmouse->dev;
1015 
1016 	input_dev->private = psmouse;
1017 	input_dev->cdev.dev = &psmouse->ps2dev.serio->dev;
1018 
1019 	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL);
1020 	input_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);
1021 	input_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y);
1022 
1023 	psmouse->set_rate = psmouse_set_rate;
1024 	psmouse->set_resolution = psmouse_set_resolution;
1025 	psmouse->poll = psmouse_poll;
1026 	psmouse->protocol_handler = psmouse_process_byte;
1027 	psmouse->pktsize = 3;
1028 
1029 	if (proto && (proto->detect || proto->init)) {
1030 		if (proto->detect && proto->detect(psmouse, 1) < 0)
1031 			return -1;
1032 
1033 		if (proto->init && proto->init(psmouse) < 0)
1034 			return -1;
1035 
1036 		psmouse->type = proto->type;
1037 	}
1038 	else
1039 		psmouse->type = psmouse_extensions(psmouse, psmouse_max_proto, 1);
1040 
1041 	/*
1042 	 * If mouse's packet size is 3 there is no point in polling the
1043 	 * device in hopes to detect protocol reset - we won't get less
1044 	 * than 3 bytes response anyhow.
1045 	 */
1046 	if (psmouse->pktsize == 3)
1047 		psmouse->resync_time = 0;
1048 
1049 	/*
1050 	 * Some smart KVMs fake response to POLL command returning just
1051 	 * 3 bytes and messing up our resync logic, so if initial poll
1052 	 * fails we won't try polling the device anymore. Hopefully
1053 	 * such KVM will maintain initially selected protocol.
1054 	 */
1055 	if (psmouse->resync_time && psmouse->poll(psmouse))
1056 		psmouse->resync_time = 0;
1057 
1058 	sprintf(psmouse->devname, "%s %s %s",
1059 		psmouse_protocol_by_type(psmouse->type)->name, psmouse->vendor, psmouse->name);
1060 
1061 	input_dev->name = psmouse->devname;
1062 	input_dev->phys = psmouse->phys;
1063 	input_dev->id.bustype = BUS_I8042;
1064 	input_dev->id.vendor = 0x0002;
1065 	input_dev->id.product = psmouse->type;
1066 	input_dev->id.version = psmouse->model;
1067 
1068 	return 0;
1069 }
1070 
1071 /*
1072  * psmouse_connect() is a callback from the serio module when
1073  * an unhandled serio port is found.
1074  */
1075 static int psmouse_connect(struct serio *serio, struct serio_driver *drv)
1076 {
1077 	struct psmouse *psmouse, *parent = NULL;
1078 	struct input_dev *input_dev;
1079 	int retval = -ENOMEM;
1080 
1081 	mutex_lock(&psmouse_mutex);
1082 
1083 	/*
1084 	 * If this is a pass-through port deactivate parent so the device
1085 	 * connected to this port can be successfully identified
1086 	 */
1087 	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
1088 		parent = serio_get_drvdata(serio->parent);
1089 		psmouse_deactivate(parent);
1090 	}
1091 
1092 	psmouse = kzalloc(sizeof(struct psmouse), GFP_KERNEL);
1093 	input_dev = input_allocate_device();
1094 	if (!psmouse || !input_dev)
1095 		goto out;
1096 
1097 	ps2_init(&psmouse->ps2dev, serio);
1098 	INIT_WORK(&psmouse->resync_work, psmouse_resync, psmouse);
1099 	psmouse->dev = input_dev;
1100 	sprintf(psmouse->phys, "%s/input0", serio->phys);
1101 
1102 	psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1103 
1104 	serio_set_drvdata(serio, psmouse);
1105 
1106 	retval = serio_open(serio, drv);
1107 	if (retval)
1108 		goto out;
1109 
1110 	if (psmouse_probe(psmouse) < 0) {
1111 		serio_close(serio);
1112 		retval = -ENODEV;
1113 		goto out;
1114 	}
1115 
1116 	psmouse->rate = psmouse_rate;
1117 	psmouse->resolution = psmouse_resolution;
1118 	psmouse->resetafter = psmouse_resetafter;
1119 	psmouse->resync_time = parent ? 0 : psmouse_resync_time;
1120 	psmouse->smartscroll = psmouse_smartscroll;
1121 
1122 	psmouse_switch_protocol(psmouse, NULL);
1123 
1124 	psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1125 	psmouse_initialize(psmouse);
1126 
1127 	input_register_device(psmouse->dev);
1128 
1129 	if (parent && parent->pt_activate)
1130 		parent->pt_activate(parent);
1131 
1132 	sysfs_create_group(&serio->dev.kobj, &psmouse_attribute_group);
1133 
1134 	psmouse_activate(psmouse);
1135 
1136 	retval = 0;
1137 
1138 out:
1139 	if (retval) {
1140 		serio_set_drvdata(serio, NULL);
1141 		input_free_device(input_dev);
1142 		kfree(psmouse);
1143 	}
1144 
1145 	/* If this is a pass-through port the parent needs to be re-activated */
1146 	if (parent)
1147 		psmouse_activate(parent);
1148 
1149 	mutex_unlock(&psmouse_mutex);
1150 	return retval;
1151 }
1152 
1153 
1154 static int psmouse_reconnect(struct serio *serio)
1155 {
1156 	struct psmouse *psmouse = serio_get_drvdata(serio);
1157 	struct psmouse *parent = NULL;
1158 	struct serio_driver *drv = serio->drv;
1159 	int rc = -1;
1160 
1161 	if (!drv || !psmouse) {
1162 		printk(KERN_DEBUG "psmouse: reconnect request, but serio is disconnected, ignoring...\n");
1163 		return -1;
1164 	}
1165 
1166 	mutex_lock(&psmouse_mutex);
1167 
1168 	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
1169 		parent = serio_get_drvdata(serio->parent);
1170 		psmouse_deactivate(parent);
1171 	}
1172 
1173 	psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1174 
1175 	if (psmouse->reconnect) {
1176 		if (psmouse->reconnect(psmouse))
1177 			goto out;
1178 	} else if (psmouse_probe(psmouse) < 0 ||
1179 		   psmouse->type != psmouse_extensions(psmouse, psmouse_max_proto, 0))
1180 		goto out;
1181 
1182 	/* ok, the device type (and capabilities) match the old one,
1183 	 * we can continue using it, complete intialization
1184 	 */
1185 	psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1186 
1187 	psmouse_initialize(psmouse);
1188 
1189 	if (parent && parent->pt_activate)
1190 		parent->pt_activate(parent);
1191 
1192 	psmouse_activate(psmouse);
1193 	rc = 0;
1194 
1195 out:
1196 	/* If this is a pass-through port the parent waits to be activated */
1197 	if (parent)
1198 		psmouse_activate(parent);
1199 
1200 	mutex_unlock(&psmouse_mutex);
1201 	return rc;
1202 }
1203 
1204 static struct serio_device_id psmouse_serio_ids[] = {
1205 	{
1206 		.type	= SERIO_8042,
1207 		.proto	= SERIO_ANY,
1208 		.id	= SERIO_ANY,
1209 		.extra	= SERIO_ANY,
1210 	},
1211 	{
1212 		.type	= SERIO_PS_PSTHRU,
1213 		.proto	= SERIO_ANY,
1214 		.id	= SERIO_ANY,
1215 		.extra	= SERIO_ANY,
1216 	},
1217 	{ 0 }
1218 };
1219 
1220 MODULE_DEVICE_TABLE(serio, psmouse_serio_ids);
1221 
1222 static struct serio_driver psmouse_drv = {
1223 	.driver		= {
1224 		.name	= "psmouse",
1225 	},
1226 	.description	= DRIVER_DESC,
1227 	.id_table	= psmouse_serio_ids,
1228 	.interrupt	= psmouse_interrupt,
1229 	.connect	= psmouse_connect,
1230 	.reconnect	= psmouse_reconnect,
1231 	.disconnect	= psmouse_disconnect,
1232 	.cleanup	= psmouse_cleanup,
1233 };
1234 
1235 ssize_t psmouse_attr_show_helper(struct device *dev, struct device_attribute *devattr,
1236 				 char *buf)
1237 {
1238 	struct serio *serio = to_serio_port(dev);
1239 	struct psmouse_attribute *attr = to_psmouse_attr(devattr);
1240 	struct psmouse *psmouse;
1241 	int retval;
1242 
1243 	retval = serio_pin_driver(serio);
1244 	if (retval)
1245 		return retval;
1246 
1247 	if (serio->drv != &psmouse_drv) {
1248 		retval = -ENODEV;
1249 		goto out;
1250 	}
1251 
1252 	psmouse = serio_get_drvdata(serio);
1253 
1254 	retval = attr->show(psmouse, attr->data, buf);
1255 
1256 out:
1257 	serio_unpin_driver(serio);
1258 	return retval;
1259 }
1260 
1261 ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *devattr,
1262 				const char *buf, size_t count)
1263 {
1264 	struct serio *serio = to_serio_port(dev);
1265 	struct psmouse_attribute *attr = to_psmouse_attr(devattr);
1266 	struct psmouse *psmouse, *parent = NULL;
1267 	int retval;
1268 
1269 	retval = serio_pin_driver(serio);
1270 	if (retval)
1271 		return retval;
1272 
1273 	if (serio->drv != &psmouse_drv) {
1274 		retval = -ENODEV;
1275 		goto out_unpin;
1276 	}
1277 
1278 	retval = mutex_lock_interruptible(&psmouse_mutex);
1279 	if (retval)
1280 		goto out_unpin;
1281 
1282 	psmouse = serio_get_drvdata(serio);
1283 
1284 	if (psmouse->state == PSMOUSE_IGNORE) {
1285 		retval = -ENODEV;
1286 		goto out_unlock;
1287 	}
1288 
1289 	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
1290 		parent = serio_get_drvdata(serio->parent);
1291 		psmouse_deactivate(parent);
1292 	}
1293 
1294 	psmouse_deactivate(psmouse);
1295 
1296 	retval = attr->set(psmouse, attr->data, buf, count);
1297 
1298 	if (retval != -ENODEV)
1299 		psmouse_activate(psmouse);
1300 
1301 	if (parent)
1302 		psmouse_activate(parent);
1303 
1304  out_unlock:
1305 	mutex_unlock(&psmouse_mutex);
1306  out_unpin:
1307 	serio_unpin_driver(serio);
1308 	return retval;
1309 }
1310 
1311 static ssize_t psmouse_show_int_attr(struct psmouse *psmouse, void *offset, char *buf)
1312 {
1313 	unsigned long *field = (unsigned long *)((char *)psmouse + (size_t)offset);
1314 
1315 	return sprintf(buf, "%lu\n", *field);
1316 }
1317 
1318 static ssize_t psmouse_set_int_attr(struct psmouse *psmouse, void *offset, const char *buf, size_t count)
1319 {
1320 	unsigned long *field = (unsigned long *)((char *)psmouse + (size_t)offset);
1321 	unsigned long value;
1322 	char *rest;
1323 
1324 	value = simple_strtoul(buf, &rest, 10);
1325 	if (*rest)
1326 		return -EINVAL;
1327 
1328 	*field = value;
1329 
1330 	return count;
1331 }
1332 
1333 static ssize_t psmouse_attr_show_protocol(struct psmouse *psmouse, void *data, char *buf)
1334 {
1335 	return sprintf(buf, "%s\n", psmouse_protocol_by_type(psmouse->type)->name);
1336 }
1337 
1338 static ssize_t psmouse_attr_set_protocol(struct psmouse *psmouse, void *data, const char *buf, size_t count)
1339 {
1340 	struct serio *serio = psmouse->ps2dev.serio;
1341 	struct psmouse *parent = NULL;
1342 	struct input_dev *new_dev;
1343 	struct psmouse_protocol *proto;
1344 	int retry = 0;
1345 
1346 	if (!(proto = psmouse_protocol_by_name(buf, count)))
1347 		return -EINVAL;
1348 
1349 	if (psmouse->type == proto->type)
1350 		return count;
1351 
1352 	if (!(new_dev = input_allocate_device()))
1353 		return -ENOMEM;
1354 
1355 	while (serio->child) {
1356 		if (++retry > 3) {
1357 			printk(KERN_WARNING "psmouse: failed to destroy child port, protocol change aborted.\n");
1358 			input_free_device(new_dev);
1359 			return -EIO;
1360 		}
1361 
1362 		mutex_unlock(&psmouse_mutex);
1363 		serio_unpin_driver(serio);
1364 		serio_unregister_child_port(serio);
1365 		serio_pin_driver_uninterruptible(serio);
1366 		mutex_lock(&psmouse_mutex);
1367 
1368 		if (serio->drv != &psmouse_drv) {
1369 			input_free_device(new_dev);
1370 			return -ENODEV;
1371 		}
1372 
1373 		if (psmouse->type == proto->type) {
1374 			input_free_device(new_dev);
1375 			return count; /* switched by other thread */
1376 		}
1377 	}
1378 
1379 	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
1380 		parent = serio_get_drvdata(serio->parent);
1381 		if (parent->pt_deactivate)
1382 			parent->pt_deactivate(parent);
1383 	}
1384 
1385 	if (psmouse->disconnect)
1386 		psmouse->disconnect(psmouse);
1387 
1388 	psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1389 	input_unregister_device(psmouse->dev);
1390 
1391 	psmouse->dev = new_dev;
1392 	psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1393 
1394 	if (psmouse_switch_protocol(psmouse, proto) < 0) {
1395 		psmouse_reset(psmouse);
1396 		/* default to PSMOUSE_PS2 */
1397 		psmouse_switch_protocol(psmouse, &psmouse_protocols[0]);
1398 	}
1399 
1400 	psmouse_initialize(psmouse);
1401 	psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1402 
1403 	input_register_device(psmouse->dev);
1404 
1405 	if (parent && parent->pt_activate)
1406 		parent->pt_activate(parent);
1407 
1408 	return count;
1409 }
1410 
1411 static ssize_t psmouse_attr_set_rate(struct psmouse *psmouse, void *data, const char *buf, size_t count)
1412 {
1413 	unsigned long value;
1414 	char *rest;
1415 
1416 	value = simple_strtoul(buf, &rest, 10);
1417 	if (*rest)
1418 		return -EINVAL;
1419 
1420 	psmouse->set_rate(psmouse, value);
1421 	return count;
1422 }
1423 
1424 static ssize_t psmouse_attr_set_resolution(struct psmouse *psmouse, void *data, const char *buf, size_t count)
1425 {
1426 	unsigned long value;
1427 	char *rest;
1428 
1429 	value = simple_strtoul(buf, &rest, 10);
1430 	if (*rest)
1431 		return -EINVAL;
1432 
1433 	psmouse->set_resolution(psmouse, value);
1434 	return count;
1435 }
1436 
1437 
1438 static int psmouse_set_maxproto(const char *val, struct kernel_param *kp)
1439 {
1440 	struct psmouse_protocol *proto;
1441 
1442 	if (!val)
1443 		return -EINVAL;
1444 
1445 	proto = psmouse_protocol_by_name(val, strlen(val));
1446 
1447 	if (!proto || !proto->maxproto)
1448 		return -EINVAL;
1449 
1450 	*((unsigned int *)kp->arg) = proto->type;
1451 
1452 	return 0;
1453 }
1454 
1455 static int psmouse_get_maxproto(char *buffer, struct kernel_param *kp)
1456 {
1457 	int type = *((unsigned int *)kp->arg);
1458 
1459 	return sprintf(buffer, "%s\n", psmouse_protocol_by_type(type)->name);
1460 }
1461 
1462 static int __init psmouse_init(void)
1463 {
1464 	kpsmoused_wq = create_singlethread_workqueue("kpsmoused");
1465 	if (!kpsmoused_wq) {
1466 		printk(KERN_ERR "psmouse: failed to create kpsmoused workqueue\n");
1467 		return -ENOMEM;
1468 	}
1469 
1470 	serio_register_driver(&psmouse_drv);
1471 
1472 	return 0;
1473 }
1474 
1475 static void __exit psmouse_exit(void)
1476 {
1477 	serio_unregister_driver(&psmouse_drv);
1478 	destroy_workqueue(kpsmoused_wq);
1479 }
1480 
1481 module_init(psmouse_init);
1482 module_exit(psmouse_exit);
1483