Lines Matching refs:ts
92 static int goodix_ts_read_input_report(struct goodix_ts_data *ts, u8 *data) in goodix_ts_read_input_report() argument
97 error = goodix_i2c_read(ts->client, GOODIX_READ_COOR_ADDR, data, in goodix_ts_read_input_report()
100 dev_err(&ts->client->dev, "I2C transfer error: %d\n", error); in goodix_ts_read_input_report()
105 if (touch_num > ts->max_touch_num) in goodix_ts_read_input_report()
110 error = goodix_i2c_read(ts->client, in goodix_ts_read_input_report()
122 static void goodix_ts_report_touch(struct goodix_ts_data *ts, u8 *coor_data) in goodix_ts_report_touch() argument
129 input_mt_slot(ts->input_dev, id); in goodix_ts_report_touch()
130 input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, true); in goodix_ts_report_touch()
131 input_report_abs(ts->input_dev, ABS_MT_POSITION_X, input_x); in goodix_ts_report_touch()
132 input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, input_y); in goodix_ts_report_touch()
133 input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, input_w); in goodix_ts_report_touch()
134 input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, input_w); in goodix_ts_report_touch()
145 static void goodix_process_events(struct goodix_ts_data *ts) in goodix_process_events() argument
147 u8 point_data[1 + GOODIX_CONTACT_SIZE * ts->max_touch_num]; in goodix_process_events()
151 touch_num = goodix_ts_read_input_report(ts, point_data); in goodix_process_events()
156 goodix_ts_report_touch(ts, in goodix_process_events()
159 input_mt_sync_frame(ts->input_dev); in goodix_process_events()
160 input_sync(ts->input_dev); in goodix_process_events()
176 struct goodix_ts_data *ts = dev_id; in goodix_ts_irq_handler() local
178 goodix_process_events(ts); in goodix_ts_irq_handler()
180 if (i2c_master_send(ts->client, end_cmd, sizeof(end_cmd)) < 0) in goodix_ts_irq_handler()
181 dev_err(&ts->client->dev, "I2C write end_cmd error\n"); in goodix_ts_irq_handler()
193 static void goodix_read_config(struct goodix_ts_data *ts) in goodix_read_config() argument
198 error = goodix_i2c_read(ts->client, GOODIX_REG_CONFIG_DATA, in goodix_read_config()
202 dev_warn(&ts->client->dev, in goodix_read_config()
205 ts->abs_x_max = GOODIX_MAX_WIDTH; in goodix_read_config()
206 ts->abs_y_max = GOODIX_MAX_HEIGHT; in goodix_read_config()
207 ts->int_trigger_type = GOODIX_INT_TRIGGER; in goodix_read_config()
208 ts->max_touch_num = GOODIX_MAX_CONTACTS; in goodix_read_config()
212 ts->abs_x_max = get_unaligned_le16(&config[RESOLUTION_LOC]); in goodix_read_config()
213 ts->abs_y_max = get_unaligned_le16(&config[RESOLUTION_LOC + 2]); in goodix_read_config()
214 ts->int_trigger_type = config[TRIGGER_LOC] & 0x03; in goodix_read_config()
215 ts->max_touch_num = config[MAX_CONTACTS_LOC] & 0x0f; in goodix_read_config()
216 if (!ts->abs_x_max || !ts->abs_y_max || !ts->max_touch_num) { in goodix_read_config()
217 dev_err(&ts->client->dev, in goodix_read_config()
219 ts->abs_x_max = GOODIX_MAX_WIDTH; in goodix_read_config()
220 ts->abs_y_max = GOODIX_MAX_HEIGHT; in goodix_read_config()
221 ts->max_touch_num = GOODIX_MAX_CONTACTS; in goodix_read_config()
282 static int goodix_request_input_dev(struct goodix_ts_data *ts) in goodix_request_input_dev() argument
286 ts->input_dev = devm_input_allocate_device(&ts->client->dev); in goodix_request_input_dev()
287 if (!ts->input_dev) { in goodix_request_input_dev()
288 dev_err(&ts->client->dev, "Failed to allocate input device."); in goodix_request_input_dev()
292 ts->input_dev->evbit[0] = BIT_MASK(EV_SYN) | in goodix_request_input_dev()
296 input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0, in goodix_request_input_dev()
297 ts->abs_x_max, 0, 0); in goodix_request_input_dev()
298 input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, 0, in goodix_request_input_dev()
299 ts->abs_y_max, 0, 0); in goodix_request_input_dev()
300 input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0); in goodix_request_input_dev()
301 input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); in goodix_request_input_dev()
303 input_mt_init_slots(ts->input_dev, ts->max_touch_num, in goodix_request_input_dev()
306 ts->input_dev->name = "Goodix Capacitive TouchScreen"; in goodix_request_input_dev()
307 ts->input_dev->phys = "input/ts"; in goodix_request_input_dev()
308 ts->input_dev->id.bustype = BUS_I2C; in goodix_request_input_dev()
309 ts->input_dev->id.vendor = 0x0416; in goodix_request_input_dev()
310 ts->input_dev->id.product = 0x1001; in goodix_request_input_dev()
311 ts->input_dev->id.version = 10427; in goodix_request_input_dev()
313 error = input_register_device(ts->input_dev); in goodix_request_input_dev()
315 dev_err(&ts->client->dev, in goodix_request_input_dev()
326 struct goodix_ts_data *ts; in goodix_ts_probe() local
338 ts = devm_kzalloc(&client->dev, sizeof(*ts), GFP_KERNEL); in goodix_ts_probe()
339 if (!ts) in goodix_ts_probe()
342 ts->client = client; in goodix_ts_probe()
343 i2c_set_clientdata(client, ts); in goodix_ts_probe()
357 goodix_read_config(ts); in goodix_ts_probe()
359 error = goodix_request_input_dev(ts); in goodix_ts_probe()
363 irq_flags = goodix_irq_flags[ts->int_trigger_type] | IRQF_ONESHOT; in goodix_ts_probe()
364 error = devm_request_threaded_irq(&ts->client->dev, client->irq, in goodix_ts_probe()
366 irq_flags, client->name, ts); in goodix_ts_probe()