Lines Matching refs:data
302 static void mxt_dump_message(struct mxt_data *data, u8 *message) in mxt_dump_message() argument
304 dev_dbg(&data->client->dev, "message: %*ph\n", in mxt_dump_message()
305 data->T5_msg_size, message); in mxt_dump_message()
308 static int mxt_wait_for_completion(struct mxt_data *data, in mxt_wait_for_completion() argument
312 struct device *dev = &data->client->dev; in mxt_wait_for_completion()
326 static int mxt_bootloader_read(struct mxt_data *data, in mxt_bootloader_read() argument
332 msg.addr = data->bootloader_addr; in mxt_bootloader_read()
333 msg.flags = data->client->flags & I2C_M_TEN; in mxt_bootloader_read()
338 ret = i2c_transfer(data->client->adapter, &msg, 1); in mxt_bootloader_read()
343 dev_err(&data->client->dev, "%s: i2c recv failed (%d)\n", in mxt_bootloader_read()
350 static int mxt_bootloader_write(struct mxt_data *data, in mxt_bootloader_write() argument
356 msg.addr = data->bootloader_addr; in mxt_bootloader_write()
357 msg.flags = data->client->flags & I2C_M_TEN; in mxt_bootloader_write()
361 ret = i2c_transfer(data->client->adapter, &msg, 1); in mxt_bootloader_write()
366 dev_err(&data->client->dev, "%s: i2c send failed (%d)\n", in mxt_bootloader_write()
373 static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry) in mxt_lookup_bootloader_address() argument
375 u8 appmode = data->client->addr; in mxt_lookup_bootloader_address()
382 if (retry || data->info.family_id >= 0xa2) { in mxt_lookup_bootloader_address()
395 dev_err(&data->client->dev, in mxt_lookup_bootloader_address()
401 data->bootloader_addr = bootloader; in mxt_lookup_bootloader_address()
405 static int mxt_probe_bootloader(struct mxt_data *data, bool alt_address) in mxt_probe_bootloader() argument
407 struct device *dev = &data->client->dev; in mxt_probe_bootloader()
412 error = mxt_lookup_bootloader_address(data, alt_address); in mxt_probe_bootloader()
416 error = mxt_bootloader_read(data, &val, 1); in mxt_probe_bootloader()
429 static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val) in mxt_get_bootloader_version() argument
431 struct device *dev = &data->client->dev; in mxt_get_bootloader_version()
435 if (mxt_bootloader_read(data, &buf[0], 3) != 0) { in mxt_get_bootloader_version()
450 static int mxt_check_bootloader(struct mxt_data *data, unsigned int state, in mxt_check_bootloader() argument
453 struct device *dev = &data->client->dev; in mxt_check_bootloader()
465 ret = mxt_wait_for_completion(data, &data->bl_completion, in mxt_check_bootloader()
479 ret = mxt_bootloader_read(data, &val, 1); in mxt_check_bootloader()
484 val = mxt_get_bootloader_version(data, val); in mxt_check_bootloader()
513 static int mxt_send_bootloader_cmd(struct mxt_data *data, bool unlock) in mxt_send_bootloader_cmd() argument
526 ret = mxt_bootloader_write(data, buf, 2); in mxt_send_bootloader_cmd()
604 mxt_get_object(struct mxt_data *data, u8 type) in mxt_get_object() argument
609 for (i = 0; i < data->info.object_num; i++) { in mxt_get_object()
610 object = data->object_table + i; in mxt_get_object()
615 dev_warn(&data->client->dev, "Invalid object type T%u\n", type); in mxt_get_object()
619 static void mxt_proc_t6_messages(struct mxt_data *data, u8 *msg) in mxt_proc_t6_messages() argument
621 struct device *dev = &data->client->dev; in mxt_proc_t6_messages()
625 complete(&data->crc_completion); in mxt_proc_t6_messages()
627 if (crc != data->config_crc) { in mxt_proc_t6_messages()
628 data->config_crc = crc; in mxt_proc_t6_messages()
634 complete(&data->reset_completion); in mxt_proc_t6_messages()
637 if (status != data->t6_status) in mxt_proc_t6_messages()
649 data->t6_status = status; in mxt_proc_t6_messages()
652 static int mxt_write_object(struct mxt_data *data, in mxt_write_object() argument
658 object = mxt_get_object(data, type); in mxt_write_object()
663 return mxt_write_reg(data->client, reg + offset, val); in mxt_write_object()
666 static void mxt_input_button(struct mxt_data *data, u8 *message) in mxt_input_button() argument
668 struct input_dev *input = data->input_dev; in mxt_input_button()
669 const struct mxt_platform_data *pdata = data->pdata; in mxt_input_button()
682 static void mxt_input_sync(struct mxt_data *data) in mxt_input_sync() argument
684 input_mt_report_pointer_emulation(data->input_dev, in mxt_input_sync()
685 data->pdata->t19_num_keys); in mxt_input_sync()
686 input_sync(data->input_dev); in mxt_input_sync()
689 static void mxt_proc_t9_message(struct mxt_data *data, u8 *message) in mxt_proc_t9_message() argument
691 struct device *dev = &data->client->dev; in mxt_proc_t9_message()
692 struct input_dev *input_dev = data->input_dev; in mxt_proc_t9_message()
700 id = message[0] - data->T9_reportid_min; in mxt_proc_t9_message()
706 if (data->max_x < 1024) in mxt_proc_t9_message()
708 if (data->max_y < 1024) in mxt_proc_t9_message()
738 mxt_input_sync(data); in mxt_proc_t9_message()
752 data->update_input = true; in mxt_proc_t9_message()
755 static void mxt_proc_t100_message(struct mxt_data *data, u8 *message) in mxt_proc_t100_message() argument
757 struct device *dev = &data->client->dev; in mxt_proc_t100_message()
758 struct input_dev *input_dev = data->input_dev; in mxt_proc_t100_message()
770 id = message[0] - data->T100_reportid_min - 2; in mxt_proc_t100_message()
788 if (data->t100_aux_vect) in mxt_proc_t100_message()
789 orientation = message[data->t100_aux_vect]; in mxt_proc_t100_message()
798 if (data->t100_aux_area) in mxt_proc_t100_message()
799 major = message[data->t100_aux_area]; in mxt_proc_t100_message()
801 if (data->t100_aux_ampl) in mxt_proc_t100_message()
802 pressure = message[data->t100_aux_ampl]; in mxt_proc_t100_message()
804 if (data->t100_aux_vect) in mxt_proc_t100_message()
805 orientation = message[data->t100_aux_vect]; in mxt_proc_t100_message()
818 if (data->t100_aux_ampl) in mxt_proc_t100_message()
819 pressure = message[data->t100_aux_ampl]; in mxt_proc_t100_message()
860 data->update_input = true; in mxt_proc_t100_message()
863 static int mxt_proc_message(struct mxt_data *data, u8 *message) in mxt_proc_message() argument
870 if (report_id == data->T6_reportid) { in mxt_proc_message()
871 mxt_proc_t6_messages(data, message); in mxt_proc_message()
872 } else if (!data->input_dev) { in mxt_proc_message()
877 mxt_dump_message(data, message); in mxt_proc_message()
878 } else if (report_id >= data->T9_reportid_min && in mxt_proc_message()
879 report_id <= data->T9_reportid_max) { in mxt_proc_message()
880 mxt_proc_t9_message(data, message); in mxt_proc_message()
881 } else if (report_id >= data->T100_reportid_min && in mxt_proc_message()
882 report_id <= data->T100_reportid_max) { in mxt_proc_message()
883 mxt_proc_t100_message(data, message); in mxt_proc_message()
884 } else if (report_id == data->T19_reportid) { in mxt_proc_message()
885 mxt_input_button(data, message); in mxt_proc_message()
886 data->update_input = true; in mxt_proc_message()
888 mxt_dump_message(data, message); in mxt_proc_message()
894 static int mxt_read_and_process_messages(struct mxt_data *data, u8 count) in mxt_read_and_process_messages() argument
896 struct device *dev = &data->client->dev; in mxt_read_and_process_messages()
902 if (count > data->max_reportid) in mxt_read_and_process_messages()
906 ret = __mxt_read_reg(data->client, data->T5_address, in mxt_read_and_process_messages()
907 data->T5_msg_size * count, data->msg_buf); in mxt_read_and_process_messages()
914 ret = mxt_proc_message(data, in mxt_read_and_process_messages()
915 data->msg_buf + data->T5_msg_size * i); in mxt_read_and_process_messages()
925 static irqreturn_t mxt_process_messages_t44(struct mxt_data *data) in mxt_process_messages_t44() argument
927 struct device *dev = &data->client->dev; in mxt_process_messages_t44()
932 ret = __mxt_read_reg(data->client, data->T44_address, in mxt_process_messages_t44()
933 data->T5_msg_size + 1, data->msg_buf); in mxt_process_messages_t44()
939 count = data->msg_buf[0]; in mxt_process_messages_t44()
948 if (count > data->max_reportid) { in mxt_process_messages_t44()
950 count = data->max_reportid; in mxt_process_messages_t44()
954 ret = mxt_proc_message(data, data->msg_buf + 1); in mxt_process_messages_t44()
964 ret = mxt_read_and_process_messages(data, num_left); in mxt_process_messages_t44()
972 if (data->update_input) { in mxt_process_messages_t44()
973 mxt_input_sync(data); in mxt_process_messages_t44()
974 data->update_input = false; in mxt_process_messages_t44()
980 static int mxt_process_messages_until_invalid(struct mxt_data *data) in mxt_process_messages_until_invalid() argument
982 struct device *dev = &data->client->dev; in mxt_process_messages_until_invalid()
986 count = data->max_reportid; in mxt_process_messages_until_invalid()
990 read = mxt_read_and_process_messages(data, count); in mxt_process_messages_until_invalid()
995 if (data->update_input) { in mxt_process_messages_until_invalid()
996 mxt_input_sync(data); in mxt_process_messages_until_invalid()
997 data->update_input = false; in mxt_process_messages_until_invalid()
1004 static irqreturn_t mxt_process_messages(struct mxt_data *data) in mxt_process_messages() argument
1007 u8 count = data->last_message_count; in mxt_process_messages()
1009 if (count < 1 || count > data->max_reportid) in mxt_process_messages()
1013 total_handled = mxt_read_and_process_messages(data, count + 1); in mxt_process_messages()
1022 num_handled = mxt_read_and_process_messages(data, 2); in mxt_process_messages()
1030 } while (total_handled < data->num_touchids); in mxt_process_messages()
1033 data->last_message_count = total_handled; in mxt_process_messages()
1035 if (data->update_input) { in mxt_process_messages()
1036 mxt_input_sync(data); in mxt_process_messages()
1037 data->update_input = false; in mxt_process_messages()
1045 struct mxt_data *data = dev_id; in mxt_interrupt() local
1047 if (data->in_bootloader) { in mxt_interrupt()
1049 complete(&data->bl_completion); in mxt_interrupt()
1053 if (!data->object_table) in mxt_interrupt()
1056 if (data->T44_address) { in mxt_interrupt()
1057 return mxt_process_messages_t44(data); in mxt_interrupt()
1059 return mxt_process_messages(data); in mxt_interrupt()
1063 static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset, in mxt_t6_command() argument
1071 reg = data->T6_address + cmd_offset; in mxt_t6_command()
1073 ret = mxt_write_reg(data->client, reg, value); in mxt_t6_command()
1082 ret = __mxt_read_reg(data->client, reg, 1, &command_register); in mxt_t6_command()
1088 dev_err(&data->client->dev, "Command failed!\n"); in mxt_t6_command()
1095 static int mxt_soft_reset(struct mxt_data *data) in mxt_soft_reset() argument
1097 struct device *dev = &data->client->dev; in mxt_soft_reset()
1102 disable_irq(data->irq); in mxt_soft_reset()
1104 reinit_completion(&data->reset_completion); in mxt_soft_reset()
1106 ret = mxt_t6_command(data, MXT_COMMAND_RESET, MXT_RESET_VALUE, false); in mxt_soft_reset()
1113 enable_irq(data->irq); in mxt_soft_reset()
1115 ret = mxt_wait_for_completion(data, &data->reset_completion, in mxt_soft_reset()
1123 static void mxt_update_crc(struct mxt_data *data, u8 cmd, u8 value) in mxt_update_crc() argument
1129 data->config_crc = 0; in mxt_update_crc()
1130 reinit_completion(&data->crc_completion); in mxt_update_crc()
1132 mxt_t6_command(data, cmd, value, true); in mxt_update_crc()
1138 mxt_wait_for_completion(data, &data->crc_completion, MXT_CRC_TIMEOUT); in mxt_update_crc()
1180 static int mxt_prepare_cfg_mem(struct mxt_data *data, in mxt_prepare_cfg_mem() argument
1187 struct device *dev = &data->client->dev; in mxt_prepare_cfg_mem()
1198 ret = sscanf(cfg->data + data_pos, "%x %x %x%n", in mxt_prepare_cfg_mem()
1209 object = mxt_get_object(data, type); in mxt_prepare_cfg_mem()
1213 ret = sscanf(cfg->data + data_pos, "%hhx%n", in mxt_prepare_cfg_mem()
1255 ret = sscanf(cfg->data + data_pos, "%hhx%n", in mxt_prepare_cfg_mem()
1283 static int mxt_upload_cfg_mem(struct mxt_data *data, unsigned int cfg_start, in mxt_upload_cfg_mem() argument
1296 error = __mxt_write_reg(data->client, in mxt_upload_cfg_mem()
1300 dev_err(&data->client->dev, in mxt_upload_cfg_mem()
1311 static int mxt_init_t7_power_cfg(struct mxt_data *data);
1332 static int mxt_update_cfg(struct mxt_data *data, const struct firmware *cfg) in mxt_update_cfg() argument
1334 struct device *dev = &data->client->dev; in mxt_update_cfg()
1345 mxt_update_crc(data, MXT_COMMAND_REPORTALL, 1); in mxt_update_cfg()
1347 if (strncmp(cfg->data, MXT_CFG_MAGIC, strlen(MXT_CFG_MAGIC))) { in mxt_update_cfg()
1356 ret = sscanf(cfg->data + data_pos, "%hhx%n", in mxt_update_cfg()
1367 if (cfg_info.family_id != data->info.family_id) { in mxt_update_cfg()
1372 if (cfg_info.variant_id != data->info.variant_id) { in mxt_update_cfg()
1378 ret = sscanf(cfg->data + data_pos, "%x%n", &info_crc, &offset); in mxt_update_cfg()
1385 ret = sscanf(cfg->data + data_pos, "%x%n", &config_crc, &offset); in mxt_update_cfg()
1398 if (info_crc == data->info_crc) { in mxt_update_cfg()
1399 if (config_crc == 0 || data->config_crc == 0) { in mxt_update_cfg()
1401 } else if (config_crc == data->config_crc) { in mxt_update_cfg()
1403 data->config_crc); in mxt_update_cfg()
1407 data->config_crc, config_crc); in mxt_update_cfg()
1412 data->info_crc, info_crc); in mxt_update_cfg()
1417 data->info.object_num * sizeof(struct mxt_object) + in mxt_update_cfg()
1419 config_mem_size = data->mem_size - cfg_start_ofs; in mxt_update_cfg()
1426 ret = mxt_prepare_cfg_mem(data, cfg, data_pos, cfg_start_ofs, in mxt_update_cfg()
1432 if (data->T7_address < cfg_start_ofs) { in mxt_update_cfg()
1434 data->T7_address, cfg_start_ofs); in mxt_update_cfg()
1440 data->T7_address - cfg_start_ofs, in mxt_update_cfg()
1447 ret = mxt_upload_cfg_mem(data, cfg_start_ofs, in mxt_update_cfg()
1452 mxt_update_crc(data, MXT_COMMAND_BACKUPNV, MXT_BACKUP_VALUE); in mxt_update_cfg()
1454 ret = mxt_soft_reset(data); in mxt_update_cfg()
1461 mxt_init_t7_power_cfg(data); in mxt_update_cfg()
1468 static int mxt_acquire_irq(struct mxt_data *data) in mxt_acquire_irq() argument
1472 enable_irq(data->irq); in mxt_acquire_irq()
1474 error = mxt_process_messages_until_invalid(data); in mxt_acquire_irq()
1481 static int mxt_get_info(struct mxt_data *data) in mxt_get_info() argument
1483 struct i2c_client *client = data->client; in mxt_get_info()
1484 struct mxt_info *info = &data->info; in mxt_get_info()
1495 static void mxt_free_input_device(struct mxt_data *data) in mxt_free_input_device() argument
1497 if (data->input_dev) { in mxt_free_input_device()
1498 input_unregister_device(data->input_dev); in mxt_free_input_device()
1499 data->input_dev = NULL; in mxt_free_input_device()
1503 static void mxt_free_object_table(struct mxt_data *data) in mxt_free_object_table() argument
1505 kfree(data->object_table); in mxt_free_object_table()
1506 data->object_table = NULL; in mxt_free_object_table()
1507 kfree(data->msg_buf); in mxt_free_object_table()
1508 data->msg_buf = NULL; in mxt_free_object_table()
1509 data->T5_address = 0; in mxt_free_object_table()
1510 data->T5_msg_size = 0; in mxt_free_object_table()
1511 data->T6_reportid = 0; in mxt_free_object_table()
1512 data->T7_address = 0; in mxt_free_object_table()
1513 data->T9_reportid_min = 0; in mxt_free_object_table()
1514 data->T9_reportid_max = 0; in mxt_free_object_table()
1515 data->T19_reportid = 0; in mxt_free_object_table()
1516 data->T44_address = 0; in mxt_free_object_table()
1517 data->T100_reportid_min = 0; in mxt_free_object_table()
1518 data->T100_reportid_max = 0; in mxt_free_object_table()
1519 data->max_reportid = 0; in mxt_free_object_table()
1522 static int mxt_get_object_table(struct mxt_data *data) in mxt_get_object_table() argument
1524 struct i2c_client *client = data->client; in mxt_get_object_table()
1532 table_size = data->info.object_num * sizeof(struct mxt_object); in mxt_get_object_table()
1535 dev_err(&data->client->dev, "Failed to allocate memory\n"); in mxt_get_object_table()
1548 data->mem_size = 0; in mxt_get_object_table()
1549 for (i = 0; i < data->info.object_num; i++) { in mxt_get_object_table()
1565 dev_dbg(&data->client->dev, in mxt_get_object_table()
1573 if (data->info.family_id == 0x80 && in mxt_get_object_table()
1574 data->info.version < 0x20) { in mxt_get_object_table()
1580 data->T5_msg_size = mxt_obj_size(object); in mxt_get_object_table()
1583 data->T5_msg_size = mxt_obj_size(object) - 1; in mxt_get_object_table()
1585 data->T5_address = object->start_address; in mxt_get_object_table()
1588 data->T6_reportid = min_id; in mxt_get_object_table()
1589 data->T6_address = object->start_address; in mxt_get_object_table()
1592 data->T7_address = object->start_address; in mxt_get_object_table()
1595 data->multitouch = MXT_TOUCH_MULTI_T9; in mxt_get_object_table()
1596 data->T9_reportid_min = min_id; in mxt_get_object_table()
1597 data->T9_reportid_max = max_id; in mxt_get_object_table()
1598 data->num_touchids = object->num_report_ids in mxt_get_object_table()
1602 data->T44_address = object->start_address; in mxt_get_object_table()
1605 data->T19_reportid = min_id; in mxt_get_object_table()
1608 data->multitouch = MXT_TOUCH_MULTITOUCHSCREEN_T100; in mxt_get_object_table()
1609 data->T100_reportid_min = min_id; in mxt_get_object_table()
1610 data->T100_reportid_max = max_id; in mxt_get_object_table()
1612 data->num_touchids = object->num_report_ids - 2; in mxt_get_object_table()
1619 if (end_address >= data->mem_size) in mxt_get_object_table()
1620 data->mem_size = end_address + 1; in mxt_get_object_table()
1624 data->max_reportid = reportid; in mxt_get_object_table()
1627 if (data->T44_address && (data->T5_address != data->T44_address + 1)) { in mxt_get_object_table()
1633 data->msg_buf = kcalloc(data->max_reportid, in mxt_get_object_table()
1634 data->T5_msg_size, GFP_KERNEL); in mxt_get_object_table()
1635 if (!data->msg_buf) { in mxt_get_object_table()
1641 data->object_table = object_table; in mxt_get_object_table()
1646 mxt_free_object_table(data); in mxt_get_object_table()
1650 static int mxt_read_t9_resolution(struct mxt_data *data) in mxt_read_t9_resolution() argument
1652 struct i2c_client *client = data->client; in mxt_read_t9_resolution()
1658 object = mxt_get_object(data, MXT_TOUCH_MULTI_T9); in mxt_read_t9_resolution()
1685 data->max_x = range.y; in mxt_read_t9_resolution()
1686 data->max_y = range.x; in mxt_read_t9_resolution()
1688 data->max_x = range.x; in mxt_read_t9_resolution()
1689 data->max_y = range.y; in mxt_read_t9_resolution()
1693 "Touchscreen size X%uY%u\n", data->max_x, data->max_y); in mxt_read_t9_resolution()
1698 static int mxt_read_t100_config(struct mxt_data *data) in mxt_read_t100_config() argument
1700 struct i2c_client *client = data->client; in mxt_read_t100_config()
1707 object = mxt_get_object(data, MXT_TOUCH_MULTITOUCHSCREEN_T100); in mxt_read_t100_config()
1747 data->max_x = range_y; in mxt_read_t100_config()
1748 data->max_y = range_x; in mxt_read_t100_config()
1750 data->max_x = range_x; in mxt_read_t100_config()
1751 data->max_y = range_y; in mxt_read_t100_config()
1758 data->t100_aux_vect = aux++; in mxt_read_t100_config()
1761 data->t100_aux_ampl = aux++; in mxt_read_t100_config()
1764 data->t100_aux_area = aux++; in mxt_read_t100_config()
1768 data->t100_aux_vect, data->t100_aux_ampl, data->t100_aux_area); in mxt_read_t100_config()
1771 "T100 Touchscreen size X%uY%u\n", data->max_x, data->max_y); in mxt_read_t100_config()
1780 struct mxt_data *data) in mxt_set_up_as_touchpad() argument
1782 const struct mxt_platform_data *pdata = data->pdata; in mxt_set_up_as_touchpad()
1802 static int mxt_initialize_input_device(struct mxt_data *data) in mxt_initialize_input_device() argument
1804 const struct mxt_platform_data *pdata = data->pdata; in mxt_initialize_input_device()
1805 struct device *dev = &data->client->dev; in mxt_initialize_input_device()
1811 switch (data->multitouch) { in mxt_initialize_input_device()
1813 num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1; in mxt_initialize_input_device()
1814 error = mxt_read_t9_resolution(data); in mxt_initialize_input_device()
1820 num_mt_slots = data->num_touchids; in mxt_initialize_input_device()
1821 error = mxt_read_t100_config(data); in mxt_initialize_input_device()
1838 input_dev->phys = data->phys; in mxt_initialize_input_device()
1847 input_set_abs_params(input_dev, ABS_X, 0, data->max_x, 0, 0); in mxt_initialize_input_device()
1848 input_set_abs_params(input_dev, ABS_Y, 0, data->max_y, 0, 0); in mxt_initialize_input_device()
1850 if (data->multitouch == MXT_TOUCH_MULTI_T9 || in mxt_initialize_input_device()
1851 (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && in mxt_initialize_input_device()
1852 data->t100_aux_ampl)) { in mxt_initialize_input_device()
1858 mxt_set_up_as_touchpad(input_dev, data); in mxt_initialize_input_device()
1871 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100) { in mxt_initialize_input_device()
1881 0, data->max_x, 0, 0); in mxt_initialize_input_device()
1883 0, data->max_y, 0, 0); in mxt_initialize_input_device()
1885 if (data->multitouch == MXT_TOUCH_MULTI_T9 || in mxt_initialize_input_device()
1886 (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && in mxt_initialize_input_device()
1887 data->t100_aux_area)) { in mxt_initialize_input_device()
1892 if (data->multitouch == MXT_TOUCH_MULTI_T9 || in mxt_initialize_input_device()
1893 (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && in mxt_initialize_input_device()
1894 data->t100_aux_ampl)) { in mxt_initialize_input_device()
1899 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && in mxt_initialize_input_device()
1900 data->t100_aux_vect) { in mxt_initialize_input_device()
1905 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && in mxt_initialize_input_device()
1906 data->t100_aux_ampl) { in mxt_initialize_input_device()
1911 if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 && in mxt_initialize_input_device()
1912 data->t100_aux_vect) { in mxt_initialize_input_device()
1917 input_set_drvdata(input_dev, data); in mxt_initialize_input_device()
1925 data->input_dev = input_dev; in mxt_initialize_input_device()
1934 static int mxt_configure_objects(struct mxt_data *data,
1943 static int mxt_initialize(struct mxt_data *data) in mxt_initialize() argument
1945 struct i2c_client *client = data->client; in mxt_initialize()
1950 error = mxt_get_info(data); in mxt_initialize()
1955 error = mxt_probe_bootloader(data, false); in mxt_initialize()
1958 error = mxt_probe_bootloader(data, true); in mxt_initialize()
1972 data->in_bootloader = true; in mxt_initialize()
1977 mxt_send_bootloader_cmd(data, false); in mxt_initialize()
1982 error = mxt_get_object_table(data); in mxt_initialize()
1988 error = mxt_acquire_irq(data); in mxt_initialize()
1993 &client->dev, GFP_KERNEL, data, in mxt_initialize()
2004 mxt_free_object_table(data); in mxt_initialize()
2008 static int mxt_set_t7_power_cfg(struct mxt_data *data, u8 sleep) in mxt_set_t7_power_cfg() argument
2010 struct device *dev = &data->client->dev; in mxt_set_t7_power_cfg()
2018 new_config = &data->t7_cfg; in mxt_set_t7_power_cfg()
2020 error = __mxt_write_reg(data->client, data->T7_address, in mxt_set_t7_power_cfg()
2021 sizeof(data->t7_cfg), new_config); in mxt_set_t7_power_cfg()
2031 static int mxt_init_t7_power_cfg(struct mxt_data *data) in mxt_init_t7_power_cfg() argument
2033 struct device *dev = &data->client->dev; in mxt_init_t7_power_cfg()
2038 error = __mxt_read_reg(data->client, data->T7_address, in mxt_init_t7_power_cfg()
2039 sizeof(data->t7_cfg), &data->t7_cfg); in mxt_init_t7_power_cfg()
2043 if (data->t7_cfg.active == 0 || data->t7_cfg.idle == 0) { in mxt_init_t7_power_cfg()
2046 mxt_soft_reset(data); in mxt_init_t7_power_cfg()
2051 data->t7_cfg.active = 20; in mxt_init_t7_power_cfg()
2052 data->t7_cfg.idle = 100; in mxt_init_t7_power_cfg()
2053 return mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN); in mxt_init_t7_power_cfg()
2058 data->t7_cfg.active, data->t7_cfg.idle); in mxt_init_t7_power_cfg()
2062 static int mxt_configure_objects(struct mxt_data *data, in mxt_configure_objects() argument
2065 struct device *dev = &data->client->dev; in mxt_configure_objects()
2066 struct mxt_info *info = &data->info; in mxt_configure_objects()
2069 error = mxt_init_t7_power_cfg(data); in mxt_configure_objects()
2076 error = mxt_update_cfg(data, cfg); in mxt_configure_objects()
2081 if (data->multitouch) { in mxt_configure_objects()
2082 error = mxt_initialize_input_device(data); in mxt_configure_objects()
2101 struct mxt_data *data = dev_get_drvdata(dev); in mxt_fw_version_show() local
2102 struct mxt_info *info = &data->info; in mxt_fw_version_show()
2111 struct mxt_data *data = dev_get_drvdata(dev); in mxt_hw_version_show() local
2112 struct mxt_info *info = &data->info; in mxt_hw_version_show()
2138 struct mxt_data *data = dev_get_drvdata(dev); in mxt_object_show() local
2151 for (i = 0; i < data->info.object_num; i++) { in mxt_object_show()
2152 object = data->object_table + i; in mxt_object_show()
2164 error = __mxt_read_reg(data->client, addr, size, obuf); in mxt_object_show()
2184 c = *(fw->data + pos); in mxt_check_firmware_format()
2203 struct mxt_data *data = dev_get_drvdata(dev); in mxt_load_fw() local
2222 if (!data->in_bootloader) { in mxt_load_fw()
2224 data->in_bootloader = true; in mxt_load_fw()
2226 ret = mxt_t6_command(data, MXT_COMMAND_RESET, in mxt_load_fw()
2234 ret = mxt_lookup_bootloader_address(data, 0); in mxt_load_fw()
2238 mxt_free_input_device(data); in mxt_load_fw()
2239 mxt_free_object_table(data); in mxt_load_fw()
2241 enable_irq(data->irq); in mxt_load_fw()
2244 reinit_completion(&data->bl_completion); in mxt_load_fw()
2246 ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD, false); in mxt_load_fw()
2249 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, false); in mxt_load_fw()
2256 ret = mxt_send_bootloader_cmd(data, true); in mxt_load_fw()
2262 ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, true); in mxt_load_fw()
2266 frame_size = ((*(fw->data + pos) << 8) | *(fw->data + pos + 1)); in mxt_load_fw()
2272 ret = mxt_bootloader_write(data, fw->data + pos, frame_size); in mxt_load_fw()
2276 ret = mxt_check_bootloader(data, MXT_FRAME_CRC_PASS, true); in mxt_load_fw()
2299 ret = mxt_wait_for_completion(data, &data->bl_completion, in mxt_load_fw()
2311 mxt_wait_for_completion(data, &data->bl_completion, MXT_FW_RESET_TIME); in mxt_load_fw()
2313 data->in_bootloader = false; in mxt_load_fw()
2316 disable_irq(data->irq); in mxt_load_fw()
2326 struct mxt_data *data = dev_get_drvdata(dev); in mxt_update_fw_store() local
2336 error = mxt_initialize(data); in mxt_update_fw_store()
2361 static void mxt_start(struct mxt_data *data) in mxt_start() argument
2363 switch (data->pdata->suspend_mode) { in mxt_start()
2365 mxt_soft_reset(data); in mxt_start()
2369 mxt_write_object(data, in mxt_start()
2375 mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN); in mxt_start()
2378 mxt_t6_command(data, MXT_COMMAND_CALIBRATE, 1, false); in mxt_start()
2384 static void mxt_stop(struct mxt_data *data) in mxt_stop() argument
2386 switch (data->pdata->suspend_mode) { in mxt_stop()
2389 mxt_write_object(data, in mxt_stop()
2395 mxt_set_t7_power_cfg(data, MXT_POWER_CFG_DEEPSLEEP); in mxt_stop()
2402 struct mxt_data *data = input_get_drvdata(dev); in mxt_input_open() local
2404 mxt_start(data); in mxt_input_open()
2411 struct mxt_data *data = input_get_drvdata(dev); in mxt_input_close() local
2413 mxt_stop(data); in mxt_input_close()
2606 struct mxt_data *data; in mxt_probe() local
2614 data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL); in mxt_probe()
2615 if (!data) { in mxt_probe()
2620 snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0", in mxt_probe()
2623 data->client = client; in mxt_probe()
2624 data->pdata = pdata; in mxt_probe()
2625 data->irq = client->irq; in mxt_probe()
2626 i2c_set_clientdata(client, data); in mxt_probe()
2628 init_completion(&data->bl_completion); in mxt_probe()
2629 init_completion(&data->reset_completion); in mxt_probe()
2630 init_completion(&data->crc_completion); in mxt_probe()
2634 client->name, data); in mxt_probe()
2642 error = mxt_initialize(data); in mxt_probe()
2656 mxt_free_input_device(data); in mxt_probe()
2657 mxt_free_object_table(data); in mxt_probe()
2659 free_irq(client->irq, data); in mxt_probe()
2661 kfree(data); in mxt_probe()
2667 struct mxt_data *data = i2c_get_clientdata(client); in mxt_remove() local
2670 free_irq(data->irq, data); in mxt_remove()
2671 mxt_free_input_device(data); in mxt_remove()
2672 mxt_free_object_table(data); in mxt_remove()
2673 kfree(data); in mxt_remove()
2681 struct mxt_data *data = i2c_get_clientdata(client); in mxt_suspend() local
2682 struct input_dev *input_dev = data->input_dev; in mxt_suspend()
2690 mxt_stop(data); in mxt_suspend()
2700 struct mxt_data *data = i2c_get_clientdata(client); in mxt_resume() local
2701 struct input_dev *input_dev = data->input_dev; in mxt_resume()
2709 mxt_start(data); in mxt_resume()