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