Lines Matching +full:panel +full:- +full:mounted

3  * 2010 - 2013 Goodix Technology.
45 * 3. pen separate input device, active-pen button support
69 static const char *goodix_ts_name = "goodix-ts";
154 buf[2~len-1]: read data buffer.
163 s32 ret=-1; in gtp_i2c_read()
169 msgs[0].addr = client->addr; in gtp_i2c_read()
177 msgs[1].addr = client->addr; in gtp_i2c_read()
178 msgs[1].len = len - GTP_ADDR_LENGTH; in gtp_i2c_read()
187 ret = i2c_transfer(client->adapter, msgs, 2); in gtp_i2c_read()
204 …x%04X, %d bytes failed, errcode: %d! Process reset.", (((u16)(buf[0] << 8)) | buf[1]), len-2, ret); in gtp_i2c_read()
206 if (CHIP_TYPE_GT9F == ts->chip_type) in gtp_i2c_read()
227 buf[2~len-1]: data buffer
236 s32 ret = -1; in gtp_i2c_write()
242 msg.addr = client->addr; in gtp_i2c_write()
251 ret = i2c_transfer(client->adapter, &msg, 1); in gtp_i2c_write()
267 …x%04X, %d bytes failed, errcode: %d! Process reset.", (((u16)(buf[0] << 8)) | buf[1]), len-2, ret); in gtp_i2c_write()
269 if (CHIP_TYPE_GT9F == ts->chip_type) in gtp_i2c_write()
341 if (ts->fixed_cfg) in gtp_send_cfg()
346 else if (ts->pnl_init_error) in gtp_send_cfg()
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()
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()
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()
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()
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()
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()
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()
596 s32 ret = -1; 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()
649 u8 type = ((doze_buf[2] & 0x0F) - 0x0A) + (((doze_buf[2] >> 4) & 0x0F) - 0x0A) * 2; 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()
681 if (ts->use_irq) 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()
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()
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()
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()
804 ret = gtp_i2c_read(ts->client, buf, 2 + 8 * (touch_num - 1)); in goodix_ts_work_func()
805 memcpy(&point_data[12], &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()
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()
1033 if (device_can_wakeup(&ts->client->dev)) in goodix_ts_work_func()
1034 pm_relax(&ts->client->dev); in goodix_ts_work_func()
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()
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()
1092 GTP_GPIO_OUTPUT(ts->irq_pin, 0); in gtp_int_sync()
1095 gpio_direction_input(ts->irq_pin); in gtp_int_sync()
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()
1153 s8 ret = -1; in gtp_enter_doze()
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()
1196 s8 ret = -1; in gtp_enter_sleep()
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()
1212 GTP_ERROR("failed to get backup-reference status"); 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()
1256 s8 ret = -1; in gtp_wakeup_sleep()
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()
1335 gtp_reset_guitar(ts->client, 10); 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()
1352 gtp_init_ext_watchdog(ts->client); in gtp_wakeup_sleep()
1359 gtp_reset_guitar(ts->client, 20); in gtp_wakeup_sleep()
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()
1417 s32 ret = -1; in gtp_init_panel()
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()
1496 return -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()
1519 return -1; in gtp_init_panel()
1525 ts->pnl_init_error = 1; in gtp_init_panel()
1526 return -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()
1537 return -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()
1573 return -1; 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()
1632 have_key = (config[GTP_REG_HAVE_KEY - GTP_REG_CONFIG_DATA + 2] & 0x01); in gtp_init_panel()
1634 if (1 == ts->is_950) in gtp_init_panel()
1636 driver_num = config[GTP_REG_MATRIX_DRVNUM - GTP_REG_CONFIG_DATA + 2]; in gtp_init_panel()
1637 sensor_num = config[GTP_REG_MATRIX_SENNUM - GTP_REG_CONFIG_DATA + 2]; in gtp_init_panel()
1640 driver_num--; in gtp_init_panel()
1642 ts->bak_ref_len = (driver_num * (sensor_num - 1) + 2) * 2 * 6; in gtp_init_panel()
1649 driver_num--; 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()
1717 *ppos += ptr - page; in gt91xx_config_read_proc()
1718 return (ptr - page); in gt91xx_config_read_proc()
1728 return -EFAULT; in gt91xx_config_write_proc()
1734 return -EFAULT; in gt91xx_config_write_proc()
1758 s32 ret = -1; in gtp_read_version()
1798 s8 ret = -1; in gtp_i2c_test()
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()
1834 return -ENODEV; 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()
1846 return -ENODEV; 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()
1854 return -ENODEV; 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()
1882 0: succeed, -1: failed.
1886 s32 ret = -1; in gtp_request_irq()
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()
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()
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()
1929 return -1; in gtp_request_irq()
1933 GTP_INFO(" <%s>_%d ts->irq=%d ret = %d\n", __func__, __LINE__, ts->irq, ret); in gtp_request_irq()
1935 ts->use_irq = 1; in gtp_request_irq()
1951 s8 ret = -1; 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()
1967 if (ts->use_irq) in goodix_ts_early_suspend()
1973 hrtimer_cancel(&ts->timer); in goodix_ts_early_suspend()
1985 reg = regulator_disable(ts->tp_regulator); in goodix_ts_early_suspend()
2003 s8 ret = -1; in goodix_ts_early_resume()
2010 reg = regulator_enable(ts->tp_regulator); 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()
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()
2065 s8 ret = -1; in gtp_request_input_dev()
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()
2076 return -ENOMEM; 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()
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()
2123 return -ENODEV; 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()
2202 ret = gtp_fw_startup(ts->client); in gtp_esd_recovery()
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()
2257 GTP_INFO("/data not mounted."); 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()
2302 GTP_INFO("Send backup-reference"); in gtp_bak_ref_proc()
2303 ref_filp->f_op->llseek(ref_filp, 0, SEEK_SET); 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()
2317 …n_cnt = (p_bak_ref[j * ref_seg_len + ref_seg_len -4] << 8) + (p_bak_ref[j * ref_seg_len + ref_seg_… in gtp_bak_ref_proc()
2318 …hksum = (p_bak_ref[j * ref_seg_len + ref_seg_len -2] << 8) + (p_bak_ref[j * ref_seg_len + ref_seg_… in gtp_bak_ref_proc()
2327 p_bak_ref[ref_seg_len + j * ref_seg_len - 1] = 0x01; in gtp_bak_ref_proc()
2331 if (j == (ref_grps - 1)) in gtp_bak_ref_proc()
2333 GTP_INFO("backup-reference data in %s used", GTP_BAK_REF_PATH); 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()
2346 GTP_INFO("Store backup-reference"); 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()
2350 GTP_ERROR("failed to read bak_ref info, sending default back-reference"); in gtp_bak_ref_proc()
2353 ref_filp->f_op->llseek(ref_filp, 0, SEEK_SET); 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()
2358 GTP_ERROR("invalid backup-reference request"); in gtp_bak_ref_proc()
2369 p_bak_ref[j * ref_seg_len + ref_seg_len - 1] = 0x01; // checksum = 1 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()
2374 GTP_INFO("write backup-reference data into %s", GTP_BAK_REF_PATH); in gtp_bak_ref_proc()
2375 ref_filp->f_op->llseek(ref_filp, 0, SEEK_SET); 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()
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()
2461 GTP_INFO("/data not mounted."); 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()
2478 clk_filp->f_op->llseek(clk_filp, 0, SEEK_SET); in gtp_main_clk_proc()
2479 clk_filp->f_op->read(clk_filp, (char *)p_main_clk, 6, &clk_filp->f_pos); 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()
2519 p_main_clk[5] = 0 - clk_chksum; in gtp_main_clk_proc()
2524 clk_filp->f_op->llseek(clk_filp, 0, SEEK_SET); in gtp_main_clk_proc()
2525 clk_filp->f_op->write(clk_filp, (char *)p_main_clk, 6, &clk_filp->f_pos); 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()
2572 ret = gtp_i2c_read_dbl_check(ts->client, GTP_REG_CHIP_TYPE, opr_buf, 10); in gtp_get_chip_type()
2576 GTP_ERROR("Failed to get chip-type, set chip type default: GOODIX_GT9"); 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()
2613 s32 ret = -1; in goodix_ts_probe()
2617 struct device_node *np = client->dev.of_node; in goodix_ts_probe()
2627 GTP_INFO("GTP I2C Address: 0x%02x", client->addr); in goodix_ts_probe()
2631 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) in goodix_ts_probe()
2634 return -ENODEV; in goodix_ts_probe()
2640 return -ENOMEM; in goodix_ts_probe()
2646 dev_err(&client->dev, "no device tree\n"); in goodix_ts_probe()
2647 return -EINVAL; in goodix_ts_probe()
2649 if (of_property_read_u32(np, "tp-size", &val)) { in goodix_ts_probe()
2650 dev_err(&client->dev, "no max-x defined\n"); in goodix_ts_probe()
2651 return -EINVAL; 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()
2701 dev_err(&client->dev, "failed to get regulator, %ld\n", 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()
2711 …ts->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()
2715 if (of_property_read_u32(np, "max-x", &val)) { in goodix_ts_probe()
2716 dev_err(&client->dev, "no max-x defined\n"); in goodix_ts_probe()
2717 return -EINVAL; in goodix_ts_probe()
2719 //ts->abs_x_max = val; in goodix_ts_probe()
2720 if (of_property_read_u32(np, "max-y", &val)) { in goodix_ts_probe()
2721 dev_err(&client->dev, "no max-y defined\n"); in goodix_ts_probe()
2722 return -EINVAL; in goodix_ts_probe()
2724 //ts->abs_y_max = val; in goodix_ts_probe()
2725 if (of_property_read_u32(np, "configfile-num", &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()
2747 ts->gtp_rawdiff_mode = 0; in goodix_ts_probe()
2757 if(gpio_get_value(ts->tp_select_pin))//WGJ 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()
2799 GTP_ERROR("GTP init panel failed."); 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()
2840 if (ts->use_irq) in goodix_ts_probe()
2845 if (of_property_read_bool(np, "wakeup-source")) in goodix_ts_probe()
2847 device_init_wakeup(&client->dev, 1); 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()
2877 Executive outcomes. 0---succeed.
2883 tp_unregister_fb(&ts->tp); 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()
2928 s32 ret=-1; in gtp_i2c_read_no_rst()
2934 msgs[0].addr = client->addr; in gtp_i2c_read_no_rst()
2940 msgs[1].addr = client->addr; in gtp_i2c_read_no_rst()
2941 msgs[1].len = len - GTP_ADDR_LENGTH; in gtp_i2c_read_no_rst()
2947 ret = i2c_transfer(client->adapter, msgs, 2); in gtp_i2c_read_no_rst()
2953 …OR("I2C Read: 0x%04X, %d bytes failed, errcode: %d!", (((u16)(buf[0] << 8)) | buf[1]), len-2, ret); in gtp_i2c_read_no_rst()
2961 s32 ret = -1; in gtp_i2c_write_no_rst()
2967 msg.addr = client->addr; in gtp_i2c_write_no_rst()
2974 ret = i2c_transfer(client->adapter, &msg, 1); in gtp_i2c_write_no_rst()
2980 …R("I2C Write: 0x%04X, %d bytes failed, errcode: %d!", (((u16)(buf[0] << 8)) | buf[1]), len-2, ret); in gtp_i2c_write_no_rst()
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()
3058 s32 ret = -1; 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()
3189 Executive Outcomes. 0---succeed.
3201 return -ENOMEM; in goodix_ts_init()
3217 Executive Outcomes. 0---succeed.