Lines Matching refs:psmouse
25 #include "psmouse.h"
85 (void *) offsetof(struct psmouse, rate),
88 (void *) offsetof(struct psmouse, resolution),
91 (void *) offsetof(struct psmouse, resetafter),
94 (void *) offsetof(struct psmouse, resync_time),
149 psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse)
151 struct input_dev *dev = psmouse->dev;
152 u8 *packet = psmouse->packet;
155 if (psmouse->pktcnt < psmouse->pktsize)
160 switch (psmouse->protocol->type) {
231 packet[0] |= psmouse->extra_buttons;
239 void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work,
246 * __psmouse_set_state() sets new psmouse state and resets all flags.
248 static inline void __psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state)
250 psmouse->state = new_state;
251 psmouse->pktcnt = psmouse->out_of_sync_cnt = 0;
252 psmouse->ps2dev.flags = 0;
253 psmouse->last = jiffies;
257 * psmouse_set_state() sets new psmouse state and resets all flags and
261 void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state)
263 serio_pause_rx(psmouse->ps2dev.serio);
264 __psmouse_set_state(psmouse, new_state);
265 serio_continue_rx(psmouse->ps2dev.serio);
272 static int psmouse_handle_byte(struct psmouse *psmouse)
274 psmouse_ret_t rc = psmouse->protocol_handler(psmouse);
278 if (psmouse->state == PSMOUSE_ACTIVATED) {
279 psmouse_warn(psmouse,
281 psmouse->name, psmouse->phys,
282 psmouse->pktcnt);
283 if (++psmouse->out_of_sync_cnt == psmouse->resetafter) {
284 __psmouse_set_state(psmouse, PSMOUSE_IGNORE);
285 psmouse_notice(psmouse,
287 serio_reconnect(psmouse->ps2dev.serio);
291 psmouse->pktcnt = 0;
295 psmouse->pktcnt = 0;
296 if (psmouse->out_of_sync_cnt) {
297 psmouse->out_of_sync_cnt = 0;
298 psmouse_notice(psmouse,
300 psmouse->name, psmouse->phys);
310 static void psmouse_handle_oob_data(struct psmouse *psmouse, u8 data)
312 switch (psmouse->oob_data_type) {
314 psmouse->oob_data_type = data;
318 psmouse_report_standard_buttons(psmouse->dev, data);
319 input_sync(psmouse->dev);
321 psmouse->extra_buttons = data;
322 psmouse->oob_data_type = PSMOUSE_OOB_NONE;
326 psmouse_warn(psmouse,
328 psmouse->oob_data_type);
329 psmouse->oob_data_type = PSMOUSE_OOB_NONE;
341 struct psmouse *psmouse = serio_get_drvdata(serio);
343 if (psmouse->state == PSMOUSE_IGNORE)
348 !psmouse->protocol->ignore_parity))) {
350 if (psmouse->state == PSMOUSE_ACTIVATED)
351 psmouse_warn(psmouse,
355 ps2_cmd_aborted(&psmouse->ps2dev);
360 psmouse_handle_oob_data(psmouse, data);
364 if (unlikely(psmouse->ps2dev.flags & PS2_FLAG_ACK))
365 if (ps2_handle_ack(&psmouse->ps2dev, data))
368 if (unlikely(psmouse->ps2dev.flags & PS2_FLAG_CMD))
369 if (ps2_handle_response(&psmouse->ps2dev, data))
374 if (psmouse->state <= PSMOUSE_RESYNCING)
377 if (psmouse->state == PSMOUSE_ACTIVATED &&
378 psmouse->pktcnt && time_after(jiffies, psmouse->last + HZ/2)) {
379 psmouse_info(psmouse, "%s at %s lost synchronization, throwing %d bytes away.\n",
380 psmouse->name, psmouse->phys, psmouse->pktcnt);
381 psmouse->badbyte = psmouse->packet[0];
382 __psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
383 psmouse_queue_work(psmouse, &psmouse->resync_work, 0);
387 psmouse->packet[psmouse->pktcnt++] = data;
390 if (unlikely(psmouse->packet[0] == PSMOUSE_RET_BAT && psmouse->pktcnt <= 2)) {
391 if (psmouse->pktcnt == 1) {
392 psmouse->last = jiffies;
396 if (psmouse->packet[1] == PSMOUSE_RET_ID ||
397 (psmouse->protocol->type == PSMOUSE_HGPK &&
398 psmouse->packet[1] == PSMOUSE_RET_BAT)) {
399 __psmouse_set_state(psmouse, PSMOUSE_IGNORE);
405 psmouse->pktcnt = 1;
406 if (psmouse_handle_byte(psmouse))
409 psmouse->packet[psmouse->pktcnt++] = data;
416 if (psmouse->state == PSMOUSE_ACTIVATED &&
417 psmouse->pktcnt == 1 && psmouse->resync_time &&
418 time_after(jiffies, psmouse->last + psmouse->resync_time * HZ)) {
419 psmouse->badbyte = psmouse->packet[0];
420 __psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
421 psmouse_queue_work(psmouse, &psmouse->resync_work, 0);
425 psmouse->last = jiffies;
426 psmouse_handle_byte(psmouse);
435 int psmouse_reset(struct psmouse *psmouse)
440 error = ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_RESET_BAT);
453 void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution)
462 ps2_command(&psmouse->ps2dev, &p, PSMOUSE_CMD_SETRES);
463 psmouse->resolution = 25 << p;
469 static void psmouse_set_rate(struct psmouse *psmouse, unsigned int rate)
478 ps2_command(&psmouse->ps2dev, &r, PSMOUSE_CMD_SETRATE);
479 psmouse->rate = r;
485 static void psmouse_set_scale(struct psmouse *psmouse, enum psmouse_scale scale)
487 ps2_command(&psmouse->ps2dev, NULL,
495 static int psmouse_poll(struct psmouse *psmouse)
497 return ps2_command(&psmouse->ps2dev, psmouse->packet,
498 PSMOUSE_CMD_POLL | (psmouse->pktsize << 8));
513 * psmouse_matches_pnp_id - check if psmouse matches one of the passed in ids.
515 bool psmouse_matches_pnp_id(struct psmouse *psmouse, const char * const ids[])
517 struct serio *serio = psmouse->ps2dev.serio;
545 static int genius_detect(struct psmouse *psmouse, bool set_properties)
547 struct ps2dev *ps2dev = &psmouse->ps2dev;
561 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
562 __set_bit(BTN_EXTRA, psmouse->dev->keybit);
563 __set_bit(BTN_SIDE, psmouse->dev->keybit);
564 __set_bit(REL_WHEEL, psmouse->dev->relbit);
566 psmouse->vendor = "Genius";
567 psmouse->name = "Mouse";
568 psmouse->pktsize = 4;
577 static int intellimouse_detect(struct psmouse *psmouse, bool set_properties)
579 struct ps2dev *ps2dev = &psmouse->ps2dev;
594 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
595 __set_bit(REL_WHEEL, psmouse->dev->relbit);
597 if (!psmouse->vendor)
598 psmouse->vendor = "Generic";
599 if (!psmouse->name)
600 psmouse->name = "Wheel Mouse";
601 psmouse->pktsize = 4;
610 static int im_explorer_detect(struct psmouse *psmouse, bool set_properties)
612 struct ps2dev *ps2dev = &psmouse->ps2dev;
615 intellimouse_detect(psmouse, 0);
637 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
638 __set_bit(REL_WHEEL, psmouse->dev->relbit);
639 __set_bit(REL_HWHEEL, psmouse->dev->relbit);
640 __set_bit(BTN_SIDE, psmouse->dev->keybit);
641 __set_bit(BTN_EXTRA, psmouse->dev->keybit);
643 if (!psmouse->vendor)
644 psmouse->vendor = "Generic";
645 if (!psmouse->name)
646 psmouse->name = "Explorer Mouse";
647 psmouse->pktsize = 4;
656 static int thinking_detect(struct psmouse *psmouse, bool set_properties)
658 struct ps2dev *ps2dev = &psmouse->ps2dev;
677 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
678 __set_bit(BTN_EXTRA, psmouse->dev->keybit);
680 psmouse->vendor = "Kensington";
681 psmouse->name = "ThinkingMouse";
690 static int ps2bare_detect(struct psmouse *psmouse, bool set_properties)
693 if (!psmouse->vendor)
694 psmouse->vendor = "Generic";
695 if (!psmouse->name)
696 psmouse->name = "Mouse";
702 input_set_capability(psmouse->dev, EV_KEY, BTN_MIDDLE);
712 static int cortron_detect(struct psmouse *psmouse, bool set_properties)
715 psmouse->vendor = "Cortron";
716 psmouse->name = "PS/2 Trackball";
718 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
719 __set_bit(BTN_SIDE, psmouse->dev->keybit);
960 * Apply default settings to the psmouse structure. Most of them will
963 static void psmouse_apply_defaults(struct psmouse *psmouse)
965 struct input_dev *input_dev = psmouse->dev;
981 psmouse->protocol = &psmouse_protocols[0];
983 psmouse->set_rate = psmouse_set_rate;
984 psmouse->set_resolution = psmouse_set_resolution;
985 psmouse->set_scale = psmouse_set_scale;
986 psmouse->poll = psmouse_poll;
987 psmouse->protocol_handler = psmouse_process_byte;
988 psmouse->pktsize = 3;
989 psmouse->reconnect = NULL;
990 psmouse->fast_reconnect = NULL;
991 psmouse->disconnect = NULL;
992 psmouse->cleanup = NULL;
993 psmouse->pt_activate = NULL;
994 psmouse->pt_deactivate = NULL;
997 static bool psmouse_do_detect(int (*detect)(struct psmouse *, bool),
998 struct psmouse *psmouse, bool allow_passthrough,
1001 if (psmouse->ps2dev.serio->id.type == SERIO_PS_PSTHRU &&
1007 psmouse_apply_defaults(psmouse);
1009 return detect(psmouse, set_properties) == 0;
1012 static bool psmouse_try_protocol(struct psmouse *psmouse,
1023 if (!psmouse_do_detect(proto->detect, psmouse, proto->try_passthru,
1028 if (proto->init(psmouse) != 0) {
1047 static int psmouse_extensions(struct psmouse *psmouse,
1058 psmouse, false, set_properties)) {
1061 (!set_properties || focaltech_init(psmouse) == 0)) {
1079 if (psmouse_try_protocol(psmouse, PSMOUSE_LIFEBOOK, &max_proto,
1083 if (psmouse_try_protocol(psmouse, PSMOUSE_VMMOUSE, &max_proto,
1092 psmouse_try_protocol(psmouse, PSMOUSE_THINKPS, &max_proto,
1105 psmouse, false, set_properties)) {
1119 ret = synaptics_init(psmouse);
1137 synaptics_reset(psmouse);
1146 psmouse_try_protocol(psmouse, PSMOUSE_CYPRESS, &max_proto,
1153 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
1154 if (psmouse_try_protocol(psmouse, PSMOUSE_ALPS,
1161 psmouse_try_protocol(psmouse, PSMOUSE_HGPK, &max_proto,
1168 psmouse_try_protocol(psmouse, PSMOUSE_ELANTECH,
1173 ret = elantech_init(psmouse);
1179 if (psmouse_try_protocol(psmouse, PSMOUSE_GENPS,
1183 if (psmouse_try_protocol(psmouse, PSMOUSE_PS2PP,
1187 if (psmouse_try_protocol(psmouse, PSMOUSE_TRACKPOINT,
1191 if (psmouse_try_protocol(psmouse, PSMOUSE_TOUCHKIT_PS2,
1201 psmouse_try_protocol(psmouse, PSMOUSE_FSP,
1211 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
1212 psmouse_reset(psmouse);
1215 psmouse_try_protocol(psmouse, PSMOUSE_IMEX,
1221 psmouse_try_protocol(psmouse, PSMOUSE_IMPS,
1230 psmouse_try_protocol(psmouse, PSMOUSE_PS2,
1240 psmouse_reset(psmouse);
1249 static int psmouse_probe(struct psmouse *psmouse)
1251 struct ps2dev *ps2dev = &psmouse->ps2dev;
1276 psmouse_warn(psmouse, "Failed to reset mouse on %s: %d\n",
1285 static void psmouse_initialize(struct psmouse *psmouse)
1291 psmouse->set_rate(psmouse, psmouse->rate);
1292 psmouse->set_resolution(psmouse, psmouse->resolution);
1293 psmouse->set_scale(psmouse, PSMOUSE_SCALE11);
1300 int psmouse_activate(struct psmouse *psmouse)
1302 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE)) {
1303 psmouse_warn(psmouse, "Failed to enable mouse on %s\n",
1304 psmouse->ps2dev.serio->phys);
1308 psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
1316 int psmouse_deactivate(struct psmouse *psmouse)
1320 error = ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE);
1322 psmouse_warn(psmouse, "Failed to deactivate mouse on %s: %d\n",
1323 psmouse->ps2dev.serio->phys, error);
1327 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1336 struct psmouse *parent = NULL, *psmouse =
1337 container_of(work, struct psmouse, resync_work.work);
1338 struct serio *serio = psmouse->ps2dev.serio;
1345 if (psmouse->state != PSMOUSE_RESYNCING)
1363 psmouse->num_resyncs++;
1365 if (ps2_sendbyte(&psmouse->ps2dev, PSMOUSE_CMD_DISABLE, 20)) {
1366 if (psmouse->num_resyncs < 3 || psmouse->acks_disable_command)
1369 psmouse->acks_disable_command = true;
1373 * psmouse->pktsize and ps2_command will fail. We do not expect and
1379 if (psmouse->poll(psmouse))
1382 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1383 for (i = 0; i < psmouse->pktsize; i++) {
1384 psmouse->pktcnt++;
1385 rc = psmouse->protocol_handler(psmouse);
1391 psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
1401 if (!ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE)) {
1409 psmouse_warn(psmouse, "failed to re-enable mouse on %s\n",
1410 psmouse->ps2dev.serio->phys);
1415 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1416 psmouse_info(psmouse,
1420 psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
1433 struct psmouse *psmouse = serio_get_drvdata(serio);
1434 struct psmouse *parent = NULL;
1443 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1448 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE))
1449 psmouse_warn(psmouse, "Failed to disable mouse on %s\n",
1450 psmouse->ps2dev.serio->phys);
1452 if (psmouse->cleanup)
1453 psmouse->cleanup(psmouse);
1458 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
1464 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE);
1481 struct psmouse *psmouse = serio_get_drvdata(serio);
1482 struct psmouse *parent = NULL;
1488 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1500 if (psmouse->disconnect)
1501 psmouse->disconnect(psmouse);
1506 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1511 if (psmouse->dev)
1512 input_unregister_device(psmouse->dev);
1514 kfree(psmouse);
1522 static int psmouse_switch_protocol(struct psmouse *psmouse,
1526 struct input_dev *input_dev = psmouse->dev;
1529 input_dev->dev.parent = &psmouse->ps2dev.serio->dev;
1532 psmouse_apply_defaults(psmouse);
1534 if (proto->detect && proto->detect(psmouse, true) < 0)
1537 if (proto->init && proto->init(psmouse) < 0)
1542 type = psmouse_extensions(psmouse, psmouse_max_proto, true);
1546 psmouse->protocol = selected_proto;
1553 if (psmouse->pktsize == 3)
1554 psmouse->resync_time = 0;
1562 if (psmouse->resync_time && psmouse->poll(psmouse))
1563 psmouse->resync_time = 0;
1565 snprintf(psmouse->devname, sizeof(psmouse->devname), "%s %s %s",
1566 selected_proto->name, psmouse->vendor, psmouse->name);
1568 input_dev->name = psmouse->devname;
1569 input_dev->phys = psmouse->phys;
1572 input_dev->id.product = psmouse->protocol->type;
1573 input_dev->id.version = psmouse->model;
1584 struct psmouse *psmouse, *parent = NULL;
1599 psmouse = kzalloc(sizeof(struct psmouse), GFP_KERNEL);
1601 if (!psmouse || !input_dev)
1604 ps2_init(&psmouse->ps2dev, serio);
1605 INIT_DELAYED_WORK(&psmouse->resync_work, psmouse_resync);
1606 psmouse->dev = input_dev;
1607 snprintf(psmouse->phys, sizeof(psmouse->phys), "%s/input0", serio->phys);
1609 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1611 serio_set_drvdata(serio, psmouse);
1621 if (psmouse_probe(psmouse) < 0) {
1626 psmouse->rate = psmouse_rate;
1627 psmouse->resolution = psmouse_resolution;
1628 psmouse->resetafter = psmouse_resetafter;
1629 psmouse->resync_time = parent ? 0 : psmouse_resync_time;
1630 psmouse->smartscroll = psmouse_smartscroll;
1632 psmouse_switch_protocol(psmouse, NULL);
1634 if (!psmouse->protocol->smbus_companion) {
1635 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1636 psmouse_initialize(psmouse);
1644 psmouse->dev = input_dev = NULL;
1658 if (!psmouse->protocol->smbus_companion)
1659 psmouse_activate(psmouse);
1677 if (psmouse->disconnect)
1678 psmouse->disconnect(psmouse);
1679 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1686 kfree(psmouse);
1694 struct psmouse *psmouse = serio_get_drvdata(serio);
1695 struct psmouse *parent = NULL;
1696 int (*reconnect_handler)(struct psmouse *);
1703 reconnect_handler = psmouse->fast_reconnect;
1709 reconnect_handler = psmouse->reconnect;
1717 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1720 if (reconnect_handler(psmouse))
1723 psmouse_reset(psmouse);
1725 if (psmouse_probe(psmouse) < 0)
1728 type = psmouse_extensions(psmouse, psmouse_max_proto, false);
1729 if (psmouse->protocol->type != type)
1737 if (!psmouse->protocol->smbus_companion) {
1738 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1739 psmouse_initialize(psmouse);
1749 if (!psmouse->protocol->smbus_companion)
1750 psmouse_activate(psmouse);
1794 .name = "psmouse",
1811 struct psmouse *psmouse = serio_get_drvdata(serio);
1813 if (psmouse->protocol->smbus_companion &&
1817 return attr->show(psmouse, attr->data, buf);
1825 struct psmouse *psmouse, *parent = NULL;
1832 psmouse = serio_get_drvdata(serio);
1834 if (psmouse->protocol->smbus_companion &&
1841 if (psmouse->state == PSMOUSE_IGNORE) {
1851 if (!psmouse->protocol->smbus_companion)
1852 psmouse_deactivate(psmouse);
1855 retval = attr->set(psmouse, attr->data, buf, count);
1858 if (retval != -ENODEV && !psmouse->protocol->smbus_companion)
1859 psmouse_activate(psmouse);
1871 static ssize_t psmouse_show_int_attr(struct psmouse *psmouse, void *offset, char *buf)
1873 unsigned int *field = (unsigned int *)((char *)psmouse + (size_t)offset);
1878 static ssize_t psmouse_set_int_attr(struct psmouse *psmouse, void *offset, const char *buf, size_t count)
1880 unsigned int *field = (unsigned int *)((char *)psmouse + (size_t)offset);
1893 static ssize_t psmouse_attr_show_protocol(struct psmouse *psmouse, void *data, char *buf)
1895 return sprintf(buf, "%s\n", psmouse->protocol->name);
1898 static ssize_t psmouse_attr_set_protocol(struct psmouse *psmouse, void *data, const char *buf, size_t count)
1900 struct serio *serio = psmouse->ps2dev.serio;
1901 struct psmouse *parent = NULL;
1911 if (psmouse->protocol == proto)
1920 psmouse_warn(psmouse,
1935 if (psmouse->protocol == proto) {
1947 old_dev = psmouse->dev;
1948 old_proto = psmouse->protocol;
1950 if (psmouse->disconnect)
1951 psmouse->disconnect(psmouse);
1953 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1955 psmouse->dev = new_dev;
1956 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1958 if (psmouse_switch_protocol(psmouse, proto) < 0) {
1959 psmouse_reset(psmouse);
1961 psmouse_switch_protocol(psmouse, &psmouse_protocols[0]);
1964 psmouse_initialize(psmouse);
1965 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1967 if (psmouse->protocol->smbus_companion) {
1968 input_free_device(psmouse->dev);
1969 psmouse->dev = NULL;
1971 error = input_register_device(psmouse->dev);
1973 if (psmouse->disconnect)
1974 psmouse->disconnect(psmouse);
1976 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1978 psmouse->dev = old_dev;
1979 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1980 psmouse_switch_protocol(psmouse, old_proto);
1981 psmouse_initialize(psmouse);
1982 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1997 static ssize_t psmouse_attr_set_rate(struct psmouse *psmouse, void *data, const char *buf, size_t count)
2006 psmouse->set_rate(psmouse, value);
2010 static ssize_t psmouse_attr_set_resolution(struct psmouse *psmouse, void *data, const char *buf, size_t count)
2019 psmouse->set_resolution(psmouse, value);