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