Lines Matching refs:cyapa
345 static int cyapa_pip_event_process(struct cyapa *cyapa,
348 int cyapa_pip_cmd_state_initialize(struct cyapa *cyapa) in cyapa_pip_cmd_state_initialize() argument
350 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_pip_cmd_state_initialize()
364 cyapa->dev_pwr_mode = UNINIT_PWR_MODE; in cyapa_pip_cmd_state_initialize()
365 cyapa->dev_sleep_time = UNINIT_SLEEP_TIME; in cyapa_pip_cmd_state_initialize()
371 ssize_t cyapa_i2c_pip_read(struct cyapa *cyapa, u8 *buf, size_t size) in cyapa_i2c_pip_read() argument
381 ret = i2c_master_recv(cyapa->client, buf, size); in cyapa_i2c_pip_read()
391 ssize_t cyapa_i2c_pip_write(struct cyapa *cyapa, u8 *buf, size_t size) in cyapa_i2c_pip_write() argument
398 ret = i2c_master_send(cyapa->client, buf, size); in cyapa_i2c_pip_write()
406 static void cyapa_set_pip_pm_state(struct cyapa *cyapa, in cyapa_set_pip_pm_state() argument
409 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_set_pip_pm_state()
416 static void cyapa_reset_pip_pm_state(struct cyapa *cyapa) in cyapa_reset_pip_pm_state() argument
418 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_reset_pip_pm_state()
426 static enum cyapa_pm_stage cyapa_get_pip_pm_state(struct cyapa *cyapa) in cyapa_get_pip_pm_state() argument
428 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_get_pip_pm_state()
442 int cyapa_empty_pip_output_data(struct cyapa *cyapa, in cyapa_empty_pip_output_data() argument
445 struct input_dev *input = cyapa->input; in cyapa_empty_pip_output_data()
446 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_empty_pip_output_data()
447 enum cyapa_pm_stage pm_stage = cyapa_get_pip_pm_state(cyapa); in cyapa_empty_pip_output_data()
479 error = cyapa_i2c_pip_read(cyapa, pip->empty_buf, in cyapa_empty_pip_output_data()
495 func(cyapa, pip->empty_buf, length)) { in cyapa_empty_pip_output_data()
505 error = cyapa_i2c_pip_read(cyapa, pip->empty_buf, length); in cyapa_empty_pip_output_data()
515 func(cyapa, pip->empty_buf, length)) { in cyapa_empty_pip_output_data()
521 } else if (cyapa->operational && input && input->users && in cyapa_empty_pip_output_data()
525 cyapa_pip_event_process(cyapa, in cyapa_empty_pip_output_data()
536 struct cyapa *cyapa, in cyapa_do_i2c_pip_cmd_irq_sync() argument
540 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_do_i2c_pip_cmd_irq_sync()
547 error = cyapa_i2c_pip_write(cyapa, cmd, cmd_len); in cyapa_do_i2c_pip_cmd_irq_sync()
565 struct cyapa *cyapa, in cyapa_do_i2c_pip_cmd_polling() argument
571 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_do_i2c_pip_cmd_polling()
577 error = cyapa_i2c_pip_write(cyapa, cmd, cmd_len); in cyapa_do_i2c_pip_cmd_polling()
589 error = cyapa_empty_pip_output_data(cyapa, in cyapa_do_i2c_pip_cmd_polling()
605 struct cyapa *cyapa, in cyapa_i2c_pip_cmd_irq_sync() argument
612 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_i2c_pip_cmd_irq_sync()
640 error = cyapa_do_i2c_pip_cmd_irq_sync(cyapa, cmd, cmd_len, in cyapa_i2c_pip_cmd_irq_sync()
649 error = cyapa_empty_pip_output_data(cyapa, in cyapa_i2c_pip_cmd_irq_sync()
656 error = cyapa_do_i2c_pip_cmd_polling(cyapa, cmd, cmd_len, in cyapa_i2c_pip_cmd_irq_sync()
669 bool cyapa_sort_tsg_pip_bl_resp_data(struct cyapa *cyapa, in cyapa_sort_tsg_pip_bl_resp_data() argument
684 bool cyapa_sort_tsg_pip_app_resp_data(struct cyapa *cyapa, in cyapa_sort_tsg_pip_app_resp_data() argument
687 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_sort_tsg_pip_app_resp_data()
711 static bool cyapa_sort_pip_application_launch_data(struct cyapa *cyapa, in cyapa_sort_pip_application_launch_data() argument
727 static bool cyapa_sort_gen5_hid_descriptor_data(struct cyapa *cyapa, in cyapa_sort_gen5_hid_descriptor_data() argument
755 static bool cyapa_sort_pip_deep_sleep_data(struct cyapa *cyapa, in cyapa_sort_pip_deep_sleep_data() argument
767 static int gen5_idle_state_parse(struct cyapa *cyapa) in gen5_idle_state_parse() argument
780 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in gen5_idle_state_parse()
783 ret = cyapa_i2c_pip_read(cyapa, resp_data, 3); in gen5_idle_state_parse()
790 cyapa->gen = CYAPA_GEN5; in gen5_idle_state_parse()
792 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in gen5_idle_state_parse()
798 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in gen5_idle_state_parse()
816 cyapa->state = CYAPA_STATE_GEN5_BL; in gen5_idle_state_parse()
823 cyapa->state = CYAPA_STATE_GEN5_APP; in gen5_idle_state_parse()
826 cyapa->state = CYAPA_STATE_NO_DEVICE; in gen5_idle_state_parse()
833 static int gen5_hid_description_header_parse(struct cyapa *cyapa, u8 *reg_data) in gen5_hid_description_header_parse() argument
847 ret = cyapa_i2c_pip_read(cyapa, resp_data, in gen5_hid_description_header_parse()
860 cyapa->gen = CYAPA_GEN5; in gen5_hid_description_header_parse()
861 cyapa->state = CYAPA_STATE_GEN5_BL; in gen5_hid_description_header_parse()
867 cyapa->gen = CYAPA_GEN5; in gen5_hid_description_header_parse()
868 cyapa->state = CYAPA_STATE_GEN5_APP; in gen5_hid_description_header_parse()
874 cyapa->gen = CYAPA_GEN5; in gen5_hid_description_header_parse()
875 cyapa->state = CYAPA_STATE_GEN5_BL; in gen5_hid_description_header_parse()
881 cyapa->gen = CYAPA_GEN5; in gen5_hid_description_header_parse()
882 cyapa->state = CYAPA_STATE_GEN5_APP; in gen5_hid_description_header_parse()
885 cyapa->state = CYAPA_STATE_NO_DEVICE; in gen5_hid_description_header_parse()
891 static int gen5_report_data_header_parse(struct cyapa *cyapa, u8 *reg_data) in gen5_report_data_header_parse() argument
917 cyapa->gen = CYAPA_GEN5; in gen5_report_data_header_parse()
918 cyapa->state = CYAPA_STATE_GEN5_APP; in gen5_report_data_header_parse()
922 static int gen5_cmd_resp_header_parse(struct cyapa *cyapa, u8 *reg_data) in gen5_cmd_resp_header_parse() argument
924 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in gen5_cmd_resp_header_parse()
934 ret = cyapa_i2c_pip_read(cyapa, pip->empty_buf, length); in gen5_cmd_resp_header_parse()
943 cyapa->gen = CYAPA_GEN5; in gen5_cmd_resp_header_parse()
944 cyapa->state = CYAPA_STATE_GEN5_BL; in gen5_cmd_resp_header_parse()
947 cyapa->gen = CYAPA_GEN5; in gen5_cmd_resp_header_parse()
948 cyapa->state = CYAPA_STATE_GEN5_APP; in gen5_cmd_resp_header_parse()
959 cyapa->gen = CYAPA_GEN5; in gen5_cmd_resp_header_parse()
960 cyapa->state = CYAPA_STATE_GEN5_BL; in gen5_cmd_resp_header_parse()
966 cyapa->gen = CYAPA_GEN5; in gen5_cmd_resp_header_parse()
967 cyapa->state = CYAPA_STATE_GEN5_APP; in gen5_cmd_resp_header_parse()
970 cyapa->state = CYAPA_STATE_NO_DEVICE; in gen5_cmd_resp_header_parse()
976 static int cyapa_gen5_state_parse(struct cyapa *cyapa, u8 *reg_data, int len) in cyapa_gen5_state_parse() argument
983 cyapa->state = CYAPA_STATE_NO_DEVICE; in cyapa_gen5_state_parse()
988 gen5_idle_state_parse(cyapa); in cyapa_gen5_state_parse()
992 gen5_hid_description_header_parse(cyapa, reg_data); in cyapa_gen5_state_parse()
997 cyapa->gen = CYAPA_GEN5; in cyapa_gen5_state_parse()
998 cyapa->state = CYAPA_STATE_GEN5_APP; in cyapa_gen5_state_parse()
1002 cyapa->gen = CYAPA_GEN5; in cyapa_gen5_state_parse()
1003 cyapa->state = CYAPA_STATE_GEN5_BL; in cyapa_gen5_state_parse()
1009 gen5_report_data_header_parse(cyapa, reg_data); in cyapa_gen5_state_parse()
1012 gen5_cmd_resp_header_parse(cyapa, reg_data); in cyapa_gen5_state_parse()
1015 if (cyapa->gen == CYAPA_GEN5) { in cyapa_gen5_state_parse()
1022 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_gen5_state_parse()
1024 if (cyapa->state == CYAPA_STATE_GEN5_APP || in cyapa_gen5_state_parse()
1025 cyapa->state == CYAPA_STATE_GEN5_BL) in cyapa_gen5_state_parse()
1044 int cyapa_pip_bl_initiate(struct cyapa *cyapa, const struct firmware *fw) in cyapa_pip_bl_initiate() argument
1063 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_bl_initiate()
1103 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_pip_bl_initiate()
1115 static bool cyapa_sort_pip_bl_exit_data(struct cyapa *cyapa, u8 *buf, int len) in cyapa_sort_pip_bl_exit_data() argument
1135 int cyapa_pip_bl_exit(struct cyapa *cyapa) in cyapa_pip_bl_exit() argument
1147 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_pip_bl_exit()
1165 int cyapa_pip_bl_enter(struct cyapa *cyapa) in cyapa_pip_bl_enter() argument
1172 error = cyapa_poll_state(cyapa, 500); in cyapa_pip_bl_enter()
1177 if (cyapa_is_pip_bl_mode(cyapa)) in cyapa_pip_bl_enter()
1179 else if (!cyapa_is_pip_app_mode(cyapa)) in cyapa_pip_bl_enter()
1183 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_bl_enter()
1191 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_pip_bl_enter()
1199 cyapa->operational = false; in cyapa_pip_bl_enter()
1200 if (cyapa->gen == CYAPA_GEN5) in cyapa_pip_bl_enter()
1201 cyapa->state = CYAPA_STATE_GEN5_BL; in cyapa_pip_bl_enter()
1202 else if (cyapa->gen == CYAPA_GEN6) in cyapa_pip_bl_enter()
1203 cyapa->state = CYAPA_STATE_GEN6_BL; in cyapa_pip_bl_enter()
1207 static int cyapa_pip_fw_head_check(struct cyapa *cyapa, in cyapa_pip_fw_head_check() argument
1213 switch (cyapa->gen) { in cyapa_pip_fw_head_check()
1221 if (cyapa->platform_ver < 2) { in cyapa_pip_fw_head_check()
1238 int cyapa_pip_check_fw(struct cyapa *cyapa, const struct firmware *fw) in cyapa_pip_check_fw() argument
1240 struct device *dev = &cyapa->client->dev; in cyapa_pip_check_fw()
1252 if (cyapa_pip_fw_head_check(cyapa, in cyapa_pip_check_fw()
1313 static int cyapa_pip_write_fw_block(struct cyapa *cyapa, in cyapa_pip_write_fw_block() argument
1369 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, cmd_len, in cyapa_pip_write_fw_block()
1380 int cyapa_pip_do_fw_update(struct cyapa *cyapa, in cyapa_pip_do_fw_update() argument
1383 struct device *dev = &cyapa->client->dev; in cyapa_pip_do_fw_update()
1389 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_do_fw_update()
1399 error = cyapa_pip_write_fw_block(cyapa, &image_records[i]); in cyapa_pip_do_fw_update()
1410 static int cyapa_gen5_change_power_state(struct cyapa *cyapa, u8 power_state) in cyapa_gen5_change_power_state() argument
1419 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, sizeof(cmd), in cyapa_gen5_change_power_state()
1429 static int cyapa_gen5_set_interval_time(struct cyapa *cyapa, in cyapa_gen5_set_interval_time() argument
1475 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, cmd_len, in cyapa_gen5_set_interval_time()
1486 static int cyapa_gen5_get_interval_time(struct cyapa *cyapa, in cyapa_gen5_get_interval_time() argument
1529 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, cmd_len, in cyapa_gen5_get_interval_time()
1544 static int cyapa_gen5_disable_pip_report(struct cyapa *cyapa) in cyapa_gen5_disable_pip_report() argument
1563 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, sizeof(cmd), in cyapa_gen5_disable_pip_report()
1574 int cyapa_pip_set_proximity(struct cyapa *cyapa, bool enable) in cyapa_pip_set_proximity() argument
1584 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, sizeof(cmd), in cyapa_pip_set_proximity()
1596 int cyapa_pip_deep_sleep(struct cyapa *cyapa, u8 state) in cyapa_pip_deep_sleep() argument
1605 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, sizeof(cmd), in cyapa_pip_deep_sleep()
1614 static int cyapa_gen5_set_power_mode(struct cyapa *cyapa, in cyapa_gen5_set_power_mode() argument
1617 struct device *dev = &cyapa->client->dev; in cyapa_gen5_set_power_mode()
1621 if (cyapa->state != CYAPA_STATE_GEN5_APP) in cyapa_gen5_set_power_mode()
1624 cyapa_set_pip_pm_state(cyapa, pm_stage); in cyapa_gen5_set_power_mode()
1626 if (PIP_DEV_GET_PWR_STATE(cyapa) == UNINIT_PWR_MODE) { in cyapa_gen5_set_power_mode()
1632 PIP_DEV_SET_PWR_STATE(cyapa, PWR_MODE_OFF); in cyapa_gen5_set_power_mode()
1635 if (PIP_DEV_UNINIT_SLEEP_TIME(cyapa) && in cyapa_gen5_set_power_mode()
1636 PIP_DEV_GET_PWR_STATE(cyapa) != PWR_MODE_OFF) in cyapa_gen5_set_power_mode()
1637 if (cyapa_gen5_get_interval_time(cyapa, in cyapa_gen5_set_power_mode()
1639 &cyapa->dev_sleep_time) != 0) in cyapa_gen5_set_power_mode()
1640 PIP_DEV_SET_SLEEP_TIME(cyapa, UNINIT_SLEEP_TIME); in cyapa_gen5_set_power_mode()
1642 if (PIP_DEV_GET_PWR_STATE(cyapa) == power_mode) { in cyapa_gen5_set_power_mode()
1646 PIP_DEV_GET_SLEEP_TIME(cyapa) == sleep_time) { in cyapa_gen5_set_power_mode()
1653 error = cyapa_pip_deep_sleep(cyapa, PIP_DEEP_SLEEP_STATE_OFF); in cyapa_gen5_set_power_mode()
1659 PIP_DEV_SET_PWR_STATE(cyapa, PWR_MODE_OFF); in cyapa_gen5_set_power_mode()
1668 if (PIP_DEV_GET_PWR_STATE(cyapa) == PWR_MODE_OFF) { in cyapa_gen5_set_power_mode()
1669 error = cyapa_pip_deep_sleep(cyapa, PIP_DEEP_SLEEP_STATE_ON); in cyapa_gen5_set_power_mode()
1677 error = cyapa_gen5_change_power_state(cyapa, in cyapa_gen5_set_power_mode()
1684 PIP_DEV_SET_PWR_STATE(cyapa, PWR_MODE_FULL_ACTIVE); in cyapa_gen5_set_power_mode()
1686 error = cyapa_gen5_change_power_state(cyapa, in cyapa_gen5_set_power_mode()
1693 PIP_DEV_SET_PWR_STATE(cyapa, PWR_MODE_BTN_ONLY); in cyapa_gen5_set_power_mode()
1700 if (PIP_DEV_UNINIT_SLEEP_TIME(cyapa) || in cyapa_gen5_set_power_mode()
1701 sleep_time != PIP_DEV_GET_SLEEP_TIME(cyapa)) in cyapa_gen5_set_power_mode()
1702 if (cyapa_gen5_set_interval_time(cyapa, in cyapa_gen5_set_power_mode()
1705 PIP_DEV_SET_SLEEP_TIME(cyapa, sleep_time); in cyapa_gen5_set_power_mode()
1711 error = cyapa_gen5_change_power_state(cyapa, power_state); in cyapa_gen5_set_power_mode()
1729 cyapa_gen5_disable_pip_report(cyapa); in cyapa_gen5_set_power_mode()
1731 PIP_DEV_SET_PWR_STATE(cyapa, in cyapa_gen5_set_power_mode()
1736 cyapa_reset_pip_pm_state(cyapa); in cyapa_gen5_set_power_mode()
1740 int cyapa_pip_resume_scanning(struct cyapa *cyapa) in cyapa_pip_resume_scanning() argument
1748 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_resume_scanning()
1751 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_pip_resume_scanning()
1759 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_resume_scanning()
1764 int cyapa_pip_suspend_scanning(struct cyapa *cyapa) in cyapa_pip_suspend_scanning() argument
1772 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_suspend_scanning()
1775 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_pip_suspend_scanning()
1783 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_suspend_scanning()
1788 static int cyapa_pip_calibrate_pwcs(struct cyapa *cyapa, in cyapa_pip_calibrate_pwcs() argument
1798 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL); in cyapa_pip_calibrate_pwcs()
1808 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_pip_calibrate_pwcs()
1823 struct cyapa *cyapa = dev_get_drvdata(dev); in cyapa_pip_do_calibrate() local
1827 error = cyapa_pip_suspend_scanning(cyapa); in cyapa_pip_do_calibrate()
1832 calibrate_error = cyapa_pip_calibrate_pwcs(cyapa, in cyapa_pip_do_calibrate()
1838 calibrate_error = cyapa_pip_calibrate_pwcs(cyapa, in cyapa_pip_do_calibrate()
1845 error = cyapa_pip_resume_scanning(cyapa); in cyapa_pip_do_calibrate()
1901 static void cyapa_gen5_guess_electrodes(struct cyapa *cyapa, in cyapa_gen5_guess_electrodes() argument
1904 if (cyapa->electrodes_rx != 0) { in cyapa_gen5_guess_electrodes()
1905 *electrodes_rx = cyapa->electrodes_rx; in cyapa_gen5_guess_electrodes()
1906 *electrodes_tx = (cyapa->electrodes_x == *electrodes_rx) ? in cyapa_gen5_guess_electrodes()
1907 cyapa->electrodes_y : cyapa->electrodes_x; in cyapa_gen5_guess_electrodes()
1909 *electrodes_tx = min(cyapa->electrodes_x, cyapa->electrodes_y); in cyapa_gen5_guess_electrodes()
1910 *electrodes_rx = max(cyapa->electrodes_x, cyapa->electrodes_y); in cyapa_gen5_guess_electrodes()
1932 static int cyapa_gen5_read_idac_data(struct cyapa *cyapa, in cyapa_gen5_read_idac_data() argument
1974 if (cyapa->aligned_electrodes_rx == 0) { in cyapa_gen5_read_idac_data()
1975 cyapa_gen5_guess_electrodes(cyapa, in cyapa_gen5_read_idac_data()
1977 cyapa->aligned_electrodes_rx = in cyapa_gen5_read_idac_data()
1981 (cyapa->aligned_electrodes_rx + 7) & ~7u; in cyapa_gen5_read_idac_data()
1991 offset = cyapa->aligned_electrodes_rx * (*data_size); in cyapa_gen5_read_idac_data()
1992 if (cyapa->electrodes_rx == cyapa->electrodes_x) in cyapa_gen5_read_idac_data()
1993 electrodes_tx = cyapa->electrodes_y; in cyapa_gen5_read_idac_data()
1995 electrodes_tx = cyapa->electrodes_x; in cyapa_gen5_read_idac_data()
1996 max_element_cnt = ((cyapa->aligned_electrodes_rx + 7) & in cyapa_gen5_read_idac_data()
2000 max_element_cnt = cyapa->electrodes_x + in cyapa_gen5_read_idac_data()
2001 cyapa->electrodes_y; in cyapa_gen5_read_idac_data()
2022 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_gen5_read_idac_data()
2066 tmp_count < cyapa->aligned_electrodes_rx && in cyapa_gen5_read_idac_data()
2100 if (tmp_count == cyapa->aligned_electrodes_rx) { in cyapa_gen5_read_idac_data()
2101 cyapa->electrodes_rx = cyapa->electrodes_rx ? in cyapa_gen5_read_idac_data()
2102 cyapa->electrodes_rx : electrodes_rx; in cyapa_gen5_read_idac_data()
2104 cyapa->electrodes_rx = cyapa->electrodes_rx ? in cyapa_gen5_read_idac_data()
2105 cyapa->electrodes_rx : electrodes_rx; in cyapa_gen5_read_idac_data()
2106 cyapa->aligned_electrodes_rx = electrodes_rx; in cyapa_gen5_read_idac_data()
2108 cyapa->electrodes_rx = cyapa->electrodes_rx ? in cyapa_gen5_read_idac_data()
2109 cyapa->electrodes_rx : electrodes_tx; in cyapa_gen5_read_idac_data()
2110 cyapa->aligned_electrodes_rx = tmp_count; in cyapa_gen5_read_idac_data()
2121 static int cyapa_gen5_read_mutual_idac_data(struct cyapa *cyapa, in cyapa_gen5_read_mutual_idac_data() argument
2132 error = cyapa_gen5_read_idac_data(cyapa, in cyapa_gen5_read_mutual_idac_data()
2140 error = cyapa_gen5_read_idac_data(cyapa, in cyapa_gen5_read_mutual_idac_data()
2148 static int cyapa_gen5_read_self_idac_data(struct cyapa *cyapa, in cyapa_gen5_read_self_idac_data() argument
2159 error = cyapa_gen5_read_idac_data(cyapa, in cyapa_gen5_read_self_idac_data()
2169 error = cyapa_gen5_read_idac_data(cyapa, in cyapa_gen5_read_self_idac_data()
2177 static ssize_t cyapa_gen5_execute_panel_scan(struct cyapa *cyapa) in cyapa_gen5_execute_panel_scan() argument
2192 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_gen5_execute_panel_scan()
2205 static int cyapa_gen5_read_panel_scan_raw_data(struct cyapa *cyapa, in cyapa_gen5_read_panel_scan_raw_data() argument
2252 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_gen5_read_panel_scan_raw_data()
2303 struct cyapa *cyapa = dev_get_drvdata(dev); in cyapa_gen5_show_baseline() local
2317 if (!cyapa_is_pip_app_mode(cyapa)) in cyapa_gen5_show_baseline()
2321 error = cyapa_pip_suspend_scanning(cyapa); in cyapa_gen5_show_baseline()
2327 error = cyapa_gen5_read_mutual_idac_data(cyapa, in cyapa_gen5_show_baseline()
2335 error = cyapa_gen5_read_self_idac_data(cyapa, in cyapa_gen5_show_baseline()
2343 error = cyapa_gen5_execute_panel_scan(cyapa); in cyapa_gen5_show_baseline()
2348 error = cyapa_gen5_read_panel_scan_raw_data(cyapa, in cyapa_gen5_show_baseline()
2351 cyapa->electrodes_x * cyapa->electrodes_y, in cyapa_gen5_show_baseline()
2359 error = cyapa_gen5_read_panel_scan_raw_data(cyapa, in cyapa_gen5_show_baseline()
2362 cyapa->electrodes_x + cyapa->electrodes_y, in cyapa_gen5_show_baseline()
2370 error = cyapa_gen5_read_panel_scan_raw_data(cyapa, in cyapa_gen5_show_baseline()
2373 cyapa->electrodes_x * cyapa->electrodes_y, in cyapa_gen5_show_baseline()
2381 error = cyapa_gen5_read_panel_scan_raw_data(cyapa, in cyapa_gen5_show_baseline()
2384 cyapa->electrodes_x + cyapa->electrodes_y, in cyapa_gen5_show_baseline()
2392 error = cyapa_gen5_read_panel_scan_raw_data(cyapa, in cyapa_gen5_show_baseline()
2395 cyapa->electrodes_x * cyapa->electrodes_y, in cyapa_gen5_show_baseline()
2403 error = cyapa_gen5_read_panel_scan_raw_data(cyapa, in cyapa_gen5_show_baseline()
2406 cyapa->electrodes_x + cyapa->electrodes_y, in cyapa_gen5_show_baseline()
2415 resume_error = cyapa_pip_resume_scanning(cyapa); in cyapa_gen5_show_baseline()
2436 bool cyapa_pip_sort_system_info_data(struct cyapa *cyapa, in cyapa_pip_sort_system_info_data() argument
2446 static int cyapa_gen5_bl_query_data(struct cyapa *cyapa) in cyapa_gen5_bl_query_data() argument
2453 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_gen5_bl_query_data()
2461 memcpy(&cyapa->product_id[0], &resp_data[8], 5); in cyapa_gen5_bl_query_data()
2462 cyapa->product_id[5] = '-'; in cyapa_gen5_bl_query_data()
2463 memcpy(&cyapa->product_id[6], &resp_data[13], 6); in cyapa_gen5_bl_query_data()
2464 cyapa->product_id[12] = '-'; in cyapa_gen5_bl_query_data()
2465 memcpy(&cyapa->product_id[13], &resp_data[19], 2); in cyapa_gen5_bl_query_data()
2466 cyapa->product_id[15] = '\0'; in cyapa_gen5_bl_query_data()
2468 cyapa->fw_maj_ver = resp_data[22]; in cyapa_gen5_bl_query_data()
2469 cyapa->fw_min_ver = resp_data[23]; in cyapa_gen5_bl_query_data()
2471 cyapa->platform_ver = (resp_data[26] >> PIP_BL_PLATFORM_VER_SHIFT) & in cyapa_gen5_bl_query_data()
2477 static int cyapa_gen5_get_query_data(struct cyapa *cyapa) in cyapa_gen5_get_query_data() argument
2485 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, in cyapa_gen5_get_query_data()
2497 cyapa->platform_ver = (resp_data[49] >> PIP_BL_PLATFORM_VER_SHIFT) & in cyapa_gen5_get_query_data()
2499 if (cyapa->gen == CYAPA_GEN5 && cyapa->platform_ver < 2) { in cyapa_gen5_get_query_data()
2501 cyapa->fw_maj_ver = resp_data[15]; in cyapa_gen5_get_query_data()
2502 cyapa->fw_min_ver = resp_data[16]; in cyapa_gen5_get_query_data()
2504 cyapa->fw_maj_ver = resp_data[9]; in cyapa_gen5_get_query_data()
2505 cyapa->fw_min_ver = resp_data[10]; in cyapa_gen5_get_query_data()
2508 cyapa->electrodes_x = resp_data[52]; in cyapa_gen5_get_query_data()
2509 cyapa->electrodes_y = resp_data[53]; in cyapa_gen5_get_query_data()
2511 cyapa->physical_size_x = get_unaligned_le16(&resp_data[54]) / 100; in cyapa_gen5_get_query_data()
2512 cyapa->physical_size_y = get_unaligned_le16(&resp_data[56]) / 100; in cyapa_gen5_get_query_data()
2514 cyapa->max_abs_x = get_unaligned_le16(&resp_data[58]); in cyapa_gen5_get_query_data()
2515 cyapa->max_abs_y = get_unaligned_le16(&resp_data[60]); in cyapa_gen5_get_query_data()
2517 cyapa->max_z = get_unaligned_le16(&resp_data[62]); in cyapa_gen5_get_query_data()
2519 cyapa->x_origin = resp_data[64] & 0x01; in cyapa_gen5_get_query_data()
2520 cyapa->y_origin = resp_data[65] & 0x01; in cyapa_gen5_get_query_data()
2522 cyapa->btn_capability = (resp_data[70] << 3) & CAPABILITY_BTN_MASK; in cyapa_gen5_get_query_data()
2524 memcpy(&cyapa->product_id[0], &resp_data[33], 5); in cyapa_gen5_get_query_data()
2525 cyapa->product_id[5] = '-'; in cyapa_gen5_get_query_data()
2526 memcpy(&cyapa->product_id[6], &resp_data[38], 6); in cyapa_gen5_get_query_data()
2527 cyapa->product_id[12] = '-'; in cyapa_gen5_get_query_data()
2528 memcpy(&cyapa->product_id[13], &resp_data[44], 2); in cyapa_gen5_get_query_data()
2529 cyapa->product_id[15] = '\0'; in cyapa_gen5_get_query_data()
2531 if (!cyapa->electrodes_x || !cyapa->electrodes_y || in cyapa_gen5_get_query_data()
2532 !cyapa->physical_size_x || !cyapa->physical_size_y || in cyapa_gen5_get_query_data()
2533 !cyapa->max_abs_x || !cyapa->max_abs_y || !cyapa->max_z) in cyapa_gen5_get_query_data()
2539 static int cyapa_gen5_do_operational_check(struct cyapa *cyapa) in cyapa_gen5_do_operational_check() argument
2541 struct device *dev = &cyapa->client->dev; in cyapa_gen5_do_operational_check()
2544 if (cyapa->gen != CYAPA_GEN5) in cyapa_gen5_do_operational_check()
2547 switch (cyapa->state) { in cyapa_gen5_do_operational_check()
2549 error = cyapa_pip_bl_exit(cyapa); in cyapa_gen5_do_operational_check()
2552 cyapa_gen5_bl_query_data(cyapa); in cyapa_gen5_do_operational_check()
2556 cyapa->state = CYAPA_STATE_GEN5_APP; in cyapa_gen5_do_operational_check()
2566 error = cyapa_gen5_set_power_mode(cyapa, in cyapa_gen5_do_operational_check()
2573 if (cyapa->platform_ver >= 2) { in cyapa_gen5_do_operational_check()
2574 error = cyapa_pip_set_proximity(cyapa, true); in cyapa_gen5_do_operational_check()
2582 error = cyapa_gen5_get_query_data(cyapa); in cyapa_gen5_do_operational_check()
2586 if (memcmp(cyapa->product_id, product_id, in cyapa_gen5_do_operational_check()
2589 __func__, cyapa->product_id); in cyapa_gen5_do_operational_check()
2605 bool cyapa_pip_irq_cmd_handler(struct cyapa *cyapa) in cyapa_pip_irq_cmd_handler() argument
2607 struct cyapa_pip_cmd_states *pip = &cyapa->cmd_states.pip; in cyapa_pip_irq_cmd_handler()
2620 cyapa_i2c_pip_read(cyapa, pip->irq_cmd_buf, in cyapa_pip_irq_cmd_handler()
2626 cyapa_i2c_pip_read(cyapa, in cyapa_pip_irq_cmd_handler()
2629 pip->resp_sort_func(cyapa, in cyapa_pip_irq_cmd_handler()
2647 cyapa_empty_pip_output_data(cyapa, in cyapa_pip_irq_cmd_handler()
2673 static void cyapa_pip_report_buttons(struct cyapa *cyapa, in cyapa_pip_report_buttons() argument
2676 struct input_dev *input = cyapa->input; in cyapa_pip_report_buttons()
2681 if (cyapa->btn_capability & CAPABILITY_LEFT_BTN_MASK) { in cyapa_pip_report_buttons()
2685 if (cyapa->btn_capability & CAPABILITY_MIDDLE_BTN_MASK) { in cyapa_pip_report_buttons()
2689 if (cyapa->btn_capability & CAPABILITY_RIGHT_BTN_MASK) { in cyapa_pip_report_buttons()
2697 static void cyapa_pip_report_proximity(struct cyapa *cyapa, in cyapa_pip_report_proximity() argument
2700 struct input_dev *input = cyapa->input; in cyapa_pip_report_proximity()
2708 static void cyapa_pip_report_slot_data(struct cyapa *cyapa, in cyapa_pip_report_slot_data() argument
2711 struct input_dev *input = cyapa->input; in cyapa_pip_report_slot_data()
2722 if (cyapa->x_origin) in cyapa_pip_report_slot_data()
2723 x = cyapa->max_abs_x - x; in cyapa_pip_report_slot_data()
2725 if (cyapa->y_origin) in cyapa_pip_report_slot_data()
2726 y = cyapa->max_abs_y - y; in cyapa_pip_report_slot_data()
2746 static void cyapa_pip_report_touches(struct cyapa *cyapa, in cyapa_pip_report_touches() argument
2749 struct input_dev *input = cyapa->input; in cyapa_pip_report_touches()
2757 cyapa_pip_report_slot_data(cyapa, in cyapa_pip_report_touches()
2764 int cyapa_pip_irq_handler(struct cyapa *cyapa) in cyapa_pip_irq_handler() argument
2766 struct device *dev = &cyapa->client->dev; in cyapa_pip_irq_handler()
2771 if (!cyapa_is_pip_app_mode(cyapa)) { in cyapa_pip_irq_handler()
2773 cyapa->gen, cyapa->state); in cyapa_pip_irq_handler()
2777 ret = cyapa_i2c_pip_read(cyapa, (u8 *)&report_data, in cyapa_pip_irq_handler()
2798 ret = cyapa_i2c_pip_read(cyapa, (u8 *)&report_data, report_len); in cyapa_pip_irq_handler()
2805 return cyapa_pip_event_process(cyapa, &report_data); in cyapa_pip_irq_handler()
2808 static int cyapa_pip_event_process(struct cyapa *cyapa, in cyapa_pip_event_process() argument
2811 struct device *dev = &cyapa->client->dev; in cyapa_pip_event_process()
2874 cyapa_pip_report_touches(cyapa, report_data); in cyapa_pip_event_process()
2876 cyapa_pip_report_proximity(cyapa, report_data); in cyapa_pip_event_process()
2878 cyapa_pip_report_buttons(cyapa, report_data); in cyapa_pip_event_process()
2883 int cyapa_pip_bl_activate(struct cyapa *cyapa) { return 0; } in cyapa_pip_bl_activate() argument
2884 int cyapa_pip_bl_deactivate(struct cyapa *cyapa) { return 0; } in cyapa_pip_bl_deactivate() argument