Lines Matching refs:psmouse
243 static void alps_process_packet_v1_v2(struct psmouse *psmouse) in alps_process_packet_v1_v2() argument
245 struct alps_data *priv = psmouse->private; in alps_process_packet_v1_v2()
246 unsigned char *packet = psmouse->packet; in alps_process_packet_v1_v2()
247 struct input_dev *dev = psmouse->dev; in alps_process_packet_v1_v2()
501 static void alps_report_mt_data(struct psmouse *psmouse, int n) in alps_report_mt_data() argument
503 struct alps_data *priv = psmouse->private; in alps_report_mt_data()
504 struct input_dev *dev = psmouse->dev; in alps_report_mt_data()
515 static void alps_report_semi_mt_data(struct psmouse *psmouse, int fingers) in alps_report_semi_mt_data() argument
517 struct alps_data *priv = psmouse->private; in alps_report_semi_mt_data()
518 struct input_dev *dev = psmouse->dev; in alps_report_semi_mt_data()
528 alps_report_mt_data(psmouse, (fingers <= 2) ? fingers : 2); in alps_report_semi_mt_data()
541 static void alps_process_trackstick_packet_v3(struct psmouse *psmouse) in alps_process_trackstick_packet_v3() argument
543 struct alps_data *priv = psmouse->private; in alps_process_trackstick_packet_v3()
544 unsigned char *packet = psmouse->packet; in alps_process_trackstick_packet_v3()
550 psmouse_warn(psmouse, in alps_process_trackstick_packet_v3()
557 psmouse_dbg(psmouse, "Bad trackstick packet, discarding\n"); in alps_process_trackstick_packet_v3()
620 struct psmouse *psmouse) in alps_decode_pinnacle() argument
644 struct psmouse *psmouse) in alps_decode_rushmore() argument
646 alps_decode_pinnacle(f, p, psmouse); in alps_decode_rushmore()
658 struct psmouse *psmouse) in alps_decode_dolphin() argument
661 struct alps_data *priv = psmouse->private; in alps_decode_dolphin()
694 static void alps_process_touchpad_packet_v3_v5(struct psmouse *psmouse) in alps_process_touchpad_packet_v3_v5() argument
696 struct alps_data *priv = psmouse->private; in alps_process_touchpad_packet_v3_v5()
697 unsigned char *packet = psmouse->packet; in alps_process_touchpad_packet_v3_v5()
704 priv->decode_fields(f, packet, psmouse); in alps_process_touchpad_packet_v3_v5()
728 psmouse); in alps_process_touchpad_packet_v3_v5()
737 psmouse); in alps_process_touchpad_packet_v3_v5()
778 alps_report_semi_mt_data(psmouse, fingers); in alps_process_touchpad_packet_v3_v5()
789 static void alps_process_packet_v3(struct psmouse *psmouse) in alps_process_packet_v3() argument
791 unsigned char *packet = psmouse->packet; in alps_process_packet_v3()
802 alps_process_trackstick_packet_v3(psmouse); in alps_process_packet_v3()
806 alps_process_touchpad_packet_v3_v5(psmouse); in alps_process_packet_v3()
809 static void alps_process_packet_v6(struct psmouse *psmouse) in alps_process_packet_v6() argument
811 struct alps_data *priv = psmouse->private; in alps_process_packet_v6()
812 unsigned char *packet = psmouse->packet; in alps_process_packet_v6()
813 struct input_dev *dev = psmouse->dev; in alps_process_packet_v6()
826 psmouse_warn(psmouse, in alps_process_packet_v6()
882 static void alps_process_packet_v4(struct psmouse *psmouse) in alps_process_packet_v4() argument
884 struct alps_data *priv = psmouse->private; in alps_process_packet_v4()
885 unsigned char *packet = psmouse->packet; in alps_process_packet_v4()
928 alps_report_semi_mt_data(psmouse, f->fingers); in alps_process_packet_v4()
931 static bool alps_is_valid_package_v7(struct psmouse *psmouse) in alps_is_valid_package_v7() argument
933 switch (psmouse->pktcnt) { in alps_is_valid_package_v7()
935 return (psmouse->packet[2] & 0x40) == 0x40; in alps_is_valid_package_v7()
937 return (psmouse->packet[3] & 0x48) == 0x48; in alps_is_valid_package_v7()
939 return (psmouse->packet[5] & 0x40) == 0x00; in alps_is_valid_package_v7()
1021 struct psmouse *psmouse) in alps_decode_packet_v7() argument
1023 struct alps_data *priv = psmouse->private; in alps_decode_packet_v7()
1081 static void alps_process_trackstick_packet_v7(struct psmouse *psmouse) in alps_process_trackstick_packet_v7() argument
1083 struct alps_data *priv = psmouse->private; in alps_process_trackstick_packet_v7()
1084 unsigned char *packet = psmouse->packet; in alps_process_trackstick_packet_v7()
1090 psmouse_warn(psmouse, in alps_process_trackstick_packet_v7()
1114 static void alps_process_touchpad_packet_v7(struct psmouse *psmouse) in alps_process_touchpad_packet_v7() argument
1116 struct alps_data *priv = psmouse->private; in alps_process_touchpad_packet_v7()
1117 struct input_dev *dev = psmouse->dev; in alps_process_touchpad_packet_v7()
1122 if (priv->decode_fields(f, psmouse->packet, psmouse)) in alps_process_touchpad_packet_v7()
1125 alps_report_mt_data(psmouse, alps_get_mt_count(f->mt)); in alps_process_touchpad_packet_v7()
1136 static void alps_process_packet_v7(struct psmouse *psmouse) in alps_process_packet_v7() argument
1138 unsigned char *packet = psmouse->packet; in alps_process_packet_v7()
1141 alps_process_trackstick_packet_v7(psmouse); in alps_process_packet_v7()
1143 alps_process_touchpad_packet_v7(psmouse); in alps_process_packet_v7()
1165 unsigned char *p, struct psmouse *psmouse) in alps_decode_ss4_v2() argument
1167 struct alps_data *priv = psmouse->private; in alps_decode_ss4_v2()
1255 static void alps_process_packet_ss4_v2(struct psmouse *psmouse) in alps_process_packet_ss4_v2() argument
1257 struct alps_data *priv = psmouse->private; in alps_process_packet_ss4_v2()
1258 unsigned char *packet = psmouse->packet; in alps_process_packet_ss4_v2()
1259 struct input_dev *dev = psmouse->dev; in alps_process_packet_ss4_v2()
1263 priv->decode_fields(f, packet, psmouse); in alps_process_packet_ss4_v2()
1273 priv->decode_fields(f, priv->multi_data, psmouse); in alps_process_packet_ss4_v2()
1295 alps_report_mt_data(psmouse, (f->fingers <= 4) ? f->fingers : 4); in alps_process_packet_ss4_v2()
1307 static bool alps_is_valid_package_ss4_v2(struct psmouse *psmouse) in alps_is_valid_package_ss4_v2() argument
1309 if (psmouse->pktcnt == 4 && ((psmouse->packet[3] & 0x08) != 0x08)) in alps_is_valid_package_ss4_v2()
1311 if (psmouse->pktcnt == 6 && ((psmouse->packet[5] & 0x10) != 0x0)) in alps_is_valid_package_ss4_v2()
1322 struct psmouse *psmouse = priv->psmouse; in alps_register_bare_ps2_mouse() local
1333 psmouse_err(psmouse, "failed to allocate secondary device\n"); in alps_register_bare_ps2_mouse()
1339 psmouse->ps2dev.serio->phys, in alps_register_bare_ps2_mouse()
1353 dev3->dev.parent = &psmouse->ps2dev.serio->dev; in alps_register_bare_ps2_mouse()
1365 psmouse_err(psmouse, in alps_register_bare_ps2_mouse()
1385 static void alps_report_bare_ps2_packet(struct psmouse *psmouse, in alps_report_bare_ps2_packet() argument
1389 struct alps_data *priv = psmouse->private; in alps_report_bare_ps2_packet()
1397 dev2 = psmouse->dev; in alps_report_bare_ps2_packet()
1401 psmouse_queue_work(psmouse, &priv->dev3_register_work, in alps_report_bare_ps2_packet()
1420 static psmouse_ret_t alps_handle_interleaved_ps2(struct psmouse *psmouse) in alps_handle_interleaved_ps2() argument
1422 struct alps_data *priv = psmouse->private; in alps_handle_interleaved_ps2()
1424 if (psmouse->pktcnt < 6) in alps_handle_interleaved_ps2()
1427 if (psmouse->pktcnt == 6) { in alps_handle_interleaved_ps2()
1440 if (psmouse->packet[6] & 0x80) { in alps_handle_interleaved_ps2()
1448 if (((psmouse->packet[3] | in alps_handle_interleaved_ps2()
1449 psmouse->packet[4] | in alps_handle_interleaved_ps2()
1450 psmouse->packet[5]) & 0x80) || in alps_handle_interleaved_ps2()
1451 (!alps_is_valid_first_byte(priv, psmouse->packet[6]))) { in alps_handle_interleaved_ps2()
1452 psmouse_dbg(psmouse, in alps_handle_interleaved_ps2()
1454 psmouse->packet + 3); in alps_handle_interleaved_ps2()
1458 priv->process_packet(psmouse); in alps_handle_interleaved_ps2()
1461 psmouse->packet[0] = psmouse->packet[6]; in alps_handle_interleaved_ps2()
1462 psmouse->pktcnt = 1; in alps_handle_interleaved_ps2()
1482 alps_report_bare_ps2_packet(psmouse, &psmouse->packet[3], in alps_handle_interleaved_ps2()
1492 psmouse->packet[3] = psmouse->packet[6] & 0xf7; in alps_handle_interleaved_ps2()
1493 psmouse->pktcnt = 4; in alps_handle_interleaved_ps2()
1501 struct psmouse *psmouse = (struct psmouse *)data; in alps_flush_packet() local
1502 struct alps_data *priv = psmouse->private; in alps_flush_packet()
1504 serio_pause_rx(psmouse->ps2dev.serio); in alps_flush_packet()
1506 if (psmouse->pktcnt == psmouse->pktsize) { in alps_flush_packet()
1513 if ((psmouse->packet[3] | in alps_flush_packet()
1514 psmouse->packet[4] | in alps_flush_packet()
1515 psmouse->packet[5]) & 0x80) { in alps_flush_packet()
1516 psmouse_dbg(psmouse, in alps_flush_packet()
1518 psmouse->packet + 3); in alps_flush_packet()
1520 priv->process_packet(psmouse); in alps_flush_packet()
1522 psmouse->pktcnt = 0; in alps_flush_packet()
1525 serio_continue_rx(psmouse->ps2dev.serio); in alps_flush_packet()
1528 static psmouse_ret_t alps_process_byte(struct psmouse *psmouse) in alps_process_byte() argument
1530 struct alps_data *priv = psmouse->private; in alps_process_byte()
1540 !psmouse->out_of_sync_cnt && in alps_process_byte()
1541 (psmouse->packet[0] & 0xc8) == 0x08) { in alps_process_byte()
1543 if (psmouse->pktcnt == 3) { in alps_process_byte()
1544 alps_report_bare_ps2_packet(psmouse, psmouse->packet, in alps_process_byte()
1554 psmouse->pktcnt >= 4 && (psmouse->packet[3] & 0x0f) == 0x0f) { in alps_process_byte()
1555 return alps_handle_interleaved_ps2(psmouse); in alps_process_byte()
1558 if (!alps_is_valid_first_byte(priv, psmouse->packet[0])) { in alps_process_byte()
1559 psmouse_dbg(psmouse, in alps_process_byte()
1561 psmouse->packet[0], priv->mask0, priv->byte0); in alps_process_byte()
1567 psmouse->pktcnt >= 2 && psmouse->pktcnt <= psmouse->pktsize && in alps_process_byte()
1568 (psmouse->packet[psmouse->pktcnt - 1] & 0x80)) { in alps_process_byte()
1569 psmouse_dbg(psmouse, "refusing packet[%i] = %x\n", in alps_process_byte()
1570 psmouse->pktcnt - 1, in alps_process_byte()
1571 psmouse->packet[psmouse->pktcnt - 1]); in alps_process_byte()
1574 psmouse->pktcnt == psmouse->pktsize) { in alps_process_byte()
1591 !alps_is_valid_package_v7(psmouse)) || in alps_process_byte()
1593 !alps_is_valid_package_ss4_v2(psmouse))) { in alps_process_byte()
1594 psmouse_dbg(psmouse, "refusing packet[%i] = %x\n", in alps_process_byte()
1595 psmouse->pktcnt - 1, in alps_process_byte()
1596 psmouse->packet[psmouse->pktcnt - 1]); in alps_process_byte()
1600 if (psmouse->pktcnt == psmouse->pktsize) { in alps_process_byte()
1601 priv->process_packet(psmouse); in alps_process_byte()
1608 static int alps_command_mode_send_nibble(struct psmouse *psmouse, int nibble) in alps_command_mode_send_nibble() argument
1610 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_command_mode_send_nibble()
1611 struct alps_data *priv = psmouse->private; in alps_command_mode_send_nibble()
1628 static int alps_command_mode_set_addr(struct psmouse *psmouse, int addr) in alps_command_mode_set_addr() argument
1630 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_command_mode_set_addr()
1631 struct alps_data *priv = psmouse->private; in alps_command_mode_set_addr()
1639 if (alps_command_mode_send_nibble(psmouse, nibble)) in alps_command_mode_set_addr()
1646 static int __alps_command_mode_read_reg(struct psmouse *psmouse, int addr) in __alps_command_mode_read_reg() argument
1648 struct ps2dev *ps2dev = &psmouse->ps2dev; in __alps_command_mode_read_reg()
1665 static int alps_command_mode_read_reg(struct psmouse *psmouse, int addr) in alps_command_mode_read_reg() argument
1667 if (alps_command_mode_set_addr(psmouse, addr)) in alps_command_mode_read_reg()
1669 return __alps_command_mode_read_reg(psmouse, addr); in alps_command_mode_read_reg()
1672 static int __alps_command_mode_write_reg(struct psmouse *psmouse, u8 value) in __alps_command_mode_write_reg() argument
1674 if (alps_command_mode_send_nibble(psmouse, (value >> 4) & 0xf)) in __alps_command_mode_write_reg()
1676 if (alps_command_mode_send_nibble(psmouse, value & 0xf)) in __alps_command_mode_write_reg()
1681 static int alps_command_mode_write_reg(struct psmouse *psmouse, int addr, in alps_command_mode_write_reg() argument
1684 if (alps_command_mode_set_addr(psmouse, addr)) in alps_command_mode_write_reg()
1686 return __alps_command_mode_write_reg(psmouse, value); in alps_command_mode_write_reg()
1689 static int alps_rpt_cmd(struct psmouse *psmouse, int init_command, in alps_rpt_cmd() argument
1692 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_rpt_cmd()
1707 psmouse_dbg(psmouse, "%2.2X report: %3ph\n", in alps_rpt_cmd()
1728 static int alps_enter_command_mode(struct psmouse *psmouse) in alps_enter_command_mode() argument
1732 if (alps_rpt_cmd(psmouse, 0, PSMOUSE_CMD_RESET_WRAP, param)) { in alps_enter_command_mode()
1733 psmouse_err(psmouse, "failed to enter command mode\n"); in alps_enter_command_mode()
1738 psmouse_dbg(psmouse, in alps_enter_command_mode()
1745 static inline int alps_exit_command_mode(struct psmouse *psmouse) in alps_exit_command_mode() argument
1747 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_exit_command_mode()
1758 static int alps_passthrough_mode_v2(struct psmouse *psmouse, bool enable) in alps_passthrough_mode_v2() argument
1760 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_passthrough_mode_v2()
1775 static int alps_absolute_mode_v1_v2(struct psmouse *psmouse) in alps_absolute_mode_v1_v2() argument
1777 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_absolute_mode_v1_v2()
1791 return ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETPOLL); in alps_absolute_mode_v1_v2()
1794 static int alps_monitor_mode_send_word(struct psmouse *psmouse, u16 word) in alps_monitor_mode_send_word() argument
1804 if (alps_command_mode_send_nibble(psmouse, nibble)) in alps_monitor_mode_send_word()
1811 static int alps_monitor_mode_write_reg(struct psmouse *psmouse, in alps_monitor_mode_write_reg() argument
1814 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_monitor_mode_write_reg()
1818 alps_monitor_mode_send_word(psmouse, 0x0A0) || in alps_monitor_mode_write_reg()
1819 alps_monitor_mode_send_word(psmouse, addr) || in alps_monitor_mode_write_reg()
1820 alps_monitor_mode_send_word(psmouse, value) || in alps_monitor_mode_write_reg()
1827 static int alps_monitor_mode(struct psmouse *psmouse, bool enable) in alps_monitor_mode() argument
1829 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_monitor_mode()
1851 static int alps_absolute_mode_v6(struct psmouse *psmouse) in alps_absolute_mode_v6() argument
1857 if (alps_monitor_mode(psmouse, true)) in alps_absolute_mode_v6()
1860 ret = alps_monitor_mode_write_reg(psmouse, 0x000, reg_val); in alps_absolute_mode_v6()
1862 if (alps_monitor_mode(psmouse, false)) in alps_absolute_mode_v6()
1868 static int alps_get_status(struct psmouse *psmouse, char *param) in alps_get_status() argument
1871 if (alps_rpt_cmd(psmouse, 0, PSMOUSE_CMD_DISABLE, param)) in alps_get_status()
1886 static int alps_tap_mode(struct psmouse *psmouse, int enable) in alps_tap_mode() argument
1888 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_tap_mode()
1899 if (alps_get_status(psmouse, param)) in alps_tap_mode()
1909 static int alps_poll(struct psmouse *psmouse) in alps_poll() argument
1911 struct alps_data *priv = psmouse->private; in alps_poll()
1912 unsigned char buf[sizeof(psmouse->packet)]; in alps_poll()
1916 alps_passthrough_mode_v2(psmouse, true); in alps_poll()
1918 poll_failed = ps2_command(&psmouse->ps2dev, buf, in alps_poll()
1919 PSMOUSE_CMD_POLL | (psmouse->pktsize << 8)) < 0; in alps_poll()
1922 alps_passthrough_mode_v2(psmouse, false); in alps_poll()
1927 if ((psmouse->badbyte & 0xc8) == 0x08) { in alps_poll()
1931 if (ps2_command(&psmouse->ps2dev, buf, PSMOUSE_CMD_POLL | (3 << 8))) in alps_poll()
1935 memcpy(psmouse->packet, buf, sizeof(buf)); in alps_poll()
1939 static int alps_hw_init_v1_v2(struct psmouse *psmouse) in alps_hw_init_v1_v2() argument
1941 struct alps_data *priv = psmouse->private; in alps_hw_init_v1_v2()
1944 alps_passthrough_mode_v2(psmouse, true)) { in alps_hw_init_v1_v2()
1948 if (alps_tap_mode(psmouse, true)) { in alps_hw_init_v1_v2()
1949 psmouse_warn(psmouse, "Failed to enable hardware tapping\n"); in alps_hw_init_v1_v2()
1953 if (alps_absolute_mode_v1_v2(psmouse)) { in alps_hw_init_v1_v2()
1954 psmouse_err(psmouse, "Failed to enable absolute mode\n"); in alps_hw_init_v1_v2()
1959 alps_passthrough_mode_v2(psmouse, false)) { in alps_hw_init_v1_v2()
1964 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSTREAM)) { in alps_hw_init_v1_v2()
1965 psmouse_err(psmouse, "Failed to enable stream mode\n"); in alps_hw_init_v1_v2()
1972 static int alps_hw_init_v6(struct psmouse *psmouse) in alps_hw_init_v6() argument
1977 if (alps_passthrough_mode_v2(psmouse, true)) in alps_hw_init_v6()
1980 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || in alps_hw_init_v6()
1981 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || in alps_hw_init_v6()
1982 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || in alps_hw_init_v6()
1983 ps2_command(&psmouse->ps2dev, ¶m[0], PSMOUSE_CMD_SETRATE) || in alps_hw_init_v6()
1984 ps2_command(&psmouse->ps2dev, ¶m[1], PSMOUSE_CMD_SETRATE)) in alps_hw_init_v6()
1987 if (alps_passthrough_mode_v2(psmouse, false)) in alps_hw_init_v6()
1990 if (alps_absolute_mode_v6(psmouse)) { in alps_hw_init_v6()
1991 psmouse_err(psmouse, "Failed to enable absolute mode\n"); in alps_hw_init_v6()
2001 static int alps_passthrough_mode_v3(struct psmouse *psmouse, in alps_passthrough_mode_v3() argument
2006 if (alps_enter_command_mode(psmouse)) in alps_passthrough_mode_v3()
2009 reg_val = alps_command_mode_read_reg(psmouse, reg_base + 0x0008); in alps_passthrough_mode_v3()
2018 ret = __alps_command_mode_write_reg(psmouse, reg_val); in alps_passthrough_mode_v3()
2021 if (alps_exit_command_mode(psmouse)) in alps_passthrough_mode_v3()
2027 static int alps_absolute_mode_v3(struct psmouse *psmouse) in alps_absolute_mode_v3() argument
2031 reg_val = alps_command_mode_read_reg(psmouse, 0x0004); in alps_absolute_mode_v3()
2036 if (__alps_command_mode_write_reg(psmouse, reg_val)) in alps_absolute_mode_v3()
2042 static int alps_probe_trackstick_v3(struct psmouse *psmouse, int reg_base) in alps_probe_trackstick_v3() argument
2046 if (alps_enter_command_mode(psmouse)) in alps_probe_trackstick_v3()
2049 reg_val = alps_command_mode_read_reg(psmouse, reg_base + 0x08); in alps_probe_trackstick_v3()
2057 alps_exit_command_mode(psmouse); in alps_probe_trackstick_v3()
2061 static int alps_setup_trackstick_v3(struct psmouse *psmouse, int reg_base) in alps_setup_trackstick_v3() argument
2063 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_setup_trackstick_v3()
2067 if (alps_passthrough_mode_v3(psmouse, reg_base, true)) in alps_setup_trackstick_v3()
2079 if (alps_rpt_cmd(psmouse, 0, PSMOUSE_CMD_SETSCALE21, param)) { in alps_setup_trackstick_v3()
2080 psmouse_warn(psmouse, "Failed to initialize trackstick (E7 report failed)\n"); in alps_setup_trackstick_v3()
2083 psmouse_dbg(psmouse, "trackstick E7 report: %3ph\n", param); in alps_setup_trackstick_v3()
2094 alps_command_mode_send_nibble(psmouse, 0x9) || in alps_setup_trackstick_v3()
2095 alps_command_mode_send_nibble(psmouse, 0x4)) { in alps_setup_trackstick_v3()
2096 psmouse_err(psmouse, in alps_setup_trackstick_v3()
2107 if (alps_enter_command_mode(psmouse) || in alps_setup_trackstick_v3()
2108 alps_command_mode_write_reg(psmouse, in alps_setup_trackstick_v3()
2110 alps_exit_command_mode(psmouse)) in alps_setup_trackstick_v3()
2115 if (alps_passthrough_mode_v3(psmouse, reg_base, false)) in alps_setup_trackstick_v3()
2121 static int alps_hw_init_v3(struct psmouse *psmouse) in alps_hw_init_v3() argument
2123 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_hw_init_v3()
2127 reg_val = alps_probe_trackstick_v3(psmouse, ALPS_REG_BASE_PINNACLE); in alps_hw_init_v3()
2132 alps_setup_trackstick_v3(psmouse, ALPS_REG_BASE_PINNACLE) == -EIO) in alps_hw_init_v3()
2135 if (alps_enter_command_mode(psmouse) || in alps_hw_init_v3()
2136 alps_absolute_mode_v3(psmouse)) { in alps_hw_init_v3()
2137 psmouse_err(psmouse, "Failed to enter absolute mode\n"); in alps_hw_init_v3()
2141 reg_val = alps_command_mode_read_reg(psmouse, 0x0006); in alps_hw_init_v3()
2144 if (__alps_command_mode_write_reg(psmouse, reg_val | 0x01)) in alps_hw_init_v3()
2147 reg_val = alps_command_mode_read_reg(psmouse, 0x0007); in alps_hw_init_v3()
2150 if (__alps_command_mode_write_reg(psmouse, reg_val | 0x01)) in alps_hw_init_v3()
2153 if (alps_command_mode_read_reg(psmouse, 0x0144) == -1) in alps_hw_init_v3()
2155 if (__alps_command_mode_write_reg(psmouse, 0x04)) in alps_hw_init_v3()
2158 if (alps_command_mode_read_reg(psmouse, 0x0159) == -1) in alps_hw_init_v3()
2160 if (__alps_command_mode_write_reg(psmouse, 0x03)) in alps_hw_init_v3()
2163 if (alps_command_mode_read_reg(psmouse, 0x0163) == -1) in alps_hw_init_v3()
2165 if (alps_command_mode_write_reg(psmouse, 0x0163, 0x03)) in alps_hw_init_v3()
2168 if (alps_command_mode_read_reg(psmouse, 0x0162) == -1) in alps_hw_init_v3()
2170 if (alps_command_mode_write_reg(psmouse, 0x0162, 0x04)) in alps_hw_init_v3()
2173 alps_exit_command_mode(psmouse); in alps_hw_init_v3()
2179 psmouse_err(psmouse, "Failed to enable data reporting\n"); in alps_hw_init_v3()
2191 alps_exit_command_mode(psmouse); in alps_hw_init_v3()
2195 static int alps_get_v3_v7_resolution(struct psmouse *psmouse, int reg_pitch) in alps_get_v3_v7_resolution() argument
2198 struct alps_data *priv = psmouse->private; in alps_get_v3_v7_resolution()
2200 reg = alps_command_mode_read_reg(psmouse, reg_pitch); in alps_get_v3_v7_resolution()
2210 reg = alps_command_mode_read_reg(psmouse, reg_pitch + 1); in alps_get_v3_v7_resolution()
2226 psmouse_dbg(psmouse, in alps_get_v3_v7_resolution()
2234 static int alps_hw_init_rushmore_v3(struct psmouse *psmouse) in alps_hw_init_rushmore_v3() argument
2236 struct alps_data *priv = psmouse->private; in alps_hw_init_rushmore_v3()
2237 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_hw_init_rushmore_v3()
2241 reg_val = alps_setup_trackstick_v3(psmouse, in alps_hw_init_rushmore_v3()
2247 if (alps_enter_command_mode(psmouse) || in alps_hw_init_rushmore_v3()
2248 alps_command_mode_read_reg(psmouse, 0xc2d9) == -1 || in alps_hw_init_rushmore_v3()
2249 alps_command_mode_write_reg(psmouse, 0xc2cb, 0x00)) in alps_hw_init_rushmore_v3()
2252 if (alps_get_v3_v7_resolution(psmouse, 0xc2da)) in alps_hw_init_rushmore_v3()
2255 reg_val = alps_command_mode_read_reg(psmouse, 0xc2c6); in alps_hw_init_rushmore_v3()
2258 if (__alps_command_mode_write_reg(psmouse, reg_val & 0xfd)) in alps_hw_init_rushmore_v3()
2261 if (alps_command_mode_write_reg(psmouse, 0xc2c9, 0x64)) in alps_hw_init_rushmore_v3()
2265 reg_val = alps_command_mode_read_reg(psmouse, 0xc2c4); in alps_hw_init_rushmore_v3()
2268 if (__alps_command_mode_write_reg(psmouse, reg_val | 0x02)) in alps_hw_init_rushmore_v3()
2271 alps_exit_command_mode(psmouse); in alps_hw_init_rushmore_v3()
2275 alps_exit_command_mode(psmouse); in alps_hw_init_rushmore_v3()
2280 static int alps_absolute_mode_v4(struct psmouse *psmouse) in alps_absolute_mode_v4() argument
2284 reg_val = alps_command_mode_read_reg(psmouse, 0x0004); in alps_absolute_mode_v4()
2289 if (__alps_command_mode_write_reg(psmouse, reg_val)) in alps_absolute_mode_v4()
2295 static int alps_hw_init_v4(struct psmouse *psmouse) in alps_hw_init_v4() argument
2297 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_hw_init_v4()
2300 if (alps_enter_command_mode(psmouse)) in alps_hw_init_v4()
2303 if (alps_absolute_mode_v4(psmouse)) { in alps_hw_init_v4()
2304 psmouse_err(psmouse, "Failed to enter absolute mode\n"); in alps_hw_init_v4()
2308 if (alps_command_mode_write_reg(psmouse, 0x0007, 0x8c)) in alps_hw_init_v4()
2311 if (alps_command_mode_write_reg(psmouse, 0x0149, 0x03)) in alps_hw_init_v4()
2314 if (alps_command_mode_write_reg(psmouse, 0x0160, 0x03)) in alps_hw_init_v4()
2317 if (alps_command_mode_write_reg(psmouse, 0x017f, 0x15)) in alps_hw_init_v4()
2320 if (alps_command_mode_write_reg(psmouse, 0x0151, 0x01)) in alps_hw_init_v4()
2323 if (alps_command_mode_write_reg(psmouse, 0x0168, 0x03)) in alps_hw_init_v4()
2326 if (alps_command_mode_write_reg(psmouse, 0x014a, 0x03)) in alps_hw_init_v4()
2329 if (alps_command_mode_write_reg(psmouse, 0x0161, 0x03)) in alps_hw_init_v4()
2332 alps_exit_command_mode(psmouse); in alps_hw_init_v4()
2352 psmouse_err(psmouse, "Failed to enable data reporting\n"); in alps_hw_init_v4()
2364 alps_exit_command_mode(psmouse); in alps_hw_init_v4()
2368 static int alps_get_otp_values_ss4_v2(struct psmouse *psmouse, in alps_get_otp_values_ss4_v2() argument
2371 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_get_otp_values_ss4_v2()
2432 static int alps_set_defaults_ss4_v2(struct psmouse *psmouse, in alps_set_defaults_ss4_v2() argument
2439 if (alps_get_otp_values_ss4_v2(psmouse, 0, &otp[0][0]) || in alps_set_defaults_ss4_v2()
2440 alps_get_otp_values_ss4_v2(psmouse, 1, &otp[1][0])) in alps_set_defaults_ss4_v2()
2450 static int alps_dolphin_get_device_area(struct psmouse *psmouse, in alps_dolphin_get_device_area() argument
2453 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_dolphin_get_device_area()
2457 if (alps_enter_command_mode(psmouse)) in alps_dolphin_get_device_area()
2490 if (alps_exit_command_mode(psmouse)) in alps_dolphin_get_device_area()
2496 static int alps_hw_init_dolphin_v1(struct psmouse *psmouse) in alps_hw_init_dolphin_v1() argument
2498 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_hw_init_dolphin_v1()
2513 static int alps_hw_init_v7(struct psmouse *psmouse) in alps_hw_init_v7() argument
2515 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_hw_init_v7()
2518 if (alps_enter_command_mode(psmouse) || in alps_hw_init_v7()
2519 alps_command_mode_read_reg(psmouse, 0xc2d9) == -1) in alps_hw_init_v7()
2522 if (alps_get_v3_v7_resolution(psmouse, 0xc397)) in alps_hw_init_v7()
2525 if (alps_command_mode_write_reg(psmouse, 0xc2c9, 0x64)) in alps_hw_init_v7()
2528 reg_val = alps_command_mode_read_reg(psmouse, 0xc2c4); in alps_hw_init_v7()
2531 if (__alps_command_mode_write_reg(psmouse, reg_val | 0x02)) in alps_hw_init_v7()
2534 alps_exit_command_mode(psmouse); in alps_hw_init_v7()
2538 alps_exit_command_mode(psmouse); in alps_hw_init_v7()
2542 static int alps_hw_init_ss4_v2(struct psmouse *psmouse) in alps_hw_init_ss4_v2() argument
2544 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_hw_init_ss4_v2()
2557 if (alps_exit_command_mode(psmouse) || in alps_hw_init_ss4_v2()
2558 alps_enter_command_mode(psmouse) || in alps_hw_init_ss4_v2()
2559 alps_command_mode_write_reg(psmouse, 0x001D, 0x20)) { in alps_hw_init_ss4_v2()
2562 alps_exit_command_mode(psmouse); in alps_hw_init_ss4_v2()
2567 alps_exit_command_mode(psmouse); in alps_hw_init_ss4_v2()
2571 static int alps_set_protocol(struct psmouse *psmouse, in alps_set_protocol() argument
2575 psmouse->private = priv; in alps_set_protocol()
2577 setup_timer(&priv->timer, alps_flush_packet, (unsigned long)psmouse); in alps_set_protocol()
2620 if (alps_probe_trackstick_v3(psmouse, in alps_set_protocol()
2644 if (alps_dolphin_get_device_area(psmouse, priv)) in alps_set_protocol()
2681 if (alps_set_defaults_ss4_v2(psmouse, priv)) in alps_set_protocol()
2710 static int alps_identify(struct psmouse *psmouse, struct alps_data *priv) in alps_identify() argument
2722 if (alps_rpt_cmd(psmouse, PSMOUSE_CMD_SETRES, in alps_identify()
2733 if (alps_rpt_cmd(psmouse, PSMOUSE_CMD_SETRES, in alps_identify()
2735 alps_rpt_cmd(psmouse, PSMOUSE_CMD_SETRES, in alps_identify()
2737 alps_exit_command_mode(psmouse)) in alps_identify()
2757 psmouse_dbg(psmouse, in alps_identify()
2766 error = alps_set_protocol(psmouse, priv, protocol); in alps_identify()
2774 static int alps_reconnect(struct psmouse *psmouse) in alps_reconnect() argument
2776 struct alps_data *priv = psmouse->private; in alps_reconnect()
2778 psmouse_reset(psmouse); in alps_reconnect()
2780 if (alps_identify(psmouse, priv) < 0) in alps_reconnect()
2783 return priv->hw_init(psmouse); in alps_reconnect()
2786 static void alps_disconnect(struct psmouse *psmouse) in alps_disconnect() argument
2788 struct alps_data *priv = psmouse->private; in alps_disconnect()
2790 psmouse_reset(psmouse); in alps_disconnect()
2856 int alps_init(struct psmouse *psmouse) in alps_init() argument
2858 struct alps_data *priv = psmouse->private; in alps_init()
2859 struct input_dev *dev1 = psmouse->dev; in alps_init()
2862 error = priv->hw_init(psmouse); in alps_init()
2914 psmouse_err(psmouse, in alps_init()
2921 psmouse->ps2dev.serio->phys); in alps_init()
2934 dev2->dev.parent = &psmouse->ps2dev.serio->dev; in alps_init()
2947 psmouse_err(psmouse, in alps_init()
2957 priv->psmouse = psmouse; in alps_init()
2962 psmouse->protocol_handler = alps_process_byte; in alps_init()
2963 psmouse->poll = alps_poll; in alps_init()
2964 psmouse->disconnect = alps_disconnect; in alps_init()
2965 psmouse->reconnect = alps_reconnect; in alps_init()
2966 psmouse->pktsize = priv->proto_version == ALPS_PROTO_V4 ? 8 : 6; in alps_init()
2969 psmouse->resync_time = 0; in alps_init()
2972 psmouse->resetafter = psmouse->pktsize * 2; in alps_init()
2977 psmouse_reset(psmouse); in alps_init()
2982 kfree(psmouse->private); in alps_init()
2983 psmouse->private = NULL; in alps_init()
2987 int alps_detect(struct psmouse *psmouse, bool set_properties) in alps_detect() argument
2992 error = alps_identify(psmouse, NULL); in alps_detect()
3002 psmouse_reset(psmouse); in alps_detect()
3008 error = alps_identify(psmouse, priv); in alps_detect()
3015 psmouse->vendor = "ALPS"; in alps_detect()
3016 psmouse->name = priv->flags & ALPS_DUALPOINT ? in alps_detect()
3018 psmouse->model = priv->proto_version; in alps_detect()
3027 psmouse->private = NULL; in alps_detect()