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()
505 static void alps_report_mt_data(struct psmouse *psmouse, int n) in alps_report_mt_data() argument
507 struct alps_data *priv = psmouse->private; in alps_report_mt_data()
508 struct input_dev *dev = psmouse->dev; in alps_report_mt_data()
519 static void alps_report_semi_mt_data(struct psmouse *psmouse, int fingers) in alps_report_semi_mt_data() argument
521 struct alps_data *priv = psmouse->private; in alps_report_semi_mt_data()
522 struct input_dev *dev = psmouse->dev; in alps_report_semi_mt_data()
550 static void alps_process_trackstick_packet_v3(struct psmouse *psmouse) in alps_process_trackstick_packet_v3() argument
552 struct alps_data *priv = psmouse->private; in alps_process_trackstick_packet_v3()
553 unsigned char *packet = psmouse->packet; in alps_process_trackstick_packet_v3()
559 psmouse_warn(psmouse, in alps_process_trackstick_packet_v3()
566 psmouse_dbg(psmouse, "Bad trackstick packet, discarding\n"); in alps_process_trackstick_packet_v3()
629 struct psmouse *psmouse) in alps_decode_pinnacle() argument
655 struct psmouse *psmouse) in alps_decode_rushmore() argument
683 struct psmouse *psmouse) in alps_decode_dolphin() argument
686 struct alps_data *priv = psmouse->private; in alps_decode_dolphin()
719 static void alps_process_touchpad_packet_v3_v5(struct psmouse *psmouse) in alps_process_touchpad_packet_v3_v5() argument
721 struct alps_data *priv = psmouse->private; in alps_process_touchpad_packet_v3_v5()
722 unsigned char *packet = psmouse->packet; in alps_process_touchpad_packet_v3_v5()
729 priv->decode_fields(f, packet, psmouse); in alps_process_touchpad_packet_v3_v5()
750 priv->decode_fields(f, priv->multi_data, psmouse); in alps_process_touchpad_packet_v3_v5()
786 alps_report_semi_mt_data(psmouse, fingers); in alps_process_touchpad_packet_v3_v5()
797 static void alps_process_packet_v3(struct psmouse *psmouse) in alps_process_packet_v3() argument
799 unsigned char *packet = psmouse->packet; in alps_process_packet_v3()
810 alps_process_trackstick_packet_v3(psmouse); in alps_process_packet_v3()
814 alps_process_touchpad_packet_v3_v5(psmouse); in alps_process_packet_v3()
817 static void alps_process_packet_v6(struct psmouse *psmouse) in alps_process_packet_v6() argument
819 struct alps_data *priv = psmouse->private; in alps_process_packet_v6()
820 unsigned char *packet = psmouse->packet; in alps_process_packet_v6()
821 struct input_dev *dev = psmouse->dev; in alps_process_packet_v6()
834 psmouse_warn(psmouse, in alps_process_packet_v6()
890 static void alps_process_packet_v4(struct psmouse *psmouse) in alps_process_packet_v4() argument
892 struct alps_data *priv = psmouse->private; in alps_process_packet_v4()
893 unsigned char *packet = psmouse->packet; in alps_process_packet_v4()
936 alps_report_semi_mt_data(psmouse, f->fingers); in alps_process_packet_v4()
939 static bool alps_is_valid_package_v7(struct psmouse *psmouse) in alps_is_valid_package_v7() argument
941 switch (psmouse->pktcnt) { in alps_is_valid_package_v7()
943 return (psmouse->packet[2] & 0x40) == 0x40; in alps_is_valid_package_v7()
945 return (psmouse->packet[3] & 0x48) == 0x48; in alps_is_valid_package_v7()
947 return (psmouse->packet[5] & 0x40) == 0x00; in alps_is_valid_package_v7()
1029 struct psmouse *psmouse) in alps_decode_packet_v7() argument
1031 struct alps_data *priv = psmouse->private; in alps_decode_packet_v7()
1089 static void alps_process_trackstick_packet_v7(struct psmouse *psmouse) in alps_process_trackstick_packet_v7() argument
1091 struct alps_data *priv = psmouse->private; in alps_process_trackstick_packet_v7()
1092 unsigned char *packet = psmouse->packet; in alps_process_trackstick_packet_v7()
1098 psmouse_warn(psmouse, in alps_process_trackstick_packet_v7()
1122 static void alps_process_touchpad_packet_v7(struct psmouse *psmouse) in alps_process_touchpad_packet_v7() argument
1124 struct alps_data *priv = psmouse->private; in alps_process_touchpad_packet_v7()
1125 struct input_dev *dev = psmouse->dev; in alps_process_touchpad_packet_v7()
1130 if (priv->decode_fields(f, psmouse->packet, psmouse)) in alps_process_touchpad_packet_v7()
1133 alps_report_mt_data(psmouse, alps_get_mt_count(f->mt)); in alps_process_touchpad_packet_v7()
1144 static void alps_process_packet_v7(struct psmouse *psmouse) in alps_process_packet_v7() argument
1146 unsigned char *packet = psmouse->packet; in alps_process_packet_v7()
1149 alps_process_trackstick_packet_v7(psmouse); in alps_process_packet_v7()
1151 alps_process_touchpad_packet_v7(psmouse); in alps_process_packet_v7()
1173 unsigned char *p, struct psmouse *psmouse) in alps_decode_ss4_v2() argument
1175 struct alps_data *priv = psmouse->private; in alps_decode_ss4_v2()
1263 static void alps_process_packet_ss4_v2(struct psmouse *psmouse) in alps_process_packet_ss4_v2() argument
1265 struct alps_data *priv = psmouse->private; in alps_process_packet_ss4_v2()
1266 unsigned char *packet = psmouse->packet; in alps_process_packet_ss4_v2()
1267 struct input_dev *dev = psmouse->dev; in alps_process_packet_ss4_v2()
1271 priv->decode_fields(f, packet, psmouse); in alps_process_packet_ss4_v2()
1281 priv->decode_fields(f, priv->multi_data, psmouse); in alps_process_packet_ss4_v2()
1303 alps_report_mt_data(psmouse, (f->fingers <= 4) ? f->fingers : 4); in alps_process_packet_ss4_v2()
1315 static bool alps_is_valid_package_ss4_v2(struct psmouse *psmouse) in alps_is_valid_package_ss4_v2() argument
1317 if (psmouse->pktcnt == 4 && ((psmouse->packet[3] & 0x08) != 0x08)) in alps_is_valid_package_ss4_v2()
1319 if (psmouse->pktcnt == 6 && ((psmouse->packet[5] & 0x10) != 0x0)) in alps_is_valid_package_ss4_v2()
1330 struct psmouse *psmouse = priv->psmouse; in alps_register_bare_ps2_mouse() local
1341 psmouse_err(psmouse, "failed to allocate secondary device\n"); in alps_register_bare_ps2_mouse()
1347 psmouse->ps2dev.serio->phys, in alps_register_bare_ps2_mouse()
1361 dev3->dev.parent = &psmouse->ps2dev.serio->dev; in alps_register_bare_ps2_mouse()
1373 psmouse_err(psmouse, in alps_register_bare_ps2_mouse()
1393 static void alps_report_bare_ps2_packet(struct psmouse *psmouse, in alps_report_bare_ps2_packet() argument
1397 struct alps_data *priv = psmouse->private; in alps_report_bare_ps2_packet()
1405 dev2 = psmouse->dev; in alps_report_bare_ps2_packet()
1409 psmouse_queue_work(psmouse, &priv->dev3_register_work, in alps_report_bare_ps2_packet()
1428 static psmouse_ret_t alps_handle_interleaved_ps2(struct psmouse *psmouse) in alps_handle_interleaved_ps2() argument
1430 struct alps_data *priv = psmouse->private; in alps_handle_interleaved_ps2()
1432 if (psmouse->pktcnt < 6) in alps_handle_interleaved_ps2()
1435 if (psmouse->pktcnt == 6) { in alps_handle_interleaved_ps2()
1448 if (psmouse->packet[6] & 0x80) { in alps_handle_interleaved_ps2()
1456 if (((psmouse->packet[3] | in alps_handle_interleaved_ps2()
1457 psmouse->packet[4] | in alps_handle_interleaved_ps2()
1458 psmouse->packet[5]) & 0x80) || in alps_handle_interleaved_ps2()
1459 (!alps_is_valid_first_byte(priv, psmouse->packet[6]))) { in alps_handle_interleaved_ps2()
1460 psmouse_dbg(psmouse, in alps_handle_interleaved_ps2()
1462 psmouse->packet + 3); in alps_handle_interleaved_ps2()
1466 priv->process_packet(psmouse); in alps_handle_interleaved_ps2()
1469 psmouse->packet[0] = psmouse->packet[6]; in alps_handle_interleaved_ps2()
1470 psmouse->pktcnt = 1; in alps_handle_interleaved_ps2()
1490 alps_report_bare_ps2_packet(psmouse, &psmouse->packet[3], in alps_handle_interleaved_ps2()
1500 psmouse->packet[3] = psmouse->packet[6] & 0xf7; in alps_handle_interleaved_ps2()
1501 psmouse->pktcnt = 4; in alps_handle_interleaved_ps2()
1509 struct psmouse *psmouse = (struct psmouse *)data; in alps_flush_packet() local
1510 struct alps_data *priv = psmouse->private; in alps_flush_packet()
1512 serio_pause_rx(psmouse->ps2dev.serio); in alps_flush_packet()
1514 if (psmouse->pktcnt == psmouse->pktsize) { in alps_flush_packet()
1521 if ((psmouse->packet[3] | in alps_flush_packet()
1522 psmouse->packet[4] | in alps_flush_packet()
1523 psmouse->packet[5]) & 0x80) { in alps_flush_packet()
1524 psmouse_dbg(psmouse, in alps_flush_packet()
1526 psmouse->packet + 3); in alps_flush_packet()
1528 priv->process_packet(psmouse); in alps_flush_packet()
1530 psmouse->pktcnt = 0; in alps_flush_packet()
1533 serio_continue_rx(psmouse->ps2dev.serio); in alps_flush_packet()
1536 static psmouse_ret_t alps_process_byte(struct psmouse *psmouse) in alps_process_byte() argument
1538 struct alps_data *priv = psmouse->private; in alps_process_byte()
1548 !psmouse->out_of_sync_cnt && in alps_process_byte()
1549 (psmouse->packet[0] & 0xc8) == 0x08) { in alps_process_byte()
1551 if (psmouse->pktcnt == 3) { in alps_process_byte()
1552 alps_report_bare_ps2_packet(psmouse, psmouse->packet, in alps_process_byte()
1562 psmouse->pktcnt >= 4 && (psmouse->packet[3] & 0x0f) == 0x0f) { in alps_process_byte()
1563 return alps_handle_interleaved_ps2(psmouse); in alps_process_byte()
1566 if (!alps_is_valid_first_byte(priv, psmouse->packet[0])) { in alps_process_byte()
1567 psmouse_dbg(psmouse, in alps_process_byte()
1569 psmouse->packet[0], priv->mask0, priv->byte0); in alps_process_byte()
1575 psmouse->pktcnt >= 2 && psmouse->pktcnt <= psmouse->pktsize && in alps_process_byte()
1576 (psmouse->packet[psmouse->pktcnt - 1] & 0x80)) { in alps_process_byte()
1577 psmouse_dbg(psmouse, "refusing packet[%i] = %x\n", in alps_process_byte()
1578 psmouse->pktcnt - 1, in alps_process_byte()
1579 psmouse->packet[psmouse->pktcnt - 1]); in alps_process_byte()
1582 psmouse->pktcnt == psmouse->pktsize) { in alps_process_byte()
1599 !alps_is_valid_package_v7(psmouse)) || in alps_process_byte()
1601 !alps_is_valid_package_ss4_v2(psmouse))) { in alps_process_byte()
1602 psmouse_dbg(psmouse, "refusing packet[%i] = %x\n", in alps_process_byte()
1603 psmouse->pktcnt - 1, in alps_process_byte()
1604 psmouse->packet[psmouse->pktcnt - 1]); in alps_process_byte()
1608 if (psmouse->pktcnt == psmouse->pktsize) { in alps_process_byte()
1609 priv->process_packet(psmouse); in alps_process_byte()
1616 static int alps_command_mode_send_nibble(struct psmouse *psmouse, int nibble) in alps_command_mode_send_nibble() argument
1618 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_command_mode_send_nibble()
1619 struct alps_data *priv = psmouse->private; in alps_command_mode_send_nibble()
1636 static int alps_command_mode_set_addr(struct psmouse *psmouse, int addr) in alps_command_mode_set_addr() argument
1638 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_command_mode_set_addr()
1639 struct alps_data *priv = psmouse->private; in alps_command_mode_set_addr()
1647 if (alps_command_mode_send_nibble(psmouse, nibble)) in alps_command_mode_set_addr()
1654 static int __alps_command_mode_read_reg(struct psmouse *psmouse, int addr) in __alps_command_mode_read_reg() argument
1656 struct ps2dev *ps2dev = &psmouse->ps2dev; in __alps_command_mode_read_reg()
1673 static int alps_command_mode_read_reg(struct psmouse *psmouse, int addr) in alps_command_mode_read_reg() argument
1675 if (alps_command_mode_set_addr(psmouse, addr)) in alps_command_mode_read_reg()
1677 return __alps_command_mode_read_reg(psmouse, addr); in alps_command_mode_read_reg()
1680 static int __alps_command_mode_write_reg(struct psmouse *psmouse, u8 value) in __alps_command_mode_write_reg() argument
1682 if (alps_command_mode_send_nibble(psmouse, (value >> 4) & 0xf)) in __alps_command_mode_write_reg()
1684 if (alps_command_mode_send_nibble(psmouse, value & 0xf)) in __alps_command_mode_write_reg()
1689 static int alps_command_mode_write_reg(struct psmouse *psmouse, int addr, in alps_command_mode_write_reg() argument
1692 if (alps_command_mode_set_addr(psmouse, addr)) in alps_command_mode_write_reg()
1694 return __alps_command_mode_write_reg(psmouse, value); in alps_command_mode_write_reg()
1697 static int alps_rpt_cmd(struct psmouse *psmouse, int init_command, in alps_rpt_cmd() argument
1700 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_rpt_cmd()
1715 psmouse_dbg(psmouse, "%2.2X report: %3ph\n", in alps_rpt_cmd()
1736 static int alps_enter_command_mode(struct psmouse *psmouse) in alps_enter_command_mode() argument
1740 if (alps_rpt_cmd(psmouse, 0, PSMOUSE_CMD_RESET_WRAP, param)) { in alps_enter_command_mode()
1741 psmouse_err(psmouse, "failed to enter command mode\n"); in alps_enter_command_mode()
1746 psmouse_dbg(psmouse, in alps_enter_command_mode()
1753 static inline int alps_exit_command_mode(struct psmouse *psmouse) in alps_exit_command_mode() argument
1755 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_exit_command_mode()
1766 static int alps_passthrough_mode_v2(struct psmouse *psmouse, bool enable) in alps_passthrough_mode_v2() argument
1768 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_passthrough_mode_v2()
1783 static int alps_absolute_mode_v1_v2(struct psmouse *psmouse) in alps_absolute_mode_v1_v2() argument
1785 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_absolute_mode_v1_v2()
1799 return ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETPOLL); in alps_absolute_mode_v1_v2()
1802 static int alps_monitor_mode_send_word(struct psmouse *psmouse, u16 word) in alps_monitor_mode_send_word() argument
1812 if (alps_command_mode_send_nibble(psmouse, nibble)) in alps_monitor_mode_send_word()
1819 static int alps_monitor_mode_write_reg(struct psmouse *psmouse, in alps_monitor_mode_write_reg() argument
1822 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_monitor_mode_write_reg()
1826 alps_monitor_mode_send_word(psmouse, 0x0A0) || in alps_monitor_mode_write_reg()
1827 alps_monitor_mode_send_word(psmouse, addr) || in alps_monitor_mode_write_reg()
1828 alps_monitor_mode_send_word(psmouse, value) || in alps_monitor_mode_write_reg()
1835 static int alps_monitor_mode(struct psmouse *psmouse, bool enable) in alps_monitor_mode() argument
1837 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_monitor_mode()
1859 static int alps_absolute_mode_v6(struct psmouse *psmouse) in alps_absolute_mode_v6() argument
1865 if (alps_monitor_mode(psmouse, true)) in alps_absolute_mode_v6()
1868 ret = alps_monitor_mode_write_reg(psmouse, 0x000, reg_val); in alps_absolute_mode_v6()
1870 if (alps_monitor_mode(psmouse, false)) in alps_absolute_mode_v6()
1876 static int alps_get_status(struct psmouse *psmouse, char *param) in alps_get_status() argument
1879 if (alps_rpt_cmd(psmouse, 0, PSMOUSE_CMD_DISABLE, param)) in alps_get_status()
1894 static int alps_tap_mode(struct psmouse *psmouse, int enable) in alps_tap_mode() argument
1896 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_tap_mode()
1907 if (alps_get_status(psmouse, param)) in alps_tap_mode()
1917 static int alps_poll(struct psmouse *psmouse) in alps_poll() argument
1919 struct alps_data *priv = psmouse->private; in alps_poll()
1920 unsigned char buf[sizeof(psmouse->packet)]; in alps_poll()
1924 alps_passthrough_mode_v2(psmouse, true); in alps_poll()
1926 poll_failed = ps2_command(&psmouse->ps2dev, buf, in alps_poll()
1927 PSMOUSE_CMD_POLL | (psmouse->pktsize << 8)) < 0; in alps_poll()
1930 alps_passthrough_mode_v2(psmouse, false); in alps_poll()
1935 if ((psmouse->badbyte & 0xc8) == 0x08) { in alps_poll()
1939 if (ps2_command(&psmouse->ps2dev, buf, PSMOUSE_CMD_POLL | (3 << 8))) in alps_poll()
1943 memcpy(psmouse->packet, buf, sizeof(buf)); in alps_poll()
1947 static int alps_hw_init_v1_v2(struct psmouse *psmouse) in alps_hw_init_v1_v2() argument
1949 struct alps_data *priv = psmouse->private; in alps_hw_init_v1_v2()
1952 alps_passthrough_mode_v2(psmouse, true)) { in alps_hw_init_v1_v2()
1956 if (alps_tap_mode(psmouse, true)) { in alps_hw_init_v1_v2()
1957 psmouse_warn(psmouse, "Failed to enable hardware tapping\n"); in alps_hw_init_v1_v2()
1961 if (alps_absolute_mode_v1_v2(psmouse)) { in alps_hw_init_v1_v2()
1962 psmouse_err(psmouse, "Failed to enable absolute mode\n"); in alps_hw_init_v1_v2()
1967 alps_passthrough_mode_v2(psmouse, false)) { in alps_hw_init_v1_v2()
1972 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSTREAM)) { in alps_hw_init_v1_v2()
1973 psmouse_err(psmouse, "Failed to enable stream mode\n"); in alps_hw_init_v1_v2()
1980 static int alps_hw_init_v6(struct psmouse *psmouse) in alps_hw_init_v6() argument
1985 if (alps_passthrough_mode_v2(psmouse, true)) in alps_hw_init_v6()
1988 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || in alps_hw_init_v6()
1989 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || in alps_hw_init_v6()
1990 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || in alps_hw_init_v6()
1991 ps2_command(&psmouse->ps2dev, &param[0], PSMOUSE_CMD_SETRATE) || in alps_hw_init_v6()
1992 ps2_command(&psmouse->ps2dev, &param[1], PSMOUSE_CMD_SETRATE)) in alps_hw_init_v6()
1995 if (alps_passthrough_mode_v2(psmouse, false)) in alps_hw_init_v6()
1998 if (alps_absolute_mode_v6(psmouse)) { in alps_hw_init_v6()
1999 psmouse_err(psmouse, "Failed to enable absolute mode\n"); in alps_hw_init_v6()
2009 static int alps_passthrough_mode_v3(struct psmouse *psmouse, in alps_passthrough_mode_v3() argument
2014 if (alps_enter_command_mode(psmouse)) in alps_passthrough_mode_v3()
2017 reg_val = alps_command_mode_read_reg(psmouse, reg_base + 0x0008); in alps_passthrough_mode_v3()
2026 ret = __alps_command_mode_write_reg(psmouse, reg_val); in alps_passthrough_mode_v3()
2029 if (alps_exit_command_mode(psmouse)) in alps_passthrough_mode_v3()
2035 static int alps_absolute_mode_v3(struct psmouse *psmouse) in alps_absolute_mode_v3() argument
2039 reg_val = alps_command_mode_read_reg(psmouse, 0x0004); in alps_absolute_mode_v3()
2044 if (__alps_command_mode_write_reg(psmouse, reg_val)) in alps_absolute_mode_v3()
2050 static int alps_probe_trackstick_v3(struct psmouse *psmouse, int reg_base) in alps_probe_trackstick_v3() argument
2054 if (alps_enter_command_mode(psmouse)) in alps_probe_trackstick_v3()
2057 reg_val = alps_command_mode_read_reg(psmouse, reg_base + 0x08); in alps_probe_trackstick_v3()
2065 alps_exit_command_mode(psmouse); in alps_probe_trackstick_v3()
2069 static int alps_setup_trackstick_v3(struct psmouse *psmouse, int reg_base) in alps_setup_trackstick_v3() argument
2071 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_setup_trackstick_v3()
2075 if (alps_passthrough_mode_v3(psmouse, reg_base, true)) in alps_setup_trackstick_v3()
2087 if (alps_rpt_cmd(psmouse, 0, PSMOUSE_CMD_SETSCALE21, param)) { in alps_setup_trackstick_v3()
2088 psmouse_warn(psmouse, "Failed to initialize trackstick (E7 report failed)\n"); in alps_setup_trackstick_v3()
2091 psmouse_dbg(psmouse, "trackstick E7 report: %3ph\n", param); in alps_setup_trackstick_v3()
2102 alps_command_mode_send_nibble(psmouse, 0x9) || in alps_setup_trackstick_v3()
2103 alps_command_mode_send_nibble(psmouse, 0x4)) { in alps_setup_trackstick_v3()
2104 psmouse_err(psmouse, in alps_setup_trackstick_v3()
2115 if (alps_enter_command_mode(psmouse) || in alps_setup_trackstick_v3()
2116 alps_command_mode_write_reg(psmouse, in alps_setup_trackstick_v3()
2118 alps_exit_command_mode(psmouse)) in alps_setup_trackstick_v3()
2123 if (alps_passthrough_mode_v3(psmouse, reg_base, false)) in alps_setup_trackstick_v3()
2129 static int alps_hw_init_v3(struct psmouse *psmouse) in alps_hw_init_v3() argument
2131 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_hw_init_v3()
2135 reg_val = alps_probe_trackstick_v3(psmouse, ALPS_REG_BASE_PINNACLE); in alps_hw_init_v3()
2140 alps_setup_trackstick_v3(psmouse, ALPS_REG_BASE_PINNACLE) == -EIO) in alps_hw_init_v3()
2143 if (alps_enter_command_mode(psmouse) || in alps_hw_init_v3()
2144 alps_absolute_mode_v3(psmouse)) { in alps_hw_init_v3()
2145 psmouse_err(psmouse, "Failed to enter absolute mode\n"); in alps_hw_init_v3()
2149 reg_val = alps_command_mode_read_reg(psmouse, 0x0006); in alps_hw_init_v3()
2152 if (__alps_command_mode_write_reg(psmouse, reg_val | 0x01)) in alps_hw_init_v3()
2155 reg_val = alps_command_mode_read_reg(psmouse, 0x0007); in alps_hw_init_v3()
2158 if (__alps_command_mode_write_reg(psmouse, reg_val | 0x01)) in alps_hw_init_v3()
2161 if (alps_command_mode_read_reg(psmouse, 0x0144) == -1) in alps_hw_init_v3()
2163 if (__alps_command_mode_write_reg(psmouse, 0x04)) in alps_hw_init_v3()
2166 if (alps_command_mode_read_reg(psmouse, 0x0159) == -1) in alps_hw_init_v3()
2168 if (__alps_command_mode_write_reg(psmouse, 0x03)) in alps_hw_init_v3()
2171 if (alps_command_mode_read_reg(psmouse, 0x0163) == -1) in alps_hw_init_v3()
2173 if (alps_command_mode_write_reg(psmouse, 0x0163, 0x03)) in alps_hw_init_v3()
2176 if (alps_command_mode_read_reg(psmouse, 0x0162) == -1) in alps_hw_init_v3()
2178 if (alps_command_mode_write_reg(psmouse, 0x0162, 0x04)) in alps_hw_init_v3()
2181 alps_exit_command_mode(psmouse); in alps_hw_init_v3()
2187 psmouse_err(psmouse, "Failed to enable data reporting\n"); in alps_hw_init_v3()
2199 alps_exit_command_mode(psmouse); in alps_hw_init_v3()
2203 static int alps_get_v3_v7_resolution(struct psmouse *psmouse, int reg_pitch) in alps_get_v3_v7_resolution() argument
2206 struct alps_data *priv = psmouse->private; in alps_get_v3_v7_resolution()
2208 reg = alps_command_mode_read_reg(psmouse, reg_pitch); in alps_get_v3_v7_resolution()
2218 reg = alps_command_mode_read_reg(psmouse, reg_pitch + 1); in alps_get_v3_v7_resolution()
2234 psmouse_dbg(psmouse, in alps_get_v3_v7_resolution()
2242 static int alps_hw_init_rushmore_v3(struct psmouse *psmouse) in alps_hw_init_rushmore_v3() argument
2244 struct alps_data *priv = psmouse->private; in alps_hw_init_rushmore_v3()
2245 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_hw_init_rushmore_v3()
2249 reg_val = alps_setup_trackstick_v3(psmouse, in alps_hw_init_rushmore_v3()
2255 if (alps_enter_command_mode(psmouse) || in alps_hw_init_rushmore_v3()
2256 alps_command_mode_read_reg(psmouse, 0xc2d9) == -1 || in alps_hw_init_rushmore_v3()
2257 alps_command_mode_write_reg(psmouse, 0xc2cb, 0x00)) in alps_hw_init_rushmore_v3()
2260 if (alps_get_v3_v7_resolution(psmouse, 0xc2da)) in alps_hw_init_rushmore_v3()
2263 reg_val = alps_command_mode_read_reg(psmouse, 0xc2c6); in alps_hw_init_rushmore_v3()
2266 if (__alps_command_mode_write_reg(psmouse, reg_val & 0xfd)) in alps_hw_init_rushmore_v3()
2269 if (alps_command_mode_write_reg(psmouse, 0xc2c9, 0x64)) in alps_hw_init_rushmore_v3()
2273 reg_val = alps_command_mode_read_reg(psmouse, 0xc2c4); in alps_hw_init_rushmore_v3()
2276 if (__alps_command_mode_write_reg(psmouse, reg_val | 0x02)) in alps_hw_init_rushmore_v3()
2279 alps_exit_command_mode(psmouse); in alps_hw_init_rushmore_v3()
2283 alps_exit_command_mode(psmouse); in alps_hw_init_rushmore_v3()
2288 static int alps_absolute_mode_v4(struct psmouse *psmouse) in alps_absolute_mode_v4() argument
2292 reg_val = alps_command_mode_read_reg(psmouse, 0x0004); in alps_absolute_mode_v4()
2297 if (__alps_command_mode_write_reg(psmouse, reg_val)) in alps_absolute_mode_v4()
2303 static int alps_hw_init_v4(struct psmouse *psmouse) in alps_hw_init_v4() argument
2305 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_hw_init_v4()
2308 if (alps_enter_command_mode(psmouse)) in alps_hw_init_v4()
2311 if (alps_absolute_mode_v4(psmouse)) { in alps_hw_init_v4()
2312 psmouse_err(psmouse, "Failed to enter absolute mode\n"); in alps_hw_init_v4()
2316 if (alps_command_mode_write_reg(psmouse, 0x0007, 0x8c)) in alps_hw_init_v4()
2319 if (alps_command_mode_write_reg(psmouse, 0x0149, 0x03)) in alps_hw_init_v4()
2322 if (alps_command_mode_write_reg(psmouse, 0x0160, 0x03)) in alps_hw_init_v4()
2325 if (alps_command_mode_write_reg(psmouse, 0x017f, 0x15)) in alps_hw_init_v4()
2328 if (alps_command_mode_write_reg(psmouse, 0x0151, 0x01)) in alps_hw_init_v4()
2331 if (alps_command_mode_write_reg(psmouse, 0x0168, 0x03)) in alps_hw_init_v4()
2334 if (alps_command_mode_write_reg(psmouse, 0x014a, 0x03)) in alps_hw_init_v4()
2337 if (alps_command_mode_write_reg(psmouse, 0x0161, 0x03)) in alps_hw_init_v4()
2340 alps_exit_command_mode(psmouse); in alps_hw_init_v4()
2360 psmouse_err(psmouse, "Failed to enable data reporting\n"); in alps_hw_init_v4()
2372 alps_exit_command_mode(psmouse); in alps_hw_init_v4()
2376 static int alps_get_otp_values_ss4_v2(struct psmouse *psmouse, in alps_get_otp_values_ss4_v2() argument
2379 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_get_otp_values_ss4_v2()
2440 static int alps_set_defaults_ss4_v2(struct psmouse *psmouse, in alps_set_defaults_ss4_v2() argument
2447 if (alps_get_otp_values_ss4_v2(psmouse, 0, &otp[0][0]) || in alps_set_defaults_ss4_v2()
2448 alps_get_otp_values_ss4_v2(psmouse, 1, &otp[1][0])) in alps_set_defaults_ss4_v2()
2458 static int alps_dolphin_get_device_area(struct psmouse *psmouse, in alps_dolphin_get_device_area() argument
2461 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_dolphin_get_device_area()
2465 if (alps_enter_command_mode(psmouse)) in alps_dolphin_get_device_area()
2498 if (alps_exit_command_mode(psmouse)) in alps_dolphin_get_device_area()
2504 static int alps_hw_init_dolphin_v1(struct psmouse *psmouse) in alps_hw_init_dolphin_v1() argument
2506 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_hw_init_dolphin_v1()
2521 static int alps_hw_init_v7(struct psmouse *psmouse) in alps_hw_init_v7() argument
2523 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_hw_init_v7()
2526 if (alps_enter_command_mode(psmouse) || in alps_hw_init_v7()
2527 alps_command_mode_read_reg(psmouse, 0xc2d9) == -1) in alps_hw_init_v7()
2530 if (alps_get_v3_v7_resolution(psmouse, 0xc397)) in alps_hw_init_v7()
2533 if (alps_command_mode_write_reg(psmouse, 0xc2c9, 0x64)) in alps_hw_init_v7()
2536 reg_val = alps_command_mode_read_reg(psmouse, 0xc2c4); in alps_hw_init_v7()
2539 if (__alps_command_mode_write_reg(psmouse, reg_val | 0x02)) in alps_hw_init_v7()
2542 alps_exit_command_mode(psmouse); in alps_hw_init_v7()
2546 alps_exit_command_mode(psmouse); in alps_hw_init_v7()
2550 static int alps_hw_init_ss4_v2(struct psmouse *psmouse) in alps_hw_init_ss4_v2() argument
2552 struct ps2dev *ps2dev = &psmouse->ps2dev; in alps_hw_init_ss4_v2()
2565 if (alps_exit_command_mode(psmouse) || in alps_hw_init_ss4_v2()
2566 alps_enter_command_mode(psmouse) || in alps_hw_init_ss4_v2()
2567 alps_command_mode_write_reg(psmouse, 0x001D, 0x20)) { in alps_hw_init_ss4_v2()
2570 alps_exit_command_mode(psmouse); in alps_hw_init_ss4_v2()
2575 alps_exit_command_mode(psmouse); in alps_hw_init_ss4_v2()
2579 static int alps_set_protocol(struct psmouse *psmouse, in alps_set_protocol() argument
2583 psmouse->private = priv; in alps_set_protocol()
2585 setup_timer(&priv->timer, alps_flush_packet, (unsigned long)psmouse); in alps_set_protocol()
2628 if (alps_probe_trackstick_v3(psmouse, in alps_set_protocol()
2652 if (alps_dolphin_get_device_area(psmouse, priv)) in alps_set_protocol()
2689 if (alps_set_defaults_ss4_v2(psmouse, priv)) in alps_set_protocol()
2718 static int alps_identify(struct psmouse *psmouse, struct alps_data *priv) in alps_identify() argument
2730 if (alps_rpt_cmd(psmouse, PSMOUSE_CMD_SETRES, in alps_identify()
2741 if (alps_rpt_cmd(psmouse, PSMOUSE_CMD_SETRES, in alps_identify()
2743 alps_rpt_cmd(psmouse, PSMOUSE_CMD_SETRES, in alps_identify()
2745 alps_exit_command_mode(psmouse)) in alps_identify()
2765 psmouse_dbg(psmouse, in alps_identify()
2774 error = alps_set_protocol(psmouse, priv, protocol); in alps_identify()
2782 static int alps_reconnect(struct psmouse *psmouse) in alps_reconnect() argument
2784 struct alps_data *priv = psmouse->private; in alps_reconnect()
2786 psmouse_reset(psmouse); in alps_reconnect()
2788 if (alps_identify(psmouse, priv) < 0) in alps_reconnect()
2791 return priv->hw_init(psmouse); in alps_reconnect()
2794 static void alps_disconnect(struct psmouse *psmouse) in alps_disconnect() argument
2796 struct alps_data *priv = psmouse->private; in alps_disconnect()
2798 psmouse_reset(psmouse); in alps_disconnect()
2864 int alps_init(struct psmouse *psmouse) in alps_init() argument
2866 struct alps_data *priv = psmouse->private; in alps_init()
2867 struct input_dev *dev1 = psmouse->dev; in alps_init()
2870 error = priv->hw_init(psmouse); in alps_init()
2922 psmouse_err(psmouse, in alps_init()
2929 psmouse->ps2dev.serio->phys); in alps_init()
2942 dev2->dev.parent = &psmouse->ps2dev.serio->dev; in alps_init()
2955 psmouse_err(psmouse, in alps_init()
2965 priv->psmouse = psmouse; in alps_init()
2970 psmouse->protocol_handler = alps_process_byte; in alps_init()
2971 psmouse->poll = alps_poll; in alps_init()
2972 psmouse->disconnect = alps_disconnect; in alps_init()
2973 psmouse->reconnect = alps_reconnect; in alps_init()
2974 psmouse->pktsize = priv->proto_version == ALPS_PROTO_V4 ? 8 : 6; in alps_init()
2977 psmouse->resync_time = 0; in alps_init()
2980 psmouse->resetafter = psmouse->pktsize * 2; in alps_init()
2985 psmouse_reset(psmouse); in alps_init()
2990 kfree(psmouse->private); in alps_init()
2991 psmouse->private = NULL; in alps_init()
2995 int alps_detect(struct psmouse *psmouse, bool set_properties) in alps_detect() argument
3000 error = alps_identify(psmouse, NULL); in alps_detect()
3010 psmouse_reset(psmouse); in alps_detect()
3016 error = alps_identify(psmouse, priv); in alps_detect()
3023 psmouse->vendor = "ALPS"; in alps_detect()
3024 psmouse->name = priv->flags & ALPS_DUALPOINT ? in alps_detect()
3026 psmouse->model = priv->proto_version; in alps_detect()
3035 psmouse->private = NULL; in alps_detect()