Lines Matching refs:psmouse

32 #include "psmouse.h"
79 static int synaptics_mode_cmd(struct psmouse *psmouse, u8 mode)
84 error = ps2_sliced_command(&psmouse->ps2dev, mode);
89 error = ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_SETRATE);
96 int synaptics_detect(struct psmouse *psmouse, bool set_properties)
98 struct ps2dev *ps2dev = &psmouse->ps2dev;
111 psmouse->vendor = "Synaptics";
112 psmouse->name = "TouchPad";
118 void synaptics_reset(struct psmouse *psmouse)
121 synaptics_mode_cmd(psmouse, 0);
208 static int synaptics_send_cmd(struct psmouse *psmouse, u8 cmd, u8 *param)
212 error = ps2_sliced_command(&psmouse->ps2dev, cmd);
216 error = ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETINFO);
223 static int synaptics_query_int(struct psmouse *psmouse, u8 query_cmd, u32 *val)
231 error = synaptics_send_cmd(psmouse, query_cmd, resp.buf + 1);
243 static int synaptics_identify(struct psmouse *psmouse,
248 error = synaptics_query_int(psmouse, SYN_QUE_IDENTIFY, &info->identity);
259 static int synaptics_model_id(struct psmouse *psmouse,
262 return synaptics_query_int(psmouse, SYN_QUE_MODEL, &info->model_id);
268 static int synaptics_firmware_id(struct psmouse *psmouse,
271 return synaptics_query_int(psmouse, SYN_QUE_FIRMWARE_ID,
279 static int synaptics_query_modes(struct psmouse *psmouse,
289 error = synaptics_send_cmd(psmouse, SYN_QUE_MODES, bid);
296 return synaptics_query_int(psmouse, SYN_QUE_MEXT_CAPAB_10,
306 static int synaptics_capability(struct psmouse *psmouse,
311 error = synaptics_query_int(psmouse, SYN_QUE_CAPABILITIES,
333 error = synaptics_query_int(psmouse, SYN_QUE_EXT_CAPAB,
336 psmouse_warn(psmouse,
349 error = synaptics_query_int(psmouse, SYN_QUE_EXT_CAPAB_0C,
352 psmouse_warn(psmouse,
363 static int synaptics_resolution(struct psmouse *psmouse,
372 error = synaptics_send_cmd(psmouse, SYN_QUE_RESOLUTION, resp);
382 error = synaptics_send_cmd(psmouse,
385 psmouse_warn(psmouse,
390 psmouse_info(psmouse,
404 error = synaptics_send_cmd(psmouse,
407 psmouse_warn(psmouse,
412 psmouse_info(psmouse,
421 static int synaptics_query_hardware(struct psmouse *psmouse,
428 error = synaptics_identify(psmouse, info);
432 error = synaptics_model_id(psmouse, info);
436 error = synaptics_firmware_id(psmouse, info);
440 error = synaptics_query_modes(psmouse, info);
444 error = synaptics_capability(psmouse, info);
448 error = synaptics_resolution(psmouse, info);
528 static void synaptics_apply_quirks(struct psmouse *psmouse,
534 if (!psmouse_matches_pnp_id(psmouse,
550 psmouse_info(psmouse,
564 static int synaptics_set_advanced_gesture_mode(struct psmouse *psmouse)
569 error = ps2_sliced_command(&psmouse->ps2dev, SYN_QUE_MODEL);
573 error = ps2_command(&psmouse->ps2dev, &param, PSMOUSE_CMD_SETRATE);
580 static int synaptics_set_mode(struct psmouse *psmouse)
582 struct synaptics_data *priv = psmouse->private;
590 if (psmouse->rate >= 80)
595 error = synaptics_mode_cmd(psmouse, priv->mode);
600 error = synaptics_set_advanced_gesture_mode(psmouse);
602 psmouse_err(psmouse,
612 static void synaptics_set_rate(struct psmouse *psmouse, unsigned int rate)
614 struct synaptics_data *priv = psmouse->private;
618 psmouse->rate = 80;
621 psmouse->rate = 40;
624 synaptics_mode_cmd(psmouse, priv->mode);
632 struct psmouse *parent = psmouse_from_serio(serio->parent);
649 struct psmouse *parent = psmouse_from_serio(serio->parent);
661 struct psmouse *parent = psmouse_from_serio(serio->parent);
676 struct psmouse *child = psmouse_from_serio(ptport);
689 static void synaptics_pt_activate(struct psmouse *psmouse)
691 struct synaptics_data *priv = psmouse->private;
692 struct psmouse *child = psmouse_from_serio(priv->pt_port);
701 if (synaptics_mode_cmd(psmouse, priv->mode))
702 psmouse_warn(psmouse,
707 static void synaptics_pt_create(struct psmouse *psmouse)
713 psmouse_err(psmouse,
724 serio->parent = psmouse->ps2dev.serio;
726 psmouse->pt_activate = synaptics_pt_activate;
728 psmouse_info(psmouse, "serio: %s port at %s\n",
729 serio->name, psmouse->phys);
922 static void synaptics_report_ext_buttons(struct psmouse *psmouse,
925 struct input_dev *dev = psmouse->dev;
926 struct synaptics_data *priv = psmouse->private;
936 !((psmouse->packet[0] ^ psmouse->packet[3]) & 0x02))
968 static void synaptics_report_buttons(struct psmouse *psmouse,
971 struct input_dev *dev = psmouse->dev;
972 struct synaptics_data *priv = psmouse->private;
985 synaptics_report_ext_buttons(psmouse, hw);
988 static void synaptics_report_mt_data(struct psmouse *psmouse,
992 struct input_dev *dev = psmouse->dev;
993 struct synaptics_data *priv = psmouse->private;
1023 synaptics_report_buttons(psmouse, sgm);
1028 static void synaptics_image_sensor_process(struct psmouse *psmouse,
1031 struct synaptics_data *priv = psmouse->private;
1049 synaptics_report_mt_data(psmouse, sgm, num_fingers);
1064 static void synaptics_process_packet(struct psmouse *psmouse)
1066 struct input_dev *dev = psmouse->dev;
1067 struct synaptics_data *priv = psmouse->private;
1073 if (synaptics_parse_hw_state(psmouse->packet, priv, &hw))
1077 synaptics_image_sensor_process(psmouse, &hw);
1129 synaptics_report_mt_data(psmouse, &hw, num_fingers);
1159 synaptics_report_buttons(psmouse, &hw);
1164 static bool synaptics_validate_byte(struct psmouse *psmouse,
1172 const u8 *packet = psmouse->packet;
1190 psmouse_err(psmouse, "unknown packet type %d\n", pkt_type);
1196 synaptics_detect_pkt_type(struct psmouse *psmouse)
1201 if (!synaptics_validate_byte(psmouse, i, SYN_NEWABS_STRICT)) {
1202 psmouse_info(psmouse, "using relaxed packet validation\n");
1210 static psmouse_ret_t synaptics_process_byte(struct psmouse *psmouse)
1212 struct synaptics_data *priv = psmouse->private;
1214 if (psmouse->pktcnt >= 6) { /* Full packet received */
1216 priv->pkt_type = synaptics_detect_pkt_type(psmouse);
1219 synaptics_is_pt_packet(psmouse->packet)) {
1222 psmouse->packet);
1224 synaptics_process_packet(psmouse);
1229 return synaptics_validate_byte(psmouse, psmouse->pktcnt - 1, priv->pkt_type) ?
1253 static int set_input_params(struct psmouse *psmouse,
1256 struct input_dev *dev = psmouse->dev;
1261 /* Reset default psmouse capabilities */
1355 if (psmouse_matches_pnp_id(psmouse, topbuttonpad_pnp_ids) &&
1363 static ssize_t synaptics_show_disable_gesture(struct psmouse *psmouse,
1366 struct synaptics_data *priv = psmouse->private;
1371 static ssize_t synaptics_set_disable_gesture(struct psmouse *psmouse,
1375 struct synaptics_data *priv = psmouse->private;
1395 if (synaptics_mode_cmd(psmouse, priv->mode))
1405 static void synaptics_disconnect(struct psmouse *psmouse)
1407 struct synaptics_data *priv = psmouse->private;
1413 psmouse_smbus_cleanup(psmouse);
1417 device_remove_file(&psmouse->ps2dev.serio->dev,
1420 synaptics_reset(psmouse);
1422 psmouse->private = NULL;
1425 static int synaptics_reconnect(struct psmouse *psmouse)
1427 struct synaptics_data *priv = psmouse->private;
1434 psmouse_reset(psmouse);
1445 ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETID);
1446 error = synaptics_detect(psmouse, 0);
1453 psmouse_dbg(psmouse, "reconnected after %d tries\n", retry);
1455 error = synaptics_query_hardware(psmouse, &info);
1457 psmouse_err(psmouse, "Unable to query device.\n");
1461 error = synaptics_set_mode(psmouse);
1463 psmouse_err(psmouse, "Unable to initialize device.\n");
1471 psmouse_err(psmouse,
1557 static int synaptics_init_ps2(struct psmouse *psmouse,
1564 synaptics_apply_quirks(psmouse, info);
1566 psmouse->private = priv = kzalloc(sizeof(struct synaptics_data), GFP_KERNEL);
1579 priv->is_forcepad = psmouse_matches_pnp_id(psmouse, forcepad_pnp_ids);
1581 err = synaptics_set_mode(psmouse);
1583 psmouse_err(psmouse, "Unable to initialize device.\n");
1590 psmouse_info(psmouse,
1598 err = set_input_params(psmouse, priv);
1600 psmouse_err(psmouse,
1612 psmouse->model = ((info->model_id & 0x00ff0000) >> 8) |
1616 psmouse->protocol_handler = synaptics_process_byte;
1617 psmouse->pktsize = 6;
1620 psmouse->protocol_handler = psmouse_process_byte;
1621 psmouse->pktsize = 3;
1624 psmouse->set_rate = synaptics_set_rate;
1625 psmouse->disconnect = synaptics_disconnect;
1626 psmouse->reconnect = synaptics_reconnect;
1627 psmouse->fast_reconnect = NULL;
1628 psmouse->cleanup = synaptics_reset;
1630 psmouse->resync_time = 0;
1633 synaptics_pt_create(psmouse);
1640 if (psmouse->rate >= 80 && impaired_toshiba_kbc) {
1641 psmouse_info(psmouse,
1644 psmouse->rate = 40;
1648 err = device_create_file(&psmouse->ps2dev.serio->dev,
1651 psmouse_err(psmouse,
1665 static int __synaptics_init(struct psmouse *psmouse, bool absolute_mode)
1670 psmouse_reset(psmouse);
1672 error = synaptics_query_hardware(psmouse, &info);
1674 psmouse_err(psmouse, "Unable to query device: %d\n", error);
1678 return synaptics_init_ps2(psmouse, &info, absolute_mode);
1681 int synaptics_init_absolute(struct psmouse *psmouse)
1683 return __synaptics_init(psmouse, true);
1686 int synaptics_init_relative(struct psmouse *psmouse)
1688 return __synaptics_init(psmouse, false);
1691 static int synaptics_setup_ps2(struct psmouse *psmouse,
1704 psmouse_info(psmouse,
1709 error = synaptics_init_ps2(psmouse, info, absolute_mode);
1723 synaptics_setup_ps2(struct psmouse *psmouse,
1749 static int synaptics_create_intertouch(struct psmouse *psmouse,
1754 psmouse_matches_pnp_id(psmouse, topbuttonpad_pnp_ids) &&
1775 return psmouse_smbus_init(psmouse, &intertouch_board,
1784 static int synaptics_setup_intertouch(struct psmouse *psmouse,
1794 if (!psmouse_matches_pnp_id(psmouse, topbuttonpad_pnp_ids) &&
1795 !psmouse_matches_pnp_id(psmouse, smbus_pnp_ids)) {
1797 if (!psmouse_matches_pnp_id(psmouse, forcepad_pnp_ids))
1798 psmouse_info(psmouse,
1800 "If i2c-hid and hid-rmi are not used, you might want to try setting psmouse.synaptics_intertouch to 1 and report this to linux-input@vger.kernel.org.\n",
1801 psmouse->ps2dev.serio->firmware_id);
1807 psmouse_info(psmouse, "Trying to set up SMBus access\n");
1809 error = synaptics_create_intertouch(psmouse, info, leave_breadcrumbs);
1812 psmouse_info(psmouse, "SMbus companion is not ready yet\n");
1814 psmouse_err(psmouse, "unable to create intertouch device\n");
1822 int synaptics_init_smbus(struct psmouse *psmouse)
1827 psmouse_reset(psmouse);
1829 error = synaptics_query_hardware(psmouse, &info);
1831 psmouse_err(psmouse, "Unable to query device: %d\n", error);
1838 return synaptics_create_intertouch(psmouse, &info, false);
1844 synaptics_setup_intertouch(struct psmouse *psmouse,
1851 int synaptics_init_smbus(struct psmouse *psmouse)
1861 int synaptics_init(struct psmouse *psmouse)
1867 psmouse_reset(psmouse);
1869 error = synaptics_query_hardware(psmouse, &info);
1871 psmouse_err(psmouse, "Unable to query device: %d\n", error);
1879 !psmouse_matches_pnp_id(psmouse, forcepad_pnp_ids)) {
1880 psmouse_warn(psmouse,
1885 error = synaptics_setup_intertouch(psmouse, &info, true);
1890 retval = synaptics_setup_ps2(psmouse, &info);
1896 psmouse_smbus_cleanup(psmouse);
1904 int synaptics_init(struct psmouse *psmouse)