Lines Matching refs:ts
61 void elan_switch_irq(struct elan_ts_data *ts, int on) in elan_switch_irq() argument
65 dev_err(&ts->client->dev, in elan_switch_irq()
67 __func__, ts->hw_info.irq_num, on, ts->irq_lock_flag); in elan_switch_irq()
68 mutex_lock(&ts->irq_mutex); in elan_switch_irq()
70 if(ts->irq_lock_flag == 1) { in elan_switch_irq()
71 enable_irq(ts->hw_info.irq_num); in elan_switch_irq()
72 ts->irq_lock_flag = 0; in elan_switch_irq()
75 if(ts->irq_lock_flag == 0) { in elan_switch_irq()
76 disable_irq(ts->hw_info.irq_num); in elan_switch_irq()
77 ts->irq_lock_flag = 1; in elan_switch_irq()
80 mutex_unlock(&ts->irq_mutex); in elan_switch_irq()
169 struct elan_ts_data *ts = i2c_get_clientdata(client); in elan_ic_status() local
176 err = ts->ops->send(checkstatus,sizeof(checkstatus)); in elan_ic_status()
185 err = ts->ops->poll();//elan_poll_int(); in elan_ic_status()
195 err = ts->ops->recv(buf, sizeof(buf)); in elan_ic_status()
209 ts->fw_info.fw_bcl = buf[7]; in elan_ic_status()
211 ts->fw_info.fw_bcl = buf[4]; in elan_ic_status()
223 struct elan_ts_data *ts = i2c_get_clientdata(client); in get_normal_hello() local
225 err = ts->ops->poll();//elan_poll_int(); in get_normal_hello()
232 err = ts->ops->recv(buf, sizeof(buf)); in get_normal_hello()
255 struct elan_ts_data *ts = i2c_get_clientdata(client); in elan__hello_packet_handler() local
264 ts->recover = ret; in elan__hello_packet_handler()
265 dev_err(&client->dev, "[elan] ts->recover =%d\n", ts->recover); in elan__hello_packet_handler()
273 struct elan_ts_data *ts = i2c_get_clientdata(client); in elan_ts_get_data() local
278 err = ts->ops->send(wbuf, wsize); in elan_ts_get_data()
285 err = ts->ops->poll();//elan_poll_int(); in elan_ts_get_data()
291 err = ts->ops->recv(rbuf,rsize); in elan_ts_get_data()
297 if (ts->chip_type == HID_TYPE_PROTOCOL) { in elan_ts_get_data()
324 struct elan_ts_data *ts = i2c_get_clientdata(client); in hid_fw_packet_handler() local
325 struct elan_fw_info *fw_info = &ts->fw_info; in hid_fw_packet_handler()
438 struct elan_ts_data *ts = i2c_get_clientdata(client); in normal_fw_packet_handler() local
440 struct elan_fw_info *fw_info = &ts->fw_info; in normal_fw_packet_handler()
529 struct elan_ts_data *ts = i2c_get_clientdata(client); in elan__fw_packet_handler() local
532 dev_err(&client->dev, "[elan] fw packet handler chip_type %d\n",ts->chip_type); in elan__fw_packet_handler()
533 if (ts->chip_type == HID_TYPE_PROTOCOL) { in elan__fw_packet_handler()
539 } else if (ts->chip_type == NORMAL_TYPE_PROTOCOL) { in elan__fw_packet_handler()
549 static int elan_ts_recv_data(struct elan_ts_data *ts, uint8_t *buf) in elan_ts_recv_data() argument
553 struct elan_report_struct *report = &ts->report; in elan_ts_recv_data()
556 rc = ts->ops->recv(rbuf, sizeof(rbuf)); in elan_ts_recv_data()
558 dev_err(&ts->client->dev, "[elan] recv report data error [%d] !!\n",rc); in elan_ts_recv_data()
562 if (ts->chip_type == HID_TYPE_PROTOCOL) { in elan_ts_recv_data()
568 rc = ts->ops->recv(rbuf, sizeof(rbuf)); in elan_ts_recv_data()
570 dev_err(&ts->client->dev, "[elan] recv second report data error!!\n"); in elan_ts_recv_data()
600 } else if (ts->chip_type == NORMAL_TYPE_PROTOCOL) { in elan_ts_recv_data()
631 print_log(ts->level,"%02x %02x %02x %02x %02x %02x %02x %02x\n",\ in elan_ts_recv_data()
637 print_log(ts->level,"%02x %02x %02x %02x %02x %02x %02x %02x\n",\ in elan_ts_recv_data()
692 static void elants_a_report(struct elan_ts_data *ts, uint8_t *buf) in elants_a_report() argument
694 struct elan_report_struct *report = &ts->report; in elants_a_report()
716 input_report_key(ts->finger_idev, BTN_TOUCH, 1); in elants_a_report()
717 input_report_key(ts->finger_idev, BTN_TOOL_FINGER, true); in elants_a_report()
718 input_report_abs(ts->finger_idev, ABS_MT_POSITION_X, x); in elants_a_report()
719 input_report_abs(ts->finger_idev, ABS_MT_POSITION_Y, y); in elants_a_report()
720 input_report_abs(ts->finger_idev, ABS_MT_TRACKING_ID, fbit); in elants_a_report()
721 input_mt_sync(ts->finger_idev); in elants_a_report()
731 input_report_key(ts->finger_idev, BTN_TOUCH, 1); in elants_a_report()
732 input_report_key(ts->finger_idev, BTN_TOOL_FINGER, true); in elants_a_report()
733 input_report_abs(ts->finger_idev, ABS_MT_POSITION_X, x); in elants_a_report()
734 input_report_abs(ts->finger_idev, ABS_MT_POSITION_Y, y); in elants_a_report()
735 input_report_abs(ts->finger_idev, ABS_MT_TRACKING_ID, reportid); in elants_a_report()
736 input_mt_sync(ts->finger_idev); in elants_a_report()
747 input_report_key(ts->finger_idev, BTN_TOUCH, 0); in elants_a_report()
748 input_report_key(ts->finger_idev, BTN_TOOL_FINGER, false); in elants_a_report()
749 input_mt_sync(ts->finger_idev); in elants_a_report()
752 input_sync(ts->finger_idev); in elants_a_report()
754 print_log(ts->level,"[elan] stylus.key %d, pkey %d\n",stylus.key,pkey); in elants_a_report()
759 input_report_key(ts->pen_idev, pkey , 1); in elants_a_report()
760 input_sync(ts->pen_idev); in elants_a_report()
764 input_report_key(ts->pen_idev, pkey , 1); in elants_a_report()
765 input_sync(ts->pen_idev); in elants_a_report()
769 input_report_key(ts->pen_idev, pkey , 1); in elants_a_report()
770 input_sync(ts->pen_idev); in elants_a_report()
774 input_report_key(ts->pen_idev, pkey , 1); in elants_a_report()
775 input_sync(ts->pen_idev); in elants_a_report()
778 input_report_key(ts->pen_idev, pkey , 0); in elants_a_report()
780 input_sync(ts->pen_idev); in elants_a_report()
785 print_log(ts->level, "[elan] stylus.tip_status %d, stylus.inrange_status %d\n",\ in elants_a_report()
793 input_report_abs(ts->pen_idev, ABS_PRESSURE, p); in elants_a_report()
794 input_report_abs(ts->pen_idev, ABS_X, x); in elants_a_report()
795 input_report_abs(ts->pen_idev, ABS_Y, y); in elants_a_report()
796 dev_info(&ts->client->dev, "[elan] X:Y:P ====%d:%d:%d\n",x,y,p); in elants_a_report()
799 input_report_key(ts->pen_idev, BTN_TOUCH, stylus.tip_status); in elants_a_report()
800 input_report_key(ts->pen_idev, BTN_TOOL_PEN, stylus.tip_status); in elants_a_report()
801 input_sync(ts->pen_idev); in elants_a_report()
805 static void elants_slot_report(struct elan_ts_data *ts, uint8_t *buf) in elants_slot_report() argument
808 struct elan_report_struct *report = &ts->report; in elants_slot_report()
834 x = ts->hw_info.screen_x * x / ts->fw_info.finger_xres; in elants_slot_report()
835 y = ts->hw_info.screen_y * y / ts->fw_info.finger_yres; in elants_slot_report()
840 input_mt_slot(ts->finger_idev, id); in elants_slot_report()
842 input_report_abs(ts->finger_idev, ABS_MT_TOUCH_MAJOR, 100); in elants_slot_report()
843 input_report_abs(ts->finger_idev, ABS_MT_POSITION_X, x); in elants_slot_report()
844 input_report_abs(ts->finger_idev, ABS_MT_POSITION_Y, y); in elants_slot_report()
845 input_mt_report_slot_state(ts->finger_idev, MT_TOOL_FINGER, true); in elants_slot_report()
846 input_report_key(ts->finger_idev, BTN_TOUCH, 1); in elants_slot_report()
849 input_mt_slot(ts->finger_idev, id); in elants_slot_report()
850 input_mt_report_slot_state(ts->finger_idev, MT_TOOL_FINGER, false); in elants_slot_report()
859 input_report_key(ts->finger_idev, BTN_TOUCH, 0); in elants_slot_report()
861 input_sync(ts->finger_idev); in elants_slot_report()
870 input_mt_slot(ts->finger_idev, reportid); in elants_slot_report()
871 input_mt_report_slot_state(ts->finger_idev, MT_TOOL_FINGER, true); in elants_slot_report()
872 input_report_abs(ts->finger_idev, ABS_MT_POSITION_X, x); in elants_slot_report()
873 input_report_abs(ts->finger_idev, ABS_MT_POSITION_Y, y); in elants_slot_report()
875 input_mt_slot(ts->finger_idev, id); in elants_slot_report()
876 input_mt_report_slot_state(ts->finger_idev, MT_TOOL_FINGER, false); in elants_slot_report()
882 input_sync(ts->finger_idev); in elants_slot_report()
889 input_report_key(ts->pen_idev, pkey , 1); in elants_slot_report()
890 input_sync(ts->pen_idev); in elants_slot_report()
894 input_report_key(ts->pen_idev, pkey , 1); in elants_slot_report()
895 input_sync(ts->pen_idev); in elants_slot_report()
899 input_report_key(ts->pen_idev, pkey , 1); in elants_slot_report()
900 input_sync(ts->pen_idev); in elants_slot_report()
904 input_report_key(ts->pen_idev, pkey , 1); in elants_slot_report()
905 input_sync(ts->pen_idev); in elants_slot_report()
908 input_report_key(ts->pen_idev, pkey , 0); in elants_slot_report()
910 input_sync(ts->pen_idev); in elants_slot_report()
915 print_log(ts->level, "[elan] stylus.inrange_status = %d, stylus.barrel_tip = %d", \ in elants_slot_report()
919 x = ts->hw_info.screen_x * x / ts->fw_info.pen_xres; in elants_slot_report()
920 y = ts->hw_info.screen_y * y / ts->fw_info.pen_yres; in elants_slot_report()
931 input_mt_slot(ts->pen_idev, 0); in elants_slot_report()
932 input_mt_report_slot_state(ts->pen_idev, MT_TOOL_PEN, true); in elants_slot_report()
933 input_report_key(ts->pen_idev, BTN_TOUCH, 1); in elants_slot_report()
934 input_report_abs(ts->pen_idev, ABS_MT_TOOL_TYPE, MT_TOOL_PEN); in elants_slot_report()
935 input_report_abs(ts->pen_idev, ABS_MT_PRESSURE, p); in elants_slot_report()
936 input_report_abs(ts->pen_idev, ABS_MT_POSITION_X, x); in elants_slot_report()
937 input_report_abs(ts->pen_idev, ABS_MT_POSITION_Y, y); in elants_slot_report()
938 input_report_abs(ts->pen_idev, ABS_TILT_X, x_tilt); in elants_slot_report()
939 input_report_abs(ts->pen_idev, ABS_TILT_Y, y_tilt); in elants_slot_report()
940 print_log(ts->level, "[elan] pen X:Y:P:TX:TY ====%d:%d:%d:%d:%d\n", in elants_slot_report()
943 input_mt_slot(ts->pen_idev, 0); in elants_slot_report()
944 input_mt_report_slot_state(ts->pen_idev, MT_TOOL_PEN, false); in elants_slot_report()
945 input_report_key(ts->pen_idev, BTN_TOUCH, 0); in elants_slot_report()
946 dev_info(&ts->client->dev, "[elan] pen relese!!!!"); in elants_slot_report()
949 input_sync(ts->pen_idev); in elants_slot_report()
987 static void elan_ts_hid_report(struct elan_ts_data *ts, uint8_t *buf) in elan_ts_hid_report() argument
989 struct elan_report_struct *report = &ts->report; in elan_ts_hid_report()
997 if (ts->report.tool_type == ELAN_FINGER) { in elan_ts_hid_report()
998 prekey = report_mbutton(ts->finger_idev,button); in elan_ts_hid_report()
1001 prekey = report_mbutton(ts->pen_idev,pbutton); in elan_ts_hid_report()
1006 if (ts->report_type == PROTOCOL_TYPE_B) { in elan_ts_hid_report()
1007 elants_slot_report(ts,buf); in elan_ts_hid_report()
1009 elants_a_report(ts,buf); in elan_ts_hid_report()
1013 static void elan_ts_normal_report(struct elan_ts_data *ts, uint8_t *buf) in elan_ts_normal_report() argument
1015 struct elan_report_struct *report = &ts->report; in elan_ts_normal_report()
1020 prekey = report_mbutton(ts->finger_idev,button); in elan_ts_normal_report()
1024 if (ts->report_type == PROTOCOL_TYPE_B) { in elan_ts_normal_report()
1025 elants_slot_report(ts,buf); in elan_ts_normal_report()
1028 elants_a_report(ts,buf); in elan_ts_normal_report()
1034 static void elan_ts_report_data(struct elan_ts_data *ts, uint8_t *buf) in elan_ts_report_data() argument
1036 switch (ts->chip_type) { in elan_ts_report_data()
1039 elan_ts_hid_report(ts, buf); in elan_ts_report_data()
1043 elan_ts_normal_report(ts,buf); in elan_ts_report_data()
1046 dev_err(&ts->client->dev, in elan_ts_report_data()
1055 struct elan_ts_data *ts = in elan_ts_work_func() local
1060 if(gpio_get_value(ts->hw_info.intr_gpio)) { in elan_ts_work_func()
1061 dev_err(&ts->client->dev,"[elan]interrupt jitter\n."); in elan_ts_work_func()
1065 memset(&ts->report, 0, sizeof(ts->report)); in elan_ts_work_func()
1067 rc = elan_ts_recv_data(ts,buf); in elan_ts_work_func()
1069 dev_err(&ts->client->dev,"[elan]recv data error\n."); in elan_ts_work_func()
1073 elan_ts_report_data(ts,buf); in elan_ts_work_func()
1080 struct elan_ts_data *ts = (struct elan_ts_data*)dev_id; in elan_ts_irq_handler() local
1082 if (ts->user_handle_irq) { in elan_ts_irq_handler()
1083 wake_up_interruptible(&ts->elan_userqueue); in elan_ts_irq_handler()
1084 ts->int_val = 0; in elan_ts_irq_handler()
1087 queue_work(ts->elan_wq,&ts->ts_work); in elan_ts_irq_handler()
1092 static int elan_request_pen_input_dev(struct elan_ts_data *ts) in elan_request_pen_input_dev() argument
1096 ts->pen_idev = input_allocate_device(); in elan_request_pen_input_dev()
1097 if (ts->pen_idev == NULL) { in elan_request_pen_input_dev()
1099 dev_err(&ts->client->dev, in elan_request_pen_input_dev()
1104 if (ts->report_type == PROTOCOL_TYPE_B) { in elan_request_pen_input_dev()
1106 input_mt_init_slots(ts->pen_idev, FINGERS_NUM,INPUT_MT_DIRECT); in elan_request_pen_input_dev()
1107 input_set_abs_params(ts->pen_idev, ABS_MT_TOOL_TYPE, 0, MT_TOOL_MAX, 0, 0); in elan_request_pen_input_dev()
1108 input_set_abs_params(ts->pen_idev, ABS_MT_POSITION_X, 0, ts->hw_info.screen_x, 0, 0); in elan_request_pen_input_dev()
1109 input_set_abs_params(ts->pen_idev, ABS_MT_POSITION_Y, 0, ts->hw_info.screen_y, 0, 0); in elan_request_pen_input_dev()
1110 input_set_abs_params(ts->pen_idev, ABS_MT_PRESSURE, 0, 4096, 0, 0); in elan_request_pen_input_dev()
1111 input_set_abs_params(ts->pen_idev, ABS_TILT_X, -90, 90, 0, 0); in elan_request_pen_input_dev()
1112 input_set_abs_params(ts->pen_idev, ABS_TILT_Y, -90, 90, 0, 0); in elan_request_pen_input_dev()
1114 __set_bit(BTN_TOOL_PEN, ts->pen_idev->keybit); in elan_request_pen_input_dev()
1115 __set_bit(BTN_TOUCH, ts->pen_idev->keybit); in elan_request_pen_input_dev()
1116 ts->pen_idev->absbit[0] = BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE); in elan_request_pen_input_dev()
1117 input_set_abs_params(ts->pen_idev, ABS_X, 0, ts->hw_info.screen_x, 0, 0); in elan_request_pen_input_dev()
1118 input_set_abs_params(ts->pen_idev, ABS_Y, 0, ts->hw_info.screen_y, 0, 0); in elan_request_pen_input_dev()
1119 input_set_abs_params(ts->pen_idev, ABS_PRESSURE, 0, 4096, 0, 0); in elan_request_pen_input_dev()
1121 input_set_abs_params(ts->pen_idev, ABS_TILT_X, -90, 90, 0, 0); in elan_request_pen_input_dev()
1122 input_set_abs_params(ts->pen_idev, ABS_TILT_Y, -90, 90, 0, 0); in elan_request_pen_input_dev()
1125 ts->pen_idev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) | BIT_MASK(EV_SYN); in elan_request_pen_input_dev()
1127 __set_bit(KEY_BACK, ts->pen_idev->keybit); in elan_request_pen_input_dev()
1128 __set_bit(BTN_TOOL_RUBBER, ts->pen_idev->keybit); in elan_request_pen_input_dev()
1129 __set_bit(BTN_STYLUS, ts->pen_idev->keybit); in elan_request_pen_input_dev()
1130 __set_bit(BTN_STYLUS2, ts->pen_idev->keybit); in elan_request_pen_input_dev()
1131 __set_bit(INPUT_PROP_DIRECT, ts->pen_idev->propbit); in elan_request_pen_input_dev()
1132 __set_bit(BTN_TOUCH, ts->pen_idev->keybit); in elan_request_pen_input_dev()
1133 input_set_abs_params(ts->pen_idev, ABS_MT_TRACKING_ID, 0, 10, 0, 0); in elan_request_pen_input_dev()
1135 ts->pen_idev->name = "elan_pen"; in elan_request_pen_input_dev()
1136 ts->pen_idev->phys = "input/ts"; in elan_request_pen_input_dev()
1137 ts->pen_idev->id.bustype = BUS_I2C; in elan_request_pen_input_dev()
1139 err = input_register_device(ts->pen_idev); in elan_request_pen_input_dev()
1141 input_free_device(ts->pen_idev); in elan_request_pen_input_dev()
1142 dev_err(&ts->client->dev, in elan_request_pen_input_dev()
1150 static int elan_request_finger_input_dev(struct elan_ts_data *ts) in elan_request_finger_input_dev() argument
1155 ts->finger_idev = input_allocate_device(); in elan_request_finger_input_dev()
1156 if (ts->finger_idev == NULL) { in elan_request_finger_input_dev()
1158 dev_err(&ts->client->dev, in elan_request_finger_input_dev()
1163 ts->finger_idev->evbit[0] = BIT(EV_KEY)|BIT_MASK(EV_REP); in elan_request_finger_input_dev()
1167 __set_bit(key_value[i], ts->finger_idev->keybit); in elan_request_finger_input_dev()
1170 ts->finger_idev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); in elan_request_finger_input_dev()
1172 __set_bit(INPUT_PROP_DIRECT, ts->finger_idev->propbit); in elan_request_finger_input_dev()
1174 if (ts->report_type == PROTOCOL_TYPE_B) { in elan_request_finger_input_dev()
1176 input_mt_init_slots(ts->finger_idev, FINGERS_NUM,INPUT_MT_DIRECT); in elan_request_finger_input_dev()
1177 input_set_abs_params(ts->finger_idev, ABS_MT_TOOL_TYPE, 0, MT_TOOL_MAX, 0, 0); in elan_request_finger_input_dev()
1179 __set_bit(BTN_TOOL_FINGER, ts->finger_idev->keybit); in elan_request_finger_input_dev()
1182 dev_info(&ts->client->dev, in elan_request_finger_input_dev()
1184 __func__, ts->fw_info.finger_xres, ts->fw_info.finger_yres); in elan_request_finger_input_dev()
1186 ts->finger_idev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); in elan_request_finger_input_dev()
1187 input_set_abs_params(ts->finger_idev, ABS_MT_POSITION_X, 0, ts->hw_info.screen_x, 0, 0); in elan_request_finger_input_dev()
1188 input_set_abs_params(ts->finger_idev, ABS_MT_POSITION_Y, 0, ts->hw_info.screen_y, 0, 0); in elan_request_finger_input_dev()
1191 input_set_abs_params(ts->finger_idev, ABS_MT_TRACKING_ID, 0, 255, 0, 0); in elan_request_finger_input_dev()
1193 ts->finger_idev->name = ELAN_TS_NAME; in elan_request_finger_input_dev()
1194 ts->finger_idev->phys = "input/ts"; in elan_request_finger_input_dev()
1195 ts->finger_idev->id.bustype = BUS_I2C; in elan_request_finger_input_dev()
1196 ts->finger_idev->id.vendor = 0x0001; in elan_request_finger_input_dev()
1197 ts->finger_idev->id.product = 0x0002; in elan_request_finger_input_dev()
1198 ts->finger_idev->id.version = 0x0003; in elan_request_finger_input_dev()
1200 err = input_register_device(ts->finger_idev); in elan_request_finger_input_dev()
1202 input_free_device(ts->finger_idev); in elan_request_finger_input_dev()
1203 dev_err(&ts->client->dev, in elan_request_finger_input_dev()
1205 __func__, ts->finger_idev->name); in elan_request_finger_input_dev()
1212 static int elan_ts_register_interrupt(struct elan_ts_data *ts) in elan_ts_register_interrupt() argument
1216 err = request_threaded_irq(ts->hw_info.irq_num, in elan_ts_register_interrupt()
1218 ELAN_TS_NAME, ts); in elan_ts_register_interrupt()
1221 dev_err(&ts->client->dev, in elan_ts_register_interrupt()
1223 __func__, ts->client->irq, err); in elan_ts_register_interrupt()
1233 struct elan_ts_data *ts = private_ts; in elan_ic_init_work() local
1234 struct i2c_client *client = ts->client; in elan_ic_init_work()
1237 if (ts->recover == COMPARE_UPGRADE) { in elan_ic_init_work()
1260 dev_err(&ts->client->dev, "[elan]Start IAP Flow!!!\n"); in elan_ic_init_work()
1261 ts->power_lock = 1; //skip resume / suspend flow in elan_ic_init_work()
1262 elan_check_update_flage(ts); in elan_ic_init_work()
1267 rc = elan_request_pen_input_dev(ts); in elan_ic_init_work()
1269 dev_err(&ts->client->dev, in elan_ic_init_work()
1276 rc = elan_request_finger_input_dev(ts); in elan_ic_init_work()
1278 dev_err(&ts->client->dev, in elan_ic_init_work()
1284 mutex_lock(&ts->irq_mutex); in elan_ic_init_work()
1285 ts->irq_lock_flag = 0; in elan_ic_init_work()
1286 mutex_unlock(&ts->irq_mutex); in elan_ic_init_work()
1298 ts->power_lock = 0; in elan_ic_init_work()
1304 input_unregister_device(ts->finger_idev); in elan_ic_init_work()
1306 input_unregister_device(ts->pen_idev); in elan_ic_init_work()
1312 static int elan_ts_setup(struct elan_ts_data *ts) in elan_ts_setup() argument
1316 dev_err(&ts->client->dev, "[elan] setup hw reset\n"); in elan_ts_setup()
1318 elan_ts_hw_reset(&ts->hw_info); in elan_ts_setup()
1321 err = elan__hello_packet_handler(ts->client, ts->chip_type); in elan_ts_setup()
1323 dev_err(&ts->client->dev, in elan_ts_setup()
1328 dev_err(&ts->client->dev, in elan_ts_setup()
1338 …struct elan_ts_data *ts = container_of(((struct miscdevice*)filp->private_data), struct elan_ts_da… in elan_iap_open() local
1340 dev_dbg(&ts->client->dev,"%s enter\n", __func__); in elan_iap_open()
1342 filp->private_data = ts; in elan_iap_open()
1362 struct elan_ts_data *ts = (struct elan_ts_data *)filp->private_data; in elan_iap_write() local
1363 struct i2c_client *client= ts->client; in elan_iap_write()
1394 struct elan_ts_data *ts = (struct elan_ts_data *)filp->private_data; in elan_iap_read() local
1395 struct i2c_client *client = ts->client; in elan_iap_read()
1408 if (ts->user_handle_irq == 1) { in elan_iap_read()
1409 wait_event_interruptible(ts->elan_userqueue, ts->int_val == 0); in elan_iap_read()
1421 if (ts->user_handle_irq == 1) { in elan_iap_read()
1422 ts->int_val = 1; in elan_iap_read()
1432 struct elan_ts_data *ts = (struct elan_ts_data *)filp->private_data; in elan_iap_ioctl() local
1433 struct i2c_client *client = ts->client; in elan_iap_ioctl()
1444 elan_ts_hw_reset(&ts->hw_info); in elan_iap_ioctl()
1449 elan_switch_irq(ts,0); in elan_iap_ioctl()
1455 elan_switch_irq(ts,1); in elan_iap_ioctl()
1462 return elan_ts_calibrate(ts->client); in elan_iap_ioctl()
1464 put_user(gpio_get_value(ts->hw_info.intr_gpio), ip); in elan_iap_ioctl()
1467 ts->user_handle_irq = 1; in elan_iap_ioctl()
1470 ts->user_handle_irq = 0; in elan_iap_ioctl()
1480 struct elan_ts_data *ts = (struct elan_ts_data *)filp->private_data; in elan_iap_poll() local
1481 dev_info(&ts->client->dev, "[elan] polling int_val = %d\n", ts->int_val); in elan_iap_poll()
1483 poll_wait(filp,&ts->elan_userqueue, wait); in elan_iap_poll()
1484 if (ts->int_val == 0) in elan_iap_poll()
1486 else if(ts->int_val == 1) in elan_iap_poll()
1503 static void elan_touch_node_init(struct elan_ts_data *ts) in elan_touch_node_init() argument
1506 elan_sysfs_attri_file(ts); in elan_touch_node_init()
1509 ts->firmware.minor = MISC_DYNAMIC_MINOR; in elan_touch_node_init()
1510 ts->firmware.name = "elan-iap"; in elan_touch_node_init()
1511 ts->firmware.fops = &elan_touch_fops; in elan_touch_node_init()
1512 ts->firmware.mode = S_IFREG|S_IRWXUGO; in elan_touch_node_init()
1514 if (misc_register(&ts->firmware) < 0) in elan_touch_node_init()
1515 dev_err(&ts->client->dev, "misc_register failed!!\n"); in elan_touch_node_init()
1517 ts->p = proc_create("elan-iap", 0664, NULL, (const struct proc_ops *)&elan_touch_fops); in elan_touch_node_init()
1518 if (ts->p == NULL) in elan_touch_node_init()
1519 dev_err(&ts->client->dev, "[elan error] proc_create failed!!\n"); in elan_touch_node_init()
1521 dev_info(&ts->client->dev, "proc_create ok!!\n"); in elan_touch_node_init()
1526 static void elan_touch_node_deinit(struct elan_ts_data *ts) in elan_touch_node_deinit() argument
1528 elan_sysfs_attri_file_remove(ts); in elan_touch_node_deinit()
1529 misc_deregister(&ts->firmware); in elan_touch_node_deinit()
1543 static int elan_ts_power_on(struct elan_ts_data *ts, bool on) in elan_ts_power_on() argument
1550 ret = regulator_enable(ts->vdd); in elan_ts_power_on()
1552 dev_err(&ts->client->dev, in elan_ts_power_on()
1557 ret = regulator_enable(ts->vcc_i2c); in elan_ts_power_on()
1559 dev_err(&ts->client->dev, in elan_ts_power_on()
1561 regulator_disable(ts->vdd); in elan_ts_power_on()
1567 ret = regulator_disable(ts->vdd); in elan_ts_power_on()
1569 dev_err(&ts->client->dev, in elan_ts_power_on()
1574 ret = regulator_disable(ts->vcc_i2c); in elan_ts_power_on()
1576 dev_err(&ts->client->dev, in elan_ts_power_on()
1578 ret = regulator_enable(ts->vdd); in elan_ts_power_on()
1580 dev_err(&ts->client->dev, in elan_ts_power_on()
1587 static int elan_power_initial(struct elan_ts_data *ts) in elan_power_initial() argument
1591 ts->vdd = regulator_get(&ts->client->dev, "vdd"); in elan_power_initial()
1592 if (IS_ERR(ts->vdd)) { in elan_power_initial()
1593 ret = PTR_ERR(ts->vdd); in elan_power_initial()
1594 dev_err(&ts->client->dev, in elan_power_initial()
1600 if (regulator_count_voltages(ts->vdd) > 0) { in elan_power_initial()
1601 ret = regulator_set_voltage(ts->vdd,ELAN_VTG_MIN_UV, in elan_power_initial()
1604 dev_err(&ts->client->dev, in elan_power_initial()
1610 ts->vcc_i2c = regulator_get(&ts->client->dev, "vcc_i2c"); in elan_power_initial()
1611 if (IS_ERR(ts->vcc_i2c)) { in elan_power_initial()
1612 ret = PTR_ERR(ts->vcc_i2c); in elan_power_initial()
1613 dev_err(&ts->client->dev, in elan_power_initial()
1618 if (regulator_count_voltages(ts->vcc_i2c) > 0) { in elan_power_initial()
1619 ret = regulator_set_voltage(ts->vcc_i2c, ELAN_I2C_VTG_MIN_UV, in elan_power_initial()
1622 dev_err(&ts->client->dev, in elan_power_initial()
1632 regulator_put(ts->vcc_i2c); in elan_power_initial()
1634 if (regulator_count_voltages(ts->vdd) > 0) in elan_power_initial()
1635 regulator_set_voltage(ts->vdd, 0, ELAN_VTG_MAX_UV); in elan_power_initial()
1639 regulator_put(ts->vdd); in elan_power_initial()
1644 static int elan_ts_set_power(struct elan_ts_data *ts, bool on) in elan_ts_set_power() argument
1654 ret = elan_power_initial(ts); in elan_ts_set_power()
1659 ret = elan_ts_power_on(ts,on); in elan_ts_set_power()
1666 regulator_put(ts->vdd); in elan_ts_set_power()
1667 regulator_put(ts->vcc_i2c); in elan_ts_set_power()
1737 struct elan_ts_data *ts = in elan_parse_dt() local
1752 dev_err(&ts->client->dev, "[elan] hw_info->intr_gpio invalid\n"); in elan_parse_dt()
1761 dev_err(&ts->client->dev, "[elan] hw_info->rst_gpio invalid\n"); in elan_parse_dt()
1769 ts->chip_type = data; in elan_parse_dt()
1770 …dev_info(&ts->client->dev,"[elan]:chip protocol_type=%s", ts->chip_type == 1 ? "HID IIC":"NORMAL I… in elan_parse_dt()
1779 ts->report_type = data; in elan_parse_dt()
1780 …dev_info(&ts->client->dev,"[elan]:report protocol_type=%s", ts->report_type == 1?"B protocol":"A p… in elan_parse_dt()
1785 ts->hw_info.screen_x = 2160; //1728; //2160; in elan_parse_dt()
1786 ts->hw_info.screen_y = 1440; //2368; //1440 in elan_parse_dt()
1791 ts->hw_info.screen_x = lcm_coordinate[0]; in elan_parse_dt()
1792 ts->hw_info.screen_y = lcm_coordinate[1]; in elan_parse_dt()
1793 …dev_info(&ts->client->dev,"[elan]:LCM RESOLUTION X:Y=%d:%d,", ts->hw_info.screen_x, ts->hw_info.sc… in elan_parse_dt()
1825 static int elan_ts_hw_initial(struct elan_ts_data *ts) in elan_ts_hw_initial() argument
1828 struct i2c_client *client = ts->client; in elan_ts_hw_initial()
1831 hw_info = &(ts->hw_info); in elan_ts_hw_initial()
1841 ts->chip_type = 1; /*1:HID IIC, 0: NORMAL IIC*/ in elan_ts_hw_initial()
1842 ts->report_type = 1; /*1:B protocol, 0:A protocol*/ in elan_ts_hw_initial()
1856 ts->fw_store_type = FROM_SYS_ETC_FIRMWARE; //define get fw solution in elan_ts_hw_initial()
1857 ts->user_handle_irq = 0; in elan_ts_hw_initial()
1861 ret = elan_ts_gpio_initial(&ts->hw_info); in elan_ts_hw_initial()
1871 static void elan_ts_hw_deinit(struct elan_ts_data *ts) in elan_ts_hw_deinit() argument
1874 regulator_put(ts->vdd); in elan_ts_hw_deinit()
1875 regulator_put(ts->vcc_i2c); in elan_ts_hw_deinit()
1876 if (gpio_is_valid(ts->hw_info.intr_gpio)) in elan_ts_hw_deinit()
1877 gpio_free(ts->hw_info.intr_gpio); in elan_ts_hw_deinit()
1879 if (gpio_is_valid(ts->hw_info.rst_gpio)) in elan_ts_hw_deinit()
1880 gpio_free(ts->hw_info.rst_gpio); in elan_ts_hw_deinit()
1901 struct elan_ts_data *ts; in elan_ts_probe() local
1913 ts = devm_kzalloc(&client->dev, sizeof(struct elan_ts_data), GFP_KERNEL); in elan_ts_probe()
1914 if (!ts) { in elan_ts_probe()
1922 ts->client = client; in elan_ts_probe()
1923 i2c_set_clientdata(client, ts); in elan_ts_probe()
1924 private_ts = ts; in elan_ts_probe()
1928 err = elan_ts_hw_initial(ts); in elan_ts_probe()
1937 err = elan_ts_set_power(ts,1); in elan_ts_probe()
1956 ts->ops = &elan_ops; in elan_ts_probe()
1961 err = elan_ts_setup(ts); in elan_ts_probe()
1968 if(COMPARE_UPGRADE == ts->recover) { in elan_ts_probe()
1970 err = elan_ts_check_calibrate(ts->client); /*ic reponse rek count,count != 0xff? "ok":"failed" */ in elan_ts_probe()
1972 dev_err(&ts->client->dev, "[elan] check rek failed, retry=%d\n",retry); in elan_ts_probe()
1973 err = elan_ts_calibrate(ts->client); in elan_ts_probe()
1975 dev_err(&ts->client->dev, "[elan]calibrate failed, retry=%d\n",retry); in elan_ts_probe()
1984 elan_touch_node_init(ts); in elan_ts_probe()
1989 INIT_DELAYED_WORK(&ts->init_work, elan_ic_init_work); in elan_ts_probe()
1990 ts->init_elan_ic_wq = create_singlethread_workqueue("init_elan_ic_wq"); in elan_ts_probe()
1991 if (IS_ERR(ts->init_elan_ic_wq)) { in elan_ts_probe()
1992 err = PTR_ERR(ts->init_elan_ic_wq); in elan_ts_probe()
1995 queue_delayed_work(ts->init_elan_ic_wq, &ts->init_work, delay); in elan_ts_probe()
2000 ts->elan_wq = create_singlethread_workqueue("elan_wq"); in elan_ts_probe()
2001 if (IS_ERR(ts->elan_wq)) { in elan_ts_probe()
2002 err = PTR_ERR(ts->elan_wq); in elan_ts_probe()
2008 INIT_WORK(&ts->ts_work, elan_ts_work_func); in elan_ts_probe()
2011 ts->level = TP_DEBUG; in elan_ts_probe()
2014 init_waitqueue_head(&ts->elan_userqueue); in elan_ts_probe()
2017 ts->fb_notif.notifier_call = fb_notifier_callback; in elan_ts_probe()
2018 err = fb_register_client(&ts->fb_notif); in elan_ts_probe()
2022 ts->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1; in elan_ts_probe()
2023 ts->early_suspend.suspend = elan_ts_early_suspend; in elan_ts_probe()
2024 ts->early_suspend.resume = elan_ts_late_resume; in elan_ts_probe()
2025 register_early_suspend(&ts->early_suspend); in elan_ts_probe()
2032 destroy_workqueue(ts->elan_wq); in elan_ts_probe()
2034 destroy_workqueue(ts->init_elan_ic_wq); in elan_ts_probe()
2039 regulator_put(ts->vdd); in elan_ts_probe()
2040 regulator_put(ts->vcc_i2c); in elan_ts_probe()
2043 if (gpio_is_valid(ts->hw_info.intr_gpio)) in elan_ts_probe()
2044 gpio_free(ts->hw_info.intr_gpio); in elan_ts_probe()
2046 if (gpio_is_valid(ts->hw_info.rst_gpio)) in elan_ts_probe()
2047 gpio_free(ts->hw_info.rst_gpio); in elan_ts_probe()
2067 struct elan_ts_data *ts = i2c_get_clientdata(client); in elan_ts_remove() local
2069 elan_ts_hw_deinit(ts); in elan_ts_remove()
2070 elan_touch_node_deinit(ts); in elan_ts_remove()
2072 input_unregister_device(ts->finger_idev); in elan_ts_remove()
2073 input_unregister_device(ts->pen_idev); in elan_ts_remove()
2074 free_irq(ts->hw_info.irq_num,(void *)elan_ts_irq_handler); in elan_ts_remove()
2076 if (!IS_ERR(ts->init_elan_ic_wq)) { in elan_ts_remove()
2077 destroy_workqueue(ts->init_elan_ic_wq); in elan_ts_remove()
2080 if (!IS_ERR(ts->elan_wq)) { in elan_ts_remove()
2081 destroy_workqueue(ts->elan_wq); in elan_ts_remove()
2084 fb_unregister_client(&ts->fb_notif); in elan_ts_remove()
2088 unregister_early_suspend(&ts->early_suspend); in elan_ts_remove()
2139 struct elan_ts_data *ts = i2c_get_clientdata(client); in elan_ts_set_power_state() local
2144 if (ts->chip_type == HID_TYPE_PROTOCOL) { in elan_ts_set_power_state()
2146 err = ts->ops->send(hid_cmd, sizeof(hid_cmd)); in elan_ts_set_power_state()
2153 err = ts->ops->send(cmd,sizeof(cmd)); in elan_ts_set_power_state()
2160 print_log(ts->level, "[elan] set power stats success\n"); in elan_ts_set_power_state()
2171 struct elan_ts_data *ts = i2c_get_clientdata(client); in elan_ts_suspend() local
2176 if (ts->power_lock == 0) { in elan_ts_suspend()
2178 elan_switch_irq(ts, 0); in elan_ts_suspend()
2180 err = elan_ts_set_power_state(ts->client, PWR_STATE_DEEP_SLEEP); in elan_ts_suspend()
2191 elan_ts_power_on(ts,false); in elan_ts_suspend()
2203 struct elan_ts_data *ts = i2c_get_clientdata(client); in elan_ts_resume() local
2213 if (ts->power_lock == 0) { in elan_ts_resume()
2216 elan_ts_power_on(ts,true); in elan_ts_resume()
2222 err = elan_ts_set_power_state(ts->client, PWR_STATE_NORMAL); in elan_ts_resume()
2228 elan_ts_hw_reset(&ts->hw_info); in elan_ts_resume()
2232 elan_switch_irq(ts, 1); in elan_ts_resume()
2258 struct elan_ts_data *ts = in fb_notifier_callback() local
2262 ts && ts->client) { in fb_notifier_callback()
2265 elan_ts_resume(&ts->client->dev); in fb_notifier_callback()
2267 elan_ts_suspend(&ts->client->dev); in fb_notifier_callback()
2284 struct elan_ts_data *ts; in elan_ts_early_suspend() local
2285 ts = container_of(h, struct elan_ts_data, early_suspend); in elan_ts_early_suspend()
2286 elan_ts_suspend(&ts->client->dev); in elan_ts_early_suspend()
2300 struct elan_ts_data *ts; in elan_ts_late_resume() local
2301 ts = container_of(h, struct elan_ts_data, early_suspend); in elan_ts_late_resume()
2302 elan_ts_resume(&ts->client->dev); in elan_ts_late_resume()