• Home
  • Raw
  • Download

Lines Matching +full:smart +full:- +full:sensing

4  * Copyright (c) 1999-2002 Vojtech Pavlik
5 * Copyright (c) 2003-2004 Dmitry Torokhov
117 * sysfs). We could use a per-device semaphore but since there
136 x = packet[1] ? packet[1] - ((packet[0] << 4) & 0x100) : 0; in psmouse_report_standard_motion()
137 y = packet[2] ? packet[2] - ((packet[0] << 3) & 0x100) : 0; in psmouse_report_standard_motion()
140 input_report_rel(dev, REL_Y, -y); in psmouse_report_standard_motion()
155 struct input_dev *dev = psmouse->dev; in psmouse_process_byte()
156 u8 *packet = psmouse->packet; in psmouse_process_byte()
159 if (psmouse->pktcnt < psmouse->pktsize) in psmouse_process_byte()
164 switch (psmouse->protocol->type) { in psmouse_process_byte()
167 input_report_rel(dev, REL_WHEEL, -(s8) packet[3]); in psmouse_process_byte()
175 -sign_extend32(packet[3], 5)); in psmouse_process_byte()
179 -sign_extend32(packet[3], 5)); in psmouse_process_byte()
187 * one reporting +/-1 in the lower nibble, and second in psmouse_process_byte()
188 * one reporting +/-2. in psmouse_process_byte()
193 input_report_rel(dev, REL_WHEEL, -wheel); in psmouse_process_byte()
203 input_report_rel(dev, REL_WHEEL, -(s8) packet[3]); in psmouse_process_byte()
235 packet[0] |= psmouse->extra_buttons; in psmouse_process_byte()
254 psmouse->state = new_state; in __psmouse_set_state()
255 psmouse->pktcnt = psmouse->out_of_sync_cnt = 0; in __psmouse_set_state()
256 psmouse->ps2dev.flags = 0; in __psmouse_set_state()
257 psmouse->last = jiffies; in __psmouse_set_state()
267 serio_pause_rx(psmouse->ps2dev.serio); in psmouse_set_state()
269 serio_continue_rx(psmouse->ps2dev.serio); in psmouse_set_state()
278 psmouse_ret_t rc = psmouse->protocol_handler(psmouse); in psmouse_handle_byte()
282 if (psmouse->state == PSMOUSE_ACTIVATED) { in psmouse_handle_byte()
285 psmouse->name, psmouse->phys, in psmouse_handle_byte()
286 psmouse->pktcnt); in psmouse_handle_byte()
287 if (++psmouse->out_of_sync_cnt == psmouse->resetafter) { in psmouse_handle_byte()
291 serio_reconnect(psmouse->ps2dev.serio); in psmouse_handle_byte()
292 return -EIO; in psmouse_handle_byte()
295 psmouse->pktcnt = 0; in psmouse_handle_byte()
299 psmouse->pktcnt = 0; in psmouse_handle_byte()
300 if (psmouse->out_of_sync_cnt) { in psmouse_handle_byte()
301 psmouse->out_of_sync_cnt = 0; in psmouse_handle_byte()
303 "%s at %s - driver resynced.\n", in psmouse_handle_byte()
304 psmouse->name, psmouse->phys); in psmouse_handle_byte()
316 switch (psmouse->oob_data_type) { in psmouse_handle_oob_data()
318 psmouse->oob_data_type = data; in psmouse_handle_oob_data()
322 psmouse_report_standard_buttons(psmouse->dev, data); in psmouse_handle_oob_data()
323 input_sync(psmouse->dev); in psmouse_handle_oob_data()
325 psmouse->extra_buttons = data; in psmouse_handle_oob_data()
326 psmouse->oob_data_type = PSMOUSE_OOB_NONE; in psmouse_handle_oob_data()
332 psmouse->oob_data_type); in psmouse_handle_oob_data()
333 psmouse->oob_data_type = PSMOUSE_OOB_NONE; in psmouse_handle_oob_data()
347 if (psmouse->state == PSMOUSE_IGNORE) in psmouse_interrupt()
352 !psmouse->protocol->ignore_parity))) { in psmouse_interrupt()
354 if (psmouse->state == PSMOUSE_ACTIVATED) in psmouse_interrupt()
356 "bad data from KBC -%s%s\n", in psmouse_interrupt()
359 ps2_cmd_aborted(&psmouse->ps2dev); in psmouse_interrupt()
368 if (unlikely(psmouse->ps2dev.flags & PS2_FLAG_ACK)) in psmouse_interrupt()
369 if (ps2_handle_ack(&psmouse->ps2dev, data)) in psmouse_interrupt()
372 if (unlikely(psmouse->ps2dev.flags & PS2_FLAG_CMD)) in psmouse_interrupt()
373 if (ps2_handle_response(&psmouse->ps2dev, data)) in psmouse_interrupt()
376 if (psmouse->state <= PSMOUSE_RESYNCING) in psmouse_interrupt()
379 if (psmouse->state == PSMOUSE_ACTIVATED && in psmouse_interrupt()
380 psmouse->pktcnt && time_after(jiffies, psmouse->last + HZ/2)) { in psmouse_interrupt()
382 psmouse->name, psmouse->phys, psmouse->pktcnt); in psmouse_interrupt()
383 psmouse->badbyte = psmouse->packet[0]; in psmouse_interrupt()
385 psmouse_queue_work(psmouse, &psmouse->resync_work, 0); in psmouse_interrupt()
389 psmouse->packet[psmouse->pktcnt++] = data; in psmouse_interrupt()
392 if (unlikely(psmouse->packet[0] == PSMOUSE_RET_BAT && psmouse->pktcnt <= 2)) { in psmouse_interrupt()
393 if (psmouse->pktcnt == 1) { in psmouse_interrupt()
394 psmouse->last = jiffies; in psmouse_interrupt()
398 if (psmouse->packet[1] == PSMOUSE_RET_ID || in psmouse_interrupt()
399 (psmouse->protocol->type == PSMOUSE_HGPK && in psmouse_interrupt()
400 psmouse->packet[1] == PSMOUSE_RET_BAT)) { in psmouse_interrupt()
407 psmouse->pktcnt = 1; in psmouse_interrupt()
411 psmouse->packet[psmouse->pktcnt++] = data; in psmouse_interrupt()
418 if (psmouse->state == PSMOUSE_ACTIVATED && in psmouse_interrupt()
419 psmouse->pktcnt == 1 && psmouse->resync_time && in psmouse_interrupt()
420 time_after(jiffies, psmouse->last + psmouse->resync_time * HZ)) { in psmouse_interrupt()
421 psmouse->badbyte = psmouse->packet[0]; in psmouse_interrupt()
423 psmouse_queue_work(psmouse, &psmouse->resync_work, 0); in psmouse_interrupt()
427 psmouse->last = jiffies; in psmouse_interrupt()
435 * psmouse_reset() resets the mouse into power-on state.
442 error = ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_RESET_BAT); in psmouse_reset()
447 return -EIO; in psmouse_reset()
464 ps2_command(&psmouse->ps2dev, &p, PSMOUSE_CMD_SETRES); in psmouse_set_resolution()
465 psmouse->resolution = 25 << p; in psmouse_set_resolution()
480 ps2_command(&psmouse->ps2dev, &r, PSMOUSE_CMD_SETRATE); in psmouse_set_rate()
481 psmouse->rate = r; in psmouse_set_rate()
489 ps2_command(&psmouse->ps2dev, NULL, in psmouse_set_scale()
495 * psmouse_poll() - default poll handler. Everyone except for ALPS uses it.
499 return ps2_command(&psmouse->ps2dev, psmouse->packet, in psmouse_poll()
500 PSMOUSE_CMD_POLL | (psmouse->pktsize << 8)); in psmouse_poll()
515 * psmouse_matches_pnp_id - check if psmouse matches one of the passed in ids.
519 struct serio *serio = psmouse->ps2dev.serio; in psmouse_matches_pnp_id()
523 if (strncmp(serio->firmware_id, "PNP: ", 5)) in psmouse_matches_pnp_id()
526 fw_id_copy = kstrndup(&serio->firmware_id[5], in psmouse_matches_pnp_id()
527 sizeof(serio->firmware_id) - 5, in psmouse_matches_pnp_id()
549 struct ps2dev *ps2dev = &psmouse->ps2dev; in genius_detect()
560 return -ENODEV; in genius_detect()
563 __set_bit(BTN_MIDDLE, psmouse->dev->keybit); in genius_detect()
564 __set_bit(BTN_EXTRA, psmouse->dev->keybit); in genius_detect()
565 __set_bit(BTN_SIDE, psmouse->dev->keybit); in genius_detect()
566 __set_bit(REL_WHEEL, psmouse->dev->relbit); in genius_detect()
568 psmouse->vendor = "Genius"; in genius_detect()
569 psmouse->name = "Mouse"; in genius_detect()
570 psmouse->pktsize = 4; in genius_detect()
581 struct ps2dev *ps2dev = &psmouse->ps2dev; in intellimouse_detect()
593 return -ENODEV; in intellimouse_detect()
596 __set_bit(BTN_MIDDLE, psmouse->dev->keybit); in intellimouse_detect()
597 __set_bit(REL_WHEEL, psmouse->dev->relbit); in intellimouse_detect()
599 if (!psmouse->vendor) in intellimouse_detect()
600 psmouse->vendor = "Generic"; in intellimouse_detect()
601 if (!psmouse->name) in intellimouse_detect()
602 psmouse->name = "Wheel Mouse"; in intellimouse_detect()
603 psmouse->pktsize = 4; in intellimouse_detect()
614 struct ps2dev *ps2dev = &psmouse->ps2dev; in im_explorer_detect()
628 return -ENODEV; in im_explorer_detect()
639 __set_bit(BTN_MIDDLE, psmouse->dev->keybit); in im_explorer_detect()
640 __set_bit(REL_WHEEL, psmouse->dev->relbit); in im_explorer_detect()
641 __set_bit(REL_HWHEEL, psmouse->dev->relbit); in im_explorer_detect()
642 __set_bit(BTN_SIDE, psmouse->dev->keybit); in im_explorer_detect()
643 __set_bit(BTN_EXTRA, psmouse->dev->keybit); in im_explorer_detect()
645 if (!psmouse->vendor) in im_explorer_detect()
646 psmouse->vendor = "Generic"; in im_explorer_detect()
647 if (!psmouse->name) in im_explorer_detect()
648 psmouse->name = "Explorer Mouse"; in im_explorer_detect()
649 psmouse->pktsize = 4; in im_explorer_detect()
660 struct ps2dev *ps2dev = &psmouse->ps2dev; in thinking_detect()
676 return -ENODEV; in thinking_detect()
679 __set_bit(BTN_MIDDLE, psmouse->dev->keybit); in thinking_detect()
680 __set_bit(BTN_EXTRA, psmouse->dev->keybit); in thinking_detect()
682 psmouse->vendor = "Kensington"; in thinking_detect()
683 psmouse->name = "ThinkingMouse"; in thinking_detect()
695 if (!psmouse->vendor) in ps2bare_detect()
696 psmouse->vendor = "Generic"; in ps2bare_detect()
697 if (!psmouse->name) in ps2bare_detect()
698 psmouse->name = "Mouse"; in ps2bare_detect()
704 input_set_capability(psmouse->dev, EV_KEY, BTN_MIDDLE); in ps2bare_detect()
717 psmouse->vendor = "Cortron"; in cortron_detect()
718 psmouse->name = "PS/2 Trackball"; in cortron_detect()
720 __set_bit(BTN_MIDDLE, psmouse->dev->keybit); in cortron_detect()
721 __set_bit(BTN_SIDE, psmouse->dev->keybit); in cortron_detect()
795 .alias = "synaptics-relative",
804 .alias = "synaptics-smbus",
866 .alias = "elantech-smbus",
953 if ((strlen(p->name) == len && !strncmp(p->name, name, len)) || in psmouse_protocol_by_name()
954 (strlen(p->alias) == len && !strncmp(p->alias, name, len))) in psmouse_protocol_by_name()
967 struct input_dev *input_dev = psmouse->dev; in psmouse_apply_defaults()
969 bitmap_zero(input_dev->evbit, EV_CNT); in psmouse_apply_defaults()
970 bitmap_zero(input_dev->keybit, KEY_CNT); in psmouse_apply_defaults()
971 bitmap_zero(input_dev->relbit, REL_CNT); in psmouse_apply_defaults()
972 bitmap_zero(input_dev->absbit, ABS_CNT); in psmouse_apply_defaults()
973 bitmap_zero(input_dev->mscbit, MSC_CNT); in psmouse_apply_defaults()
981 __set_bit(INPUT_PROP_POINTER, input_dev->propbit); in psmouse_apply_defaults()
983 psmouse->protocol = &psmouse_protocols[0]; in psmouse_apply_defaults()
985 psmouse->set_rate = psmouse_set_rate; in psmouse_apply_defaults()
986 psmouse->set_resolution = psmouse_set_resolution; in psmouse_apply_defaults()
987 psmouse->set_scale = psmouse_set_scale; in psmouse_apply_defaults()
988 psmouse->poll = psmouse_poll; in psmouse_apply_defaults()
989 psmouse->protocol_handler = psmouse_process_byte; in psmouse_apply_defaults()
990 psmouse->pktsize = 3; in psmouse_apply_defaults()
991 psmouse->reconnect = NULL; in psmouse_apply_defaults()
992 psmouse->fast_reconnect = NULL; in psmouse_apply_defaults()
993 psmouse->disconnect = NULL; in psmouse_apply_defaults()
994 psmouse->cleanup = NULL; in psmouse_apply_defaults()
995 psmouse->pt_activate = NULL; in psmouse_apply_defaults()
996 psmouse->pt_deactivate = NULL; in psmouse_apply_defaults()
1003 if (psmouse->ps2dev.serio->id.type == SERIO_PS_PSTHRU && in psmouse_do_detect()
1025 if (!psmouse_do_detect(proto->detect, psmouse, proto->try_passthru, in psmouse_try_protocol()
1029 if (set_properties && proto->init && init_allowed) { in psmouse_try_protocol()
1030 if (proto->init(psmouse) != 0) { in psmouse_try_protocol()
1056 * Always check for focaltech, this is safe as it uses pnp-id in psmouse_extensions()
1101 * Synaptics protocol support is disabled in config - we need to in psmouse_extensions()
1143 * Try Cypress Trackpad. We must try it before Finger Sensing Pad in psmouse_extensions()
1144 * because Finger Sensing Pad probe upsets some modules of Cypress in psmouse_extensions()
1155 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS); in psmouse_extensions()
1199 * Try Finger Sensing Pad. We do it here because its probe upsets in psmouse_extensions()
1213 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS); in psmouse_extensions()
1253 struct ps2dev *ps2dev = &psmouse->ps2dev; in psmouse_probe()
1259 * case of an IntelliMouse in 4-byte mode or 0x04 for IM Explorer. in psmouse_probe()
1270 return -ENODEV; in psmouse_probe()
1279 ps2dev->serio->phys, error); in psmouse_probe()
1293 psmouse->set_rate(psmouse, psmouse->rate); in psmouse_initialize()
1294 psmouse->set_resolution(psmouse, psmouse->resolution); in psmouse_initialize()
1295 psmouse->set_scale(psmouse, PSMOUSE_SCALE11); in psmouse_initialize()
1304 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE)) { in psmouse_activate()
1306 psmouse->ps2dev.serio->phys); in psmouse_activate()
1307 return -1; in psmouse_activate()
1322 error = ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE); in psmouse_deactivate()
1325 psmouse->ps2dev.serio->phys, error); in psmouse_deactivate()
1334 * psmouse_resync() attempts to re-validate current protocol.
1340 struct serio *serio = psmouse->ps2dev.serio; in psmouse_resync()
1347 if (psmouse->state != PSMOUSE_RESYNCING) in psmouse_resync()
1350 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { in psmouse_resync()
1351 parent = serio_get_drvdata(serio->parent); in psmouse_resync()
1365 psmouse->num_resyncs++; in psmouse_resync()
1367 if (ps2_sendbyte(&psmouse->ps2dev, PSMOUSE_CMD_DISABLE, 20)) { in psmouse_resync()
1368 if (psmouse->num_resyncs < 3 || psmouse->acks_disable_command) in psmouse_resync()
1371 psmouse->acks_disable_command = true; in psmouse_resync()
1375 * psmouse->pktsize and ps2_command will fail. We do not expect and in psmouse_resync()
1381 if (psmouse->poll(psmouse)) in psmouse_resync()
1385 for (i = 0; i < psmouse->pktsize; i++) { in psmouse_resync()
1386 psmouse->pktcnt++; in psmouse_resync()
1387 rc = psmouse->protocol_handler(psmouse); in psmouse_resync()
1403 if (!ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE)) { in psmouse_resync()
1411 psmouse_warn(psmouse, "failed to re-enable mouse on %s\n", in psmouse_resync()
1412 psmouse->ps2dev.serio->phys); in psmouse_resync()
1431 * psmouse_cleanup() resets the mouse into power-on state.
1440 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { in psmouse_cleanup()
1441 parent = serio_get_drvdata(serio->parent); in psmouse_cleanup()
1450 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE)) in psmouse_cleanup()
1452 psmouse->ps2dev.serio->phys); in psmouse_cleanup()
1454 if (psmouse->cleanup) in psmouse_cleanup()
1455 psmouse->cleanup(psmouse); in psmouse_cleanup()
1460 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS); in psmouse_cleanup()
1466 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE); in psmouse_cleanup()
1469 if (parent->pt_deactivate) in psmouse_cleanup()
1470 parent->pt_deactivate(parent); in psmouse_cleanup()
1486 sysfs_remove_group(&serio->dev.kobj, &psmouse_attribute_group); in psmouse_disconnect()
1497 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { in psmouse_disconnect()
1498 parent = serio_get_drvdata(serio->parent); in psmouse_disconnect()
1502 if (psmouse->disconnect) in psmouse_disconnect()
1503 psmouse->disconnect(psmouse); in psmouse_disconnect()
1505 if (parent && parent->pt_deactivate) in psmouse_disconnect()
1506 parent->pt_deactivate(parent); in psmouse_disconnect()
1513 if (psmouse->dev) in psmouse_disconnect()
1514 input_unregister_device(psmouse->dev); in psmouse_disconnect()
1528 struct input_dev *input_dev = psmouse->dev; in psmouse_switch_protocol()
1531 input_dev->dev.parent = &psmouse->ps2dev.serio->dev; in psmouse_switch_protocol()
1533 if (proto && (proto->detect || proto->init)) { in psmouse_switch_protocol()
1536 if (proto->detect && proto->detect(psmouse, true) < 0) in psmouse_switch_protocol()
1537 return -1; in psmouse_switch_protocol()
1539 if (proto->init && proto->init(psmouse) < 0) in psmouse_switch_protocol()
1540 return -1; in psmouse_switch_protocol()
1548 psmouse->protocol = selected_proto; in psmouse_switch_protocol()
1552 * device in hopes to detect protocol reset - we won't get less in psmouse_switch_protocol()
1555 if (psmouse->pktsize == 3) in psmouse_switch_protocol()
1556 psmouse->resync_time = 0; in psmouse_switch_protocol()
1559 * Some smart KVMs fake response to POLL command returning just in psmouse_switch_protocol()
1564 if (psmouse->resync_time && psmouse->poll(psmouse)) in psmouse_switch_protocol()
1565 psmouse->resync_time = 0; in psmouse_switch_protocol()
1567 snprintf(psmouse->devname, sizeof(psmouse->devname), "%s %s %s", in psmouse_switch_protocol()
1568 selected_proto->name, psmouse->vendor, psmouse->name); in psmouse_switch_protocol()
1570 input_dev->name = psmouse->devname; in psmouse_switch_protocol()
1571 input_dev->phys = psmouse->phys; in psmouse_switch_protocol()
1572 input_dev->id.bustype = BUS_I8042; in psmouse_switch_protocol()
1573 input_dev->id.vendor = 0x0002; in psmouse_switch_protocol()
1574 input_dev->id.product = psmouse->protocol->type; in psmouse_switch_protocol()
1575 input_dev->id.version = psmouse->model; in psmouse_switch_protocol()
1588 int retval = 0, error = -ENOMEM; in psmouse_connect()
1593 * If this is a pass-through port deactivate parent so the device in psmouse_connect()
1596 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { in psmouse_connect()
1597 parent = serio_get_drvdata(serio->parent); in psmouse_connect()
1606 ps2_init(&psmouse->ps2dev, serio); in psmouse_connect()
1607 INIT_DELAYED_WORK(&psmouse->resync_work, psmouse_resync); in psmouse_connect()
1608 psmouse->dev = input_dev; in psmouse_connect()
1609 snprintf(psmouse->phys, sizeof(psmouse->phys), "%s/input0", serio->phys); in psmouse_connect()
1620 if (serio->id.type == SERIO_PS_PSTHRU) in psmouse_connect()
1624 error = -ENODEV; in psmouse_connect()
1628 psmouse->rate = psmouse_rate; in psmouse_connect()
1629 psmouse->resolution = psmouse_resolution; in psmouse_connect()
1630 psmouse->resetafter = psmouse_resetafter; in psmouse_connect()
1631 psmouse->resync_time = parent ? 0 : psmouse_resync_time; in psmouse_connect()
1632 psmouse->smartscroll = psmouse_smartscroll; in psmouse_connect()
1636 if (!psmouse->protocol->smbus_companion) { in psmouse_connect()
1646 psmouse->dev = input_dev = NULL; in psmouse_connect()
1649 if (parent && parent->pt_activate) in psmouse_connect()
1650 parent->pt_activate(parent); in psmouse_connect()
1652 error = sysfs_create_group(&serio->dev.kobj, &psmouse_attribute_group); in psmouse_connect()
1660 if (!psmouse->protocol->smbus_companion) in psmouse_connect()
1664 /* If this is a pass-through port the parent needs to be re-activated */ in psmouse_connect()
1672 if (parent && parent->pt_deactivate) in psmouse_connect()
1673 parent->pt_deactivate(parent); in psmouse_connect()
1679 if (psmouse->disconnect) in psmouse_connect()
1680 psmouse->disconnect(psmouse); in psmouse_connect()
1700 int rc = -1; in __psmouse_reconnect()
1705 reconnect_handler = psmouse->fast_reconnect; in __psmouse_reconnect()
1707 rc = -ENOENT; in __psmouse_reconnect()
1711 reconnect_handler = psmouse->reconnect; in __psmouse_reconnect()
1714 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { in __psmouse_reconnect()
1715 parent = serio_get_drvdata(serio->parent); in __psmouse_reconnect()
1731 if (psmouse->protocol->type != type) in __psmouse_reconnect()
1739 if (!psmouse->protocol->smbus_companion) { in __psmouse_reconnect()
1744 if (parent && parent->pt_activate) in __psmouse_reconnect()
1745 parent->pt_activate(parent); in __psmouse_reconnect()
1751 if (!psmouse->protocol->smbus_companion) in __psmouse_reconnect()
1757 /* If this is a pass-through port the parent waits to be activated */ in __psmouse_reconnect()
1815 if (psmouse->protocol->smbus_companion && in psmouse_attr_show_helper()
1817 return -ENOENT; in psmouse_attr_show_helper()
1819 return attr->show(psmouse, attr->data, buf); in psmouse_attr_show_helper()
1836 if (psmouse->protocol->smbus_companion && in psmouse_attr_set_helper()
1838 retval = -ENOENT; in psmouse_attr_set_helper()
1842 if (attr->protect) { in psmouse_attr_set_helper()
1843 if (psmouse->state == PSMOUSE_IGNORE) { in psmouse_attr_set_helper()
1844 retval = -ENODEV; in psmouse_attr_set_helper()
1848 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { in psmouse_attr_set_helper()
1849 parent = serio_get_drvdata(serio->parent); in psmouse_attr_set_helper()
1853 if (!psmouse->protocol->smbus_companion) in psmouse_attr_set_helper()
1857 retval = attr->set(psmouse, attr->data, buf, count); in psmouse_attr_set_helper()
1859 if (attr->protect) { in psmouse_attr_set_helper()
1860 if (retval != -ENODEV && !psmouse->protocol->smbus_companion) in psmouse_attr_set_helper()
1897 return sprintf(buf, "%s\n", psmouse->protocol->name); in psmouse_attr_show_protocol()
1902 struct serio *serio = psmouse->ps2dev.serio; in psmouse_attr_set_protocol()
1911 return -EINVAL; in psmouse_attr_set_protocol()
1913 if (psmouse->protocol == proto) in psmouse_attr_set_protocol()
1918 return -ENOMEM; in psmouse_attr_set_protocol()
1920 while (!list_empty(&serio->children)) { in psmouse_attr_set_protocol()
1925 return -EIO; in psmouse_attr_set_protocol()
1932 if (serio->drv != &psmouse_drv) { in psmouse_attr_set_protocol()
1934 return -ENODEV; in psmouse_attr_set_protocol()
1937 if (psmouse->protocol == proto) { in psmouse_attr_set_protocol()
1943 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { in psmouse_attr_set_protocol()
1944 parent = serio_get_drvdata(serio->parent); in psmouse_attr_set_protocol()
1945 if (parent->pt_deactivate) in psmouse_attr_set_protocol()
1946 parent->pt_deactivate(parent); in psmouse_attr_set_protocol()
1949 old_dev = psmouse->dev; in psmouse_attr_set_protocol()
1950 old_proto = psmouse->protocol; in psmouse_attr_set_protocol()
1952 if (psmouse->disconnect) in psmouse_attr_set_protocol()
1953 psmouse->disconnect(psmouse); in psmouse_attr_set_protocol()
1957 psmouse->dev = new_dev; in psmouse_attr_set_protocol()
1969 if (psmouse->protocol->smbus_companion) { in psmouse_attr_set_protocol()
1970 input_free_device(psmouse->dev); in psmouse_attr_set_protocol()
1971 psmouse->dev = NULL; in psmouse_attr_set_protocol()
1973 error = input_register_device(psmouse->dev); in psmouse_attr_set_protocol()
1975 if (psmouse->disconnect) in psmouse_attr_set_protocol()
1976 psmouse->disconnect(psmouse); in psmouse_attr_set_protocol()
1980 psmouse->dev = old_dev; in psmouse_attr_set_protocol()
1993 if (parent && parent->pt_activate) in psmouse_attr_set_protocol()
1994 parent->pt_activate(parent); in psmouse_attr_set_protocol()
2008 psmouse->set_rate(psmouse, value); in psmouse_attr_set_rate()
2021 psmouse->set_resolution(psmouse, value); in psmouse_attr_set_resolution()
2031 return -EINVAL; in psmouse_set_maxproto()
2035 if (!proto || !proto->maxproto) in psmouse_set_maxproto()
2036 return -EINVAL; in psmouse_set_maxproto()
2038 *((unsigned int *)kp->arg) = proto->type; in psmouse_set_maxproto()
2045 int type = *((unsigned int *)kp->arg); in psmouse_get_maxproto()
2047 return sprintf(buffer, "%s\n", psmouse_protocol_by_type(type)->name); in psmouse_get_maxproto()
2065 err = -ENOMEM; in psmouse_init()