Lines Matching refs:psmouse
80 static int synaptics_mode_cmd(struct psmouse *psmouse, unsigned char mode) in synaptics_mode_cmd() argument
84 if (psmouse_sliced_command(psmouse, mode)) in synaptics_mode_cmd()
87 if (ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_SETRATE)) in synaptics_mode_cmd()
92 int synaptics_detect(struct psmouse *psmouse, bool set_properties) in synaptics_detect() argument
94 struct ps2dev *ps2dev = &psmouse->ps2dev; in synaptics_detect()
109 psmouse->vendor = "Synaptics"; in synaptics_detect()
110 psmouse->name = "TouchPad"; in synaptics_detect()
116 void synaptics_reset(struct psmouse *psmouse) in synaptics_reset() argument
119 synaptics_mode_cmd(psmouse, 0); in synaptics_reset()
238 static int synaptics_send_cmd(struct psmouse *psmouse, unsigned char c, unsigned char *param) in synaptics_send_cmd() argument
240 if (psmouse_sliced_command(psmouse, c)) in synaptics_send_cmd()
242 if (ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETINFO)) in synaptics_send_cmd()
251 static int synaptics_model_id(struct psmouse *psmouse) in synaptics_model_id() argument
253 struct synaptics_data *priv = psmouse->private; in synaptics_model_id()
256 if (synaptics_send_cmd(psmouse, SYN_QUE_MODEL, mi)) in synaptics_model_id()
262 static int synaptics_more_extended_queries(struct psmouse *psmouse) in synaptics_more_extended_queries() argument
264 struct synaptics_data *priv = psmouse->private; in synaptics_more_extended_queries()
267 if (synaptics_send_cmd(psmouse, SYN_QUE_MEXT_CAPAB_10, buf)) in synaptics_more_extended_queries()
279 static int synaptics_query_modes(struct psmouse *psmouse) in synaptics_query_modes() argument
281 struct synaptics_data *priv = psmouse->private; in synaptics_query_modes()
288 if (synaptics_send_cmd(psmouse, SYN_QUE_MODES, bid)) in synaptics_query_modes()
293 return synaptics_more_extended_queries(psmouse); in synaptics_query_modes()
301 static int synaptics_firmware_id(struct psmouse *psmouse) in synaptics_firmware_id() argument
303 struct synaptics_data *priv = psmouse->private; in synaptics_firmware_id()
306 if (synaptics_send_cmd(psmouse, SYN_QUE_FIRMWARE_ID, fwid)) in synaptics_firmware_id()
316 static int synaptics_capability(struct psmouse *psmouse) in synaptics_capability() argument
318 struct synaptics_data *priv = psmouse->private; in synaptics_capability()
321 if (synaptics_send_cmd(psmouse, SYN_QUE_CAPABILITIES, cap)) in synaptics_capability()
341 if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_CAPAB, cap)) { in synaptics_capability()
342 psmouse_warn(psmouse, in synaptics_capability()
357 if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_CAPAB_0C, cap)) { in synaptics_capability()
358 psmouse_warn(psmouse, in synaptics_capability()
372 static int synaptics_identify(struct psmouse *psmouse) in synaptics_identify() argument
374 struct synaptics_data *priv = psmouse->private; in synaptics_identify()
377 if (synaptics_send_cmd(psmouse, SYN_QUE_IDENTIFY, id)) in synaptics_identify()
390 static int synaptics_resolution(struct psmouse *psmouse) in synaptics_resolution() argument
392 struct synaptics_data *priv = psmouse->private; in synaptics_resolution()
398 if (synaptics_send_cmd(psmouse, SYN_QUE_RESOLUTION, resp) == 0) { in synaptics_resolution()
407 if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MAX_COORDS, resp)) { in synaptics_resolution()
408 psmouse_warn(psmouse, in synaptics_resolution()
413 psmouse_info(psmouse, in synaptics_resolution()
427 if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MIN_COORDS, resp)) { in synaptics_resolution()
428 psmouse_warn(psmouse, in synaptics_resolution()
433 psmouse_info(psmouse, in synaptics_resolution()
446 static void synaptics_apply_quirks(struct psmouse *psmouse) in synaptics_apply_quirks() argument
448 struct synaptics_data *priv = psmouse->private; in synaptics_apply_quirks()
452 if (!psmouse_matches_pnp_id(psmouse, in synaptics_apply_quirks()
468 psmouse_info(psmouse, in synaptics_apply_quirks()
476 static int synaptics_query_hardware(struct psmouse *psmouse) in synaptics_query_hardware() argument
478 if (synaptics_identify(psmouse)) in synaptics_query_hardware()
480 if (synaptics_model_id(psmouse)) in synaptics_query_hardware()
482 if (synaptics_firmware_id(psmouse)) in synaptics_query_hardware()
484 if (synaptics_query_modes(psmouse)) in synaptics_query_hardware()
486 if (synaptics_capability(psmouse)) in synaptics_query_hardware()
488 if (synaptics_resolution(psmouse)) in synaptics_query_hardware()
491 synaptics_apply_quirks(psmouse); in synaptics_query_hardware()
496 static int synaptics_set_advanced_gesture_mode(struct psmouse *psmouse) in synaptics_set_advanced_gesture_mode() argument
499 struct synaptics_data *priv = psmouse->private; in synaptics_set_advanced_gesture_mode()
505 if (psmouse_sliced_command(psmouse, SYN_QUE_MODEL)) in synaptics_set_advanced_gesture_mode()
508 if (ps2_command(&psmouse->ps2dev, ¶m, PSMOUSE_CMD_SETRATE)) in synaptics_set_advanced_gesture_mode()
517 static int synaptics_set_mode(struct psmouse *psmouse) in synaptics_set_mode() argument
519 struct synaptics_data *priv = psmouse->private; in synaptics_set_mode()
526 if (psmouse->rate >= 80) in synaptics_set_mode()
531 if (synaptics_mode_cmd(psmouse, priv->mode)) in synaptics_set_mode()
535 synaptics_set_advanced_gesture_mode(psmouse)) { in synaptics_set_mode()
536 psmouse_err(psmouse, "Advanced gesture mode init failed.\n"); in synaptics_set_mode()
543 static void synaptics_set_rate(struct psmouse *psmouse, unsigned int rate) in synaptics_set_rate() argument
545 struct synaptics_data *priv = psmouse->private; in synaptics_set_rate()
549 psmouse->rate = 80; in synaptics_set_rate()
552 psmouse->rate = 40; in synaptics_set_rate()
555 synaptics_mode_cmd(psmouse, priv->mode); in synaptics_set_rate()
563 struct psmouse *parent = serio_get_drvdata(serio->parent); in synaptics_pt_write()
575 struct psmouse *parent = serio_get_drvdata(serio->parent); in synaptics_pt_start()
587 struct psmouse *parent = serio_get_drvdata(serio->parent); in synaptics_pt_stop()
600 static void synaptics_pass_pt_packet(struct psmouse *psmouse, in synaptics_pass_pt_packet() argument
604 struct synaptics_data *priv = psmouse->private; in synaptics_pass_pt_packet()
605 struct psmouse *child = serio_get_drvdata(ptport); in synaptics_pass_pt_packet()
618 static void synaptics_pt_activate(struct psmouse *psmouse) in synaptics_pt_activate() argument
620 struct synaptics_data *priv = psmouse->private; in synaptics_pt_activate()
621 struct psmouse *child = serio_get_drvdata(priv->pt_port); in synaptics_pt_activate()
630 if (synaptics_mode_cmd(psmouse, priv->mode)) in synaptics_pt_activate()
631 psmouse_warn(psmouse, in synaptics_pt_activate()
636 static void synaptics_pt_create(struct psmouse *psmouse) in synaptics_pt_create() argument
642 psmouse_err(psmouse, in synaptics_pt_create()
653 serio->parent = psmouse->ps2dev.serio; in synaptics_pt_create()
655 psmouse->pt_activate = synaptics_pt_activate; in synaptics_pt_create()
657 psmouse_info(psmouse, "serio: %s port at %s\n", in synaptics_pt_create()
658 serio->name, psmouse->phys); in synaptics_pt_create()
853 static void synaptics_report_ext_buttons(struct psmouse *psmouse, in synaptics_report_ext_buttons() argument
856 struct input_dev *dev = psmouse->dev; in synaptics_report_ext_buttons()
857 struct synaptics_data *priv = psmouse->private; in synaptics_report_ext_buttons()
868 !((psmouse->packet[0] ^ psmouse->packet[3]) & 0x02)) in synaptics_report_ext_buttons()
894 synaptics_pass_pt_packet(psmouse, priv->pt_port, buf); in synaptics_report_ext_buttons()
897 static void synaptics_report_buttons(struct psmouse *psmouse, in synaptics_report_buttons() argument
900 struct input_dev *dev = psmouse->dev; in synaptics_report_buttons()
901 struct synaptics_data *priv = psmouse->private; in synaptics_report_buttons()
914 synaptics_report_ext_buttons(psmouse, hw); in synaptics_report_buttons()
917 static void synaptics_report_mt_data(struct psmouse *psmouse, in synaptics_report_mt_data() argument
921 struct input_dev *dev = psmouse->dev; in synaptics_report_mt_data()
922 struct synaptics_data *priv = psmouse->private; in synaptics_report_mt_data()
952 synaptics_report_buttons(psmouse, sgm); in synaptics_report_mt_data()
957 static void synaptics_image_sensor_process(struct psmouse *psmouse, in synaptics_image_sensor_process() argument
960 struct synaptics_data *priv = psmouse->private; in synaptics_image_sensor_process()
978 synaptics_report_mt_data(psmouse, sgm, num_fingers); in synaptics_image_sensor_process()
984 static void synaptics_process_packet(struct psmouse *psmouse) in synaptics_process_packet() argument
986 struct input_dev *dev = psmouse->dev; in synaptics_process_packet()
987 struct synaptics_data *priv = psmouse->private; in synaptics_process_packet()
992 if (synaptics_parse_hw_state(psmouse->packet, priv, &hw)) in synaptics_process_packet()
996 synaptics_image_sensor_process(psmouse, &hw); in synaptics_process_packet()
1045 synaptics_report_mt_data(psmouse, &hw, num_fingers); in synaptics_process_packet()
1075 synaptics_report_buttons(psmouse, &hw); in synaptics_process_packet()
1080 static int synaptics_validate_byte(struct psmouse *psmouse, in synaptics_validate_byte() argument
1088 const char *packet = psmouse->packet; in synaptics_validate_byte()
1106 psmouse_err(psmouse, "unknown packet type %d\n", pkt_type); in synaptics_validate_byte()
1111 static unsigned char synaptics_detect_pkt_type(struct psmouse *psmouse) in synaptics_detect_pkt_type() argument
1116 if (!synaptics_validate_byte(psmouse, i, SYN_NEWABS_STRICT)) { in synaptics_detect_pkt_type()
1117 psmouse_info(psmouse, "using relaxed packet validation\n"); in synaptics_detect_pkt_type()
1124 static psmouse_ret_t synaptics_process_byte(struct psmouse *psmouse) in synaptics_process_byte() argument
1126 struct synaptics_data *priv = psmouse->private; in synaptics_process_byte()
1128 if (psmouse->pktcnt >= 6) { /* Full packet received */ in synaptics_process_byte()
1130 priv->pkt_type = synaptics_detect_pkt_type(psmouse); in synaptics_process_byte()
1133 synaptics_is_pt_packet(psmouse->packet)) { in synaptics_process_byte()
1135 synaptics_pass_pt_packet(psmouse, priv->pt_port, in synaptics_process_byte()
1136 psmouse->packet); in synaptics_process_byte()
1138 synaptics_process_packet(psmouse); in synaptics_process_byte()
1143 return synaptics_validate_byte(psmouse, psmouse->pktcnt - 1, priv->pkt_type) ? in synaptics_process_byte()
1167 static void set_input_params(struct psmouse *psmouse, in set_input_params() argument
1170 struct input_dev *dev = psmouse->dev; in set_input_params()
1248 if (psmouse_matches_pnp_id(psmouse, topbuttonpad_pnp_ids) && in set_input_params()
1257 static ssize_t synaptics_show_disable_gesture(struct psmouse *psmouse, in synaptics_show_disable_gesture() argument
1260 struct synaptics_data *priv = psmouse->private; in synaptics_show_disable_gesture()
1265 static ssize_t synaptics_set_disable_gesture(struct psmouse *psmouse, in synaptics_set_disable_gesture() argument
1269 struct synaptics_data *priv = psmouse->private; in synaptics_set_disable_gesture()
1289 if (synaptics_mode_cmd(psmouse, priv->mode)) in synaptics_set_disable_gesture()
1299 static void synaptics_disconnect(struct psmouse *psmouse) in synaptics_disconnect() argument
1301 struct synaptics_data *priv = psmouse->private; in synaptics_disconnect()
1304 device_remove_file(&psmouse->ps2dev.serio->dev, in synaptics_disconnect()
1307 synaptics_reset(psmouse); in synaptics_disconnect()
1309 psmouse->private = NULL; in synaptics_disconnect()
1312 static int synaptics_reconnect(struct psmouse *psmouse) in synaptics_reconnect() argument
1314 struct synaptics_data *priv = psmouse->private; in synaptics_reconnect()
1321 psmouse_reset(psmouse); in synaptics_reconnect()
1332 ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETID); in synaptics_reconnect()
1333 error = synaptics_detect(psmouse, 0); in synaptics_reconnect()
1340 psmouse_dbg(psmouse, "reconnected after %d tries\n", retry); in synaptics_reconnect()
1342 if (synaptics_query_hardware(psmouse)) { in synaptics_reconnect()
1343 psmouse_err(psmouse, "Unable to query device.\n"); in synaptics_reconnect()
1347 if (synaptics_set_mode(psmouse)) { in synaptics_reconnect()
1348 psmouse_err(psmouse, "Unable to initialize device.\n"); in synaptics_reconnect()
1356 psmouse_err(psmouse, in synaptics_reconnect()
1442 static int __synaptics_init(struct psmouse *psmouse, bool absolute_mode) in __synaptics_init() argument
1454 psmouse_info(psmouse, in __synaptics_init()
1459 psmouse->private = priv = kzalloc(sizeof(struct synaptics_data), GFP_KERNEL); in __synaptics_init()
1463 psmouse_reset(psmouse); in __synaptics_init()
1465 if (synaptics_query_hardware(psmouse)) { in __synaptics_init()
1466 psmouse_err(psmouse, "Unable to query device.\n"); in __synaptics_init()
1478 priv->is_forcepad = psmouse_matches_pnp_id(psmouse, forcepad_pnp_ids); in __synaptics_init()
1480 if (synaptics_set_mode(psmouse)) { in __synaptics_init()
1481 psmouse_err(psmouse, "Unable to initialize device.\n"); in __synaptics_init()
1487 psmouse_info(psmouse, in __synaptics_init()
1495 set_input_params(psmouse, priv); in __synaptics_init()
1504 psmouse->model = ((priv->model_id & 0x00ff0000) >> 8) | in __synaptics_init()
1508 psmouse->protocol_handler = synaptics_process_byte; in __synaptics_init()
1509 psmouse->pktsize = 6; in __synaptics_init()
1512 psmouse->protocol_handler = psmouse_process_byte; in __synaptics_init()
1513 psmouse->pktsize = 3; in __synaptics_init()
1516 psmouse->set_rate = synaptics_set_rate; in __synaptics_init()
1517 psmouse->disconnect = synaptics_disconnect; in __synaptics_init()
1518 psmouse->reconnect = synaptics_reconnect; in __synaptics_init()
1519 psmouse->cleanup = synaptics_reset; in __synaptics_init()
1521 psmouse->resync_time = 0; in __synaptics_init()
1524 synaptics_pt_create(psmouse); in __synaptics_init()
1531 if (psmouse->rate >= 80 && impaired_toshiba_kbc) { in __synaptics_init()
1532 psmouse_info(psmouse, in __synaptics_init()
1535 psmouse->rate = 40; in __synaptics_init()
1539 err = device_create_file(&psmouse->ps2dev.serio->dev, in __synaptics_init()
1542 psmouse_err(psmouse, in __synaptics_init()
1556 int synaptics_init(struct psmouse *psmouse) in synaptics_init() argument
1558 return __synaptics_init(psmouse, true); in synaptics_init()
1561 int synaptics_init_relative(struct psmouse *psmouse) in synaptics_init_relative() argument
1563 return __synaptics_init(psmouse, false); in synaptics_init_relative()
1572 int synaptics_init(struct psmouse *psmouse) in synaptics_init() argument