Lines Matching refs:psmouse

29 static void cypress_set_packet_size(struct psmouse *psmouse, unsigned int n)
31 struct cytp_data *cytp = psmouse->private;
38 static int cypress_ps2_sendbyte(struct psmouse *psmouse, int value)
40 struct ps2dev *ps2dev = &psmouse->ps2dev;
43 psmouse_dbg(psmouse,
53 psmouse_dbg(psmouse, "sending command 0x%02x succeeded, resp 0xfa\n",
60 static int cypress_ps2_ext_cmd(struct psmouse *psmouse, unsigned short cmd,
63 struct ps2dev *ps2dev = &psmouse->ps2dev;
75 rc = cypress_ps2_sendbyte(psmouse, cmd & 0xff);
77 rc = cypress_ps2_sendbyte(psmouse, 0x00);
79 rc = cypress_ps2_sendbyte(psmouse, 0x0a);
84 rc = cypress_ps2_sendbyte(psmouse, data);
86 rc = cypress_ps2_sendbyte(psmouse, data);
98 static int cypress_ps2_read_cmd_status(struct psmouse *psmouse,
103 struct ps2dev *ps2dev = &psmouse->ps2dev;
109 old_state = psmouse->state;
110 psmouse->state = PSMOUSE_CMD_MODE;
111 psmouse->pktcnt = 0;
116 rc = cypress_ps2_sendbyte(psmouse, 0xe9);
121 (psmouse->pktcnt >= pktsize),
124 memcpy(param, psmouse->packet, pktsize);
126 psmouse_dbg(psmouse, "Command 0x%02x response data (0x): %*ph\n",
130 psmouse->state = old_state;
131 psmouse->pktcnt = 0;
138 static bool cypress_verify_cmd_state(struct psmouse *psmouse,
165 psmouse_dbg(psmouse, "verify cmd state failed.\n");
169 static int cypress_send_ext_cmd(struct psmouse *psmouse, unsigned char cmd,
175 psmouse_dbg(psmouse, "send extension cmd 0x%02x, [%d %d %d %d]\n",
180 cypress_ps2_ext_cmd(psmouse,
182 cypress_ps2_ext_cmd(psmouse,
184 cypress_ps2_ext_cmd(psmouse,
186 cypress_ps2_ext_cmd(psmouse,
189 rc = cypress_ps2_read_cmd_status(psmouse, cmd, param);
193 if (cypress_verify_cmd_state(psmouse, cmd, param))
201 int cypress_detect(struct psmouse *psmouse, bool set_properties)
205 if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_CYPRESS_ID, param))
213 psmouse->vendor = "Cypress";
214 psmouse->name = "Trackpad";
220 static int cypress_read_fw_version(struct psmouse *psmouse)
222 struct cytp_data *cytp = psmouse->private;
225 if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_CYPRESS_ID, param))
242 psmouse_dbg(psmouse, "cytp->fw_version = %d\n", cytp->fw_version);
243 psmouse_dbg(psmouse, "cytp->tp_metrics_supported = %d\n",
249 static int cypress_read_tp_metrics(struct psmouse *psmouse)
251 struct cytp_data *cytp = psmouse->private;
268 if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_TP_METRICS, param) == 0) {
289 psmouse_dbg(psmouse, "Dump trackpad hardware configuration as below:\n");
290 psmouse_dbg(psmouse, "cytp->tp_width = %d\n", cytp->tp_width);
291 psmouse_dbg(psmouse, "cytp->tp_high = %d\n", cytp->tp_high);
292 psmouse_dbg(psmouse, "cytp->tp_max_abs_x = %d\n", cytp->tp_max_abs_x);
293 psmouse_dbg(psmouse, "cytp->tp_max_abs_y = %d\n", cytp->tp_max_abs_y);
294 psmouse_dbg(psmouse, "cytp->tp_min_pressure = %d\n", cytp->tp_min_pressure);
295 psmouse_dbg(psmouse, "cytp->tp_max_pressure = %d\n", cytp->tp_max_pressure);
296 psmouse_dbg(psmouse, "cytp->tp_res_x = %d\n", cytp->tp_res_x);
297 psmouse_dbg(psmouse, "cytp->tp_res_y = %d\n", cytp->tp_res_y);
299 psmouse_dbg(psmouse, "tp_type_APA = %d\n",
301 psmouse_dbg(psmouse, "tp_type_MTG = %d\n",
303 psmouse_dbg(psmouse, "tp_palm = %d\n",
305 psmouse_dbg(psmouse, "tp_stubborn = %d\n",
307 psmouse_dbg(psmouse, "tp_1f_jitter = %d\n",
309 psmouse_dbg(psmouse, "tp_2f_jitter = %d\n",
311 psmouse_dbg(psmouse, "tp_1f_spike = %d\n",
313 psmouse_dbg(psmouse, "tp_2f_spike = %d\n",
315 psmouse_dbg(psmouse, "tp_abs_packet_format_set = %d\n",
322 static int cypress_query_hardware(struct psmouse *psmouse)
326 ret = cypress_read_fw_version(psmouse);
330 ret = cypress_read_tp_metrics(psmouse);
337 static int cypress_set_absolute_mode(struct psmouse *psmouse)
339 struct cytp_data *cytp = psmouse->private;
342 if (cypress_send_ext_cmd(psmouse, CYTP_CMD_ABS_WITH_PRESSURE_MODE, param) < 0)
347 cypress_set_packet_size(psmouse, 5);
356 static void cypress_reset(struct psmouse *psmouse)
358 struct cytp_data *cytp = psmouse->private;
362 psmouse_reset(psmouse);
443 static int cypress_parse_packet(struct psmouse *psmouse,
446 unsigned char *packet = psmouse->packet;
494 psmouse_dbg(psmouse, "Dump parsed report data as below:\n");
495 psmouse_dbg(psmouse, "contact_cnt = %d\n",
500 psmouse_dbg(psmouse, "contacts[%d] = {%d, %d, %d}\n", i,
504 psmouse_dbg(psmouse, "left = %d\n", report_data->left);
505 psmouse_dbg(psmouse, "right = %d\n", report_data->right);
506 psmouse_dbg(psmouse, "middle = %d\n", report_data->middle);
513 static void cypress_process_packet(struct psmouse *psmouse, bool zero_pkt)
516 struct input_dev *input = psmouse->dev;
517 struct cytp_data *cytp = psmouse->private;
524 cypress_parse_packet(psmouse, cytp, &report_data);
558 static psmouse_ret_t cypress_validate_byte(struct psmouse *psmouse)
561 int index = psmouse->pktcnt - 1;
562 unsigned char *packet = psmouse->packet;
563 struct cytp_data *cytp = psmouse->private;
570 cypress_process_packet(psmouse, 1);
593 cypress_set_packet_size(psmouse, contact_cnt == 2 ? 7 : 4);
595 cypress_set_packet_size(psmouse, contact_cnt == 2 ? 8 : 5);
600 static psmouse_ret_t cypress_protocol_handler(struct psmouse *psmouse)
602 struct cytp_data *cytp = psmouse->private;
604 if (psmouse->pktcnt >= cytp->pkt_size) {
605 cypress_process_packet(psmouse, 0);
609 return cypress_validate_byte(psmouse);
612 static void cypress_set_rate(struct psmouse *psmouse, unsigned int rate)
614 struct cytp_data *cytp = psmouse->private;
617 psmouse->rate = 80;
620 psmouse->rate = 40;
624 ps2_command(&psmouse->ps2dev, (unsigned char *)&psmouse->rate,
628 static void cypress_disconnect(struct psmouse *psmouse)
630 cypress_reset(psmouse);
631 kfree(psmouse->private);
632 psmouse->private = NULL;
635 static int cypress_reconnect(struct psmouse *psmouse)
641 cypress_reset(psmouse);
642 rc = cypress_detect(psmouse, false);
646 psmouse_err(psmouse, "Reconnect: unable to detect trackpad.\n");
650 if (cypress_set_absolute_mode(psmouse)) {
651 psmouse_err(psmouse, "Reconnect: Unable to initialize Cypress absolute mode.\n");
658 int cypress_init(struct psmouse *psmouse)
666 psmouse->private = cytp;
667 psmouse->pktsize = 8;
669 cypress_reset(psmouse);
671 if (cypress_query_hardware(psmouse)) {
672 psmouse_err(psmouse, "Unable to query Trackpad hardware.\n");
676 if (cypress_set_absolute_mode(psmouse)) {
677 psmouse_err(psmouse, "init: Unable to initialize Cypress absolute mode.\n");
681 if (cypress_set_input_params(psmouse->dev, cytp) < 0) {
682 psmouse_err(psmouse, "init: Unable to set input params.\n");
686 psmouse->model = 1;
687 psmouse->protocol_handler = cypress_protocol_handler;
688 psmouse->set_rate = cypress_set_rate;
689 psmouse->disconnect = cypress_disconnect;
690 psmouse->reconnect = cypress_reconnect;
691 psmouse->cleanup = cypress_reset;
692 psmouse->resync_time = 0;
699 * let psmouse driver communicating with it as default PS2 mouse.
701 cypress_reset(psmouse);
703 psmouse->private = NULL;