GNU Linux-libre 4.9.328-gnu1
[releases.git] / drivers / input / touchscreen / goodix.c
1 /*
2  *  Driver for Goodix Touchscreens
3  *
4  *  Copyright (c) 2014 Red Hat Inc.
5  *  Copyright (c) 2015 K. Merker <merker@debian.org>
6  *
7  *  This code is based on gt9xx.c authored by andrew@goodix.com:
8  *
9  *  2010 - 2012 Goodix Technology.
10  */
11
12 /*
13  * This program is free software; you can redistribute it and/or modify it
14  * under the terms of the GNU General Public License as published by the Free
15  * Software Foundation; version 2 of the License.
16  */
17
18 #include <linux/kernel.h>
19 #include <linux/dmi.h>
20 #include <linux/firmware.h>
21 #include <linux/gpio/consumer.h>
22 #include <linux/i2c.h>
23 #include <linux/input.h>
24 #include <linux/input/mt.h>
25 #include <linux/module.h>
26 #include <linux/delay.h>
27 #include <linux/irq.h>
28 #include <linux/interrupt.h>
29 #include <linux/slab.h>
30 #include <linux/acpi.h>
31 #include <linux/of.h>
32 #include <asm/unaligned.h>
33
34 struct goodix_ts_data {
35         struct i2c_client *client;
36         struct input_dev *input_dev;
37         int abs_x_max;
38         int abs_y_max;
39         bool swapped_x_y;
40         bool inverted_x;
41         bool inverted_y;
42         unsigned int max_touch_num;
43         unsigned int int_trigger_type;
44         int cfg_len;
45         struct gpio_desc *gpiod_int;
46         struct gpio_desc *gpiod_rst;
47         u16 id;
48         u16 version;
49         const char *cfg_name;
50         struct completion firmware_loading_complete;
51         unsigned long irq_flags;
52 };
53
54 #define GOODIX_GPIO_INT_NAME            "irq"
55 #define GOODIX_GPIO_RST_NAME            "reset"
56
57 #define GOODIX_MAX_HEIGHT               4096
58 #define GOODIX_MAX_WIDTH                4096
59 #define GOODIX_INT_TRIGGER              1
60 #define GOODIX_CONTACT_SIZE             8
61 #define GOODIX_MAX_CONTACTS             10
62
63 #define GOODIX_CONFIG_MAX_LENGTH        240
64 #define GOODIX_CONFIG_911_LENGTH        186
65 #define GOODIX_CONFIG_967_LENGTH        228
66
67 /* Register defines */
68 #define GOODIX_REG_COMMAND              0x8040
69 #define GOODIX_CMD_SCREEN_OFF           0x05
70
71 #define GOODIX_READ_COOR_ADDR           0x814E
72 #define GOODIX_REG_CONFIG_DATA          0x8047
73 #define GOODIX_REG_ID                   0x8140
74
75 #define RESOLUTION_LOC          1
76 #define MAX_CONTACTS_LOC        5
77 #define TRIGGER_LOC             6
78
79 static const unsigned long goodix_irq_flags[] = {
80         IRQ_TYPE_EDGE_RISING,
81         IRQ_TYPE_EDGE_FALLING,
82         IRQ_TYPE_LEVEL_LOW,
83         IRQ_TYPE_LEVEL_HIGH,
84 };
85
86 /*
87  * Those tablets have their coordinates origin at the bottom right
88  * of the tablet, as if rotated 180 degrees
89  */
90 static const struct dmi_system_id rotated_screen[] = {
91 #if defined(CONFIG_DMI) && defined(CONFIG_X86)
92         {
93                 .ident = "Teclast X89",
94                 .matches = {
95                         /* tPAD is too generic, also match on bios date */
96                         DMI_MATCH(DMI_BOARD_VENDOR, "TECLAST"),
97                         DMI_MATCH(DMI_BOARD_NAME, "tPAD"),
98                         DMI_MATCH(DMI_BIOS_DATE, "12/19/2014"),
99                 },
100         },
101         {
102                 .ident = "Teclast X98 Pro",
103                 .matches = {
104                         /*
105                          * Only match BIOS date, because the manufacturers
106                          * BIOS does not report the board name at all
107                          * (sometimes)...
108                          */
109                         DMI_MATCH(DMI_BOARD_VENDOR, "TECLAST"),
110                         DMI_MATCH(DMI_BIOS_DATE, "10/28/2015"),
111                 },
112         },
113         {
114                 .ident = "WinBook TW100",
115                 .matches = {
116                         DMI_MATCH(DMI_SYS_VENDOR, "WinBook"),
117                         DMI_MATCH(DMI_PRODUCT_NAME, "TW100")
118                 }
119         },
120         {
121                 .ident = "WinBook TW700",
122                 .matches = {
123                         DMI_MATCH(DMI_SYS_VENDOR, "WinBook"),
124                         DMI_MATCH(DMI_PRODUCT_NAME, "TW700")
125                 },
126         },
127 #endif
128         {}
129 };
130
131 /**
132  * goodix_i2c_read - read data from a register of the i2c slave device.
133  *
134  * @client: i2c device.
135  * @reg: the register to read from.
136  * @buf: raw write data buffer.
137  * @len: length of the buffer to write
138  */
139 static int goodix_i2c_read(struct i2c_client *client,
140                            u16 reg, u8 *buf, int len)
141 {
142         struct i2c_msg msgs[2];
143         u16 wbuf = cpu_to_be16(reg);
144         int ret;
145
146         msgs[0].flags = 0;
147         msgs[0].addr  = client->addr;
148         msgs[0].len   = 2;
149         msgs[0].buf   = (u8 *)&wbuf;
150
151         msgs[1].flags = I2C_M_RD;
152         msgs[1].addr  = client->addr;
153         msgs[1].len   = len;
154         msgs[1].buf   = buf;
155
156         ret = i2c_transfer(client->adapter, msgs, 2);
157         return ret < 0 ? ret : (ret != ARRAY_SIZE(msgs) ? -EIO : 0);
158 }
159
160 /**
161  * goodix_i2c_write - write data to a register of the i2c slave device.
162  *
163  * @client: i2c device.
164  * @reg: the register to write to.
165  * @buf: raw data buffer to write.
166  * @len: length of the buffer to write
167  */
168 static int goodix_i2c_write(struct i2c_client *client, u16 reg, const u8 *buf,
169                             unsigned len)
170 {
171         u8 *addr_buf;
172         struct i2c_msg msg;
173         int ret;
174
175         addr_buf = kmalloc(len + 2, GFP_KERNEL);
176         if (!addr_buf)
177                 return -ENOMEM;
178
179         addr_buf[0] = reg >> 8;
180         addr_buf[1] = reg & 0xFF;
181         memcpy(&addr_buf[2], buf, len);
182
183         msg.flags = 0;
184         msg.addr = client->addr;
185         msg.buf = addr_buf;
186         msg.len = len + 2;
187
188         ret = i2c_transfer(client->adapter, &msg, 1);
189         kfree(addr_buf);
190         return ret < 0 ? ret : (ret != 1 ? -EIO : 0);
191 }
192
193 static int goodix_i2c_write_u8(struct i2c_client *client, u16 reg, u8 value)
194 {
195         return goodix_i2c_write(client, reg, &value, sizeof(value));
196 }
197
198 static int goodix_get_cfg_len(u16 id)
199 {
200         switch (id) {
201         case 911:
202         case 9271:
203         case 9110:
204         case 927:
205         case 928:
206                 return GOODIX_CONFIG_911_LENGTH;
207
208         case 912:
209         case 967:
210                 return GOODIX_CONFIG_967_LENGTH;
211
212         default:
213                 return GOODIX_CONFIG_MAX_LENGTH;
214         }
215 }
216
217 static int goodix_ts_read_input_report(struct goodix_ts_data *ts, u8 *data)
218 {
219         int touch_num;
220         int error;
221
222         error = goodix_i2c_read(ts->client, GOODIX_READ_COOR_ADDR, data,
223                                 GOODIX_CONTACT_SIZE + 1);
224         if (error) {
225                 dev_err(&ts->client->dev, "I2C transfer error: %d\n", error);
226                 return error;
227         }
228
229         if (!(data[0] & 0x80))
230                 return -EAGAIN;
231
232         touch_num = data[0] & 0x0f;
233         if (touch_num > ts->max_touch_num)
234                 return -EPROTO;
235
236         if (touch_num > 1) {
237                 data += 1 + GOODIX_CONTACT_SIZE;
238                 error = goodix_i2c_read(ts->client,
239                                         GOODIX_READ_COOR_ADDR +
240                                                 1 + GOODIX_CONTACT_SIZE,
241                                         data,
242                                         GOODIX_CONTACT_SIZE * (touch_num - 1));
243                 if (error)
244                         return error;
245         }
246
247         return touch_num;
248 }
249
250 static void goodix_ts_report_touch(struct goodix_ts_data *ts, u8 *coor_data)
251 {
252         int id = coor_data[0] & 0x0F;
253         int input_x = get_unaligned_le16(&coor_data[1]);
254         int input_y = get_unaligned_le16(&coor_data[3]);
255         int input_w = get_unaligned_le16(&coor_data[5]);
256
257         /* Inversions have to happen before axis swapping */
258         if (ts->inverted_x)
259                 input_x = ts->abs_x_max - input_x;
260         if (ts->inverted_y)
261                 input_y = ts->abs_y_max - input_y;
262         if (ts->swapped_x_y)
263                 swap(input_x, input_y);
264
265         input_mt_slot(ts->input_dev, id);
266         input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, true);
267         input_report_abs(ts->input_dev, ABS_MT_POSITION_X, input_x);
268         input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, input_y);
269         input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, input_w);
270         input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, input_w);
271 }
272
273 /**
274  * goodix_process_events - Process incoming events
275  *
276  * @ts: our goodix_ts_data pointer
277  *
278  * Called when the IRQ is triggered. Read the current device state, and push
279  * the input events to the user space.
280  */
281 static void goodix_process_events(struct goodix_ts_data *ts)
282 {
283         u8  point_data[1 + GOODIX_CONTACT_SIZE * GOODIX_MAX_CONTACTS];
284         int touch_num;
285         int i;
286
287         touch_num = goodix_ts_read_input_report(ts, point_data);
288         if (touch_num < 0)
289                 return;
290
291         for (i = 0; i < touch_num; i++)
292                 goodix_ts_report_touch(ts,
293                                 &point_data[1 + GOODIX_CONTACT_SIZE * i]);
294
295         input_mt_sync_frame(ts->input_dev);
296         input_sync(ts->input_dev);
297 }
298
299 /**
300  * goodix_ts_irq_handler - The IRQ handler
301  *
302  * @irq: interrupt number.
303  * @dev_id: private data pointer.
304  */
305 static irqreturn_t goodix_ts_irq_handler(int irq, void *dev_id)
306 {
307         struct goodix_ts_data *ts = dev_id;
308
309         goodix_process_events(ts);
310
311         if (goodix_i2c_write_u8(ts->client, GOODIX_READ_COOR_ADDR, 0) < 0)
312                 dev_err(&ts->client->dev, "I2C write end_cmd error\n");
313
314         return IRQ_HANDLED;
315 }
316
317 static void goodix_free_irq(struct goodix_ts_data *ts)
318 {
319         devm_free_irq(&ts->client->dev, ts->client->irq, ts);
320 }
321
322 static int goodix_request_irq(struct goodix_ts_data *ts)
323 {
324         return devm_request_threaded_irq(&ts->client->dev, ts->client->irq,
325                                          NULL, goodix_ts_irq_handler,
326                                          ts->irq_flags, ts->client->name, ts);
327 }
328
329 /**
330  * goodix_check_cfg - Checks if config fw is valid
331  *
332  * @ts: goodix_ts_data pointer
333  * @cfg: firmware config data
334  */
335 static int goodix_check_cfg(struct goodix_ts_data *ts,
336                             const struct firmware *cfg)
337 {
338         int i, raw_cfg_len;
339         u8 check_sum = 0;
340
341         if (cfg->size > GOODIX_CONFIG_MAX_LENGTH) {
342                 dev_err(&ts->client->dev,
343                         "The length of the config fw is not correct");
344                 return -EINVAL;
345         }
346
347         raw_cfg_len = cfg->size - 2;
348         for (i = 0; i < raw_cfg_len; i++)
349                 check_sum += cfg->data[i];
350         check_sum = (~check_sum) + 1;
351         if (check_sum != cfg->data[raw_cfg_len]) {
352                 dev_err(&ts->client->dev,
353                         "The checksum of the config fw is not correct");
354                 return -EINVAL;
355         }
356
357         if (cfg->data[raw_cfg_len + 1] != 1) {
358                 dev_err(&ts->client->dev,
359                         "Config fw must have Config_Fresh register set");
360                 return -EINVAL;
361         }
362
363         return 0;
364 }
365
366 /**
367  * goodix_send_cfg - Write fw config to device
368  *
369  * @ts: goodix_ts_data pointer
370  * @cfg: config firmware to write to device
371  */
372 static int goodix_send_cfg(struct goodix_ts_data *ts,
373                            const struct firmware *cfg)
374 {
375         int error;
376
377         error = goodix_check_cfg(ts, cfg);
378         if (error)
379                 return error;
380
381         error = goodix_i2c_write(ts->client, GOODIX_REG_CONFIG_DATA, cfg->data,
382                                  cfg->size);
383         if (error) {
384                 dev_err(&ts->client->dev, "Failed to write config data: %d",
385                         error);
386                 return error;
387         }
388         dev_dbg(&ts->client->dev, "Config sent successfully.");
389
390         /* Let the firmware reconfigure itself, so sleep for 10ms */
391         usleep_range(10000, 11000);
392
393         return 0;
394 }
395
396 static int goodix_int_sync(struct goodix_ts_data *ts)
397 {
398         int error;
399
400         error = gpiod_direction_output(ts->gpiod_int, 0);
401         if (error)
402                 return error;
403
404         msleep(50);                             /* T5: 50ms */
405
406         error = gpiod_direction_input(ts->gpiod_int);
407         if (error)
408                 return error;
409
410         return 0;
411 }
412
413 /**
414  * goodix_reset - Reset device during power on
415  *
416  * @ts: goodix_ts_data pointer
417  */
418 static int goodix_reset(struct goodix_ts_data *ts)
419 {
420         int error;
421
422         /* begin select I2C slave addr */
423         error = gpiod_direction_output(ts->gpiod_rst, 0);
424         if (error)
425                 return error;
426
427         msleep(20);                             /* T2: > 10ms */
428
429         /* HIGH: 0x28/0x29, LOW: 0xBA/0xBB */
430         error = gpiod_direction_output(ts->gpiod_int, ts->client->addr == 0x14);
431         if (error)
432                 return error;
433
434         usleep_range(100, 2000);                /* T3: > 100us */
435
436         error = gpiod_direction_output(ts->gpiod_rst, 1);
437         if (error)
438                 return error;
439
440         usleep_range(6000, 10000);              /* T4: > 5ms */
441
442         /* end select I2C slave addr */
443         error = gpiod_direction_input(ts->gpiod_rst);
444         if (error)
445                 return error;
446
447         error = goodix_int_sync(ts);
448         if (error)
449                 return error;
450
451         return 0;
452 }
453
454 /**
455  * goodix_get_gpio_config - Get GPIO config from ACPI/DT
456  *
457  * @ts: goodix_ts_data pointer
458  */
459 static int goodix_get_gpio_config(struct goodix_ts_data *ts)
460 {
461         int error;
462         struct device *dev;
463         struct gpio_desc *gpiod;
464
465         if (!ts->client)
466                 return -EINVAL;
467         dev = &ts->client->dev;
468
469         /* Get the interrupt GPIO pin number */
470         gpiod = devm_gpiod_get_optional(dev, GOODIX_GPIO_INT_NAME, GPIOD_IN);
471         if (IS_ERR(gpiod)) {
472                 error = PTR_ERR(gpiod);
473                 if (error != -EPROBE_DEFER)
474                         dev_dbg(dev, "Failed to get %s GPIO: %d\n",
475                                 GOODIX_GPIO_INT_NAME, error);
476                 return error;
477         }
478
479         ts->gpiod_int = gpiod;
480
481         /* Get the reset line GPIO pin number */
482         gpiod = devm_gpiod_get_optional(dev, GOODIX_GPIO_RST_NAME, GPIOD_IN);
483         if (IS_ERR(gpiod)) {
484                 error = PTR_ERR(gpiod);
485                 if (error != -EPROBE_DEFER)
486                         dev_dbg(dev, "Failed to get %s GPIO: %d\n",
487                                 GOODIX_GPIO_RST_NAME, error);
488                 return error;
489         }
490
491         ts->gpiod_rst = gpiod;
492
493         return 0;
494 }
495
496 /**
497  * goodix_read_config - Read the embedded configuration of the panel
498  *
499  * @ts: our goodix_ts_data pointer
500  *
501  * Must be called during probe
502  */
503 static void goodix_read_config(struct goodix_ts_data *ts)
504 {
505         u8 config[GOODIX_CONFIG_MAX_LENGTH];
506         int error;
507
508         error = goodix_i2c_read(ts->client, GOODIX_REG_CONFIG_DATA,
509                                 config, ts->cfg_len);
510         if (error) {
511                 dev_warn(&ts->client->dev,
512                          "Error reading config (%d), using defaults\n",
513                          error);
514                 ts->abs_x_max = GOODIX_MAX_WIDTH;
515                 ts->abs_y_max = GOODIX_MAX_HEIGHT;
516                 if (ts->swapped_x_y)
517                         swap(ts->abs_x_max, ts->abs_y_max);
518                 ts->int_trigger_type = GOODIX_INT_TRIGGER;
519                 ts->max_touch_num = GOODIX_MAX_CONTACTS;
520                 return;
521         }
522
523         ts->abs_x_max = get_unaligned_le16(&config[RESOLUTION_LOC]);
524         ts->abs_y_max = get_unaligned_le16(&config[RESOLUTION_LOC + 2]);
525         if (ts->swapped_x_y)
526                 swap(ts->abs_x_max, ts->abs_y_max);
527         ts->int_trigger_type = config[TRIGGER_LOC] & 0x03;
528         ts->max_touch_num = config[MAX_CONTACTS_LOC] & 0x0f;
529         if (!ts->abs_x_max || !ts->abs_y_max || !ts->max_touch_num) {
530                 dev_err(&ts->client->dev,
531                         "Invalid config, using defaults\n");
532                 ts->abs_x_max = GOODIX_MAX_WIDTH;
533                 ts->abs_y_max = GOODIX_MAX_HEIGHT;
534                 if (ts->swapped_x_y)
535                         swap(ts->abs_x_max, ts->abs_y_max);
536                 ts->max_touch_num = GOODIX_MAX_CONTACTS;
537         }
538
539         if (dmi_check_system(rotated_screen)) {
540                 ts->inverted_x = true;
541                 ts->inverted_y = true;
542                 dev_dbg(&ts->client->dev,
543                          "Applying '180 degrees rotated screen' quirk\n");
544         }
545 }
546
547 /**
548  * goodix_read_version - Read goodix touchscreen version
549  *
550  * @ts: our goodix_ts_data pointer
551  */
552 static int goodix_read_version(struct goodix_ts_data *ts)
553 {
554         int error;
555         u8 buf[6];
556         char id_str[5];
557
558         error = goodix_i2c_read(ts->client, GOODIX_REG_ID, buf, sizeof(buf));
559         if (error) {
560                 dev_err(&ts->client->dev, "read version failed: %d\n", error);
561                 return error;
562         }
563
564         memcpy(id_str, buf, 4);
565         id_str[4] = 0;
566         if (kstrtou16(id_str, 10, &ts->id))
567                 ts->id = 0x1001;
568
569         ts->version = get_unaligned_le16(&buf[4]);
570
571         dev_info(&ts->client->dev, "ID %d, version: %04x\n", ts->id,
572                  ts->version);
573
574         return 0;
575 }
576
577 /**
578  * goodix_i2c_test - I2C test function to check if the device answers.
579  *
580  * @client: the i2c client
581  */
582 static int goodix_i2c_test(struct i2c_client *client)
583 {
584         int retry = 0;
585         int error;
586         u8 test;
587
588         while (retry++ < 2) {
589                 error = goodix_i2c_read(client, GOODIX_REG_CONFIG_DATA,
590                                         &test, 1);
591                 if (!error)
592                         return 0;
593
594                 dev_err(&client->dev, "i2c test failed attempt %d: %d\n",
595                         retry, error);
596                 msleep(20);
597         }
598
599         return error;
600 }
601
602 /**
603  * goodix_request_input_dev - Allocate, populate and register the input device
604  *
605  * @ts: our goodix_ts_data pointer
606  *
607  * Must be called during probe
608  */
609 static int goodix_request_input_dev(struct goodix_ts_data *ts)
610 {
611         int error;
612
613         ts->input_dev = devm_input_allocate_device(&ts->client->dev);
614         if (!ts->input_dev) {
615                 dev_err(&ts->client->dev, "Failed to allocate input device.");
616                 return -ENOMEM;
617         }
618
619         input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X,
620                              0, ts->abs_x_max, 0, 0);
621         input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y,
622                              0, ts->abs_y_max, 0, 0);
623         input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0);
624         input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
625
626         input_mt_init_slots(ts->input_dev, ts->max_touch_num,
627                             INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED);
628
629         ts->input_dev->name = "Goodix Capacitive TouchScreen";
630         ts->input_dev->phys = "input/ts";
631         ts->input_dev->id.bustype = BUS_I2C;
632         ts->input_dev->id.vendor = 0x0416;
633         ts->input_dev->id.product = ts->id;
634         ts->input_dev->id.version = ts->version;
635
636         error = input_register_device(ts->input_dev);
637         if (error) {
638                 dev_err(&ts->client->dev,
639                         "Failed to register input device: %d", error);
640                 return error;
641         }
642
643         return 0;
644 }
645
646 /**
647  * goodix_configure_dev - Finish device initialization
648  *
649  * @ts: our goodix_ts_data pointer
650  *
651  * Must be called from probe to finish initialization of the device.
652  * Contains the common initialization code for both devices that
653  * declare gpio pins and devices that do not. It is either called
654  * directly from probe or from request_firmware_wait callback.
655  */
656 static int goodix_configure_dev(struct goodix_ts_data *ts)
657 {
658         int error;
659
660         ts->swapped_x_y = device_property_read_bool(&ts->client->dev,
661                                                     "touchscreen-swapped-x-y");
662         ts->inverted_x = device_property_read_bool(&ts->client->dev,
663                                                    "touchscreen-inverted-x");
664         ts->inverted_y = device_property_read_bool(&ts->client->dev,
665                                                    "touchscreen-inverted-y");
666
667         goodix_read_config(ts);
668
669         error = goodix_request_input_dev(ts);
670         if (error)
671                 return error;
672
673         ts->irq_flags = goodix_irq_flags[ts->int_trigger_type] | IRQF_ONESHOT;
674         error = goodix_request_irq(ts);
675         if (error) {
676                 dev_err(&ts->client->dev, "request IRQ failed: %d\n", error);
677                 return error;
678         }
679
680         return 0;
681 }
682
683 /**
684  * goodix_config_cb - Callback to finish device init
685  *
686  * @ts: our goodix_ts_data pointer
687  *
688  * request_firmware_wait callback that finishes
689  * initialization of the device.
690  */
691 static void goodix_config_cb(const struct firmware *cfg, void *ctx)
692 {
693         struct goodix_ts_data *ts = ctx;
694         int error;
695
696         if (cfg) {
697                 /* send device configuration to the firmware */
698                 error = goodix_send_cfg(ts, cfg);
699                 if (error)
700                         goto err_release_cfg;
701         }
702
703         goodix_configure_dev(ts);
704
705 err_release_cfg:
706         release_firmware(cfg);
707         complete_all(&ts->firmware_loading_complete);
708 }
709
710 static int goodix_ts_probe(struct i2c_client *client,
711                            const struct i2c_device_id *id)
712 {
713         struct goodix_ts_data *ts;
714         int error;
715
716         dev_dbg(&client->dev, "I2C Address: 0x%02x\n", client->addr);
717
718         if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
719                 dev_err(&client->dev, "I2C check functionality failed.\n");
720                 return -ENXIO;
721         }
722
723         ts = devm_kzalloc(&client->dev, sizeof(*ts), GFP_KERNEL);
724         if (!ts)
725                 return -ENOMEM;
726
727         ts->client = client;
728         i2c_set_clientdata(client, ts);
729         init_completion(&ts->firmware_loading_complete);
730
731         error = goodix_get_gpio_config(ts);
732         if (error)
733                 return error;
734
735         if (ts->gpiod_int && ts->gpiod_rst) {
736                 /* reset the controller */
737                 error = goodix_reset(ts);
738                 if (error) {
739                         dev_err(&client->dev, "Controller reset failed.\n");
740                         return error;
741                 }
742         }
743
744         error = goodix_i2c_test(client);
745         if (error) {
746                 dev_err(&client->dev, "I2C communication failure: %d\n", error);
747                 return error;
748         }
749
750         error = goodix_read_version(ts);
751         if (error) {
752                 dev_err(&client->dev, "Read version failed.\n");
753                 return error;
754         }
755
756         ts->cfg_len = goodix_get_cfg_len(ts->id);
757
758         if (ts->gpiod_int && ts->gpiod_rst) {
759                 /* update device config */
760                 ts->cfg_name = devm_kasprintf(&client->dev, GFP_KERNEL,
761                                               "/*(DEBLOBBED)*/", ts->id);
762                 if (!ts->cfg_name)
763                         return -ENOMEM;
764
765                 error = reject_firmware_nowait(THIS_MODULE, true, ts->cfg_name,
766                                                 &client->dev, GFP_KERNEL, ts,
767                                                 goodix_config_cb);
768                 if (error) {
769                         dev_err(&client->dev,
770                                 "Failed to invoke firmware loader: %d\n",
771                                 error);
772                         return error;
773                 }
774
775                 return 0;
776         } else {
777                 error = goodix_configure_dev(ts);
778                 if (error)
779                         return error;
780         }
781
782         return 0;
783 }
784
785 static int goodix_ts_remove(struct i2c_client *client)
786 {
787         struct goodix_ts_data *ts = i2c_get_clientdata(client);
788
789         if (ts->gpiod_int && ts->gpiod_rst)
790                 wait_for_completion(&ts->firmware_loading_complete);
791
792         return 0;
793 }
794
795 static int __maybe_unused goodix_suspend(struct device *dev)
796 {
797         struct i2c_client *client = to_i2c_client(dev);
798         struct goodix_ts_data *ts = i2c_get_clientdata(client);
799         int error;
800
801         /* We need gpio pins to suspend/resume */
802         if (!ts->gpiod_int || !ts->gpiod_rst) {
803                 disable_irq(client->irq);
804                 return 0;
805         }
806
807         wait_for_completion(&ts->firmware_loading_complete);
808
809         /* Free IRQ as IRQ pin is used as output in the suspend sequence */
810         goodix_free_irq(ts);
811
812         /* Output LOW on the INT pin for 5 ms */
813         error = gpiod_direction_output(ts->gpiod_int, 0);
814         if (error) {
815                 goodix_request_irq(ts);
816                 return error;
817         }
818
819         usleep_range(5000, 6000);
820
821         error = goodix_i2c_write_u8(ts->client, GOODIX_REG_COMMAND,
822                                     GOODIX_CMD_SCREEN_OFF);
823         if (error) {
824                 dev_err(&ts->client->dev, "Screen off command failed\n");
825                 gpiod_direction_input(ts->gpiod_int);
826                 goodix_request_irq(ts);
827                 return -EAGAIN;
828         }
829
830         /*
831          * The datasheet specifies that the interval between sending screen-off
832          * command and wake-up should be longer than 58 ms. To avoid waking up
833          * sooner, delay 58ms here.
834          */
835         msleep(58);
836         return 0;
837 }
838
839 static int __maybe_unused goodix_resume(struct device *dev)
840 {
841         struct i2c_client *client = to_i2c_client(dev);
842         struct goodix_ts_data *ts = i2c_get_clientdata(client);
843         int error;
844
845         if (!ts->gpiod_int || !ts->gpiod_rst) {
846                 enable_irq(client->irq);
847                 return 0;
848         }
849
850         /*
851          * Exit sleep mode by outputting HIGH level to INT pin
852          * for 2ms~5ms.
853          */
854         error = gpiod_direction_output(ts->gpiod_int, 1);
855         if (error)
856                 return error;
857
858         usleep_range(2000, 5000);
859
860         error = goodix_int_sync(ts);
861         if (error)
862                 return error;
863
864         error = goodix_request_irq(ts);
865         if (error)
866                 return error;
867
868         return 0;
869 }
870
871 static SIMPLE_DEV_PM_OPS(goodix_pm_ops, goodix_suspend, goodix_resume);
872
873 static const struct i2c_device_id goodix_ts_id[] = {
874         { "GDIX1001:00", 0 },
875         { }
876 };
877 MODULE_DEVICE_TABLE(i2c, goodix_ts_id);
878
879 #ifdef CONFIG_ACPI
880 static const struct acpi_device_id goodix_acpi_match[] = {
881         { "GDIX1001", 0 },
882         { "GDIX1002", 0 },
883         { }
884 };
885 MODULE_DEVICE_TABLE(acpi, goodix_acpi_match);
886 #endif
887
888 #ifdef CONFIG_OF
889 static const struct of_device_id goodix_of_match[] = {
890         { .compatible = "goodix,gt911" },
891         { .compatible = "goodix,gt9110" },
892         { .compatible = "goodix,gt912" },
893         { .compatible = "goodix,gt927" },
894         { .compatible = "goodix,gt9271" },
895         { .compatible = "goodix,gt928" },
896         { .compatible = "goodix,gt967" },
897         { }
898 };
899 MODULE_DEVICE_TABLE(of, goodix_of_match);
900 #endif
901
902 static struct i2c_driver goodix_ts_driver = {
903         .probe = goodix_ts_probe,
904         .remove = goodix_ts_remove,
905         .id_table = goodix_ts_id,
906         .driver = {
907                 .name = "Goodix-TS",
908                 .acpi_match_table = ACPI_PTR(goodix_acpi_match),
909                 .of_match_table = of_match_ptr(goodix_of_match),
910                 .pm = &goodix_pm_ops,
911         },
912 };
913 module_i2c_driver(goodix_ts_driver);
914
915 MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
916 MODULE_AUTHOR("Bastien Nocera <hadess@hadess.net>");
917 MODULE_DESCRIPTION("Goodix touchscreen driver");
918 MODULE_LICENSE("GPL v2");