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);
206 static int synaptics_send_cmd(struct psmouse *psmouse, u8 cmd, u8 *param)
210 error = ps2_sliced_command(&psmouse->ps2dev, cmd);
214 error = ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETINFO);
221 static int synaptics_query_int(struct psmouse *psmouse, u8 query_cmd, u32 *val)
229 error = synaptics_send_cmd(psmouse, query_cmd, resp.buf + 1);
241 static int synaptics_identify(struct psmouse *psmouse,
246 error = synaptics_query_int(psmouse, SYN_QUE_IDENTIFY, &info->identity);
257 static int synaptics_model_id(struct psmouse *psmouse,
260 return synaptics_query_int(psmouse, SYN_QUE_MODEL, &info->model_id);
266 static int synaptics_firmware_id(struct psmouse *psmouse,
269 return synaptics_query_int(psmouse, SYN_QUE_FIRMWARE_ID,
277 static int synaptics_query_modes(struct psmouse *psmouse,
287 error = synaptics_send_cmd(psmouse, SYN_QUE_MODES, bid);
294 return synaptics_query_int(psmouse, SYN_QUE_MEXT_CAPAB_10,
304 static int synaptics_capability(struct psmouse *psmouse,
309 error = synaptics_query_int(psmouse, SYN_QUE_CAPABILITIES,
331 error = synaptics_query_int(psmouse, SYN_QUE_EXT_CAPAB,
334 psmouse_warn(psmouse,
347 error = synaptics_query_int(psmouse, SYN_QUE_EXT_CAPAB_0C,
350 psmouse_warn(psmouse,
361 static int synaptics_resolution(struct psmouse *psmouse,
370 error = synaptics_send_cmd(psmouse, SYN_QUE_RESOLUTION, resp);
380 error = synaptics_send_cmd(psmouse,
383 psmouse_warn(psmouse,
388 psmouse_info(psmouse,
402 error = synaptics_send_cmd(psmouse,
405 psmouse_warn(psmouse,
410 psmouse_info(psmouse,
419 static int synaptics_query_hardware(struct psmouse *psmouse,
426 error = synaptics_identify(psmouse, info);
430 error = synaptics_model_id(psmouse, info);
434 error = synaptics_firmware_id(psmouse, info);
438 error = synaptics_query_modes(psmouse, info);
442 error = synaptics_capability(psmouse, info);
446 error = synaptics_resolution(psmouse, info);
526 static void synaptics_apply_quirks(struct psmouse *psmouse,
532 if (!psmouse_matches_pnp_id(psmouse,
548 psmouse_info(psmouse,
562 static int synaptics_set_advanced_gesture_mode(struct psmouse *psmouse)
567 error = ps2_sliced_command(&psmouse->ps2dev, SYN_QUE_MODEL);
571 error = ps2_command(&psmouse->ps2dev, &param, PSMOUSE_CMD_SETRATE);
578 static int synaptics_set_mode(struct psmouse *psmouse)
580 struct synaptics_data *priv = psmouse->private;
588 if (psmouse->rate >= 80)
593 error = synaptics_mode_cmd(psmouse, priv->mode);
598 error = synaptics_set_advanced_gesture_mode(psmouse);
600 psmouse_err(psmouse,
610 static void synaptics_set_rate(struct psmouse *psmouse, unsigned int rate)
612 struct synaptics_data *priv = psmouse->private;
616 psmouse->rate = 80;
619 psmouse->rate = 40;
622 synaptics_mode_cmd(psmouse, priv->mode);
630 struct psmouse *parent = serio_get_drvdata(serio->parent);
647 struct psmouse *parent = serio_get_drvdata(serio->parent);
659 struct psmouse *parent = serio_get_drvdata(serio->parent);
674 struct psmouse *child = serio_get_drvdata(ptport);
687 static void synaptics_pt_activate(struct psmouse *psmouse)
689 struct synaptics_data *priv = psmouse->private;
690 struct psmouse *child = serio_get_drvdata(priv->pt_port);
699 if (synaptics_mode_cmd(psmouse, priv->mode))
700 psmouse_warn(psmouse,
705 static void synaptics_pt_create(struct psmouse *psmouse)
711 psmouse_err(psmouse,
722 serio->parent = psmouse->ps2dev.serio;
724 psmouse->pt_activate = synaptics_pt_activate;
726 psmouse_info(psmouse, "serio: %s port at %s\n",
727 serio->name, psmouse->phys);
920 static void synaptics_report_ext_buttons(struct psmouse *psmouse,
923 struct input_dev *dev = psmouse->dev;
924 struct synaptics_data *priv = psmouse->private;
934 !((psmouse->packet[0] ^ psmouse->packet[3]) & 0x02))
966 static void synaptics_report_buttons(struct psmouse *psmouse,
969 struct input_dev *dev = psmouse->dev;
970 struct synaptics_data *priv = psmouse->private;
983 synaptics_report_ext_buttons(psmouse, hw);
986 static void synaptics_report_mt_data(struct psmouse *psmouse,
990 struct input_dev *dev = psmouse->dev;
991 struct synaptics_data *priv = psmouse->private;
1021 synaptics_report_buttons(psmouse, sgm);
1026 static void synaptics_image_sensor_process(struct psmouse *psmouse,
1029 struct synaptics_data *priv = psmouse->private;
1047 synaptics_report_mt_data(psmouse, sgm, num_fingers);
1062 static void synaptics_process_packet(struct psmouse *psmouse)
1064 struct input_dev *dev = psmouse->dev;
1065 struct synaptics_data *priv = psmouse->private;
1071 if (synaptics_parse_hw_state(psmouse->packet, priv, &hw))
1075 synaptics_image_sensor_process(psmouse, &hw);
1124 synaptics_report_mt_data(psmouse, &hw, num_fingers);
1154 synaptics_report_buttons(psmouse, &hw);
1159 static bool synaptics_validate_byte(struct psmouse *psmouse,
1167 const u8 *packet = psmouse->packet;
1185 psmouse_err(psmouse, "unknown packet type %d\n", pkt_type);
1191 synaptics_detect_pkt_type(struct psmouse *psmouse)
1196 if (!synaptics_validate_byte(psmouse, i, SYN_NEWABS_STRICT)) {
1197 psmouse_info(psmouse, "using relaxed packet validation\n");
1205 static psmouse_ret_t synaptics_process_byte(struct psmouse *psmouse)
1207 struct synaptics_data *priv = psmouse->private;
1209 if (psmouse->pktcnt >= 6) { /* Full packet received */
1211 priv->pkt_type = synaptics_detect_pkt_type(psmouse);
1214 synaptics_is_pt_packet(psmouse->packet)) {
1217 psmouse->packet);
1219 synaptics_process_packet(psmouse);
1224 return synaptics_validate_byte(psmouse, psmouse->pktcnt - 1, priv->pkt_type) ?
1248 static int set_input_params(struct psmouse *psmouse,
1251 struct input_dev *dev = psmouse->dev;
1256 /* Reset default psmouse capabilities */
1350 if (psmouse_matches_pnp_id(psmouse, topbuttonpad_pnp_ids) &&
1358 static ssize_t synaptics_show_disable_gesture(struct psmouse *psmouse,
1361 struct synaptics_data *priv = psmouse->private;
1366 static ssize_t synaptics_set_disable_gesture(struct psmouse *psmouse,
1370 struct synaptics_data *priv = psmouse->private;
1390 if (synaptics_mode_cmd(psmouse, priv->mode))
1400 static void synaptics_disconnect(struct psmouse *psmouse)
1402 struct synaptics_data *priv = psmouse->private;
1408 psmouse_smbus_cleanup(psmouse);
1412 device_remove_file(&psmouse->ps2dev.serio->dev,
1415 synaptics_reset(psmouse);
1417 psmouse->private = NULL;
1420 static int synaptics_reconnect(struct psmouse *psmouse)
1422 struct synaptics_data *priv = psmouse->private;
1429 psmouse_reset(psmouse);
1440 ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETID);
1441 error = synaptics_detect(psmouse, 0);
1448 psmouse_dbg(psmouse, "reconnected after %d tries\n", retry);
1450 error = synaptics_query_hardware(psmouse, &info);
1452 psmouse_err(psmouse, "Unable to query device.\n");
1456 error = synaptics_set_mode(psmouse);
1458 psmouse_err(psmouse, "Unable to initialize device.\n");
1466 psmouse_err(psmouse,
1552 static int synaptics_init_ps2(struct psmouse *psmouse,
1559 synaptics_apply_quirks(psmouse, info);
1561 psmouse->private = priv = kzalloc(sizeof(struct synaptics_data), GFP_KERNEL);
1574 priv->is_forcepad = psmouse_matches_pnp_id(psmouse, forcepad_pnp_ids);
1576 err = synaptics_set_mode(psmouse);
1578 psmouse_err(psmouse, "Unable to initialize device.\n");
1585 psmouse_info(psmouse,
1593 err = set_input_params(psmouse, priv);
1595 psmouse_err(psmouse,
1607 psmouse->model = ((info->model_id & 0x00ff0000) >> 8) |
1611 psmouse->protocol_handler = synaptics_process_byte;
1612 psmouse->pktsize = 6;
1615 psmouse->protocol_handler = psmouse_process_byte;
1616 psmouse->pktsize = 3;
1619 psmouse->set_rate = synaptics_set_rate;
1620 psmouse->disconnect = synaptics_disconnect;
1621 psmouse->reconnect = synaptics_reconnect;
1622 psmouse->fast_reconnect = NULL;
1623 psmouse->cleanup = synaptics_reset;
1625 psmouse->resync_time = 0;
1628 synaptics_pt_create(psmouse);
1635 if (psmouse->rate >= 80 && impaired_toshiba_kbc) {
1636 psmouse_info(psmouse,
1639 psmouse->rate = 40;
1643 err = device_create_file(&psmouse->ps2dev.serio->dev,
1646 psmouse_err(psmouse,
1660 static int __synaptics_init(struct psmouse *psmouse, bool absolute_mode)
1665 psmouse_reset(psmouse);
1667 error = synaptics_query_hardware(psmouse, &info);
1669 psmouse_err(psmouse, "Unable to query device: %d\n", error);
1673 return synaptics_init_ps2(psmouse, &info, absolute_mode);
1676 int synaptics_init_absolute(struct psmouse *psmouse)
1678 return __synaptics_init(psmouse, true);
1681 int synaptics_init_relative(struct psmouse *psmouse)
1683 return __synaptics_init(psmouse, false);
1686 static int synaptics_setup_ps2(struct psmouse *psmouse,
1699 psmouse_info(psmouse,
1704 error = synaptics_init_ps2(psmouse, info, absolute_mode);
1718 synaptics_setup_ps2(struct psmouse *psmouse,
1744 static int synaptics_create_intertouch(struct psmouse *psmouse,
1749 psmouse_matches_pnp_id(psmouse, topbuttonpad_pnp_ids) &&
1770 return psmouse_smbus_init(psmouse, &intertouch_board,
1779 static int synaptics_setup_intertouch(struct psmouse *psmouse,
1789 if (!psmouse_matches_pnp_id(psmouse, topbuttonpad_pnp_ids) &&
1790 !psmouse_matches_pnp_id(psmouse, smbus_pnp_ids)) {
1792 if (!psmouse_matches_pnp_id(psmouse, forcepad_pnp_ids))
1793 psmouse_info(psmouse,
1795 "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",
1796 psmouse->ps2dev.serio->firmware_id);
1802 psmouse_info(psmouse, "Trying to set up SMBus access\n");
1804 error = synaptics_create_intertouch(psmouse, info, leave_breadcrumbs);
1807 psmouse_info(psmouse, "SMbus companion is not ready yet\n");
1809 psmouse_err(psmouse, "unable to create intertouch device\n");
1817 int synaptics_init_smbus(struct psmouse *psmouse)
1822 psmouse_reset(psmouse);
1824 error = synaptics_query_hardware(psmouse, &info);
1826 psmouse_err(psmouse, "Unable to query device: %d\n", error);
1833 return synaptics_create_intertouch(psmouse, &info, false);
1839 synaptics_setup_intertouch(struct psmouse *psmouse,
1846 int synaptics_init_smbus(struct psmouse *psmouse)
1856 int synaptics_init(struct psmouse *psmouse)
1862 psmouse_reset(psmouse);
1864 error = synaptics_query_hardware(psmouse, &info);
1866 psmouse_err(psmouse, "Unable to query device: %d\n", error);
1874 !psmouse_matches_pnp_id(psmouse, forcepad_pnp_ids)) {
1875 psmouse_warn(psmouse,
1880 error = synaptics_setup_intertouch(psmouse, &info, true);
1885 retval = synaptics_setup_ps2(psmouse, &info);
1891 psmouse_smbus_cleanup(psmouse);
1899 int synaptics_init(struct psmouse *psmouse)