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),
119 struct psmouse *psmouse_from_serio(struct serio *serio)
123 return container_of(ps2dev, struct psmouse, ps2dev);
154 psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse)
156 struct input_dev *dev = psmouse->dev;
157 u8 *packet = psmouse->packet;
160 if (psmouse->pktcnt < psmouse->pktsize)
165 switch (psmouse->protocol->type) {
236 packet[0] |= psmouse->extra_buttons;
244 void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work,
251 * __psmouse_set_state() sets new psmouse state and resets all flags.
253 static inline void __psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state)
255 psmouse->state = new_state;
256 psmouse->pktcnt = psmouse->out_of_sync_cnt = 0;
257 psmouse->ps2dev.flags = 0;
258 psmouse->last = jiffies;
262 * psmouse_set_state() sets new psmouse state and resets all flags and
266 void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state)
268 serio_pause_rx(psmouse->ps2dev.serio);
269 __psmouse_set_state(psmouse, new_state);
270 serio_continue_rx(psmouse->ps2dev.serio);
277 static int psmouse_handle_byte(struct psmouse *psmouse)
279 psmouse_ret_t rc = psmouse->protocol_handler(psmouse);
283 if (psmouse->state == PSMOUSE_ACTIVATED) {
284 psmouse_warn(psmouse,
286 psmouse->name, psmouse->phys,
287 psmouse->pktcnt);
288 if (++psmouse->out_of_sync_cnt == psmouse->resetafter) {
289 __psmouse_set_state(psmouse, PSMOUSE_IGNORE);
290 psmouse_notice(psmouse,
292 serio_reconnect(psmouse->ps2dev.serio);
296 psmouse->pktcnt = 0;
300 psmouse->pktcnt = 0;
301 if (psmouse->out_of_sync_cnt) {
302 psmouse->out_of_sync_cnt = 0;
303 psmouse_notice(psmouse,
305 psmouse->name, psmouse->phys);
315 static void psmouse_handle_oob_data(struct psmouse *psmouse, u8 data)
317 switch (psmouse->oob_data_type) {
319 psmouse->oob_data_type = data;
323 psmouse_report_standard_buttons(psmouse->dev, data);
324 input_sync(psmouse->dev);
326 psmouse->extra_buttons = data;
327 psmouse->oob_data_type = PSMOUSE_OOB_NONE;
331 psmouse_warn(psmouse,
333 psmouse->oob_data_type);
334 psmouse->oob_data_type = PSMOUSE_OOB_NONE;
343 struct psmouse *psmouse = container_of(ps2dev, struct psmouse, ps2dev);
345 if (psmouse->state == PSMOUSE_IGNORE)
350 !psmouse->protocol->ignore_parity))) {
352 if (psmouse->state == PSMOUSE_ACTIVATED)
353 psmouse_warn(psmouse,
361 psmouse_handle_oob_data(psmouse, data);
370 struct psmouse *psmouse = container_of(ps2dev, struct psmouse, ps2dev);
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);
432 int psmouse_reset(struct psmouse *psmouse)
437 error = ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_RESET_BAT);
450 void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution)
459 ps2_command(&psmouse->ps2dev, &p, PSMOUSE_CMD_SETRES);
460 psmouse->resolution = 25 << p;
466 static void psmouse_set_rate(struct psmouse *psmouse, unsigned int rate)
475 ps2_command(&psmouse->ps2dev, &r, PSMOUSE_CMD_SETRATE);
476 psmouse->rate = r;
482 static void psmouse_set_scale(struct psmouse *psmouse, enum psmouse_scale scale)
484 ps2_command(&psmouse->ps2dev, NULL,
492 static int psmouse_poll(struct psmouse *psmouse)
494 return ps2_command(&psmouse->ps2dev, psmouse->packet,
495 PSMOUSE_CMD_POLL | (psmouse->pktsize << 8));
510 * psmouse_matches_pnp_id - check if psmouse matches one of the passed in ids.
512 bool psmouse_matches_pnp_id(struct psmouse *psmouse, const char * const ids[])
514 struct serio *serio = psmouse->ps2dev.serio;
542 static int genius_detect(struct psmouse *psmouse, bool set_properties)
544 struct ps2dev *ps2dev = &psmouse->ps2dev;
558 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
559 __set_bit(BTN_EXTRA, psmouse->dev->keybit);
560 __set_bit(BTN_SIDE, psmouse->dev->keybit);
561 __set_bit(REL_WHEEL, psmouse->dev->relbit);
563 psmouse->vendor = "Genius";
564 psmouse->name = "Mouse";
565 psmouse->pktsize = 4;
574 static int intellimouse_detect(struct psmouse *psmouse, bool set_properties)
576 struct ps2dev *ps2dev = &psmouse->ps2dev;
591 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
592 __set_bit(REL_WHEEL, psmouse->dev->relbit);
594 if (!psmouse->vendor)
595 psmouse->vendor = "Generic";
596 if (!psmouse->name)
597 psmouse->name = "Wheel Mouse";
598 psmouse->pktsize = 4;
607 static int im_explorer_detect(struct psmouse *psmouse, bool set_properties)
609 struct ps2dev *ps2dev = &psmouse->ps2dev;
612 intellimouse_detect(psmouse, 0);
634 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
635 __set_bit(REL_WHEEL, psmouse->dev->relbit);
636 __set_bit(REL_HWHEEL, psmouse->dev->relbit);
637 __set_bit(BTN_SIDE, psmouse->dev->keybit);
638 __set_bit(BTN_EXTRA, psmouse->dev->keybit);
640 if (!psmouse->vendor)
641 psmouse->vendor = "Generic";
642 if (!psmouse->name)
643 psmouse->name = "Explorer Mouse";
644 psmouse->pktsize = 4;
653 static int thinking_detect(struct psmouse *psmouse, bool set_properties)
655 struct ps2dev *ps2dev = &psmouse->ps2dev;
674 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
675 __set_bit(BTN_EXTRA, psmouse->dev->keybit);
677 psmouse->vendor = "Kensington";
678 psmouse->name = "ThinkingMouse";
687 static int ps2bare_detect(struct psmouse *psmouse, bool set_properties)
690 if (!psmouse->vendor)
691 psmouse->vendor = "Generic";
692 if (!psmouse->name)
693 psmouse->name = "Mouse";
699 input_set_capability(psmouse->dev, EV_KEY, BTN_MIDDLE);
709 static int cortron_detect(struct psmouse *psmouse, bool set_properties)
712 psmouse->vendor = "Cortron";
713 psmouse->name = "PS/2 Trackball";
715 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
716 __set_bit(BTN_SIDE, psmouse->dev->keybit);
957 * Apply default settings to the psmouse structure. Most of them will
960 static void psmouse_apply_defaults(struct psmouse *psmouse)
962 struct input_dev *input_dev = psmouse->dev;
978 psmouse->protocol = &psmouse_protocols[0];
980 psmouse->set_rate = psmouse_set_rate;
981 psmouse->set_resolution = psmouse_set_resolution;
982 psmouse->set_scale = psmouse_set_scale;
983 psmouse->poll = psmouse_poll;
984 psmouse->protocol_handler = psmouse_process_byte;
985 psmouse->pktsize = 3;
986 psmouse->reconnect = NULL;
987 psmouse->fast_reconnect = NULL;
988 psmouse->disconnect = NULL;
989 psmouse->cleanup = NULL;
990 psmouse->pt_activate = NULL;
991 psmouse->pt_deactivate = NULL;
994 static bool psmouse_do_detect(int (*detect)(struct psmouse *, bool),
995 struct psmouse *psmouse, bool allow_passthrough,
998 if (psmouse->ps2dev.serio->id.type == SERIO_PS_PSTHRU &&
1004 psmouse_apply_defaults(psmouse);
1006 return detect(psmouse, set_properties) == 0;
1009 static bool psmouse_try_protocol(struct psmouse *psmouse,
1020 if (!psmouse_do_detect(proto->detect, psmouse, proto->try_passthru,
1025 if (proto->init(psmouse) != 0) {
1044 static int psmouse_extensions(struct psmouse *psmouse,
1055 psmouse, false, set_properties)) {
1058 (!set_properties || focaltech_init(psmouse) == 0)) {
1076 if (psmouse_try_protocol(psmouse, PSMOUSE_LIFEBOOK, &max_proto,
1080 if (psmouse_try_protocol(psmouse, PSMOUSE_VMMOUSE, &max_proto,
1089 psmouse_try_protocol(psmouse, PSMOUSE_THINKPS, &max_proto,
1102 psmouse, false, set_properties)) {
1116 ret = synaptics_init(psmouse);
1134 synaptics_reset(psmouse);
1143 psmouse_try_protocol(psmouse, PSMOUSE_CYPRESS, &max_proto,
1150 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
1151 if (psmouse_try_protocol(psmouse, PSMOUSE_ALPS,
1158 psmouse_try_protocol(psmouse, PSMOUSE_HGPK, &max_proto,
1165 psmouse_try_protocol(psmouse, PSMOUSE_ELANTECH,
1170 ret = elantech_init(psmouse);
1176 if (psmouse_try_protocol(psmouse, PSMOUSE_GENPS,
1180 if (psmouse_try_protocol(psmouse, PSMOUSE_PS2PP,
1184 if (psmouse_try_protocol(psmouse, PSMOUSE_TRACKPOINT,
1188 if (psmouse_try_protocol(psmouse, PSMOUSE_TOUCHKIT_PS2,
1198 psmouse_try_protocol(psmouse, PSMOUSE_FSP,
1208 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
1209 psmouse_reset(psmouse);
1212 psmouse_try_protocol(psmouse, PSMOUSE_IMEX,
1218 psmouse_try_protocol(psmouse, PSMOUSE_IMPS,
1227 psmouse_try_protocol(psmouse, PSMOUSE_PS2,
1237 psmouse_reset(psmouse);
1246 static int psmouse_probe(struct psmouse *psmouse)
1248 struct ps2dev *ps2dev = &psmouse->ps2dev;
1273 psmouse_warn(psmouse, "Failed to reset mouse on %s: %d\n",
1282 static void psmouse_initialize(struct psmouse *psmouse)
1288 psmouse->set_rate(psmouse, psmouse->rate);
1289 psmouse->set_resolution(psmouse, psmouse->resolution);
1290 psmouse->set_scale(psmouse, PSMOUSE_SCALE11);
1297 int psmouse_activate(struct psmouse *psmouse)
1299 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE)) {
1300 psmouse_warn(psmouse, "Failed to enable mouse on %s\n",
1301 psmouse->ps2dev.serio->phys);
1305 psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
1313 int psmouse_deactivate(struct psmouse *psmouse)
1317 error = ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE);
1319 psmouse_warn(psmouse, "Failed to deactivate mouse on %s: %d\n",
1320 psmouse->ps2dev.serio->phys, error);
1324 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1333 struct psmouse *parent = NULL, *psmouse =
1334 container_of(work, struct psmouse, resync_work.work);
1335 struct serio *serio = psmouse->ps2dev.serio;
1342 if (psmouse->state != PSMOUSE_RESYNCING)
1360 psmouse->num_resyncs++;
1362 if (ps2_sendbyte(&psmouse->ps2dev, PSMOUSE_CMD_DISABLE, 20)) {
1363 if (psmouse->num_resyncs < 3 || psmouse->acks_disable_command)
1366 psmouse->acks_disable_command = true;
1370 * psmouse->pktsize and ps2_command will fail. We do not expect and
1376 if (psmouse->poll(psmouse))
1379 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1380 for (i = 0; i < psmouse->pktsize; i++) {
1381 psmouse->pktcnt++;
1382 rc = psmouse->protocol_handler(psmouse);
1388 psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
1398 if (!ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE)) {
1406 psmouse_warn(psmouse, "failed to re-enable mouse on %s\n",
1407 psmouse->ps2dev.serio->phys);
1412 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1413 psmouse_info(psmouse,
1417 psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
1430 struct psmouse *psmouse = psmouse_from_serio(serio);
1431 struct psmouse *parent = NULL;
1440 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1445 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE))
1446 psmouse_warn(psmouse, "Failed to disable mouse on %s\n",
1447 psmouse->ps2dev.serio->phys);
1449 if (psmouse->cleanup)
1450 psmouse->cleanup(psmouse);
1455 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
1461 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE);
1478 struct psmouse *psmouse = psmouse_from_serio(serio);
1479 struct psmouse *parent = NULL;
1483 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1495 if (psmouse->disconnect)
1496 psmouse->disconnect(psmouse);
1501 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1506 if (psmouse->dev)
1507 input_unregister_device(psmouse->dev);
1509 kfree(psmouse);
1517 static int psmouse_switch_protocol(struct psmouse *psmouse,
1521 struct input_dev *input_dev = psmouse->dev;
1524 input_dev->dev.parent = &psmouse->ps2dev.serio->dev;
1527 psmouse_apply_defaults(psmouse);
1529 if (proto->detect && proto->detect(psmouse, true) < 0)
1532 if (proto->init && proto->init(psmouse) < 0)
1537 type = psmouse_extensions(psmouse, psmouse_max_proto, true);
1541 psmouse->protocol = selected_proto;
1548 if (psmouse->pktsize == 3)
1549 psmouse->resync_time = 0;
1557 if (psmouse->resync_time && psmouse->poll(psmouse))
1558 psmouse->resync_time = 0;
1560 snprintf(psmouse->devname, sizeof(psmouse->devname), "%s %s %s",
1561 selected_proto->name, psmouse->vendor, psmouse->name);
1563 input_dev->name = psmouse->devname;
1564 input_dev->phys = psmouse->phys;
1567 input_dev->id.product = psmouse->protocol->type;
1568 input_dev->id.version = psmouse->model;
1579 struct psmouse *psmouse, *parent = NULL;
1594 psmouse = kzalloc(sizeof(struct psmouse), GFP_KERNEL);
1596 if (!psmouse || !input_dev)
1599 ps2_init(&psmouse->ps2dev, serio,
1601 INIT_DELAYED_WORK(&psmouse->resync_work, psmouse_resync);
1602 psmouse->dev = input_dev;
1603 snprintf(psmouse->phys, sizeof(psmouse->phys), "%s/input0", serio->phys);
1605 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1615 if (psmouse_probe(psmouse) < 0) {
1620 psmouse->rate = psmouse_rate;
1621 psmouse->resolution = psmouse_resolution;
1622 psmouse->resetafter = psmouse_resetafter;
1623 psmouse->resync_time = parent ? 0 : psmouse_resync_time;
1624 psmouse->smartscroll = psmouse_smartscroll;
1626 psmouse_switch_protocol(psmouse, NULL);
1628 if (!psmouse->protocol->smbus_companion) {
1629 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1630 psmouse_initialize(psmouse);
1638 psmouse->dev = input_dev = NULL;
1648 if (!psmouse->protocol->smbus_companion)
1649 psmouse_activate(psmouse);
1660 if (psmouse->disconnect)
1661 psmouse->disconnect(psmouse);
1662 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1669 kfree(psmouse);
1677 struct psmouse *psmouse = psmouse_from_serio(serio);
1678 struct psmouse *parent = NULL;
1679 int (*reconnect_handler)(struct psmouse *);
1686 reconnect_handler = psmouse->fast_reconnect;
1692 reconnect_handler = psmouse->reconnect;
1700 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1703 if (reconnect_handler(psmouse))
1706 psmouse_reset(psmouse);
1708 if (psmouse_probe(psmouse) < 0)
1711 type = psmouse_extensions(psmouse, psmouse_max_proto, false);
1712 if (psmouse->protocol->type != type)
1720 if (!psmouse->protocol->smbus_companion) {
1721 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1722 psmouse_initialize(psmouse);
1732 if (!psmouse->protocol->smbus_companion)
1733 psmouse_activate(psmouse);
1777 .name = "psmouse",
1795 struct psmouse *psmouse = psmouse_from_serio(serio);
1797 if (psmouse->protocol->smbus_companion &&
1801 return attr->show(psmouse, attr->data, buf);
1809 struct psmouse *psmouse, *parent = NULL;
1816 psmouse = psmouse_from_serio(serio);
1818 if (psmouse->protocol->smbus_companion &&
1825 if (psmouse->state == PSMOUSE_IGNORE) {
1835 if (!psmouse->protocol->smbus_companion)
1836 psmouse_deactivate(psmouse);
1839 retval = attr->set(psmouse, attr->data, buf, count);
1842 if (retval != -ENODEV && !psmouse->protocol->smbus_companion)
1843 psmouse_activate(psmouse);
1855 static ssize_t psmouse_show_int_attr(struct psmouse *psmouse, void *offset, char *buf)
1857 unsigned int *field = (unsigned int *)((char *)psmouse + (size_t)offset);
1862 static ssize_t psmouse_set_int_attr(struct psmouse *psmouse, void *offset, const char *buf, size_t count)
1864 unsigned int *field = (unsigned int *)((char *)psmouse + (size_t)offset);
1877 static ssize_t psmouse_attr_show_protocol(struct psmouse *psmouse, void *data, char *buf)
1879 return sprintf(buf, "%s\n", psmouse->protocol->name);
1882 static ssize_t psmouse_attr_set_protocol(struct psmouse *psmouse, void *data, const char *buf, size_t count)
1884 struct serio *serio = psmouse->ps2dev.serio;
1885 struct psmouse *parent = NULL;
1895 if (psmouse->protocol == proto)
1904 psmouse_warn(psmouse,
1919 if (psmouse->protocol == proto) {
1931 old_dev = psmouse->dev;
1932 old_proto = psmouse->protocol;
1934 if (psmouse->disconnect)
1935 psmouse->disconnect(psmouse);
1937 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1939 psmouse->dev = new_dev;
1940 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1942 if (psmouse_switch_protocol(psmouse, proto) < 0) {
1943 psmouse_reset(psmouse);
1945 psmouse_switch_protocol(psmouse, &psmouse_protocols[0]);
1948 psmouse_initialize(psmouse);
1949 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1951 if (psmouse->protocol->smbus_companion) {
1952 input_free_device(psmouse->dev);
1953 psmouse->dev = NULL;
1955 error = input_register_device(psmouse->dev);
1957 if (psmouse->disconnect)
1958 psmouse->disconnect(psmouse);
1960 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1962 psmouse->dev = old_dev;
1963 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1964 psmouse_switch_protocol(psmouse, old_proto);
1965 psmouse_initialize(psmouse);
1966 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1981 static ssize_t psmouse_attr_set_rate(struct psmouse *psmouse, void *data, const char *buf, size_t count)
1990 psmouse->set_rate(psmouse, value);
1994 static ssize_t psmouse_attr_set_resolution(struct psmouse *psmouse, void *data, const char *buf, size_t count)
2003 psmouse->set_resolution(psmouse, value);