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