Lines Matching refs:cyapa
345 int cyapa_pip_cmd_state_initialize(struct cyapa *cyapa) in cyapa_pip_cmd_state_initialize() argument
347 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_pip_cmd_state_initialize()
358 cyapa->dev_pwr_mode = UNINIT_PWR_MODE; in cyapa_pip_cmd_state_initialize()
359 cyapa->dev_sleep_time = UNINIT_SLEEP_TIME; in cyapa_pip_cmd_state_initialize()
365 ssize_t cyapa_i2c_pip_read(struct cyapa *cyapa, u8 *buf, size_t size) in cyapa_i2c_pip_read() argument
375 ret = i2c_master_recv(cyapa->client, buf, size); in cyapa_i2c_pip_read()
385 ssize_t cyapa_i2c_pip_write(struct cyapa *cyapa, u8 *buf, size_t size) in cyapa_i2c_pip_write() argument
392 ret = i2c_master_send(cyapa->client, buf, size); in cyapa_i2c_pip_write()
404 int cyapa_empty_pip_output_data(struct cyapa *cyapa, in cyapa_empty_pip_output_data() argument
407 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_empty_pip_output_data()
439 error = cyapa_i2c_pip_read(cyapa, pip->empty_buf, in cyapa_empty_pip_output_data()
455 func(cyapa, pip->empty_buf, length)) { in cyapa_empty_pip_output_data()
465 error = cyapa_i2c_pip_read(cyapa, pip->empty_buf, length); in cyapa_empty_pip_output_data()
475 func(cyapa, pip->empty_buf, length)) { in cyapa_empty_pip_output_data()
490 struct cyapa *cyapa, in cyapa_do_i2c_pip_cmd_irq_sync() argument
494 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_do_i2c_pip_cmd_irq_sync()
501 error = cyapa_i2c_pip_write(cyapa, cmd, cmd_len); in cyapa_do_i2c_pip_cmd_irq_sync()
519 struct cyapa *cyapa, in cyapa_do_i2c_pip_cmd_polling() argument
525 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_do_i2c_pip_cmd_polling()
531 error = cyapa_i2c_pip_write(cyapa, cmd, cmd_len); in cyapa_do_i2c_pip_cmd_polling()
543 error = cyapa_empty_pip_output_data(cyapa, in cyapa_do_i2c_pip_cmd_polling()
559 struct cyapa *cyapa, in cyapa_i2c_pip_cmd_irq_sync() argument
566 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_i2c_pip_cmd_irq_sync()
594 error = cyapa_do_i2c_pip_cmd_irq_sync(cyapa, cmd, cmd_len, in cyapa_i2c_pip_cmd_irq_sync()
603 error = cyapa_empty_pip_output_data(cyapa, in cyapa_i2c_pip_cmd_irq_sync()
610 error = cyapa_do_i2c_pip_cmd_polling(cyapa, cmd, cmd_len, in cyapa_i2c_pip_cmd_irq_sync()
623 bool cyapa_sort_tsg_pip_bl_resp_data(struct cyapa *cyapa, in cyapa_sort_tsg_pip_bl_resp_data() argument
638 bool cyapa_sort_tsg_pip_app_resp_data(struct cyapa *cyapa, in cyapa_sort_tsg_pip_app_resp_data() argument
641 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_sort_tsg_pip_app_resp_data()
665 static bool cyapa_sort_pip_application_launch_data(struct cyapa *cyapa, in cyapa_sort_pip_application_launch_data() argument
681 static bool cyapa_sort_gen5_hid_descriptor_data(struct cyapa *cyapa, in cyapa_sort_gen5_hid_descriptor_data() argument
709 static bool cyapa_sort_pip_deep_sleep_data(struct cyapa *cyapa, in cyapa_sort_pip_deep_sleep_data() argument
721 static int gen5_idle_state_parse(struct cyapa *cyapa) in gen5_idle_state_parse() argument
734 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in gen5_idle_state_parse()
737 ret = cyapa_i2c_pip_read(cyapa, resp_data, 3); in gen5_idle_state_parse()
744 cyapa->gen = CYAPA_GEN5; in gen5_idle_state_parse()
746 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in gen5_idle_state_parse()
752 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in gen5_idle_state_parse()
770 cyapa->state = CYAPA_STATE_GEN5_BL; in gen5_idle_state_parse()
777 cyapa->state = CYAPA_STATE_GEN5_APP; in gen5_idle_state_parse()
780 cyapa->state = CYAPA_STATE_NO_DEVICE; in gen5_idle_state_parse()
787 static int gen5_hid_description_header_parse(struct cyapa *cyapa, u8 *reg_data) in gen5_hid_description_header_parse() argument
801 ret = cyapa_i2c_pip_read(cyapa, resp_data, in gen5_hid_description_header_parse()
814 cyapa->gen = CYAPA_GEN5; in gen5_hid_description_header_parse()
815 cyapa->state = CYAPA_STATE_GEN5_BL; in gen5_hid_description_header_parse()
821 cyapa->gen = CYAPA_GEN5; in gen5_hid_description_header_parse()
822 cyapa->state = CYAPA_STATE_GEN5_APP; in gen5_hid_description_header_parse()
828 cyapa->gen = CYAPA_GEN5; in gen5_hid_description_header_parse()
829 cyapa->state = CYAPA_STATE_GEN5_BL; in gen5_hid_description_header_parse()
835 cyapa->gen = CYAPA_GEN5; in gen5_hid_description_header_parse()
836 cyapa->state = CYAPA_STATE_GEN5_APP; in gen5_hid_description_header_parse()
839 cyapa->state = CYAPA_STATE_NO_DEVICE; in gen5_hid_description_header_parse()
845 static int gen5_report_data_header_parse(struct cyapa *cyapa, u8 *reg_data) in gen5_report_data_header_parse() argument
871 cyapa->gen = CYAPA_GEN5; in gen5_report_data_header_parse()
872 cyapa->state = CYAPA_STATE_GEN5_APP; in gen5_report_data_header_parse()
876 static int gen5_cmd_resp_header_parse(struct cyapa *cyapa, u8 *reg_data) in gen5_cmd_resp_header_parse() argument
878 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in gen5_cmd_resp_header_parse()
888 ret = cyapa_i2c_pip_read(cyapa, pip->empty_buf, length); in gen5_cmd_resp_header_parse()
897 cyapa->gen = CYAPA_GEN5; in gen5_cmd_resp_header_parse()
898 cyapa->state = CYAPA_STATE_GEN5_BL; in gen5_cmd_resp_header_parse()
901 cyapa->gen = CYAPA_GEN5; in gen5_cmd_resp_header_parse()
902 cyapa->state = CYAPA_STATE_GEN5_APP; in gen5_cmd_resp_header_parse()
913 cyapa->gen = CYAPA_GEN5; in gen5_cmd_resp_header_parse()
914 cyapa->state = CYAPA_STATE_GEN5_BL; in gen5_cmd_resp_header_parse()
920 cyapa->gen = CYAPA_GEN5; in gen5_cmd_resp_header_parse()
921 cyapa->state = CYAPA_STATE_GEN5_APP; in gen5_cmd_resp_header_parse()
924 cyapa->state = CYAPA_STATE_NO_DEVICE; in gen5_cmd_resp_header_parse()
930 static int cyapa_gen5_state_parse(struct cyapa *cyapa, u8 *reg_data, int len) in cyapa_gen5_state_parse() argument
937 cyapa->state = CYAPA_STATE_NO_DEVICE; in cyapa_gen5_state_parse()
942 gen5_idle_state_parse(cyapa); in cyapa_gen5_state_parse()
946 gen5_hid_description_header_parse(cyapa, reg_data); in cyapa_gen5_state_parse()
951 cyapa->gen = CYAPA_GEN5; in cyapa_gen5_state_parse()
952 cyapa->state = CYAPA_STATE_GEN5_APP; in cyapa_gen5_state_parse()
956 cyapa->gen = CYAPA_GEN5; in cyapa_gen5_state_parse()
957 cyapa->state = CYAPA_STATE_GEN5_BL; in cyapa_gen5_state_parse()
963 gen5_report_data_header_parse(cyapa, reg_data); in cyapa_gen5_state_parse()
966 gen5_cmd_resp_header_parse(cyapa, reg_data); in cyapa_gen5_state_parse()
969 if (cyapa->gen == CYAPA_GEN5) { in cyapa_gen5_state_parse()
976 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_gen5_state_parse()
978 if (cyapa->state == CYAPA_STATE_GEN5_APP || in cyapa_gen5_state_parse()
979 cyapa->state == CYAPA_STATE_GEN5_BL) in cyapa_gen5_state_parse()
998 int cyapa_pip_bl_initiate(struct cyapa *cyapa, const struct firmware *fw) in cyapa_pip_bl_initiate() argument
1017 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_bl_initiate()
1057 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_pip_bl_initiate()
1069 static bool cyapa_sort_pip_bl_exit_data(struct cyapa *cyapa, u8 *buf, int len) in cyapa_sort_pip_bl_exit_data() argument
1089 int cyapa_pip_bl_exit(struct cyapa *cyapa) in cyapa_pip_bl_exit() argument
1101 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_pip_bl_exit()
1119 int cyapa_pip_bl_enter(struct cyapa *cyapa) in cyapa_pip_bl_enter() argument
1126 error = cyapa_poll_state(cyapa, 500); in cyapa_pip_bl_enter()
1131 if (cyapa_is_pip_bl_mode(cyapa)) in cyapa_pip_bl_enter()
1133 else if (!cyapa_is_pip_app_mode(cyapa)) in cyapa_pip_bl_enter()
1137 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_bl_enter()
1145 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_pip_bl_enter()
1153 cyapa->operational = false; in cyapa_pip_bl_enter()
1154 if (cyapa->gen == CYAPA_GEN5) in cyapa_pip_bl_enter()
1155 cyapa->state = CYAPA_STATE_GEN5_BL; in cyapa_pip_bl_enter()
1156 else if (cyapa->gen == CYAPA_GEN6) in cyapa_pip_bl_enter()
1157 cyapa->state = CYAPA_STATE_GEN6_BL; in cyapa_pip_bl_enter()
1161 static int cyapa_pip_fw_head_check(struct cyapa *cyapa, in cyapa_pip_fw_head_check() argument
1167 switch (cyapa->gen) { in cyapa_pip_fw_head_check()
1175 if (cyapa->platform_ver < 2) { in cyapa_pip_fw_head_check()
1192 int cyapa_pip_check_fw(struct cyapa *cyapa, const struct firmware *fw) in cyapa_pip_check_fw() argument
1194 struct device *dev = &cyapa->client->dev; in cyapa_pip_check_fw()
1206 if (cyapa_pip_fw_head_check(cyapa, in cyapa_pip_check_fw()
1267 static int cyapa_pip_write_fw_block(struct cyapa *cyapa, in cyapa_pip_write_fw_block() argument
1323 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, cmd_len, in cyapa_pip_write_fw_block()
1334 int cyapa_pip_do_fw_update(struct cyapa *cyapa, in cyapa_pip_do_fw_update() argument
1337 struct device *dev = &cyapa->client->dev; in cyapa_pip_do_fw_update()
1343 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_do_fw_update()
1353 error = cyapa_pip_write_fw_block(cyapa, &image_records[i]); in cyapa_pip_do_fw_update()
1364 static int cyapa_gen5_change_power_state(struct cyapa *cyapa, u8 power_state) in cyapa_gen5_change_power_state() argument
1373 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, sizeof(cmd), in cyapa_gen5_change_power_state()
1383 static int cyapa_gen5_set_interval_time(struct cyapa *cyapa, in cyapa_gen5_set_interval_time() argument
1429 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, cmd_len, in cyapa_gen5_set_interval_time()
1440 static int cyapa_gen5_get_interval_time(struct cyapa *cyapa, in cyapa_gen5_get_interval_time() argument
1483 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, cmd_len, in cyapa_gen5_get_interval_time()
1498 static int cyapa_gen5_disable_pip_report(struct cyapa *cyapa) in cyapa_gen5_disable_pip_report() argument
1517 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, sizeof(cmd), in cyapa_gen5_disable_pip_report()
1528 int cyapa_pip_set_proximity(struct cyapa *cyapa, bool enable) in cyapa_pip_set_proximity() argument
1538 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, sizeof(cmd), in cyapa_pip_set_proximity()
1550 int cyapa_pip_deep_sleep(struct cyapa *cyapa, u8 state) in cyapa_pip_deep_sleep() argument
1559 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, sizeof(cmd), in cyapa_pip_deep_sleep()
1568 static int cyapa_gen5_set_power_mode(struct cyapa *cyapa, in cyapa_gen5_set_power_mode() argument
1571 struct device *dev = &cyapa->client->dev; in cyapa_gen5_set_power_mode()
1575 if (cyapa->state != CYAPA_STATE_GEN5_APP) in cyapa_gen5_set_power_mode()
1578 if (PIP_DEV_GET_PWR_STATE(cyapa) == UNINIT_PWR_MODE) { in cyapa_gen5_set_power_mode()
1584 PIP_DEV_SET_PWR_STATE(cyapa, PWR_MODE_OFF); in cyapa_gen5_set_power_mode()
1587 if (PIP_DEV_UNINIT_SLEEP_TIME(cyapa) && in cyapa_gen5_set_power_mode()
1588 PIP_DEV_GET_PWR_STATE(cyapa) != PWR_MODE_OFF) in cyapa_gen5_set_power_mode()
1589 if (cyapa_gen5_get_interval_time(cyapa, in cyapa_gen5_set_power_mode()
1591 &cyapa->dev_sleep_time) != 0) in cyapa_gen5_set_power_mode()
1592 PIP_DEV_SET_SLEEP_TIME(cyapa, UNINIT_SLEEP_TIME); in cyapa_gen5_set_power_mode()
1594 if (PIP_DEV_GET_PWR_STATE(cyapa) == power_mode) { in cyapa_gen5_set_power_mode()
1598 PIP_DEV_GET_SLEEP_TIME(cyapa) == sleep_time) { in cyapa_gen5_set_power_mode()
1605 error = cyapa_pip_deep_sleep(cyapa, PIP_DEEP_SLEEP_STATE_OFF); in cyapa_gen5_set_power_mode()
1611 PIP_DEV_SET_PWR_STATE(cyapa, PWR_MODE_OFF); in cyapa_gen5_set_power_mode()
1620 if (PIP_DEV_GET_PWR_STATE(cyapa) == PWR_MODE_OFF) { in cyapa_gen5_set_power_mode()
1621 error = cyapa_pip_deep_sleep(cyapa, PIP_DEEP_SLEEP_STATE_ON); in cyapa_gen5_set_power_mode()
1629 error = cyapa_gen5_change_power_state(cyapa, in cyapa_gen5_set_power_mode()
1636 PIP_DEV_SET_PWR_STATE(cyapa, PWR_MODE_FULL_ACTIVE); in cyapa_gen5_set_power_mode()
1638 error = cyapa_gen5_change_power_state(cyapa, in cyapa_gen5_set_power_mode()
1645 PIP_DEV_SET_PWR_STATE(cyapa, PWR_MODE_BTN_ONLY); in cyapa_gen5_set_power_mode()
1652 if (PIP_DEV_UNINIT_SLEEP_TIME(cyapa) || in cyapa_gen5_set_power_mode()
1653 sleep_time != PIP_DEV_GET_SLEEP_TIME(cyapa)) in cyapa_gen5_set_power_mode()
1654 if (cyapa_gen5_set_interval_time(cyapa, in cyapa_gen5_set_power_mode()
1657 PIP_DEV_SET_SLEEP_TIME(cyapa, sleep_time); in cyapa_gen5_set_power_mode()
1663 error = cyapa_gen5_change_power_state(cyapa, power_state); in cyapa_gen5_set_power_mode()
1681 cyapa_gen5_disable_pip_report(cyapa); in cyapa_gen5_set_power_mode()
1683 PIP_DEV_SET_PWR_STATE(cyapa, in cyapa_gen5_set_power_mode()
1690 int cyapa_pip_resume_scanning(struct cyapa *cyapa) in cyapa_pip_resume_scanning() argument
1698 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_resume_scanning()
1701 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_pip_resume_scanning()
1709 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_resume_scanning()
1714 int cyapa_pip_suspend_scanning(struct cyapa *cyapa) in cyapa_pip_suspend_scanning() argument
1722 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_suspend_scanning()
1725 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_pip_suspend_scanning()
1733 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_suspend_scanning()
1738 static int cyapa_pip_calibrate_pwcs(struct cyapa *cyapa, in cyapa_pip_calibrate_pwcs() argument
1748 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_calibrate_pwcs()
1758 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_pip_calibrate_pwcs()
1773 struct cyapa *cyapa = dev_get_drvdata(dev); in cyapa_pip_do_calibrate() local
1777 error = cyapa_pip_suspend_scanning(cyapa); in cyapa_pip_do_calibrate()
1782 calibrate_error = cyapa_pip_calibrate_pwcs(cyapa, in cyapa_pip_do_calibrate()
1788 calibrate_error = cyapa_pip_calibrate_pwcs(cyapa, in cyapa_pip_do_calibrate()
1795 error = cyapa_pip_resume_scanning(cyapa); in cyapa_pip_do_calibrate()
1851 static void cyapa_gen5_guess_electrodes(struct cyapa *cyapa, in cyapa_gen5_guess_electrodes() argument
1854 if (cyapa->electrodes_rx != 0) { in cyapa_gen5_guess_electrodes()
1855 *electrodes_rx = cyapa->electrodes_rx; in cyapa_gen5_guess_electrodes()
1856 *electrodes_tx = (cyapa->electrodes_x == *electrodes_rx) ? in cyapa_gen5_guess_electrodes()
1857 cyapa->electrodes_y : cyapa->electrodes_x; in cyapa_gen5_guess_electrodes()
1859 *electrodes_tx = min(cyapa->electrodes_x, cyapa->electrodes_y); in cyapa_gen5_guess_electrodes()
1860 *electrodes_rx = max(cyapa->electrodes_x, cyapa->electrodes_y); in cyapa_gen5_guess_electrodes()
1882 static int cyapa_gen5_read_idac_data(struct cyapa *cyapa, in cyapa_gen5_read_idac_data() argument
1924 if (cyapa->aligned_electrodes_rx == 0) { in cyapa_gen5_read_idac_data()
1925 cyapa_gen5_guess_electrodes(cyapa, in cyapa_gen5_read_idac_data()
1927 cyapa->aligned_electrodes_rx = in cyapa_gen5_read_idac_data()
1931 (cyapa->aligned_electrodes_rx + 7) & ~7u; in cyapa_gen5_read_idac_data()
1941 offset = cyapa->aligned_electrodes_rx * (*data_size); in cyapa_gen5_read_idac_data()
1942 if (cyapa->electrodes_rx == cyapa->electrodes_x) in cyapa_gen5_read_idac_data()
1943 electrodes_tx = cyapa->electrodes_y; in cyapa_gen5_read_idac_data()
1945 electrodes_tx = cyapa->electrodes_x; in cyapa_gen5_read_idac_data()
1946 max_element_cnt = ((cyapa->aligned_electrodes_rx + 7) & in cyapa_gen5_read_idac_data()
1950 max_element_cnt = cyapa->electrodes_x + in cyapa_gen5_read_idac_data()
1951 cyapa->electrodes_y; in cyapa_gen5_read_idac_data()
1972 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_gen5_read_idac_data()
2016 tmp_count < cyapa->aligned_electrodes_rx && in cyapa_gen5_read_idac_data()
2050 if (tmp_count == cyapa->aligned_electrodes_rx) { in cyapa_gen5_read_idac_data()
2051 cyapa->electrodes_rx = cyapa->electrodes_rx ? in cyapa_gen5_read_idac_data()
2052 cyapa->electrodes_rx : electrodes_rx; in cyapa_gen5_read_idac_data()
2054 cyapa->electrodes_rx = cyapa->electrodes_rx ? in cyapa_gen5_read_idac_data()
2055 cyapa->electrodes_rx : electrodes_rx; in cyapa_gen5_read_idac_data()
2056 cyapa->aligned_electrodes_rx = electrodes_rx; in cyapa_gen5_read_idac_data()
2058 cyapa->electrodes_rx = cyapa->electrodes_rx ? in cyapa_gen5_read_idac_data()
2059 cyapa->electrodes_rx : electrodes_tx; in cyapa_gen5_read_idac_data()
2060 cyapa->aligned_electrodes_rx = tmp_count; in cyapa_gen5_read_idac_data()
2071 static int cyapa_gen5_read_mutual_idac_data(struct cyapa *cyapa, in cyapa_gen5_read_mutual_idac_data() argument
2082 error = cyapa_gen5_read_idac_data(cyapa, in cyapa_gen5_read_mutual_idac_data()
2090 error = cyapa_gen5_read_idac_data(cyapa, in cyapa_gen5_read_mutual_idac_data()
2098 static int cyapa_gen5_read_self_idac_data(struct cyapa *cyapa, in cyapa_gen5_read_self_idac_data() argument
2109 error = cyapa_gen5_read_idac_data(cyapa, in cyapa_gen5_read_self_idac_data()
2119 error = cyapa_gen5_read_idac_data(cyapa, in cyapa_gen5_read_self_idac_data()
2127 static ssize_t cyapa_gen5_execute_panel_scan(struct cyapa *cyapa) in cyapa_gen5_execute_panel_scan() argument
2142 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_gen5_execute_panel_scan()
2155 static int cyapa_gen5_read_panel_scan_raw_data(struct cyapa *cyapa, in cyapa_gen5_read_panel_scan_raw_data() argument
2202 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_gen5_read_panel_scan_raw_data()
2253 struct cyapa *cyapa = dev_get_drvdata(dev); in cyapa_gen5_show_baseline() local
2267 if (!cyapa_is_pip_app_mode(cyapa)) in cyapa_gen5_show_baseline()
2271 error = cyapa_pip_suspend_scanning(cyapa); in cyapa_gen5_show_baseline()
2277 error = cyapa_gen5_read_mutual_idac_data(cyapa, in cyapa_gen5_show_baseline()
2285 error = cyapa_gen5_read_self_idac_data(cyapa, in cyapa_gen5_show_baseline()
2293 error = cyapa_gen5_execute_panel_scan(cyapa); in cyapa_gen5_show_baseline()
2298 error = cyapa_gen5_read_panel_scan_raw_data(cyapa, in cyapa_gen5_show_baseline()
2301 cyapa->electrodes_x * cyapa->electrodes_y, in cyapa_gen5_show_baseline()
2309 error = cyapa_gen5_read_panel_scan_raw_data(cyapa, in cyapa_gen5_show_baseline()
2312 cyapa->electrodes_x + cyapa->electrodes_y, in cyapa_gen5_show_baseline()
2320 error = cyapa_gen5_read_panel_scan_raw_data(cyapa, in cyapa_gen5_show_baseline()
2323 cyapa->electrodes_x * cyapa->electrodes_y, in cyapa_gen5_show_baseline()
2331 error = cyapa_gen5_read_panel_scan_raw_data(cyapa, in cyapa_gen5_show_baseline()
2334 cyapa->electrodes_x + cyapa->electrodes_y, in cyapa_gen5_show_baseline()
2342 error = cyapa_gen5_read_panel_scan_raw_data(cyapa, in cyapa_gen5_show_baseline()
2345 cyapa->electrodes_x * cyapa->electrodes_y, in cyapa_gen5_show_baseline()
2353 error = cyapa_gen5_read_panel_scan_raw_data(cyapa, in cyapa_gen5_show_baseline()
2356 cyapa->electrodes_x + cyapa->electrodes_y, in cyapa_gen5_show_baseline()
2365 resume_error = cyapa_pip_resume_scanning(cyapa); in cyapa_gen5_show_baseline()
2386 bool cyapa_pip_sort_system_info_data(struct cyapa *cyapa, in cyapa_pip_sort_system_info_data() argument
2396 static int cyapa_gen5_bl_query_data(struct cyapa *cyapa) in cyapa_gen5_bl_query_data() argument
2403 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_gen5_bl_query_data()
2411 memcpy(&cyapa->product_id[0], &resp_data[8], 5); in cyapa_gen5_bl_query_data()
2412 cyapa->product_id[5] = '-'; in cyapa_gen5_bl_query_data()
2413 memcpy(&cyapa->product_id[6], &resp_data[13], 6); in cyapa_gen5_bl_query_data()
2414 cyapa->product_id[12] = '-'; in cyapa_gen5_bl_query_data()
2415 memcpy(&cyapa->product_id[13], &resp_data[19], 2); in cyapa_gen5_bl_query_data()
2416 cyapa->product_id[15] = '\0'; in cyapa_gen5_bl_query_data()
2418 cyapa->fw_maj_ver = resp_data[22]; in cyapa_gen5_bl_query_data()
2419 cyapa->fw_min_ver = resp_data[23]; in cyapa_gen5_bl_query_data()
2421 cyapa->platform_ver = (resp_data[26] >> PIP_BL_PLATFORM_VER_SHIFT) & in cyapa_gen5_bl_query_data()
2427 static int cyapa_gen5_get_query_data(struct cyapa *cyapa) in cyapa_gen5_get_query_data() argument
2435 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_gen5_get_query_data()
2447 cyapa->platform_ver = (resp_data[49] >> PIP_BL_PLATFORM_VER_SHIFT) & in cyapa_gen5_get_query_data()
2449 if (cyapa->gen == CYAPA_GEN5 && cyapa->platform_ver < 2) { in cyapa_gen5_get_query_data()
2451 cyapa->fw_maj_ver = resp_data[15]; in cyapa_gen5_get_query_data()
2452 cyapa->fw_min_ver = resp_data[16]; in cyapa_gen5_get_query_data()
2454 cyapa->fw_maj_ver = resp_data[9]; in cyapa_gen5_get_query_data()
2455 cyapa->fw_min_ver = resp_data[10]; in cyapa_gen5_get_query_data()
2458 cyapa->electrodes_x = resp_data[52]; in cyapa_gen5_get_query_data()
2459 cyapa->electrodes_y = resp_data[53]; in cyapa_gen5_get_query_data()
2461 cyapa->physical_size_x = get_unaligned_le16(&resp_data[54]) / 100; in cyapa_gen5_get_query_data()
2462 cyapa->physical_size_y = get_unaligned_le16(&resp_data[56]) / 100; in cyapa_gen5_get_query_data()
2464 cyapa->max_abs_x = get_unaligned_le16(&resp_data[58]); in cyapa_gen5_get_query_data()
2465 cyapa->max_abs_y = get_unaligned_le16(&resp_data[60]); in cyapa_gen5_get_query_data()
2467 cyapa->max_z = get_unaligned_le16(&resp_data[62]); in cyapa_gen5_get_query_data()
2469 cyapa->x_origin = resp_data[64] & 0x01; in cyapa_gen5_get_query_data()
2470 cyapa->y_origin = resp_data[65] & 0x01; in cyapa_gen5_get_query_data()
2472 cyapa->btn_capability = (resp_data[70] << 3) & CAPABILITY_BTN_MASK; in cyapa_gen5_get_query_data()
2474 memcpy(&cyapa->product_id[0], &resp_data[33], 5); in cyapa_gen5_get_query_data()
2475 cyapa->product_id[5] = '-'; in cyapa_gen5_get_query_data()
2476 memcpy(&cyapa->product_id[6], &resp_data[38], 6); in cyapa_gen5_get_query_data()
2477 cyapa->product_id[12] = '-'; in cyapa_gen5_get_query_data()
2478 memcpy(&cyapa->product_id[13], &resp_data[44], 2); in cyapa_gen5_get_query_data()
2479 cyapa->product_id[15] = '\0'; in cyapa_gen5_get_query_data()
2481 if (!cyapa->electrodes_x || !cyapa->electrodes_y || in cyapa_gen5_get_query_data()
2482 !cyapa->physical_size_x || !cyapa->physical_size_y || in cyapa_gen5_get_query_data()
2483 !cyapa->max_abs_x || !cyapa->max_abs_y || !cyapa->max_z) in cyapa_gen5_get_query_data()
2489 static int cyapa_gen5_do_operational_check(struct cyapa *cyapa) in cyapa_gen5_do_operational_check() argument
2491 struct device *dev = &cyapa->client->dev; in cyapa_gen5_do_operational_check()
2494 if (cyapa->gen != CYAPA_GEN5) in cyapa_gen5_do_operational_check()
2497 switch (cyapa->state) { in cyapa_gen5_do_operational_check()
2499 error = cyapa_pip_bl_exit(cyapa); in cyapa_gen5_do_operational_check()
2502 cyapa_gen5_bl_query_data(cyapa); in cyapa_gen5_do_operational_check()
2506 cyapa->state = CYAPA_STATE_GEN5_APP; in cyapa_gen5_do_operational_check()
2515 error = cyapa_gen5_set_power_mode(cyapa, in cyapa_gen5_do_operational_check()
2522 if (cyapa->platform_ver >= 2) { in cyapa_gen5_do_operational_check()
2523 error = cyapa_pip_set_proximity(cyapa, true); in cyapa_gen5_do_operational_check()
2531 error = cyapa_gen5_get_query_data(cyapa); in cyapa_gen5_do_operational_check()
2535 if (memcmp(cyapa->product_id, product_id, in cyapa_gen5_do_operational_check()
2538 __func__, cyapa->product_id); in cyapa_gen5_do_operational_check()
2554 bool cyapa_pip_irq_cmd_handler(struct cyapa *cyapa) in cyapa_pip_irq_cmd_handler() argument
2556 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_pip_irq_cmd_handler()
2569 cyapa_i2c_pip_read(cyapa, pip->irq_cmd_buf, in cyapa_pip_irq_cmd_handler()
2575 cyapa_i2c_pip_read(cyapa, in cyapa_pip_irq_cmd_handler()
2578 pip->resp_sort_func(cyapa, in cyapa_pip_irq_cmd_handler()
2596 cyapa_empty_pip_output_data(cyapa, in cyapa_pip_irq_cmd_handler()
2622 static void cyapa_pip_report_buttons(struct cyapa *cyapa, in cyapa_pip_report_buttons() argument
2625 struct input_dev *input = cyapa->input; in cyapa_pip_report_buttons()
2630 if (cyapa->btn_capability & CAPABILITY_LEFT_BTN_MASK) { in cyapa_pip_report_buttons()
2634 if (cyapa->btn_capability & CAPABILITY_MIDDLE_BTN_MASK) { in cyapa_pip_report_buttons()
2638 if (cyapa->btn_capability & CAPABILITY_RIGHT_BTN_MASK) { in cyapa_pip_report_buttons()
2646 static void cyapa_pip_report_proximity(struct cyapa *cyapa, in cyapa_pip_report_proximity() argument
2649 struct input_dev *input = cyapa->input; in cyapa_pip_report_proximity()
2657 static void cyapa_pip_report_slot_data(struct cyapa *cyapa, in cyapa_pip_report_slot_data() argument
2660 struct input_dev *input = cyapa->input; in cyapa_pip_report_slot_data()
2671 if (cyapa->x_origin) in cyapa_pip_report_slot_data()
2672 x = cyapa->max_abs_x - x; in cyapa_pip_report_slot_data()
2674 if (cyapa->y_origin) in cyapa_pip_report_slot_data()
2675 y = cyapa->max_abs_y - y; in cyapa_pip_report_slot_data()
2695 static void cyapa_pip_report_touches(struct cyapa *cyapa, in cyapa_pip_report_touches() argument
2698 struct input_dev *input = cyapa->input; in cyapa_pip_report_touches()
2706 cyapa_pip_report_slot_data(cyapa, in cyapa_pip_report_touches()
2713 int cyapa_pip_irq_handler(struct cyapa *cyapa) in cyapa_pip_irq_handler() argument
2715 struct device *dev = &cyapa->client->dev; in cyapa_pip_irq_handler()
2721 if (!cyapa_is_pip_app_mode(cyapa)) { in cyapa_pip_irq_handler()
2723 cyapa->gen, cyapa->state); in cyapa_pip_irq_handler()
2727 ret = cyapa_i2c_pip_read(cyapa, (u8 *)&report_data, in cyapa_pip_irq_handler()
2748 ret = cyapa_i2c_pip_read(cyapa, (u8 *)&report_data, report_len); in cyapa_pip_irq_handler()
2808 cyapa_pip_report_touches(cyapa, &report_data); in cyapa_pip_irq_handler()
2810 cyapa_pip_report_proximity(cyapa, &report_data); in cyapa_pip_irq_handler()
2812 cyapa_pip_report_buttons(cyapa, &report_data); in cyapa_pip_irq_handler()
2817 int cyapa_pip_bl_activate(struct cyapa *cyapa) { return 0; } in cyapa_pip_bl_activate() argument
2818 int cyapa_pip_bl_deactivate(struct cyapa *cyapa) { return 0; } in cyapa_pip_bl_deactivate() argument