Lines Matching defs:tsdata

167 static bool edt_ft5x06_ts_check_crc(struct edt_ft5x06_ts_data *tsdata,
177 dev_err_ratelimited(&tsdata->client->dev,
188 struct edt_ft5x06_ts_data *tsdata = dev_id;
189 struct device *dev = &tsdata->client->dev;
196 switch (tsdata->version) {
219 datalen = tplen * tsdata->max_support_points + offset + crclen;
221 error = edt_ft5x06_ts_readwrite(tsdata->client,
231 if (tsdata->version == EDT_M06) {
240 if (!edt_ft5x06_ts_check_crc(tsdata, rdbuf, datalen))
244 for (i = 0; i < tsdata->max_support_points; i++) {
253 if (tsdata->version == EDT_M06 && type == TOUCH_EVENT_DOWN)
259 if (tsdata->version == EV_FT)
264 input_mt_slot(tsdata->input, id);
265 if (input_mt_report_slot_state(tsdata->input, MT_TOOL_FINGER,
267 touchscreen_report_pos(tsdata->input, &tsdata->prop,
271 input_mt_report_pointer_emulation(tsdata->input, true);
272 input_sync(tsdata->input);
278 static int edt_ft5x06_register_write(struct edt_ft5x06_ts_data *tsdata,
283 switch (tsdata->version) {
285 wrbuf[0] = tsdata->factory_mode ? 0xf3 : 0xfc;
286 wrbuf[1] = tsdata->factory_mode ? addr & 0x7f : addr & 0x3f;
289 return edt_ft5x06_ts_readwrite(tsdata->client, 4,
299 return edt_ft5x06_ts_readwrite(tsdata->client, 2,
307 static int edt_ft5x06_register_read(struct edt_ft5x06_ts_data *tsdata,
313 switch (tsdata->version) {
315 wrbuf[0] = tsdata->factory_mode ? 0xf3 : 0xfc;
316 wrbuf[1] = tsdata->factory_mode ? addr & 0x7f : addr & 0x3f;
317 wrbuf[1] |= tsdata->factory_mode ? 0x80 : 0x40;
319 error = edt_ft5x06_ts_readwrite(tsdata->client, 2, wrbuf, 2,
325 dev_err(&tsdata->client->dev,
338 error = edt_ft5x06_ts_readwrite(tsdata->client, 1,
380 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
383 u8 *field = (u8 *)tsdata + attr->field_offset;
389 mutex_lock(&tsdata->mutex);
391 if (tsdata->factory_mode) {
396 switch (tsdata->version) {
417 val = edt_ft5x06_register_read(tsdata, addr);
420 dev_err(&tsdata->client->dev,
430 dev_warn(&tsdata->client->dev,
438 mutex_unlock(&tsdata->mutex);
447 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
450 u8 *field = (u8 *)tsdata + attr->field_offset;
455 mutex_lock(&tsdata->mutex);
457 if (tsdata->factory_mode) {
471 switch (tsdata->version) {
492 error = edt_ft5x06_register_write(tsdata, addr, val);
494 dev_err(&tsdata->client->dev,
503 mutex_unlock(&tsdata->mutex);
540 static void edt_ft5x06_restore_reg_parameters(struct edt_ft5x06_ts_data *tsdata)
542 struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
544 edt_ft5x06_register_write(tsdata, reg_addr->reg_threshold,
545 tsdata->threshold);
546 edt_ft5x06_register_write(tsdata, reg_addr->reg_gain,
547 tsdata->gain);
549 edt_ft5x06_register_write(tsdata, reg_addr->reg_offset,
550 tsdata->offset);
552 edt_ft5x06_register_write(tsdata, reg_addr->reg_offset_x,
553 tsdata->offset_x);
555 edt_ft5x06_register_write(tsdata, reg_addr->reg_offset_y,
556 tsdata->offset_y);
558 edt_ft5x06_register_write(tsdata, reg_addr->reg_report_rate,
559 tsdata->report_rate);
564 static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata)
566 struct i2c_client *client = tsdata->client;
571 if (tsdata->version != EDT_M06) {
579 if (!tsdata->raw_buffer) {
580 tsdata->raw_bufsize = tsdata->num_x * tsdata->num_y *
582 tsdata->raw_buffer = kzalloc(tsdata->raw_bufsize, GFP_KERNEL);
583 if (!tsdata->raw_buffer) {
590 error = edt_ft5x06_register_write(tsdata, WORK_REGISTER_OPMODE, 0x03);
597 tsdata->factory_mode = true;
601 ret = edt_ft5x06_register_read(tsdata, FACTORY_REGISTER_OPMODE);
616 kfree(tsdata->raw_buffer);
617 tsdata->raw_buffer = NULL;
618 tsdata->factory_mode = false;
624 static int edt_ft5x06_work_mode(struct edt_ft5x06_ts_data *tsdata)
626 struct i2c_client *client = tsdata->client;
632 error = edt_ft5x06_register_write(tsdata, FACTORY_REGISTER_OPMODE, 0x1);
639 tsdata->factory_mode = false;
644 ret = edt_ft5x06_register_read(tsdata, WORK_REGISTER_OPMODE);
652 tsdata->factory_mode = true;
656 kfree(tsdata->raw_buffer);
657 tsdata->raw_buffer = NULL;
659 edt_ft5x06_restore_reg_parameters(tsdata);
667 struct edt_ft5x06_ts_data *tsdata = data;
669 *mode = tsdata->factory_mode;
676 struct edt_ft5x06_ts_data *tsdata = data;
682 mutex_lock(&tsdata->mutex);
684 if (mode != tsdata->factory_mode) {
685 retval = mode ? edt_ft5x06_factory_mode(tsdata) :
686 edt_ft5x06_work_mode(tsdata);
689 mutex_unlock(&tsdata->mutex);
700 struct edt_ft5x06_ts_data *tsdata = file->private_data;
701 struct i2c_client *client = tsdata->client;
709 if (*off < 0 || *off >= tsdata->raw_bufsize)
712 mutex_lock(&tsdata->mutex);
714 if (!tsdata->factory_mode || !tsdata->raw_buffer) {
719 error = edt_ft5x06_register_write(tsdata, 0x08, 0x01);
728 val = edt_ft5x06_register_read(tsdata, 0x08);
747 rdbuf = tsdata->raw_buffer;
748 colbytes = tsdata->num_y * sizeof(u16);
752 for (i = 0; i < tsdata->num_x; i++) {
754 error = edt_ft5x06_ts_readwrite(tsdata->client,
763 read = min_t(size_t, count, tsdata->raw_bufsize - *off);
764 if (copy_to_user(buf, tsdata->raw_buffer + *off, read)) {
771 mutex_unlock(&tsdata->mutex);
780 static void edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata,
783 tsdata->debug_dir = debugfs_create_dir(debugfs_name, NULL);
785 debugfs_create_u16("num_x", S_IRUSR, tsdata->debug_dir, &tsdata->num_x);
786 debugfs_create_u16("num_y", S_IRUSR, tsdata->debug_dir, &tsdata->num_y);
789 tsdata->debug_dir, tsdata, &debugfs_mode_fops);
791 tsdata->debug_dir, tsdata, &debugfs_raw_data_fops);
794 static void edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
796 debugfs_remove_recursive(tsdata->debug_dir);
797 kfree(tsdata->raw_buffer);
802 static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata)
807 static void edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata,
812 static void edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
819 struct edt_ft5x06_ts_data *tsdata,
825 char *model_name = tsdata->name;
842 tsdata->version = EDT_M06;
856 tsdata->version = EDT_M12;
879 tsdata->version = GENERIC_FT;
903 tsdata->version = EDT_M09;
908 tsdata->version = EDT_M09;
916 tsdata->version = EV_FT;
937 struct edt_ft5x06_ts_data *tsdata)
939 struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
945 edt_ft5x06_register_write(tsdata, reg_addr->reg_threshold, val);
946 tsdata->threshold = val;
951 edt_ft5x06_register_write(tsdata, reg_addr->reg_gain, val);
952 tsdata->gain = val;
958 edt_ft5x06_register_write(tsdata,
960 tsdata->offset = val;
966 edt_ft5x06_register_write(tsdata,
968 tsdata->offset_x = val;
974 edt_ft5x06_register_write(tsdata,
976 tsdata->offset_y = val;
981 edt_ft5x06_ts_get_parameters(struct edt_ft5x06_ts_data *tsdata)
983 struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
985 tsdata->threshold = edt_ft5x06_register_read(tsdata,
987 tsdata->gain = edt_ft5x06_register_read(tsdata, reg_addr->reg_gain);
989 tsdata->offset =
990 edt_ft5x06_register_read(tsdata, reg_addr->reg_offset);
992 tsdata->offset_x = edt_ft5x06_register_read(tsdata,
995 tsdata->offset_y = edt_ft5x06_register_read(tsdata,
998 tsdata->report_rate = edt_ft5x06_register_read(tsdata,
1000 if (tsdata->version == EDT_M06 ||
1001 tsdata->version == EDT_M09 ||
1002 tsdata->version == EDT_M12) {
1003 tsdata->num_x = edt_ft5x06_register_read(tsdata,
1005 tsdata->num_y = edt_ft5x06_register_read(tsdata,
1008 tsdata->num_x = -1;
1009 tsdata->num_y = -1;
1014 edt_ft5x06_ts_set_regs(struct edt_ft5x06_ts_data *tsdata)
1016 struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
1018 switch (tsdata->version) {
1075 struct edt_ft5x06_ts_data *tsdata;
1084 tsdata = devm_kzalloc(&client->dev, sizeof(*tsdata), GFP_KERNEL);
1085 if (!tsdata) {
1098 tsdata->max_support_points = chip_data->max_support_points;
1100 tsdata->vcc = devm_regulator_get(&client->dev, "vcc");
1101 if (IS_ERR(tsdata->vcc)) {
1102 error = PTR_ERR(tsdata->vcc);
1109 error = regulator_enable(tsdata->vcc);
1117 tsdata);
1121 tsdata->reset_gpio = devm_gpiod_get_optional(&client->dev,
1123 if (IS_ERR(tsdata->reset_gpio)) {
1124 error = PTR_ERR(tsdata->reset_gpio);
1130 tsdata->wake_gpio = devm_gpiod_get_optional(&client->dev,
1132 if (IS_ERR(tsdata->wake_gpio)) {
1133 error = PTR_ERR(tsdata->wake_gpio);
1145 if (tsdata->reset_gpio)
1146 tsdata->suspend_mode = EDT_PMODE_POWEROFF;
1147 else if (tsdata->wake_gpio)
1148 tsdata->suspend_mode = EDT_PMODE_HIBERNATE;
1150 tsdata->suspend_mode = EDT_PMODE_NOT_SUPPORTED;
1152 if (tsdata->wake_gpio) {
1154 gpiod_set_value_cansleep(tsdata->wake_gpio, 1);
1157 if (tsdata->reset_gpio) {
1159 gpiod_set_value_cansleep(tsdata->reset_gpio, 0);
1169 mutex_init(&tsdata->mutex);
1170 tsdata->client = client;
1171 tsdata->input = input;
1172 tsdata->factory_mode = false;
1174 error = edt_ft5x06_ts_identify(client, tsdata, fw_version);
1184 edt_ft5x06_ts_readwrite(tsdata->client, 2, buf, 2, buf);
1186 edt_ft5x06_ts_set_regs(tsdata);
1187 edt_ft5x06_ts_get_defaults(&client->dev, tsdata);
1188 edt_ft5x06_ts_get_parameters(tsdata);
1192 tsdata->name, fw_version, tsdata->num_x, tsdata->num_y);
1194 input->name = tsdata->name;
1198 if (tsdata->version == EDT_M06 ||
1199 tsdata->version == EDT_M09 ||
1200 tsdata->version == EDT_M12) {
1202 0, tsdata->num_x * 64 - 1, 0, 0);
1204 0, tsdata->num_y * 64 - 1, 0, 0);
1213 touchscreen_parse_properties(input, true, &tsdata->prop);
1215 error = input_mt_init_slots(input, tsdata->max_support_points,
1222 i2c_set_clientdata(client, tsdata);
1231 client->name, tsdata);
1245 edt_ft5x06_ts_prepare_debugfs(tsdata, dev_driver_string(&client->dev));
1250 tsdata->wake_gpio ? desc_to_gpio(tsdata->wake_gpio) : -1,
1251 tsdata->reset_gpio ? desc_to_gpio(tsdata->reset_gpio) : -1);
1258 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
1260 edt_ft5x06_ts_teardown_debugfs(tsdata);
1268 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
1269 struct gpio_desc *reset_gpio = tsdata->reset_gpio;
1275 if (tsdata->suspend_mode == EDT_PMODE_NOT_SUPPORTED)
1279 ret = edt_ft5x06_register_write(tsdata, PMOD_REGISTER_OPMODE,
1284 if (tsdata->suspend_mode == EDT_PMODE_HIBERNATE)
1293 disable_irq(tsdata->client->irq);
1298 ret = regulator_disable(tsdata->vcc);
1308 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
1314 if (tsdata->suspend_mode == EDT_PMODE_NOT_SUPPORTED)
1317 if (tsdata->suspend_mode == EDT_PMODE_POWEROFF) {
1318 struct gpio_desc *reset_gpio = tsdata->reset_gpio;
1331 ret = regulator_enable(tsdata->vcc);
1341 edt_ft5x06_restore_reg_parameters(tsdata);
1342 enable_irq(tsdata->client->irq);
1344 if (tsdata->factory_mode)
1345 ret = edt_ft5x06_factory_mode(tsdata);
1347 struct gpio_desc *wake_gpio = tsdata->wake_gpio;