Lines Matching defs:tsdata
161 static bool edt_ft5x06_ts_check_crc(struct edt_ft5x06_ts_data *tsdata,
171 tsdata->crc_errors++;
172 dev_err_ratelimited(&tsdata->client->dev,
186 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(i2c);
209 wbuf[0] = M06_REG_CMD(tsdata->factory_mode);
210 wbuf[1] = M06_REG_ADDR(tsdata->factory_mode, addr);
211 wbuf[1] |= tsdata->factory_mode ? 0x80 : 0x40;
237 tsdata->header_errors++;
244 if (!edt_ft5x06_ts_check_crc(tsdata, val_buf, val_size))
249 if (!edt_ft5x06_ts_check_crc(tsdata, wbuf, 4))
262 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(i2c);
271 wbuf[0] = M06_REG_CMD(tsdata->factory_mode);
272 wbuf[1] = M06_REG_ADDR(tsdata->factory_mode, addr);
301 struct edt_ft5x06_ts_data *tsdata = dev_id;
302 struct device *dev = &tsdata->client->dev;
308 error = regmap_bulk_read(tsdata->regmap, tsdata->tdata_cmd, rdbuf,
309 tsdata->tdata_len);
316 for (i = 0; i < tsdata->max_support_points; i++) {
317 u8 *buf = &rdbuf[i * tsdata->point_len + tsdata->tdata_offset];
325 if (tsdata->version == EDT_M06 && type == TOUCH_EVENT_DOWN)
331 if (tsdata->version == EV_FT)
336 input_mt_slot(tsdata->input, id);
337 if (input_mt_report_slot_state(tsdata->input, MT_TOOL_FINGER,
339 touchscreen_report_pos(tsdata->input, &tsdata->prop,
343 input_mt_report_pointer_emulation(tsdata->input, true);
344 input_sync(tsdata->input);
379 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
382 u8 *field = (u8 *)tsdata + attr->field_offset;
388 mutex_lock(&tsdata->mutex);
390 if (tsdata->factory_mode) {
395 switch (tsdata->version) {
416 error = regmap_read(tsdata->regmap, addr, &val);
418 dev_err(&tsdata->client->dev,
428 dev_warn(&tsdata->client->dev,
436 mutex_unlock(&tsdata->mutex);
445 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
448 u8 *field = (u8 *)tsdata + attr->field_offset;
453 mutex_lock(&tsdata->mutex);
455 if (tsdata->factory_mode) {
469 switch (tsdata->version) {
490 error = regmap_write(tsdata->regmap, addr, val);
492 dev_err(&tsdata->client->dev,
501 mutex_unlock(&tsdata->mutex);
528 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
530 return sysfs_emit(buf, "%s\n", tsdata->name);
539 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
541 return sysfs_emit(buf, "%s\n", tsdata->fw_version);
551 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
553 return sysfs_emit(buf, "%d\n", tsdata->header_errors);
563 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
565 return sysfs_emit(buf, "%d\n", tsdata->crc_errors);
588 static void edt_ft5x06_restore_reg_parameters(struct edt_ft5x06_ts_data *tsdata)
590 struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
591 struct regmap *regmap = tsdata->regmap;
593 regmap_write(regmap, reg_addr->reg_threshold, tsdata->threshold);
594 regmap_write(regmap, reg_addr->reg_gain, tsdata->gain);
596 regmap_write(regmap, reg_addr->reg_offset, tsdata->offset);
598 regmap_write(regmap, reg_addr->reg_offset_x, tsdata->offset_x);
600 regmap_write(regmap, reg_addr->reg_offset_y, tsdata->offset_y);
603 tsdata->report_rate);
607 static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata)
609 struct i2c_client *client = tsdata->client;
614 if (tsdata->version != EDT_M06) {
622 if (!tsdata->raw_buffer) {
623 tsdata->raw_bufsize = tsdata->num_x * tsdata->num_y *
625 tsdata->raw_buffer = kzalloc(tsdata->raw_bufsize, GFP_KERNEL);
626 if (!tsdata->raw_buffer) {
633 error = regmap_write(tsdata->regmap, WORK_REGISTER_OPMODE, 0x03);
640 tsdata->factory_mode = true;
644 error = regmap_read(tsdata->regmap, FACTORY_REGISTER_OPMODE,
660 kfree(tsdata->raw_buffer);
661 tsdata->raw_buffer = NULL;
662 tsdata->factory_mode = false;
668 static int edt_ft5x06_work_mode(struct edt_ft5x06_ts_data *tsdata)
670 struct i2c_client *client = tsdata->client;
676 error = regmap_write(tsdata->regmap, FACTORY_REGISTER_OPMODE, 0x1);
683 tsdata->factory_mode = false;
688 error = regmap_read(tsdata->regmap, WORK_REGISTER_OPMODE, &val);
696 tsdata->factory_mode = true;
700 kfree(tsdata->raw_buffer);
701 tsdata->raw_buffer = NULL;
703 edt_ft5x06_restore_reg_parameters(tsdata);
711 struct edt_ft5x06_ts_data *tsdata = data;
713 *mode = tsdata->factory_mode;
720 struct edt_ft5x06_ts_data *tsdata = data;
726 mutex_lock(&tsdata->mutex);
728 if (mode != tsdata->factory_mode) {
729 retval = mode ? edt_ft5x06_factory_mode(tsdata) :
730 edt_ft5x06_work_mode(tsdata);
733 mutex_unlock(&tsdata->mutex);
745 struct edt_ft5x06_ts_data *tsdata = file->private_data;
746 struct i2c_client *client = tsdata->client;
754 if (*off < 0 || *off >= tsdata->raw_bufsize)
757 mutex_lock(&tsdata->mutex);
759 if (!tsdata->factory_mode || !tsdata->raw_buffer) {
764 error = regmap_write(tsdata->regmap, 0x08, 0x01);
773 error = regmap_read(tsdata->regmap, 0x08, &val);
792 rdbuf = tsdata->raw_buffer;
793 colbytes = tsdata->num_y * sizeof(u16);
795 for (i = 0; i < tsdata->num_x; i++) {
797 error = regmap_bulk_read(tsdata->regmap, 0xf5, rdbuf, colbytes);
804 read = min_t(size_t, count, tsdata->raw_bufsize - *off);
805 if (copy_to_user(buf, tsdata->raw_buffer + *off, read)) {
812 mutex_unlock(&tsdata->mutex);
821 static void edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata,
824 tsdata->debug_dir = debugfs_create_dir(debugfs_name, NULL);
826 debugfs_create_u16("num_x", S_IRUSR, tsdata->debug_dir, &tsdata->num_x);
827 debugfs_create_u16("num_y", S_IRUSR, tsdata->debug_dir, &tsdata->num_y);
830 tsdata->debug_dir, tsdata, &debugfs_mode_fops);
832 tsdata->debug_dir, tsdata, &debugfs_raw_data_fops);
835 static void edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
837 debugfs_remove_recursive(tsdata->debug_dir);
838 kfree(tsdata->raw_buffer);
843 static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata)
848 static void edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata,
853 static void edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
860 struct edt_ft5x06_ts_data *tsdata)
865 char *model_name = tsdata->name;
866 char *fw_version = tsdata->fw_version;
873 error = regmap_bulk_read(tsdata->regmap, 0xBB, rdbuf, EDT_NAME_LEN - 1);
882 tsdata->version = EDT_M06;
896 regmap_exit(tsdata->regmap);
897 tsdata->regmap = regmap_init_i2c(client,
899 if (IS_ERR(tsdata->regmap)) {
901 return PTR_ERR(tsdata->regmap);
904 tsdata->version = EDT_M12;
927 tsdata->version = GENERIC_FT;
929 error = regmap_bulk_read(tsdata->regmap, 0xA6, rdbuf, 2);
935 error = regmap_bulk_read(tsdata->regmap, 0xA8, rdbuf, 1);
950 tsdata->version = EDT_M09;
955 tsdata->version = EDT_M09;
963 tsdata->version = EV_FT;
964 error = regmap_bulk_read(tsdata->regmap, 0x53, rdbuf, 1);
983 struct edt_ft5x06_ts_data *tsdata)
985 struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
986 struct regmap *regmap = tsdata->regmap;
993 tsdata->threshold = val;
999 tsdata->gain = val;
1006 tsdata->offset = val;
1013 tsdata->offset_x = val;
1020 tsdata->offset_y = val;
1024 static void edt_ft5x06_ts_get_parameters(struct edt_ft5x06_ts_data *tsdata)
1026 struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
1027 struct regmap *regmap = tsdata->regmap;
1030 regmap_read(regmap, reg_addr->reg_threshold, &tsdata->threshold);
1031 regmap_read(regmap, reg_addr->reg_gain, &tsdata->gain);
1033 regmap_read(regmap, reg_addr->reg_offset, &tsdata->offset);
1035 regmap_read(regmap, reg_addr->reg_offset_x, &tsdata->offset_x);
1037 regmap_read(regmap, reg_addr->reg_offset_y, &tsdata->offset_y);
1040 &tsdata->report_rate);
1041 tsdata->num_x = EDT_DEFAULT_NUM_X;
1044 tsdata->num_x = val;
1046 tsdata->num_y = EDT_DEFAULT_NUM_Y;
1049 tsdata->num_y = val;
1053 static void edt_ft5x06_ts_set_tdata_parameters(struct edt_ft5x06_ts_data *tsdata)
1057 if (tsdata->version == EDT_M06) {
1058 tsdata->tdata_cmd = 0xf9;
1059 tsdata->tdata_offset = 5;
1060 tsdata->point_len = 4;
1063 tsdata->tdata_cmd = 0x0;
1064 tsdata->tdata_offset = 3;
1065 tsdata->point_len = 6;
1069 tsdata->tdata_len = tsdata->point_len * tsdata->max_support_points +
1070 tsdata->tdata_offset + crclen;
1073 static void edt_ft5x06_ts_set_regs(struct edt_ft5x06_ts_data *tsdata)
1075 struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
1077 switch (tsdata->version) {
1092 reg_addr->reg_report_rate = tsdata->version == EDT_M12 ?
1139 struct edt_ft5x06_ts_data *tsdata;
1148 tsdata = devm_kzalloc(&client->dev, sizeof(*tsdata), GFP_KERNEL);
1149 if (!tsdata) {
1154 tsdata->regmap = regmap_init_i2c(client, &edt_ft5x06_i2c_regmap_config);
1155 if (IS_ERR(tsdata->regmap)) {
1157 return PTR_ERR(tsdata->regmap);
1168 tsdata->max_support_points = chip_data->max_support_points;
1170 tsdata->vcc = devm_regulator_get(&client->dev, "vcc");
1171 if (IS_ERR(tsdata->vcc))
1172 return dev_err_probe(&client->dev, PTR_ERR(tsdata->vcc),
1175 tsdata->iovcc = devm_regulator_get(&client->dev, "iovcc");
1176 if (IS_ERR(tsdata->iovcc)) {
1177 error = PTR_ERR(tsdata->iovcc);
1184 error = regulator_enable(tsdata->iovcc);
1193 error = regulator_enable(tsdata->vcc);
1196 regulator_disable(tsdata->iovcc);
1202 tsdata);
1206 tsdata->reset_gpio = devm_gpiod_get_optional(&client->dev,
1208 if (IS_ERR(tsdata->reset_gpio)) {
1209 error = PTR_ERR(tsdata->reset_gpio);
1215 tsdata->wake_gpio = devm_gpiod_get_optional(&client->dev,
1217 if (IS_ERR(tsdata->wake_gpio)) {
1218 error = PTR_ERR(tsdata->wake_gpio);
1230 if (tsdata->reset_gpio)
1231 tsdata->suspend_mode = EDT_PMODE_POWEROFF;
1232 else if (tsdata->wake_gpio)
1233 tsdata->suspend_mode = EDT_PMODE_HIBERNATE;
1235 tsdata->suspend_mode = EDT_PMODE_NOT_SUPPORTED;
1237 if (tsdata->wake_gpio) {
1239 gpiod_set_value_cansleep(tsdata->wake_gpio, 1);
1243 if (tsdata->reset_gpio) {
1245 gpiod_set_value_cansleep(tsdata->reset_gpio, 0);
1255 mutex_init(&tsdata->mutex);
1256 tsdata->client = client;
1257 tsdata->input = input;
1258 tsdata->factory_mode = false;
1259 i2c_set_clientdata(client, tsdata);
1261 error = edt_ft5x06_ts_identify(client, tsdata);
1271 regmap_read(tsdata->regmap, 0x00, &val);
1273 edt_ft5x06_ts_set_tdata_parameters(tsdata);
1274 edt_ft5x06_ts_set_regs(tsdata);
1275 edt_ft5x06_ts_get_defaults(&client->dev, tsdata);
1276 edt_ft5x06_ts_get_parameters(tsdata);
1278 if (tsdata->reg_addr.reg_report_rate != NO_REGISTER &&
1281 if (tsdata->version == EDT_M06)
1282 tsdata->report_rate = clamp_val(report_rate, 30, 140);
1284 tsdata->report_rate = clamp_val(report_rate, 1, 255);
1286 if (report_rate != tsdata->report_rate)
1289 report_rate, tsdata->report_rate);
1291 if (tsdata->version == EDT_M06)
1292 tsdata->report_rate /= 10;
1294 regmap_write(tsdata->regmap, tsdata->reg_addr.reg_report_rate,
1295 tsdata->report_rate);
1300 tsdata->name, tsdata->fw_version, tsdata->num_x, tsdata->num_y);
1302 input->name = tsdata->name;
1307 0, tsdata->num_x * 64 - 1, 0, 0);
1309 0, tsdata->num_y * 64 - 1, 0, 0);
1311 touchscreen_parse_properties(input, true, &tsdata->prop);
1313 error = input_mt_init_slots(input, tsdata->max_support_points,
1327 client->name, tsdata);
1341 edt_ft5x06_ts_prepare_debugfs(tsdata, dev_driver_string(&client->dev));
1346 tsdata->wake_gpio ? desc_to_gpio(tsdata->wake_gpio) : -1,
1347 tsdata->reset_gpio ? desc_to_gpio(tsdata->reset_gpio) : -1);
1354 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
1356 edt_ft5x06_ts_teardown_debugfs(tsdata);
1357 regmap_exit(tsdata->regmap);
1363 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
1364 struct gpio_desc *reset_gpio = tsdata->reset_gpio;
1370 if (tsdata->suspend_mode == EDT_PMODE_NOT_SUPPORTED)
1374 ret = regmap_write(tsdata->regmap, PMOD_REGISTER_OPMODE,
1379 if (tsdata->suspend_mode == EDT_PMODE_HIBERNATE)
1388 disable_irq(tsdata->client->irq);
1393 ret = regulator_disable(tsdata->vcc);
1396 ret = regulator_disable(tsdata->iovcc);
1406 struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
1412 if (tsdata->suspend_mode == EDT_PMODE_NOT_SUPPORTED)
1415 if (tsdata->suspend_mode == EDT_PMODE_POWEROFF) {
1416 struct gpio_desc *reset_gpio = tsdata->reset_gpio;
1429 ret = regulator_enable(tsdata->iovcc);
1438 ret = regulator_enable(tsdata->vcc);
1441 regulator_disable(tsdata->iovcc);
1449 edt_ft5x06_restore_reg_parameters(tsdata);
1450 enable_irq(tsdata->client->irq);
1452 if (tsdata->factory_mode)
1453 ret = edt_ft5x06_factory_mode(tsdata);
1455 struct gpio_desc *wake_gpio = tsdata->wake_gpio;