xref: /linux/drivers/input/mouse/elan_i2c_core.c (revision fab183d632628381b466a41479489541ac0e29a0)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Elan I2C/SMBus Touchpad driver
4  *
5  * Copyright (c) 2013 ELAN Microelectronics Corp.
6  *
7  * Author: 林政維 (Duson Lin) <dusonlin@emc.com.tw>
8  * Author: KT Liao <kt.liao@emc.com.tw>
9  * Version: 1.6.3
10  *
11  * Based on cyapa driver:
12  * copyright (c) 2011-2012 Cypress Semiconductor, Inc.
13  * copyright (c) 2011-2012 Google, Inc.
14  *
15  * Trademarks are the property of their respective owners.
16  */
17 
18 #include <linux/acpi.h>
19 #include <linux/completion.h>
20 #include <linux/delay.h>
21 #include <linux/device.h>
22 #include <linux/firmware.h>
23 #include <linux/i2c.h>
24 #include <linux/init.h>
25 #include <linux/input.h>
26 #include <linux/input/mt.h>
27 #include <linux/interrupt.h>
28 #include <linux/irq.h>
29 #include <linux/jiffies.h>
30 #include <linux/kernel.h>
31 #include <linux/module.h>
32 #include <linux/of.h>
33 #include <linux/pm_wakeirq.h>
34 #include <linux/property.h>
35 #include <linux/regulator/consumer.h>
36 #include <linux/sched.h>
37 #include <linux/slab.h>
38 #include <linux/string_choices.h>
39 #include <linux/uaccess.h>
40 #include <linux/unaligned.h>
41 
42 #include "elan_i2c.h"
43 
44 #define DRIVER_NAME		"elan_i2c"
45 #define ELAN_VENDOR_ID		0x04f3
46 #define ETP_MAX_PRESSURE	255
47 #define ETP_FWIDTH_REDUCE	90
48 #define ETP_FINGER_WIDTH	15
49 #define ETP_RETRY_COUNT		3
50 
51 /* quirks to control the device */
52 #define ETP_QUIRK_QUICK_WAKEUP	BIT(0)
53 
54 /* The main device structure */
55 struct elan_tp_data {
56 	struct i2c_client	*client;
57 	struct input_dev	*input;
58 	struct input_dev	*tp_input; /* trackpoint input node */
59 	struct regulator	*vcc;
60 
61 	const struct elan_transport_ops *ops;
62 
63 	/* for fw update */
64 	struct completion	fw_completion;
65 	bool			in_fw_update;
66 
67 	struct mutex		sysfs_mutex;
68 
69 	unsigned int		max_x;
70 	unsigned int		max_y;
71 	unsigned int		width_x;
72 	unsigned int		width_y;
73 	unsigned int		x_res;
74 	unsigned int		y_res;
75 
76 	u8			pattern;
77 	u16			product_id;
78 	u8			fw_version;
79 	u8			sm_version;
80 	u8			iap_version;
81 	u16			fw_checksum;
82 	unsigned int		report_features;
83 	unsigned int		report_len;
84 	int			pressure_adjustment;
85 	u8			mode;
86 	u16			ic_type;
87 	u16			fw_validpage_count;
88 	u16			fw_page_size;
89 	u16			fw_page_delay;
90 	u32			fw_signature_address;
91 
92 	u8			min_baseline;
93 	u8			max_baseline;
94 	bool			baseline_ready;
95 	u8			clickpad;
96 	bool			middle_button;
97 
98 	u32			quirks;		/* Various quirks */
99 };
100 
elan_i2c_lookup_quirks(u16 ic_type,u16 product_id)101 static u32 elan_i2c_lookup_quirks(u16 ic_type, u16 product_id)
102 {
103 	static const struct {
104 		u16 ic_type;
105 		u16 product_id;
106 		u32 quirks;
107 	} elan_i2c_quirks[] = {
108 		{ 0x0D, ETP_PRODUCT_ID_DELBIN, ETP_QUIRK_QUICK_WAKEUP },
109 		{ 0x0D, ETP_PRODUCT_ID_WHITEBOX, ETP_QUIRK_QUICK_WAKEUP },
110 		{ 0x10, ETP_PRODUCT_ID_VOXEL, ETP_QUIRK_QUICK_WAKEUP },
111 		{ 0x14, ETP_PRODUCT_ID_MAGPIE, ETP_QUIRK_QUICK_WAKEUP },
112 		{ 0x14, ETP_PRODUCT_ID_BOBBA, ETP_QUIRK_QUICK_WAKEUP },
113 	};
114 	u32 quirks = 0;
115 	int i;
116 
117 	for (i = 0; i < ARRAY_SIZE(elan_i2c_quirks); i++) {
118 		if (elan_i2c_quirks[i].ic_type == ic_type &&
119 		    elan_i2c_quirks[i].product_id == product_id) {
120 			quirks = elan_i2c_quirks[i].quirks;
121 		}
122 	}
123 
124 	if (ic_type >= 0x0D && product_id >= 0x123)
125 		quirks |= ETP_QUIRK_QUICK_WAKEUP;
126 
127 	return quirks;
128 }
129 
elan_get_fwinfo(u16 ic_type,u8 iap_version,u16 * validpage_count,u32 * signature_address,u16 * page_size,u16 * page_delay)130 static int elan_get_fwinfo(u16 ic_type, u8 iap_version, u16 *validpage_count,
131 			   u32 *signature_address, u16 *page_size,
132 			   u16 *page_delay)
133 {
134 	*page_delay = 30;
135 
136 	switch (ic_type) {
137 	case 0x00:
138 	case 0x06:
139 	case 0x08:
140 		*validpage_count = 512;
141 		break;
142 	case 0x03:
143 	case 0x07:
144 	case 0x09:
145 	case 0x0A:
146 	case 0x0B:
147 	case 0x0C:
148 		*validpage_count = 768;
149 		break;
150 	case 0x0D:
151 		*validpage_count = 896;
152 		break;
153 	case 0x0E:
154 		*validpage_count = 640;
155 		break;
156 	case 0x10:
157 		*validpage_count = 1024;
158 		break;
159 	case 0x11:
160 		*validpage_count = 1280;
161 		break;
162 	case 0x13:
163 		*validpage_count = 2048;
164 		break;
165 	case 0x14:
166 	case 0x15:
167 		*validpage_count = 1024;
168 		break;
169 	case 0x19:
170 		*validpage_count = 2032;
171 		*page_delay = 10;
172 		break;
173 	default:
174 		/* unknown ic type clear value */
175 		*validpage_count = 0;
176 		*signature_address = 0;
177 		*page_size = 0;
178 		return -ENXIO;
179 	}
180 
181 	*signature_address =
182 		(*validpage_count * ETP_FW_PAGE_SIZE) - ETP_FW_SIGNATURE_SIZE;
183 
184 	if ((ic_type == 0x14 || ic_type == 0x15) && iap_version >= 2) {
185 		*validpage_count /= 8;
186 		*page_size = ETP_FW_PAGE_SIZE_512;
187 		*page_delay = 50;
188 	} else if (ic_type >= 0x0D && iap_version >= 1) {
189 		*validpage_count /= 2;
190 		*page_size = ETP_FW_PAGE_SIZE_128;
191 	} else {
192 		*page_size = ETP_FW_PAGE_SIZE;
193 	}
194 
195 	return 0;
196 }
197 
elan_set_power(struct elan_tp_data * data,bool on)198 static int elan_set_power(struct elan_tp_data *data, bool on)
199 {
200 	int repeat = ETP_RETRY_COUNT;
201 	int error;
202 
203 	do {
204 		error = data->ops->power_control(data->client, on);
205 		if (error >= 0)
206 			return 0;
207 
208 		msleep(30);
209 	} while (--repeat > 0);
210 
211 	dev_err(&data->client->dev, "failed to set power %s: %d\n",
212 		str_on_off(on), error);
213 	return error;
214 }
215 
elan_sleep(struct elan_tp_data * data)216 static int elan_sleep(struct elan_tp_data *data)
217 {
218 	int repeat = ETP_RETRY_COUNT;
219 	int error;
220 
221 	do {
222 		error = data->ops->sleep_control(data->client, true);
223 		if (!error)
224 			return 0;
225 
226 		msleep(30);
227 	} while (--repeat > 0);
228 
229 	return error;
230 }
231 
elan_query_product(struct elan_tp_data * data)232 static int elan_query_product(struct elan_tp_data *data)
233 {
234 	int error;
235 
236 	error = data->ops->get_product_id(data->client, &data->product_id);
237 	if (error)
238 		return error;
239 
240 	error = data->ops->get_pattern(data->client, &data->pattern);
241 	if (error)
242 		return error;
243 
244 	error = data->ops->get_sm_version(data->client, data->pattern,
245 					  &data->ic_type, &data->sm_version,
246 					  &data->clickpad);
247 	if (error)
248 		return error;
249 
250 	return 0;
251 }
252 
elan_check_ASUS_special_fw(struct elan_tp_data * data)253 static int elan_check_ASUS_special_fw(struct elan_tp_data *data)
254 {
255 	if (data->ic_type == 0x0E) {
256 		switch (data->product_id) {
257 		case 0x05 ... 0x07:
258 		case 0x09:
259 		case 0x13:
260 			return true;
261 		}
262 	} else if (data->ic_type == 0x08 && data->product_id == 0x26) {
263 		/* ASUS EeeBook X205TA */
264 		return true;
265 	}
266 
267 	return false;
268 }
269 
__elan_initialize(struct elan_tp_data * data,bool skip_reset)270 static int __elan_initialize(struct elan_tp_data *data, bool skip_reset)
271 {
272 	struct i2c_client *client = data->client;
273 	bool woken_up = false;
274 	int error;
275 
276 	if (!skip_reset) {
277 		error = data->ops->initialize(client);
278 		if (error) {
279 			dev_err(&client->dev, "device initialize failed: %d\n", error);
280 			return error;
281 		}
282 	}
283 
284 	error = elan_query_product(data);
285 	if (error)
286 		return error;
287 
288 	/*
289 	 * Some ASUS devices were shipped with firmware that requires
290 	 * touchpads to be woken up first, before attempting to switch
291 	 * them into absolute reporting mode.
292 	 */
293 	if (elan_check_ASUS_special_fw(data)) {
294 		error = data->ops->sleep_control(client, false);
295 		if (error) {
296 			dev_err(&client->dev,
297 				"failed to wake device up: %d\n", error);
298 			return error;
299 		}
300 
301 		msleep(200);
302 		woken_up = true;
303 	}
304 
305 	data->mode |= ETP_ENABLE_ABS;
306 	error = data->ops->set_mode(client, data->mode);
307 	if (error) {
308 		dev_err(&client->dev,
309 			"failed to switch to absolute mode: %d\n", error);
310 		return error;
311 	}
312 
313 	if (!woken_up) {
314 		error = data->ops->sleep_control(client, false);
315 		if (error) {
316 			dev_err(&client->dev,
317 				"failed to wake device up: %d\n", error);
318 			return error;
319 		}
320 	}
321 
322 	return 0;
323 }
324 
elan_initialize(struct elan_tp_data * data,bool skip_reset)325 static int elan_initialize(struct elan_tp_data *data, bool skip_reset)
326 {
327 	int repeat = ETP_RETRY_COUNT;
328 	int error;
329 
330 	do {
331 		error = __elan_initialize(data, skip_reset);
332 		if (!error)
333 			return 0;
334 
335 		skip_reset = false;
336 		msleep(30);
337 	} while (--repeat > 0);
338 
339 	return error;
340 }
341 
elan_query_device_info(struct elan_tp_data * data)342 static int elan_query_device_info(struct elan_tp_data *data)
343 {
344 	int error;
345 
346 	error = data->ops->get_version(data->client, data->pattern, false,
347 				       &data->fw_version);
348 	if (error)
349 		return error;
350 
351 	error = data->ops->get_checksum(data->client, false,
352 					&data->fw_checksum);
353 	if (error)
354 		return error;
355 
356 	error = data->ops->get_version(data->client, data->pattern,
357 				       true, &data->iap_version);
358 	if (error)
359 		return error;
360 
361 	error = data->ops->get_pressure_adjustment(data->client,
362 						   &data->pressure_adjustment);
363 	if (error)
364 		return error;
365 
366 	error = data->ops->get_report_features(data->client, data->pattern,
367 					       &data->report_features,
368 					       &data->report_len);
369 	if (error)
370 		return error;
371 
372 	data->quirks = elan_i2c_lookup_quirks(data->ic_type, data->product_id);
373 
374 	error = elan_get_fwinfo(data->ic_type, data->iap_version,
375 				&data->fw_validpage_count,
376 				&data->fw_signature_address,
377 				&data->fw_page_size,
378 				&data->fw_page_delay);
379 	if (error)
380 		dev_warn(&data->client->dev,
381 			 "unexpected iap version %#04x (ic type: %#04x), firmware update will not work\n",
382 			 data->iap_version, data->ic_type);
383 
384 	return 0;
385 }
386 
elan_convert_resolution(u8 val,u8 pattern)387 static unsigned int elan_convert_resolution(u8 val, u8 pattern)
388 {
389 	/*
390 	 * pattern <= 0x01:
391 	 *	(value from firmware) * 10 + 790 = dpi
392 	 * else
393 	 *	((value from firmware) + 3) * 100 = dpi
394 	 */
395 	int res = pattern <= 0x01 ?
396 		(int)(char)val * 10 + 790 : ((int)(char)val + 3) * 100;
397 	/*
398 	 * We also have to convert dpi to dots/mm (*10/254 to avoid floating
399 	 * point).
400 	 */
401 	return res * 10 / 254;
402 }
403 
elan_query_device_parameters(struct elan_tp_data * data)404 static int elan_query_device_parameters(struct elan_tp_data *data)
405 {
406 	struct i2c_client *client = data->client;
407 	unsigned int x_traces, y_traces;
408 	u32 x_mm, y_mm;
409 	u8 hw_x_res, hw_y_res;
410 	int error;
411 
412 	if (device_property_read_u32(&client->dev,
413 				     "touchscreen-size-x", &data->max_x) ||
414 	    device_property_read_u32(&client->dev,
415 				     "touchscreen-size-y", &data->max_y)) {
416 		error = data->ops->get_max(data->client,
417 					   &data->max_x,
418 					   &data->max_y);
419 		if (error)
420 			return error;
421 	} else {
422 		/* size is the maximum + 1 */
423 		--data->max_x;
424 		--data->max_y;
425 	}
426 
427 	if (device_property_read_u32(&client->dev,
428 				     "elan,x_traces",
429 				     &x_traces) ||
430 	    device_property_read_u32(&client->dev,
431 				     "elan,y_traces",
432 				     &y_traces)) {
433 		error = data->ops->get_num_traces(data->client,
434 						  &x_traces, &y_traces);
435 		if (error)
436 			return error;
437 	}
438 
439 	if (!x_traces || !y_traces) {
440 		dev_warn(&client->dev,
441 			 "invalid trace numbers: x=%u, y=%u\n",
442 			 x_traces, y_traces);
443 		data->width_x = 1;
444 		data->width_y = 1;
445 	} else {
446 		data->width_x = data->max_x / x_traces;
447 		data->width_y = data->max_y / y_traces;
448 	}
449 
450 	if (device_property_read_u32(&client->dev,
451 				     "touchscreen-x-mm", &x_mm) ||
452 	    device_property_read_u32(&client->dev,
453 				     "touchscreen-y-mm", &y_mm)) {
454 		error = data->ops->get_resolution(data->client,
455 						  &hw_x_res, &hw_y_res);
456 		if (error)
457 			return error;
458 
459 		data->x_res = elan_convert_resolution(hw_x_res, data->pattern);
460 		data->y_res = elan_convert_resolution(hw_y_res, data->pattern);
461 	} else {
462 		if (unlikely(x_mm == 0 || y_mm == 0)) {
463 			dev_warn(&client->dev,
464 				 "invalid physical dimensions: x_mm=%u, y_mm=%u\n",
465 				 x_mm, y_mm);
466 			data->x_res = 1;
467 			data->y_res = 1;
468 		} else {
469 			data->x_res = (data->max_x + 1) / x_mm;
470 			data->y_res = (data->max_y + 1) / y_mm;
471 		}
472 	}
473 
474 	if (device_property_read_bool(&client->dev, "elan,clickpad"))
475 		data->clickpad = 1;
476 
477 	if (device_property_read_bool(&client->dev, "elan,middle-button"))
478 		data->middle_button = true;
479 
480 	return 0;
481 }
482 
483 /*
484  **********************************************************
485  * IAP firmware updater related routines
486  **********************************************************
487  */
elan_write_fw_block(struct elan_tp_data * data,u16 page_size,u16 page_delay,const u8 * page,u16 checksum,int idx)488 static int elan_write_fw_block(struct elan_tp_data *data, u16 page_size,
489 			       u16 page_delay, const u8 *page, u16 checksum,
490 			       int idx)
491 {
492 	int retry = ETP_RETRY_COUNT;
493 	int error;
494 
495 	do {
496 		error = data->ops->write_fw_block(data->client, page_size,
497 						  page_delay, page, checksum,
498 						  idx);
499 		if (!error)
500 			return 0;
501 
502 		dev_dbg(&data->client->dev,
503 			"IAP retrying page %d (error: %d)\n", idx, error);
504 	} while (--retry > 0);
505 
506 	return error;
507 }
508 
__elan_update_firmware(struct elan_tp_data * data,const struct firmware * fw)509 static int __elan_update_firmware(struct elan_tp_data *data,
510 				  const struct firmware *fw)
511 {
512 	struct i2c_client *client = data->client;
513 	struct device *dev = &client->dev;
514 	int i, j;
515 	int error;
516 	u16 iap_start_addr;
517 	u16 boot_page_count;
518 	u16 sw_checksum = 0, fw_checksum = 0;
519 
520 	error = data->ops->prepare_fw_update(client, data->ic_type,
521 					     data->iap_version,
522 					     data->fw_page_size);
523 	if (error)
524 		return error;
525 
526 	iap_start_addr = get_unaligned_le16(&fw->data[ETP_IAP_START_ADDR * 2]);
527 
528 	boot_page_count = (iap_start_addr * 2) / data->fw_page_size;
529 	for (i = boot_page_count; i < data->fw_validpage_count; i++) {
530 		u16 checksum = 0;
531 		const u8 *page = &fw->data[i * data->fw_page_size];
532 
533 		for (j = 0; j < data->fw_page_size; j += 2)
534 			checksum += ((page[j + 1] << 8) | page[j]);
535 
536 		error = elan_write_fw_block(data, data->fw_page_size,
537 					    data->fw_page_delay, page, checksum,
538 					    i);
539 		if (error) {
540 			dev_err(dev, "write page %d fail: %d\n", i, error);
541 			return error;
542 		}
543 
544 		sw_checksum += checksum;
545 	}
546 
547 	/* Wait WDT reset and power on reset */
548 	msleep(600);
549 
550 	error = data->ops->finish_fw_update(client, &data->fw_completion);
551 	if (error)
552 		return error;
553 
554 	error = data->ops->get_checksum(client, true, &fw_checksum);
555 	if (error)
556 		return error;
557 
558 	if (sw_checksum != fw_checksum) {
559 		dev_err(dev, "checksum diff sw=[%04X], fw=[%04X]\n",
560 			sw_checksum, fw_checksum);
561 		return -EIO;
562 	}
563 
564 	return 0;
565 }
566 
elan_update_firmware(struct elan_tp_data * data,const struct firmware * fw)567 static int elan_update_firmware(struct elan_tp_data *data,
568 				const struct firmware *fw)
569 {
570 	struct i2c_client *client = data->client;
571 	int retval;
572 
573 	dev_dbg(&client->dev, "Starting firmware update....\n");
574 
575 	guard(disable_irq)(&client->irq);
576 
577 	data->in_fw_update = true;
578 
579 	retval = __elan_update_firmware(data, fw);
580 	if (retval) {
581 		dev_err(&client->dev, "firmware update failed: %d\n", retval);
582 		data->ops->iap_reset(client);
583 	} else {
584 		/* Reinitialize TP after fw is updated */
585 		elan_initialize(data, false);
586 		elan_query_device_info(data);
587 	}
588 
589 	data->in_fw_update = false;
590 
591 	return retval;
592 }
593 
594 /*
595  *******************************************************************
596  * SYSFS attributes
597  *******************************************************************
598  */
elan_sysfs_read_fw_checksum(struct device * dev,struct device_attribute * attr,char * buf)599 static ssize_t elan_sysfs_read_fw_checksum(struct device *dev,
600 					   struct device_attribute *attr,
601 					   char *buf)
602 {
603 	struct i2c_client *client = to_i2c_client(dev);
604 	struct elan_tp_data *data = i2c_get_clientdata(client);
605 
606 	return sysfs_emit(buf, "0x%04x\n", data->fw_checksum);
607 }
608 
elan_sysfs_read_product_id(struct device * dev,struct device_attribute * attr,char * buf)609 static ssize_t elan_sysfs_read_product_id(struct device *dev,
610 					 struct device_attribute *attr,
611 					 char *buf)
612 {
613 	struct i2c_client *client = to_i2c_client(dev);
614 	struct elan_tp_data *data = i2c_get_clientdata(client);
615 
616 	return sysfs_emit(buf, ETP_PRODUCT_ID_FORMAT_STRING "\n",
617 			  data->product_id);
618 }
619 
elan_sysfs_read_fw_ver(struct device * dev,struct device_attribute * attr,char * buf)620 static ssize_t elan_sysfs_read_fw_ver(struct device *dev,
621 				      struct device_attribute *attr,
622 				      char *buf)
623 {
624 	struct i2c_client *client = to_i2c_client(dev);
625 	struct elan_tp_data *data = i2c_get_clientdata(client);
626 
627 	return sysfs_emit(buf, "%d.0\n", data->fw_version);
628 }
629 
elan_sysfs_read_sm_ver(struct device * dev,struct device_attribute * attr,char * buf)630 static ssize_t elan_sysfs_read_sm_ver(struct device *dev,
631 				      struct device_attribute *attr,
632 				      char *buf)
633 {
634 	struct i2c_client *client = to_i2c_client(dev);
635 	struct elan_tp_data *data = i2c_get_clientdata(client);
636 
637 	return sysfs_emit(buf, "%d.0\n", data->sm_version);
638 }
639 
elan_sysfs_read_iap_ver(struct device * dev,struct device_attribute * attr,char * buf)640 static ssize_t elan_sysfs_read_iap_ver(struct device *dev,
641 				       struct device_attribute *attr,
642 				       char *buf)
643 {
644 	struct i2c_client *client = to_i2c_client(dev);
645 	struct elan_tp_data *data = i2c_get_clientdata(client);
646 
647 	return sysfs_emit(buf, "%d.0\n", data->iap_version);
648 }
649 
elan_sysfs_update_fw(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)650 static ssize_t elan_sysfs_update_fw(struct device *dev,
651 				    struct device_attribute *attr,
652 				    const char *buf, size_t count)
653 {
654 	struct elan_tp_data *data = dev_get_drvdata(dev);
655 	int error;
656 	const u8 *fw_signature;
657 	static const u8 signature[] = {0xAA, 0x55, 0xCC, 0x33, 0xFF, 0xFF};
658 
659 	if (data->fw_validpage_count == 0)
660 		return -EINVAL;
661 
662 	/* Look for a firmware with the product id appended. */
663 	const char *fw_name __free(kfree) =
664 		kasprintf(GFP_KERNEL, ETP_FW_NAME, data->product_id);
665 	if (!fw_name) {
666 		dev_err(dev, "failed to allocate memory for firmware name\n");
667 		return -ENOMEM;
668 	}
669 
670 	dev_info(dev, "requesting fw '%s'\n", fw_name);
671 	const struct firmware *fw __free(firmware) = NULL;
672 	error = request_firmware(&fw, fw_name, dev);
673 	if (error) {
674 		dev_err(dev, "failed to request firmware: %d\n", error);
675 		return error;
676 	}
677 
678 	if (fw->size < data->fw_signature_address + sizeof(signature)) {
679 		dev_err(dev, "firmware file too small\n");
680 		return -EBADF;
681 	}
682 
683 	/* Firmware file must match signature data */
684 	fw_signature = &fw->data[data->fw_signature_address];
685 	if (memcmp(fw_signature, signature, sizeof(signature)) != 0) {
686 		dev_err(dev, "signature mismatch (expected %*ph, got %*ph)\n",
687 			(int)sizeof(signature), signature,
688 			(int)sizeof(signature), fw_signature);
689 		return -EBADF;
690 	}
691 
692 	scoped_cond_guard(mutex_intr, return -EINTR, &data->sysfs_mutex) {
693 		error = elan_update_firmware(data, fw);
694 		if (error)
695 			return error;
696 	}
697 
698 	return count;
699 }
700 
elan_calibrate(struct elan_tp_data * data)701 static int elan_calibrate(struct elan_tp_data *data)
702 {
703 	struct i2c_client *client = data->client;
704 	struct device *dev = &client->dev;
705 	int tries = 20;
706 	int retval;
707 	int error;
708 	u8 val[ETP_CALIBRATE_MAX_LEN];
709 
710 	guard(disable_irq)(&client->irq);
711 
712 	data->mode |= ETP_ENABLE_CALIBRATE;
713 	retval = data->ops->set_mode(client, data->mode);
714 	if (retval) {
715 		data->mode &= ~ETP_ENABLE_CALIBRATE;
716 		dev_err(dev, "failed to enable calibration mode: %d\n",
717 			retval);
718 		return retval;
719 	}
720 
721 	retval = data->ops->calibrate(client);
722 	if (retval) {
723 		dev_err(dev, "failed to start calibration: %d\n",
724 			retval);
725 		goto out_disable_calibrate;
726 	}
727 
728 	val[0] = 0xff;
729 	do {
730 		/* Wait 250ms before checking if calibration has completed. */
731 		msleep(250);
732 
733 		retval = data->ops->calibrate_result(client, val);
734 		if (retval)
735 			dev_err(dev, "failed to check calibration result: %d\n",
736 				retval);
737 		else if (val[0] == 0)
738 			break; /* calibration done */
739 
740 	} while (--tries);
741 
742 	if (tries == 0) {
743 		dev_err(dev, "failed to calibrate. Timeout.\n");
744 		retval = -ETIMEDOUT;
745 	}
746 
747 out_disable_calibrate:
748 	data->mode &= ~ETP_ENABLE_CALIBRATE;
749 	error = data->ops->set_mode(data->client, data->mode);
750 	if (error) {
751 		dev_err(dev, "failed to disable calibration mode: %d\n",
752 			error);
753 		if (!retval)
754 			retval = error;
755 	}
756 	return retval;
757 }
758 
calibrate_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)759 static ssize_t calibrate_store(struct device *dev,
760 			       struct device_attribute *attr,
761 			       const char *buf, size_t count)
762 {
763 	struct i2c_client *client = to_i2c_client(dev);
764 	struct elan_tp_data *data = i2c_get_clientdata(client);
765 	int error;
766 
767 	scoped_cond_guard(mutex_intr, return -EINTR, &data->sysfs_mutex) {
768 		error = elan_calibrate(data);
769 		if (error)
770 			return error;
771 	}
772 
773 	return count;
774 }
775 
elan_sysfs_read_mode(struct device * dev,struct device_attribute * attr,char * buf)776 static ssize_t elan_sysfs_read_mode(struct device *dev,
777 				    struct device_attribute *attr,
778 				    char *buf)
779 {
780 	struct i2c_client *client = to_i2c_client(dev);
781 	struct elan_tp_data *data = i2c_get_clientdata(client);
782 	int error;
783 	enum tp_mode mode;
784 
785 	scoped_cond_guard(mutex_intr, return -EINTR, &data->sysfs_mutex) {
786 		error = data->ops->iap_get_mode(data->client, &mode);
787 		if (error)
788 			return error;
789 	}
790 
791 	return sysfs_emit(buf, "%d\n", (int)mode);
792 }
793 
794 static DEVICE_ATTR(product_id, S_IRUGO, elan_sysfs_read_product_id, NULL);
795 static DEVICE_ATTR(firmware_version, S_IRUGO, elan_sysfs_read_fw_ver, NULL);
796 static DEVICE_ATTR(sample_version, S_IRUGO, elan_sysfs_read_sm_ver, NULL);
797 static DEVICE_ATTR(iap_version, S_IRUGO, elan_sysfs_read_iap_ver, NULL);
798 static DEVICE_ATTR(fw_checksum, S_IRUGO, elan_sysfs_read_fw_checksum, NULL);
799 static DEVICE_ATTR(mode, S_IRUGO, elan_sysfs_read_mode, NULL);
800 static DEVICE_ATTR(update_fw, S_IWUSR, NULL, elan_sysfs_update_fw);
801 
802 static DEVICE_ATTR_WO(calibrate);
803 
804 static struct attribute *elan_sysfs_entries[] = {
805 	&dev_attr_product_id.attr,
806 	&dev_attr_firmware_version.attr,
807 	&dev_attr_sample_version.attr,
808 	&dev_attr_iap_version.attr,
809 	&dev_attr_fw_checksum.attr,
810 	&dev_attr_calibrate.attr,
811 	&dev_attr_mode.attr,
812 	&dev_attr_update_fw.attr,
813 	NULL,
814 };
815 
816 static const struct attribute_group elan_sysfs_group = {
817 	.attrs = elan_sysfs_entries,
818 };
819 
elan_acquire_baseline(struct elan_tp_data * data)820 static int elan_acquire_baseline(struct elan_tp_data *data)
821 {
822 	struct i2c_client *client = data->client;
823 	struct device *dev = &client->dev;
824 	int retval;
825 	int error;
826 
827 	guard(disable_irq)(&client->irq);
828 
829 	data->baseline_ready = false;
830 
831 	data->mode |= ETP_ENABLE_CALIBRATE;
832 	retval = data->ops->set_mode(client, data->mode);
833 	if (retval) {
834 		data->mode &= ~ETP_ENABLE_CALIBRATE;
835 		dev_err(dev, "Failed to enable calibration mode to get baseline: %d\n",
836 			retval);
837 		return retval;
838 	}
839 
840 	msleep(250);
841 
842 	retval = data->ops->get_baseline_data(client, true,
843 					      &data->max_baseline);
844 	if (retval) {
845 		dev_err(dev, "Failed to read max baseline from device: %d\n",
846 			retval);
847 		goto out_disable_calibrate;
848 	}
849 
850 	retval = data->ops->get_baseline_data(client, false,
851 					      &data->min_baseline);
852 	if (retval) {
853 		dev_err(dev, "Failed to read min baseline from device: %d\n",
854 			retval);
855 		goto out_disable_calibrate;
856 	}
857 
858 	data->baseline_ready = true;
859 
860 out_disable_calibrate:
861 	data->mode &= ~ETP_ENABLE_CALIBRATE;
862 	error = data->ops->set_mode(client, data->mode);
863 	if (error) {
864 		dev_err(dev, "Failed to disable calibration mode after acquiring baseline: %d\n",
865 			error);
866 		if (!retval)
867 			retval = error;
868 	}
869 
870 	return retval;
871 }
872 
acquire_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)873 static ssize_t acquire_store(struct device *dev, struct device_attribute *attr,
874 			     const char *buf, size_t count)
875 {
876 	struct i2c_client *client = to_i2c_client(dev);
877 	struct elan_tp_data *data = i2c_get_clientdata(client);
878 	int error;
879 
880 	scoped_cond_guard(mutex_intr, return -EINTR, &data->sysfs_mutex) {
881 		error = elan_acquire_baseline(data);
882 		if (error)
883 			return error;
884 	}
885 
886 	return count;
887 }
888 
min_show(struct device * dev,struct device_attribute * attr,char * buf)889 static ssize_t min_show(struct device *dev,
890 			struct device_attribute *attr, char *buf)
891 {
892 	struct i2c_client *client = to_i2c_client(dev);
893 	struct elan_tp_data *data = i2c_get_clientdata(client);
894 
895 	scoped_guard(mutex_intr, &data->sysfs_mutex) {
896 		if (!data->baseline_ready)
897 			return -ENODATA;
898 
899 		return sysfs_emit(buf, "%d", data->min_baseline);
900 	}
901 
902 	return -EINTR;
903 }
904 
max_show(struct device * dev,struct device_attribute * attr,char * buf)905 static ssize_t max_show(struct device *dev,
906 			struct device_attribute *attr, char *buf)
907 {
908 	struct i2c_client *client = to_i2c_client(dev);
909 	struct elan_tp_data *data = i2c_get_clientdata(client);
910 
911 	scoped_guard(mutex_intr, &data->sysfs_mutex) {
912 		if (!data->baseline_ready)
913 			return -ENODATA;
914 
915 		return sysfs_emit(buf, "%d", data->max_baseline);
916 	}
917 
918 	return -EINTR;
919 }
920 
921 static DEVICE_ATTR_WO(acquire);
922 static DEVICE_ATTR_RO(min);
923 static DEVICE_ATTR_RO(max);
924 
925 static struct attribute *elan_baseline_sysfs_entries[] = {
926 	&dev_attr_acquire.attr,
927 	&dev_attr_min.attr,
928 	&dev_attr_max.attr,
929 	NULL,
930 };
931 
932 static const struct attribute_group elan_baseline_sysfs_group = {
933 	.name = "baseline",
934 	.attrs = elan_baseline_sysfs_entries,
935 };
936 
937 static const struct attribute_group *elan_sysfs_groups[] = {
938 	&elan_sysfs_group,
939 	&elan_baseline_sysfs_group,
940 	NULL
941 };
942 
943 /*
944  ******************************************************************
945  * Elan isr functions
946  ******************************************************************
947  */
elan_report_contact(struct elan_tp_data * data,int contact_num,bool contact_valid,bool high_precision,u8 * packet,u8 * finger_data)948 static void elan_report_contact(struct elan_tp_data *data, int contact_num,
949 				bool contact_valid, bool high_precision,
950 				u8 *packet, u8 *finger_data)
951 {
952 	struct input_dev *input = data->input;
953 	unsigned int pos_x, pos_y;
954 	unsigned int pressure, scaled_pressure;
955 
956 	if (contact_valid) {
957 		if (high_precision) {
958 			pos_x = get_unaligned_be16(&finger_data[0]);
959 			pos_y = get_unaligned_be16(&finger_data[2]);
960 		} else {
961 			pos_x = ((finger_data[0] & 0xf0) << 4) | finger_data[1];
962 			pos_y = ((finger_data[0] & 0x0f) << 8) | finger_data[2];
963 		}
964 
965 		if (pos_x > data->max_x || pos_y > data->max_y) {
966 			dev_dbg(input->dev.parent,
967 				"[%d] x=%d y=%d over max (%d, %d)",
968 				contact_num, pos_x, pos_y,
969 				data->max_x, data->max_y);
970 			return;
971 		}
972 
973 		pressure = finger_data[4];
974 		scaled_pressure = pressure + data->pressure_adjustment;
975 		if (scaled_pressure > ETP_MAX_PRESSURE)
976 			scaled_pressure = ETP_MAX_PRESSURE;
977 
978 		input_mt_slot(input, contact_num);
979 		input_mt_report_slot_state(input, MT_TOOL_FINGER, true);
980 		input_report_abs(input, ABS_MT_POSITION_X, pos_x);
981 		input_report_abs(input, ABS_MT_POSITION_Y, data->max_y - pos_y);
982 		input_report_abs(input, ABS_MT_PRESSURE, scaled_pressure);
983 
984 		if (data->report_features & ETP_FEATURE_REPORT_MK) {
985 			unsigned int mk_x, mk_y, area_x, area_y;
986 			int adj_width_x, adj_width_y;
987 			u8 mk_data = high_precision ?
988 				packet[ETP_MK_DATA_OFFSET + contact_num] :
989 				finger_data[3];
990 
991 			mk_x = mk_data & 0x0f;
992 			mk_y = mk_data >> 4;
993 
994 			/*
995 			 * To avoid treating large finger as palm, let's reduce
996 			 * the width x and y per trace.
997 			 */
998 
999 			adj_width_x = data->width_x > ETP_FWIDTH_REDUCE ?
1000 					data->width_x - ETP_FWIDTH_REDUCE : 0;
1001 			adj_width_y = data->width_y > ETP_FWIDTH_REDUCE ?
1002 					data->width_y - ETP_FWIDTH_REDUCE : 0;
1003 
1004 			area_x = mk_x * adj_width_x;
1005 			area_y = mk_y * adj_width_y;
1006 
1007 			input_report_abs(input, ABS_TOOL_WIDTH, mk_x);
1008 			input_report_abs(input, ABS_MT_TOUCH_MAJOR,
1009 					 max(area_x, area_y));
1010 			input_report_abs(input, ABS_MT_TOUCH_MINOR,
1011 					 min(area_x, area_y));
1012 		}
1013 	} else {
1014 		input_mt_slot(input, contact_num);
1015 		input_mt_report_slot_inactive(input);
1016 	}
1017 }
1018 
elan_report_absolute(struct elan_tp_data * data,u8 * packet,bool high_precision)1019 static void elan_report_absolute(struct elan_tp_data *data, u8 *packet,
1020 				 bool high_precision)
1021 {
1022 	struct input_dev *input = data->input;
1023 	u8 *finger_data = &packet[ETP_FINGER_DATA_OFFSET];
1024 	int i;
1025 	u8 tp_info = packet[ETP_TOUCH_INFO_OFFSET];
1026 	u8 hover_info = packet[ETP_HOVER_INFO_OFFSET];
1027 	bool contact_valid, hover_event;
1028 
1029 	pm_wakeup_event(&data->client->dev, 0);
1030 
1031 	hover_event = hover_info & BIT(6);
1032 
1033 	for (i = 0; i < ETP_MAX_FINGERS; i++) {
1034 		contact_valid = tp_info & BIT(3 + i);
1035 		elan_report_contact(data, i, contact_valid, high_precision,
1036 				    packet, finger_data);
1037 		if (contact_valid)
1038 			finger_data += ETP_FINGER_DATA_LEN;
1039 	}
1040 
1041 	input_report_key(input, BTN_LEFT,   tp_info & BIT(0));
1042 	input_report_key(input, BTN_MIDDLE, tp_info & BIT(2));
1043 	input_report_key(input, BTN_RIGHT,  tp_info & BIT(1));
1044 	input_report_abs(input, ABS_DISTANCE, hover_event != 0);
1045 	input_mt_report_pointer_emulation(input, true);
1046 	input_sync(input);
1047 }
1048 
elan_report_trackpoint(struct elan_tp_data * data,u8 * report)1049 static void elan_report_trackpoint(struct elan_tp_data *data, u8 *report)
1050 {
1051 	struct input_dev *input = data->tp_input;
1052 	u8 *packet = &report[ETP_REPORT_ID_OFFSET + 1];
1053 	int x, y;
1054 
1055 	pm_wakeup_event(&data->client->dev, 0);
1056 
1057 	if (!data->tp_input) {
1058 		dev_warn_once(&data->client->dev,
1059 			      "received a trackpoint report while no trackpoint device has been created. Please report upstream.\n");
1060 		return;
1061 	}
1062 
1063 	input_report_key(input, BTN_LEFT, packet[0] & 0x01);
1064 	input_report_key(input, BTN_RIGHT, packet[0] & 0x02);
1065 	input_report_key(input, BTN_MIDDLE, packet[0] & 0x04);
1066 
1067 	if ((packet[3] & 0x0F) == 0x06) {
1068 		x = packet[4] - (int)((packet[1] ^ 0x80) << 1);
1069 		y = (int)((packet[2] ^ 0x80) << 1) - packet[5];
1070 
1071 		input_report_rel(input, REL_X, x);
1072 		input_report_rel(input, REL_Y, y);
1073 	}
1074 
1075 	input_sync(input);
1076 }
1077 
elan_isr(int irq,void * dev_id)1078 static irqreturn_t elan_isr(int irq, void *dev_id)
1079 {
1080 	struct elan_tp_data *data = dev_id;
1081 	int error;
1082 	u8 report[ETP_MAX_REPORT_LEN];
1083 
1084 	/*
1085 	 * When device is connected to i2c bus, when all IAP page writes
1086 	 * complete, the driver will receive interrupt and must read
1087 	 * 0000 to confirm that IAP is finished.
1088 	*/
1089 	if (data->in_fw_update) {
1090 		complete(&data->fw_completion);
1091 		goto out;
1092 	}
1093 
1094 	error = data->ops->get_report(data->client, report, data->report_len);
1095 	if (error)
1096 		goto out;
1097 
1098 	switch (report[ETP_REPORT_ID_OFFSET]) {
1099 	case ETP_REPORT_ID:
1100 		elan_report_absolute(data, report, false);
1101 		break;
1102 	case ETP_REPORT_ID2:
1103 		elan_report_absolute(data, report, true);
1104 		break;
1105 	case ETP_TP_REPORT_ID:
1106 	case ETP_TP_REPORT_ID2:
1107 		elan_report_trackpoint(data, report);
1108 		break;
1109 	default:
1110 		dev_err(&data->client->dev, "invalid report id data (%x)\n",
1111 			report[ETP_REPORT_ID_OFFSET]);
1112 	}
1113 
1114 out:
1115 	return IRQ_HANDLED;
1116 }
1117 
1118 /*
1119  ******************************************************************
1120  * Elan initialization functions
1121  ******************************************************************
1122  */
1123 
elan_setup_trackpoint_input_device(struct elan_tp_data * data)1124 static int elan_setup_trackpoint_input_device(struct elan_tp_data *data)
1125 {
1126 	struct device *dev = &data->client->dev;
1127 	struct input_dev *input;
1128 
1129 	input = devm_input_allocate_device(dev);
1130 	if (!input)
1131 		return -ENOMEM;
1132 
1133 	input->name = "Elan TrackPoint";
1134 	input->id.bustype = BUS_I2C;
1135 	input->id.vendor = ELAN_VENDOR_ID;
1136 	input->id.product = data->product_id;
1137 	input_set_drvdata(input, data);
1138 
1139 	input_set_capability(input, EV_REL, REL_X);
1140 	input_set_capability(input, EV_REL, REL_Y);
1141 	input_set_capability(input, EV_KEY, BTN_LEFT);
1142 	input_set_capability(input, EV_KEY, BTN_RIGHT);
1143 	input_set_capability(input, EV_KEY, BTN_MIDDLE);
1144 
1145 	__set_bit(INPUT_PROP_POINTER, input->propbit);
1146 	__set_bit(INPUT_PROP_POINTING_STICK, input->propbit);
1147 
1148 	data->tp_input = input;
1149 
1150 	return 0;
1151 }
1152 
elan_setup_input_device(struct elan_tp_data * data)1153 static int elan_setup_input_device(struct elan_tp_data *data)
1154 {
1155 	struct device *dev = &data->client->dev;
1156 	struct input_dev *input;
1157 	unsigned int max_width = max(data->width_x, data->width_y);
1158 	unsigned int min_width = min(data->width_x, data->width_y);
1159 	int error;
1160 
1161 	input = devm_input_allocate_device(dev);
1162 	if (!input)
1163 		return -ENOMEM;
1164 
1165 	input->name = "Elan Touchpad";
1166 	input->id.bustype = BUS_I2C;
1167 	input->id.vendor = ELAN_VENDOR_ID;
1168 	input->id.product = data->product_id;
1169 	input_set_drvdata(input, data);
1170 
1171 	error = input_mt_init_slots(input, ETP_MAX_FINGERS,
1172 				    INPUT_MT_POINTER | INPUT_MT_DROP_UNUSED);
1173 	if (error) {
1174 		dev_err(dev, "failed to initialize MT slots: %d\n", error);
1175 		return error;
1176 	}
1177 
1178 	__set_bit(EV_ABS, input->evbit);
1179 	__set_bit(INPUT_PROP_POINTER, input->propbit);
1180 	if (data->clickpad) {
1181 		__set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
1182 	} else {
1183 		__set_bit(BTN_RIGHT, input->keybit);
1184 		if (data->middle_button)
1185 			__set_bit(BTN_MIDDLE, input->keybit);
1186 	}
1187 	__set_bit(BTN_LEFT, input->keybit);
1188 
1189 	/* Set up ST parameters */
1190 	input_set_abs_params(input, ABS_X, 0, data->max_x, 0, 0);
1191 	input_set_abs_params(input, ABS_Y, 0, data->max_y, 0, 0);
1192 	input_abs_set_res(input, ABS_X, data->x_res);
1193 	input_abs_set_res(input, ABS_Y, data->y_res);
1194 	input_set_abs_params(input, ABS_PRESSURE, 0, ETP_MAX_PRESSURE, 0, 0);
1195 	if (data->report_features & ETP_FEATURE_REPORT_MK)
1196 		input_set_abs_params(input, ABS_TOOL_WIDTH,
1197 				     0, ETP_FINGER_WIDTH, 0, 0);
1198 	input_set_abs_params(input, ABS_DISTANCE, 0, 1, 0, 0);
1199 
1200 	/* And MT parameters */
1201 	input_set_abs_params(input, ABS_MT_POSITION_X, 0, data->max_x, 0, 0);
1202 	input_set_abs_params(input, ABS_MT_POSITION_Y, 0, data->max_y, 0, 0);
1203 	input_abs_set_res(input, ABS_MT_POSITION_X, data->x_res);
1204 	input_abs_set_res(input, ABS_MT_POSITION_Y, data->y_res);
1205 	input_set_abs_params(input, ABS_MT_PRESSURE, 0,
1206 			     ETP_MAX_PRESSURE, 0, 0);
1207 	if (data->report_features & ETP_FEATURE_REPORT_MK) {
1208 		input_set_abs_params(input, ABS_MT_TOUCH_MAJOR,
1209 				     0, ETP_FINGER_WIDTH * max_width, 0, 0);
1210 		input_set_abs_params(input, ABS_MT_TOUCH_MINOR,
1211 				     0, ETP_FINGER_WIDTH * min_width, 0, 0);
1212 	}
1213 
1214 	data->input = input;
1215 
1216 	return 0;
1217 }
1218 
elan_disable_regulator(void * _data)1219 static void elan_disable_regulator(void *_data)
1220 {
1221 	struct elan_tp_data *data = _data;
1222 
1223 	regulator_disable(data->vcc);
1224 }
1225 
elan_probe(struct i2c_client * client)1226 static int elan_probe(struct i2c_client *client)
1227 {
1228 	const struct elan_transport_ops *transport_ops;
1229 	struct device *dev = &client->dev;
1230 	struct elan_tp_data *data;
1231 	unsigned long irqflags;
1232 	int error;
1233 
1234 	if (IS_ENABLED(CONFIG_MOUSE_ELAN_I2C_I2C) &&
1235 	    i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
1236 		transport_ops = &elan_i2c_ops;
1237 	} else if (IS_ENABLED(CONFIG_MOUSE_ELAN_I2C_SMBUS) &&
1238 		   i2c_check_functionality(client->adapter,
1239 					   I2C_FUNC_SMBUS_BYTE_DATA |
1240 						I2C_FUNC_SMBUS_BLOCK_DATA |
1241 						I2C_FUNC_SMBUS_I2C_BLOCK)) {
1242 		transport_ops = &elan_smbus_ops;
1243 	} else {
1244 		dev_err(dev, "not a supported I2C/SMBus adapter\n");
1245 		return -EIO;
1246 	}
1247 
1248 	data = devm_kzalloc(dev, sizeof(struct elan_tp_data), GFP_KERNEL);
1249 	if (!data)
1250 		return -ENOMEM;
1251 
1252 	i2c_set_clientdata(client, data);
1253 
1254 	data->ops = transport_ops;
1255 	data->client = client;
1256 	init_completion(&data->fw_completion);
1257 	mutex_init(&data->sysfs_mutex);
1258 
1259 	data->vcc = devm_regulator_get(dev, "vcc");
1260 	if (IS_ERR(data->vcc))
1261 		return dev_err_probe(dev, PTR_ERR(data->vcc), "Failed to get 'vcc' regulator\n");
1262 
1263 	error = regulator_enable(data->vcc);
1264 	if (error) {
1265 		dev_err(dev, "Failed to enable regulator: %d\n", error);
1266 		return error;
1267 	}
1268 
1269 	error = devm_add_action_or_reset(dev, elan_disable_regulator, data);
1270 	if (error) {
1271 		dev_err(dev, "Failed to add disable regulator action: %d\n",
1272 			error);
1273 		return error;
1274 	}
1275 
1276 	/* Make sure there is something at this address */
1277 	error = i2c_smbus_read_byte(client);
1278 	if (error < 0) {
1279 		dev_dbg(&client->dev, "nothing at this address: %d\n", error);
1280 		return -ENXIO;
1281 	}
1282 
1283 	/* Initialize the touchpad. */
1284 	error = elan_initialize(data, false);
1285 	if (error)
1286 		return error;
1287 
1288 	error = elan_query_device_info(data);
1289 	if (error)
1290 		return error;
1291 
1292 	error = elan_query_device_parameters(data);
1293 	if (error)
1294 		return error;
1295 
1296 	dev_info(dev,
1297 		 "Elan Touchpad: Module ID: 0x%04x, Firmware: 0x%04x, Sample: 0x%04x, IAP: 0x%04x\n",
1298 		 data->product_id,
1299 		 data->fw_version,
1300 		 data->sm_version,
1301 		 data->iap_version);
1302 
1303 	dev_dbg(dev,
1304 		"Elan Touchpad Extra Information:\n"
1305 		"    Max ABS X,Y:   %d,%d\n"
1306 		"    Width X,Y:   %d,%d\n"
1307 		"    Resolution X,Y:   %d,%d (dots/mm)\n"
1308 		"    ic type: 0x%x\n"
1309 		"    info pattern: 0x%x\n",
1310 		data->max_x, data->max_y,
1311 		data->width_x, data->width_y,
1312 		data->x_res, data->y_res,
1313 		data->ic_type, data->pattern);
1314 
1315 	/* Set up input device properties based on queried parameters. */
1316 	error = elan_setup_input_device(data);
1317 	if (error)
1318 		return error;
1319 
1320 	if (device_property_read_bool(&client->dev, "elan,trackpoint")) {
1321 		error = elan_setup_trackpoint_input_device(data);
1322 		if (error)
1323 			return error;
1324 	}
1325 
1326 	/*
1327 	 * Platform code (ACPI, DTS) should normally set up interrupt
1328 	 * for us, but in case it did not let's fall back to using falling
1329 	 * edge to be compatible with older Chromebooks.
1330 	 */
1331 	irqflags = irq_get_trigger_type(client->irq);
1332 	if (!irqflags)
1333 		irqflags = IRQF_TRIGGER_FALLING;
1334 
1335 	error = devm_request_threaded_irq(dev, client->irq, NULL, elan_isr,
1336 					  irqflags | IRQF_ONESHOT,
1337 					  client->name, data);
1338 	if (error) {
1339 		dev_err(dev, "cannot register irq=%d\n", client->irq);
1340 		return error;
1341 	}
1342 
1343 	error = input_register_device(data->input);
1344 	if (error) {
1345 		dev_err(dev, "failed to register input device: %d\n", error);
1346 		return error;
1347 	}
1348 
1349 	if (data->tp_input) {
1350 		error = input_register_device(data->tp_input);
1351 		if (error) {
1352 			dev_err(&client->dev,
1353 				"failed to register TrackPoint input device: %d\n",
1354 				error);
1355 			return error;
1356 		}
1357 	}
1358 
1359 	return 0;
1360 }
1361 
__elan_suspend(struct elan_tp_data * data)1362 static int __elan_suspend(struct elan_tp_data *data)
1363 {
1364 	struct i2c_client *client = data->client;
1365 	int error;
1366 
1367 	if (device_may_wakeup(&client->dev))
1368 		return elan_sleep(data);
1369 
1370 	/* Touchpad is not a wakeup source */
1371 	error = elan_set_power(data, false);
1372 	if (error)
1373 		return error;
1374 
1375 	error = regulator_disable(data->vcc);
1376 	if (error) {
1377 		dev_err(&client->dev,
1378 			"failed to disable regulator when suspending: %d\n",
1379 			error);
1380 		/* Attempt to power the chip back up */
1381 		elan_set_power(data, true);
1382 		return error;
1383 	}
1384 
1385 	return 0;
1386 }
1387 
elan_suspend(struct device * dev)1388 static int elan_suspend(struct device *dev)
1389 {
1390 	struct i2c_client *client = to_i2c_client(dev);
1391 	struct elan_tp_data *data = i2c_get_clientdata(client);
1392 	int error;
1393 
1394 	/*
1395 	 * We are taking the mutex to make sure sysfs operations are
1396 	 * complete before we attempt to bring the device into low[er]
1397 	 * power mode.
1398 	 */
1399 	scoped_cond_guard(mutex_intr, return -EINTR, &data->sysfs_mutex) {
1400 		disable_irq(client->irq);
1401 
1402 		error = __elan_suspend(data);
1403 		if (error) {
1404 			enable_irq(client->irq);
1405 			return error;
1406 		}
1407 	}
1408 
1409 	return 0;
1410 }
1411 
elan_resume(struct device * dev)1412 static int elan_resume(struct device *dev)
1413 {
1414 	struct i2c_client *client = to_i2c_client(dev);
1415 	struct elan_tp_data *data = i2c_get_clientdata(client);
1416 	int error;
1417 
1418 	if (!device_may_wakeup(dev)) {
1419 		error = regulator_enable(data->vcc);
1420 		if (error) {
1421 			dev_err(dev, "error %d enabling regulator\n", error);
1422 			goto err;
1423 		}
1424 	}
1425 
1426 	error = elan_set_power(data, true);
1427 	if (error) {
1428 		dev_err(dev, "power up when resuming failed: %d\n", error);
1429 		goto err;
1430 	}
1431 
1432 	error = elan_initialize(data, data->quirks & ETP_QUIRK_QUICK_WAKEUP);
1433 	if (error)
1434 		dev_err(dev, "initialize when resuming failed: %d\n", error);
1435 
1436 err:
1437 	enable_irq(data->client->irq);
1438 	return error;
1439 }
1440 
1441 static DEFINE_SIMPLE_DEV_PM_OPS(elan_pm_ops, elan_suspend, elan_resume);
1442 
1443 static const struct i2c_device_id elan_id[] = {
1444 	{ .name = DRIVER_NAME },
1445 	{ }
1446 };
1447 MODULE_DEVICE_TABLE(i2c, elan_id);
1448 
1449 #ifdef CONFIG_ACPI
1450 #include <linux/input/elan-i2c-ids.h>
1451 MODULE_DEVICE_TABLE(acpi, elan_acpi_id);
1452 #endif
1453 
1454 #ifdef CONFIG_OF
1455 static const struct of_device_id elan_of_match[] = {
1456 	{ .compatible = "elan,ekth3000" },
1457 	{ /* sentinel */ }
1458 };
1459 MODULE_DEVICE_TABLE(of, elan_of_match);
1460 #endif
1461 
1462 static struct i2c_driver elan_driver = {
1463 	.driver = {
1464 		.name	= DRIVER_NAME,
1465 		.pm	= pm_sleep_ptr(&elan_pm_ops),
1466 		.acpi_match_table = ACPI_PTR(elan_acpi_id),
1467 		.of_match_table = of_match_ptr(elan_of_match),
1468 		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
1469 		.dev_groups = elan_sysfs_groups,
1470 	},
1471 	.probe		= elan_probe,
1472 	.id_table	= elan_id,
1473 };
1474 
1475 module_i2c_driver(elan_driver);
1476 
1477 MODULE_AUTHOR("Duson Lin <dusonlin@emc.com.tw>");
1478 MODULE_DESCRIPTION("Elan I2C/SMBus Touchpad driver");
1479 MODULE_LICENSE("GPL");
1480