Lines Matching full:ts

69 static const char *goodix_ts_name = "goodix-ts";
89 void gtp_int_sync(s32 ms, struct goodix_ts_data *ts);
129 static s32 gtp_main_clk_proc(struct goodix_ts_data *ts);
130 static s32 gtp_bak_ref_proc(struct goodix_ts_data *ts, u8 mode);
143 static s8 gtp_enter_doze(struct goodix_ts_data *ts);
194 struct goodix_ts_data *ts = i2c_get_clientdata(client); in gtp_i2c_read() local
206 if (CHIP_TYPE_GT9F == ts->chip_type) in gtp_i2c_read()
258 struct goodix_ts_data *ts = i2c_get_clientdata(client); in gtp_i2c_write() local
269 if (CHIP_TYPE_GT9F == ts->chip_type) in gtp_i2c_write()
339 struct goodix_ts_data *ts = i2c_get_clientdata(client); in gtp_send_cfg() local
341 if (ts->fixed_cfg) in gtp_send_cfg()
346 else if (ts->pnl_init_error) in gtp_send_cfg()
368 ts: goodix i2c_client private data
372 void gtp_irq_disable(struct goodix_ts_data *ts) in gtp_irq_disable() argument
378 spin_lock_irqsave(&ts->irq_lock, irqflags); in gtp_irq_disable()
379 if (!ts->irq_is_disable) in gtp_irq_disable()
381 ts->irq_is_disable = 1; in gtp_irq_disable()
382 disable_irq_nosync(ts->client->irq); in gtp_irq_disable()
384 spin_unlock_irqrestore(&ts->irq_lock, irqflags); in gtp_irq_disable()
391 ts: goodix i2c_client private data
395 void gtp_irq_enable(struct goodix_ts_data *ts) in gtp_irq_enable() argument
401 spin_lock_irqsave(&ts->irq_lock, irqflags); in gtp_irq_enable()
402 if (ts->irq_is_disable) in gtp_irq_enable()
404 enable_irq(ts->client->irq); in gtp_irq_enable()
405 ts->irq_is_disable = 0; in gtp_irq_enable()
407 spin_unlock_irqrestore(&ts->irq_lock, irqflags); in gtp_irq_enable()
415 ts: goodix i2c_client private data
423 static void gtp_touch_down(struct goodix_ts_data* ts,s32 id,s32 x,s32 y,s32 w) in gtp_touch_down() argument
430 x = ts->abs_x_max - x; in gtp_touch_down()
433 y = ts->abs_y_max - y; in gtp_touch_down()
437 input_mt_slot(ts->input_dev, id); in gtp_touch_down()
438 input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, id); in gtp_touch_down()
439 input_report_abs(ts->input_dev, ABS_MT_POSITION_X, x); in gtp_touch_down()
440 input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, y); in gtp_touch_down()
441 input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, w); in gtp_touch_down()
442 input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, w); in gtp_touch_down()
444 input_report_key(ts->input_dev, BTN_TOUCH, 1); in gtp_touch_down()
445 input_report_abs(ts->input_dev, ABS_MT_POSITION_X, x); in gtp_touch_down()
446 input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, y); in gtp_touch_down()
447 input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, w); in gtp_touch_down()
448 input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, w); in gtp_touch_down()
449 input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, id); in gtp_touch_down()
450 input_mt_sync(ts->input_dev); in gtp_touch_down()
460 ts: goodix i2c_client private data
464 static void gtp_touch_up(struct goodix_ts_data* ts, s32 id) in gtp_touch_up() argument
467 input_mt_slot(ts->input_dev, id); in gtp_touch_up()
468 input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, -1); in gtp_touch_up()
471 input_report_key(ts->input_dev, BTN_TOUCH, 0); in gtp_touch_up()
477 static void gtp_pen_init(struct goodix_ts_data *ts) in gtp_pen_init() argument
483 ts->pen_dev = input_allocate_device(); in gtp_pen_init()
484 if (ts->pen_dev == NULL) in gtp_pen_init()
490 ts->pen_dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) ; in gtp_pen_init()
493 input_mt_init_slots(ts->pen_dev, 16, INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED); in gtp_pen_init()
495 ts->pen_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); in gtp_pen_init()
498 set_bit(BTN_TOOL_PEN, ts->pen_dev->keybit); in gtp_pen_init()
499 set_bit(INPUT_PROP_DIRECT, ts->pen_dev->propbit); in gtp_pen_init()
500 //set_bit(INPUT_PROP_POINTER, ts->pen_dev->propbit); in gtp_pen_init()
503 input_set_capability(ts->pen_dev, EV_KEY, BTN_STYLUS); in gtp_pen_init()
504 input_set_capability(ts->pen_dev, EV_KEY, BTN_STYLUS2); in gtp_pen_init()
507 input_set_abs_params(ts->pen_dev, ABS_MT_POSITION_X, 0, ts->abs_x_max, 0, 0); in gtp_pen_init()
508 input_set_abs_params(ts->pen_dev, ABS_MT_POSITION_Y, 0, ts->abs_y_max, 0, 0); in gtp_pen_init()
509 input_set_abs_params(ts->pen_dev, ABS_MT_PRESSURE, 0, 255, 0, 0); in gtp_pen_init()
510 input_set_abs_params(ts->pen_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); in gtp_pen_init()
511 input_set_abs_params(ts->pen_dev, ABS_MT_TRACKING_ID, 0, 255, 0, 0); in gtp_pen_init()
513 ts->pen_dev->name = "goodix-pen"; in gtp_pen_init()
514 ts->pen_dev->id.bustype = BUS_I2C; in gtp_pen_init()
516 ret = input_register_device(ts->pen_dev); in gtp_pen_init()
519 GTP_ERROR("Register %s input device failed", ts->pen_dev->name); in gtp_pen_init()
526 struct goodix_ts_data *ts = i2c_get_clientdata(i2c_connect_client); in gtp_pen_down() local
532 input_report_key(ts->pen_dev, BTN_TOOL_PEN, 1); in gtp_pen_down()
534 input_mt_slot(ts->pen_dev, id); in gtp_pen_down()
535 input_report_abs(ts->pen_dev, ABS_MT_TRACKING_ID, id); in gtp_pen_down()
536 input_report_abs(ts->pen_dev, ABS_MT_POSITION_X, x); in gtp_pen_down()
537 input_report_abs(ts->pen_dev, ABS_MT_POSITION_Y, y); in gtp_pen_down()
538 input_report_abs(ts->pen_dev, ABS_MT_PRESSURE, w); in gtp_pen_down()
539 input_report_abs(ts->pen_dev, ABS_MT_TOUCH_MAJOR, w); in gtp_pen_down()
541 input_report_key(ts->pen_dev, BTN_TOUCH, 1); in gtp_pen_down()
542 input_report_abs(ts->pen_dev, ABS_MT_POSITION_X, x); in gtp_pen_down()
543 input_report_abs(ts->pen_dev, ABS_MT_POSITION_Y, y); in gtp_pen_down()
544 input_report_abs(ts->pen_dev, ABS_MT_PRESSURE, w); in gtp_pen_down()
545 input_report_abs(ts->pen_dev, ABS_MT_TOUCH_MAJOR, w); in gtp_pen_down()
546 input_report_abs(ts->pen_dev, ABS_MT_TRACKING_ID, id); in gtp_pen_down()
547 input_mt_sync(ts->pen_dev); in gtp_pen_down()
554 struct goodix_ts_data *ts = i2c_get_clientdata(i2c_connect_client); in gtp_pen_up() local
556 input_report_key(ts->pen_dev, BTN_TOOL_PEN, 0); in gtp_pen_up()
559 input_mt_slot(ts->pen_dev, id); in gtp_pen_up()
560 input_report_abs(ts->pen_dev, ABS_MT_TRACKING_ID, -1); in gtp_pen_up()
563 input_report_key(ts->pen_dev, BTN_TOUCH, 0); in gtp_pen_up()
597 struct goodix_ts_data *ts = NULL; in goodix_ts_work_func() local
608 ts = container_of(work, struct goodix_ts_data, work); in goodix_ts_work_func()
609 if (ts->enter_update) in goodix_ts_work_func()
637 input_report_key(ts->input_dev, KEY_POWER, 1); in goodix_ts_work_func()
638 input_sync(ts->input_dev); in goodix_ts_work_func()
639 input_report_key(ts->input_dev, KEY_POWER, 0); in goodix_ts_work_func()
640 input_sync(ts->input_dev); in goodix_ts_work_func()
653 input_report_key(ts->input_dev, KEY_POWER, 1); in goodix_ts_work_func()
654 input_sync(ts->input_dev); in goodix_ts_work_func()
655 input_report_key(ts->input_dev, KEY_POWER, 0); in goodix_ts_work_func()
656 input_sync(ts->input_dev); in goodix_ts_work_func()
665 input_report_key(ts->input_dev, KEY_POWER, 1); in goodix_ts_work_func()
666 input_sync(ts->input_dev); in goodix_ts_work_func()
667 input_report_key(ts->input_dev, KEY_POWER, 0); in goodix_ts_work_func()
668 input_sync(ts->input_dev); in goodix_ts_work_func()
678 gtp_enter_doze(ts); in goodix_ts_work_func()
681 if (ts->use_irq) in goodix_ts_work_func()
683 gtp_irq_enable(ts); in goodix_ts_work_func()
689 ret = gtp_i2c_read(ts->client, point_data, 12); in goodix_ts_work_func()
693 if (ts->use_irq) in goodix_ts_work_func()
695 gtp_irq_enable(ts); in goodix_ts_work_func()
704 if ((finger == 0x00) && (CHIP_TYPE_GT9F == ts->chip_type)) // request arrived in goodix_ts_work_func()
706 ret = gtp_i2c_read(ts->client, rqst_buf, 3); in goodix_ts_work_func()
717 ret = gtp_send_cfg(ts->client); in goodix_ts_work_func()
725 gtp_i2c_write(ts->client, rqst_buf, 3); in goodix_ts_work_func()
733 ts->rqst_processing = 1; in goodix_ts_work_func()
734 ret = gtp_bak_ref_proc(ts, GTP_BAK_REF_SEND); in goodix_ts_work_func()
738 gtp_i2c_write(ts->client, rqst_buf, 3); in goodix_ts_work_func()
739 ts->rqst_processing = 0; in goodix_ts_work_func()
751 gtp_recovery_reset(ts->client); in goodix_ts_work_func()
756 ts->rqst_processing = 1; in goodix_ts_work_func()
757 ret = gtp_main_clk_proc(ts); in goodix_ts_work_func()
766 gtp_i2c_write(ts->client, rqst_buf, 3); in goodix_ts_work_func()
767 ts->rqst_processing = 0; in goodix_ts_work_func()
768 ts->clk_chk_fs_times = 0; in goodix_ts_work_func()
775 gtp_i2c_write(ts->client, rqst_buf, 3); in goodix_ts_work_func()
782 if (ts->use_irq) in goodix_ts_work_func()
784 gtp_irq_enable(ts); in goodix_ts_work_func()
804 ret = gtp_i2c_read(ts->client, buf, 2 + 8 * (touch_num - 1)); in goodix_ts_work_func()
817 input_report_key(ts->pen_dev, BTN_STYLUS, 1); in goodix_ts_work_func()
818 input_report_key(ts->pen_dev, BTN_STYLUS2, 1); in goodix_ts_work_func()
824 input_report_key(ts->pen_dev, BTN_STYLUS, 1); in goodix_ts_work_func()
825 input_report_key(ts->pen_dev, BTN_STYLUS2, 0); in goodix_ts_work_func()
831 input_report_key(ts->pen_dev, BTN_STYLUS, 0); in goodix_ts_work_func()
832 input_report_key(ts->pen_dev, BTN_STYLUS2, 1); in goodix_ts_work_func()
838 input_report_key(ts->pen_dev, BTN_STYLUS, 0); in goodix_ts_work_func()
839 input_report_key(ts->pen_dev, BTN_STYLUS2, 0); in goodix_ts_work_func()
869 input_report_key(ts->input_dev, touch_key_array[i], key_value & (0x01<<i)); in goodix_ts_work_func()
937 gtp_touch_down(ts, id, input_x, input_y, input_w); in goodix_ts_work_func()
950 gtp_touch_up(ts, i); in goodix_ts_work_func()
981 gtp_touch_down(ts, id, input_x, input_y, input_w); in goodix_ts_work_func()
999 gtp_touch_up(ts, 0); in goodix_ts_work_func()
1010 input_sync(ts->pen_dev); in goodix_ts_work_func()
1015 input_sync(ts->input_dev); in goodix_ts_work_func()
1019 if(!ts->gtp_rawdiff_mode) in goodix_ts_work_func()
1021 ret = gtp_i2c_write(ts->client, end_cmd, 3); in goodix_ts_work_func()
1027 if (ts->use_irq) in goodix_ts_work_func()
1029 gtp_irq_enable(ts); in goodix_ts_work_func()
1033 if (device_can_wakeup(&ts->client->dev)) in goodix_ts_work_func()
1034 pm_relax(&ts->client->dev); in goodix_ts_work_func()
1048 struct goodix_ts_data *ts = container_of(timer, struct goodix_ts_data, timer); in goodix_ts_timer_handler() local
1052 queue_work(goodix_wq, &ts->work); in goodix_ts_timer_handler()
1053 hrtimer_start(&ts->timer, ktime_set(0, (GTP_POLL_TIME+6)*1000000), HRTIMER_MODE_REL); in goodix_ts_timer_handler()
1069 struct goodix_ts_data *ts = dev_id; in goodix_ts_irq_handler() local
1073 gtp_irq_disable(ts); in goodix_ts_irq_handler()
1075 if (device_can_wakeup(&ts->client->dev)) in goodix_ts_irq_handler()
1076 pm_stay_awake(&ts->client->dev); in goodix_ts_irq_handler()
1078 queue_work(goodix_wq, &ts->work); in goodix_ts_irq_handler()
1090 void gtp_int_sync(s32 ms, struct goodix_ts_data *ts) in gtp_int_sync() argument
1092 GTP_GPIO_OUTPUT(ts->irq_pin, 0); in gtp_int_sync()
1095 gpio_direction_input(ts->irq_pin); in gtp_int_sync()
1111 struct goodix_ts_data *ts = i2c_get_clientdata(client); in gtp_reset_guitar() local
1115 GTP_GPIO_OUTPUT(ts->rst_pin, 0); // begin select I2C slave addr in gtp_reset_guitar()
1118 GTP_GPIO_OUTPUT(ts->irq_pin, client->addr == 0x14); in gtp_reset_guitar()
1121 GTP_GPIO_OUTPUT(ts->rst_pin, 1); in gtp_reset_guitar()
1126 gpio_direction_input(ts->rst_pin); in gtp_reset_guitar()
1130 if (CHIP_TYPE_GT9F == ts->chip_type) in gtp_reset_guitar()
1136 gtp_int_sync(50, ts); in gtp_reset_guitar()
1147 ts: goodix tp private data
1151 static s8 gtp_enter_doze(struct goodix_ts_data *ts) in gtp_enter_doze() argument
1164 ret = gtp_i2c_write(ts->client, i2c_control_buf, 3); in gtp_enter_doze()
1172 ret = gtp_i2c_write(ts->client, i2c_control_buf, 3); in gtp_enter_doze()
1189 ts: private data.
1194 static s8 gtp_enter_sleep(struct goodix_ts_data * ts) in gtp_enter_sleep() argument
1206 if (CHIP_TYPE_GT9F == ts->chip_type) in gtp_enter_sleep()
1209 ret = gtp_i2c_read(ts->client, status_buf, 3); in gtp_enter_sleep()
1217 ret = gtp_bak_ref_proc(ts, GTP_BAK_REF_STORE); in gtp_enter_sleep()
1226 GTP_GPIO_OUTPUT(ts->irq_pin, 0); in gtp_enter_sleep()
1231 ret = gtp_i2c_write(ts->client, i2c_control_buf, 3); in gtp_enter_sleep()
1248 ts: private data.
1253 static s8 gtp_wakeup_sleep(struct goodix_ts_data * ts) in gtp_wakeup_sleep() argument
1261 if (CHIP_TYPE_GT9F == ts->chip_type) in gtp_wakeup_sleep()
1265 GTP_GPIO_OUTPUT(ts->irq_pin, 1); in gtp_wakeup_sleep()
1272 ret = gtp_i2c_write(ts->client, opr_buf, 3); in gtp_wakeup_sleep()
1279 ret = gtp_i2c_read(ts->client, opr_buf, 3); in gtp_wakeup_sleep()
1292 ret = gtp_fw_startup(ts->client); in gtp_wakeup_sleep()
1296 gtp_esd_recovery(ts->client); in gtp_wakeup_sleep()
1303 gtp_esd_recovery(ts->client); in gtp_wakeup_sleep()
1316 gtp_reset_guitar(ts->client, 20); in gtp_wakeup_sleep()
1334 gtp_irq_disable(ts); in gtp_wakeup_sleep()
1335 gtp_reset_guitar(ts->client, 10); in gtp_wakeup_sleep()
1336 gtp_irq_enable(ts); in gtp_wakeup_sleep()
1339 GTP_GPIO_OUTPUT(ts->irq_pin, 1); in gtp_wakeup_sleep()
1343 ret = gtp_i2c_test(ts->client); in gtp_wakeup_sleep()
1350 gtp_int_sync(25, ts); in gtp_wakeup_sleep()
1352 gtp_init_ext_watchdog(ts->client); in gtp_wakeup_sleep()
1359 gtp_reset_guitar(ts->client, 20); in gtp_wakeup_sleep()
1367 static s32 gtp_get_info(struct goodix_ts_data *ts) in gtp_get_info() argument
1372 //ts->abs_x_max = GTP_MAX_WIDTH; in gtp_get_info()
1373 //ts->abs_y_max = GTP_MAX_HEIGHT; in gtp_get_info()
1375 ts->int_trigger_type = GTP_INT_TRIGGER; in gtp_get_info()
1380 ret = gtp_i2c_read(ts->client, opr_buf, 6); in gtp_get_info()
1386 ts->abs_x_max = (opr_buf[3] << 8) + opr_buf[2]; in gtp_get_info()
1387 ts->abs_y_max = (opr_buf[5] << 8) + opr_buf[4]; in gtp_get_info()
1392 ret = gtp_i2c_read(ts->client, opr_buf, 3); in gtp_get_info()
1397 ts->int_trigger_type = opr_buf[2] & 0x03; in gtp_get_info()
1400 ts->abs_x_max,ts->abs_y_max,ts->int_trigger_type); in gtp_get_info()
1410 ts: goodix private data
1415 static s32 gtp_init_panel(struct goodix_ts_data *ts) in gtp_init_panel() argument
1441 if (ts->cfg_file_num) { in gtp_init_panel()
1482 if (CHIP_TYPE_GT9F == ts->chip_type) in gtp_init_panel()
1484 ts->fw_error = 0; in gtp_init_panel()
1489 ret = gtp_i2c_read_dbl_check(ts->client, 0x41E4, opr_buf, 1); in gtp_init_panel()
1494 ts->fw_error = 1; in gtp_init_panel()
1512 ret = gtp_i2c_read_dbl_check(ts->client, GTP_REG_SENSOR_ID, &sensor_id, 1); in gtp_init_panel()
1518 ts->pnl_init_error = 1; in gtp_init_panel()
1525 ts->pnl_init_error = 1; in gtp_init_panel()
1530 ts->gtp_cfg_len = cfg_info_len[sensor_id]; in gtp_init_panel()
1531 GTP_INFO("CTP_CONFIG_GROUP%d used, config length: %d", sensor_id + 1, ts->gtp_cfg_len); in gtp_init_panel()
1533 if (ts->gtp_cfg_len < GTP_CONFIG_MIN_LENGTH) in gtp_init_panel()
1535 … Config Sent! You need to check you header file CFG_GROUP section!", sensor_id+1, ts->gtp_cfg_len); in gtp_init_panel()
1536 ts->pnl_init_error = 1; in gtp_init_panel()
1541 if (CHIP_TYPE_GT9F == ts->chip_type) in gtp_init_panel()
1543 ts->fixed_cfg = 0; in gtp_init_panel()
1548 ret = gtp_i2c_read_dbl_check(ts->client, GTP_REG_CONFIG_DATA, &opr_buf[0], 1); in gtp_init_panel()
1560 ts->fixed_cfg = 0; in gtp_init_panel()
1565 ts->fixed_cfg = 1; in gtp_init_panel()
1566 gtp_get_info(ts); in gtp_init_panel()
1578 memcpy(&config[GTP_ADDR_LENGTH], send_cfg_buf[sensor_id], ts->gtp_cfg_len); in gtp_init_panel()
1597 for (i = GTP_ADDR_LENGTH; i < ts->gtp_cfg_len; i++) in gtp_init_panel()
1601 config[ts->gtp_cfg_len] = (~check_sum) + 1; in gtp_init_panel()
1605 ts->gtp_cfg_len = GTP_CONFIG_MAX_LENGTH; in gtp_init_panel()
1606 ret = gtp_i2c_read(ts->client, config, ts->gtp_cfg_len + GTP_ADDR_LENGTH); in gtp_init_panel()
1610 //ts->abs_x_max = GTP_MAX_WIDTH; in gtp_init_panel()
1611 //ts->abs_y_max = GTP_MAX_HEIGHT; in gtp_init_panel()
1612 ts->int_trigger_type = GTP_INT_TRIGGER; in gtp_init_panel()
1617 if ((ts->abs_x_max == 0) && (ts->abs_y_max == 0)) in gtp_init_panel()
1619 ts->abs_x_max = (config[RESOLUTION_LOC + 1] << 8) + config[RESOLUTION_LOC]; in gtp_init_panel()
1620 ts->abs_y_max = (config[RESOLUTION_LOC + 3] << 8) + config[RESOLUTION_LOC + 2]; in gtp_init_panel()
1621 ts->int_trigger_type = (config[TRIGGER_LOC]) & 0x03; in gtp_init_panel()
1622 GTP_INFO(" <%s>_%d <%d, %d>\n", __func__, __LINE__, ts->abs_x_max, ts->abs_y_max); in gtp_init_panel()
1626 if (CHIP_TYPE_GT9F == ts->chip_type) in gtp_init_panel()
1634 if (1 == ts->is_950) in gtp_init_panel()
1642 ts->bak_ref_len = (driver_num * (sensor_num - 1) + 2) * 2 * 6; in gtp_init_panel()
1652 ts->bak_ref_len = (driver_num * (sensor_num - 2) + 2) * 2; in gtp_init_panel()
1656 driver_num, sensor_num, have_key, ts->abs_x_max,ts->abs_y_max,ts->int_trigger_type); in gtp_init_panel()
1664 ret = gtp_send_cfg(ts->client); in gtp_init_panel()
1672 for (i = GTP_ADDR_LENGTH; i < ts->gtp_cfg_len; i++) in gtp_init_panel()
1676 config[ts->gtp_cfg_len] = (~check_sum) + 1; in gtp_init_panel()
1678 …GTP_INFO("X_MAX: %d, Y_MAX: %d, TRIGGER: 0x%02x", ts->abs_x_max,ts->abs_y_max,ts->int_trigger_type… in gtp_init_panel()
1819 ts: private data.
1824 static s8 gtp_request_io_port(struct goodix_ts_data *ts) in gtp_request_io_port() argument
1830 ret = GTP_GPIO_REQUEST(ts->tp_select_pin, "GTP_tp_select_PORT"); in gtp_request_io_port()
1833 GTP_ERROR("1Failed to request GPIO:%d, ERRNO:%d",(s32)ts->tp_select_pin, ret); in gtp_request_io_port()
1838 gpio_direction_input(ts->tp_select_pin); in gtp_request_io_port()
1841 ret = GTP_GPIO_REQUEST(ts->rst_pin, "GTP_RST_PORT"); in gtp_request_io_port()
1844 GTP_ERROR("2Failed to request GPIO:%d, ERRNO:%d",(s32)ts->rst_pin, ret); in gtp_request_io_port()
1845 GTP_GPIO_FREE(ts->rst_pin); in gtp_request_io_port()
1849 ret = GTP_GPIO_REQUEST(ts->irq_pin, "GTP_INT_IRQ"); in gtp_request_io_port()
1852 GTP_ERROR("3Failed to request GPIO:%d, ERRNO:%d", (s32)ts->irq_pin, ret); in gtp_request_io_port()
1853 GTP_GPIO_FREE(ts->irq_pin); in gtp_request_io_port()
1859 gpio_direction_input(ts->irq_pin); in gtp_request_io_port()
1863 //ts->client->irq = ts->irq_pin; in gtp_request_io_port()
1866 //GTP_GPIO_AS_INPUT(ts->rst_pin); in gtp_request_io_port()
1867 gpio_direction_input(ts->rst_pin); in gtp_request_io_port()
1870 gtp_reset_guitar(ts->client, 20); in gtp_request_io_port()
1879 ts: private data.
1884 static s8 gtp_request_irq(struct goodix_ts_data *ts) in gtp_request_irq() argument
1889 GTP_DEBUG("INT trigger type:%x", ts->int_trigger_type); in gtp_request_irq()
1891 ts->irq=gpio_to_irq(ts->irq_pin); //If not defined in client in gtp_request_irq()
1892 if (ts->irq) in gtp_request_irq()
1894 ts->client->irq = ts->irq; in gtp_request_irq()
1895 ret = devm_request_threaded_irq(&(ts->client->dev), ts->irq, NULL, in gtp_request_irq()
1896 … goodix_ts_irq_handler, ts->irq_flags | IRQF_ONESHOT /*irq_table[ts->int_trigger_type]*/, in gtp_request_irq()
1897 ts->client->name, ts); in gtp_request_irq()
1899 GTP_ERROR("Cannot allocate ts INT!ERRNO:%d\n", ret); in gtp_request_irq()
1902 //gtp_irq_disable(ts->irq); in gtp_request_irq()
1903 GTP_INFO(" <%s>_%d ts->irq=%d ret = %d\n", __func__, __LINE__, ts->irq, ret); in gtp_request_irq()
1905 GTP_ERROR(" ts->irq error \n"); in gtp_request_irq()
1910 ret = request_irq(ts->client->irq, in gtp_request_irq()
1912 irq_table[ts->int_trigger_type], in gtp_request_irq()
1913 ts->client->name, in gtp_request_irq()
1914 ts); in gtp_request_irq()
1921 gpio_direction_input(ts->irq_pin); in gtp_request_irq()
1924 GTP_GPIO_FREE(ts->irq_pin); in gtp_request_irq()
1926 hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); in gtp_request_irq()
1927 ts->timer.function = goodix_ts_timer_handler; in gtp_request_irq()
1928 hrtimer_start(&ts->timer, ktime_set(1, 0), HRTIMER_MODE_REL); in gtp_request_irq()
1933 GTP_INFO(" <%s>_%d ts->irq=%d ret = %d\n", __func__, __LINE__, ts->irq, ret); in gtp_request_irq()
1934 gtp_irq_disable(ts); in gtp_request_irq()
1935 ts->use_irq = 1; in gtp_request_irq()
1950 struct goodix_ts_data *ts; in goodix_ts_early_suspend() local
1954 ts = container_of(tp_d, struct goodix_ts_data, tp); in goodix_ts_early_suspend()
1959 ts->gtp_is_suspend = 1; in goodix_ts_early_suspend()
1961 gtp_esd_switch(ts->client, SWITCH_OFF); in goodix_ts_early_suspend()
1965 ret = gtp_enter_doze(ts); in goodix_ts_early_suspend()
1967 if (ts->use_irq) in goodix_ts_early_suspend()
1969 gtp_irq_disable(ts); in goodix_ts_early_suspend()
1973 hrtimer_cancel(&ts->timer); in goodix_ts_early_suspend()
1975 ret = gtp_enter_sleep(ts); in goodix_ts_early_suspend()
1985 reg = regulator_disable(ts->tp_regulator); in goodix_ts_early_suspend()
2002 struct goodix_ts_data *ts; in goodix_ts_early_resume() local
2005 ts = container_of(tp_d, struct goodix_ts_data, tp); in goodix_ts_early_resume()
2010 reg = regulator_enable(ts->tp_regulator); in goodix_ts_early_resume()
2015 ret = gtp_wakeup_sleep(ts); in goodix_ts_early_resume()
2026 if (CHIP_TYPE_GT9F == ts->chip_type) in goodix_ts_early_resume()
2033 gtp_send_cfg(ts->client); in goodix_ts_early_resume()
2036 if (ts->use_irq) in goodix_ts_early_resume()
2038 gtp_irq_enable(ts); in goodix_ts_early_resume()
2042 hrtimer_start(&ts->timer, ktime_set(1, 0), HRTIMER_MODE_REL); in goodix_ts_early_resume()
2045 ts->gtp_is_suspend = 0; in goodix_ts_early_resume()
2047 gtp_esd_switch(ts->client, SWITCH_ON); in goodix_ts_early_resume()
2057 ts:private data.
2063 struct goodix_ts_data *ts) in gtp_request_input_dev() argument
2072 ts->input_dev = devm_input_allocate_device(&client->dev); in gtp_request_input_dev()
2073 if (ts->input_dev == NULL) in gtp_request_input_dev()
2079 ts->input_dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) ; in gtp_request_input_dev()
2081 …input_mt_init_slots(ts->input_dev, 16, INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED); // in case of … in gtp_request_input_dev()
2083 ts->input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); in gtp_request_input_dev()
2085 __set_bit(INPUT_PROP_DIRECT, ts->input_dev->propbit); in gtp_request_input_dev()
2090 input_set_capability(ts->input_dev, EV_KEY, touch_key_array[index]); in gtp_request_input_dev()
2095 input_set_capability(ts->input_dev, EV_KEY, KEY_POWER); in gtp_request_input_dev()
2099 GTP_SWAP(ts->abs_x_max, ts->abs_y_max); in gtp_request_input_dev()
2102 input_set_abs_params(ts->input_dev, ABS_X, 0, ts->abs_x_max, 0, 0); in gtp_request_input_dev()
2103 input_set_abs_params(ts->input_dev, ABS_Y, 0, ts->abs_y_max, 0, 0); in gtp_request_input_dev()
2105 input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0, ts->abs_x_max, 0, 0); in gtp_request_input_dev()
2106 input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, 0, ts->abs_y_max, 0, 0); in gtp_request_input_dev()
2107 input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0); in gtp_request_input_dev()
2108 input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); in gtp_request_input_dev()
2109 input_set_abs_params(ts->input_dev, ABS_MT_TRACKING_ID, 0, 255, 0, 0); in gtp_request_input_dev()
2111 sprintf(phys, "input/ts"); in gtp_request_input_dev()
2112 ts->input_dev->name = goodix_ts_name; in gtp_request_input_dev()
2113 ts->input_dev->phys = phys; in gtp_request_input_dev()
2114 ts->input_dev->id.bustype = BUS_I2C; in gtp_request_input_dev()
2115 ts->input_dev->id.vendor = 0xDEAD; in gtp_request_input_dev()
2116 ts->input_dev->id.product = 0xBEEF; in gtp_request_input_dev()
2117 ts->input_dev->id.version = 10427; in gtp_request_input_dev()
2119 ret = input_register_device(ts->input_dev); in gtp_request_input_dev()
2122 GTP_ERROR("Register %s input device failed", ts->input_dev->name); in gtp_request_input_dev()
2126 ts->tp.tp_resume = goodix_ts_early_resume; in gtp_request_input_dev()
2127 ts->tp.tp_suspend = goodix_ts_early_suspend; in gtp_request_input_dev()
2128 tp_register_fb(&ts->tp); in gtp_request_input_dev()
2131 gtp_pen_init(ts); in gtp_request_input_dev()
2144 struct goodix_ts_data *ts = i2c_get_clientdata(client); in gtp_fw_startup() local
2161 gtp_int_sync(25, ts); in gtp_fw_startup()
2187 struct goodix_ts_data *ts; in gtp_esd_recovery() local
2189 ts = i2c_get_clientdata(client); in gtp_esd_recovery()
2191 gtp_irq_disable(ts); in gtp_esd_recovery()
2202 ret = gtp_fw_startup(ts->client); in gtp_esd_recovery()
2210 gtp_irq_enable(ts); in gtp_esd_recovery()
2236 static s32 gtp_bak_ref_proc(struct goodix_ts_data *ts, u8 mode) in gtp_bak_ref_proc() argument
2252 ts->ref_chk_fs_times++; in gtp_bak_ref_proc()
2253 … GTP_DEBUG("Ref check /data times/MAX_TIMES: %d / %d", ts->ref_chk_fs_times, GTP_CHK_FS_MNT_MAX); in gtp_bak_ref_proc()
2254 if (ts->ref_chk_fs_times < GTP_CHK_FS_MNT_MAX) in gtp_bak_ref_proc()
2264 GTP_INFO("/data mounted!!!(%d/%d)", ts->ref_chk_fs_times, GTP_CHK_FS_MNT_MAX); in gtp_bak_ref_proc()
2267 p_bak_ref = kzalloc(ts->bak_ref_len, GFP_KERNEL); in gtp_bak_ref_proc()
2275 if (ts->is_950) in gtp_bak_ref_proc()
2277 ref_seg_len = ts->bak_ref_len / 6; in gtp_bak_ref_proc()
2282 ref_seg_len = ts->bak_ref_len; in gtp_bak_ref_proc()
2304 ret = ref_filp->f_op->read(ref_filp, (char*)p_bak_ref, ts->bak_ref_len, &ref_filp->f_pos); in gtp_bak_ref_proc()
2337 ret = i2c_write_bytes(ts->client, GTP_REG_BAK_REF, p_bak_ref, ts->bak_ref_len); in gtp_bak_ref_proc()
2347 ret = i2c_read_bytes(ts->client, GTP_REG_BAK_REF, p_bak_ref, ts->bak_ref_len); in gtp_bak_ref_proc()
2354 ref_filp->f_op->write(ref_filp, (char*)p_bak_ref, ts->bak_ref_len, &ref_filp->f_pos); in gtp_bak_ref_proc()
2371 ret = i2c_write_bytes(ts->client, GTP_REG_BAK_REF, p_bak_ref, ts->bak_ref_len); in gtp_bak_ref_proc()
2376 ref_filp->f_op->write(ref_filp, (char*)p_bak_ref, ts->bak_ref_len, &ref_filp->f_pos); in gtp_bak_ref_proc()
2427 static s32 gtp_main_clk_proc(struct goodix_ts_data *ts) in gtp_main_clk_proc() argument
2456 ts->clk_chk_fs_times++; in gtp_main_clk_proc()
2457 … GTP_DEBUG("Clock check /data times/MAX_TIMES: %d / %d", ts->clk_chk_fs_times, GTP_CHK_FS_MNT_MAX); in gtp_main_clk_proc()
2458 if (ts->clk_chk_fs_times < GTP_CHK_FS_MNT_MAX) in gtp_main_clk_proc()
2468 GTP_INFO("/data mounted!!!(%d/%d)", ts->clk_chk_fs_times, GTP_CHK_FS_MNT_MAX); in gtp_main_clk_proc()
2497 gtp_esd_switch(ts->client, SWITCH_OFF); in gtp_main_clk_proc()
2500 gtp_esd_recovery(ts->client); in gtp_main_clk_proc()
2503 gtp_esd_switch(ts->client, SWITCH_ON); in gtp_main_clk_proc()
2530 ret = i2c_write_bytes(ts->client, GTP_REG_MAIN_CLK, p_main_clk, 6); in gtp_main_clk_proc()
2565 void gtp_get_chip_type(struct goodix_ts_data *ts) in gtp_get_chip_type() argument
2572 ret = gtp_i2c_read_dbl_check(ts->client, GTP_REG_CHIP_TYPE, opr_buf, 10); in gtp_get_chip_type()
2577 ts->chip_type = CHIP_TYPE_GT9; in gtp_get_chip_type()
2583 ts->chip_type = CHIP_TYPE_GT9; in gtp_get_chip_type()
2587 ts->chip_type = CHIP_TYPE_GT9110; in gtp_get_chip_type()
2593 ts->chip_type = CHIP_TYPE_GT9F; in gtp_get_chip_type()
2595 GTP_INFO("Chip Type: %s", (ts->chip_type == CHIP_TYPE_GT9) ? "GOODIX_GT9" : "GOODIX_GT9F"); in gtp_get_chip_type()
2614 struct goodix_ts_data *ts; in goodix_ts_probe() local
2636 ts = kzalloc(sizeof(*ts), GFP_KERNEL); in goodix_ts_probe()
2637 if (ts == NULL) in goodix_ts_probe()
2643 memset(ts, 0, sizeof(*ts)); in goodix_ts_probe()
2699 ts->tp_regulator = devm_regulator_get(&client->dev, "tp"); in goodix_ts_probe()
2700 if (IS_ERR(ts->tp_regulator)) { in goodix_ts_probe()
2702 PTR_ERR(ts->tp_regulator)); in goodix_ts_probe()
2703 return PTR_ERR(ts->tp_regulator); in goodix_ts_probe()
2706 ret = regulator_enable(ts->tp_regulator); in goodix_ts_probe()
2711ts->irq_pin = of_get_named_gpio_flags(np, "touch-gpio", 0, (enum of_gpio_flags *)(&ts->irq_flags)); in goodix_ts_probe()
2712 ts->rst_pin = of_get_named_gpio_flags(np, "reset-gpio", 0, &rst_flags); in goodix_ts_probe()
2713 ts->pwr_pin = of_get_named_gpio_flags(np, "power-gpio", 0, &pwr_flags); in goodix_ts_probe()
2714 //ts->tp_select_pin = of_get_named_gpio_flags(np, "tp-select-gpio", 0, &tp_select_flags); in goodix_ts_probe()
2719 //ts->abs_x_max = val; in goodix_ts_probe()
2724 //ts->abs_y_max = val; in goodix_ts_probe()
2726 ts->cfg_file_num = 0; in goodix_ts_probe()
2728 ts->cfg_file_num = val; in goodix_ts_probe()
2730 ts->pendown =PEN_RELEASE; in goodix_ts_probe()
2731 ts->client = client; in goodix_ts_probe()
2734 INIT_WORK(&ts->work, goodix_ts_work_func); in goodix_ts_probe()
2735 ts->client = client; in goodix_ts_probe()
2736 spin_lock_init(&ts->irq_lock); // 2.6.39 later in goodix_ts_probe()
2737 // ts->irq_lock = SPIN_LOCK_UNLOCKED; // 2.6.39 & before in goodix_ts_probe()
2739 ts->clk_tick_cnt = 2 * HZ; // HZ: clock ticks in 1 second generated by system in goodix_ts_probe()
2740 GTP_DEBUG("Clock ticks for an esd cycle: %d", ts->clk_tick_cnt); in goodix_ts_probe()
2741 spin_lock_init(&ts->esd_lock); in goodix_ts_probe()
2742 // ts->esd_lock = SPIN_LOCK_UNLOCKED; in goodix_ts_probe()
2745 i2c_set_clientdata(client, ts); in goodix_ts_probe()
2747 ts->gtp_rawdiff_mode = 0; in goodix_ts_probe()
2749 ret = gtp_request_io_port(ts); in goodix_ts_probe()
2757 if(gpio_get_value(ts->tp_select_pin))//WGJ in goodix_ts_probe()
2771 gtp_get_chip_type(ts); in goodix_ts_probe()
2773 if (CHIP_TYPE_GT9F == ts->chip_type) in goodix_ts_probe()
2775 ret = gtp_gt9xxf_init(ts->client); in goodix_ts_probe()
2796 ret = gtp_init_panel(ts); in goodix_ts_probe()
2800 //ts->abs_x_max = GTP_MAX_WIDTH; in goodix_ts_probe()
2801 //ts->abs_y_max = GTP_MAX_HEIGHT; in goodix_ts_probe()
2802 ts->int_trigger_type = GTP_INT_TRIGGER; in goodix_ts_probe()
2805 ts->irq_flags = ts->int_trigger_type ? IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING; in goodix_ts_probe()
2818 ret = gup_init_update_proc(ts); in goodix_ts_probe()
2825 ret = gtp_request_input_dev(client, ts); in goodix_ts_probe()
2830 ret = gtp_request_irq(ts); in goodix_ts_probe()
2840 if (ts->use_irq) in goodix_ts_probe()
2842 gtp_irq_enable(ts); in goodix_ts_probe()
2848 enable_irq_wake(ts->irq); in goodix_ts_probe()
2862 GTP_GPIO_FREE(ts->rst_pin); in goodix_ts_probe()
2863 GTP_GPIO_FREE(ts->irq_pin); in goodix_ts_probe()
2865 tp_unregister_fb(&ts->tp); in goodix_ts_probe()
2866 kfree(ts); in goodix_ts_probe()
2881 struct goodix_ts_data *ts = i2c_get_clientdata(client); in goodix_ts_remove() local
2883 tp_unregister_fb(&ts->tp); in goodix_ts_remove()
2895 if (ts) in goodix_ts_remove()
2897 if (ts->use_irq) in goodix_ts_remove()
2901 gpio_direction_input(ts->irq_pin); in goodix_ts_remove()
2904 GTP_GPIO_FREE(ts->irq_pin); in goodix_ts_remove()
2905 free_irq(client->irq, ts); in goodix_ts_remove()
2909 hrtimer_cancel(&ts->timer); in goodix_ts_remove()
2913 input_unregister_device(ts->input_dev); in goodix_ts_remove()
2914 kfree(ts); in goodix_ts_remove()
2995 struct goodix_ts_data *ts; in gtp_esd_switch() local
2997 ts = i2c_get_clientdata(client); in gtp_esd_switch()
2998 spin_lock(&ts->esd_lock); in gtp_esd_switch()
3002 if (!ts->esd_running) in gtp_esd_switch()
3004 ts->esd_running = 1; in gtp_esd_switch()
3005 spin_unlock(&ts->esd_lock); in gtp_esd_switch()
3007 queue_delayed_work(gtp_esd_check_workqueue, &gtp_esd_check_work, ts->clk_tick_cnt); in gtp_esd_switch()
3011 spin_unlock(&ts->esd_lock); in gtp_esd_switch()
3016 if (ts->esd_running) in gtp_esd_switch()
3018 ts->esd_running = 0; in gtp_esd_switch()
3019 spin_unlock(&ts->esd_lock); in gtp_esd_switch()
3025 spin_unlock(&ts->esd_lock); in gtp_esd_switch()
3059 struct goodix_ts_data *ts = NULL; in gtp_esd_check_func() local
3064 ts = i2c_get_clientdata(i2c_connect_client); in gtp_esd_check_func()
3066 if (ts->gtp_is_suspend) in gtp_esd_check_func()
3074 ret = gtp_i2c_read_no_rst(ts->client, esd_buf, 4); in gtp_esd_check_func()
3089 gtp_i2c_read_no_rst(ts->client, chk_buf, 4); in gtp_esd_check_func()
3107 gtp_i2c_write_no_rst(ts->client, esd_buf, 3); in gtp_esd_check_func()
3115 if (CHIP_TYPE_GT9F == ts->chip_type) in gtp_esd_check_func()
3117 if (ts->rqst_processing) in gtp_esd_check_func()
3129 gtp_i2c_write_no_rst(ts->client, esd_buf, 5); in gtp_esd_check_func()
3131 gtp_esd_recovery(ts->client); in gtp_esd_check_func()
3143 gtp_i2c_write_no_rst(ts->client, esd_buf, 5); in gtp_esd_check_func()
3145 gtp_reset_guitar(ts->client, 50); in gtp_esd_check_func()
3147 gtp_send_cfg(ts->client); in gtp_esd_check_func()
3151 if(!ts->gtp_is_suspend) in gtp_esd_check_func()
3153 queue_delayed_work(gtp_esd_check_workqueue, &gtp_esd_check_work, ts->clk_tick_cnt); in gtp_esd_check_func()