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