Lines Matching refs:psmouse

21 #include "psmouse.h"
28 psmouse_printk(KERN_DEBUG, psmouse, \
35 static int synaptics_send_cmd(struct psmouse *psmouse, unsigned char c,
38 if (ps2_sliced_command(&psmouse->ps2dev, c) ||
39 ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETINFO)) {
40 psmouse_err(psmouse, "%s query 0x%02x failed.\n", __func__, c);
50 static int elantech_send_cmd(struct psmouse *psmouse, unsigned char c,
53 struct ps2dev *ps2dev = &psmouse->ps2dev;
58 psmouse_err(psmouse, "%s query 0x%02x failed.\n", __func__, c);
68 static int elantech_ps2_command(struct psmouse *psmouse,
71 struct ps2dev *ps2dev = &psmouse->ps2dev;
72 struct elantech_data *etd = psmouse->private;
87 psmouse_err(psmouse, "ps2 command 0x%02x failed.\n", command);
95 static int elantech_read_reg_params(struct psmouse *psmouse, u8 reg, u8 *param)
97 if (elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
98 elantech_ps2_command(psmouse, NULL, ETP_REGISTER_READWRITE) ||
99 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
100 elantech_ps2_command(psmouse, NULL, reg) ||
101 elantech_ps2_command(psmouse, param, PSMOUSE_CMD_GETINFO)) {
102 psmouse_err(psmouse,
113 static int elantech_write_reg_params(struct psmouse *psmouse, u8 reg, u8 *param)
115 if (elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
116 elantech_ps2_command(psmouse, NULL, ETP_REGISTER_READWRITE) ||
117 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
118 elantech_ps2_command(psmouse, NULL, reg) ||
119 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
120 elantech_ps2_command(psmouse, NULL, param[0]) ||
121 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
122 elantech_ps2_command(psmouse, NULL, param[1]) ||
123 elantech_ps2_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE11)) {
124 psmouse_err(psmouse,
136 static int elantech_read_reg(struct psmouse *psmouse, unsigned char reg,
139 struct elantech_data *etd = psmouse->private;
151 if (ps2_sliced_command(&psmouse->ps2dev, ETP_REGISTER_READ) ||
152 ps2_sliced_command(&psmouse->ps2dev, reg) ||
153 ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETINFO)) {
159 if (elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
160 elantech_ps2_command(psmouse, NULL, ETP_REGISTER_READ) ||
161 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
162 elantech_ps2_command(psmouse, NULL, reg) ||
163 elantech_ps2_command(psmouse, param, PSMOUSE_CMD_GETINFO)) {
169 if (elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
170 elantech_ps2_command(psmouse, NULL, ETP_REGISTER_READWRITE) ||
171 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
172 elantech_ps2_command(psmouse, NULL, reg) ||
173 elantech_ps2_command(psmouse, param, PSMOUSE_CMD_GETINFO)) {
180 psmouse_err(psmouse, "failed to read register 0x%02x.\n", reg);
192 static int elantech_write_reg(struct psmouse *psmouse, unsigned char reg,
195 struct elantech_data *etd = psmouse->private;
206 if (ps2_sliced_command(&psmouse->ps2dev, ETP_REGISTER_WRITE) ||
207 ps2_sliced_command(&psmouse->ps2dev, reg) ||
208 ps2_sliced_command(&psmouse->ps2dev, val) ||
209 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11)) {
215 if (elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
216 elantech_ps2_command(psmouse, NULL, ETP_REGISTER_WRITE) ||
217 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
218 elantech_ps2_command(psmouse, NULL, reg) ||
219 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
220 elantech_ps2_command(psmouse, NULL, val) ||
221 elantech_ps2_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE11)) {
227 if (elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
228 elantech_ps2_command(psmouse, NULL, ETP_REGISTER_READWRITE) ||
229 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
230 elantech_ps2_command(psmouse, NULL, reg) ||
231 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
232 elantech_ps2_command(psmouse, NULL, val) ||
233 elantech_ps2_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE11)) {
239 if (elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
240 elantech_ps2_command(psmouse, NULL, ETP_REGISTER_READWRITE) ||
241 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
242 elantech_ps2_command(psmouse, NULL, reg) ||
243 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
244 elantech_ps2_command(psmouse, NULL, ETP_REGISTER_READWRITE) ||
245 elantech_ps2_command(psmouse, NULL, ETP_PS2_CUSTOM_COMMAND) ||
246 elantech_ps2_command(psmouse, NULL, val) ||
247 elantech_ps2_command(psmouse, NULL, PSMOUSE_CMD_SETSCALE11)) {
254 psmouse_err(psmouse,
264 static void elantech_packet_dump(struct psmouse *psmouse)
266 psmouse_printk(KERN_DEBUG, psmouse, "PS/2 packet [%*ph]\n",
267 psmouse->pktsize, psmouse->packet);
320 static void elantech_report_absolute_v1(struct psmouse *psmouse)
322 struct input_dev *dev = psmouse->dev;
323 struct elantech_data *etd = psmouse->private;
324 unsigned char *packet = psmouse->packet;
408 static void elantech_report_absolute_v2(struct psmouse *psmouse)
410 struct elantech_data *etd = psmouse->private;
411 struct input_dev *dev = psmouse->dev;
412 unsigned char *packet = psmouse->packet;
489 static void elantech_report_trackpoint(struct psmouse *psmouse,
507 struct elantech_data *etd = psmouse->private;
509 unsigned char *packet = psmouse->packet;
548 elantech_packet_dump(psmouse);
558 static void elantech_report_absolute_v3(struct psmouse *psmouse,
561 struct input_dev *dev = psmouse->dev;
562 struct elantech_data *etd = psmouse->private;
563 unsigned char *packet = psmouse->packet;
637 static void elantech_input_sync_v4(struct psmouse *psmouse)
639 struct input_dev *dev = psmouse->dev;
640 struct elantech_data *etd = psmouse->private;
641 unsigned char *packet = psmouse->packet;
653 static void process_packet_status_v4(struct psmouse *psmouse)
655 struct input_dev *dev = psmouse->dev;
656 unsigned char *packet = psmouse->packet;
669 elantech_input_sync_v4(psmouse);
672 static void process_packet_head_v4(struct psmouse *psmouse)
674 struct input_dev *dev = psmouse->dev;
675 struct elantech_data *etd = psmouse->private;
676 unsigned char *packet = psmouse->packet;
699 elantech_input_sync_v4(psmouse);
702 static void process_packet_motion_v4(struct psmouse *psmouse)
704 struct input_dev *dev = psmouse->dev;
705 struct elantech_data *etd = psmouse->private;
706 unsigned char *packet = psmouse->packet;
740 elantech_input_sync_v4(psmouse);
743 static void elantech_report_absolute_v4(struct psmouse *psmouse,
748 process_packet_status_v4(psmouse);
752 process_packet_head_v4(psmouse);
756 process_packet_motion_v4(psmouse);
766 static int elantech_packet_check_v1(struct psmouse *psmouse)
768 struct elantech_data *etd = psmouse->private;
769 unsigned char *packet = psmouse->packet;
790 static int elantech_debounce_check_v2(struct psmouse *psmouse)
799 unsigned char *packet = psmouse->packet;
804 static int elantech_packet_check_v2(struct psmouse *psmouse)
806 struct elantech_data *etd = psmouse->private;
807 unsigned char *packet = psmouse->packet;
836 static int elantech_packet_check_v3(struct psmouse *psmouse)
838 struct elantech_data *etd = psmouse->private;
842 unsigned char *packet = psmouse->packet;
874 static int elantech_packet_check_v4(struct psmouse *psmouse)
876 struct elantech_data *etd = psmouse->private;
877 unsigned char *packet = psmouse->packet;
923 static psmouse_ret_t elantech_process_byte(struct psmouse *psmouse)
925 struct elantech_data *etd = psmouse->private;
928 if (psmouse->pktcnt < psmouse->pktsize)
932 elantech_packet_dump(psmouse);
936 if (etd->info.paritycheck && !elantech_packet_check_v1(psmouse))
939 elantech_report_absolute_v1(psmouse);
944 if (elantech_debounce_check_v2(psmouse))
947 if (etd->info.paritycheck && !elantech_packet_check_v2(psmouse))
950 elantech_report_absolute_v2(psmouse);
954 packet_type = elantech_packet_check_v3(psmouse);
964 elantech_report_trackpoint(psmouse, packet_type);
968 elantech_report_absolute_v3(psmouse, packet_type);
975 packet_type = elantech_packet_check_v4(psmouse);
981 elantech_report_trackpoint(psmouse, packet_type);
985 elantech_report_absolute_v4(psmouse, packet_type);
1000 static void elantech_set_rate_restore_reg_07(struct psmouse *psmouse,
1003 struct elantech_data *etd = psmouse->private;
1005 etd->original_set_rate(psmouse, rate);
1006 if (elantech_write_reg(psmouse, 0x07, etd->reg_07))
1007 psmouse_err(psmouse, "restoring reg_07 failed\n");
1013 static int elantech_set_absolute_mode(struct psmouse *psmouse)
1015 struct elantech_data *etd = psmouse->private;
1024 if (elantech_write_reg(psmouse, 0x10, etd->reg_10) ||
1025 elantech_write_reg(psmouse, 0x11, etd->reg_11)) {
1035 if (elantech_write_reg(psmouse, 0x10, etd->reg_10) ||
1036 elantech_write_reg(psmouse, 0x11, etd->reg_11) ||
1037 elantech_write_reg(psmouse, 0x21, etd->reg_21)) {
1048 if (elantech_write_reg(psmouse, 0x10, etd->reg_10))
1055 if (elantech_write_reg(psmouse, 0x07, etd->reg_07))
1069 rc = elantech_read_reg(psmouse, 0x10, &val);
1078 psmouse_err(psmouse,
1082 psmouse_err(psmouse,
1090 psmouse_err(psmouse, "failed to initialise registers.\n");
1104 static int elantech_get_resolution_v4(struct psmouse *psmouse,
1111 if (elantech_send_cmd(psmouse, ETP_RESOLUTION_QUERY, param))
1121 static void elantech_set_buttonpad_prop(struct psmouse *psmouse)
1123 struct input_dev *dev = psmouse->dev;
1124 struct elantech_data *etd = psmouse->private;
1165 static int elantech_set_input_params(struct psmouse *psmouse)
1167 struct input_dev *dev = psmouse->dev;
1168 struct elantech_data *etd = psmouse->private;
1207 elantech_set_buttonpad_prop(psmouse);
1222 elantech_set_buttonpad_prop(psmouse);
1271 static ssize_t elantech_show_int_attr(struct psmouse *psmouse, void *data,
1274 struct elantech_data *etd = psmouse->private;
1280 rc = elantech_read_reg(psmouse, attr->reg, reg);
1288 static ssize_t elantech_set_int_attr(struct psmouse *psmouse,
1291 struct elantech_data *etd = psmouse->private;
1311 if (!attr->reg || elantech_write_reg(psmouse, attr->reg, value) == 0)
1402 int elantech_detect(struct psmouse *psmouse, bool set_properties)
1404 struct ps2dev *ps2dev = &psmouse->ps2dev;
1414 psmouse_dbg(psmouse, "sending Elantech magic knock failed.\n");
1424 psmouse_dbg(psmouse,
1435 if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) {
1436 psmouse_dbg(psmouse, "failed to query firmware version.\n");
1440 psmouse_dbg(psmouse,
1445 psmouse_dbg(psmouse,
1451 psmouse->vendor = "Elantech";
1452 psmouse->name = "Touchpad";
1461 static void elantech_disconnect(struct psmouse *psmouse)
1463 struct elantech_data *etd = psmouse->private;
1469 psmouse_smbus_cleanup(psmouse);
1473 sysfs_remove_group(&psmouse->ps2dev.serio->dev.kobj,
1475 kfree(psmouse->private);
1476 psmouse->private = NULL;
1482 static int elantech_reconnect(struct psmouse *psmouse)
1484 psmouse_reset(psmouse);
1486 if (elantech_detect(psmouse, 0))
1489 if (elantech_set_absolute_mode(psmouse)) {
1490 psmouse_err(psmouse,
1590 static int elantech_change_report_id(struct psmouse *psmouse)
1600 if (elantech_write_reg_params(psmouse, 0x7, param) ||
1601 elantech_read_reg_params(psmouse, 0x7, param) ||
1603 psmouse_err(psmouse, "Unable to change report ID to 0x5f.\n");
1678 static int elantech_query_info(struct psmouse *psmouse,
1690 if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) {
1691 psmouse_err(psmouse, "failed to query firmware version.\n");
1697 psmouse_err(psmouse, "unknown hardware version, aborting...\n");
1700 psmouse_info(psmouse,
1704 if (info->send_cmd(psmouse, ETP_CAPABILITIES_QUERY,
1706 psmouse_err(psmouse, "failed to query capabilities.\n");
1709 psmouse_info(psmouse,
1715 if (info->send_cmd(psmouse, ETP_SAMPLE_QUERY, info->samples)) {
1716 psmouse_err(psmouse, "failed to query sample data\n");
1719 psmouse_info(psmouse,
1727 if (info->send_cmd(psmouse, ETP_ICBODY_QUERY, ic_body)) {
1728 psmouse_err(psmouse, "failed to query ic body\n");
1732 psmouse_info(psmouse,
1747 psmouse_info(psmouse,
1765 if (elantech_change_report_id(psmouse)) {
1766 psmouse_info(psmouse,
1775 if (elantech_get_resolution_v4(psmouse,
1779 psmouse_warn(psmouse,
1808 if (info->send_cmd(psmouse, ETP_FW_ID_QUERY, param))
1814 if (info->send_cmd(psmouse, ETP_SAMPLE_QUERY, param))
1833 if (info->send_cmd(psmouse, ETP_FW_ID_QUERY, param))
1841 if (info->send_cmd(psmouse, ETP_FW_ID_QUERY, param))
1897 static int elantech_create_smbus(struct psmouse *psmouse,
1941 return psmouse_smbus_init(psmouse, &smbus_board, NULL, 0, false,
1949 static int elantech_setup_smbus(struct psmouse *psmouse,
1965 psmouse_matches_pnp_id(psmouse, i2c_blacklist_pnp_ids))
1969 psmouse_info(psmouse, "Trying to set up SMBus access\n");
1971 error = elantech_create_smbus(psmouse, info, leave_breadcrumbs);
1974 psmouse_info(psmouse, "SMbus companion is not ready yet\n");
1976 psmouse_err(psmouse, "unable to create intertouch device\n");
1984 static bool elantech_use_host_notify(struct psmouse *psmouse,
1996 psmouse_dbg(psmouse, "Ignoring SMBus provider through alert protocol.\n");
2002 psmouse_dbg(psmouse,
2010 int elantech_init_smbus(struct psmouse *psmouse)
2015 psmouse_reset(psmouse);
2017 error = elantech_query_info(psmouse, &info);
2026 return elantech_create_smbus(psmouse, &info, false);
2028 psmouse_reset(psmouse);
2036 static int elantech_setup_ps2(struct psmouse *psmouse,
2044 psmouse->private = etd = kzalloc(sizeof(*etd), GFP_KERNEL);
2054 if (elantech_set_absolute_mode(psmouse)) {
2055 psmouse_err(psmouse,
2061 etd->original_set_rate = psmouse->set_rate;
2062 psmouse->set_rate = elantech_set_rate_restore_reg_07;
2065 if (elantech_set_input_params(psmouse)) {
2066 psmouse_err(psmouse, "failed to query touchpad range.\n");
2070 error = sysfs_create_group(&psmouse->ps2dev.serio->dev.kobj,
2073 psmouse_err(psmouse,
2089 psmouse->ps2dev.serio->phys);
2096 tp_dev->dev.parent = &psmouse->ps2dev.serio->dev;
2112 psmouse->protocol_handler = elantech_process_byte;
2113 psmouse->disconnect = elantech_disconnect;
2114 psmouse->reconnect = elantech_reconnect;
2115 psmouse->fast_reconnect = NULL;
2116 psmouse->pktsize = info->hw_version > 1 ? 6 : 4;
2122 sysfs_remove_group(&psmouse->ps2dev.serio->dev.kobj,
2129 int elantech_init_ps2(struct psmouse *psmouse)
2134 psmouse_reset(psmouse);
2136 error = elantech_query_info(psmouse, &info);
2140 error = elantech_setup_ps2(psmouse, &info);
2146 psmouse_reset(psmouse);
2150 int elantech_init(struct psmouse *psmouse)
2155 psmouse_reset(psmouse);
2157 error = elantech_query_info(psmouse, &info);
2163 if (elantech_use_host_notify(psmouse, &info)) {
2166 psmouse_warn(psmouse,
2170 error = elantech_setup_smbus(psmouse, &info, true);
2177 error = elantech_setup_ps2(psmouse, &info);
2183 psmouse_smbus_cleanup(psmouse);
2189 psmouse_reset(psmouse);