Merge branch 'exec-for-v5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiede...
[linux-2.6-microblaze.git] / drivers / input / keyboard / applespi.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * MacBook (Pro) SPI keyboard and touchpad driver
4  *
5  * Copyright (c) 2015-2018 Federico Lorenzi
6  * Copyright (c) 2017-2018 Ronald Tschalär
7  */
8
9 /*
10  * The keyboard and touchpad controller on the MacBookAir6, MacBookPro12,
11  * MacBook8 and newer can be driven either by USB or SPI. However the USB
12  * pins are only connected on the MacBookAir6 and 7 and the MacBookPro12.
13  * All others need this driver. The interface is selected using ACPI methods:
14  *
15  * * UIEN ("USB Interface Enable"): If invoked with argument 1, disables SPI
16  *   and enables USB. If invoked with argument 0, disables USB.
17  * * UIST ("USB Interface Status"): Returns 1 if USB is enabled, 0 otherwise.
18  * * SIEN ("SPI Interface Enable"): If invoked with argument 1, disables USB
19  *   and enables SPI. If invoked with argument 0, disables SPI.
20  * * SIST ("SPI Interface Status"): Returns 1 if SPI is enabled, 0 otherwise.
21  * * ISOL: Resets the four GPIO pins used for SPI. Intended to be invoked with
22  *   argument 1, then once more with argument 0.
23  *
24  * UIEN and UIST are only provided on models where the USB pins are connected.
25  *
26  * SPI-based Protocol
27  * ------------------
28  *
29  * The device and driver exchange messages (struct message); each message is
30  * encapsulated in one or more packets (struct spi_packet). There are two types
31  * of exchanges: reads, and writes. A read is signaled by a GPE, upon which one
32  * message can be read from the device. A write exchange consists of writing a
33  * command message, immediately reading a short status packet, and then, upon
34  * receiving a GPE, reading the response message. Write exchanges cannot be
35  * interleaved, i.e. a new write exchange must not be started till the previous
36  * write exchange is complete. Whether a received message is part of a read or
37  * write exchange is indicated in the encapsulating packet's flags field.
38  *
39  * A single message may be too large to fit in a single packet (which has a
40  * fixed, 256-byte size). In that case it will be split over multiple,
41  * consecutive packets.
42  */
43
44 #include <linux/acpi.h>
45 #include <linux/crc16.h>
46 #include <linux/debugfs.h>
47 #include <linux/delay.h>
48 #include <linux/efi.h>
49 #include <linux/input.h>
50 #include <linux/input/mt.h>
51 #include <linux/leds.h>
52 #include <linux/module.h>
53 #include <linux/spinlock.h>
54 #include <linux/spi/spi.h>
55 #include <linux/wait.h>
56 #include <linux/workqueue.h>
57
58 #include <asm/barrier.h>
59 #include <asm/unaligned.h>
60
61 #define CREATE_TRACE_POINTS
62 #include "applespi.h"
63 #include "applespi_trace.h"
64
65 #define APPLESPI_PACKET_SIZE    256
66 #define APPLESPI_STATUS_SIZE    4
67
68 #define PACKET_TYPE_READ        0x20
69 #define PACKET_TYPE_WRITE       0x40
70 #define PACKET_DEV_KEYB         0x01
71 #define PACKET_DEV_TPAD         0x02
72 #define PACKET_DEV_INFO         0xd0
73
74 #define MAX_ROLLOVER            6
75
76 #define MAX_FINGERS             11
77 #define MAX_FINGER_ORIENTATION  16384
78 #define MAX_PKTS_PER_MSG        2
79
80 #define KBD_BL_LEVEL_MIN        32U
81 #define KBD_BL_LEVEL_MAX        255U
82 #define KBD_BL_LEVEL_SCALE      1000000U
83 #define KBD_BL_LEVEL_ADJ        \
84         ((KBD_BL_LEVEL_MAX - KBD_BL_LEVEL_MIN) * KBD_BL_LEVEL_SCALE / 255U)
85
86 #define EFI_BL_LEVEL_NAME       L"KeyboardBacklightLevel"
87 #define EFI_BL_LEVEL_GUID       EFI_GUID(0xa076d2af, 0x9678, 0x4386, 0x8b, 0x58, 0x1f, 0xc8, 0xef, 0x04, 0x16, 0x19)
88
89 #define APPLE_FLAG_FKEY         0x01
90
91 #define SPI_RW_CHG_DELAY_US     100     /* from experimentation, in µs */
92
93 #define SYNAPTICS_VENDOR_ID     0x06cb
94
95 static unsigned int fnmode = 1;
96 module_param(fnmode, uint, 0644);
97 MODULE_PARM_DESC(fnmode, "Mode of Fn key on Apple keyboards (0 = disabled, [1] = fkeyslast, 2 = fkeysfirst)");
98
99 static unsigned int fnremap;
100 module_param(fnremap, uint, 0644);
101 MODULE_PARM_DESC(fnremap, "Remap Fn key ([0] = no-remap; 1 = left-ctrl, 2 = left-shift, 3 = left-alt, 4 = left-meta, 6 = right-shift, 7 = right-alt, 8 = right-meta)");
102
103 static bool iso_layout;
104 module_param(iso_layout, bool, 0644);
105 MODULE_PARM_DESC(iso_layout, "Enable/Disable hardcoded ISO-layout of the keyboard. ([0] = disabled, 1 = enabled)");
106
107 static char touchpad_dimensions[40];
108 module_param_string(touchpad_dimensions, touchpad_dimensions,
109                     sizeof(touchpad_dimensions), 0444);
110 MODULE_PARM_DESC(touchpad_dimensions, "The pixel dimensions of the touchpad, as XxY+W+H .");
111
112 /**
113  * struct keyboard_protocol - keyboard message.
114  * message.type = 0x0110, message.length = 0x000a
115  *
116  * @unknown1:           unknown
117  * @modifiers:          bit-set of modifier/control keys pressed
118  * @unknown2:           unknown
119  * @keys_pressed:       the (non-modifier) keys currently pressed
120  * @fn_pressed:         whether the fn key is currently pressed
121  * @crc16:              crc over the whole message struct (message header +
122  *                      this struct) minus this @crc16 field
123  */
124 struct keyboard_protocol {
125         u8                      unknown1;
126         u8                      modifiers;
127         u8                      unknown2;
128         u8                      keys_pressed[MAX_ROLLOVER];
129         u8                      fn_pressed;
130         __le16                  crc16;
131 };
132
133 /**
134  * struct tp_finger - single trackpad finger structure, le16-aligned
135  *
136  * @origin:             zero when switching track finger
137  * @abs_x:              absolute x coordinate
138  * @abs_y:              absolute y coordinate
139  * @rel_x:              relative x coordinate
140  * @rel_y:              relative y coordinate
141  * @tool_major:         tool area, major axis
142  * @tool_minor:         tool area, minor axis
143  * @orientation:        16384 when point, else 15 bit angle
144  * @touch_major:        touch area, major axis
145  * @touch_minor:        touch area, minor axis
146  * @unused:             zeros
147  * @pressure:           pressure on forcetouch touchpad
148  * @multi:              one finger: varies, more fingers: constant
149  * @crc16:              on last finger: crc over the whole message struct
150  *                      (i.e. message header + this struct) minus the last
151  *                      @crc16 field; unknown on all other fingers.
152  */
153 struct tp_finger {
154         __le16 origin;
155         __le16 abs_x;
156         __le16 abs_y;
157         __le16 rel_x;
158         __le16 rel_y;
159         __le16 tool_major;
160         __le16 tool_minor;
161         __le16 orientation;
162         __le16 touch_major;
163         __le16 touch_minor;
164         __le16 unused[2];
165         __le16 pressure;
166         __le16 multi;
167         __le16 crc16;
168 };
169
170 /**
171  * struct touchpad_protocol - touchpad message.
172  * message.type = 0x0210
173  *
174  * @unknown1:           unknown
175  * @clicked:            1 if a button-click was detected, 0 otherwise
176  * @unknown2:           unknown
177  * @number_of_fingers:  the number of fingers being reported in @fingers
178  * @clicked2:           same as @clicked
179  * @unknown3:           unknown
180  * @fingers:            the data for each finger
181  */
182 struct touchpad_protocol {
183         u8                      unknown1[1];
184         u8                      clicked;
185         u8                      unknown2[28];
186         u8                      number_of_fingers;
187         u8                      clicked2;
188         u8                      unknown3[16];
189         struct tp_finger        fingers[];
190 };
191
192 /**
193  * struct command_protocol_tp_info - get touchpad info.
194  * message.type = 0x1020, message.length = 0x0000
195  *
196  * @crc16:              crc over the whole message struct (message header +
197  *                      this struct) minus this @crc16 field
198  */
199 struct command_protocol_tp_info {
200         __le16                  crc16;
201 };
202
203 /**
204  * struct touchpad_info - touchpad info response.
205  * message.type = 0x1020, message.length = 0x006e
206  *
207  * @unknown1:           unknown
208  * @model_flags:        flags (vary by model number, but significance otherwise
209  *                      unknown)
210  * @model_no:           the touchpad model number
211  * @unknown2:           unknown
212  * @crc16:              crc over the whole message struct (message header +
213  *                      this struct) minus this @crc16 field
214  */
215 struct touchpad_info_protocol {
216         u8                      unknown1[105];
217         u8                      model_flags;
218         u8                      model_no;
219         u8                      unknown2[3];
220         __le16                  crc16;
221 };
222
223 /**
224  * struct command_protocol_mt_init - initialize multitouch.
225  * message.type = 0x0252, message.length = 0x0002
226  *
227  * @cmd:                value: 0x0102
228  * @crc16:              crc over the whole message struct (message header +
229  *                      this struct) minus this @crc16 field
230  */
231 struct command_protocol_mt_init {
232         __le16                  cmd;
233         __le16                  crc16;
234 };
235
236 /**
237  * struct command_protocol_capsl - toggle caps-lock led
238  * message.type = 0x0151, message.length = 0x0002
239  *
240  * @unknown:            value: 0x01 (length?)
241  * @led:                0 off, 2 on
242  * @crc16:              crc over the whole message struct (message header +
243  *                      this struct) minus this @crc16 field
244  */
245 struct command_protocol_capsl {
246         u8                      unknown;
247         u8                      led;
248         __le16                  crc16;
249 };
250
251 /**
252  * struct command_protocol_bl - set keyboard backlight brightness
253  * message.type = 0xB051, message.length = 0x0006
254  *
255  * @const1:             value: 0x01B0
256  * @level:              the brightness level to set
257  * @const2:             value: 0x0001 (backlight off), 0x01F4 (backlight on)
258  * @crc16:              crc over the whole message struct (message header +
259  *                      this struct) minus this @crc16 field
260  */
261 struct command_protocol_bl {
262         __le16                  const1;
263         __le16                  level;
264         __le16                  const2;
265         __le16                  crc16;
266 };
267
268 /**
269  * struct message - a complete spi message.
270  *
271  * Each message begins with fixed header, followed by a message-type specific
272  * payload, and ends with a 16-bit crc. Because of the varying lengths of the
273  * payload, the crc is defined at the end of each payload struct, rather than
274  * in this struct.
275  *
276  * @type:       the message type
277  * @zero:       always 0
278  * @counter:    incremented on each message, rolls over after 255; there is a
279  *              separate counter for each message type.
280  * @rsp_buf_len:response buffer length (the exact nature of this field is quite
281  *              speculative). On a request/write this is often the same as
282  *              @length, though in some cases it has been seen to be much larger
283  *              (e.g. 0x400); on a response/read this the same as on the
284  *              request; for reads that are not responses it is 0.
285  * @length:     length of the remainder of the data in the whole message
286  *              structure (after re-assembly in case of being split over
287  *              multiple spi-packets), minus the trailing crc. The total size
288  *              of the message struct is therefore @length + 10.
289  *
290  * @keyboard:           Keyboard message
291  * @touchpad:           Touchpad message
292  * @tp_info:            Touchpad info (response)
293  * @tp_info_command:    Touchpad info (CRC)
294  * @init_mt_command:    Initialise Multitouch
295  * @capsl_command:      Toggle caps-lock LED
296  * @bl_command:         Keyboard brightness
297  * @data:               Buffer data
298  */
299 struct message {
300         __le16          type;
301         u8              zero;
302         u8              counter;
303         __le16          rsp_buf_len;
304         __le16          length;
305         union {
306                 struct keyboard_protocol        keyboard;
307                 struct touchpad_protocol        touchpad;
308                 struct touchpad_info_protocol   tp_info;
309                 struct command_protocol_tp_info tp_info_command;
310                 struct command_protocol_mt_init init_mt_command;
311                 struct command_protocol_capsl   capsl_command;
312                 struct command_protocol_bl      bl_command;
313                 u8                              data[0];
314         };
315 };
316
317 /* type + zero + counter + rsp_buf_len + length */
318 #define MSG_HEADER_SIZE         8
319
320 /**
321  * struct spi_packet - a complete spi packet; always 256 bytes. This carries
322  * the (parts of the) message in the data. But note that this does not
323  * necessarily contain a complete message, as in some cases (e.g. many
324  * fingers pressed) the message is split over multiple packets (see the
325  * @offset, @remaining, and @length fields). In general the data parts in
326  * spi_packet's are concatenated until @remaining is 0, and the result is an
327  * message.
328  *
329  * @flags:      0x40 = write (to device), 0x20 = read (from device); note that
330  *              the response to a write still has 0x40.
331  * @device:     1 = keyboard, 2 = touchpad
332  * @offset:     specifies the offset of this packet's data in the complete
333  *              message; i.e. > 0 indicates this is a continuation packet (in
334  *              the second packet for a message split over multiple packets
335  *              this would then be the same as the @length in the first packet)
336  * @remaining:  number of message bytes remaining in subsequents packets (in
337  *              the first packet of a message split over two packets this would
338  *              then be the same as the @length in the second packet)
339  * @length:     length of the valid data in the @data in this packet
340  * @data:       all or part of a message
341  * @crc16:      crc over this whole structure minus this @crc16 field. This
342  *              covers just this packet, even on multi-packet messages (in
343  *              contrast to the crc in the message).
344  */
345 struct spi_packet {
346         u8                      flags;
347         u8                      device;
348         __le16                  offset;
349         __le16                  remaining;
350         __le16                  length;
351         u8                      data[246];
352         __le16                  crc16;
353 };
354
355 struct spi_settings {
356         u64     spi_cs_delay;           /* cs-to-clk delay in us */
357         u64     reset_a2r_usec;         /* active-to-receive delay? */
358         u64     reset_rec_usec;         /* ? (cur val: 10) */
359 };
360
361 /* this mimics struct drm_rect */
362 struct applespi_tp_info {
363         int     x_min;
364         int     y_min;
365         int     x_max;
366         int     y_max;
367 };
368
369 struct applespi_data {
370         struct spi_device               *spi;
371         struct spi_settings             spi_settings;
372         struct input_dev                *keyboard_input_dev;
373         struct input_dev                *touchpad_input_dev;
374
375         u8                              *tx_buffer;
376         u8                              *tx_status;
377         u8                              *rx_buffer;
378
379         u8                              *msg_buf;
380         unsigned int                    saved_msg_len;
381
382         struct applespi_tp_info         tp_info;
383
384         u8                              last_keys_pressed[MAX_ROLLOVER];
385         u8                              last_keys_fn_pressed[MAX_ROLLOVER];
386         u8                              last_fn_pressed;
387         struct input_mt_pos             pos[MAX_FINGERS];
388         int                             slots[MAX_FINGERS];
389         int                             gpe;
390         acpi_handle                     sien;
391         acpi_handle                     sist;
392
393         struct spi_transfer             dl_t;
394         struct spi_transfer             rd_t;
395         struct spi_message              rd_m;
396
397         struct spi_transfer             ww_t;
398         struct spi_transfer             wd_t;
399         struct spi_transfer             wr_t;
400         struct spi_transfer             st_t;
401         struct spi_message              wr_m;
402
403         bool                            want_tp_info_cmd;
404         bool                            want_mt_init_cmd;
405         bool                            want_cl_led_on;
406         bool                            have_cl_led_on;
407         unsigned int                    want_bl_level;
408         unsigned int                    have_bl_level;
409         unsigned int                    cmd_msg_cntr;
410         /* lock to protect the above parameters and flags below */
411         spinlock_t                      cmd_msg_lock;
412         bool                            cmd_msg_queued;
413         enum applespi_evt_type          cmd_evt_type;
414
415         struct led_classdev             backlight_info;
416
417         bool                            suspended;
418         bool                            drain;
419         wait_queue_head_t               drain_complete;
420         bool                            read_active;
421         bool                            write_active;
422
423         struct work_struct              work;
424         struct touchpad_info_protocol   rcvd_tp_info;
425
426         struct dentry                   *debugfs_root;
427         bool                            debug_tp_dim;
428         char                            tp_dim_val[40];
429         int                             tp_dim_min_x;
430         int                             tp_dim_max_x;
431         int                             tp_dim_min_y;
432         int                             tp_dim_max_y;
433 };
434
435 static const unsigned char applespi_scancodes[] = {
436         0, 0, 0, 0,
437         KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J,
438         KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T,
439         KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z,
440         KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0,
441         KEY_ENTER, KEY_ESC, KEY_BACKSPACE, KEY_TAB, KEY_SPACE, KEY_MINUS,
442         KEY_EQUAL, KEY_LEFTBRACE, KEY_RIGHTBRACE, KEY_BACKSLASH, 0,
443         KEY_SEMICOLON, KEY_APOSTROPHE, KEY_GRAVE, KEY_COMMA, KEY_DOT, KEY_SLASH,
444         KEY_CAPSLOCK,
445         KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9,
446         KEY_F10, KEY_F11, KEY_F12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
447         KEY_RIGHT, KEY_LEFT, KEY_DOWN, KEY_UP,
448         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_102ND,
449         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
450         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_RO, 0, KEY_YEN, 0, 0, 0, 0, 0,
451         0, KEY_KATAKANAHIRAGANA, KEY_MUHENKAN
452 };
453
454 /*
455  * This must have exactly as many entries as there are bits in
456  * struct keyboard_protocol.modifiers .
457  */
458 static const unsigned char applespi_controlcodes[] = {
459         KEY_LEFTCTRL,
460         KEY_LEFTSHIFT,
461         KEY_LEFTALT,
462         KEY_LEFTMETA,
463         0,
464         KEY_RIGHTSHIFT,
465         KEY_RIGHTALT,
466         KEY_RIGHTMETA
467 };
468
469 struct applespi_key_translation {
470         u16 from;
471         u16 to;
472         u8 flags;
473 };
474
475 static const struct applespi_key_translation applespi_fn_codes[] = {
476         { KEY_BACKSPACE, KEY_DELETE },
477         { KEY_ENTER,    KEY_INSERT },
478         { KEY_F1,       KEY_BRIGHTNESSDOWN,     APPLE_FLAG_FKEY },
479         { KEY_F2,       KEY_BRIGHTNESSUP,       APPLE_FLAG_FKEY },
480         { KEY_F3,       KEY_SCALE,              APPLE_FLAG_FKEY },
481         { KEY_F4,       KEY_DASHBOARD,          APPLE_FLAG_FKEY },
482         { KEY_F5,       KEY_KBDILLUMDOWN,       APPLE_FLAG_FKEY },
483         { KEY_F6,       KEY_KBDILLUMUP,         APPLE_FLAG_FKEY },
484         { KEY_F7,       KEY_PREVIOUSSONG,       APPLE_FLAG_FKEY },
485         { KEY_F8,       KEY_PLAYPAUSE,          APPLE_FLAG_FKEY },
486         { KEY_F9,       KEY_NEXTSONG,           APPLE_FLAG_FKEY },
487         { KEY_F10,      KEY_MUTE,               APPLE_FLAG_FKEY },
488         { KEY_F11,      KEY_VOLUMEDOWN,         APPLE_FLAG_FKEY },
489         { KEY_F12,      KEY_VOLUMEUP,           APPLE_FLAG_FKEY },
490         { KEY_RIGHT,    KEY_END },
491         { KEY_LEFT,     KEY_HOME },
492         { KEY_DOWN,     KEY_PAGEDOWN },
493         { KEY_UP,       KEY_PAGEUP },
494         { }
495 };
496
497 static const struct applespi_key_translation apple_iso_keyboard[] = {
498         { KEY_GRAVE,    KEY_102ND },
499         { KEY_102ND,    KEY_GRAVE },
500         { }
501 };
502
503 struct applespi_tp_model_info {
504         u16                     model;
505         struct applespi_tp_info tp_info;
506 };
507
508 static const struct applespi_tp_model_info applespi_tp_models[] = {
509         {
510                 .model = 0x04,  /* MB8 MB9 MB10 */
511                 .tp_info = { -5087, -182, 5579, 6089 },
512         },
513         {
514                 .model = 0x05,  /* MBP13,1 MBP13,2 MBP14,1 MBP14,2 */
515                 .tp_info = { -6243, -170, 6749, 7685 },
516         },
517         {
518                 .model = 0x06,  /* MBP13,3 MBP14,3 */
519                 .tp_info = { -7456, -163, 7976, 9283 },
520         },
521         {}
522 };
523
524 typedef void (*applespi_trace_fun)(enum applespi_evt_type,
525                                    enum applespi_pkt_type, u8 *, size_t);
526
527 static applespi_trace_fun applespi_get_trace_fun(enum applespi_evt_type type)
528 {
529         switch (type) {
530         case ET_CMD_TP_INI:
531                 return trace_applespi_tp_ini_cmd;
532         case ET_CMD_BL:
533                 return trace_applespi_backlight_cmd;
534         case ET_CMD_CL:
535                 return trace_applespi_caps_lock_cmd;
536         case ET_RD_KEYB:
537                 return trace_applespi_keyboard_data;
538         case ET_RD_TPAD:
539                 return trace_applespi_touchpad_data;
540         case ET_RD_UNKN:
541                 return trace_applespi_unknown_data;
542         default:
543                 WARN_ONCE(1, "Unknown msg type %d", type);
544                 return trace_applespi_unknown_data;
545         }
546 }
547
548 static void applespi_setup_read_txfrs(struct applespi_data *applespi)
549 {
550         struct spi_message *msg = &applespi->rd_m;
551         struct spi_transfer *dl_t = &applespi->dl_t;
552         struct spi_transfer *rd_t = &applespi->rd_t;
553
554         memset(dl_t, 0, sizeof(*dl_t));
555         memset(rd_t, 0, sizeof(*rd_t));
556
557         dl_t->delay.value = applespi->spi_settings.spi_cs_delay;
558         dl_t->delay.unit = SPI_DELAY_UNIT_USECS;
559
560         rd_t->rx_buf = applespi->rx_buffer;
561         rd_t->len = APPLESPI_PACKET_SIZE;
562
563         spi_message_init(msg);
564         spi_message_add_tail(dl_t, msg);
565         spi_message_add_tail(rd_t, msg);
566 }
567
568 static void applespi_setup_write_txfrs(struct applespi_data *applespi)
569 {
570         struct spi_message *msg = &applespi->wr_m;
571         struct spi_transfer *wt_t = &applespi->ww_t;
572         struct spi_transfer *dl_t = &applespi->wd_t;
573         struct spi_transfer *wr_t = &applespi->wr_t;
574         struct spi_transfer *st_t = &applespi->st_t;
575
576         memset(wt_t, 0, sizeof(*wt_t));
577         memset(dl_t, 0, sizeof(*dl_t));
578         memset(wr_t, 0, sizeof(*wr_t));
579         memset(st_t, 0, sizeof(*st_t));
580
581         /*
582          * All we need here is a delay at the beginning of the message before
583          * asserting cs. But the current spi API doesn't support this, so we
584          * end up with an extra unnecessary (but harmless) cs assertion and
585          * deassertion.
586          */
587         wt_t->delay.value = SPI_RW_CHG_DELAY_US;
588         wt_t->delay.unit = SPI_DELAY_UNIT_USECS;
589         wt_t->cs_change = 1;
590
591         dl_t->delay.value = applespi->spi_settings.spi_cs_delay;
592         dl_t->delay.unit = SPI_DELAY_UNIT_USECS;
593
594         wr_t->tx_buf = applespi->tx_buffer;
595         wr_t->len = APPLESPI_PACKET_SIZE;
596         wr_t->delay.value = SPI_RW_CHG_DELAY_US;
597         wr_t->delay.unit = SPI_DELAY_UNIT_USECS;
598
599         st_t->rx_buf = applespi->tx_status;
600         st_t->len = APPLESPI_STATUS_SIZE;
601
602         spi_message_init(msg);
603         spi_message_add_tail(wt_t, msg);
604         spi_message_add_tail(dl_t, msg);
605         spi_message_add_tail(wr_t, msg);
606         spi_message_add_tail(st_t, msg);
607 }
608
609 static int applespi_async(struct applespi_data *applespi,
610                           struct spi_message *message, void (*complete)(void *))
611 {
612         message->complete = complete;
613         message->context = applespi;
614
615         return spi_async(applespi->spi, message);
616 }
617
618 static inline bool applespi_check_write_status(struct applespi_data *applespi,
619                                                int sts)
620 {
621         static u8 status_ok[] = { 0xac, 0x27, 0x68, 0xd5 };
622
623         if (sts < 0) {
624                 dev_warn(&applespi->spi->dev, "Error writing to device: %d\n",
625                          sts);
626                 return false;
627         }
628
629         if (memcmp(applespi->tx_status, status_ok, APPLESPI_STATUS_SIZE)) {
630                 dev_warn(&applespi->spi->dev, "Error writing to device: %*ph\n",
631                          APPLESPI_STATUS_SIZE, applespi->tx_status);
632                 return false;
633         }
634
635         return true;
636 }
637
638 static int applespi_get_spi_settings(struct applespi_data *applespi)
639 {
640         struct acpi_device *adev = ACPI_COMPANION(&applespi->spi->dev);
641         const union acpi_object *o;
642         struct spi_settings *settings = &applespi->spi_settings;
643
644         if (!acpi_dev_get_property(adev, "spiCSDelay", ACPI_TYPE_BUFFER, &o))
645                 settings->spi_cs_delay = *(u64 *)o->buffer.pointer;
646         else
647                 dev_warn(&applespi->spi->dev,
648                          "Property spiCSDelay not found\n");
649
650         if (!acpi_dev_get_property(adev, "resetA2RUsec", ACPI_TYPE_BUFFER, &o))
651                 settings->reset_a2r_usec = *(u64 *)o->buffer.pointer;
652         else
653                 dev_warn(&applespi->spi->dev,
654                          "Property resetA2RUsec not found\n");
655
656         if (!acpi_dev_get_property(adev, "resetRecUsec", ACPI_TYPE_BUFFER, &o))
657                 settings->reset_rec_usec = *(u64 *)o->buffer.pointer;
658         else
659                 dev_warn(&applespi->spi->dev,
660                          "Property resetRecUsec not found\n");
661
662         dev_dbg(&applespi->spi->dev,
663                 "SPI settings: spi_cs_delay=%llu reset_a2r_usec=%llu reset_rec_usec=%llu\n",
664                 settings->spi_cs_delay, settings->reset_a2r_usec,
665                 settings->reset_rec_usec);
666
667         return 0;
668 }
669
670 static int applespi_setup_spi(struct applespi_data *applespi)
671 {
672         int sts;
673
674         sts = applespi_get_spi_settings(applespi);
675         if (sts)
676                 return sts;
677
678         spin_lock_init(&applespi->cmd_msg_lock);
679         init_waitqueue_head(&applespi->drain_complete);
680
681         return 0;
682 }
683
684 static int applespi_enable_spi(struct applespi_data *applespi)
685 {
686         acpi_status acpi_sts;
687         unsigned long long spi_status;
688
689         /* check if SPI is already enabled, so we can skip the delay below */
690         acpi_sts = acpi_evaluate_integer(applespi->sist, NULL, NULL,
691                                          &spi_status);
692         if (ACPI_SUCCESS(acpi_sts) && spi_status)
693                 return 0;
694
695         /* SIEN(1) will enable SPI communication */
696         acpi_sts = acpi_execute_simple_method(applespi->sien, NULL, 1);
697         if (ACPI_FAILURE(acpi_sts)) {
698                 dev_err(&applespi->spi->dev, "SIEN failed: %s\n",
699                         acpi_format_exception(acpi_sts));
700                 return -ENODEV;
701         }
702
703         /*
704          * Allow the SPI interface to come up before returning. Without this
705          * delay, the SPI commands to enable multitouch mode may not reach
706          * the trackpad controller, causing pointer movement to break upon
707          * resume from sleep.
708          */
709         msleep(50);
710
711         return 0;
712 }
713
714 static int applespi_send_cmd_msg(struct applespi_data *applespi);
715
716 static void applespi_msg_complete(struct applespi_data *applespi,
717                                   bool is_write_msg, bool is_read_compl)
718 {
719         unsigned long flags;
720
721         spin_lock_irqsave(&applespi->cmd_msg_lock, flags);
722
723         if (is_read_compl)
724                 applespi->read_active = false;
725         if (is_write_msg)
726                 applespi->write_active = false;
727
728         if (applespi->drain && !applespi->write_active)
729                 wake_up_all(&applespi->drain_complete);
730
731         if (is_write_msg) {
732                 applespi->cmd_msg_queued = false;
733                 applespi_send_cmd_msg(applespi);
734         }
735
736         spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags);
737 }
738
739 static void applespi_async_write_complete(void *context)
740 {
741         struct applespi_data *applespi = context;
742         enum applespi_evt_type evt_type = applespi->cmd_evt_type;
743
744         applespi_get_trace_fun(evt_type)(evt_type, PT_WRITE,
745                                          applespi->tx_buffer,
746                                          APPLESPI_PACKET_SIZE);
747         applespi_get_trace_fun(evt_type)(evt_type, PT_STATUS,
748                                          applespi->tx_status,
749                                          APPLESPI_STATUS_SIZE);
750
751         if (!applespi_check_write_status(applespi, applespi->wr_m.status)) {
752                 /*
753                  * If we got an error, we presumably won't get the expected
754                  * response message either.
755                  */
756                 applespi_msg_complete(applespi, true, false);
757         }
758 }
759
760 static int applespi_send_cmd_msg(struct applespi_data *applespi)
761 {
762         u16 crc;
763         int sts;
764         struct spi_packet *packet = (struct spi_packet *)applespi->tx_buffer;
765         struct message *message = (struct message *)packet->data;
766         u16 msg_len;
767         u8 device;
768
769         /* check if draining */
770         if (applespi->drain)
771                 return 0;
772
773         /* check whether send is in progress */
774         if (applespi->cmd_msg_queued)
775                 return 0;
776
777         /* set up packet */
778         memset(packet, 0, APPLESPI_PACKET_SIZE);
779
780         /* are we processing init commands? */
781         if (applespi->want_tp_info_cmd) {
782                 applespi->want_tp_info_cmd = false;
783                 applespi->want_mt_init_cmd = true;
784                 applespi->cmd_evt_type = ET_CMD_TP_INI;
785
786                 /* build init command */
787                 device = PACKET_DEV_INFO;
788
789                 message->type = cpu_to_le16(0x1020);
790                 msg_len = sizeof(message->tp_info_command);
791
792                 message->zero = 0x02;
793                 message->rsp_buf_len = cpu_to_le16(0x0200);
794
795         } else if (applespi->want_mt_init_cmd) {
796                 applespi->want_mt_init_cmd = false;
797                 applespi->cmd_evt_type = ET_CMD_TP_INI;
798
799                 /* build init command */
800                 device = PACKET_DEV_TPAD;
801
802                 message->type = cpu_to_le16(0x0252);
803                 msg_len = sizeof(message->init_mt_command);
804
805                 message->init_mt_command.cmd = cpu_to_le16(0x0102);
806
807         /* do we need caps-lock command? */
808         } else if (applespi->want_cl_led_on != applespi->have_cl_led_on) {
809                 applespi->have_cl_led_on = applespi->want_cl_led_on;
810                 applespi->cmd_evt_type = ET_CMD_CL;
811
812                 /* build led command */
813                 device = PACKET_DEV_KEYB;
814
815                 message->type = cpu_to_le16(0x0151);
816                 msg_len = sizeof(message->capsl_command);
817
818                 message->capsl_command.unknown = 0x01;
819                 message->capsl_command.led = applespi->have_cl_led_on ? 2 : 0;
820
821         /* do we need backlight command? */
822         } else if (applespi->want_bl_level != applespi->have_bl_level) {
823                 applespi->have_bl_level = applespi->want_bl_level;
824                 applespi->cmd_evt_type = ET_CMD_BL;
825
826                 /* build command buffer */
827                 device = PACKET_DEV_KEYB;
828
829                 message->type = cpu_to_le16(0xB051);
830                 msg_len = sizeof(message->bl_command);
831
832                 message->bl_command.const1 = cpu_to_le16(0x01B0);
833                 message->bl_command.level =
834                                 cpu_to_le16(applespi->have_bl_level);
835
836                 if (applespi->have_bl_level > 0)
837                         message->bl_command.const2 = cpu_to_le16(0x01F4);
838                 else
839                         message->bl_command.const2 = cpu_to_le16(0x0001);
840
841         /* everything's up-to-date */
842         } else {
843                 return 0;
844         }
845
846         /* finalize packet */
847         packet->flags = PACKET_TYPE_WRITE;
848         packet->device = device;
849         packet->length = cpu_to_le16(MSG_HEADER_SIZE + msg_len);
850
851         message->counter = applespi->cmd_msg_cntr++ % (U8_MAX + 1);
852
853         message->length = cpu_to_le16(msg_len - 2);
854         if (!message->rsp_buf_len)
855                 message->rsp_buf_len = message->length;
856
857         crc = crc16(0, (u8 *)message, le16_to_cpu(packet->length) - 2);
858         put_unaligned_le16(crc, &message->data[msg_len - 2]);
859
860         crc = crc16(0, (u8 *)packet, sizeof(*packet) - 2);
861         packet->crc16 = cpu_to_le16(crc);
862
863         /* send command */
864         sts = applespi_async(applespi, &applespi->wr_m,
865                              applespi_async_write_complete);
866         if (sts) {
867                 dev_warn(&applespi->spi->dev,
868                          "Error queueing async write to device: %d\n", sts);
869                 return sts;
870         }
871
872         applespi->cmd_msg_queued = true;
873         applespi->write_active = true;
874
875         return 0;
876 }
877
878 static void applespi_init(struct applespi_data *applespi, bool is_resume)
879 {
880         unsigned long flags;
881
882         spin_lock_irqsave(&applespi->cmd_msg_lock, flags);
883
884         if (is_resume)
885                 applespi->want_mt_init_cmd = true;
886         else
887                 applespi->want_tp_info_cmd = true;
888         applespi_send_cmd_msg(applespi);
889
890         spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags);
891 }
892
893 static int applespi_set_capsl_led(struct applespi_data *applespi,
894                                   bool capslock_on)
895 {
896         unsigned long flags;
897         int sts;
898
899         spin_lock_irqsave(&applespi->cmd_msg_lock, flags);
900
901         applespi->want_cl_led_on = capslock_on;
902         sts = applespi_send_cmd_msg(applespi);
903
904         spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags);
905
906         return sts;
907 }
908
909 static void applespi_set_bl_level(struct led_classdev *led_cdev,
910                                   enum led_brightness value)
911 {
912         struct applespi_data *applespi =
913                 container_of(led_cdev, struct applespi_data, backlight_info);
914         unsigned long flags;
915
916         spin_lock_irqsave(&applespi->cmd_msg_lock, flags);
917
918         if (value == 0) {
919                 applespi->want_bl_level = value;
920         } else {
921                 /*
922                  * The backlight does not turn on till level 32, so we scale
923                  * the range here so that from a user's perspective it turns
924                  * on at 1.
925                  */
926                 applespi->want_bl_level =
927                         ((value * KBD_BL_LEVEL_ADJ) / KBD_BL_LEVEL_SCALE +
928                          KBD_BL_LEVEL_MIN);
929         }
930
931         applespi_send_cmd_msg(applespi);
932
933         spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags);
934 }
935
936 static int applespi_event(struct input_dev *dev, unsigned int type,
937                           unsigned int code, int value)
938 {
939         struct applespi_data *applespi = input_get_drvdata(dev);
940
941         switch (type) {
942         case EV_LED:
943                 applespi_set_capsl_led(applespi, !!test_bit(LED_CAPSL, dev->led));
944                 return 0;
945         }
946
947         return -EINVAL;
948 }
949
950 /* lifted from the BCM5974 driver and renamed from raw2int */
951 /* convert 16-bit little endian to signed integer */
952 static inline int le16_to_int(__le16 x)
953 {
954         return (signed short)le16_to_cpu(x);
955 }
956
957 static void applespi_debug_update_dimensions(struct applespi_data *applespi,
958                                              const struct tp_finger *f)
959 {
960         applespi->tp_dim_min_x = min(applespi->tp_dim_min_x,
961                                      le16_to_int(f->abs_x));
962         applespi->tp_dim_max_x = max(applespi->tp_dim_max_x,
963                                      le16_to_int(f->abs_x));
964         applespi->tp_dim_min_y = min(applespi->tp_dim_min_y,
965                                      le16_to_int(f->abs_y));
966         applespi->tp_dim_max_y = max(applespi->tp_dim_max_y,
967                                      le16_to_int(f->abs_y));
968 }
969
970 static int applespi_tp_dim_open(struct inode *inode, struct file *file)
971 {
972         struct applespi_data *applespi = inode->i_private;
973
974         file->private_data = applespi;
975
976         snprintf(applespi->tp_dim_val, sizeof(applespi->tp_dim_val),
977                  "0x%.4x %dx%d+%u+%u\n",
978                  applespi->touchpad_input_dev->id.product,
979                  applespi->tp_dim_min_x, applespi->tp_dim_min_y,
980                  applespi->tp_dim_max_x - applespi->tp_dim_min_x,
981                  applespi->tp_dim_max_y - applespi->tp_dim_min_y);
982
983         return nonseekable_open(inode, file);
984 }
985
986 static ssize_t applespi_tp_dim_read(struct file *file, char __user *buf,
987                                     size_t len, loff_t *off)
988 {
989         struct applespi_data *applespi = file->private_data;
990
991         return simple_read_from_buffer(buf, len, off, applespi->tp_dim_val,
992                                        strlen(applespi->tp_dim_val));
993 }
994
995 static const struct file_operations applespi_tp_dim_fops = {
996         .owner = THIS_MODULE,
997         .open = applespi_tp_dim_open,
998         .read = applespi_tp_dim_read,
999         .llseek = no_llseek,
1000 };
1001
1002 static void report_finger_data(struct input_dev *input, int slot,
1003                                const struct input_mt_pos *pos,
1004                                const struct tp_finger *f)
1005 {
1006         input_mt_slot(input, slot);
1007         input_mt_report_slot_state(input, MT_TOOL_FINGER, true);
1008
1009         input_report_abs(input, ABS_MT_TOUCH_MAJOR,
1010                          le16_to_int(f->touch_major) << 1);
1011         input_report_abs(input, ABS_MT_TOUCH_MINOR,
1012                          le16_to_int(f->touch_minor) << 1);
1013         input_report_abs(input, ABS_MT_WIDTH_MAJOR,
1014                          le16_to_int(f->tool_major) << 1);
1015         input_report_abs(input, ABS_MT_WIDTH_MINOR,
1016                          le16_to_int(f->tool_minor) << 1);
1017         input_report_abs(input, ABS_MT_ORIENTATION,
1018                          MAX_FINGER_ORIENTATION - le16_to_int(f->orientation));
1019         input_report_abs(input, ABS_MT_POSITION_X, pos->x);
1020         input_report_abs(input, ABS_MT_POSITION_Y, pos->y);
1021 }
1022
1023 static void report_tp_state(struct applespi_data *applespi,
1024                             struct touchpad_protocol *t)
1025 {
1026         const struct tp_finger *f;
1027         struct input_dev *input;
1028         const struct applespi_tp_info *tp_info = &applespi->tp_info;
1029         int i, n;
1030
1031         /* touchpad_input_dev is set async in worker */
1032         input = smp_load_acquire(&applespi->touchpad_input_dev);
1033         if (!input)
1034                 return; /* touchpad isn't initialized yet */
1035
1036         n = 0;
1037
1038         for (i = 0; i < t->number_of_fingers; i++) {
1039                 f = &t->fingers[i];
1040                 if (le16_to_int(f->touch_major) == 0)
1041                         continue;
1042                 applespi->pos[n].x = le16_to_int(f->abs_x);
1043                 applespi->pos[n].y = tp_info->y_min + tp_info->y_max -
1044                                      le16_to_int(f->abs_y);
1045                 n++;
1046
1047                 if (applespi->debug_tp_dim)
1048                         applespi_debug_update_dimensions(applespi, f);
1049         }
1050
1051         input_mt_assign_slots(input, applespi->slots, applespi->pos, n, 0);
1052
1053         for (i = 0; i < n; i++)
1054                 report_finger_data(input, applespi->slots[i],
1055                                    &applespi->pos[i], &t->fingers[i]);
1056
1057         input_mt_sync_frame(input);
1058         input_report_key(input, BTN_LEFT, t->clicked);
1059
1060         input_sync(input);
1061 }
1062
1063 static const struct applespi_key_translation *
1064 applespi_find_translation(const struct applespi_key_translation *table, u16 key)
1065 {
1066         const struct applespi_key_translation *trans;
1067
1068         for (trans = table; trans->from; trans++)
1069                 if (trans->from == key)
1070                         return trans;
1071
1072         return NULL;
1073 }
1074
1075 static unsigned int applespi_translate_fn_key(unsigned int key, int fn_pressed)
1076 {
1077         const struct applespi_key_translation *trans;
1078         int do_translate;
1079
1080         trans = applespi_find_translation(applespi_fn_codes, key);
1081         if (trans) {
1082                 if (trans->flags & APPLE_FLAG_FKEY)
1083                         do_translate = (fnmode == 2 && fn_pressed) ||
1084                                        (fnmode == 1 && !fn_pressed);
1085                 else
1086                         do_translate = fn_pressed;
1087
1088                 if (do_translate)
1089                         key = trans->to;
1090         }
1091
1092         return key;
1093 }
1094
1095 static unsigned int applespi_translate_iso_layout(unsigned int key)
1096 {
1097         const struct applespi_key_translation *trans;
1098
1099         trans = applespi_find_translation(apple_iso_keyboard, key);
1100         if (trans)
1101                 key = trans->to;
1102
1103         return key;
1104 }
1105
1106 static unsigned int applespi_code_to_key(u8 code, int fn_pressed)
1107 {
1108         unsigned int key = applespi_scancodes[code];
1109
1110         if (fnmode)
1111                 key = applespi_translate_fn_key(key, fn_pressed);
1112         if (iso_layout)
1113                 key = applespi_translate_iso_layout(key);
1114         return key;
1115 }
1116
1117 static void
1118 applespi_remap_fn_key(struct keyboard_protocol *keyboard_protocol)
1119 {
1120         unsigned char tmp;
1121         u8 bit = BIT((fnremap - 1) & 0x07);
1122
1123         if (!fnremap || fnremap > ARRAY_SIZE(applespi_controlcodes) ||
1124             !applespi_controlcodes[fnremap - 1])
1125                 return;
1126
1127         tmp = keyboard_protocol->fn_pressed;
1128         keyboard_protocol->fn_pressed = !!(keyboard_protocol->modifiers & bit);
1129         if (tmp)
1130                 keyboard_protocol->modifiers |= bit;
1131         else
1132                 keyboard_protocol->modifiers &= ~bit;
1133 }
1134
1135 static void
1136 applespi_handle_keyboard_event(struct applespi_data *applespi,
1137                                struct keyboard_protocol *keyboard_protocol)
1138 {
1139         unsigned int key;
1140         int i;
1141
1142         compiletime_assert(ARRAY_SIZE(applespi_controlcodes) ==
1143                            sizeof_field(struct keyboard_protocol, modifiers) * 8,
1144                            "applespi_controlcodes has wrong number of entries");
1145
1146         /* check for rollover overflow, which is signalled by all keys == 1 */
1147         if (!memchr_inv(keyboard_protocol->keys_pressed, 1, MAX_ROLLOVER))
1148                 return;
1149
1150         /* remap fn key if desired */
1151         applespi_remap_fn_key(keyboard_protocol);
1152
1153         /* check released keys */
1154         for (i = 0; i < MAX_ROLLOVER; i++) {
1155                 if (memchr(keyboard_protocol->keys_pressed,
1156                            applespi->last_keys_pressed[i], MAX_ROLLOVER))
1157                         continue;       /* key is still pressed */
1158
1159                 key = applespi_code_to_key(applespi->last_keys_pressed[i],
1160                                            applespi->last_keys_fn_pressed[i]);
1161                 input_report_key(applespi->keyboard_input_dev, key, 0);
1162                 applespi->last_keys_fn_pressed[i] = 0;
1163         }
1164
1165         /* check pressed keys */
1166         for (i = 0; i < MAX_ROLLOVER; i++) {
1167                 if (keyboard_protocol->keys_pressed[i] <
1168                                 ARRAY_SIZE(applespi_scancodes) &&
1169                     keyboard_protocol->keys_pressed[i] > 0) {
1170                         key = applespi_code_to_key(
1171                                         keyboard_protocol->keys_pressed[i],
1172                                         keyboard_protocol->fn_pressed);
1173                         input_report_key(applespi->keyboard_input_dev, key, 1);
1174                         applespi->last_keys_fn_pressed[i] =
1175                                         keyboard_protocol->fn_pressed;
1176                 }
1177         }
1178
1179         /* check control keys */
1180         for (i = 0; i < ARRAY_SIZE(applespi_controlcodes); i++) {
1181                 if (keyboard_protocol->modifiers & BIT(i))
1182                         input_report_key(applespi->keyboard_input_dev,
1183                                          applespi_controlcodes[i], 1);
1184                 else
1185                         input_report_key(applespi->keyboard_input_dev,
1186                                          applespi_controlcodes[i], 0);
1187         }
1188
1189         /* check function key */
1190         if (keyboard_protocol->fn_pressed && !applespi->last_fn_pressed)
1191                 input_report_key(applespi->keyboard_input_dev, KEY_FN, 1);
1192         else if (!keyboard_protocol->fn_pressed && applespi->last_fn_pressed)
1193                 input_report_key(applespi->keyboard_input_dev, KEY_FN, 0);
1194         applespi->last_fn_pressed = keyboard_protocol->fn_pressed;
1195
1196         /* done */
1197         input_sync(applespi->keyboard_input_dev);
1198         memcpy(&applespi->last_keys_pressed, keyboard_protocol->keys_pressed,
1199                sizeof(applespi->last_keys_pressed));
1200 }
1201
1202 static const struct applespi_tp_info *applespi_find_touchpad_info(u8 model)
1203 {
1204         const struct applespi_tp_model_info *info;
1205
1206         for (info = applespi_tp_models; info->model; info++) {
1207                 if (info->model == model)
1208                         return &info->tp_info;
1209         }
1210
1211         return NULL;
1212 }
1213
1214 static int
1215 applespi_register_touchpad_device(struct applespi_data *applespi,
1216                                   struct touchpad_info_protocol *rcvd_tp_info)
1217 {
1218         const struct applespi_tp_info *tp_info;
1219         struct input_dev *touchpad_input_dev;
1220         int sts;
1221
1222         /* set up touchpad dimensions */
1223         tp_info = applespi_find_touchpad_info(rcvd_tp_info->model_no);
1224         if (!tp_info) {
1225                 dev_warn(&applespi->spi->dev,
1226                          "Unknown touchpad model %x - falling back to MB8 touchpad\n",
1227                          rcvd_tp_info->model_no);
1228                 tp_info = &applespi_tp_models[0].tp_info;
1229         }
1230
1231         applespi->tp_info = *tp_info;
1232
1233         if (touchpad_dimensions[0]) {
1234                 int x, y, w, h;
1235
1236                 sts = sscanf(touchpad_dimensions, "%dx%d+%u+%u", &x, &y, &w, &h);
1237                 if (sts == 4) {
1238                         dev_info(&applespi->spi->dev,
1239                                  "Overriding touchpad dimensions from module param\n");
1240                         applespi->tp_info.x_min = x;
1241                         applespi->tp_info.y_min = y;
1242                         applespi->tp_info.x_max = x + w;
1243                         applespi->tp_info.y_max = y + h;
1244                 } else {
1245                         dev_warn(&applespi->spi->dev,
1246                                  "Invalid touchpad dimensions '%s': must be in the form XxY+W+H\n",
1247                                  touchpad_dimensions);
1248                         touchpad_dimensions[0] = '\0';
1249                 }
1250         }
1251         if (!touchpad_dimensions[0]) {
1252                 snprintf(touchpad_dimensions, sizeof(touchpad_dimensions),
1253                          "%dx%d+%u+%u",
1254                          applespi->tp_info.x_min,
1255                          applespi->tp_info.y_min,
1256                          applespi->tp_info.x_max - applespi->tp_info.x_min,
1257                          applespi->tp_info.y_max - applespi->tp_info.y_min);
1258         }
1259
1260         /* create touchpad input device */
1261         touchpad_input_dev = devm_input_allocate_device(&applespi->spi->dev);
1262         if (!touchpad_input_dev) {
1263                 dev_err(&applespi->spi->dev,
1264                         "Failed to allocate touchpad input device\n");
1265                 return -ENOMEM;
1266         }
1267
1268         touchpad_input_dev->name = "Apple SPI Touchpad";
1269         touchpad_input_dev->phys = "applespi/input1";
1270         touchpad_input_dev->dev.parent = &applespi->spi->dev;
1271         touchpad_input_dev->id.bustype = BUS_SPI;
1272         touchpad_input_dev->id.vendor = SYNAPTICS_VENDOR_ID;
1273         touchpad_input_dev->id.product =
1274                         rcvd_tp_info->model_no << 8 | rcvd_tp_info->model_flags;
1275
1276         /* basic properties */
1277         input_set_capability(touchpad_input_dev, EV_REL, REL_X);
1278         input_set_capability(touchpad_input_dev, EV_REL, REL_Y);
1279
1280         __set_bit(INPUT_PROP_POINTER, touchpad_input_dev->propbit);
1281         __set_bit(INPUT_PROP_BUTTONPAD, touchpad_input_dev->propbit);
1282
1283         /* finger touch area */
1284         input_set_abs_params(touchpad_input_dev, ABS_MT_TOUCH_MAJOR,
1285                              0, 5000, 0, 0);
1286         input_set_abs_params(touchpad_input_dev, ABS_MT_TOUCH_MINOR,
1287                              0, 5000, 0, 0);
1288
1289         /* finger approach area */
1290         input_set_abs_params(touchpad_input_dev, ABS_MT_WIDTH_MAJOR,
1291                              0, 5000, 0, 0);
1292         input_set_abs_params(touchpad_input_dev, ABS_MT_WIDTH_MINOR,
1293                              0, 5000, 0, 0);
1294
1295         /* finger orientation */
1296         input_set_abs_params(touchpad_input_dev, ABS_MT_ORIENTATION,
1297                              -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION,
1298                              0, 0);
1299
1300         /* finger position */
1301         input_set_abs_params(touchpad_input_dev, ABS_MT_POSITION_X,
1302                              applespi->tp_info.x_min, applespi->tp_info.x_max,
1303                              0, 0);
1304         input_set_abs_params(touchpad_input_dev, ABS_MT_POSITION_Y,
1305                              applespi->tp_info.y_min, applespi->tp_info.y_max,
1306                              0, 0);
1307
1308         /* touchpad button */
1309         input_set_capability(touchpad_input_dev, EV_KEY, BTN_LEFT);
1310
1311         /* multitouch */
1312         sts = input_mt_init_slots(touchpad_input_dev, MAX_FINGERS,
1313                                   INPUT_MT_POINTER | INPUT_MT_DROP_UNUSED |
1314                                         INPUT_MT_TRACK);
1315         if (sts) {
1316                 dev_err(&applespi->spi->dev,
1317                         "failed to initialize slots: %d", sts);
1318                 return sts;
1319         }
1320
1321         /* register input device */
1322         sts = input_register_device(touchpad_input_dev);
1323         if (sts) {
1324                 dev_err(&applespi->spi->dev,
1325                         "Unable to register touchpad input device (%d)\n", sts);
1326                 return sts;
1327         }
1328
1329         /* touchpad_input_dev is read async in spi callback */
1330         smp_store_release(&applespi->touchpad_input_dev, touchpad_input_dev);
1331
1332         return 0;
1333 }
1334
1335 static void applespi_worker(struct work_struct *work)
1336 {
1337         struct applespi_data *applespi =
1338                 container_of(work, struct applespi_data, work);
1339
1340         applespi_register_touchpad_device(applespi, &applespi->rcvd_tp_info);
1341 }
1342
1343 static void applespi_handle_cmd_response(struct applespi_data *applespi,
1344                                          struct spi_packet *packet,
1345                                          struct message *message)
1346 {
1347         if (packet->device == PACKET_DEV_INFO &&
1348             le16_to_cpu(message->type) == 0x1020) {
1349                 /*
1350                  * We're not allowed to sleep here, but registering an input
1351                  * device can sleep.
1352                  */
1353                 applespi->rcvd_tp_info = message->tp_info;
1354                 schedule_work(&applespi->work);
1355                 return;
1356         }
1357
1358         if (le16_to_cpu(message->length) != 0x0000) {
1359                 dev_warn_ratelimited(&applespi->spi->dev,
1360                                      "Received unexpected write response: length=%x\n",
1361                                      le16_to_cpu(message->length));
1362                 return;
1363         }
1364
1365         if (packet->device == PACKET_DEV_TPAD &&
1366             le16_to_cpu(message->type) == 0x0252 &&
1367             le16_to_cpu(message->rsp_buf_len) == 0x0002)
1368                 dev_info(&applespi->spi->dev, "modeswitch done.\n");
1369 }
1370
1371 static bool applespi_verify_crc(struct applespi_data *applespi, u8 *buffer,
1372                                 size_t buflen)
1373 {
1374         u16 crc;
1375
1376         crc = crc16(0, buffer, buflen);
1377         if (crc) {
1378                 dev_warn_ratelimited(&applespi->spi->dev,
1379                                      "Received corrupted packet (crc mismatch)\n");
1380                 trace_applespi_bad_crc(ET_RD_CRC, READ, buffer, buflen);
1381
1382                 return false;
1383         }
1384
1385         return true;
1386 }
1387
1388 static void applespi_debug_print_read_packet(struct applespi_data *applespi,
1389                                              struct spi_packet *packet)
1390 {
1391         unsigned int evt_type;
1392
1393         if (packet->flags == PACKET_TYPE_READ &&
1394             packet->device == PACKET_DEV_KEYB)
1395                 evt_type = ET_RD_KEYB;
1396         else if (packet->flags == PACKET_TYPE_READ &&
1397                  packet->device == PACKET_DEV_TPAD)
1398                 evt_type = ET_RD_TPAD;
1399         else if (packet->flags == PACKET_TYPE_WRITE)
1400                 evt_type = applespi->cmd_evt_type;
1401         else
1402                 evt_type = ET_RD_UNKN;
1403
1404         applespi_get_trace_fun(evt_type)(evt_type, PT_READ, applespi->rx_buffer,
1405                                          APPLESPI_PACKET_SIZE);
1406 }
1407
1408 static void applespi_got_data(struct applespi_data *applespi)
1409 {
1410         struct spi_packet *packet;
1411         struct message *message;
1412         unsigned int msg_len;
1413         unsigned int off;
1414         unsigned int rem;
1415         unsigned int len;
1416
1417         /* process packet header */
1418         if (!applespi_verify_crc(applespi, applespi->rx_buffer,
1419                                  APPLESPI_PACKET_SIZE)) {
1420                 unsigned long flags;
1421
1422                 spin_lock_irqsave(&applespi->cmd_msg_lock, flags);
1423
1424                 if (applespi->drain) {
1425                         applespi->read_active = false;
1426                         applespi->write_active = false;
1427
1428                         wake_up_all(&applespi->drain_complete);
1429                 }
1430
1431                 spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags);
1432
1433                 return;
1434         }
1435
1436         packet = (struct spi_packet *)applespi->rx_buffer;
1437
1438         applespi_debug_print_read_packet(applespi, packet);
1439
1440         off = le16_to_cpu(packet->offset);
1441         rem = le16_to_cpu(packet->remaining);
1442         len = le16_to_cpu(packet->length);
1443
1444         if (len > sizeof(packet->data)) {
1445                 dev_warn_ratelimited(&applespi->spi->dev,
1446                                      "Received corrupted packet (invalid packet length %u)\n",
1447                                      len);
1448                 goto msg_complete;
1449         }
1450
1451         /* handle multi-packet messages */
1452         if (rem > 0 || off > 0) {
1453                 if (off != applespi->saved_msg_len) {
1454                         dev_warn_ratelimited(&applespi->spi->dev,
1455                                              "Received unexpected offset (got %u, expected %u)\n",
1456                                              off, applespi->saved_msg_len);
1457                         goto msg_complete;
1458                 }
1459
1460                 if (off + rem > MAX_PKTS_PER_MSG * APPLESPI_PACKET_SIZE) {
1461                         dev_warn_ratelimited(&applespi->spi->dev,
1462                                              "Received message too large (size %u)\n",
1463                                              off + rem);
1464                         goto msg_complete;
1465                 }
1466
1467                 if (off + len > MAX_PKTS_PER_MSG * APPLESPI_PACKET_SIZE) {
1468                         dev_warn_ratelimited(&applespi->spi->dev,
1469                                              "Received message too large (size %u)\n",
1470                                              off + len);
1471                         goto msg_complete;
1472                 }
1473
1474                 memcpy(applespi->msg_buf + off, &packet->data, len);
1475                 applespi->saved_msg_len += len;
1476
1477                 if (rem > 0)
1478                         return;
1479
1480                 message = (struct message *)applespi->msg_buf;
1481                 msg_len = applespi->saved_msg_len;
1482         } else {
1483                 message = (struct message *)&packet->data;
1484                 msg_len = len;
1485         }
1486
1487         /* got complete message - verify */
1488         if (!applespi_verify_crc(applespi, (u8 *)message, msg_len))
1489                 goto msg_complete;
1490
1491         if (le16_to_cpu(message->length) != msg_len - MSG_HEADER_SIZE - 2) {
1492                 dev_warn_ratelimited(&applespi->spi->dev,
1493                                      "Received corrupted packet (invalid message length %u - expected %u)\n",
1494                                      le16_to_cpu(message->length),
1495                                      msg_len - MSG_HEADER_SIZE - 2);
1496                 goto msg_complete;
1497         }
1498
1499         /* handle message */
1500         if (packet->flags == PACKET_TYPE_READ &&
1501             packet->device == PACKET_DEV_KEYB) {
1502                 applespi_handle_keyboard_event(applespi, &message->keyboard);
1503
1504         } else if (packet->flags == PACKET_TYPE_READ &&
1505                    packet->device == PACKET_DEV_TPAD) {
1506                 struct touchpad_protocol *tp;
1507                 size_t tp_len;
1508
1509                 tp = &message->touchpad;
1510                 tp_len = struct_size(tp, fingers, tp->number_of_fingers);
1511
1512                 if (le16_to_cpu(message->length) + 2 != tp_len) {
1513                         dev_warn_ratelimited(&applespi->spi->dev,
1514                                              "Received corrupted packet (invalid message length %u - num-fingers %u, tp-len %zu)\n",
1515                                              le16_to_cpu(message->length),
1516                                              tp->number_of_fingers, tp_len);
1517                         goto msg_complete;
1518                 }
1519
1520                 if (tp->number_of_fingers > MAX_FINGERS) {
1521                         dev_warn_ratelimited(&applespi->spi->dev,
1522                                              "Number of reported fingers (%u) exceeds max (%u))\n",
1523                                              tp->number_of_fingers,
1524                                              MAX_FINGERS);
1525                         tp->number_of_fingers = MAX_FINGERS;
1526                 }
1527
1528                 report_tp_state(applespi, tp);
1529
1530         } else if (packet->flags == PACKET_TYPE_WRITE) {
1531                 applespi_handle_cmd_response(applespi, packet, message);
1532         }
1533
1534 msg_complete:
1535         applespi->saved_msg_len = 0;
1536
1537         applespi_msg_complete(applespi, packet->flags == PACKET_TYPE_WRITE,
1538                               true);
1539 }
1540
1541 static void applespi_async_read_complete(void *context)
1542 {
1543         struct applespi_data *applespi = context;
1544
1545         if (applespi->rd_m.status < 0) {
1546                 dev_warn(&applespi->spi->dev, "Error reading from device: %d\n",
1547                          applespi->rd_m.status);
1548                 /*
1549                  * We don't actually know if this was a pure read, or a response
1550                  * to a write. But this is a rare error condition that should
1551                  * never occur, so clearing both flags to avoid deadlock.
1552                  */
1553                 applespi_msg_complete(applespi, true, true);
1554         } else {
1555                 applespi_got_data(applespi);
1556         }
1557
1558         acpi_finish_gpe(NULL, applespi->gpe);
1559 }
1560
1561 static u32 applespi_notify(acpi_handle gpe_device, u32 gpe, void *context)
1562 {
1563         struct applespi_data *applespi = context;
1564         int sts;
1565         unsigned long flags;
1566
1567         trace_applespi_irq_received(ET_RD_IRQ, PT_READ);
1568
1569         spin_lock_irqsave(&applespi->cmd_msg_lock, flags);
1570
1571         if (!applespi->suspended) {
1572                 sts = applespi_async(applespi, &applespi->rd_m,
1573                                      applespi_async_read_complete);
1574                 if (sts)
1575                         dev_warn(&applespi->spi->dev,
1576                                  "Error queueing async read to device: %d\n",
1577                                  sts);
1578                 else
1579                         applespi->read_active = true;
1580         }
1581
1582         spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags);
1583
1584         return ACPI_INTERRUPT_HANDLED;
1585 }
1586
1587 static int applespi_get_saved_bl_level(struct applespi_data *applespi)
1588 {
1589         struct efivar_entry *efivar_entry;
1590         u16 efi_data = 0;
1591         unsigned long efi_data_len;
1592         int sts;
1593
1594         efivar_entry = kmalloc(sizeof(*efivar_entry), GFP_KERNEL);
1595         if (!efivar_entry)
1596                 return -ENOMEM;
1597
1598         memcpy(efivar_entry->var.VariableName, EFI_BL_LEVEL_NAME,
1599                sizeof(EFI_BL_LEVEL_NAME));
1600         efivar_entry->var.VendorGuid = EFI_BL_LEVEL_GUID;
1601         efi_data_len = sizeof(efi_data);
1602
1603         sts = efivar_entry_get(efivar_entry, NULL, &efi_data_len, &efi_data);
1604         if (sts && sts != -ENOENT)
1605                 dev_warn(&applespi->spi->dev,
1606                          "Error getting backlight level from EFI vars: %d\n",
1607                          sts);
1608
1609         kfree(efivar_entry);
1610
1611         return sts ? sts : efi_data;
1612 }
1613
1614 static void applespi_save_bl_level(struct applespi_data *applespi,
1615                                    unsigned int level)
1616 {
1617         efi_guid_t efi_guid;
1618         u32 efi_attr;
1619         unsigned long efi_data_len;
1620         u16 efi_data;
1621         int sts;
1622
1623         /* Save keyboard backlight level */
1624         efi_guid = EFI_BL_LEVEL_GUID;
1625         efi_data = (u16)level;
1626         efi_data_len = sizeof(efi_data);
1627         efi_attr = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS |
1628                    EFI_VARIABLE_RUNTIME_ACCESS;
1629
1630         sts = efivar_entry_set_safe((efi_char16_t *)EFI_BL_LEVEL_NAME, efi_guid,
1631                                     efi_attr, true, efi_data_len, &efi_data);
1632         if (sts)
1633                 dev_warn(&applespi->spi->dev,
1634                          "Error saving backlight level to EFI vars: %d\n", sts);
1635 }
1636
1637 static int applespi_probe(struct spi_device *spi)
1638 {
1639         struct applespi_data *applespi;
1640         acpi_handle spi_handle = ACPI_HANDLE(&spi->dev);
1641         acpi_status acpi_sts;
1642         int sts, i;
1643         unsigned long long gpe, usb_status;
1644
1645         /* check if the USB interface is present and enabled already */
1646         acpi_sts = acpi_evaluate_integer(spi_handle, "UIST", NULL, &usb_status);
1647         if (ACPI_SUCCESS(acpi_sts) && usb_status) {
1648                 /* let the USB driver take over instead */
1649                 dev_info(&spi->dev, "USB interface already enabled\n");
1650                 return -ENODEV;
1651         }
1652
1653         /* allocate driver data */
1654         applespi = devm_kzalloc(&spi->dev, sizeof(*applespi), GFP_KERNEL);
1655         if (!applespi)
1656                 return -ENOMEM;
1657
1658         applespi->spi = spi;
1659
1660         INIT_WORK(&applespi->work, applespi_worker);
1661
1662         /* store the driver data */
1663         spi_set_drvdata(spi, applespi);
1664
1665         /* create our buffers */
1666         applespi->tx_buffer = devm_kmalloc(&spi->dev, APPLESPI_PACKET_SIZE,
1667                                            GFP_KERNEL);
1668         applespi->tx_status = devm_kmalloc(&spi->dev, APPLESPI_STATUS_SIZE,
1669                                            GFP_KERNEL);
1670         applespi->rx_buffer = devm_kmalloc(&spi->dev, APPLESPI_PACKET_SIZE,
1671                                            GFP_KERNEL);
1672         applespi->msg_buf = devm_kmalloc_array(&spi->dev, MAX_PKTS_PER_MSG,
1673                                                APPLESPI_PACKET_SIZE,
1674                                                GFP_KERNEL);
1675
1676         if (!applespi->tx_buffer || !applespi->tx_status ||
1677             !applespi->rx_buffer || !applespi->msg_buf)
1678                 return -ENOMEM;
1679
1680         /* set up our spi messages */
1681         applespi_setup_read_txfrs(applespi);
1682         applespi_setup_write_txfrs(applespi);
1683
1684         /* cache ACPI method handles */
1685         acpi_sts = acpi_get_handle(spi_handle, "SIEN", &applespi->sien);
1686         if (ACPI_FAILURE(acpi_sts)) {
1687                 dev_err(&applespi->spi->dev,
1688                         "Failed to get SIEN ACPI method handle: %s\n",
1689                         acpi_format_exception(acpi_sts));
1690                 return -ENODEV;
1691         }
1692
1693         acpi_sts = acpi_get_handle(spi_handle, "SIST", &applespi->sist);
1694         if (ACPI_FAILURE(acpi_sts)) {
1695                 dev_err(&applespi->spi->dev,
1696                         "Failed to get SIST ACPI method handle: %s\n",
1697                         acpi_format_exception(acpi_sts));
1698                 return -ENODEV;
1699         }
1700
1701         /* switch on the SPI interface */
1702         sts = applespi_setup_spi(applespi);
1703         if (sts)
1704                 return sts;
1705
1706         sts = applespi_enable_spi(applespi);
1707         if (sts)
1708                 return sts;
1709
1710         /* setup the keyboard input dev */
1711         applespi->keyboard_input_dev = devm_input_allocate_device(&spi->dev);
1712
1713         if (!applespi->keyboard_input_dev)
1714                 return -ENOMEM;
1715
1716         applespi->keyboard_input_dev->name = "Apple SPI Keyboard";
1717         applespi->keyboard_input_dev->phys = "applespi/input0";
1718         applespi->keyboard_input_dev->dev.parent = &spi->dev;
1719         applespi->keyboard_input_dev->id.bustype = BUS_SPI;
1720
1721         applespi->keyboard_input_dev->evbit[0] =
1722                         BIT_MASK(EV_KEY) | BIT_MASK(EV_LED) | BIT_MASK(EV_REP);
1723         applespi->keyboard_input_dev->ledbit[0] = BIT_MASK(LED_CAPSL);
1724
1725         input_set_drvdata(applespi->keyboard_input_dev, applespi);
1726         applespi->keyboard_input_dev->event = applespi_event;
1727
1728         for (i = 0; i < ARRAY_SIZE(applespi_scancodes); i++)
1729                 if (applespi_scancodes[i])
1730                         input_set_capability(applespi->keyboard_input_dev,
1731                                              EV_KEY, applespi_scancodes[i]);
1732
1733         for (i = 0; i < ARRAY_SIZE(applespi_controlcodes); i++)
1734                 if (applespi_controlcodes[i])
1735                         input_set_capability(applespi->keyboard_input_dev,
1736                                              EV_KEY, applespi_controlcodes[i]);
1737
1738         for (i = 0; i < ARRAY_SIZE(applespi_fn_codes); i++)
1739                 if (applespi_fn_codes[i].to)
1740                         input_set_capability(applespi->keyboard_input_dev,
1741                                              EV_KEY, applespi_fn_codes[i].to);
1742
1743         input_set_capability(applespi->keyboard_input_dev, EV_KEY, KEY_FN);
1744
1745         sts = input_register_device(applespi->keyboard_input_dev);
1746         if (sts) {
1747                 dev_err(&applespi->spi->dev,
1748                         "Unable to register keyboard input device (%d)\n", sts);
1749                 return -ENODEV;
1750         }
1751
1752         /*
1753          * The applespi device doesn't send interrupts normally (as is described
1754          * in its DSDT), but rather seems to use ACPI GPEs.
1755          */
1756         acpi_sts = acpi_evaluate_integer(spi_handle, "_GPE", NULL, &gpe);
1757         if (ACPI_FAILURE(acpi_sts)) {
1758                 dev_err(&applespi->spi->dev,
1759                         "Failed to obtain GPE for SPI slave device: %s\n",
1760                         acpi_format_exception(acpi_sts));
1761                 return -ENODEV;
1762         }
1763         applespi->gpe = (int)gpe;
1764
1765         acpi_sts = acpi_install_gpe_handler(NULL, applespi->gpe,
1766                                             ACPI_GPE_LEVEL_TRIGGERED,
1767                                             applespi_notify, applespi);
1768         if (ACPI_FAILURE(acpi_sts)) {
1769                 dev_err(&applespi->spi->dev,
1770                         "Failed to install GPE handler for GPE %d: %s\n",
1771                         applespi->gpe, acpi_format_exception(acpi_sts));
1772                 return -ENODEV;
1773         }
1774
1775         applespi->suspended = false;
1776
1777         acpi_sts = acpi_enable_gpe(NULL, applespi->gpe);
1778         if (ACPI_FAILURE(acpi_sts)) {
1779                 dev_err(&applespi->spi->dev,
1780                         "Failed to enable GPE handler for GPE %d: %s\n",
1781                         applespi->gpe, acpi_format_exception(acpi_sts));
1782                 acpi_remove_gpe_handler(NULL, applespi->gpe, applespi_notify);
1783                 return -ENODEV;
1784         }
1785
1786         /* trigger touchpad setup */
1787         applespi_init(applespi, false);
1788
1789         /*
1790          * By default this device is not enabled for wakeup; but USB keyboards
1791          * generally are, so the expectation is that by default the keyboard
1792          * will wake the system.
1793          */
1794         device_wakeup_enable(&spi->dev);
1795
1796         /* set up keyboard-backlight */
1797         sts = applespi_get_saved_bl_level(applespi);
1798         if (sts >= 0)
1799                 applespi_set_bl_level(&applespi->backlight_info, sts);
1800
1801         applespi->backlight_info.name            = "spi::kbd_backlight";
1802         applespi->backlight_info.default_trigger = "kbd-backlight";
1803         applespi->backlight_info.brightness_set  = applespi_set_bl_level;
1804
1805         sts = devm_led_classdev_register(&spi->dev, &applespi->backlight_info);
1806         if (sts)
1807                 dev_warn(&applespi->spi->dev,
1808                          "Unable to register keyboard backlight class dev (%d)\n",
1809                          sts);
1810
1811         /* set up debugfs entries for touchpad dimensions logging */
1812         applespi->debugfs_root = debugfs_create_dir("applespi", NULL);
1813
1814         debugfs_create_bool("enable_tp_dim", 0600, applespi->debugfs_root,
1815                             &applespi->debug_tp_dim);
1816
1817         debugfs_create_file("tp_dim", 0400, applespi->debugfs_root, applespi,
1818                             &applespi_tp_dim_fops);
1819
1820         return 0;
1821 }
1822
1823 static void applespi_drain_writes(struct applespi_data *applespi)
1824 {
1825         unsigned long flags;
1826
1827         spin_lock_irqsave(&applespi->cmd_msg_lock, flags);
1828
1829         applespi->drain = true;
1830         wait_event_lock_irq(applespi->drain_complete, !applespi->write_active,
1831                             applespi->cmd_msg_lock);
1832
1833         spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags);
1834 }
1835
1836 static void applespi_drain_reads(struct applespi_data *applespi)
1837 {
1838         unsigned long flags;
1839
1840         spin_lock_irqsave(&applespi->cmd_msg_lock, flags);
1841
1842         wait_event_lock_irq(applespi->drain_complete, !applespi->read_active,
1843                             applespi->cmd_msg_lock);
1844
1845         applespi->suspended = true;
1846
1847         spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags);
1848 }
1849
1850 static int applespi_remove(struct spi_device *spi)
1851 {
1852         struct applespi_data *applespi = spi_get_drvdata(spi);
1853
1854         applespi_drain_writes(applespi);
1855
1856         acpi_disable_gpe(NULL, applespi->gpe);
1857         acpi_remove_gpe_handler(NULL, applespi->gpe, applespi_notify);
1858         device_wakeup_disable(&spi->dev);
1859
1860         applespi_drain_reads(applespi);
1861
1862         debugfs_remove_recursive(applespi->debugfs_root);
1863
1864         return 0;
1865 }
1866
1867 static void applespi_shutdown(struct spi_device *spi)
1868 {
1869         struct applespi_data *applespi = spi_get_drvdata(spi);
1870
1871         applespi_save_bl_level(applespi, applespi->have_bl_level);
1872 }
1873
1874 static int applespi_poweroff_late(struct device *dev)
1875 {
1876         struct spi_device *spi = to_spi_device(dev);
1877         struct applespi_data *applespi = spi_get_drvdata(spi);
1878
1879         applespi_save_bl_level(applespi, applespi->have_bl_level);
1880
1881         return 0;
1882 }
1883
1884 static int __maybe_unused applespi_suspend(struct device *dev)
1885 {
1886         struct spi_device *spi = to_spi_device(dev);
1887         struct applespi_data *applespi = spi_get_drvdata(spi);
1888         acpi_status acpi_sts;
1889         int sts;
1890
1891         /* turn off caps-lock - it'll stay on otherwise */
1892         sts = applespi_set_capsl_led(applespi, false);
1893         if (sts)
1894                 dev_warn(&applespi->spi->dev,
1895                          "Failed to turn off caps-lock led (%d)\n", sts);
1896
1897         applespi_drain_writes(applespi);
1898
1899         /* disable the interrupt */
1900         acpi_sts = acpi_disable_gpe(NULL, applespi->gpe);
1901         if (ACPI_FAILURE(acpi_sts))
1902                 dev_err(&applespi->spi->dev,
1903                         "Failed to disable GPE handler for GPE %d: %s\n",
1904                         applespi->gpe, acpi_format_exception(acpi_sts));
1905
1906         applespi_drain_reads(applespi);
1907
1908         return 0;
1909 }
1910
1911 static int __maybe_unused applespi_resume(struct device *dev)
1912 {
1913         struct spi_device *spi = to_spi_device(dev);
1914         struct applespi_data *applespi = spi_get_drvdata(spi);
1915         acpi_status acpi_sts;
1916         unsigned long flags;
1917
1918         /* ensure our flags and state reflect a newly resumed device */
1919         spin_lock_irqsave(&applespi->cmd_msg_lock, flags);
1920
1921         applespi->drain = false;
1922         applespi->have_cl_led_on = false;
1923         applespi->have_bl_level = 0;
1924         applespi->cmd_msg_queued = false;
1925         applespi->read_active = false;
1926         applespi->write_active = false;
1927
1928         applespi->suspended = false;
1929
1930         spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags);
1931
1932         /* switch on the SPI interface */
1933         applespi_enable_spi(applespi);
1934
1935         /* re-enable the interrupt */
1936         acpi_sts = acpi_enable_gpe(NULL, applespi->gpe);
1937         if (ACPI_FAILURE(acpi_sts))
1938                 dev_err(&applespi->spi->dev,
1939                         "Failed to re-enable GPE handler for GPE %d: %s\n",
1940                         applespi->gpe, acpi_format_exception(acpi_sts));
1941
1942         /* switch the touchpad into multitouch mode */
1943         applespi_init(applespi, true);
1944
1945         return 0;
1946 }
1947
1948 static const struct acpi_device_id applespi_acpi_match[] = {
1949         { "APP000D", 0 },
1950         { }
1951 };
1952 MODULE_DEVICE_TABLE(acpi, applespi_acpi_match);
1953
1954 static const struct dev_pm_ops applespi_pm_ops = {
1955         SET_SYSTEM_SLEEP_PM_OPS(applespi_suspend, applespi_resume)
1956         .poweroff_late  = applespi_poweroff_late,
1957 };
1958
1959 static struct spi_driver applespi_driver = {
1960         .driver         = {
1961                 .name                   = "applespi",
1962                 .acpi_match_table       = applespi_acpi_match,
1963                 .pm                     = &applespi_pm_ops,
1964         },
1965         .probe          = applespi_probe,
1966         .remove         = applespi_remove,
1967         .shutdown       = applespi_shutdown,
1968 };
1969
1970 module_spi_driver(applespi_driver)
1971
1972 MODULE_LICENSE("GPL v2");
1973 MODULE_DESCRIPTION("MacBook(Pro) SPI Keyboard/Touchpad driver");
1974 MODULE_AUTHOR("Federico Lorenzi");
1975 MODULE_AUTHOR("Ronald Tschalär");