Lines Matching +full:client +full:- +full:id
148 struct i2c_client *client; member
192 if (!IS_ERR(ts->pinctrl)) in gslx680_set_pinctrl_state()
193 return PTR_ERR(ts->pinctrl); in gslx680_set_pinctrl_state()
196 ret = pinctrl_select_state(ts->pinctrl, state); in gslx680_set_pinctrl_state()
206 struct device_node *np = ts->client->dev.of_node; in gslX680_init()
209 ts->irq = of_get_named_gpio_flags(np, "touch-gpio", 0, NULL); in gslX680_init()
210 ts->rst = of_get_named_gpio_flags(np, "reset-gpio", 0, NULL); in gslX680_init()
213 ts->pinctrl = devm_pinctrl_get(&ts->client->dev); in gslX680_init()
214 if (!IS_ERR(ts->pinctrl)) { in gslX680_init()
215 ts->pins_default = in gslX680_init()
216 pinctrl_lookup_state(ts->pinctrl, PINCTRL_STATE_DEFAULT); in gslX680_init()
217 ts->pins_sleep = in gslX680_init()
218 pinctrl_lookup_state(ts->pinctrl, PINCTRL_STATE_SLEEP); in gslX680_init()
219 ts->pins_inactive = in gslX680_init()
220 pinctrl_lookup_state(ts->pinctrl, "inactive"); in gslX680_init()
221 gslx680_set_pinctrl_state(ts, ts->pins_default); in gslX680_init()
224 err = gpio_request(ts->rst, "tp reset"); in gslX680_init()
227 return -1; in gslX680_init()
230 gpio_direction_output(ts->rst, 1); in gslX680_init()
231 gpio_set_value(ts->rst, 1); in gslX680_init()
239 gpio_direction_output(ts->rst, 0); in gslX680_shutdown_low()
240 gpio_set_value(ts->rst, 0); in gslX680_shutdown_low()
248 gpio_direction_output(ts->rst, 1); in gslX680_shutdown_high()
249 gpio_set_value(ts->rst, 1); in gslX680_shutdown_high()
264 static u32 gsl_write_interface(struct i2c_client *client, in gsl_write_interface() argument
271 xfer_msg[0].addr = client->addr; in gsl_write_interface()
273 xfer_msg[0].flags = client->flags & I2C_M_TEN; in gsl_write_interface()
276 return i2c_transfer(client->adapter, xfer_msg, 1) == 1 ? 0 : -EFAULT; in gsl_write_interface()
279 static int gsl_ts_write(struct i2c_client *client, in gsl_ts_write() argument
287 dev_err(&client->dev, "%s big datalen = %d!\n", in gsl_ts_write()
289 return -1; in gsl_ts_write()
300 ret = i2c_master_send(client, tmp_buf, bytelen); in gsl_ts_write()
304 static int gsl_ts_read(struct i2c_client *client, u8 addr, in gsl_ts_read() argument
310 dev_err(&client->dev, "%s too big datalen = %d!\n", in gsl_ts_read()
312 return -1; in gsl_ts_read()
315 ret = gsl_ts_write(client, addr, NULL, 0); in gsl_ts_read()
317 dev_err(&client->dev, "%s set data address fail!\n", __func__); in gsl_ts_read()
321 return i2c_master_recv(client, pdata, datalen); in gsl_ts_read()
330 static void gsl_load_fw(struct i2c_client *client) in gsl_load_fw() argument
346 gsl_write_interface(client, GSL_PAGE_REG, buf, 4); in gsl_load_fw()
360 gsl_write_interface(client, buf[0], buf, in gsl_load_fw()
361 cur - buf - 1); in gsl_load_fw()
370 static int test_i2c(struct i2c_client *client) in test_i2c() argument
376 ret = gsl_ts_read(client, 0xf0, &read_buf, sizeof(read_buf)); in test_i2c()
378 rc--; in test_i2c()
380 dev_info(&client->dev, "gsl I read reg 0xf0 is %x\n", read_buf); in test_i2c()
383 ret = gsl_ts_write(client, 0xf0, &write_buf, sizeof(write_buf)); in test_i2c()
385 dev_info(&client->dev, "gsl I write reg 0xf0 0x12\n"); in test_i2c()
388 ret = gsl_ts_read(client, 0xf0, &read_buf, sizeof(read_buf)); in test_i2c()
390 rc--; in test_i2c()
392 dev_info(&client->dev, in test_i2c()
398 static void startup_chip(struct i2c_client *client) in startup_chip() argument
405 gsl_ts_write(client, 0xe0, &tmp, 1); in startup_chip()
409 static void reset_chip(struct i2c_client *client) in reset_chip() argument
414 gsl_ts_write(client, 0xe0, &tmp, sizeof(tmp)); in reset_chip()
417 gsl_ts_write(client, 0xe4, &tmp, sizeof(tmp)); in reset_chip()
419 gsl_ts_write(client, 0xbc, buf, sizeof(buf)); in reset_chip()
423 static void clr_reg(struct i2c_client *client) in clr_reg() argument
428 gsl_ts_write(client, 0xe0, &write_buf[0], 1); in clr_reg()
431 gsl_ts_write(client, 0x80, &write_buf[0], 1); in clr_reg()
434 gsl_ts_write(client, 0xe4, &write_buf[0], 1); in clr_reg()
437 gsl_ts_write(client, 0xe0, &write_buf[0], 1); in clr_reg()
442 static int gsl_adjust_freq(struct i2c_client *client) in gsl_adjust_freq() argument
448 dev_info(&client->dev, "gsl pen test\n"); in gsl_adjust_freq()
453 i2c_smbus_write_i2c_block_data(client, 0xf0, 4, buf); in gsl_adjust_freq()
458 i2c_smbus_write_i2c_block_data(client, 0x0c, 4, buf); in gsl_adjust_freq()
463 i2c_smbus_write_i2c_block_data(client, 0xf0, 4, buf); in gsl_adjust_freq()
468 i2c_smbus_write_i2c_block_data(client, 0x04, 4, buf); in gsl_adjust_freq()
473 i2c_smbus_write_i2c_block_data(client, 0xf0, 4, buf); in gsl_adjust_freq()
478 i2c_smbus_write_i2c_block_data(client, 0x08, 4, buf); in gsl_adjust_freq()
485 i2c_smbus_write_i2c_block_data(client, 0xf0, 4, buf); in gsl_adjust_freq()
486 i2c_smbus_read_i2c_block_data(client, 0, 4, buf); in gsl_adjust_freq()
487 i2c_smbus_read_i2c_block_data(client, 0, 4, buf); in gsl_adjust_freq()
497 i2c_smbus_write_i2c_block_data(client, 0xf0, 4, buf); in gsl_adjust_freq()
498 i2c_smbus_read_i2c_block_data(client, 0, 4, buf); in gsl_adjust_freq()
499 i2c_smbus_read_i2c_block_data(client, 0, 4, buf); in gsl_adjust_freq()
504 real_time = ((time_end.tv_sec - time_start.tv_sec) * 10000 + in gsl_adjust_freq()
505 (time_end.tv_usec - time_start.tv_usec) / 100); in gsl_adjust_freq()
507 ret = (u32)((cpu_start - cpu_end) * 100 / real_time) in gsl_adjust_freq()
514 i2c_smbus_write_i2c_block_data(client, in gsl_adjust_freq()
520 i2c_smbus_write_i2c_block_data(client, in gsl_adjust_freq()
523 return -1; in gsl_adjust_freq()
530 static void init_chip(struct i2c_client *client, struct gsl_ts *ts) in init_chip() argument
536 dev_info(&client->dev, "gsl init_chip\n"); in init_chip()
542 rc = test_i2c(client); in init_chip()
544 dev_err(&client->dev, "gslX680 test_i2c error\n"); in init_chip()
547 clr_reg(client); in init_chip()
548 reset_chip(client); in init_chip()
549 gsl_load_fw(client); in init_chip()
550 startup_chip(client); in init_chip()
553 rc1 = gsl_adjust_freq(client); in init_chip()
555 dev_info(&client->dev, "SL_Adjust_Freq error\n"); in init_chip()
556 gsl_adjust_freq(client); in init_chip()
560 reset_chip(client); in init_chip()
561 startup_chip(client); in init_chip()
564 static void check_mem_data(struct i2c_client *client, struct gsl_ts *ts) in check_mem_data() argument
569 gsl_ts_read(client, 0xb0, read_buf, sizeof(read_buf)); in check_mem_data()
570 dev_info(&client->dev, "check mem read 0xb0 = %x %x %x %x\n", in check_mem_data()
574 init_chip(client, ts); in check_mem_data()
582 return (ch - '0'); in char_to_int()
584 return (ch - 'a' + 10); in char_to_int()
639 return -EFAULT; in gsl_config_write_proc()
644 return -ENOMEM; in gsl_config_write_proc()
652 pr_debug("[tp-gsl][%s][%s]\n", __func__, temp_buf); in gsl_config_write_proc()
711 static void filter_point(u16 x, u16 y, u8 id) in filter_point() argument
717 id_sign[id] = id_sign[id] + 1; in filter_point()
718 if (id_sign[id] == 1) { in filter_point()
719 x_old[id] = x; in filter_point()
720 y_old[id] = y; in filter_point()
723 x_err = x > x_old[id] ? (x - x_old[id]) : (x_old[id] - x); in filter_point()
724 y_err = y > y_old[id] ? (y - y_old[id]) : (y_old[id] - y); in filter_point()
750 x_old[id] ? (x_old[id] + filter_step_x) : (x_old[id] - in filter_point()
754 y_old[id] ? (y_old[id] + filter_step_y) : (y_old[id] - in filter_point()
757 x_old[id] = x_new; in filter_point()
758 y_old[id] = y_new; in filter_point()
761 static void record_point(u16 x, u16 y, u8 id) in record_point() argument
766 id_sign[id] = id_sign[id] + 1; in record_point()
768 if (id_sign[id] == 1) { in record_point()
769 x_old[id] = x; in record_point()
770 y_old[id] = y; in record_point()
773 x = (x_old[id] + x) / 2; in record_point()
774 y = (y_old[id] + y) / 2; in record_point()
776 if (x > x_old[id]) in record_point()
777 x_err = x - x_old[id]; in record_point()
779 x_err = x_old[id] - x; in record_point()
781 if (y > y_old[id]) in record_point()
782 y_err = y - y_old[id]; in record_point()
784 y_err = y_old[id] - y; in record_point()
788 x_old[id] = x; in record_point()
790 y_old[id] = y; in record_point()
794 x_old[id] = x; in record_point()
796 x_new = x_old[id]; in record_point()
801 y_old[id] = y; in record_point()
803 y_new = y_old[id]; in record_point()
807 if (id_sign[id] == 1) { in record_point()
808 x_new = x_old[id]; in record_point()
809 y_new = y_old[id]; in record_point()
826 input_report_key(ts->input, key, 1); in report_key()
827 input_sync(ts->input); in report_key()
836 static void report_data(struct gsl_ts *ts, u16 x, u16 y, u8 pressure, u8 id) in report_data() argument
848 input_event(ts->input, EV_MSC, MSC_SCAN, 0x90001); in report_data()
849 input_report_key(ts->input, 0x110, 1); in report_data()
850 input_sync(ts->input); in report_data()
852 delt_x = (int)x - old_x; in report_data()
853 delt_y = (int)y - old_y; in report_data()
856 input_report_rel(ts->input, REL_Y, -delt_x); in report_data()
857 input_report_rel(ts->input, REL_X, -delt_y); in report_data()
858 input_sync(ts->input); in report_data()
865 y = 1920 - y; in report_data()
868 input_mt_slot(ts->input, id); in report_data()
869 input_report_abs(ts->input, ABS_MT_TRACKING_ID, id); in report_data()
870 input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, pressure); in report_data()
871 input_report_abs(ts->input, ABS_MT_POSITION_X, x); in report_data()
872 input_report_abs(ts->input, ABS_MT_POSITION_Y, y); in report_data()
873 input_report_abs(ts->input, ABS_MT_WIDTH_MAJOR, 1); in report_data()
875 input_report_abs(ts->input, ABS_MT_TRACKING_ID, id); in report_data()
876 input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, pressure); in report_data()
877 input_report_abs(ts->input, ABS_MT_POSITION_X, x); in report_data()
878 input_report_abs(ts->input, ABS_MT_POSITION_Y, y); in report_data()
879 input_report_abs(ts->input, ABS_MT_WIDTH_MAJOR, 1); in report_data()
880 input_mt_sync(ts->input); in report_data()
888 spin_lock_irqsave(&ts->irq_lock, irqflags); in glsx680_ts_irq_disable()
889 if (!ts->flag_irq_is_disable) { in glsx680_ts_irq_disable()
890 disable_irq_nosync(ts->client->irq); in glsx680_ts_irq_disable()
891 ts->flag_irq_is_disable = 1; in glsx680_ts_irq_disable()
893 spin_unlock_irqrestore(&ts->irq_lock, irqflags); in glsx680_ts_irq_disable()
900 spin_lock_irqsave(&ts->irq_lock, irqflags); in glsx680_ts_irq_enable()
901 if (ts->flag_irq_is_disable) { in glsx680_ts_irq_enable()
902 enable_irq(ts->client->irq); in glsx680_ts_irq_enable()
903 ts->flag_irq_is_disable = 0; in glsx680_ts_irq_enable()
905 spin_unlock_irqrestore(&ts->irq_lock, irqflags); in glsx680_ts_irq_enable()
911 u8 id, touches; in gslX680_ts_worker() local
934 rc = gsl_ts_read(ts->client, 0x80, ts->touch_data, ts->dd->data_size); in gslX680_ts_worker()
936 dev_err(&ts->client->dev, "read failed\n"); in gslX680_ts_worker()
940 touches = ts->touch_data[ts->dd->touch_index]; in gslX680_ts_worker()
947 join_bytes((ts-> in gslX680_ts_worker()
948 touch_data[ts->dd->x_index + 4 * i + 1] & 0xf), in gslX680_ts_worker()
949 ts->touch_data[ts->dd->x_index + 4 * i]); in gslX680_ts_worker()
951 join_bytes(ts->touch_data[ts->dd->y_index + 4 * i + 1], in gslX680_ts_worker()
952 ts->touch_data[ts->dd->y_index + 4 * i]); in gslX680_ts_worker()
953 cinfo.id[i] = in gslX680_ts_worker()
954 ((ts->touch_data[ts->dd->x_index + 4 * i + 1] & 0xf0) >> 4); in gslX680_ts_worker()
957 cinfo.finger_num = (ts->touch_data[3] << 24) | (ts->touch_data[2] << 16) in gslX680_ts_worker()
958 | (ts->touch_data[1] << 8) | (ts->touch_data[0]); in gslX680_ts_worker()
966 gsl_ts_write(ts->client, 0xf0, buf, 4); in gslX680_ts_worker()
971 gsl_ts_write(ts->client, 0x8, buf, 4); in gslX680_ts_worker()
983 id = cinfo.id[i]; in gslX680_ts_worker()
987 x = join_bytes((ts-> in gslX680_ts_worker()
988 touch_data[ts->dd->x_index + 4 * i + 1] & 0xf), in gslX680_ts_worker()
989 ts->touch_data[ts->dd->x_index + 4 * i]); in gslX680_ts_worker()
990 y = join_bytes(ts->touch_data[ts->dd->y_index + 4 * i + 1], in gslX680_ts_worker()
991 ts->touch_data[ts->dd->y_index + 4 * i]); in gslX680_ts_worker()
992 id = ts->touch_data[ts->dd->id_index + 4 * i] >> 4; in gslX680_ts_worker()
995 if (id >= i && id <= MAX_CONTACTS) { in gslX680_ts_worker()
997 filter_point(x, y, id); in gslX680_ts_worker()
999 record_point(x, y, id); in gslX680_ts_worker()
1001 report_data(ts, x, y, 10, id); in gslX680_ts_worker()
1007 id_state_flag[id] = 1; in gslX680_ts_worker()
1016 input_event(ts->input, EV_MSC, in gslX680_ts_worker()
1018 input_report_key(ts->input, 0x110, 0); in gslX680_ts_worker()
1019 input_sync(ts->input); in gslX680_ts_worker()
1025 input_mt_slot(ts->input, i); in gslX680_ts_worker()
1026 input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1); in gslX680_ts_worker()
1027 input_mt_report_slot_state(ts->input, in gslX680_ts_worker()
1038 input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, 0); in gslX680_ts_worker()
1039 input_report_abs(ts->input, ABS_MT_WIDTH_MAJOR, 0); in gslX680_ts_worker()
1040 input_mt_sync(ts->input); in gslX680_ts_worker()
1046 (((key_x[key_count - 1] - key_x[0]) > in gslX680_ts_worker()
1047 0) ? (key_x[key_count - 1] - key_x[0]) in gslX680_ts_worker()
1048 : (key_x[0] - key_x[key_count - 1])); in gslX680_ts_worker()
1050 (((key_y[key_count - 1] - key_y[0]) > in gslX680_ts_worker()
1051 0) ? (key_y[key_count - 1] - key_y[0]) in gslX680_ts_worker()
1052 : (key_y[0] - key_y[key_count - 1])); in gslX680_ts_worker()
1055 if ((key_x[key_count - 1] - key_x[0]) > 100) { in gslX680_ts_worker()
1057 input_report_key(ts->input, in gslX680_ts_worker()
1059 input_sync(ts->input); in gslX680_ts_worker()
1060 input_report_key(ts->input, in gslX680_ts_worker()
1062 input_sync(ts->input); in gslX680_ts_worker()
1063 } else if ((key_x[0] - key_x[key_count - 1]) > in gslX680_ts_worker()
1066 input_report_key(ts->input, in gslX680_ts_worker()
1068 input_sync(ts->input); in gslX680_ts_worker()
1069 input_report_key(ts->input, in gslX680_ts_worker()
1071 input_sync(ts->input); in gslX680_ts_worker()
1074 if ((key_y[key_count - 1] - key_y[0]) > 100) { in gslX680_ts_worker()
1076 input_report_key(ts->input, in gslX680_ts_worker()
1078 input_sync(ts->input); in gslX680_ts_worker()
1079 input_report_key(ts->input, in gslX680_ts_worker()
1081 input_sync(ts->input); in gslX680_ts_worker()
1082 } else if ((key_y[0] - key_y[key_count - 1]) > in gslX680_ts_worker()
1085 input_report_key(ts->input, in gslX680_ts_worker()
1087 input_sync(ts->input); in gslX680_ts_worker()
1088 input_report_key(ts->input, in gslX680_ts_worker()
1090 input_sync(ts->input); in gslX680_ts_worker()
1094 if ((key_x[key_count - 1] - key_x[0] < 50) && in gslX680_ts_worker()
1095 (key_x[key_count - 1] - key_x[0] >= -50) && in gslX680_ts_worker()
1096 (key_y[key_count - 1] - key_y[0] < 50) && in gslX680_ts_worker()
1097 (key_y[key_count - 1] - key_y[0] >= -50) && in gslX680_ts_worker()
1100 &ts->click_work); in gslX680_ts_worker()
1104 input_report_key(ts->input, in gslX680_ts_worker()
1106 input_sync(ts->input); in gslX680_ts_worker()
1107 input_report_key(ts->input, in gslX680_ts_worker()
1109 input_sync(ts->input); in gslX680_ts_worker()
1118 if ((key_x[511] - key_x[0]) > 100) { in gslX680_ts_worker()
1120 input_report_key(ts->input, in gslX680_ts_worker()
1122 input_sync(ts->input); in gslX680_ts_worker()
1123 input_report_key(ts->input, in gslX680_ts_worker()
1125 input_sync(ts->input); in gslX680_ts_worker()
1126 } else if ((key_x[0] - key_x[511]) > 100) { in gslX680_ts_worker()
1128 input_report_key(ts->input, in gslX680_ts_worker()
1130 input_sync(ts->input); in gslX680_ts_worker()
1131 input_report_key(ts->input, in gslX680_ts_worker()
1133 input_sync(ts->input); in gslX680_ts_worker()
1136 if ((key_y[511] - key_y[0]) > 100) { in gslX680_ts_worker()
1138 input_report_key(ts->input, in gslX680_ts_worker()
1140 input_sync(ts->input); in gslX680_ts_worker()
1141 input_report_key(ts->input, in gslX680_ts_worker()
1143 input_sync(ts->input); in gslX680_ts_worker()
1144 } else if ((key_y[0] - key_y[511]) > 100) { in gslX680_ts_worker()
1146 input_report_key(ts->input, in gslX680_ts_worker()
1148 input_sync(ts->input); in gslX680_ts_worker()
1149 input_report_key(ts->input, in gslX680_ts_worker()
1151 input_sync(ts->input); in gslX680_ts_worker()
1162 input_report_key(ts->input, key, 0); in gslX680_ts_worker()
1163 input_sync(ts->input); in gslX680_ts_worker()
1169 input_sync(ts->input); in gslX680_ts_worker()
1204 gsl_ts_read(ts->client, 0xb0, read_buf, 4); in gsl_monitor_worker()
1216 gsl_ts_read(ts->client, 0xb4, read_buf, 4); in gsl_monitor_worker()
1234 gsl_ts_read(ts->client, 0xbc, read_buf, 4); in gsl_monitor_worker()
1248 init_chip(ts->client, ts); in gsl_monitor_worker()
1260 if (!work_pending(&ts->work)) in gsl_ts_irq()
1261 queue_work(ts->wq, &ts->work); in gsl_ts_irq()
1266 static int gslX680_ts_init(struct i2c_client *client, struct gsl_ts *ts) in gslX680_ts_init() argument
1274 ts->dd = &devices[ts->device_id]; in gslX680_ts_init()
1276 if (ts->device_id == 0) { in gslX680_ts_init()
1277 ts->dd->data_size = in gslX680_ts_init()
1278 MAX_FINGERS * ts->dd->touch_bytes + ts->dd->touch_meta_data; in gslX680_ts_init()
1279 ts->dd->touch_index = 0; in gslX680_ts_init()
1282 ts->touch_data = in gslX680_ts_init()
1283 devm_kzalloc(&client->dev, ts->dd->data_size, GFP_KERNEL); in gslX680_ts_init()
1284 if (!ts->touch_data) { in gslX680_ts_init()
1286 return -ENOMEM; in gslX680_ts_init()
1289 input_device = devm_input_allocate_device(&ts->client->dev); in gslX680_ts_init()
1291 rc = -ENOMEM; in gslX680_ts_init()
1295 ts->input = input_device; in gslX680_ts_init()
1296 input_device->name = GSLX680_I2C_NAME; in gslX680_ts_init()
1297 input_device->id.bustype = BUS_I2C; in gslX680_ts_init()
1298 input_device->dev.parent = &client->dev; in gslX680_ts_init()
1302 __set_bit(EV_ABS, input_device->evbit); in gslX680_ts_init()
1303 __set_bit(EV_KEY, input_device->evbit); in gslX680_ts_init()
1304 __set_bit(EV_REP, input_device->evbit); in gslX680_ts_init()
1305 __set_bit(EV_SYN, input_device->evbit); in gslX680_ts_init()
1306 __set_bit(INPUT_PROP_DIRECT, input_device->propbit); in gslX680_ts_init()
1307 __set_bit(MT_TOOL_FINGER, input_device->keybit); in gslX680_ts_init()
1312 set_bit(EV_ABS, input_device->evbit); in gslX680_ts_init()
1313 set_bit(EV_KEY, input_device->evbit); in gslX680_ts_init()
1314 __set_bit(INPUT_PROP_DIRECT, input_device->propbit); in gslX680_ts_init()
1315 input_device->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); in gslX680_ts_init()
1319 input_device->evbit[0] = BIT_MASK(EV_KEY); in gslX680_ts_init()
1321 set_bit(key_array[i], input_device->keybit); in gslX680_ts_init()
1325 set_bit(EV_REL, input_device->evbit); in gslX680_ts_init()
1332 set_bit(ABS_MT_POSITION_X, input_device->absbit); in gslX680_ts_init()
1333 set_bit(ABS_MT_POSITION_Y, input_device->absbit); in gslX680_ts_init()
1334 set_bit(ABS_MT_TOUCH_MAJOR, input_device->absbit); in gslX680_ts_init()
1335 set_bit(ABS_MT_WIDTH_MAJOR, input_device->absbit); in gslX680_ts_init()
1345 /* ts->irq = client->irq; */ in gslX680_ts_init()
1347 ts->wq = create_singlethread_workqueue("kworkqueue_ts"); in gslX680_ts_init()
1348 if (!ts->wq) { in gslX680_ts_init()
1349 dev_err(&client->dev, "gsl Could not create workqueue\n"); in gslX680_ts_init()
1352 flush_workqueue(ts->wq); in gslX680_ts_init()
1354 INIT_WORK(&ts->work, gslX680_ts_worker); in gslX680_ts_init()
1363 destroy_workqueue(ts->wq); in gslX680_ts_init()
1373 cancel_delayed_work_sync(&ts->gsl_monitor_work); in gsl_ts_early_suspend()
1381 cancel_work_sync(&ts->work); in gsl_ts_early_suspend()
1387 input_mt_slot(ts->input, i); in gsl_ts_early_suspend()
1388 input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1); in gsl_ts_early_suspend()
1389 input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, false); in gsl_ts_early_suspend()
1392 input_mt_sync(ts->input); in gsl_ts_early_suspend()
1394 input_sync(ts->input); in gsl_ts_early_suspend()
1397 input_sync(ts->input); in gsl_ts_early_suspend()
1410 reset_chip(ts->client); in gsl_ts_late_resume()
1411 startup_chip(ts->client); in gsl_ts_late_resume()
1412 check_mem_data(ts->client, ts); in gsl_ts_late_resume()
1417 input_mt_slot(ts->input, i); in gsl_ts_late_resume()
1418 input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1); in gsl_ts_late_resume()
1419 input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, false); in gsl_ts_late_resume()
1422 input_mt_sync(ts->input); in gsl_ts_late_resume()
1424 input_sync(ts->input); in gsl_ts_late_resume()
1428 queue_delayed_work(gsl_monitor_workqueue, &ts->gsl_monitor_work, 300); in gsl_ts_late_resume()
1442 cancel_delayed_work_sync(&ts->gsl_monitor_work); in gsl_ts_early_suspend()
1446 cancel_work_sync(&ts->work); in gsl_ts_early_suspend()
1452 input_mt_slot(ts->input, i); in gsl_ts_early_suspend()
1453 input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1); in gsl_ts_early_suspend()
1454 input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, false); in gsl_ts_early_suspend()
1457 input_mt_sync(ts->input); in gsl_ts_early_suspend()
1459 input_sync(ts->input); in gsl_ts_early_suspend()
1462 input_sync(ts->input); in gsl_ts_early_suspend()
1478 reset_chip(ts->client); in gsl_ts_late_resume()
1479 startup_chip(ts->client); in gsl_ts_late_resume()
1480 check_mem_data(ts->client, ts); in gsl_ts_late_resume()
1485 input_mt_slot(ts->input, i); in gsl_ts_late_resume()
1486 input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1); in gsl_ts_late_resume()
1487 input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, false); in gsl_ts_late_resume()
1490 input_mt_sync(ts->input); in gsl_ts_late_resume()
1492 input_sync(ts->input); in gsl_ts_late_resume()
1496 queue_delayed_work(gsl_monitor_workqueue, &ts->gsl_monitor_work, 300); in gsl_ts_late_resume()
1507 ret = regulator_enable(ts->regulator); in gsl_ts_power_on()
1509 dev_err(&ts->client->dev, in gsl_ts_power_on()
1513 ret = regulator_disable(ts->regulator); in gsl_ts_power_on()
1515 dev_err(&ts->client->dev, in gsl_ts_power_on()
1521 static int gsl_ts_probe(struct i2c_client *client, in gsl_ts_probe() argument
1522 const struct i2c_device_id *id) in gsl_ts_probe() argument
1528 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { in gsl_ts_probe()
1529 dev_err(&client->dev, "gsl I2C functionality not supported\n"); in gsl_ts_probe()
1530 return -ENODEV; in gsl_ts_probe()
1532 ts = devm_kzalloc(&client->dev, sizeof(*ts), GFP_KERNEL); in gsl_ts_probe()
1534 return -ENOMEM; in gsl_ts_probe()
1538 ts->regulator = devm_regulator_get_optional(&client->dev, "power"); in gsl_ts_probe()
1539 if (IS_ERR(ts->regulator)) { in gsl_ts_probe()
1540 if (PTR_ERR(ts->regulator) == -EPROBE_DEFER) in gsl_ts_probe()
1541 dev_err(&client->dev, in gsl_ts_probe()
1543 ts->regulator = NULL; in gsl_ts_probe()
1548 ts->tp.tp_suspend = gsl_ts_early_suspend; in gsl_ts_probe()
1549 ts->tp.tp_resume = gsl_ts_late_resume; in gsl_ts_probe()
1550 tp_register_fb(&ts->tp); in gsl_ts_probe()
1551 ts->client = client; in gsl_ts_probe()
1552 i2c_set_clientdata(client, ts); in gsl_ts_probe()
1553 /* ts->device_id = id->driver_data; */ in gsl_ts_probe()
1556 rc = gslX680_ts_init(client, ts); in gsl_ts_probe()
1558 dev_err(&client->dev, "gsl GSLX680 init failed\n"); in gsl_ts_probe()
1562 init_chip(ts->client, ts); in gsl_ts_probe()
1563 check_mem_data(ts->client, ts); in gsl_ts_probe()
1564 spin_lock_init(&ts->irq_lock); in gsl_ts_probe()
1565 client->irq = gpio_to_irq(ts->irq); in gsl_ts_probe()
1566 rc = request_irq(client->irq, gsl_ts_irq, IRQF_TRIGGER_RISING, in gsl_ts_probe()
1567 client->name, ts); in gsl_ts_probe()
1576 ts->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1; in gsl_ts_probe()
1577 ts->early_suspend.suspend = gsl_ts_early_suspend; in gsl_ts_probe()
1578 ts->early_suspend.resume = gsl_ts_late_resume; in gsl_ts_probe()
1579 register_early_suspend(&ts->early_suspend); in gsl_ts_probe()
1584 INIT_DELAYED_WORK(&ts->gsl_monitor_work, gsl_monitor_worker); in gsl_ts_probe()
1587 queue_delayed_work(gsl_monitor_workqueue, &ts->gsl_monitor_work, 1000); in gsl_ts_probe()
1592 INIT_WORK(&ts->click_work, click_timer_worker); in gsl_ts_probe()
1594 queue_work(gsl_timer_workqueue, &ts->click_work); in gsl_ts_probe()
1598 i2c_client = client; in gsl_ts_probe()
1610 static int gsl_ts_remove(struct i2c_client *client) in gsl_ts_remove() argument
1612 struct gsl_ts *ts = i2c_get_clientdata(client); in gsl_ts_remove()
1615 unregister_early_suspend(&ts->early_suspend); in gsl_ts_remove()
1619 cancel_delayed_work_sync(&ts->gsl_monitor_work); in gsl_ts_remove()
1624 cancel_work_sync(&ts->click_work); in gsl_ts_remove()
1628 device_init_wakeup(&client->dev, 0); in gsl_ts_remove()
1629 cancel_work_sync(&ts->work); in gsl_ts_remove()
1630 free_irq(ts->client->irq, ts); in gsl_ts_remove()
1631 destroy_workqueue(ts->wq); in gsl_ts_remove()