Lines Matching refs:psmouse
29 static void cypress_set_packet_size(struct psmouse *psmouse, unsigned int n) in cypress_set_packet_size() argument
31 struct cytp_data *cytp = psmouse->private; in cypress_set_packet_size()
38 static int cypress_ps2_sendbyte(struct psmouse *psmouse, u8 cmd) in cypress_ps2_sendbyte() argument
40 struct ps2dev *ps2dev = &psmouse->ps2dev; in cypress_ps2_sendbyte()
45 psmouse_dbg(psmouse, in cypress_ps2_sendbyte()
52 psmouse_dbg(psmouse, "sending command 0x%02x succeeded\n", cmd); in cypress_ps2_sendbyte()
58 static int cypress_ps2_ext_cmd(struct psmouse *psmouse, u8 prefix, u8 nibble) in cypress_ps2_ext_cmd() argument
60 struct ps2dev *ps2dev = &psmouse->ps2dev; in cypress_ps2_ext_cmd()
72 rc = cypress_ps2_sendbyte(psmouse, prefix); in cypress_ps2_ext_cmd()
74 rc = cypress_ps2_sendbyte(psmouse, 0x00); in cypress_ps2_ext_cmd()
76 rc = cypress_ps2_sendbyte(psmouse, 0x0a); in cypress_ps2_ext_cmd()
80 rc = cypress_ps2_sendbyte(psmouse, nibble); in cypress_ps2_ext_cmd()
82 rc = cypress_ps2_sendbyte(psmouse, nibble); in cypress_ps2_ext_cmd()
94 static bool cypress_verify_cmd_state(struct psmouse *psmouse, u8 cmd, u8* param) in cypress_verify_cmd_state() argument
120 psmouse_dbg(psmouse, "verify cmd state failed.\n"); in cypress_verify_cmd_state()
124 static int cypress_send_ext_cmd(struct psmouse *psmouse, u8 cmd, u8 *param) in cypress_send_ext_cmd() argument
132 psmouse_dbg(psmouse, "send extension cmd 0x%02x, [%d %d %d %d]\n", in cypress_send_ext_cmd()
137 cypress_ps2_ext_cmd(psmouse, cmd_prefix, DECODE_CMD_DD(cmd)); in cypress_send_ext_cmd()
138 cypress_ps2_ext_cmd(psmouse, cmd_prefix, DECODE_CMD_CC(cmd)); in cypress_send_ext_cmd()
139 cypress_ps2_ext_cmd(psmouse, cmd_prefix, DECODE_CMD_BB(cmd)); in cypress_send_ext_cmd()
140 cypress_ps2_ext_cmd(psmouse, cmd_prefix, DECODE_CMD_AA(cmd)); in cypress_send_ext_cmd()
142 error = ps2_command(&psmouse->ps2dev, param, ps2_cmd); in cypress_send_ext_cmd()
144 psmouse_dbg(psmouse, "Command 0x%02x failed: %d\n", in cypress_send_ext_cmd()
147 psmouse_dbg(psmouse, in cypress_send_ext_cmd()
151 if (cypress_verify_cmd_state(psmouse, cmd, param)) in cypress_send_ext_cmd()
159 int cypress_detect(struct psmouse *psmouse, bool set_properties) in cypress_detect() argument
163 if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_CYPRESS_ID, param)) in cypress_detect()
171 psmouse->vendor = "Cypress"; in cypress_detect()
172 psmouse->name = "Trackpad"; in cypress_detect()
178 static int cypress_read_fw_version(struct psmouse *psmouse) in cypress_read_fw_version() argument
180 struct cytp_data *cytp = psmouse->private; in cypress_read_fw_version()
183 if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_CYPRESS_ID, param)) in cypress_read_fw_version()
200 psmouse_dbg(psmouse, "cytp->fw_version = %d\n", cytp->fw_version); in cypress_read_fw_version()
201 psmouse_dbg(psmouse, "cytp->tp_metrics_supported = %d\n", in cypress_read_fw_version()
207 static int cypress_read_tp_metrics(struct psmouse *psmouse) in cypress_read_tp_metrics() argument
209 struct cytp_data *cytp = psmouse->private; in cypress_read_tp_metrics()
226 if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_TP_METRICS, param) == 0) { in cypress_read_tp_metrics()
247 psmouse_dbg(psmouse, "Dump trackpad hardware configuration as below:\n"); in cypress_read_tp_metrics()
248 psmouse_dbg(psmouse, "cytp->tp_width = %d\n", cytp->tp_width); in cypress_read_tp_metrics()
249 psmouse_dbg(psmouse, "cytp->tp_high = %d\n", cytp->tp_high); in cypress_read_tp_metrics()
250 psmouse_dbg(psmouse, "cytp->tp_max_abs_x = %d\n", cytp->tp_max_abs_x); in cypress_read_tp_metrics()
251 psmouse_dbg(psmouse, "cytp->tp_max_abs_y = %d\n", cytp->tp_max_abs_y); in cypress_read_tp_metrics()
252 psmouse_dbg(psmouse, "cytp->tp_min_pressure = %d\n", cytp->tp_min_pressure); in cypress_read_tp_metrics()
253 psmouse_dbg(psmouse, "cytp->tp_max_pressure = %d\n", cytp->tp_max_pressure); in cypress_read_tp_metrics()
254 psmouse_dbg(psmouse, "cytp->tp_res_x = %d\n", cytp->tp_res_x); in cypress_read_tp_metrics()
255 psmouse_dbg(psmouse, "cytp->tp_res_y = %d\n", cytp->tp_res_y); in cypress_read_tp_metrics()
257 psmouse_dbg(psmouse, "tp_type_APA = %d\n", in cypress_read_tp_metrics()
259 psmouse_dbg(psmouse, "tp_type_MTG = %d\n", in cypress_read_tp_metrics()
261 psmouse_dbg(psmouse, "tp_palm = %d\n", in cypress_read_tp_metrics()
263 psmouse_dbg(psmouse, "tp_stubborn = %d\n", in cypress_read_tp_metrics()
265 psmouse_dbg(psmouse, "tp_1f_jitter = %d\n", in cypress_read_tp_metrics()
267 psmouse_dbg(psmouse, "tp_2f_jitter = %d\n", in cypress_read_tp_metrics()
269 psmouse_dbg(psmouse, "tp_1f_spike = %d\n", in cypress_read_tp_metrics()
271 psmouse_dbg(psmouse, "tp_2f_spike = %d\n", in cypress_read_tp_metrics()
273 psmouse_dbg(psmouse, "tp_abs_packet_format_set = %d\n", in cypress_read_tp_metrics()
280 static int cypress_query_hardware(struct psmouse *psmouse) in cypress_query_hardware() argument
284 error = cypress_read_fw_version(psmouse); in cypress_query_hardware()
288 error = cypress_read_tp_metrics(psmouse); in cypress_query_hardware()
295 static int cypress_set_absolute_mode(struct psmouse *psmouse) in cypress_set_absolute_mode() argument
297 struct cytp_data *cytp = psmouse->private; in cypress_set_absolute_mode()
301 error = cypress_send_ext_cmd(psmouse, CYTP_CMD_ABS_WITH_PRESSURE_MODE, in cypress_set_absolute_mode()
308 cypress_set_packet_size(psmouse, 5); in cypress_set_absolute_mode()
317 static void cypress_reset(struct psmouse *psmouse) in cypress_reset() argument
319 struct cytp_data *cytp = psmouse->private; in cypress_reset()
323 psmouse_reset(psmouse); in cypress_reset()
404 static int cypress_parse_packet(struct psmouse *psmouse, in cypress_parse_packet() argument
408 u8 *packet = psmouse->packet; in cypress_parse_packet()
456 psmouse_dbg(psmouse, "Dump parsed report data as below:\n"); in cypress_parse_packet()
457 psmouse_dbg(psmouse, "contact_cnt = %d\n", in cypress_parse_packet()
462 psmouse_dbg(psmouse, "contacts[%d] = {%d, %d, %d}\n", i, in cypress_parse_packet()
466 psmouse_dbg(psmouse, "left = %d\n", report_data->left); in cypress_parse_packet()
467 psmouse_dbg(psmouse, "right = %d\n", report_data->right); in cypress_parse_packet()
468 psmouse_dbg(psmouse, "middle = %d\n", report_data->middle); in cypress_parse_packet()
475 static void cypress_process_packet(struct psmouse *psmouse, bool zero_pkt) in cypress_process_packet() argument
478 struct input_dev *input = psmouse->dev; in cypress_process_packet()
479 struct cytp_data *cytp = psmouse->private; in cypress_process_packet()
486 cypress_parse_packet(psmouse, cytp, &report_data); in cypress_process_packet()
520 static psmouse_ret_t cypress_validate_byte(struct psmouse *psmouse) in cypress_validate_byte() argument
523 int index = psmouse->pktcnt - 1; in cypress_validate_byte()
524 u8 *packet = psmouse->packet; in cypress_validate_byte()
525 struct cytp_data *cytp = psmouse->private; in cypress_validate_byte()
532 cypress_process_packet(psmouse, 1); in cypress_validate_byte()
555 cypress_set_packet_size(psmouse, contact_cnt == 2 ? 7 : 4); in cypress_validate_byte()
557 cypress_set_packet_size(psmouse, contact_cnt == 2 ? 8 : 5); in cypress_validate_byte()
562 static psmouse_ret_t cypress_protocol_handler(struct psmouse *psmouse) in cypress_protocol_handler() argument
564 struct cytp_data *cytp = psmouse->private; in cypress_protocol_handler()
566 if (psmouse->pktcnt >= cytp->pkt_size) { in cypress_protocol_handler()
567 cypress_process_packet(psmouse, 0); in cypress_protocol_handler()
571 return cypress_validate_byte(psmouse); in cypress_protocol_handler()
574 static void cypress_set_rate(struct psmouse *psmouse, unsigned int rate) in cypress_set_rate() argument
576 struct cytp_data *cytp = psmouse->private; in cypress_set_rate()
580 psmouse->rate = 80; in cypress_set_rate()
583 psmouse->rate = 40; in cypress_set_rate()
588 ps2_command(&psmouse->ps2dev, &rate_param, PSMOUSE_CMD_SETRATE); in cypress_set_rate()
591 static void cypress_disconnect(struct psmouse *psmouse) in cypress_disconnect() argument
593 cypress_reset(psmouse); in cypress_disconnect()
594 kfree(psmouse->private); in cypress_disconnect()
595 psmouse->private = NULL; in cypress_disconnect()
598 static int cypress_reconnect(struct psmouse *psmouse) in cypress_reconnect() argument
604 cypress_reset(psmouse); in cypress_reconnect()
605 error = cypress_detect(psmouse, false); in cypress_reconnect()
609 psmouse_err(psmouse, "Reconnect: unable to detect trackpad.\n"); in cypress_reconnect()
613 error = cypress_set_absolute_mode(psmouse); in cypress_reconnect()
615 psmouse_err(psmouse, "Reconnect: Unable to initialize Cypress absolute mode.\n"); in cypress_reconnect()
622 int cypress_init(struct psmouse *psmouse) in cypress_init() argument
631 psmouse->private = cytp; in cypress_init()
632 psmouse->pktsize = 8; in cypress_init()
634 cypress_reset(psmouse); in cypress_init()
636 error = cypress_query_hardware(psmouse); in cypress_init()
638 psmouse_err(psmouse, "Unable to query Trackpad hardware.\n"); in cypress_init()
642 error = cypress_set_absolute_mode(psmouse); in cypress_init()
644 psmouse_err(psmouse, "init: Unable to initialize Cypress absolute mode.\n"); in cypress_init()
648 error = cypress_set_input_params(psmouse->dev, cytp); in cypress_init()
650 psmouse_err(psmouse, "init: Unable to set input params.\n"); in cypress_init()
654 psmouse->model = 1; in cypress_init()
655 psmouse->protocol_handler = cypress_protocol_handler; in cypress_init()
656 psmouse->set_rate = cypress_set_rate; in cypress_init()
657 psmouse->disconnect = cypress_disconnect; in cypress_init()
658 psmouse->reconnect = cypress_reconnect; in cypress_init()
659 psmouse->cleanup = cypress_reset; in cypress_init()
660 psmouse->resync_time = 0; in cypress_init()
669 cypress_reset(psmouse); in cypress_init()
671 psmouse->private = NULL; in cypress_init()