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