88
99#define DT_DRV_COMPAT goodix_gt911
1010
11- #include <zephyr/drivers/kscan.h>
12- #include <zephyr/drivers/i2c.h>
1311#include <zephyr/drivers/gpio.h>
12+ #include <zephyr/drivers/i2c.h>
13+ #include <zephyr/input/input.h>
1414#include <zephyr/sys/byteorder.h>
1515
1616#include <zephyr/logging/log.h>
17- LOG_MODULE_REGISTER (gt911 , CONFIG_KSCAN_LOG_LEVEL );
17+ LOG_MODULE_REGISTER (gt911 , CONFIG_INPUT_LOG_LEVEL );
1818
1919/* GT911 used registers */
2020#define DEVICE_ID __bswap_16(0x8140U)
@@ -45,11 +45,9 @@ struct gt911_config {
4545struct gt911_data {
4646 /** Device pointer. */
4747 const struct device * dev ;
48- /** KSCAN Callback. */
49- kscan_callback_t callback ;
5048 /** Work queue (for deferred read). */
5149 struct k_work work ;
52- #ifdef CONFIG_KSCAN_GT911_INTERRUPT
50+ #ifdef CONFIG_INPUT_GT911_INTERRUPT
5351 /** Interrupt GPIO callback. */
5452 struct gpio_callback int_gpio_cb ;
5553#else
@@ -73,7 +71,6 @@ struct gt911_point_reg_t {
7371static int gt911_process (const struct device * dev )
7472{
7573 const struct gt911_config * config = dev -> config ;
76- struct gt911_data * data = dev -> data ;
7774
7875 int r ;
7976 uint16_t reg_addr ;
@@ -124,7 +121,13 @@ static int gt911_process(const struct device *dev)
124121
125122 LOG_DBG ("pressed: %d, row: %d, col: %d" , pressed , row , col );
126123
127- data -> callback (dev , row , col , pressed );
124+ if (pressed ) {
125+ input_report_abs (dev , INPUT_ABS_X , col , false, K_FOREVER );
126+ input_report_abs (dev , INPUT_ABS_Y , row , false, K_FOREVER );
127+ input_report_key (dev , INPUT_BTN_TOUCH , 1 , true, K_FOREVER );
128+ } else {
129+ input_report_key (dev , INPUT_BTN_TOUCH , 0 , true, K_FOREVER );
130+ }
128131
129132 return 0 ;
130133}
@@ -136,7 +139,7 @@ static void gt911_work_handler(struct k_work *work)
136139 gt911_process (data -> dev );
137140}
138141
139- #ifdef CONFIG_KSCAN_GT911_INTERRUPT
142+ #ifdef CONFIG_INPUT_GT911_INTERRUPT
140143static void gt911_isr_handler (const struct device * dev ,
141144 struct gpio_callback * cb , uint32_t pins )
142145{
@@ -153,52 +156,6 @@ static void gt911_timer_handler(struct k_timer *timer)
153156}
154157#endif
155158
156- static int gt911_configure (const struct device * dev ,
157- kscan_callback_t callback )
158- {
159- struct gt911_data * data = dev -> data ;
160-
161- if (!callback ) {
162- LOG_ERR ("Invalid callback (NULL)" );
163- return - EINVAL ;
164- }
165-
166- data -> callback = callback ;
167-
168- return 0 ;
169- }
170-
171- static int gt911_enable_callback (const struct device * dev )
172- {
173- struct gt911_data * data = dev -> data ;
174-
175- #ifdef CONFIG_KSCAN_GT911_INTERRUPT
176- const struct gt911_config * config = dev -> config ;
177-
178- gpio_add_callback (config -> int_gpio .port , & data -> int_gpio_cb );
179- #else
180- k_timer_start (& data -> timer , K_MSEC (CONFIG_KSCAN_GT911_PERIOD ),
181- K_MSEC (CONFIG_KSCAN_GT911_PERIOD ));
182- #endif
183-
184- return 0 ;
185- }
186-
187- static int gt911_disable_callback (const struct device * dev )
188- {
189- struct gt911_data * data = dev -> data ;
190-
191- #ifdef CONFIG_KSCAN_GT911_INTERRUPT
192- const struct gt911_config * config = dev -> config ;
193-
194- gpio_remove_callback (config -> int_gpio .port , & data -> int_gpio_cb );
195- #else
196- k_timer_stop (& data -> timer );
197- #endif
198-
199- return 0 ;
200- }
201-
202159static uint8_t gt911_get_firmware_checksum (const uint8_t * firmware )
203160{
204161 uint8_t sum = 0 ;
@@ -269,7 +226,7 @@ static int gt911_init(const struct device *dev)
269226 return r ;
270227 }
271228
272- #ifdef CONFIG_KSCAN_GT911_INTERRUPT
229+ #ifdef CONFIG_INPUT_GT911_INTERRUPT
273230 r = gpio_pin_interrupt_configure_dt (& config -> int_gpio ,
274231 GPIO_INT_EDGE_TO_ACTIVE );
275232 if (r < 0 ) {
@@ -320,15 +277,16 @@ static int gt911_init(const struct device *dev)
320277 return r ;
321278 }
322279
280+ #ifdef CONFIG_INPUT_GT911_INTERRUPT
281+ gpio_add_callback (config -> int_gpio .port , & data -> int_gpio_cb );
282+ #else
283+ k_timer_start (& data -> timer , K_MSEC (CONFIG_INPUT_GT911_PERIOD_MS ),
284+ K_MSEC (CONFIG_INPUT_GT911_PERIOD_MS ));
285+ #endif
286+
323287 return 0 ;
324288}
325289
326- static const struct kscan_driver_api gt911_driver_api = {
327- .config = gt911_configure ,
328- .enable_callback = gt911_enable_callback ,
329- .disable_callback = gt911_disable_callback ,
330- };
331-
332290#define GT911_INIT (index ) \
333291 static const struct gt911_config gt911_config_##index = { \
334292 .bus = I2C_DT_SPEC_INST_GET(index), \
@@ -338,7 +296,7 @@ static const struct kscan_driver_api gt911_driver_api = {
338296 static struct gt911_data gt911_data_##index; \
339297 DEVICE_DT_INST_DEFINE(index, gt911_init, NULL, \
340298 >911_data_##index, >911_config_##index, \
341- POST_KERNEL, CONFIG_KSCAN_INIT_PRIORITY , \
342- >911_driver_api );
299+ POST_KERNEL, CONFIG_INPUT_INIT_PRIORITY , \
300+ NULL );
343301
344302DT_INST_FOREACH_STATUS_OKAY (GT911_INIT )
0 commit comments