Lines Matching refs:psmouse
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),
147 psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse) in psmouse_process_byte() argument
149 struct input_dev *dev = psmouse->dev; in psmouse_process_byte()
150 u8 *packet = psmouse->packet; in psmouse_process_byte()
153 if (psmouse->pktcnt < psmouse->pktsize) in psmouse_process_byte()
158 switch (psmouse->protocol->type) { in psmouse_process_byte()
229 packet[0] |= psmouse->extra_buttons; in psmouse_process_byte()
237 void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work, in psmouse_queue_work() argument
246 static inline void __psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state) in __psmouse_set_state() argument
248 psmouse->state = new_state; in __psmouse_set_state()
249 psmouse->pktcnt = psmouse->out_of_sync_cnt = 0; in __psmouse_set_state()
250 psmouse->ps2dev.flags = 0; in __psmouse_set_state()
251 psmouse->last = jiffies; in __psmouse_set_state()
259 void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state) in psmouse_set_state() argument
261 serio_pause_rx(psmouse->ps2dev.serio); in psmouse_set_state()
262 __psmouse_set_state(psmouse, new_state); in psmouse_set_state()
263 serio_continue_rx(psmouse->ps2dev.serio); in psmouse_set_state()
270 static int psmouse_handle_byte(struct psmouse *psmouse) in psmouse_handle_byte() argument
272 psmouse_ret_t rc = psmouse->protocol_handler(psmouse); in psmouse_handle_byte()
276 if (psmouse->state == PSMOUSE_ACTIVATED) { in psmouse_handle_byte()
277 psmouse_warn(psmouse, in psmouse_handle_byte()
279 psmouse->name, psmouse->phys, in psmouse_handle_byte()
280 psmouse->pktcnt); in psmouse_handle_byte()
281 if (++psmouse->out_of_sync_cnt == psmouse->resetafter) { in psmouse_handle_byte()
282 __psmouse_set_state(psmouse, PSMOUSE_IGNORE); in psmouse_handle_byte()
283 psmouse_notice(psmouse, in psmouse_handle_byte()
285 serio_reconnect(psmouse->ps2dev.serio); in psmouse_handle_byte()
289 psmouse->pktcnt = 0; in psmouse_handle_byte()
293 psmouse->pktcnt = 0; in psmouse_handle_byte()
294 if (psmouse->out_of_sync_cnt) { in psmouse_handle_byte()
295 psmouse->out_of_sync_cnt = 0; in psmouse_handle_byte()
296 psmouse_notice(psmouse, in psmouse_handle_byte()
298 psmouse->name, psmouse->phys); in psmouse_handle_byte()
308 static void psmouse_handle_oob_data(struct psmouse *psmouse, u8 data) in psmouse_handle_oob_data() argument
310 switch (psmouse->oob_data_type) { in psmouse_handle_oob_data()
312 psmouse->oob_data_type = data; in psmouse_handle_oob_data()
316 psmouse_report_standard_buttons(psmouse->dev, data); in psmouse_handle_oob_data()
317 input_sync(psmouse->dev); in psmouse_handle_oob_data()
319 psmouse->extra_buttons = data; in psmouse_handle_oob_data()
320 psmouse->oob_data_type = PSMOUSE_OOB_NONE; in psmouse_handle_oob_data()
324 psmouse_warn(psmouse, in psmouse_handle_oob_data()
326 psmouse->oob_data_type); in psmouse_handle_oob_data()
327 psmouse->oob_data_type = PSMOUSE_OOB_NONE; in psmouse_handle_oob_data()
339 struct psmouse *psmouse = serio_get_drvdata(serio); in psmouse_interrupt() local
341 if (psmouse->state == PSMOUSE_IGNORE) in psmouse_interrupt()
346 !psmouse->protocol->ignore_parity))) { in psmouse_interrupt()
348 if (psmouse->state == PSMOUSE_ACTIVATED) in psmouse_interrupt()
349 psmouse_warn(psmouse, in psmouse_interrupt()
353 ps2_cmd_aborted(&psmouse->ps2dev); in psmouse_interrupt()
358 psmouse_handle_oob_data(psmouse, data); in psmouse_interrupt()
362 if (unlikely(psmouse->ps2dev.flags & PS2_FLAG_ACK)) in psmouse_interrupt()
363 if (ps2_handle_ack(&psmouse->ps2dev, data)) in psmouse_interrupt()
366 if (unlikely(psmouse->ps2dev.flags & PS2_FLAG_CMD)) in psmouse_interrupt()
367 if (ps2_handle_response(&psmouse->ps2dev, data)) in psmouse_interrupt()
372 if (psmouse->state <= PSMOUSE_RESYNCING) in psmouse_interrupt()
375 if (psmouse->state == PSMOUSE_ACTIVATED && in psmouse_interrupt()
376 psmouse->pktcnt && time_after(jiffies, psmouse->last + HZ/2)) { in psmouse_interrupt()
377 psmouse_info(psmouse, "%s at %s lost synchronization, throwing %d bytes away.\n", in psmouse_interrupt()
378 psmouse->name, psmouse->phys, psmouse->pktcnt); in psmouse_interrupt()
379 psmouse->badbyte = psmouse->packet[0]; in psmouse_interrupt()
380 __psmouse_set_state(psmouse, PSMOUSE_RESYNCING); in psmouse_interrupt()
381 psmouse_queue_work(psmouse, &psmouse->resync_work, 0); in psmouse_interrupt()
385 psmouse->packet[psmouse->pktcnt++] = data; in psmouse_interrupt()
388 if (unlikely(psmouse->packet[0] == PSMOUSE_RET_BAT && psmouse->pktcnt <= 2)) { in psmouse_interrupt()
389 if (psmouse->pktcnt == 1) { in psmouse_interrupt()
390 psmouse->last = jiffies; in psmouse_interrupt()
394 if (psmouse->packet[1] == PSMOUSE_RET_ID || in psmouse_interrupt()
395 (psmouse->protocol->type == PSMOUSE_HGPK && in psmouse_interrupt()
396 psmouse->packet[1] == PSMOUSE_RET_BAT)) { in psmouse_interrupt()
397 __psmouse_set_state(psmouse, PSMOUSE_IGNORE); in psmouse_interrupt()
403 psmouse->pktcnt = 1; in psmouse_interrupt()
404 if (psmouse_handle_byte(psmouse)) in psmouse_interrupt()
407 psmouse->packet[psmouse->pktcnt++] = data; in psmouse_interrupt()
414 if (psmouse->state == PSMOUSE_ACTIVATED && in psmouse_interrupt()
415 psmouse->pktcnt == 1 && psmouse->resync_time && in psmouse_interrupt()
416 time_after(jiffies, psmouse->last + psmouse->resync_time * HZ)) { in psmouse_interrupt()
417 psmouse->badbyte = psmouse->packet[0]; in psmouse_interrupt()
418 __psmouse_set_state(psmouse, PSMOUSE_RESYNCING); in psmouse_interrupt()
419 psmouse_queue_work(psmouse, &psmouse->resync_work, 0); in psmouse_interrupt()
423 psmouse->last = jiffies; in psmouse_interrupt()
424 psmouse_handle_byte(psmouse); in psmouse_interrupt()
433 int psmouse_reset(struct psmouse *psmouse) in psmouse_reset() argument
438 error = ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_RESET_BAT); in psmouse_reset()
451 void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution) in psmouse_set_resolution() argument
460 ps2_command(&psmouse->ps2dev, &p, PSMOUSE_CMD_SETRES); in psmouse_set_resolution()
461 psmouse->resolution = 25 << p; in psmouse_set_resolution()
467 static void psmouse_set_rate(struct psmouse *psmouse, unsigned int rate) in psmouse_set_rate() argument
476 ps2_command(&psmouse->ps2dev, &r, PSMOUSE_CMD_SETRATE); in psmouse_set_rate()
477 psmouse->rate = r; in psmouse_set_rate()
483 static void psmouse_set_scale(struct psmouse *psmouse, enum psmouse_scale scale) in psmouse_set_scale() argument
485 ps2_command(&psmouse->ps2dev, NULL, in psmouse_set_scale()
493 static int psmouse_poll(struct psmouse *psmouse) in psmouse_poll() argument
495 return ps2_command(&psmouse->ps2dev, psmouse->packet, in psmouse_poll()
496 PSMOUSE_CMD_POLL | (psmouse->pktsize << 8)); in psmouse_poll()
513 bool psmouse_matches_pnp_id(struct psmouse *psmouse, const char * const ids[]) in psmouse_matches_pnp_id() argument
515 struct serio *serio = psmouse->ps2dev.serio; in psmouse_matches_pnp_id()
543 static int genius_detect(struct psmouse *psmouse, bool set_properties) in genius_detect() argument
545 struct ps2dev *ps2dev = &psmouse->ps2dev; in genius_detect()
559 __set_bit(BTN_MIDDLE, psmouse->dev->keybit); in genius_detect()
560 __set_bit(BTN_EXTRA, psmouse->dev->keybit); in genius_detect()
561 __set_bit(BTN_SIDE, psmouse->dev->keybit); in genius_detect()
562 __set_bit(REL_WHEEL, psmouse->dev->relbit); in genius_detect()
564 psmouse->vendor = "Genius"; in genius_detect()
565 psmouse->name = "Mouse"; in genius_detect()
566 psmouse->pktsize = 4; in genius_detect()
575 static int intellimouse_detect(struct psmouse *psmouse, bool set_properties) in intellimouse_detect() argument
577 struct ps2dev *ps2dev = &psmouse->ps2dev; in intellimouse_detect()
592 __set_bit(BTN_MIDDLE, psmouse->dev->keybit); in intellimouse_detect()
593 __set_bit(REL_WHEEL, psmouse->dev->relbit); in intellimouse_detect()
595 if (!psmouse->vendor) in intellimouse_detect()
596 psmouse->vendor = "Generic"; in intellimouse_detect()
597 if (!psmouse->name) in intellimouse_detect()
598 psmouse->name = "Wheel Mouse"; in intellimouse_detect()
599 psmouse->pktsize = 4; in intellimouse_detect()
608 static int im_explorer_detect(struct psmouse *psmouse, bool set_properties) in im_explorer_detect() argument
610 struct ps2dev *ps2dev = &psmouse->ps2dev; in im_explorer_detect()
613 intellimouse_detect(psmouse, 0); in im_explorer_detect()
635 __set_bit(BTN_MIDDLE, psmouse->dev->keybit); in im_explorer_detect()
636 __set_bit(REL_WHEEL, psmouse->dev->relbit); in im_explorer_detect()
637 __set_bit(REL_HWHEEL, psmouse->dev->relbit); in im_explorer_detect()
638 __set_bit(BTN_SIDE, psmouse->dev->keybit); in im_explorer_detect()
639 __set_bit(BTN_EXTRA, psmouse->dev->keybit); in im_explorer_detect()
641 if (!psmouse->vendor) in im_explorer_detect()
642 psmouse->vendor = "Generic"; in im_explorer_detect()
643 if (!psmouse->name) in im_explorer_detect()
644 psmouse->name = "Explorer Mouse"; in im_explorer_detect()
645 psmouse->pktsize = 4; in im_explorer_detect()
654 static int thinking_detect(struct psmouse *psmouse, bool set_properties) in thinking_detect() argument
656 struct ps2dev *ps2dev = &psmouse->ps2dev; in thinking_detect()
675 __set_bit(BTN_MIDDLE, psmouse->dev->keybit); in thinking_detect()
676 __set_bit(BTN_EXTRA, psmouse->dev->keybit); in thinking_detect()
678 psmouse->vendor = "Kensington"; in thinking_detect()
679 psmouse->name = "ThinkingMouse"; in thinking_detect()
688 static int ps2bare_detect(struct psmouse *psmouse, bool set_properties) in ps2bare_detect() argument
691 if (!psmouse->vendor) in ps2bare_detect()
692 psmouse->vendor = "Generic"; in ps2bare_detect()
693 if (!psmouse->name) in ps2bare_detect()
694 psmouse->name = "Mouse"; in ps2bare_detect()
700 input_set_capability(psmouse->dev, EV_KEY, BTN_MIDDLE); in ps2bare_detect()
710 static int cortron_detect(struct psmouse *psmouse, bool set_properties) in cortron_detect() argument
713 psmouse->vendor = "Cortron"; in cortron_detect()
714 psmouse->name = "PS/2 Trackball"; in cortron_detect()
716 __set_bit(BTN_MIDDLE, psmouse->dev->keybit); in cortron_detect()
717 __set_bit(BTN_SIDE, psmouse->dev->keybit); in cortron_detect()
961 static void psmouse_apply_defaults(struct psmouse *psmouse) in psmouse_apply_defaults() argument
963 struct input_dev *input_dev = psmouse->dev; in psmouse_apply_defaults()
979 psmouse->protocol = &psmouse_protocols[0]; in psmouse_apply_defaults()
981 psmouse->set_rate = psmouse_set_rate; in psmouse_apply_defaults()
982 psmouse->set_resolution = psmouse_set_resolution; in psmouse_apply_defaults()
983 psmouse->set_scale = psmouse_set_scale; in psmouse_apply_defaults()
984 psmouse->poll = psmouse_poll; in psmouse_apply_defaults()
985 psmouse->protocol_handler = psmouse_process_byte; in psmouse_apply_defaults()
986 psmouse->pktsize = 3; in psmouse_apply_defaults()
987 psmouse->reconnect = NULL; in psmouse_apply_defaults()
988 psmouse->fast_reconnect = NULL; in psmouse_apply_defaults()
989 psmouse->disconnect = NULL; in psmouse_apply_defaults()
990 psmouse->cleanup = NULL; in psmouse_apply_defaults()
991 psmouse->pt_activate = NULL; in psmouse_apply_defaults()
992 psmouse->pt_deactivate = NULL; in psmouse_apply_defaults()
995 static bool psmouse_do_detect(int (*detect)(struct psmouse *, bool), in psmouse_do_detect() argument
996 struct psmouse *psmouse, bool allow_passthrough, in psmouse_do_detect() argument
999 if (psmouse->ps2dev.serio->id.type == SERIO_PS_PSTHRU && in psmouse_do_detect()
1005 psmouse_apply_defaults(psmouse); in psmouse_do_detect()
1007 return detect(psmouse, set_properties) == 0; in psmouse_do_detect()
1010 static bool psmouse_try_protocol(struct psmouse *psmouse, in psmouse_try_protocol() argument
1021 if (!psmouse_do_detect(proto->detect, psmouse, proto->try_passthru, in psmouse_try_protocol()
1026 if (proto->init(psmouse) != 0) { in psmouse_try_protocol()
1045 static int psmouse_extensions(struct psmouse *psmouse, in psmouse_extensions() argument
1056 psmouse, false, set_properties)) { in psmouse_extensions()
1059 (!set_properties || focaltech_init(psmouse) == 0)) { in psmouse_extensions()
1077 if (psmouse_try_protocol(psmouse, PSMOUSE_LIFEBOOK, &max_proto, in psmouse_extensions()
1081 if (psmouse_try_protocol(psmouse, PSMOUSE_VMMOUSE, &max_proto, in psmouse_extensions()
1090 psmouse_try_protocol(psmouse, PSMOUSE_THINKPS, &max_proto, in psmouse_extensions()
1103 psmouse, false, set_properties)) { in psmouse_extensions()
1117 ret = synaptics_init(psmouse); in psmouse_extensions()
1135 synaptics_reset(psmouse); in psmouse_extensions()
1144 psmouse_try_protocol(psmouse, PSMOUSE_CYPRESS, &max_proto, in psmouse_extensions()
1151 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS); in psmouse_extensions()
1152 if (psmouse_try_protocol(psmouse, PSMOUSE_ALPS, in psmouse_extensions()
1159 psmouse_try_protocol(psmouse, PSMOUSE_HGPK, &max_proto, in psmouse_extensions()
1166 psmouse_try_protocol(psmouse, PSMOUSE_ELANTECH, in psmouse_extensions()
1171 ret = elantech_init(psmouse); in psmouse_extensions()
1177 if (psmouse_try_protocol(psmouse, PSMOUSE_GENPS, in psmouse_extensions()
1181 if (psmouse_try_protocol(psmouse, PSMOUSE_PS2PP, in psmouse_extensions()
1185 if (psmouse_try_protocol(psmouse, PSMOUSE_TRACKPOINT, in psmouse_extensions()
1189 if (psmouse_try_protocol(psmouse, PSMOUSE_TOUCHKIT_PS2, in psmouse_extensions()
1199 psmouse_try_protocol(psmouse, PSMOUSE_FSP, in psmouse_extensions()
1209 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS); in psmouse_extensions()
1210 psmouse_reset(psmouse); in psmouse_extensions()
1213 psmouse_try_protocol(psmouse, PSMOUSE_IMEX, in psmouse_extensions()
1219 psmouse_try_protocol(psmouse, PSMOUSE_IMPS, in psmouse_extensions()
1228 psmouse_try_protocol(psmouse, PSMOUSE_PS2, in psmouse_extensions()
1238 psmouse_reset(psmouse); in psmouse_extensions()
1247 static int psmouse_probe(struct psmouse *psmouse) in psmouse_probe() argument
1249 struct ps2dev *ps2dev = &psmouse->ps2dev; in psmouse_probe()
1274 psmouse_warn(psmouse, "Failed to reset mouse on %s: %d\n", in psmouse_probe()
1283 static void psmouse_initialize(struct psmouse *psmouse) in psmouse_initialize() argument
1289 psmouse->set_rate(psmouse, psmouse->rate); in psmouse_initialize()
1290 psmouse->set_resolution(psmouse, psmouse->resolution); in psmouse_initialize()
1291 psmouse->set_scale(psmouse, PSMOUSE_SCALE11); in psmouse_initialize()
1298 int psmouse_activate(struct psmouse *psmouse) in psmouse_activate() argument
1300 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE)) { in psmouse_activate()
1301 psmouse_warn(psmouse, "Failed to enable mouse on %s\n", in psmouse_activate()
1302 psmouse->ps2dev.serio->phys); in psmouse_activate()
1306 psmouse_set_state(psmouse, PSMOUSE_ACTIVATED); in psmouse_activate()
1314 int psmouse_deactivate(struct psmouse *psmouse) in psmouse_deactivate() argument
1318 error = ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE); in psmouse_deactivate()
1320 psmouse_warn(psmouse, "Failed to deactivate mouse on %s: %d\n", in psmouse_deactivate()
1321 psmouse->ps2dev.serio->phys, error); in psmouse_deactivate()
1325 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); in psmouse_deactivate()
1334 struct psmouse *parent = NULL, *psmouse = in psmouse_resync() local
1335 container_of(work, struct psmouse, resync_work.work); in psmouse_resync()
1336 struct serio *serio = psmouse->ps2dev.serio; in psmouse_resync()
1343 if (psmouse->state != PSMOUSE_RESYNCING) in psmouse_resync()
1361 psmouse->num_resyncs++; in psmouse_resync()
1363 if (ps2_sendbyte(&psmouse->ps2dev, PSMOUSE_CMD_DISABLE, 20)) { in psmouse_resync()
1364 if (psmouse->num_resyncs < 3 || psmouse->acks_disable_command) in psmouse_resync()
1367 psmouse->acks_disable_command = true; in psmouse_resync()
1377 if (psmouse->poll(psmouse)) in psmouse_resync()
1380 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); in psmouse_resync()
1381 for (i = 0; i < psmouse->pktsize; i++) { in psmouse_resync()
1382 psmouse->pktcnt++; in psmouse_resync()
1383 rc = psmouse->protocol_handler(psmouse); in psmouse_resync()
1389 psmouse_set_state(psmouse, PSMOUSE_RESYNCING); in psmouse_resync()
1399 if (!ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE)) { in psmouse_resync()
1407 psmouse_warn(psmouse, "failed to re-enable mouse on %s\n", in psmouse_resync()
1408 psmouse->ps2dev.serio->phys); in psmouse_resync()
1413 psmouse_set_state(psmouse, PSMOUSE_IGNORE); in psmouse_resync()
1414 psmouse_info(psmouse, in psmouse_resync()
1418 psmouse_set_state(psmouse, PSMOUSE_ACTIVATED); in psmouse_resync()
1431 struct psmouse *psmouse = serio_get_drvdata(serio); in psmouse_cleanup() local
1432 struct psmouse *parent = NULL; in psmouse_cleanup()
1441 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); in psmouse_cleanup()
1446 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE)) in psmouse_cleanup()
1447 psmouse_warn(psmouse, "Failed to disable mouse on %s\n", in psmouse_cleanup()
1448 psmouse->ps2dev.serio->phys); in psmouse_cleanup()
1450 if (psmouse->cleanup) in psmouse_cleanup()
1451 psmouse->cleanup(psmouse); in psmouse_cleanup()
1456 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS); in psmouse_cleanup()
1462 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE); in psmouse_cleanup()
1479 struct psmouse *psmouse = serio_get_drvdata(serio); in psmouse_disconnect() local
1480 struct psmouse *parent = NULL; in psmouse_disconnect()
1484 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); in psmouse_disconnect()
1496 if (psmouse->disconnect) in psmouse_disconnect()
1497 psmouse->disconnect(psmouse); in psmouse_disconnect()
1502 psmouse_set_state(psmouse, PSMOUSE_IGNORE); in psmouse_disconnect()
1507 if (psmouse->dev) in psmouse_disconnect()
1508 input_unregister_device(psmouse->dev); in psmouse_disconnect()
1510 kfree(psmouse); in psmouse_disconnect()
1518 static int psmouse_switch_protocol(struct psmouse *psmouse, in psmouse_switch_protocol() argument
1522 struct input_dev *input_dev = psmouse->dev; in psmouse_switch_protocol()
1525 input_dev->dev.parent = &psmouse->ps2dev.serio->dev; in psmouse_switch_protocol()
1528 psmouse_apply_defaults(psmouse); in psmouse_switch_protocol()
1530 if (proto->detect && proto->detect(psmouse, true) < 0) in psmouse_switch_protocol()
1533 if (proto->init && proto->init(psmouse) < 0) in psmouse_switch_protocol()
1538 type = psmouse_extensions(psmouse, psmouse_max_proto, true); in psmouse_switch_protocol()
1542 psmouse->protocol = selected_proto; in psmouse_switch_protocol()
1549 if (psmouse->pktsize == 3) in psmouse_switch_protocol()
1550 psmouse->resync_time = 0; in psmouse_switch_protocol()
1558 if (psmouse->resync_time && psmouse->poll(psmouse)) in psmouse_switch_protocol()
1559 psmouse->resync_time = 0; in psmouse_switch_protocol()
1561 snprintf(psmouse->devname, sizeof(psmouse->devname), "%s %s %s", in psmouse_switch_protocol()
1562 selected_proto->name, psmouse->vendor, psmouse->name); in psmouse_switch_protocol()
1564 input_dev->name = psmouse->devname; in psmouse_switch_protocol()
1565 input_dev->phys = psmouse->phys; in psmouse_switch_protocol()
1568 input_dev->id.product = psmouse->protocol->type; in psmouse_switch_protocol()
1569 input_dev->id.version = psmouse->model; in psmouse_switch_protocol()
1580 struct psmouse *psmouse, *parent = NULL; in psmouse_connect() local
1595 psmouse = kzalloc(sizeof(struct psmouse), GFP_KERNEL); in psmouse_connect()
1597 if (!psmouse || !input_dev) in psmouse_connect()
1600 ps2_init(&psmouse->ps2dev, serio); in psmouse_connect()
1601 INIT_DELAYED_WORK(&psmouse->resync_work, psmouse_resync); in psmouse_connect()
1602 psmouse->dev = input_dev; in psmouse_connect()
1603 snprintf(psmouse->phys, sizeof(psmouse->phys), "%s/input0", serio->phys); in psmouse_connect()
1605 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); in psmouse_connect()
1607 serio_set_drvdata(serio, psmouse); in psmouse_connect()
1617 if (psmouse_probe(psmouse) < 0) { in psmouse_connect()
1622 psmouse->rate = psmouse_rate; in psmouse_connect()
1623 psmouse->resolution = psmouse_resolution; in psmouse_connect()
1624 psmouse->resetafter = psmouse_resetafter; in psmouse_connect()
1625 psmouse->resync_time = parent ? 0 : psmouse_resync_time; in psmouse_connect()
1626 psmouse->smartscroll = psmouse_smartscroll; in psmouse_connect()
1628 psmouse_switch_protocol(psmouse, NULL); in psmouse_connect()
1630 if (!psmouse->protocol->smbus_companion) { in psmouse_connect()
1631 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); in psmouse_connect()
1632 psmouse_initialize(psmouse); in psmouse_connect()
1640 psmouse->dev = input_dev = NULL; in psmouse_connect()
1650 if (!psmouse->protocol->smbus_companion) in psmouse_connect()
1651 psmouse_activate(psmouse); in psmouse_connect()
1662 if (psmouse->disconnect) in psmouse_connect()
1663 psmouse->disconnect(psmouse); in psmouse_connect()
1664 psmouse_set_state(psmouse, PSMOUSE_IGNORE); in psmouse_connect()
1671 kfree(psmouse); in psmouse_connect()
1679 struct psmouse *psmouse = serio_get_drvdata(serio); in __psmouse_reconnect() local
1680 struct psmouse *parent = NULL; in __psmouse_reconnect()
1681 int (*reconnect_handler)(struct psmouse *); in __psmouse_reconnect()
1688 reconnect_handler = psmouse->fast_reconnect; in __psmouse_reconnect()
1694 reconnect_handler = psmouse->reconnect; in __psmouse_reconnect()
1702 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); in __psmouse_reconnect()
1705 if (reconnect_handler(psmouse)) in __psmouse_reconnect()
1708 psmouse_reset(psmouse); in __psmouse_reconnect()
1710 if (psmouse_probe(psmouse) < 0) in __psmouse_reconnect()
1713 type = psmouse_extensions(psmouse, psmouse_max_proto, false); in __psmouse_reconnect()
1714 if (psmouse->protocol->type != type) in __psmouse_reconnect()
1722 if (!psmouse->protocol->smbus_companion) { in __psmouse_reconnect()
1723 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); in __psmouse_reconnect()
1724 psmouse_initialize(psmouse); in __psmouse_reconnect()
1734 if (!psmouse->protocol->smbus_companion) in __psmouse_reconnect()
1735 psmouse_activate(psmouse); in __psmouse_reconnect()
1797 struct psmouse *psmouse = serio_get_drvdata(serio); in psmouse_attr_show_helper() local
1799 if (psmouse->protocol->smbus_companion && in psmouse_attr_show_helper()
1803 return attr->show(psmouse, attr->data, buf); in psmouse_attr_show_helper()
1811 struct psmouse *psmouse, *parent = NULL; in psmouse_attr_set_helper() local
1818 psmouse = serio_get_drvdata(serio); in psmouse_attr_set_helper()
1820 if (psmouse->protocol->smbus_companion && in psmouse_attr_set_helper()
1827 if (psmouse->state == PSMOUSE_IGNORE) { in psmouse_attr_set_helper()
1837 if (!psmouse->protocol->smbus_companion) in psmouse_attr_set_helper()
1838 psmouse_deactivate(psmouse); in psmouse_attr_set_helper()
1841 retval = attr->set(psmouse, attr->data, buf, count); in psmouse_attr_set_helper()
1844 if (retval != -ENODEV && !psmouse->protocol->smbus_companion) in psmouse_attr_set_helper()
1845 psmouse_activate(psmouse); in psmouse_attr_set_helper()
1857 static ssize_t psmouse_show_int_attr(struct psmouse *psmouse, void *offset, char *buf) in psmouse_show_int_attr() argument
1859 unsigned int *field = (unsigned int *)((char *)psmouse + (size_t)offset); in psmouse_show_int_attr()
1864 static ssize_t psmouse_set_int_attr(struct psmouse *psmouse, void *offset, const char *buf, size_t … in psmouse_set_int_attr() argument
1866 unsigned int *field = (unsigned int *)((char *)psmouse + (size_t)offset); in psmouse_set_int_attr()
1879 static ssize_t psmouse_attr_show_protocol(struct psmouse *psmouse, void *data, char *buf) in psmouse_attr_show_protocol() argument
1881 return sprintf(buf, "%s\n", psmouse->protocol->name); in psmouse_attr_show_protocol()
1884 static ssize_t psmouse_attr_set_protocol(struct psmouse *psmouse, void *data, const char *buf, size… in psmouse_attr_set_protocol() argument
1886 struct serio *serio = psmouse->ps2dev.serio; in psmouse_attr_set_protocol()
1887 struct psmouse *parent = NULL; in psmouse_attr_set_protocol()
1897 if (psmouse->protocol == proto) in psmouse_attr_set_protocol()
1906 psmouse_warn(psmouse, in psmouse_attr_set_protocol()
1921 if (psmouse->protocol == proto) { in psmouse_attr_set_protocol()
1933 old_dev = psmouse->dev; in psmouse_attr_set_protocol()
1934 old_proto = psmouse->protocol; in psmouse_attr_set_protocol()
1936 if (psmouse->disconnect) in psmouse_attr_set_protocol()
1937 psmouse->disconnect(psmouse); in psmouse_attr_set_protocol()
1939 psmouse_set_state(psmouse, PSMOUSE_IGNORE); in psmouse_attr_set_protocol()
1941 psmouse->dev = new_dev; in psmouse_attr_set_protocol()
1942 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); in psmouse_attr_set_protocol()
1944 if (psmouse_switch_protocol(psmouse, proto) < 0) { in psmouse_attr_set_protocol()
1945 psmouse_reset(psmouse); in psmouse_attr_set_protocol()
1947 psmouse_switch_protocol(psmouse, &psmouse_protocols[0]); in psmouse_attr_set_protocol()
1950 psmouse_initialize(psmouse); in psmouse_attr_set_protocol()
1951 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); in psmouse_attr_set_protocol()
1953 if (psmouse->protocol->smbus_companion) { in psmouse_attr_set_protocol()
1954 input_free_device(psmouse->dev); in psmouse_attr_set_protocol()
1955 psmouse->dev = NULL; in psmouse_attr_set_protocol()
1957 error = input_register_device(psmouse->dev); in psmouse_attr_set_protocol()
1959 if (psmouse->disconnect) in psmouse_attr_set_protocol()
1960 psmouse->disconnect(psmouse); in psmouse_attr_set_protocol()
1962 psmouse_set_state(psmouse, PSMOUSE_IGNORE); in psmouse_attr_set_protocol()
1964 psmouse->dev = old_dev; in psmouse_attr_set_protocol()
1965 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); in psmouse_attr_set_protocol()
1966 psmouse_switch_protocol(psmouse, old_proto); in psmouse_attr_set_protocol()
1967 psmouse_initialize(psmouse); in psmouse_attr_set_protocol()
1968 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); in psmouse_attr_set_protocol()
1983 static ssize_t psmouse_attr_set_rate(struct psmouse *psmouse, void *data, const char *buf, size_t c… in psmouse_attr_set_rate() argument
1992 psmouse->set_rate(psmouse, value); in psmouse_attr_set_rate()
1996 static ssize_t psmouse_attr_set_resolution(struct psmouse *psmouse, void *data, const char *buf, si… in psmouse_attr_set_resolution() argument
2005 psmouse->set_resolution(psmouse, value); in psmouse_attr_set_resolution()