Lines Matching refs:psmouse

32 static void cypress_set_packet_size(struct psmouse *psmouse, unsigned int n)  in cypress_set_packet_size()  argument
34 struct cytp_data *cytp = psmouse->private; in cypress_set_packet_size()
41 static int cypress_ps2_sendbyte(struct psmouse *psmouse, int value) in cypress_ps2_sendbyte() argument
43 struct ps2dev *ps2dev = &psmouse->ps2dev; in cypress_ps2_sendbyte()
46 psmouse_dbg(psmouse, in cypress_ps2_sendbyte()
56 psmouse_dbg(psmouse, "sending command 0x%02x succeeded, resp 0xfa\n", in cypress_ps2_sendbyte()
63 static int cypress_ps2_ext_cmd(struct psmouse *psmouse, unsigned short cmd, in cypress_ps2_ext_cmd() argument
66 struct ps2dev *ps2dev = &psmouse->ps2dev; in cypress_ps2_ext_cmd()
78 rc = cypress_ps2_sendbyte(psmouse, cmd & 0xff); in cypress_ps2_ext_cmd()
80 rc = cypress_ps2_sendbyte(psmouse, 0x00); in cypress_ps2_ext_cmd()
82 rc = cypress_ps2_sendbyte(psmouse, 0x0a); in cypress_ps2_ext_cmd()
87 rc = cypress_ps2_sendbyte(psmouse, data); in cypress_ps2_ext_cmd()
89 rc = cypress_ps2_sendbyte(psmouse, data); in cypress_ps2_ext_cmd()
101 static int cypress_ps2_read_cmd_status(struct psmouse *psmouse, in cypress_ps2_read_cmd_status() argument
106 struct ps2dev *ps2dev = &psmouse->ps2dev; in cypress_ps2_read_cmd_status()
110 ps2_begin_command(&psmouse->ps2dev); in cypress_ps2_read_cmd_status()
112 old_state = psmouse->state; in cypress_ps2_read_cmd_status()
113 psmouse->state = PSMOUSE_CMD_MODE; in cypress_ps2_read_cmd_status()
114 psmouse->pktcnt = 0; in cypress_ps2_read_cmd_status()
119 rc = cypress_ps2_sendbyte(psmouse, 0xe9); in cypress_ps2_read_cmd_status()
124 (psmouse->pktcnt >= pktsize), in cypress_ps2_read_cmd_status()
127 memcpy(param, psmouse->packet, pktsize); in cypress_ps2_read_cmd_status()
129 psmouse_dbg(psmouse, "Command 0x%02x response data (0x): %*ph\n", in cypress_ps2_read_cmd_status()
133 psmouse->state = old_state; in cypress_ps2_read_cmd_status()
134 psmouse->pktcnt = 0; in cypress_ps2_read_cmd_status()
136 ps2_end_command(&psmouse->ps2dev); in cypress_ps2_read_cmd_status()
141 static bool cypress_verify_cmd_state(struct psmouse *psmouse, in cypress_verify_cmd_state() argument
168 psmouse_dbg(psmouse, "verify cmd state failed.\n"); in cypress_verify_cmd_state()
172 static int cypress_send_ext_cmd(struct psmouse *psmouse, unsigned char cmd, in cypress_send_ext_cmd() argument
178 psmouse_dbg(psmouse, "send extension cmd 0x%02x, [%d %d %d %d]\n", in cypress_send_ext_cmd()
183 cypress_ps2_ext_cmd(psmouse, in cypress_send_ext_cmd()
185 cypress_ps2_ext_cmd(psmouse, in cypress_send_ext_cmd()
187 cypress_ps2_ext_cmd(psmouse, in cypress_send_ext_cmd()
189 cypress_ps2_ext_cmd(psmouse, in cypress_send_ext_cmd()
192 rc = cypress_ps2_read_cmd_status(psmouse, cmd, param); in cypress_send_ext_cmd()
196 if (cypress_verify_cmd_state(psmouse, cmd, param)) in cypress_send_ext_cmd()
204 int cypress_detect(struct psmouse *psmouse, bool set_properties) in cypress_detect() argument
208 if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_CYPRESS_ID, param)) in cypress_detect()
216 psmouse->vendor = "Cypress"; in cypress_detect()
217 psmouse->name = "Trackpad"; in cypress_detect()
223 static int cypress_read_fw_version(struct psmouse *psmouse) in cypress_read_fw_version() argument
225 struct cytp_data *cytp = psmouse->private; in cypress_read_fw_version()
228 if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_CYPRESS_ID, param)) in cypress_read_fw_version()
245 psmouse_dbg(psmouse, "cytp->fw_version = %d\n", cytp->fw_version); in cypress_read_fw_version()
246 psmouse_dbg(psmouse, "cytp->tp_metrics_supported = %d\n", in cypress_read_fw_version()
252 static int cypress_read_tp_metrics(struct psmouse *psmouse) in cypress_read_tp_metrics() argument
254 struct cytp_data *cytp = psmouse->private; in cypress_read_tp_metrics()
271 if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_TP_METRICS, param) == 0) { in cypress_read_tp_metrics()
292 psmouse_dbg(psmouse, "Dump trackpad hardware configuration as below:\n"); in cypress_read_tp_metrics()
293 psmouse_dbg(psmouse, "cytp->tp_width = %d\n", cytp->tp_width); in cypress_read_tp_metrics()
294 psmouse_dbg(psmouse, "cytp->tp_high = %d\n", cytp->tp_high); in cypress_read_tp_metrics()
295 psmouse_dbg(psmouse, "cytp->tp_max_abs_x = %d\n", cytp->tp_max_abs_x); in cypress_read_tp_metrics()
296 psmouse_dbg(psmouse, "cytp->tp_max_abs_y = %d\n", cytp->tp_max_abs_y); in cypress_read_tp_metrics()
297 psmouse_dbg(psmouse, "cytp->tp_min_pressure = %d\n", cytp->tp_min_pressure); in cypress_read_tp_metrics()
298 psmouse_dbg(psmouse, "cytp->tp_max_pressure = %d\n", cytp->tp_max_pressure); in cypress_read_tp_metrics()
299 psmouse_dbg(psmouse, "cytp->tp_res_x = %d\n", cytp->tp_res_x); in cypress_read_tp_metrics()
300 psmouse_dbg(psmouse, "cytp->tp_res_y = %d\n", cytp->tp_res_y); in cypress_read_tp_metrics()
302 psmouse_dbg(psmouse, "tp_type_APA = %d\n", in cypress_read_tp_metrics()
304 psmouse_dbg(psmouse, "tp_type_MTG = %d\n", in cypress_read_tp_metrics()
306 psmouse_dbg(psmouse, "tp_palm = %d\n", in cypress_read_tp_metrics()
308 psmouse_dbg(psmouse, "tp_stubborn = %d\n", in cypress_read_tp_metrics()
310 psmouse_dbg(psmouse, "tp_1f_jitter = %d\n", in cypress_read_tp_metrics()
312 psmouse_dbg(psmouse, "tp_2f_jitter = %d\n", in cypress_read_tp_metrics()
314 psmouse_dbg(psmouse, "tp_1f_spike = %d\n", in cypress_read_tp_metrics()
316 psmouse_dbg(psmouse, "tp_2f_spike = %d\n", in cypress_read_tp_metrics()
318 psmouse_dbg(psmouse, "tp_abs_packet_format_set = %d\n", in cypress_read_tp_metrics()
325 static int cypress_query_hardware(struct psmouse *psmouse) in cypress_query_hardware() argument
329 ret = cypress_read_fw_version(psmouse); in cypress_query_hardware()
333 ret = cypress_read_tp_metrics(psmouse); in cypress_query_hardware()
340 static int cypress_set_absolute_mode(struct psmouse *psmouse) in cypress_set_absolute_mode() argument
342 struct cytp_data *cytp = psmouse->private; in cypress_set_absolute_mode()
345 if (cypress_send_ext_cmd(psmouse, CYTP_CMD_ABS_WITH_PRESSURE_MODE, param) < 0) in cypress_set_absolute_mode()
350 cypress_set_packet_size(psmouse, 5); in cypress_set_absolute_mode()
359 static void cypress_reset(struct psmouse *psmouse) in cypress_reset() argument
361 struct cytp_data *cytp = psmouse->private; in cypress_reset()
365 psmouse_reset(psmouse); in cypress_reset()
448 static int cypress_parse_packet(struct psmouse *psmouse, in cypress_parse_packet() argument
451 unsigned char *packet = psmouse->packet; in cypress_parse_packet()
499 psmouse_dbg(psmouse, "Dump parsed report data as below:\n"); in cypress_parse_packet()
500 psmouse_dbg(psmouse, "contact_cnt = %d\n", in cypress_parse_packet()
505 psmouse_dbg(psmouse, "contacts[%d] = {%d, %d, %d}\n", i, in cypress_parse_packet()
509 psmouse_dbg(psmouse, "left = %d\n", report_data->left); in cypress_parse_packet()
510 psmouse_dbg(psmouse, "right = %d\n", report_data->right); in cypress_parse_packet()
511 psmouse_dbg(psmouse, "middle = %d\n", report_data->middle); in cypress_parse_packet()
518 static void cypress_process_packet(struct psmouse *psmouse, bool zero_pkt) in cypress_process_packet() argument
521 struct input_dev *input = psmouse->dev; in cypress_process_packet()
522 struct cytp_data *cytp = psmouse->private; in cypress_process_packet()
529 cypress_parse_packet(psmouse, cytp, &report_data); in cypress_process_packet()
563 static psmouse_ret_t cypress_validate_byte(struct psmouse *psmouse) in cypress_validate_byte() argument
566 int index = psmouse->pktcnt - 1; in cypress_validate_byte()
567 unsigned char *packet = psmouse->packet; in cypress_validate_byte()
568 struct cytp_data *cytp = psmouse->private; in cypress_validate_byte()
575 cypress_process_packet(psmouse, 1); in cypress_validate_byte()
598 cypress_set_packet_size(psmouse, contact_cnt == 2 ? 7 : 4); in cypress_validate_byte()
600 cypress_set_packet_size(psmouse, contact_cnt == 2 ? 8 : 5); in cypress_validate_byte()
605 static psmouse_ret_t cypress_protocol_handler(struct psmouse *psmouse) in cypress_protocol_handler() argument
607 struct cytp_data *cytp = psmouse->private; in cypress_protocol_handler()
609 if (psmouse->pktcnt >= cytp->pkt_size) { in cypress_protocol_handler()
610 cypress_process_packet(psmouse, 0); in cypress_protocol_handler()
614 return cypress_validate_byte(psmouse); in cypress_protocol_handler()
617 static void cypress_set_rate(struct psmouse *psmouse, unsigned int rate) in cypress_set_rate() argument
619 struct cytp_data *cytp = psmouse->private; in cypress_set_rate()
622 psmouse->rate = 80; in cypress_set_rate()
625 psmouse->rate = 40; in cypress_set_rate()
629 ps2_command(&psmouse->ps2dev, (unsigned char *)&psmouse->rate, in cypress_set_rate()
633 static void cypress_disconnect(struct psmouse *psmouse) in cypress_disconnect() argument
635 cypress_reset(psmouse); in cypress_disconnect()
636 kfree(psmouse->private); in cypress_disconnect()
637 psmouse->private = NULL; in cypress_disconnect()
640 static int cypress_reconnect(struct psmouse *psmouse) in cypress_reconnect() argument
646 cypress_reset(psmouse); in cypress_reconnect()
647 rc = cypress_detect(psmouse, false); in cypress_reconnect()
651 psmouse_err(psmouse, "Reconnect: unable to detect trackpad.\n"); in cypress_reconnect()
655 if (cypress_set_absolute_mode(psmouse)) { in cypress_reconnect()
656 psmouse_err(psmouse, "Reconnect: Unable to initialize Cypress absolute mode.\n"); in cypress_reconnect()
663 int cypress_init(struct psmouse *psmouse) in cypress_init() argument
671 psmouse->private = cytp; in cypress_init()
672 psmouse->pktsize = 8; in cypress_init()
674 cypress_reset(psmouse); in cypress_init()
676 if (cypress_query_hardware(psmouse)) { in cypress_init()
677 psmouse_err(psmouse, "Unable to query Trackpad hardware.\n"); in cypress_init()
681 if (cypress_set_absolute_mode(psmouse)) { in cypress_init()
682 psmouse_err(psmouse, "init: Unable to initialize Cypress absolute mode.\n"); in cypress_init()
686 if (cypress_set_input_params(psmouse->dev, cytp) < 0) { in cypress_init()
687 psmouse_err(psmouse, "init: Unable to set input params.\n"); in cypress_init()
691 psmouse->model = 1; in cypress_init()
692 psmouse->protocol_handler = cypress_protocol_handler; in cypress_init()
693 psmouse->set_rate = cypress_set_rate; in cypress_init()
694 psmouse->disconnect = cypress_disconnect; in cypress_init()
695 psmouse->reconnect = cypress_reconnect; in cypress_init()
696 psmouse->cleanup = cypress_reset; in cypress_init()
697 psmouse->resync_time = 0; in cypress_init()
706 cypress_reset(psmouse); in cypress_init()
708 psmouse->private = NULL; in cypress_init()