GNU Linux-libre 4.19.245-gnu1
[releases.git] / drivers / input / serio / libps2.c
1 /*
2  * PS/2 driver library
3  *
4  * Copyright (c) 1999-2002 Vojtech Pavlik
5  * Copyright (c) 2004 Dmitry Torokhov
6  */
7
8 /*
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU General Public License version 2 as published by
11  * the Free Software Foundation.
12  */
13
14 #include <linux/delay.h>
15 #include <linux/module.h>
16 #include <linux/sched.h>
17 #include <linux/interrupt.h>
18 #include <linux/input.h>
19 #include <linux/serio.h>
20 #include <linux/i8042.h>
21 #include <linux/libps2.h>
22
23 #define DRIVER_DESC     "PS/2 driver library"
24
25 MODULE_AUTHOR("Dmitry Torokhov <dtor@mail.ru>");
26 MODULE_DESCRIPTION("PS/2 driver library");
27 MODULE_LICENSE("GPL");
28
29 static int ps2_do_sendbyte(struct ps2dev *ps2dev, u8 byte,
30                            unsigned int timeout, unsigned int max_attempts)
31         __releases(&ps2dev->serio->lock) __acquires(&ps2dev->serio->lock)
32 {
33         int attempt = 0;
34         int error;
35
36         lockdep_assert_held(&ps2dev->serio->lock);
37
38         do {
39                 ps2dev->nak = 1;
40                 ps2dev->flags |= PS2_FLAG_ACK;
41
42                 serio_continue_rx(ps2dev->serio);
43
44                 error = serio_write(ps2dev->serio, byte);
45                 if (error)
46                         dev_dbg(&ps2dev->serio->dev,
47                                 "failed to write %#02x: %d\n", byte, error);
48                 else
49                         wait_event_timeout(ps2dev->wait,
50                                            !(ps2dev->flags & PS2_FLAG_ACK),
51                                            msecs_to_jiffies(timeout));
52
53                 serio_pause_rx(ps2dev->serio);
54         } while (ps2dev->nak == PS2_RET_NAK && ++attempt < max_attempts);
55
56         ps2dev->flags &= ~PS2_FLAG_ACK;
57
58         if (!error) {
59                 switch (ps2dev->nak) {
60                 case 0:
61                         break;
62                 case PS2_RET_NAK:
63                         error = -EAGAIN;
64                         break;
65                 case PS2_RET_ERR:
66                         error = -EPROTO;
67                         break;
68                 default:
69                         error = -EIO;
70                         break;
71                 }
72         }
73
74         if (error || attempt > 1)
75                 dev_dbg(&ps2dev->serio->dev,
76                         "%02x - %d (%x), attempt %d\n",
77                         byte, error, ps2dev->nak, attempt);
78
79         return error;
80 }
81
82 /*
83  * ps2_sendbyte() sends a byte to the device and waits for acknowledge.
84  * It doesn't handle retransmission, the caller is expected to handle
85  * it when needed.
86  *
87  * ps2_sendbyte() can only be called from a process context.
88  */
89
90 int ps2_sendbyte(struct ps2dev *ps2dev, u8 byte, unsigned int timeout)
91 {
92         int retval;
93
94         serio_pause_rx(ps2dev->serio);
95
96         retval = ps2_do_sendbyte(ps2dev, byte, timeout, 1);
97         dev_dbg(&ps2dev->serio->dev, "%02x - %x\n", byte, ps2dev->nak);
98
99         serio_continue_rx(ps2dev->serio);
100
101         return retval;
102 }
103 EXPORT_SYMBOL(ps2_sendbyte);
104
105 void ps2_begin_command(struct ps2dev *ps2dev)
106 {
107         struct mutex *m = ps2dev->serio->ps2_cmd_mutex ?: &ps2dev->cmd_mutex;
108
109         mutex_lock(m);
110 }
111 EXPORT_SYMBOL(ps2_begin_command);
112
113 void ps2_end_command(struct ps2dev *ps2dev)
114 {
115         struct mutex *m = ps2dev->serio->ps2_cmd_mutex ?: &ps2dev->cmd_mutex;
116
117         mutex_unlock(m);
118 }
119 EXPORT_SYMBOL(ps2_end_command);
120
121 /*
122  * ps2_drain() waits for device to transmit requested number of bytes
123  * and discards them.
124  */
125
126 void ps2_drain(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)
127 {
128         if (maxbytes > sizeof(ps2dev->cmdbuf)) {
129                 WARN_ON(1);
130                 maxbytes = sizeof(ps2dev->cmdbuf);
131         }
132
133         ps2_begin_command(ps2dev);
134
135         serio_pause_rx(ps2dev->serio);
136         ps2dev->flags = PS2_FLAG_CMD;
137         ps2dev->cmdcnt = maxbytes;
138         serio_continue_rx(ps2dev->serio);
139
140         wait_event_timeout(ps2dev->wait,
141                            !(ps2dev->flags & PS2_FLAG_CMD),
142                            msecs_to_jiffies(timeout));
143
144         ps2_end_command(ps2dev);
145 }
146 EXPORT_SYMBOL(ps2_drain);
147
148 /*
149  * ps2_is_keyboard_id() checks received ID byte against the list of
150  * known keyboard IDs.
151  */
152
153 bool ps2_is_keyboard_id(u8 id_byte)
154 {
155         static const u8 keyboard_ids[] = {
156                 0xab,   /* Regular keyboards            */
157                 0xac,   /* NCD Sun keyboard             */
158                 0x2b,   /* Trust keyboard, translated   */
159                 0x5d,   /* Trust keyboard               */
160                 0x60,   /* NMB SGI keyboard, translated */
161                 0x47,   /* NMB SGI keyboard             */
162         };
163
164         return memchr(keyboard_ids, id_byte, sizeof(keyboard_ids)) != NULL;
165 }
166 EXPORT_SYMBOL(ps2_is_keyboard_id);
167
168 /*
169  * ps2_adjust_timeout() is called after receiving 1st byte of command
170  * response and tries to reduce remaining timeout to speed up command
171  * completion.
172  */
173
174 static int ps2_adjust_timeout(struct ps2dev *ps2dev,
175                               unsigned int command, unsigned int timeout)
176 {
177         switch (command) {
178         case PS2_CMD_RESET_BAT:
179                 /*
180                  * Device has sent the first response byte after
181                  * reset command, reset is thus done, so we can
182                  * shorten the timeout.
183                  * The next byte will come soon (keyboard) or not
184                  * at all (mouse).
185                  */
186                 if (timeout > msecs_to_jiffies(100))
187                         timeout = msecs_to_jiffies(100);
188                 break;
189
190         case PS2_CMD_GETID:
191                 /*
192                  * Microsoft Natural Elite keyboard responds to
193                  * the GET ID command as it were a mouse, with
194                  * a single byte. Fail the command so atkbd will
195                  * use alternative probe to detect it.
196                  */
197                 if (ps2dev->cmdbuf[1] == 0xaa) {
198                         serio_pause_rx(ps2dev->serio);
199                         ps2dev->flags = 0;
200                         serio_continue_rx(ps2dev->serio);
201                         timeout = 0;
202                 }
203
204                 /*
205                  * If device behind the port is not a keyboard there
206                  * won't be 2nd byte of ID response.
207                  */
208                 if (!ps2_is_keyboard_id(ps2dev->cmdbuf[1])) {
209                         serio_pause_rx(ps2dev->serio);
210                         ps2dev->flags = ps2dev->cmdcnt = 0;
211                         serio_continue_rx(ps2dev->serio);
212                         timeout = 0;
213                 }
214                 break;
215
216         default:
217                 break;
218         }
219
220         return timeout;
221 }
222
223 /*
224  * ps2_command() sends a command and its parameters to the mouse,
225  * then waits for the response and puts it in the param array.
226  *
227  * ps2_command() can only be called from a process context
228  */
229
230 int __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)
231 {
232         unsigned int timeout;
233         unsigned int send = (command >> 12) & 0xf;
234         unsigned int receive = (command >> 8) & 0xf;
235         int rc;
236         int i;
237         u8 send_param[16];
238
239         if (receive > sizeof(ps2dev->cmdbuf)) {
240                 WARN_ON(1);
241                 return -EINVAL;
242         }
243
244         if (send && !param) {
245                 WARN_ON(1);
246                 return -EINVAL;
247         }
248
249         memcpy(send_param, param, send);
250
251         serio_pause_rx(ps2dev->serio);
252
253         ps2dev->flags = command == PS2_CMD_GETID ? PS2_FLAG_WAITID : 0;
254         ps2dev->cmdcnt = receive;
255         if (receive && param)
256                 for (i = 0; i < receive; i++)
257                         ps2dev->cmdbuf[(receive - 1) - i] = param[i];
258
259         /* Signal that we are sending the command byte */
260         ps2dev->flags |= PS2_FLAG_ACK_CMD;
261
262         /*
263          * Some devices (Synaptics) peform the reset before
264          * ACKing the reset command, and so it can take a long
265          * time before the ACK arrives.
266          */
267         timeout = command == PS2_CMD_RESET_BAT ? 1000 : 200;
268
269         rc = ps2_do_sendbyte(ps2dev, command & 0xff, timeout, 2);
270         if (rc)
271                 goto out_reset_flags;
272
273         /* Now we are sending command parameters, if any */
274         ps2dev->flags &= ~PS2_FLAG_ACK_CMD;
275
276         for (i = 0; i < send; i++) {
277                 rc = ps2_do_sendbyte(ps2dev, param[i], 200, 2);
278                 if (rc)
279                         goto out_reset_flags;
280         }
281
282         serio_continue_rx(ps2dev->serio);
283
284         /*
285          * The reset command takes a long time to execute.
286          */
287         timeout = msecs_to_jiffies(command == PS2_CMD_RESET_BAT ? 4000 : 500);
288
289         timeout = wait_event_timeout(ps2dev->wait,
290                                      !(ps2dev->flags & PS2_FLAG_CMD1), timeout);
291
292         if (ps2dev->cmdcnt && !(ps2dev->flags & PS2_FLAG_CMD1)) {
293
294                 timeout = ps2_adjust_timeout(ps2dev, command, timeout);
295                 wait_event_timeout(ps2dev->wait,
296                                    !(ps2dev->flags & PS2_FLAG_CMD), timeout);
297         }
298
299         serio_pause_rx(ps2dev->serio);
300
301         if (param)
302                 for (i = 0; i < receive; i++)
303                         param[i] = ps2dev->cmdbuf[(receive - 1) - i];
304
305         if (ps2dev->cmdcnt &&
306             (command != PS2_CMD_RESET_BAT || ps2dev->cmdcnt != 1)) {
307                 rc = -EPROTO;
308                 goto out_reset_flags;
309         }
310
311         rc = 0;
312
313  out_reset_flags:
314         ps2dev->flags = 0;
315         serio_continue_rx(ps2dev->serio);
316
317         dev_dbg(&ps2dev->serio->dev,
318                 "%02x [%*ph] - %x/%08lx [%*ph]\n",
319                 command & 0xff, send, send_param,
320                 ps2dev->nak, ps2dev->flags,
321                 receive, param ?: send_param);
322
323         /*
324          * ps_command() handles resends itself, so do not leak -EAGAIN
325          * to the callers.
326          */
327         return rc != -EAGAIN ? rc : -EPROTO;
328 }
329 EXPORT_SYMBOL(__ps2_command);
330
331 int ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)
332 {
333         int rc;
334
335         ps2_begin_command(ps2dev);
336         rc = __ps2_command(ps2dev, param, command);
337         ps2_end_command(ps2dev);
338
339         return rc;
340 }
341 EXPORT_SYMBOL(ps2_command);
342
343 /*
344  * ps2_sliced_command() sends an extended PS/2 command to the mouse
345  * using sliced syntax, understood by advanced devices, such as Logitech
346  * or Synaptics touchpads. The command is encoded as:
347  * 0xE6 0xE8 rr 0xE8 ss 0xE8 tt 0xE8 uu where (rr*64)+(ss*16)+(tt*4)+uu
348  * is the command.
349  */
350
351 int ps2_sliced_command(struct ps2dev *ps2dev, u8 command)
352 {
353         int i;
354         int retval;
355
356         ps2_begin_command(ps2dev);
357
358         retval = __ps2_command(ps2dev, NULL, PS2_CMD_SETSCALE11);
359         if (retval)
360                 goto out;
361
362         for (i = 6; i >= 0; i -= 2) {
363                 u8 d = (command >> i) & 3;
364                 retval = __ps2_command(ps2dev, &d, PS2_CMD_SETRES);
365                 if (retval)
366                         break;
367         }
368
369 out:
370         dev_dbg(&ps2dev->serio->dev, "%02x - %d\n", command, retval);
371         ps2_end_command(ps2dev);
372         return retval;
373 }
374 EXPORT_SYMBOL(ps2_sliced_command);
375
376 /*
377  * ps2_init() initializes ps2dev structure
378  */
379
380 void ps2_init(struct ps2dev *ps2dev, struct serio *serio)
381 {
382         mutex_init(&ps2dev->cmd_mutex);
383         lockdep_set_subclass(&ps2dev->cmd_mutex, serio->depth);
384         init_waitqueue_head(&ps2dev->wait);
385         ps2dev->serio = serio;
386 }
387 EXPORT_SYMBOL(ps2_init);
388
389 /*
390  * ps2_handle_ack() is supposed to be used in interrupt handler
391  * to properly process ACK/NAK of a command from a PS/2 device.
392  */
393
394 bool ps2_handle_ack(struct ps2dev *ps2dev, u8 data)
395 {
396         switch (data) {
397         case PS2_RET_ACK:
398                 ps2dev->nak = 0;
399                 break;
400
401         case PS2_RET_NAK:
402                 ps2dev->flags |= PS2_FLAG_NAK;
403                 ps2dev->nak = PS2_RET_NAK;
404                 break;
405
406         case PS2_RET_ERR:
407                 if (ps2dev->flags & PS2_FLAG_NAK) {
408                         ps2dev->flags &= ~PS2_FLAG_NAK;
409                         ps2dev->nak = PS2_RET_ERR;
410                         break;
411                 }
412
413         /*
414          * Workaround for mice which don't ACK the Get ID command.
415          * These are valid mouse IDs that we recognize.
416          */
417         case 0x00:
418         case 0x03:
419         case 0x04:
420                 if (ps2dev->flags & PS2_FLAG_WAITID) {
421                         ps2dev->nak = 0;
422                         break;
423                 }
424                 /* Fall through */
425         default:
426                 /*
427                  * Do not signal errors if we get unexpected reply while
428                  * waiting for an ACK to the initial (first) command byte:
429                  * the device might not be quiesced yet and continue
430                  * delivering data.
431                  * Note that we reset PS2_FLAG_WAITID flag, so the workaround
432                  * for mice not acknowledging the Get ID command only triggers
433                  * on the 1st byte; if device spews data we really want to see
434                  * a real ACK from it.
435                  */
436                 dev_dbg(&ps2dev->serio->dev, "unexpected %#02x\n", data);
437                 ps2dev->flags &= ~PS2_FLAG_WAITID;
438                 return ps2dev->flags & PS2_FLAG_ACK_CMD;
439         }
440
441         if (!ps2dev->nak) {
442                 ps2dev->flags &= ~PS2_FLAG_NAK;
443                 if (ps2dev->cmdcnt)
444                         ps2dev->flags |= PS2_FLAG_CMD | PS2_FLAG_CMD1;
445         }
446
447         ps2dev->flags &= ~PS2_FLAG_ACK;
448         wake_up(&ps2dev->wait);
449
450         if (data != PS2_RET_ACK)
451                 ps2_handle_response(ps2dev, data);
452
453         return true;
454 }
455 EXPORT_SYMBOL(ps2_handle_ack);
456
457 /*
458  * ps2_handle_response() is supposed to be used in interrupt handler
459  * to properly store device's response to a command and notify process
460  * waiting for completion of the command.
461  */
462
463 bool ps2_handle_response(struct ps2dev *ps2dev, u8 data)
464 {
465         if (ps2dev->cmdcnt)
466                 ps2dev->cmdbuf[--ps2dev->cmdcnt] = data;
467
468         if (ps2dev->flags & PS2_FLAG_CMD1) {
469                 ps2dev->flags &= ~PS2_FLAG_CMD1;
470                 if (ps2dev->cmdcnt)
471                         wake_up(&ps2dev->wait);
472         }
473
474         if (!ps2dev->cmdcnt) {
475                 ps2dev->flags &= ~PS2_FLAG_CMD;
476                 wake_up(&ps2dev->wait);
477         }
478
479         return true;
480 }
481 EXPORT_SYMBOL(ps2_handle_response);
482
483 void ps2_cmd_aborted(struct ps2dev *ps2dev)
484 {
485         if (ps2dev->flags & PS2_FLAG_ACK)
486                 ps2dev->nak = 1;
487
488         if (ps2dev->flags & (PS2_FLAG_ACK | PS2_FLAG_CMD))
489                 wake_up(&ps2dev->wait);
490
491         /* reset all flags except last nack */
492         ps2dev->flags &= PS2_FLAG_NAK;
493 }
494 EXPORT_SYMBOL(ps2_cmd_aborted);