Lines Matching refs:data

361 static void mxt_dump_message(struct mxt_data *data, u8 *message)  in mxt_dump_message()  argument
363 dev_dbg(&data->client->dev, "message: %*ph\n", in mxt_dump_message()
364 data->T5_msg_size, message); in mxt_dump_message()
367 static int mxt_wait_for_completion(struct mxt_data *data, in mxt_wait_for_completion() argument
371 struct device *dev = &data->client->dev; in mxt_wait_for_completion()
385 static int mxt_bootloader_read(struct mxt_data *data, in mxt_bootloader_read() argument
391 msg.addr = data->bootloader_addr; in mxt_bootloader_read()
392 msg.flags = data->client->flags & I2C_M_TEN; in mxt_bootloader_read()
397 ret = i2c_transfer(data->client->adapter, &msg, 1); in mxt_bootloader_read()
402 dev_err(&data->client->dev, "%s: i2c recv failed (%d)\n", in mxt_bootloader_read()
409 static int mxt_bootloader_write(struct mxt_data *data, in mxt_bootloader_write() argument
415 msg.addr = data->bootloader_addr; in mxt_bootloader_write()
416 msg.flags = data->client->flags & I2C_M_TEN; in mxt_bootloader_write()
420 ret = i2c_transfer(data->client->adapter, &msg, 1); in mxt_bootloader_write()
425 dev_err(&data->client->dev, "%s: i2c send failed (%d)\n", in mxt_bootloader_write()
432 static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry) in mxt_lookup_bootloader_address() argument
434 u8 appmode = data->client->addr; in mxt_lookup_bootloader_address()
441 if (retry || data->info.family_id >= 0xa2) { in mxt_lookup_bootloader_address()
454 dev_err(&data->client->dev, in mxt_lookup_bootloader_address()
460 data->bootloader_addr = bootloader; in mxt_lookup_bootloader_address()
464 static int mxt_probe_bootloader(struct mxt_data *data, bool alt_address) in mxt_probe_bootloader() argument
466 struct device *dev = &data->client->dev; in mxt_probe_bootloader()
471 error = mxt_lookup_bootloader_address(data, alt_address); in mxt_probe_bootloader()
475 error = mxt_bootloader_read(data, &val, 1); in mxt_probe_bootloader()
488 static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val) in mxt_get_bootloader_version() argument
490 struct device *dev = &data->client->dev; in mxt_get_bootloader_version()
494 if (mxt_bootloader_read(data, &buf[0], 3) != 0) { in mxt_get_bootloader_version()
509 static int mxt_check_bootloader(struct mxt_data *data, unsigned int state, in mxt_check_bootloader() argument
512 struct device *dev = &data->client->dev; in mxt_check_bootloader()
524 ret = mxt_wait_for_completion(data, &data->bl_completion, in mxt_check_bootloader()
538 ret = mxt_bootloader_read(data, &val, 1); in mxt_check_bootloader()
543 val = mxt_get_bootloader_version(data, val); in mxt_check_bootloader()
572 static int mxt_send_bootloader_cmd(struct mxt_data *data, bool unlock) in mxt_send_bootloader_cmd() argument
585 ret = mxt_bootloader_write(data, buf, 2); in mxt_send_bootloader_cmd()
663 mxt_get_object(struct mxt_data *data, u8 type) in mxt_get_object() argument
668 for (i = 0; i < data->info.object_num; i++) { in mxt_get_object()
669 object = data->object_table + i; in mxt_get_object()
674 dev_warn(&data->client->dev, "Invalid object type T%u\n", type); in mxt_get_object()
678 static void mxt_proc_t6_messages(struct mxt_data *data, u8 *msg) in mxt_proc_t6_messages() argument
680 struct device *dev = &data->client->dev; in mxt_proc_t6_messages()
684 complete(&data->crc_completion); in mxt_proc_t6_messages()
686 if (crc != data->config_crc) { in mxt_proc_t6_messages()
687 data->config_crc = crc; in mxt_proc_t6_messages()
693 complete(&data->reset_completion); in mxt_proc_t6_messages()
696 if (status != data->t6_status) in mxt_proc_t6_messages()
708 data->t6_status = status; in mxt_proc_t6_messages()
711 static int mxt_write_object(struct mxt_data *data, in mxt_write_object() argument
717 object = mxt_get_object(data, type); in mxt_write_object()
722 return mxt_write_reg(data->client, reg + offset, val); in mxt_write_object()
725 static void mxt_input_button(struct mxt_data *data, u8 *message) in mxt_input_button() argument
727 struct input_dev *input = data->input_dev; in mxt_input_button()
728 const struct mxt_platform_data *pdata = data->pdata; in mxt_input_button()
741 static void mxt_input_sync(struct mxt_data *data) in mxt_input_sync() argument
743 input_mt_report_pointer_emulation(data->input_dev, in mxt_input_sync()
744 data->pdata->t19_num_keys); in mxt_input_sync()
745 input_sync(data->input_dev); in mxt_input_sync()
748 static void mxt_proc_t9_message(struct mxt_data *data, u8 *message) in mxt_proc_t9_message() argument
750 struct device *dev = &data->client->dev; in mxt_proc_t9_message()
751 struct input_dev *input_dev = data->input_dev; in mxt_proc_t9_message()
759 id = message[0] - data->T9_reportid_min; in mxt_proc_t9_message()
765 if (data->max_x < 1024) in mxt_proc_t9_message()
767 if (data->max_y < 1024) in mxt_proc_t9_message()
797 mxt_input_sync(data); in mxt_proc_t9_message()
811 data->update_input = true; in mxt_proc_t9_message()
814 static void mxt_proc_t100_message(struct mxt_data *data, u8 *message) in mxt_proc_t100_message() argument
816 struct device *dev = &data->client->dev; in mxt_proc_t100_message()
817 struct input_dev *input_dev = data->input_dev; in mxt_proc_t100_message()
829 id = message[0] - data->T100_reportid_min - 2; in mxt_proc_t100_message()
847 if (data->t100_aux_vect) in mxt_proc_t100_message()
848 orientation = message[data->t100_aux_vect]; in mxt_proc_t100_message()
857 if (data->t100_aux_area) in mxt_proc_t100_message()
858 major = message[data->t100_aux_area]; in mxt_proc_t100_message()
860 if (data->t100_aux_ampl) in mxt_proc_t100_message()
861 pressure = message[data->t100_aux_ampl]; in mxt_proc_t100_message()
863 if (data->t100_aux_vect) in mxt_proc_t100_message()
864 orientation = message[data->t100_aux_vect]; in mxt_proc_t100_message()
877 if (data->t100_aux_ampl) in mxt_proc_t100_message()
878 pressure = message[data->t100_aux_ampl]; in mxt_proc_t100_message()
919 data->update_input = true; in mxt_proc_t100_message()
922 static int mxt_proc_message(struct mxt_data *data, u8 *message) in mxt_proc_message() argument
929 if (report_id == data->T6_reportid) { in mxt_proc_message()
930 mxt_proc_t6_messages(data, message); in mxt_proc_message()
931 } else if (!data->input_dev) { in mxt_proc_message()
936 mxt_dump_message(data, message); in mxt_proc_message()
937 } else if (report_id >= data->T9_reportid_min && in mxt_proc_message()
938 report_id <= data->T9_reportid_max) { in mxt_proc_message()
939 mxt_proc_t9_message(data, message); in mxt_proc_message()
940 } else if (report_id >= data->T100_reportid_min && in mxt_proc_message()
941 report_id <= data->T100_reportid_max) { in mxt_proc_message()
942 mxt_proc_t100_message(data, message); in mxt_proc_message()
943 } else if (report_id == data->T19_reportid) { in mxt_proc_message()
944 mxt_input_button(data, message); in mxt_proc_message()
945 data->update_input = true; in mxt_proc_message()
947 mxt_dump_message(data, message); in mxt_proc_message()
953 static int mxt_read_and_process_messages(struct mxt_data *data, u8 count) in mxt_read_and_process_messages() argument
955 struct device *dev = &data->client->dev; in mxt_read_and_process_messages()
961 if (count > data->max_reportid) in mxt_read_and_process_messages()
965 ret = __mxt_read_reg(data->client, data->T5_address, in mxt_read_and_process_messages()
966 data->T5_msg_size * count, data->msg_buf); in mxt_read_and_process_messages()
973 ret = mxt_proc_message(data, in mxt_read_and_process_messages()
974 data->msg_buf + data->T5_msg_size * i); in mxt_read_and_process_messages()
984 static irqreturn_t mxt_process_messages_t44(struct mxt_data *data) in mxt_process_messages_t44() argument
986 struct device *dev = &data->client->dev; in mxt_process_messages_t44()
991 ret = __mxt_read_reg(data->client, data->T44_address, in mxt_process_messages_t44()
992 data->T5_msg_size + 1, data->msg_buf); in mxt_process_messages_t44()
998 count = data->msg_buf[0]; in mxt_process_messages_t44()
1008 } else if (count > data->max_reportid) { in mxt_process_messages_t44()
1010 count = data->max_reportid; in mxt_process_messages_t44()
1014 ret = mxt_proc_message(data, data->msg_buf + 1); in mxt_process_messages_t44()
1024 ret = mxt_read_and_process_messages(data, num_left); in mxt_process_messages_t44()
1032 if (data->update_input) { in mxt_process_messages_t44()
1033 mxt_input_sync(data); in mxt_process_messages_t44()
1034 data->update_input = false; in mxt_process_messages_t44()
1040 static int mxt_process_messages_until_invalid(struct mxt_data *data) in mxt_process_messages_until_invalid() argument
1042 struct device *dev = &data->client->dev; in mxt_process_messages_until_invalid()
1046 count = data->max_reportid; in mxt_process_messages_until_invalid()
1050 read = mxt_read_and_process_messages(data, count); in mxt_process_messages_until_invalid()
1055 if (data->update_input) { in mxt_process_messages_until_invalid()
1056 mxt_input_sync(data); in mxt_process_messages_until_invalid()
1057 data->update_input = false; in mxt_process_messages_until_invalid()
1064 static irqreturn_t mxt_process_messages(struct mxt_data *data) in mxt_process_messages() argument
1067 u8 count = data->last_message_count; in mxt_process_messages()
1069 if (count < 1 || count > data->max_reportid) in mxt_process_messages()
1073 total_handled = mxt_read_and_process_messages(data, count + 1); in mxt_process_messages()
1082 num_handled = mxt_read_and_process_messages(data, 2); in mxt_process_messages()
1090 } while (total_handled < data->num_touchids); in mxt_process_messages()
1093 data->last_message_count = total_handled; in mxt_process_messages()
1095 if (data->update_input) { in mxt_process_messages()
1096 mxt_input_sync(data); in mxt_process_messages()
1097 data->update_input = false; in mxt_process_messages()
1105 struct mxt_data *data = dev_id; in mxt_interrupt() local
1107 if (data->in_bootloader) { in mxt_interrupt()
1109 complete(&data->bl_completion); in mxt_interrupt()
1113 if (!data->object_table) in mxt_interrupt()
1116 if (data->T44_address) { in mxt_interrupt()
1117 return mxt_process_messages_t44(data); in mxt_interrupt()
1119 return mxt_process_messages(data); in mxt_interrupt()
1123 static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset, in mxt_t6_command() argument
1131 reg = data->T6_address + cmd_offset; in mxt_t6_command()
1133 ret = mxt_write_reg(data->client, reg, value); in mxt_t6_command()
1142 ret = __mxt_read_reg(data->client, reg, 1, &command_register); in mxt_t6_command()
1148 dev_err(&data->client->dev, "Command failed!\n"); in mxt_t6_command()
1155 static int mxt_soft_reset(struct mxt_data *data) in mxt_soft_reset() argument
1157 struct device *dev = &data->client->dev; in mxt_soft_reset()
1162 reinit_completion(&data->reset_completion); in mxt_soft_reset()
1164 ret = mxt_t6_command(data, MXT_COMMAND_RESET, MXT_RESET_VALUE, false); in mxt_soft_reset()
1168 ret = mxt_wait_for_completion(data, &data->reset_completion, in mxt_soft_reset()
1176 static void mxt_update_crc(struct mxt_data *data, u8 cmd, u8 value) in mxt_update_crc() argument
1182 data->config_crc = 0; in mxt_update_crc()
1183 reinit_completion(&data->crc_completion); in mxt_update_crc()
1185 mxt_t6_command(data, cmd, value, true); in mxt_update_crc()
1191 mxt_wait_for_completion(data, &data->crc_completion, MXT_CRC_TIMEOUT); in mxt_update_crc()
1233 static int mxt_prepare_cfg_mem(struct mxt_data *data, in mxt_prepare_cfg_mem() argument
1240 struct device *dev = &data->client->dev; in mxt_prepare_cfg_mem()
1251 ret = sscanf(cfg->data + data_pos, "%x %x %x%n", in mxt_prepare_cfg_mem()
1262 object = mxt_get_object(data, type); in mxt_prepare_cfg_mem()
1266 ret = sscanf(cfg->data + data_pos, "%hhx%n", in mxt_prepare_cfg_mem()
1308 ret = sscanf(cfg->data + data_pos, "%hhx%n", in mxt_prepare_cfg_mem()
1336 static int mxt_upload_cfg_mem(struct mxt_data *data, unsigned int cfg_start, in mxt_upload_cfg_mem() argument
1349 error = __mxt_write_reg(data->client, in mxt_upload_cfg_mem()
1353 dev_err(&data->client->dev, in mxt_upload_cfg_mem()
1383 static int mxt_update_cfg(struct mxt_data *data, const struct firmware *cfg) in mxt_update_cfg() argument
1385 struct device *dev = &data->client->dev; in mxt_update_cfg()
1396 mxt_update_crc(data, MXT_COMMAND_REPORTALL, 1); in mxt_update_cfg()
1398 if (strncmp(cfg->data, MXT_CFG_MAGIC, strlen(MXT_CFG_MAGIC))) { in mxt_update_cfg()
1407 ret = sscanf(cfg->data + data_pos, "%hhx%n", in mxt_update_cfg()
1418 if (cfg_info.family_id != data->info.family_id) { in mxt_update_cfg()
1423 if (cfg_info.variant_id != data->info.variant_id) { in mxt_update_cfg()
1429 ret = sscanf(cfg->data + data_pos, "%x%n", &info_crc, &offset); in mxt_update_cfg()
1436 ret = sscanf(cfg->data + data_pos, "%x%n", &config_crc, &offset); in mxt_update_cfg()
1449 if (info_crc == data->info_crc) { in mxt_update_cfg()
1450 if (config_crc == 0 || data->config_crc == 0) { in mxt_update_cfg()
1452 } else if (config_crc == data->config_crc) { in mxt_update_cfg()
1454 data->config_crc); in mxt_update_cfg()
1458 data->config_crc, config_crc); in mxt_update_cfg()
1463 data->info_crc, info_crc); in mxt_update_cfg()
1468 data->info.object_num * sizeof(struct mxt_object) + in mxt_update_cfg()
1470 config_mem_size = data->mem_size - cfg_start_ofs; in mxt_update_cfg()
1477 ret = mxt_prepare_cfg_mem(data, cfg, data_pos, cfg_start_ofs, in mxt_update_cfg()
1483 if (data->T7_address < cfg_start_ofs) { in mxt_update_cfg()
1485 data->T7_address, cfg_start_ofs); in mxt_update_cfg()
1491 data->T7_address - cfg_start_ofs, in mxt_update_cfg()
1498 ret = mxt_upload_cfg_mem(data, cfg_start_ofs, in mxt_update_cfg()
1503 mxt_update_crc(data, MXT_COMMAND_BACKUPNV, MXT_BACKUP_VALUE); in mxt_update_cfg()
1505 ret = mxt_soft_reset(data); in mxt_update_cfg()
1516 static int mxt_acquire_irq(struct mxt_data *data) in mxt_acquire_irq() argument
1520 enable_irq(data->irq); in mxt_acquire_irq()
1522 error = mxt_process_messages_until_invalid(data); in mxt_acquire_irq()
1529 static int mxt_get_info(struct mxt_data *data) in mxt_get_info() argument
1531 struct i2c_client *client = data->client; in mxt_get_info()
1532 struct mxt_info *info = &data->info; in mxt_get_info()
1543 static void mxt_free_input_device(struct mxt_data *data) in mxt_free_input_device() argument
1545 if (data->input_dev) { in mxt_free_input_device()
1546 input_unregister_device(data->input_dev); in mxt_free_input_device()
1547 data->input_dev = NULL; in mxt_free_input_device()
1551 static void mxt_free_object_table(struct mxt_data *data) in mxt_free_object_table() argument
1553 kfree(data->object_table); in mxt_free_object_table()
1554 data->object_table = NULL; in mxt_free_object_table()
1555 kfree(data->msg_buf); in mxt_free_object_table()
1556 data->msg_buf = NULL; in mxt_free_object_table()
1557 data->T5_address = 0; in mxt_free_object_table()
1558 data->T5_msg_size = 0; in mxt_free_object_table()
1559 data->T6_reportid = 0; in mxt_free_object_table()
1560 data->T7_address = 0; in mxt_free_object_table()
1561 data->T9_reportid_min = 0; in mxt_free_object_table()
1562 data->T9_reportid_max = 0; in mxt_free_object_table()
1563 data->T19_reportid = 0; in mxt_free_object_table()
1564 data->T44_address = 0; in mxt_free_object_table()
1565 data->T100_reportid_min = 0; in mxt_free_object_table()
1566 data->T100_reportid_max = 0; in mxt_free_object_table()
1567 data->max_reportid = 0; in mxt_free_object_table()
1570 static int mxt_get_object_table(struct mxt_data *data) in mxt_get_object_table() argument
1572 struct i2c_client *client = data->client; in mxt_get_object_table()
1580 table_size = data->info.object_num * sizeof(struct mxt_object); in mxt_get_object_table()
1583 dev_err(&data->client->dev, "Failed to allocate memory\n"); in mxt_get_object_table()
1596 data->mem_size = 0; in mxt_get_object_table()
1597 for (i = 0; i < data->info.object_num; i++) { in mxt_get_object_table()
1613 dev_dbg(&data->client->dev, in mxt_get_object_table()
1621 if (data->info.family_id == 0x80 && in mxt_get_object_table()
1622 data->info.version < 0x20) { in mxt_get_object_table()
1628 data->T5_msg_size = mxt_obj_size(object); in mxt_get_object_table()
1631 data->T5_msg_size = mxt_obj_size(object) - 1; in mxt_get_object_table()
1633 data->T5_address = object->start_address; in mxt_get_object_table()
1636 data->T6_reportid = min_id; in mxt_get_object_table()
1637 data->T6_address = object->start_address; in mxt_get_object_table()
1640 data->T7_address = object->start_address; in mxt_get_object_table()
1643 data->multitouch = MXT_TOUCH_MULTI_T9; in mxt_get_object_table()
1644 data->T9_reportid_min = min_id; in mxt_get_object_table()
1645 data->T9_reportid_max = max_id; in mxt_get_object_table()
1646 data->num_touchids = object->num_report_ids in mxt_get_object_table()
1650 data->T44_address = object->start_address; in mxt_get_object_table()
1653 data->T19_reportid = min_id; in mxt_get_object_table()
1656 data->multitouch = MXT_TOUCH_MULTITOUCHSCREEN_T100; in mxt_get_object_table()
1657 data->T100_reportid_min = min_id; in mxt_get_object_table()
1658 data->T100_reportid_max = max_id; in mxt_get_object_table()
1660 data->num_touchids = object->num_report_ids - 2; in mxt_get_object_table()
1667 if (end_address >= data->mem_size) in mxt_get_object_table()
1668 data->mem_size = end_address + 1; in mxt_get_object_table()
1672 data->max_reportid = reportid; in mxt_get_object_table()
1675 if (data->T44_address && (data->T5_address != data->T44_address + 1)) { in mxt_get_object_table()
1681 data->msg_buf = kcalloc(data->max_reportid, in mxt_get_object_table()
1682 data->T5_msg_size, GFP_KERNEL); in mxt_get_object_table()
1683 if (!data->msg_buf) { in mxt_get_object_table()
1689 data->object_table = object_table; in mxt_get_object_table()
1694 mxt_free_object_table(data); in mxt_get_object_table()
1698 static int mxt_read_t9_resolution(struct mxt_data *data) in mxt_read_t9_resolution() argument
1700 struct i2c_client *client = data->client; in mxt_read_t9_resolution()
1706 object = mxt_get_object(data, MXT_TOUCH_MULTI_T9); in mxt_read_t9_resolution()
1733 data->max_x = range.y; in mxt_read_t9_resolution()
1734 data->max_y = range.x; in mxt_read_t9_resolution()
1736 data->max_x = range.x; in mxt_read_t9_resolution()
1737 data->max_y = range.y; in mxt_read_t9_resolution()
1741 "Touchscreen size X%uY%u\n", data->max_x, data->max_y); in mxt_read_t9_resolution()
1746 static int mxt_read_t100_config(struct mxt_data *data) in mxt_read_t100_config() argument
1748 struct i2c_client *client = data->client; in mxt_read_t100_config()
1755 object = mxt_get_object(data, MXT_TOUCH_MULTITOUCHSCREEN_T100); in mxt_read_t100_config()
1795 data->max_x = range_y; in mxt_read_t100_config()
1796 data->max_y = range_x; in mxt_read_t100_config()
1798 data->max_x = range_x; in mxt_read_t100_config()
1799 data->max_y = range_y; in mxt_read_t100_config()
1806 data->t100_aux_vect = aux++; in mxt_read_t100_config()
1809 data->t100_aux_ampl = aux++; in mxt_read_t100_config()
1812 data->t100_aux_area = aux++; in mxt_read_t100_config()
1816 data->t100_aux_vect, data->t100_aux_ampl, data->t100_aux_area); in mxt_read_t100_config()
1819 "T100 Touchscreen size X%uY%u\n", data->max_x, data->max_y); in mxt_read_t100_config()
1828 struct mxt_data *data) in mxt_set_up_as_touchpad() argument
1830 const struct mxt_platform_data *pdata = data->pdata; in mxt_set_up_as_touchpad()
1850 static int mxt_initialize_input_device(struct mxt_data *data) in mxt_initialize_input_device() argument
1852 const struct mxt_platform_data *pdata = data->pdata; in mxt_initialize_input_device()
1853 struct device *dev = &data->client->dev; in mxt_initialize_input_device()
1859 switch (data->multitouch) { in mxt_initialize_input_device()
1861 num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1; in mxt_initialize_input_device()
1862 error = mxt_read_t9_resolution(data); in mxt_initialize_input_device()
1868 num_mt_slots = data->num_touchids; in mxt_initialize_input_device()
1869 error = mxt_read_t100_config(data); in mxt_initialize_input_device()
1886 input_dev->phys = data->phys; in mxt_initialize_input_device()
1895 input_set_abs_params(input_dev, ABS_X, 0, data->max_x, 0, 0); in mxt_initialize_input_device()
1896 input_set_abs_params(input_dev, ABS_Y, 0, data->max_y, 0, 0); in mxt_initialize_input_device()
1898 if (data->multitouch == MXT_TOUCH_MULTI_T9 || in mxt_initialize_input_device()
1899 (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && in mxt_initialize_input_device()
1900 data->t100_aux_ampl)) { in mxt_initialize_input_device()
1906 mxt_set_up_as_touchpad(input_dev, data); in mxt_initialize_input_device()
1917 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100) { in mxt_initialize_input_device()
1927 0, data->max_x, 0, 0); in mxt_initialize_input_device()
1929 0, data->max_y, 0, 0); in mxt_initialize_input_device()
1931 if (data->multitouch == MXT_TOUCH_MULTI_T9 || in mxt_initialize_input_device()
1932 (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && in mxt_initialize_input_device()
1933 data->t100_aux_area)) { in mxt_initialize_input_device()
1938 if (data->multitouch == MXT_TOUCH_MULTI_T9 || in mxt_initialize_input_device()
1939 (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && in mxt_initialize_input_device()
1940 data->t100_aux_ampl)) { in mxt_initialize_input_device()
1945 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && in mxt_initialize_input_device()
1946 data->t100_aux_vect) { in mxt_initialize_input_device()
1951 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && in mxt_initialize_input_device()
1952 data->t100_aux_ampl) { in mxt_initialize_input_device()
1957 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && in mxt_initialize_input_device()
1958 data->t100_aux_vect) { in mxt_initialize_input_device()
1963 input_set_drvdata(input_dev, data); in mxt_initialize_input_device()
1971 data->input_dev = input_dev; in mxt_initialize_input_device()
1980 static int mxt_configure_objects(struct mxt_data *data,
1989 static int mxt_initialize(struct mxt_data *data) in mxt_initialize() argument
1991 struct i2c_client *client = data->client; in mxt_initialize()
1996 error = mxt_get_info(data); in mxt_initialize()
2001 error = mxt_probe_bootloader(data, false); in mxt_initialize()
2004 error = mxt_probe_bootloader(data, true); in mxt_initialize()
2018 data->in_bootloader = true; in mxt_initialize()
2023 mxt_send_bootloader_cmd(data, false); in mxt_initialize()
2028 error = mxt_get_object_table(data); in mxt_initialize()
2034 error = mxt_acquire_irq(data); in mxt_initialize()
2039 &client->dev, GFP_KERNEL, data, in mxt_initialize()
2050 mxt_free_object_table(data); in mxt_initialize()
2054 static int mxt_configure_objects(struct mxt_data *data, in mxt_configure_objects() argument
2057 struct device *dev = &data->client->dev; in mxt_configure_objects()
2058 struct mxt_info *info = &data->info; in mxt_configure_objects()
2062 error = mxt_update_cfg(data, cfg); in mxt_configure_objects()
2067 if (data->multitouch) { in mxt_configure_objects()
2068 error = mxt_initialize_input_device(data); in mxt_configure_objects()
2087 struct mxt_data *data = dev_get_drvdata(dev); in mxt_fw_version_show() local
2088 struct mxt_info *info = &data->info; in mxt_fw_version_show()
2097 struct mxt_data *data = dev_get_drvdata(dev); in mxt_hw_version_show() local
2098 struct mxt_info *info = &data->info; in mxt_hw_version_show()
2124 struct mxt_data *data = dev_get_drvdata(dev); in mxt_object_show() local
2137 for (i = 0; i < data->info.object_num; i++) { in mxt_object_show()
2138 object = data->object_table + i; in mxt_object_show()
2150 error = __mxt_read_reg(data->client, addr, size, obuf); in mxt_object_show()
2170 c = *(fw->data + pos); in mxt_check_firmware_format()
2189 struct mxt_data *data = dev_get_drvdata(dev); in mxt_load_fw() local
2208 if (!data->in_bootloader) { in mxt_load_fw()
2210 data->in_bootloader = true; in mxt_load_fw()
2212 ret = mxt_t6_command(data, MXT_COMMAND_RESET, in mxt_load_fw()
2220 ret = mxt_lookup_bootloader_address(data, 0); in mxt_load_fw()
2224 mxt_free_input_device(data); in mxt_load_fw()
2225 mxt_free_object_table(data); in mxt_load_fw()
2227 enable_irq(data->irq); in mxt_load_fw()
2230 reinit_completion(&data->bl_completion); in mxt_load_fw()
2232 ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD, false); in mxt_load_fw()
2235 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, false); in mxt_load_fw()
2242 ret = mxt_send_bootloader_cmd(data, true); in mxt_load_fw()
2248 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, true); in mxt_load_fw()
2252 frame_size = ((*(fw->data + pos) << 8) | *(fw->data + pos + 1)); in mxt_load_fw()
2258 ret = mxt_bootloader_write(data, fw->data + pos, frame_size); in mxt_load_fw()
2262 ret = mxt_check_bootloader(data, MXT_FRAME_CRC_PASS, true); in mxt_load_fw()
2285 ret = mxt_wait_for_completion(data, &data->bl_completion, in mxt_load_fw()
2297 mxt_wait_for_completion(data, &data->bl_completion, MXT_FW_RESET_TIME); in mxt_load_fw()
2299 data->in_bootloader = false; in mxt_load_fw()
2302 disable_irq(data->irq); in mxt_load_fw()
2312 struct mxt_data *data = dev_get_drvdata(dev); in mxt_update_fw_store() local
2322 error = mxt_initialize(data); in mxt_update_fw_store()
2347 static void mxt_start(struct mxt_data *data) in mxt_start() argument
2350 mxt_write_object(data, data->multitouch, MXT_TOUCH_CTRL, 0x83); in mxt_start()
2353 static void mxt_stop(struct mxt_data *data) in mxt_stop() argument
2356 mxt_write_object(data, data->multitouch, MXT_TOUCH_CTRL, 0); in mxt_stop()
2361 struct mxt_data *data = input_get_drvdata(dev); in mxt_input_open() local
2363 mxt_start(data); in mxt_input_open()
2370 struct mxt_data *data = input_get_drvdata(dev); in mxt_input_close() local
2372 mxt_stop(data); in mxt_input_close()
2534 struct mxt_data *data; in mxt_probe() local
2542 data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL); in mxt_probe()
2543 if (!data) { in mxt_probe()
2548 snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0", in mxt_probe()
2551 data->client = client; in mxt_probe()
2552 data->pdata = pdata; in mxt_probe()
2553 data->irq = client->irq; in mxt_probe()
2554 i2c_set_clientdata(client, data); in mxt_probe()
2556 init_completion(&data->bl_completion); in mxt_probe()
2557 init_completion(&data->reset_completion); in mxt_probe()
2558 init_completion(&data->crc_completion); in mxt_probe()
2562 client->name, data); in mxt_probe()
2570 error = mxt_initialize(data); in mxt_probe()
2584 mxt_free_input_device(data); in mxt_probe()
2585 mxt_free_object_table(data); in mxt_probe()
2587 free_irq(client->irq, data); in mxt_probe()
2589 kfree(data); in mxt_probe()
2595 struct mxt_data *data = i2c_get_clientdata(client); in mxt_remove() local
2598 free_irq(data->irq, data); in mxt_remove()
2599 mxt_free_input_device(data); in mxt_remove()
2600 mxt_free_object_table(data); in mxt_remove()
2601 kfree(data); in mxt_remove()
2609 struct mxt_data *data = i2c_get_clientdata(client); in mxt_suspend() local
2610 struct input_dev *input_dev = data->input_dev; in mxt_suspend()
2615 mxt_stop(data); in mxt_suspend()
2625 struct mxt_data *data = i2c_get_clientdata(client); in mxt_resume() local
2626 struct input_dev *input_dev = data->input_dev; in mxt_resume()
2628 mxt_soft_reset(data); in mxt_resume()
2633 mxt_start(data); in mxt_resume()