Lines Matching refs:ts
118 static int goodix_ts_read_input_report(struct goodix_ts_data *ts, u8 *data) in goodix_ts_read_input_report() argument
123 error = goodix_i2c_read(ts->client, GOODIX_READ_COOR_ADDR, data, in goodix_ts_read_input_report()
126 dev_err(&ts->client->dev, "I2C transfer error: %d\n", error); in goodix_ts_read_input_report()
134 if (touch_num > ts->max_touch_num) in goodix_ts_read_input_report()
139 error = goodix_i2c_read(ts->client, in goodix_ts_read_input_report()
151 static void goodix_ts_report_touch(struct goodix_ts_data *ts, u8 *coor_data) in goodix_ts_report_touch() argument
158 if (ts->rotated_screen) { in goodix_ts_report_touch()
159 input_x = ts->abs_x_max - input_x; in goodix_ts_report_touch()
160 input_y = ts->abs_y_max - input_y; in goodix_ts_report_touch()
163 input_mt_slot(ts->input_dev, id); in goodix_ts_report_touch()
164 input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, true); in goodix_ts_report_touch()
165 input_report_abs(ts->input_dev, ABS_MT_POSITION_X, input_x); in goodix_ts_report_touch()
166 input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, input_y); in goodix_ts_report_touch()
167 input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, input_w); in goodix_ts_report_touch()
168 input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, input_w); in goodix_ts_report_touch()
179 static void goodix_process_events(struct goodix_ts_data *ts) in goodix_process_events() argument
185 touch_num = goodix_ts_read_input_report(ts, point_data); in goodix_process_events()
190 goodix_ts_report_touch(ts, in goodix_process_events()
193 input_mt_sync_frame(ts->input_dev); in goodix_process_events()
194 input_sync(ts->input_dev); in goodix_process_events()
210 struct goodix_ts_data *ts = dev_id; in goodix_ts_irq_handler() local
212 goodix_process_events(ts); in goodix_ts_irq_handler()
214 if (i2c_master_send(ts->client, end_cmd, sizeof(end_cmd)) < 0) in goodix_ts_irq_handler()
215 dev_err(&ts->client->dev, "I2C write end_cmd error\n"); in goodix_ts_irq_handler()
227 static void goodix_read_config(struct goodix_ts_data *ts) in goodix_read_config() argument
232 error = goodix_i2c_read(ts->client, GOODIX_REG_CONFIG_DATA, in goodix_read_config()
236 dev_warn(&ts->client->dev, in goodix_read_config()
239 ts->abs_x_max = GOODIX_MAX_WIDTH; in goodix_read_config()
240 ts->abs_y_max = GOODIX_MAX_HEIGHT; in goodix_read_config()
241 ts->int_trigger_type = GOODIX_INT_TRIGGER; in goodix_read_config()
242 ts->max_touch_num = GOODIX_MAX_CONTACTS; in goodix_read_config()
246 ts->abs_x_max = get_unaligned_le16(&config[RESOLUTION_LOC]); in goodix_read_config()
247 ts->abs_y_max = get_unaligned_le16(&config[RESOLUTION_LOC + 2]); in goodix_read_config()
248 ts->int_trigger_type = config[TRIGGER_LOC] & 0x03; in goodix_read_config()
249 ts->max_touch_num = config[MAX_CONTACTS_LOC] & 0x0f; in goodix_read_config()
250 if (!ts->abs_x_max || !ts->abs_y_max || !ts->max_touch_num) { in goodix_read_config()
251 dev_err(&ts->client->dev, in goodix_read_config()
253 ts->abs_x_max = GOODIX_MAX_WIDTH; in goodix_read_config()
254 ts->abs_y_max = GOODIX_MAX_HEIGHT; in goodix_read_config()
255 ts->max_touch_num = GOODIX_MAX_CONTACTS; in goodix_read_config()
258 ts->rotated_screen = dmi_check_system(rotated_screen); in goodix_read_config()
259 if (ts->rotated_screen) in goodix_read_config()
260 dev_dbg(&ts->client->dev, in goodix_read_config()
329 static int goodix_request_input_dev(struct goodix_ts_data *ts, u16 version, in goodix_request_input_dev() argument
334 ts->input_dev = devm_input_allocate_device(&ts->client->dev); in goodix_request_input_dev()
335 if (!ts->input_dev) { in goodix_request_input_dev()
336 dev_err(&ts->client->dev, "Failed to allocate input device."); in goodix_request_input_dev()
340 input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, in goodix_request_input_dev()
341 0, ts->abs_x_max, 0, 0); in goodix_request_input_dev()
342 input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, in goodix_request_input_dev()
343 0, ts->abs_y_max, 0, 0); in goodix_request_input_dev()
344 input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0); in goodix_request_input_dev()
345 input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); in goodix_request_input_dev()
347 input_mt_init_slots(ts->input_dev, ts->max_touch_num, in goodix_request_input_dev()
350 ts->input_dev->name = "Goodix Capacitive TouchScreen"; in goodix_request_input_dev()
351 ts->input_dev->phys = "input/ts"; in goodix_request_input_dev()
352 ts->input_dev->id.bustype = BUS_I2C; in goodix_request_input_dev()
353 ts->input_dev->id.vendor = 0x0416; in goodix_request_input_dev()
354 ts->input_dev->id.product = id; in goodix_request_input_dev()
355 ts->input_dev->id.version = version; in goodix_request_input_dev()
357 error = input_register_device(ts->input_dev); in goodix_request_input_dev()
359 dev_err(&ts->client->dev, in goodix_request_input_dev()
370 struct goodix_ts_data *ts; in goodix_ts_probe() local
382 ts = devm_kzalloc(&client->dev, sizeof(*ts), GFP_KERNEL); in goodix_ts_probe()
383 if (!ts) in goodix_ts_probe()
386 ts->client = client; in goodix_ts_probe()
387 i2c_set_clientdata(client, ts); in goodix_ts_probe()
401 goodix_read_config(ts); in goodix_ts_probe()
403 error = goodix_request_input_dev(ts, version_info, id_info); in goodix_ts_probe()
407 irq_flags = goodix_irq_flags[ts->int_trigger_type] | IRQF_ONESHOT; in goodix_ts_probe()
408 error = devm_request_threaded_irq(&ts->client->dev, client->irq, in goodix_ts_probe()
410 irq_flags, client->name, ts); in goodix_ts_probe()