1 // SPDX-License-Identifier: GPL-2.0-only
3 * Driver for Goodix Touchscreens
5 * Copyright (c) 2014 Red Hat Inc.
6 * Copyright (c) 2015 K. Merker <merker@debian.org>
8 * This code is based on gt9xx.c authored by andrew@goodix.com:
10 * 2010 - 2012 Goodix Technology.
14 #include <linux/kernel.h>
15 #include <linux/dmi.h>
16 #include <linux/firmware.h>
17 #include <linux/module.h>
18 #include <linux/delay.h>
19 #include <linux/irq.h>
20 #include <linux/interrupt.h>
21 #include <linux/platform_data/x86/soc.h>
22 #include <linux/slab.h>
23 #include <linux/acpi.h>
25 #include <linux/unaligned.h>
28 #define GOODIX_GPIO_INT_NAME "irq"
29 #define GOODIX_GPIO_RST_NAME "reset"
31 #define GOODIX_MAX_HEIGHT 4096
32 #define GOODIX_MAX_WIDTH 4096
33 #define GOODIX_INT_TRIGGER 1
34 #define GOODIX_CONTACT_SIZE 8
35 #define GOODIX_MAX_CONTACT_SIZE 9
36 #define GOODIX_MAX_CONTACTS 10
38 #define GOODIX_CONFIG_MIN_LENGTH 186
39 #define GOODIX_CONFIG_911_LENGTH 186
40 #define GOODIX_CONFIG_967_LENGTH 228
41 #define GOODIX_CONFIG_GT9X_LENGTH 240
43 #define GOODIX_BUFFER_STATUS_READY BIT(7)
44 #define GOODIX_HAVE_KEY BIT(4)
45 #define GOODIX_BUFFER_STATUS_TIMEOUT 20
47 #define RESOLUTION_LOC 1
48 #define MAX_CONTACTS_LOC 5
51 /* Our special handling for GPIO accesses through ACPI is x86 specific */
52 #if defined CONFIG_X86 && defined CONFIG_ACPI
53 #define ACPI_GPIO_SUPPORT
56 struct goodix_chip_id
{
58 const struct goodix_chip_data
*data
;
61 static int goodix_check_cfg_8(struct goodix_ts_data
*ts
,
62 const u8
*cfg
, int len
);
63 static int goodix_check_cfg_16(struct goodix_ts_data
*ts
,
64 const u8
*cfg
, int len
);
65 static void goodix_calc_cfg_checksum_8(struct goodix_ts_data
*ts
);
66 static void goodix_calc_cfg_checksum_16(struct goodix_ts_data
*ts
);
68 static const struct goodix_chip_data gt1x_chip_data
= {
69 .config_addr
= GOODIX_GT1X_REG_CONFIG_DATA
,
70 .config_len
= GOODIX_CONFIG_GT9X_LENGTH
,
71 .check_config
= goodix_check_cfg_16
,
72 .calc_config_checksum
= goodix_calc_cfg_checksum_16
,
75 static const struct goodix_chip_data gt911_chip_data
= {
76 .config_addr
= GOODIX_GT9X_REG_CONFIG_DATA
,
77 .config_len
= GOODIX_CONFIG_911_LENGTH
,
78 .check_config
= goodix_check_cfg_8
,
79 .calc_config_checksum
= goodix_calc_cfg_checksum_8
,
82 static const struct goodix_chip_data gt967_chip_data
= {
83 .config_addr
= GOODIX_GT9X_REG_CONFIG_DATA
,
84 .config_len
= GOODIX_CONFIG_967_LENGTH
,
85 .check_config
= goodix_check_cfg_8
,
86 .calc_config_checksum
= goodix_calc_cfg_checksum_8
,
89 static const struct goodix_chip_data gt9x_chip_data
= {
90 .config_addr
= GOODIX_GT9X_REG_CONFIG_DATA
,
91 .config_len
= GOODIX_CONFIG_GT9X_LENGTH
,
92 .check_config
= goodix_check_cfg_8
,
93 .calc_config_checksum
= goodix_calc_cfg_checksum_8
,
96 static const struct goodix_chip_id goodix_chip_ids
[] = {
97 { .id
= "1151", .data
= >1x_chip_data
},
98 { .id
= "1158", .data
= >1x_chip_data
},
99 { .id
= "5663", .data
= >1x_chip_data
},
100 { .id
= "5688", .data
= >1x_chip_data
},
101 { .id
= "917S", .data
= >1x_chip_data
},
102 { .id
= "9286", .data
= >1x_chip_data
},
104 { .id
= "911", .data
= >911_chip_data
},
105 { .id
= "9271", .data
= >911_chip_data
},
106 { .id
= "9110", .data
= >911_chip_data
},
107 { .id
= "9111", .data
= >911_chip_data
},
108 { .id
= "927", .data
= >911_chip_data
},
109 { .id
= "928", .data
= >911_chip_data
},
111 { .id
= "912", .data
= >967_chip_data
},
112 { .id
= "9147", .data
= >967_chip_data
},
113 { .id
= "967", .data
= >967_chip_data
},
117 static const unsigned long goodix_irq_flags
[] = {
118 IRQ_TYPE_EDGE_RISING
,
119 IRQ_TYPE_EDGE_FALLING
,
124 static const struct dmi_system_id nine_bytes_report
[] = {
125 #if defined(CONFIG_DMI) && defined(CONFIG_X86)
127 /* Lenovo Yoga Book X90F / X90L */
129 DMI_EXACT_MATCH(DMI_SYS_VENDOR
, "Intel Corporation"),
130 DMI_EXACT_MATCH(DMI_PRODUCT_NAME
, "CHERRYVIEW D1 PLATFORM"),
131 DMI_EXACT_MATCH(DMI_PRODUCT_VERSION
, "YETI-11"),
135 /* Lenovo Yoga Book X91F / X91L */
137 /* Non exact match to match F + L versions */
138 DMI_MATCH(DMI_PRODUCT_NAME
, "Lenovo YB1-X91"),
146 * Those tablets have their x coordinate inverted
148 static const struct dmi_system_id inverted_x_screen
[] = {
149 #if defined(CONFIG_DMI) && defined(CONFIG_X86)
151 .ident
= "Cube I15-TC",
153 DMI_MATCH(DMI_SYS_VENDOR
, "Cube"),
154 DMI_MATCH(DMI_PRODUCT_NAME
, "I15-TC")
162 * goodix_i2c_read - read data from a register of the i2c slave device.
164 * @client: i2c device.
165 * @reg: the register to read from.
166 * @buf: raw write data buffer.
167 * @len: length of the buffer to write
169 int goodix_i2c_read(struct i2c_client
*client
, u16 reg
, u8
*buf
, int len
)
171 struct i2c_msg msgs
[2];
172 __be16 wbuf
= cpu_to_be16(reg
);
176 msgs
[0].addr
= client
->addr
;
178 msgs
[0].buf
= (u8
*)&wbuf
;
180 msgs
[1].flags
= I2C_M_RD
;
181 msgs
[1].addr
= client
->addr
;
185 ret
= i2c_transfer(client
->adapter
, msgs
, 2);
187 ret
= (ret
== ARRAY_SIZE(msgs
) ? 0 : -EIO
);
190 dev_err(&client
->dev
, "Error reading %d bytes from 0x%04x: %d\n",
196 * goodix_i2c_write - write data to a register of the i2c slave device.
198 * @client: i2c device.
199 * @reg: the register to write to.
200 * @buf: raw data buffer to write.
201 * @len: length of the buffer to write
203 int goodix_i2c_write(struct i2c_client
*client
, u16 reg
, const u8
*buf
, int len
)
209 addr_buf
= kmalloc(len
+ 2, GFP_KERNEL
);
213 addr_buf
[0] = reg
>> 8;
214 addr_buf
[1] = reg
& 0xFF;
215 memcpy(&addr_buf
[2], buf
, len
);
218 msg
.addr
= client
->addr
;
222 ret
= i2c_transfer(client
->adapter
, &msg
, 1);
224 ret
= (ret
== 1 ? 0 : -EIO
);
229 dev_err(&client
->dev
, "Error writing %d bytes to 0x%04x: %d\n",
234 int goodix_i2c_write_u8(struct i2c_client
*client
, u16 reg
, u8 value
)
236 return goodix_i2c_write(client
, reg
, &value
, sizeof(value
));
239 static const struct goodix_chip_data
*goodix_get_chip_data(const char *id
)
243 for (i
= 0; goodix_chip_ids
[i
].id
; i
++) {
244 if (!strcmp(goodix_chip_ids
[i
].id
, id
))
245 return goodix_chip_ids
[i
].data
;
248 return >9x_chip_data
;
251 static int goodix_ts_read_input_report(struct goodix_ts_data
*ts
, u8
*data
)
253 unsigned long max_timeout
;
256 u16 addr
= GOODIX_READ_COOR_ADDR
;
258 * We are going to read 1-byte header,
259 * ts->contact_size * max(1, touch_num) bytes of coordinates
260 * and 1-byte footer which contains the touch-key code.
262 const int header_contact_keycode_size
= 1 + ts
->contact_size
+ 1;
265 * The 'buffer status' bit, which indicates that the data is valid, is
266 * not set as soon as the interrupt is raised, but slightly after.
267 * This takes around 10 ms to happen, so we poll for 20 ms.
269 max_timeout
= jiffies
+ msecs_to_jiffies(GOODIX_BUFFER_STATUS_TIMEOUT
);
271 error
= goodix_i2c_read(ts
->client
, addr
, data
,
272 header_contact_keycode_size
);
276 if (data
[0] & GOODIX_BUFFER_STATUS_READY
) {
277 touch_num
= data
[0] & 0x0f;
278 if (touch_num
> ts
->max_touch_num
)
282 addr
+= header_contact_keycode_size
;
283 data
+= header_contact_keycode_size
;
284 error
= goodix_i2c_read(ts
->client
,
295 if (data
[0] == 0 && ts
->firmware_name
) {
296 if (goodix_handle_fw_request(ts
))
300 usleep_range(1000, 2000); /* Poll every 1 - 2 ms */
301 } while (time_before(jiffies
, max_timeout
));
304 * The Goodix panel will send spurious interrupts after a
305 * 'finger up' event, which will always cause a timeout.
310 static int goodix_create_pen_input(struct goodix_ts_data
*ts
)
312 struct device
*dev
= &ts
->client
->dev
;
313 struct input_dev
*input
;
315 input
= devm_input_allocate_device(dev
);
319 input_copy_abs(input
, ABS_X
, ts
->input_dev
, ABS_MT_POSITION_X
);
320 input_copy_abs(input
, ABS_Y
, ts
->input_dev
, ABS_MT_POSITION_Y
);
322 * The resolution of these touchscreens is about 10 units/mm, the actual
323 * resolution does not matter much since we set INPUT_PROP_DIRECT.
324 * Userspace wants something here though, so just set it to 10 units/mm.
326 input_abs_set_res(input
, ABS_X
, 10);
327 input_abs_set_res(input
, ABS_Y
, 10);
328 input_set_abs_params(input
, ABS_PRESSURE
, 0, 255, 0, 0);
330 input_set_capability(input
, EV_KEY
, BTN_TOUCH
);
331 input_set_capability(input
, EV_KEY
, BTN_TOOL_PEN
);
332 input_set_capability(input
, EV_KEY
, BTN_STYLUS
);
333 input_set_capability(input
, EV_KEY
, BTN_STYLUS2
);
334 __set_bit(INPUT_PROP_DIRECT
, input
->propbit
);
336 input
->name
= "Goodix Active Pen";
337 input
->phys
= "input/pen";
338 input
->id
.bustype
= BUS_I2C
;
339 input
->id
.vendor
= 0x0416;
340 if (kstrtou16(ts
->id
, 10, &input
->id
.product
))
341 input
->id
.product
= 0x1001;
342 input
->id
.version
= ts
->version
;
344 ts
->input_pen
= input
;
348 static void goodix_ts_report_pen_down(struct goodix_ts_data
*ts
, u8
*data
)
350 int input_x
, input_y
, input_w
, error
;
353 if (!ts
->pen_input_registered
) {
354 error
= input_register_device(ts
->input_pen
);
355 ts
->pen_input_registered
= (error
== 0) ? 1 : error
;
358 if (ts
->pen_input_registered
< 0)
361 if (ts
->contact_size
== 9) {
362 input_x
= get_unaligned_le16(&data
[4]);
363 input_y
= get_unaligned_le16(&data
[6]);
364 input_w
= get_unaligned_le16(&data
[8]);
366 input_x
= get_unaligned_le16(&data
[2]);
367 input_y
= get_unaligned_le16(&data
[4]);
368 input_w
= get_unaligned_le16(&data
[6]);
371 touchscreen_report_pos(ts
->input_pen
, &ts
->prop
, input_x
, input_y
, false);
372 input_report_abs(ts
->input_pen
, ABS_PRESSURE
, input_w
);
374 input_report_key(ts
->input_pen
, BTN_TOUCH
, 1);
375 input_report_key(ts
->input_pen
, BTN_TOOL_PEN
, 1);
377 if (data
[0] & GOODIX_HAVE_KEY
) {
378 key_value
= data
[1 + ts
->contact_size
];
379 input_report_key(ts
->input_pen
, BTN_STYLUS
, key_value
& 0x10);
380 input_report_key(ts
->input_pen
, BTN_STYLUS2
, key_value
& 0x20);
382 input_report_key(ts
->input_pen
, BTN_STYLUS
, 0);
383 input_report_key(ts
->input_pen
, BTN_STYLUS2
, 0);
386 input_sync(ts
->input_pen
);
389 static void goodix_ts_report_pen_up(struct goodix_ts_data
*ts
)
394 input_report_key(ts
->input_pen
, BTN_TOUCH
, 0);
395 input_report_key(ts
->input_pen
, BTN_TOOL_PEN
, 0);
396 input_report_key(ts
->input_pen
, BTN_STYLUS
, 0);
397 input_report_key(ts
->input_pen
, BTN_STYLUS2
, 0);
399 input_sync(ts
->input_pen
);
402 static void goodix_ts_report_touch_8b(struct goodix_ts_data
*ts
, u8
*coor_data
)
404 int id
= coor_data
[0] & 0x0F;
405 int input_x
= get_unaligned_le16(&coor_data
[1]);
406 int input_y
= get_unaligned_le16(&coor_data
[3]);
407 int input_w
= get_unaligned_le16(&coor_data
[5]);
409 input_mt_slot(ts
->input_dev
, id
);
410 input_mt_report_slot_state(ts
->input_dev
, MT_TOOL_FINGER
, true);
411 touchscreen_report_pos(ts
->input_dev
, &ts
->prop
,
412 input_x
, input_y
, true);
413 input_report_abs(ts
->input_dev
, ABS_MT_TOUCH_MAJOR
, input_w
);
414 input_report_abs(ts
->input_dev
, ABS_MT_WIDTH_MAJOR
, input_w
);
417 static void goodix_ts_report_touch_9b(struct goodix_ts_data
*ts
, u8
*coor_data
)
419 int id
= coor_data
[1] & 0x0F;
420 int input_x
= get_unaligned_le16(&coor_data
[3]);
421 int input_y
= get_unaligned_le16(&coor_data
[5]);
422 int input_w
= get_unaligned_le16(&coor_data
[7]);
424 input_mt_slot(ts
->input_dev
, id
);
425 input_mt_report_slot_state(ts
->input_dev
, MT_TOOL_FINGER
, true);
426 touchscreen_report_pos(ts
->input_dev
, &ts
->prop
,
427 input_x
, input_y
, true);
428 input_report_abs(ts
->input_dev
, ABS_MT_TOUCH_MAJOR
, input_w
);
429 input_report_abs(ts
->input_dev
, ABS_MT_WIDTH_MAJOR
, input_w
);
432 static void goodix_ts_release_keys(struct goodix_ts_data
*ts
)
436 for (i
= 0; i
< GOODIX_MAX_KEYS
; i
++)
437 input_report_key(ts
->input_dev
, ts
->keymap
[i
], 0);
440 static void goodix_ts_report_key(struct goodix_ts_data
*ts
, u8
*data
)
446 if (data
[0] & GOODIX_HAVE_KEY
) {
447 touch_num
= data
[0] & 0x0f;
448 key_value
= data
[1 + ts
->contact_size
* touch_num
];
449 for (i
= 0; i
< GOODIX_MAX_KEYS
; i
++)
450 if (key_value
& BIT(i
))
451 input_report_key(ts
->input_dev
,
454 goodix_ts_release_keys(ts
);
459 * goodix_process_events - Process incoming events
461 * @ts: our goodix_ts_data pointer
463 * Called when the IRQ is triggered. Read the current device state, and push
464 * the input events to the user space.
466 static void goodix_process_events(struct goodix_ts_data
*ts
)
468 u8 point_data
[2 + GOODIX_MAX_CONTACT_SIZE
* GOODIX_MAX_CONTACTS
];
472 touch_num
= goodix_ts_read_input_report(ts
, point_data
);
476 /* The pen being down is always reported as a single touch */
477 if (touch_num
== 1 && (point_data
[1] & 0x80)) {
478 goodix_ts_report_pen_down(ts
, point_data
);
479 goodix_ts_release_keys(ts
);
480 goto sync
; /* Release any previously registered touches */
482 goodix_ts_report_pen_up(ts
);
485 goodix_ts_report_key(ts
, point_data
);
487 for (i
= 0; i
< touch_num
; i
++)
488 if (ts
->contact_size
== 9)
489 goodix_ts_report_touch_9b(ts
,
490 &point_data
[1 + ts
->contact_size
* i
]);
492 goodix_ts_report_touch_8b(ts
,
493 &point_data
[1 + ts
->contact_size
* i
]);
496 input_mt_sync_frame(ts
->input_dev
);
497 input_sync(ts
->input_dev
);
501 * goodix_ts_irq_handler - The IRQ handler
503 * @irq: interrupt number.
504 * @dev_id: private data pointer.
506 static irqreturn_t
goodix_ts_irq_handler(int irq
, void *dev_id
)
508 struct goodix_ts_data
*ts
= dev_id
;
510 goodix_process_events(ts
);
511 goodix_i2c_write_u8(ts
->client
, GOODIX_READ_COOR_ADDR
, 0);
516 static void goodix_free_irq(struct goodix_ts_data
*ts
)
518 devm_free_irq(&ts
->client
->dev
, ts
->client
->irq
, ts
);
521 static int goodix_request_irq(struct goodix_ts_data
*ts
)
523 return devm_request_threaded_irq(&ts
->client
->dev
, ts
->client
->irq
,
524 NULL
, goodix_ts_irq_handler
,
525 ts
->irq_flags
, ts
->client
->name
, ts
);
528 static int goodix_check_cfg_8(struct goodix_ts_data
*ts
, const u8
*cfg
, int len
)
530 int i
, raw_cfg_len
= len
- 2;
533 for (i
= 0; i
< raw_cfg_len
; i
++)
535 check_sum
= (~check_sum
) + 1;
536 if (check_sum
!= cfg
[raw_cfg_len
]) {
537 dev_err(&ts
->client
->dev
,
538 "The checksum of the config fw is not correct");
542 if (cfg
[raw_cfg_len
+ 1] != 1) {
543 dev_err(&ts
->client
->dev
,
544 "Config fw must have Config_Fresh register set");
551 static void goodix_calc_cfg_checksum_8(struct goodix_ts_data
*ts
)
553 int i
, raw_cfg_len
= ts
->chip
->config_len
- 2;
556 for (i
= 0; i
< raw_cfg_len
; i
++)
557 check_sum
+= ts
->config
[i
];
558 check_sum
= (~check_sum
) + 1;
560 ts
->config
[raw_cfg_len
] = check_sum
;
561 ts
->config
[raw_cfg_len
+ 1] = 1; /* Set "config_fresh" bit */
564 static int goodix_check_cfg_16(struct goodix_ts_data
*ts
, const u8
*cfg
,
567 int i
, raw_cfg_len
= len
- 3;
570 for (i
= 0; i
< raw_cfg_len
; i
+= 2)
571 check_sum
+= get_unaligned_be16(&cfg
[i
]);
572 check_sum
= (~check_sum
) + 1;
573 if (check_sum
!= get_unaligned_be16(&cfg
[raw_cfg_len
])) {
574 dev_err(&ts
->client
->dev
,
575 "The checksum of the config fw is not correct");
579 if (cfg
[raw_cfg_len
+ 2] != 1) {
580 dev_err(&ts
->client
->dev
,
581 "Config fw must have Config_Fresh register set");
588 static void goodix_calc_cfg_checksum_16(struct goodix_ts_data
*ts
)
590 int i
, raw_cfg_len
= ts
->chip
->config_len
- 3;
593 for (i
= 0; i
< raw_cfg_len
; i
+= 2)
594 check_sum
+= get_unaligned_be16(&ts
->config
[i
]);
595 check_sum
= (~check_sum
) + 1;
597 put_unaligned_be16(check_sum
, &ts
->config
[raw_cfg_len
]);
598 ts
->config
[raw_cfg_len
+ 2] = 1; /* Set "config_fresh" bit */
602 * goodix_check_cfg - Checks if config fw is valid
604 * @ts: goodix_ts_data pointer
605 * @cfg: firmware config data
606 * @len: config data length
608 static int goodix_check_cfg(struct goodix_ts_data
*ts
, const u8
*cfg
, int len
)
610 if (len
< GOODIX_CONFIG_MIN_LENGTH
||
611 len
> GOODIX_CONFIG_MAX_LENGTH
) {
612 dev_err(&ts
->client
->dev
,
613 "The length of the config fw is not correct");
617 return ts
->chip
->check_config(ts
, cfg
, len
);
621 * goodix_send_cfg - Write fw config to device
623 * @ts: goodix_ts_data pointer
624 * @cfg: config firmware to write to device
625 * @len: config data length
627 int goodix_send_cfg(struct goodix_ts_data
*ts
, const u8
*cfg
, int len
)
631 error
= goodix_check_cfg(ts
, cfg
, len
);
635 error
= goodix_i2c_write(ts
->client
, ts
->chip
->config_addr
, cfg
, len
);
639 dev_dbg(&ts
->client
->dev
, "Config sent successfully.");
641 /* Let the firmware reconfigure itself, so sleep for 10ms */
642 usleep_range(10000, 11000);
647 #ifdef ACPI_GPIO_SUPPORT
648 static int goodix_pin_acpi_direction_input(struct goodix_ts_data
*ts
)
650 acpi_handle handle
= ACPI_HANDLE(&ts
->client
->dev
);
653 status
= acpi_evaluate_object(handle
, "INTI", NULL
, NULL
);
654 return ACPI_SUCCESS(status
) ? 0 : -EIO
;
657 static int goodix_pin_acpi_output_method(struct goodix_ts_data
*ts
, int value
)
659 acpi_handle handle
= ACPI_HANDLE(&ts
->client
->dev
);
662 status
= acpi_execute_simple_method(handle
, "INTO", value
);
663 return ACPI_SUCCESS(status
) ? 0 : -EIO
;
666 static int goodix_pin_acpi_direction_input(struct goodix_ts_data
*ts
)
668 dev_err(&ts
->client
->dev
,
669 "%s called on device without ACPI support\n", __func__
);
673 static int goodix_pin_acpi_output_method(struct goodix_ts_data
*ts
, int value
)
675 dev_err(&ts
->client
->dev
,
676 "%s called on device without ACPI support\n", __func__
);
681 static int goodix_irq_direction_output(struct goodix_ts_data
*ts
, int value
)
683 switch (ts
->irq_pin_access_method
) {
684 case IRQ_PIN_ACCESS_NONE
:
685 dev_err(&ts
->client
->dev
,
686 "%s called without an irq_pin_access_method set\n",
689 case IRQ_PIN_ACCESS_GPIO
:
690 return gpiod_direction_output(ts
->gpiod_int
, value
);
691 case IRQ_PIN_ACCESS_ACPI_GPIO
:
693 * The IRQ pin triggers on a falling edge, so its gets marked
694 * as active-low, use output_raw to avoid the value inversion.
696 return gpiod_direction_output_raw(ts
->gpiod_int
, value
);
697 case IRQ_PIN_ACCESS_ACPI_METHOD
:
698 return goodix_pin_acpi_output_method(ts
, value
);
701 return -EINVAL
; /* Never reached */
704 static int goodix_irq_direction_input(struct goodix_ts_data
*ts
)
706 switch (ts
->irq_pin_access_method
) {
707 case IRQ_PIN_ACCESS_NONE
:
708 dev_err(&ts
->client
->dev
,
709 "%s called without an irq_pin_access_method set\n",
712 case IRQ_PIN_ACCESS_GPIO
:
713 return gpiod_direction_input(ts
->gpiod_int
);
714 case IRQ_PIN_ACCESS_ACPI_GPIO
:
715 return gpiod_direction_input(ts
->gpiod_int
);
716 case IRQ_PIN_ACCESS_ACPI_METHOD
:
717 return goodix_pin_acpi_direction_input(ts
);
720 return -EINVAL
; /* Never reached */
723 int goodix_int_sync(struct goodix_ts_data
*ts
)
727 error
= goodix_irq_direction_output(ts
, 0);
731 msleep(50); /* T5: 50ms */
733 error
= goodix_irq_direction_input(ts
);
740 dev_err(&ts
->client
->dev
, "Controller irq sync failed.\n");
745 * goodix_reset_no_int_sync - Reset device, leaving interrupt line in output mode
747 * @ts: goodix_ts_data pointer
749 int goodix_reset_no_int_sync(struct goodix_ts_data
*ts
)
753 /* begin select I2C slave addr */
754 error
= gpiod_direction_output(ts
->gpiod_rst
, 0);
758 msleep(20); /* T2: > 10ms */
760 /* HIGH: 0x28/0x29, LOW: 0xBA/0xBB */
761 error
= goodix_irq_direction_output(ts
, ts
->client
->addr
== 0x14);
765 usleep_range(100, 2000); /* T3: > 100us */
767 error
= gpiod_direction_output(ts
->gpiod_rst
, 1);
771 usleep_range(6000, 10000); /* T4: > 5ms */
774 * Put the reset pin back in to input / high-impedance mode to save
775 * power. Only do this in the non ACPI case since some ACPI boards
776 * don't have a pull-up, so there the reset pin must stay active-high.
778 if (ts
->irq_pin_access_method
== IRQ_PIN_ACCESS_GPIO
) {
779 error
= gpiod_direction_input(ts
->gpiod_rst
);
787 dev_err(&ts
->client
->dev
, "Controller reset failed.\n");
792 * goodix_reset - Reset device during power on
794 * @ts: goodix_ts_data pointer
796 static int goodix_reset(struct goodix_ts_data
*ts
)
800 error
= goodix_reset_no_int_sync(ts
);
804 return goodix_int_sync(ts
);
807 #ifdef ACPI_GPIO_SUPPORT
808 static const struct acpi_gpio_params first_gpio
= { 0, 0, false };
809 static const struct acpi_gpio_params second_gpio
= { 1, 0, false };
811 static const struct acpi_gpio_mapping acpi_goodix_int_first_gpios
[] = {
812 { GOODIX_GPIO_INT_NAME
"-gpios", &first_gpio
, 1 },
813 { GOODIX_GPIO_RST_NAME
"-gpios", &second_gpio
, 1 },
817 static const struct acpi_gpio_mapping acpi_goodix_int_last_gpios
[] = {
818 { GOODIX_GPIO_RST_NAME
"-gpios", &first_gpio
, 1 },
819 { GOODIX_GPIO_INT_NAME
"-gpios", &second_gpio
, 1 },
823 static const struct acpi_gpio_mapping acpi_goodix_reset_only_gpios
[] = {
824 { GOODIX_GPIO_RST_NAME
"-gpios", &first_gpio
, 1 },
828 static int goodix_resource(struct acpi_resource
*ares
, void *data
)
830 struct goodix_ts_data
*ts
= data
;
831 struct device
*dev
= &ts
->client
->dev
;
832 struct acpi_resource_gpio
*gpio
;
834 if (acpi_gpio_get_irq_resource(ares
, &gpio
)) {
835 if (ts
->gpio_int_idx
== -1) {
836 ts
->gpio_int_idx
= ts
->gpio_count
;
838 dev_err(dev
, "More then one GpioInt resource, ignoring ACPI GPIO resources\n");
839 ts
->gpio_int_idx
= -2;
842 } else if (acpi_gpio_get_io_resource(ares
, &gpio
))
849 * This function gets called in case we fail to get the irq GPIO directly
850 * because the ACPI tables lack GPIO-name to APCI _CRS index mappings
851 * (no _DSD UUID daffd814-6eba-4d8c-8a91-bc9bbf4aa301 data).
852 * In that case we add our own mapping and then goodix_get_gpio_config()
853 * retries to get the GPIOs based on the added mapping.
855 static int goodix_add_acpi_gpio_mappings(struct goodix_ts_data
*ts
)
857 const struct acpi_gpio_mapping
*gpio_mapping
= NULL
;
858 struct device
*dev
= &ts
->client
->dev
;
859 LIST_HEAD(resources
);
863 ts
->gpio_int_idx
= -1;
864 ret
= acpi_dev_get_resources(ACPI_COMPANION(dev
), &resources
,
865 goodix_resource
, ts
);
867 dev_err(dev
, "Error getting ACPI resources: %d\n", ret
);
871 acpi_dev_free_resource_list(&resources
);
874 * CHT devices should have a GpioInt + a regular GPIO ACPI resource.
875 * Some CHT devices have a bug (where the also is bogus Interrupt
876 * resource copied from a previous BYT based generation). i2c-core-acpi
877 * will use the non-working Interrupt resource, fix this up.
879 if (soc_intel_is_cht() && ts
->gpio_count
== 2 && ts
->gpio_int_idx
!= -1) {
880 irq
= acpi_dev_gpio_irq_get(ACPI_COMPANION(dev
), 0);
881 if (irq
> 0 && irq
!= ts
->client
->irq
) {
882 dev_warn(dev
, "Overriding IRQ %d -> %d\n", ts
->client
->irq
, irq
);
883 ts
->client
->irq
= irq
;
887 /* Some devices with gpio_int_idx 0 list a third unused GPIO */
888 if ((ts
->gpio_count
== 2 || ts
->gpio_count
== 3) && ts
->gpio_int_idx
== 0) {
889 ts
->irq_pin_access_method
= IRQ_PIN_ACCESS_ACPI_GPIO
;
890 gpio_mapping
= acpi_goodix_int_first_gpios
;
891 } else if (ts
->gpio_count
== 2 && ts
->gpio_int_idx
== 1) {
892 ts
->irq_pin_access_method
= IRQ_PIN_ACCESS_ACPI_GPIO
;
893 gpio_mapping
= acpi_goodix_int_last_gpios
;
894 } else if (ts
->gpio_count
== 1 && ts
->gpio_int_idx
== -1 &&
895 acpi_has_method(ACPI_HANDLE(dev
), "INTI") &&
896 acpi_has_method(ACPI_HANDLE(dev
), "INTO")) {
897 dev_info(dev
, "Using ACPI INTI and INTO methods for IRQ pin access\n");
898 ts
->irq_pin_access_method
= IRQ_PIN_ACCESS_ACPI_METHOD
;
899 gpio_mapping
= acpi_goodix_reset_only_gpios
;
900 } else if (soc_intel_is_byt() && ts
->gpio_count
== 2 && ts
->gpio_int_idx
== -1) {
901 dev_info(dev
, "No ACPI GpioInt resource, assuming that the GPIO order is reset, int\n");
902 ts
->irq_pin_access_method
= IRQ_PIN_ACCESS_ACPI_GPIO
;
903 gpio_mapping
= acpi_goodix_int_last_gpios
;
904 } else if (ts
->gpio_count
== 1 && ts
->gpio_int_idx
== 0) {
906 * On newer devices there is only 1 GpioInt resource and _PS0
907 * does the whole reset sequence for us.
909 acpi_device_fix_up_power(ACPI_COMPANION(dev
));
912 * Before the _PS0 call the int GPIO may have been in output
913 * mode and the call should have put the int GPIO in input mode,
914 * but the GPIO subsys cached state may still think it is
915 * in output mode, causing gpiochip_lock_as_irq() failure.
917 * Add a mapping for the int GPIO to make the
918 * gpiod_int = gpiod_get(..., GPIOD_IN) call succeed,
919 * which will explicitly set the direction to input.
921 ts
->irq_pin_access_method
= IRQ_PIN_ACCESS_NONE
;
922 gpio_mapping
= acpi_goodix_int_first_gpios
;
924 dev_warn(dev
, "Unexpected ACPI resources: gpio_count %d, gpio_int_idx %d\n",
925 ts
->gpio_count
, ts
->gpio_int_idx
);
927 * On some devices _PS0 does a reset for us and
928 * sometimes this is necessary for things to work.
930 acpi_device_fix_up_power(ACPI_COMPANION(dev
));
935 * Normally we put the reset pin in input / high-impedance mode to save
936 * power. But some x86/ACPI boards don't have a pull-up, so for the ACPI
937 * case, leave the pin as is. This results in the pin not being touched
938 * at all on x86/ACPI boards, except when needed for error-recover.
940 ts
->gpiod_rst_flags
= GPIOD_ASIS
;
942 return devm_acpi_dev_add_driver_gpios(dev
, gpio_mapping
);
945 static int goodix_add_acpi_gpio_mappings(struct goodix_ts_data
*ts
)
949 #endif /* CONFIG_X86 && CONFIG_ACPI */
952 * goodix_get_gpio_config - Get GPIO config from ACPI/DT
954 * @ts: goodix_ts_data pointer
956 static int goodix_get_gpio_config(struct goodix_ts_data
*ts
)
959 struct gpio_desc
*gpiod
;
960 bool added_acpi_mappings
= false;
964 dev
= &ts
->client
->dev
;
967 * By default we request the reset pin as input, leaving it in
968 * high-impedance when not resetting the controller to save power.
970 ts
->gpiod_rst_flags
= GPIOD_IN
;
972 ts
->avdd28
= devm_regulator_get(dev
, "AVDD28");
973 if (IS_ERR(ts
->avdd28
))
974 return dev_err_probe(dev
, PTR_ERR(ts
->avdd28
), "Failed to get AVDD28 regulator\n");
976 ts
->vddio
= devm_regulator_get(dev
, "VDDIO");
977 if (IS_ERR(ts
->vddio
))
978 return dev_err_probe(dev
, PTR_ERR(ts
->vddio
), "Failed to get VDDIO regulator\n");
981 /* Get the interrupt GPIO pin number */
982 gpiod
= devm_gpiod_get_optional(dev
, GOODIX_GPIO_INT_NAME
, GPIOD_IN
);
984 return dev_err_probe(dev
, PTR_ERR(gpiod
), "Failed to get %s GPIO\n",
985 GOODIX_GPIO_INT_NAME
);
987 if (!gpiod
&& has_acpi_companion(dev
) && !added_acpi_mappings
) {
988 added_acpi_mappings
= true;
989 if (goodix_add_acpi_gpio_mappings(ts
) == 0)
990 goto retry_get_irq_gpio
;
993 ts
->gpiod_int
= gpiod
;
995 /* Get the reset line GPIO pin number */
996 gpiod
= devm_gpiod_get_optional(dev
, GOODIX_GPIO_RST_NAME
, ts
->gpiod_rst_flags
);
998 return dev_err_probe(dev
, PTR_ERR(gpiod
), "Failed to get %s GPIO\n",
999 GOODIX_GPIO_RST_NAME
);
1001 ts
->gpiod_rst
= gpiod
;
1003 switch (ts
->irq_pin_access_method
) {
1004 case IRQ_PIN_ACCESS_ACPI_GPIO
:
1006 * We end up here if goodix_add_acpi_gpio_mappings() has
1007 * called devm_acpi_dev_add_driver_gpios() because the ACPI
1008 * tables did not contain name to index mappings.
1009 * Check that we successfully got both GPIOs after we've
1010 * added our own acpi_gpio_mapping and if we did not get both
1011 * GPIOs reset irq_pin_access_method to IRQ_PIN_ACCESS_NONE.
1013 if (!ts
->gpiod_int
|| !ts
->gpiod_rst
)
1014 ts
->irq_pin_access_method
= IRQ_PIN_ACCESS_NONE
;
1016 case IRQ_PIN_ACCESS_ACPI_METHOD
:
1018 ts
->irq_pin_access_method
= IRQ_PIN_ACCESS_NONE
;
1021 if (ts
->gpiod_int
&& ts
->gpiod_rst
) {
1022 ts
->reset_controller_at_probe
= true;
1023 ts
->load_cfg_from_disk
= true;
1024 ts
->irq_pin_access_method
= IRQ_PIN_ACCESS_GPIO
;
1032 * goodix_read_config - Read the embedded configuration of the panel
1034 * @ts: our goodix_ts_data pointer
1036 * Must be called during probe
1038 static void goodix_read_config(struct goodix_ts_data
*ts
)
1044 * On controllers where we need to upload the firmware
1045 * (controllers without flash) ts->config already has the config
1046 * at this point and the controller itself does not have it yet!
1048 if (!ts
->firmware_name
) {
1049 error
= goodix_i2c_read(ts
->client
, ts
->chip
->config_addr
,
1050 ts
->config
, ts
->chip
->config_len
);
1052 ts
->int_trigger_type
= GOODIX_INT_TRIGGER
;
1053 ts
->max_touch_num
= GOODIX_MAX_CONTACTS
;
1058 ts
->int_trigger_type
= ts
->config
[TRIGGER_LOC
] & 0x03;
1059 ts
->max_touch_num
= ts
->config
[MAX_CONTACTS_LOC
] & 0x0f;
1061 x_max
= get_unaligned_le16(&ts
->config
[RESOLUTION_LOC
]);
1062 y_max
= get_unaligned_le16(&ts
->config
[RESOLUTION_LOC
+ 2]);
1063 if (x_max
&& y_max
) {
1064 input_abs_set_max(ts
->input_dev
, ABS_MT_POSITION_X
, x_max
- 1);
1065 input_abs_set_max(ts
->input_dev
, ABS_MT_POSITION_Y
, y_max
- 1);
1068 ts
->chip
->calc_config_checksum(ts
);
1072 * goodix_read_version - Read goodix touchscreen version
1074 * @ts: our goodix_ts_data pointer
1076 static int goodix_read_version(struct goodix_ts_data
*ts
)
1080 char id_str
[GOODIX_ID_MAX_LEN
+ 1];
1082 error
= goodix_i2c_read(ts
->client
, GOODIX_REG_ID
, buf
, sizeof(buf
));
1086 memcpy(id_str
, buf
, GOODIX_ID_MAX_LEN
);
1087 id_str
[GOODIX_ID_MAX_LEN
] = 0;
1088 strscpy(ts
->id
, id_str
, GOODIX_ID_MAX_LEN
+ 1);
1090 ts
->version
= get_unaligned_le16(&buf
[4]);
1092 dev_info(&ts
->client
->dev
, "ID %s, version: %04x\n", ts
->id
,
1099 * goodix_i2c_test - I2C test function to check if the device answers.
1101 * @client: the i2c client
1103 static int goodix_i2c_test(struct i2c_client
*client
)
1109 while (retry
++ < 2) {
1110 error
= goodix_i2c_read(client
, GOODIX_REG_ID
, &test
, 1);
1121 * goodix_configure_dev - Finish device initialization
1123 * @ts: our goodix_ts_data pointer
1125 * Must be called from probe to finish initialization of the device.
1126 * Contains the common initialization code for both devices that
1127 * declare gpio pins and devices that do not. It is either called
1128 * directly from probe or from request_firmware_wait callback.
1130 static int goodix_configure_dev(struct goodix_ts_data
*ts
)
1135 ts
->int_trigger_type
= GOODIX_INT_TRIGGER
;
1136 ts
->max_touch_num
= GOODIX_MAX_CONTACTS
;
1138 ts
->input_dev
= devm_input_allocate_device(&ts
->client
->dev
);
1139 if (!ts
->input_dev
) {
1140 dev_err(&ts
->client
->dev
, "Failed to allocate input device.");
1144 ts
->input_dev
->name
= "Goodix Capacitive TouchScreen";
1145 ts
->input_dev
->phys
= "input/ts";
1146 ts
->input_dev
->id
.bustype
= BUS_I2C
;
1147 ts
->input_dev
->id
.vendor
= 0x0416;
1148 if (kstrtou16(ts
->id
, 10, &ts
->input_dev
->id
.product
))
1149 ts
->input_dev
->id
.product
= 0x1001;
1150 ts
->input_dev
->id
.version
= ts
->version
;
1152 ts
->input_dev
->keycode
= ts
->keymap
;
1153 ts
->input_dev
->keycodesize
= sizeof(ts
->keymap
[0]);
1154 ts
->input_dev
->keycodemax
= GOODIX_MAX_KEYS
;
1156 /* Capacitive Windows/Home button on some devices */
1157 for (i
= 0; i
< GOODIX_MAX_KEYS
; ++i
) {
1159 ts
->keymap
[i
] = KEY_LEFTMETA
;
1161 ts
->keymap
[i
] = KEY_F1
+ (i
- 1);
1163 input_set_capability(ts
->input_dev
, EV_KEY
, ts
->keymap
[i
]);
1166 input_set_capability(ts
->input_dev
, EV_ABS
, ABS_MT_POSITION_X
);
1167 input_set_capability(ts
->input_dev
, EV_ABS
, ABS_MT_POSITION_Y
);
1168 input_set_abs_params(ts
->input_dev
, ABS_MT_WIDTH_MAJOR
, 0, 255, 0, 0);
1169 input_set_abs_params(ts
->input_dev
, ABS_MT_TOUCH_MAJOR
, 0, 255, 0, 0);
1172 /* Read configuration and apply touchscreen parameters */
1173 goodix_read_config(ts
);
1175 /* Try overriding touchscreen parameters via device properties */
1176 touchscreen_parse_properties(ts
->input_dev
, true, &ts
->prop
);
1178 if (!ts
->prop
.max_x
|| !ts
->prop
.max_y
|| !ts
->max_touch_num
) {
1179 if (!ts
->reset_controller_at_probe
&&
1180 ts
->irq_pin_access_method
!= IRQ_PIN_ACCESS_NONE
) {
1181 dev_info(&ts
->client
->dev
, "Config not set, resetting controller\n");
1182 /* Retry after a controller reset */
1183 ts
->reset_controller_at_probe
= true;
1184 error
= goodix_reset(ts
);
1187 goto retry_read_config
;
1189 dev_err(&ts
->client
->dev
,
1190 "Invalid config (%d, %d, %d), using defaults\n",
1191 ts
->prop
.max_x
, ts
->prop
.max_y
, ts
->max_touch_num
);
1192 ts
->prop
.max_x
= GOODIX_MAX_WIDTH
- 1;
1193 ts
->prop
.max_y
= GOODIX_MAX_HEIGHT
- 1;
1194 ts
->max_touch_num
= GOODIX_MAX_CONTACTS
;
1195 input_abs_set_max(ts
->input_dev
,
1196 ABS_MT_POSITION_X
, ts
->prop
.max_x
);
1197 input_abs_set_max(ts
->input_dev
,
1198 ABS_MT_POSITION_Y
, ts
->prop
.max_y
);
1201 if (dmi_check_system(nine_bytes_report
)) {
1202 ts
->contact_size
= 9;
1204 dev_dbg(&ts
->client
->dev
,
1205 "Non-standard 9-bytes report format quirk\n");
1208 if (dmi_check_system(inverted_x_screen
)) {
1209 ts
->prop
.invert_x
= true;
1210 dev_dbg(&ts
->client
->dev
,
1211 "Applying 'inverted x screen' quirk\n");
1214 error
= input_mt_init_slots(ts
->input_dev
, ts
->max_touch_num
,
1215 INPUT_MT_DIRECT
| INPUT_MT_DROP_UNUSED
);
1217 dev_err(&ts
->client
->dev
,
1218 "Failed to initialize MT slots: %d", error
);
1222 error
= input_register_device(ts
->input_dev
);
1224 dev_err(&ts
->client
->dev
,
1225 "Failed to register input device: %d", error
);
1230 * Create the input_pen device before goodix_request_irq() calls
1231 * devm_request_threaded_irq() so that the devm framework frees
1232 * it after disabling the irq.
1233 * Unfortunately there is no way to detect if the touchscreen has pen
1234 * support, so registering the dev is delayed till the first pen event.
1236 error
= goodix_create_pen_input(ts
);
1240 ts
->irq_flags
= goodix_irq_flags
[ts
->int_trigger_type
] | IRQF_ONESHOT
;
1241 error
= goodix_request_irq(ts
);
1243 dev_err(&ts
->client
->dev
, "request IRQ failed: %d\n", error
);
1251 * goodix_config_cb - Callback to finish device init
1253 * @cfg: firmware config
1254 * @ctx: our goodix_ts_data pointer
1256 * request_firmware_wait callback that finishes
1257 * initialization of the device.
1259 static void goodix_config_cb(const struct firmware
*cfg
, void *ctx
)
1261 struct goodix_ts_data
*ts
= ctx
;
1264 if (ts
->firmware_name
) {
1266 goto err_release_cfg
;
1268 error
= goodix_check_cfg(ts
, cfg
->data
, cfg
->size
);
1270 goto err_release_cfg
;
1272 memcpy(ts
->config
, cfg
->data
, cfg
->size
);
1274 /* send device configuration to the firmware */
1275 error
= goodix_send_cfg(ts
, cfg
->data
, cfg
->size
);
1277 goto err_release_cfg
;
1280 goodix_configure_dev(ts
);
1283 release_firmware(cfg
);
1284 complete_all(&ts
->firmware_loading_complete
);
1287 static void goodix_disable_regulators(void *arg
)
1289 struct goodix_ts_data
*ts
= arg
;
1291 regulator_disable(ts
->vddio
);
1292 regulator_disable(ts
->avdd28
);
1295 static int goodix_ts_probe(struct i2c_client
*client
)
1297 struct goodix_ts_data
*ts
;
1298 const char *cfg_name
;
1301 dev_dbg(&client
->dev
, "I2C Address: 0x%02x\n", client
->addr
);
1303 if (!i2c_check_functionality(client
->adapter
, I2C_FUNC_I2C
)) {
1304 dev_err(&client
->dev
, "I2C check functionality failed.\n");
1308 ts
= devm_kzalloc(&client
->dev
, sizeof(*ts
), GFP_KERNEL
);
1312 ts
->client
= client
;
1313 i2c_set_clientdata(client
, ts
);
1314 init_completion(&ts
->firmware_loading_complete
);
1315 ts
->contact_size
= GOODIX_CONTACT_SIZE
;
1317 error
= goodix_get_gpio_config(ts
);
1321 /* power up the controller */
1322 error
= regulator_enable(ts
->avdd28
);
1324 dev_err(&client
->dev
,
1325 "Failed to enable AVDD28 regulator: %d\n",
1330 error
= regulator_enable(ts
->vddio
);
1332 dev_err(&client
->dev
,
1333 "Failed to enable VDDIO regulator: %d\n",
1335 regulator_disable(ts
->avdd28
);
1339 error
= devm_add_action_or_reset(&client
->dev
,
1340 goodix_disable_regulators
, ts
);
1345 if (ts
->reset_controller_at_probe
) {
1346 /* reset the controller */
1347 error
= goodix_reset(ts
);
1352 error
= goodix_i2c_test(client
);
1354 if (!ts
->reset_controller_at_probe
&&
1355 ts
->irq_pin_access_method
!= IRQ_PIN_ACCESS_NONE
) {
1356 /* Retry after a controller reset */
1357 ts
->reset_controller_at_probe
= true;
1360 dev_err(&client
->dev
, "I2C communication failure: %d\n", error
);
1364 error
= goodix_firmware_check(ts
);
1368 error
= goodix_read_version(ts
);
1372 ts
->chip
= goodix_get_chip_data(ts
->id
);
1374 if (ts
->load_cfg_from_disk
) {
1375 /* update device config */
1376 error
= device_property_read_string(&client
->dev
,
1377 "goodix,config-name",
1380 snprintf(ts
->cfg_name
, sizeof(ts
->cfg_name
),
1381 "goodix/%s", cfg_name
);
1383 snprintf(ts
->cfg_name
, sizeof(ts
->cfg_name
),
1384 "goodix_%s_cfg.bin", ts
->id
);
1386 error
= request_firmware_nowait(THIS_MODULE
, true, ts
->cfg_name
,
1387 &client
->dev
, GFP_KERNEL
, ts
,
1390 dev_err(&client
->dev
,
1391 "Failed to invoke firmware loader: %d\n",
1398 error
= goodix_configure_dev(ts
);
1406 static void goodix_ts_remove(struct i2c_client
*client
)
1408 struct goodix_ts_data
*ts
= i2c_get_clientdata(client
);
1410 if (ts
->load_cfg_from_disk
)
1411 wait_for_completion(&ts
->firmware_loading_complete
);
1414 static int goodix_suspend(struct device
*dev
)
1416 struct i2c_client
*client
= to_i2c_client(dev
);
1417 struct goodix_ts_data
*ts
= i2c_get_clientdata(client
);
1420 if (ts
->load_cfg_from_disk
)
1421 wait_for_completion(&ts
->firmware_loading_complete
);
1423 /* We need gpio pins to suspend/resume */
1424 if (ts
->irq_pin_access_method
== IRQ_PIN_ACCESS_NONE
) {
1425 disable_irq(client
->irq
);
1429 /* Free IRQ as IRQ pin is used as output in the suspend sequence */
1430 goodix_free_irq(ts
);
1432 /* Save reference (calibration) info if necessary */
1433 goodix_save_bak_ref(ts
);
1435 /* Output LOW on the INT pin for 5 ms */
1436 error
= goodix_irq_direction_output(ts
, 0);
1438 goodix_request_irq(ts
);
1442 usleep_range(5000, 6000);
1444 error
= goodix_i2c_write_u8(ts
->client
, GOODIX_REG_COMMAND
,
1445 GOODIX_CMD_SCREEN_OFF
);
1447 goodix_irq_direction_input(ts
);
1448 goodix_request_irq(ts
);
1453 * The datasheet specifies that the interval between sending screen-off
1454 * command and wake-up should be longer than 58 ms. To avoid waking up
1455 * sooner, delay 58ms here.
1461 static int goodix_resume(struct device
*dev
)
1463 struct i2c_client
*client
= to_i2c_client(dev
);
1464 struct goodix_ts_data
*ts
= i2c_get_clientdata(client
);
1468 if (ts
->irq_pin_access_method
== IRQ_PIN_ACCESS_NONE
) {
1469 enable_irq(client
->irq
);
1474 * Exit sleep mode by outputting HIGH level to INT pin
1477 error
= goodix_irq_direction_output(ts
, 1);
1481 usleep_range(2000, 5000);
1483 error
= goodix_int_sync(ts
);
1487 error
= goodix_i2c_read(ts
->client
, ts
->chip
->config_addr
,
1489 if (!error
&& config_ver
!= ts
->config
[0])
1490 dev_info(dev
, "Config version mismatch %d != %d, resetting controller\n",
1491 config_ver
, ts
->config
[0]);
1493 if (error
!= 0 || config_ver
!= ts
->config
[0]) {
1494 error
= goodix_reset(ts
);
1498 error
= goodix_send_cfg(ts
, ts
->config
, ts
->chip
->config_len
);
1503 error
= goodix_request_irq(ts
);
1510 static DEFINE_SIMPLE_DEV_PM_OPS(goodix_pm_ops
, goodix_suspend
, goodix_resume
);
1512 static const struct i2c_device_id goodix_ts_id
[] = {
1516 MODULE_DEVICE_TABLE(i2c
, goodix_ts_id
);
1519 static const struct acpi_device_id goodix_acpi_match
[] = {
1525 MODULE_DEVICE_TABLE(acpi
, goodix_acpi_match
);
1529 static const struct of_device_id goodix_of_match
[] = {
1530 { .compatible
= "goodix,gt1151" },
1531 { .compatible
= "goodix,gt1158" },
1532 { .compatible
= "goodix,gt5663" },
1533 { .compatible
= "goodix,gt5688" },
1534 { .compatible
= "goodix,gt911" },
1535 { .compatible
= "goodix,gt9110" },
1536 { .compatible
= "goodix,gt912" },
1537 { .compatible
= "goodix,gt9147" },
1538 { .compatible
= "goodix,gt917s" },
1539 { .compatible
= "goodix,gt927" },
1540 { .compatible
= "goodix,gt9271" },
1541 { .compatible
= "goodix,gt928" },
1542 { .compatible
= "goodix,gt9286" },
1543 { .compatible
= "goodix,gt967" },
1546 MODULE_DEVICE_TABLE(of
, goodix_of_match
);
1549 static struct i2c_driver goodix_ts_driver
= {
1550 .probe
= goodix_ts_probe
,
1551 .remove
= goodix_ts_remove
,
1552 .id_table
= goodix_ts_id
,
1554 .name
= "Goodix-TS",
1555 .acpi_match_table
= ACPI_PTR(goodix_acpi_match
),
1556 .of_match_table
= of_match_ptr(goodix_of_match
),
1557 .pm
= pm_sleep_ptr(&goodix_pm_ops
),
1560 module_i2c_driver(goodix_ts_driver
);
1562 MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
1563 MODULE_AUTHOR("Bastien Nocera <hadess@hadess.net>");
1564 MODULE_DESCRIPTION("Goodix touchscreen driver");
1565 MODULE_LICENSE("GPL v2");