• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/input/mouse/

Lines Matching defs:psmouse

24 #include "psmouse.h"
76 (void *) offsetof(struct psmouse, rate),
79 (void *) offsetof(struct psmouse, resolution),
82 (void *) offsetof(struct psmouse, resetafter),
85 (void *) offsetof(struct psmouse, resync_time),
118 int (*detect)(struct psmouse *, bool);
119 int (*init)(struct psmouse *);
127 static psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse)
129 struct input_dev *dev = psmouse->dev;
130 unsigned char *packet = psmouse->packet;
132 if (psmouse->pktcnt < psmouse->pktsize)
143 if (psmouse->type == PSMOUSE_IMPS || psmouse->type == PSMOUSE_GENPS)
150 if (psmouse->type == PSMOUSE_IMEX) {
171 if (psmouse->type == PSMOUSE_GENPS) {
179 if (psmouse->type == PSMOUSE_THINKPS) {
189 if (psmouse->type == PSMOUSE_CORTRON) {
210 void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work,
217 * __psmouse_set_state() sets new psmouse state and resets all flags.
220 static inline void __psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state)
222 psmouse->state = new_state;
223 psmouse->pktcnt = psmouse->out_of_sync_cnt = 0;
224 psmouse->ps2dev.flags = 0;
225 psmouse->last = jiffies;
230 * psmouse_set_state() sets new psmouse state and resets all flags and
235 void psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state)
237 serio_pause_rx(psmouse->ps2dev.serio);
238 __psmouse_set_state(psmouse, new_state);
239 serio_continue_rx(psmouse->ps2dev.serio);
247 static int psmouse_handle_byte(struct psmouse *psmouse)
249 psmouse_ret_t rc = psmouse->protocol_handler(psmouse);
253 if (psmouse->state == PSMOUSE_ACTIVATED) {
254 printk(KERN_WARNING "psmouse.c: %s at %s lost sync at byte %d\n",
255 psmouse->name, psmouse->phys, psmouse->pktcnt);
256 if (++psmouse->out_of_sync_cnt == psmouse->resetafter) {
257 __psmouse_set_state(psmouse, PSMOUSE_IGNORE);
258 printk(KERN_NOTICE "psmouse.c: issuing reconnect request\n");
259 serio_reconnect(psmouse->ps2dev.serio);
263 psmouse->pktcnt = 0;
267 psmouse->pktcnt = 0;
268 if (psmouse->out_of_sync_cnt) {
269 psmouse->out_of_sync_cnt = 0;
270 printk(KERN_NOTICE "psmouse.c: %s at %s - driver resynched.\n",
271 psmouse->name, psmouse->phys);
289 struct psmouse *psmouse = serio_get_drvdata(serio);
291 if (psmouse->state == PSMOUSE_IGNORE)
295 ((flags & SERIO_PARITY) && !psmouse->ignore_parity))) {
297 if (psmouse->state == PSMOUSE_ACTIVATED)
298 printk(KERN_WARNING "psmouse.c: bad data from KBC -%s%s\n",
301 ps2_cmd_aborted(&psmouse->ps2dev);
305 if (unlikely(psmouse->ps2dev.flags & PS2_FLAG_ACK))
306 if (ps2_handle_ack(&psmouse->ps2dev, data))
309 if (unlikely(psmouse->ps2dev.flags & PS2_FLAG_CMD))
310 if (ps2_handle_response(&psmouse->ps2dev, data))
313 if (psmouse->state <= PSMOUSE_RESYNCING)
316 if (psmouse->state == PSMOUSE_ACTIVATED &&
317 psmouse->pktcnt && time_after(jiffies, psmouse->last + HZ/2)) {
318 printk(KERN_INFO "psmouse.c: %s at %s lost synchronization, throwing %d bytes away.\n",
319 psmouse->name, psmouse->phys, psmouse->pktcnt);
320 psmouse->badbyte = psmouse->packet[0];
321 __psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
322 psmouse_queue_work(psmouse, &psmouse->resync_work, 0);
326 psmouse->packet[psmouse->pktcnt++] = data;
330 if (unlikely(psmouse->packet[0] == PSMOUSE_RET_BAT && psmouse->pktcnt <= 2)) {
331 if (psmouse->pktcnt == 1) {
332 psmouse->last = jiffies;
336 if (psmouse->packet[1] == PSMOUSE_RET_ID ||
337 (psmouse->type == PSMOUSE_HGPK &&
338 psmouse->packet[1] == PSMOUSE_RET_BAT)) {
339 __psmouse_set_state(psmouse, PSMOUSE_IGNORE);
346 psmouse->pktcnt = 1;
347 if (psmouse_handle_byte(psmouse))
350 psmouse->packet[psmouse->pktcnt++] = data;
356 if (psmouse->state == PSMOUSE_ACTIVATED &&
357 psmouse->pktcnt == 1 && psmouse->resync_time &&
358 time_after(jiffies, psmouse->last + psmouse->resync_time * HZ)) {
359 psmouse->badbyte = psmouse->packet[0];
360 __psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
361 psmouse_queue_work(psmouse, &psmouse->resync_work, 0);
365 psmouse->last = jiffies;
366 psmouse_handle_byte(psmouse);
380 int psmouse_sliced_command(struct psmouse *psmouse, unsigned char command)
384 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11))
389 if (ps2_command(&psmouse->ps2dev, &d, PSMOUSE_CMD_SETRES))
400 int psmouse_reset(struct psmouse *psmouse)
404 if (ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_RESET_BAT))
417 static int genius_detect(struct psmouse *psmouse, bool set_properties)
419 struct ps2dev *ps2dev = &psmouse->ps2dev;
433 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
434 __set_bit(BTN_EXTRA, psmouse->dev->keybit);
435 __set_bit(BTN_SIDE, psmouse->dev->keybit);
436 __set_bit(REL_WHEEL, psmouse->dev->relbit);
438 psmouse->vendor = "Genius";
439 psmouse->name = "Mouse";
440 psmouse->pktsize = 4;
449 static int intellimouse_detect(struct psmouse *psmouse, bool set_properties)
451 struct ps2dev *ps2dev = &psmouse->ps2dev;
466 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
467 __set_bit(REL_WHEEL, psmouse->dev->relbit);
469 if (!psmouse->vendor)
470 psmouse->vendor = "Generic";
471 if (!psmouse->name)
472 psmouse->name = "Wheel Mouse";
473 psmouse->pktsize = 4;
482 static int im_explorer_detect(struct psmouse *psmouse, bool set_properties)
484 struct ps2dev *ps2dev = &psmouse->ps2dev;
487 intellimouse_detect(psmouse, 0);
509 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
510 __set_bit(REL_WHEEL, psmouse->dev->relbit);
511 __set_bit(REL_HWHEEL, psmouse->dev->relbit);
512 __set_bit(BTN_SIDE, psmouse->dev->keybit);
513 __set_bit(BTN_EXTRA, psmouse->dev->keybit);
515 if (!psmouse->vendor)
516 psmouse->vendor = "Generic";
517 if (!psmouse->name)
518 psmouse->name = "Explorer Mouse";
519 psmouse->pktsize = 4;
528 static int thinking_detect(struct psmouse *psmouse, bool set_properties)
530 struct ps2dev *ps2dev = &psmouse->ps2dev;
549 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
550 __set_bit(BTN_EXTRA, psmouse->dev->keybit);
552 psmouse->vendor = "Kensington";
553 psmouse->name = "ThinkingMouse";
562 static int ps2bare_detect(struct psmouse *psmouse, bool set_properties)
565 if (!psmouse->vendor)
566 psmouse->vendor = "Generic";
567 if (!psmouse->name)
568 psmouse->name = "Mouse";
574 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
584 static int cortron_detect(struct psmouse *psmouse, bool set_properties)
587 psmouse->vendor = "Cortron";
588 psmouse->name = "PS/2 Trackball";
590 __set_bit(BTN_MIDDLE, psmouse->dev->keybit);
591 __set_bit(BTN_SIDE, psmouse->dev->keybit);
602 static int psmouse_extensions(struct psmouse *psmouse,
611 if (lifebook_detect(psmouse, set_properties) == 0) {
613 if (!set_properties || lifebook_init(psmouse) == 0)
623 if (max_proto > PSMOUSE_IMEX && thinking_detect(psmouse, set_properties) == 0)
631 if (max_proto > PSMOUSE_PS2 && synaptics_detect(psmouse, set_properties) == 0) {
640 (!set_properties || synaptics_init(psmouse) == 0)) {
654 synaptics_reset(psmouse);
661 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
662 if (alps_detect(psmouse, set_properties) == 0) {
663 if (!set_properties || alps_init(psmouse) == 0)
676 hgpk_detect(psmouse, set_properties) == 0) {
677 if (!set_properties || hgpk_init(psmouse) == 0)
689 elantech_detect(psmouse, set_properties) == 0) {
690 if (!set_properties || elantech_init(psmouse) == 0)
700 if (genius_detect(psmouse, set_properties) == 0)
703 if (ps2pp_init(psmouse, set_properties) == 0)
706 if (trackpoint_detect(psmouse, set_properties) == 0)
709 if (touchkit_ps2_detect(psmouse, set_properties) == 0)
718 if (fsp_detect(psmouse, set_properties) == 0) {
719 if (!set_properties || fsp_init(psmouse) == 0)
733 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
734 psmouse_reset(psmouse);
736 if (max_proto >= PSMOUSE_IMEX && im_explorer_detect(psmouse, set_properties) == 0)
739 if (max_proto >= PSMOUSE_IMPS && intellimouse_detect(psmouse, set_properties) == 0)
746 ps2bare_detect(psmouse, set_properties);
755 psmouse_reset(psmouse);
921 static int psmouse_probe(struct psmouse *psmouse)
923 struct ps2dev *ps2dev = &psmouse->ps2dev;
946 printk(KERN_WARNING "psmouse.c: Failed to reset mouse on %s\n", ps2dev->serio->phys);
955 void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution)
964 ps2_command(&psmouse->ps2dev, &p, PSMOUSE_CMD_SETRES);
965 psmouse->resolution = 25 << p;
972 static void psmouse_set_rate(struct psmouse *psmouse, unsigned int rate)
980 ps2_command(&psmouse->ps2dev, &r, PSMOUSE_CMD_SETRATE);
981 psmouse->rate = r;
988 static void psmouse_initialize(struct psmouse *psmouse)
995 psmouse->set_rate(psmouse, psmouse->rate);
996 psmouse->set_resolution(psmouse, psmouse->resolution);
997 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11);
1005 static void psmouse_activate(struct psmouse *psmouse)
1007 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE))
1008 printk(KERN_WARNING "psmouse.c: Failed to enable mouse on %s\n",
1009 psmouse->ps2dev.serio->phys);
1011 psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
1020 static void psmouse_deactivate(struct psmouse *psmouse)
1022 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE))
1023 printk(KERN_WARNING "psmouse.c: Failed to deactivate mouse on %s\n",
1024 psmouse->ps2dev.serio->phys);
1026 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1033 static int psmouse_poll(struct psmouse *psmouse)
1035 return ps2_command(&psmouse->ps2dev, psmouse->packet,
1036 PSMOUSE_CMD_POLL | (psmouse->pktsize << 8));
1046 struct psmouse *parent = NULL, *psmouse =
1047 container_of(work, struct psmouse, resync_work.work);
1048 struct serio *serio = psmouse->ps2dev.serio;
1055 if (psmouse->state != PSMOUSE_RESYNCING)
1073 psmouse->num_resyncs++;
1075 if (ps2_sendbyte(&psmouse->ps2dev, PSMOUSE_CMD_DISABLE, 20)) {
1076 if (psmouse->num_resyncs < 3 || psmouse->acks_disable_command)
1079 psmouse->acks_disable_command = true;
1083 * psmouse->pktsize and ps2_command will fail. We do not expect and
1089 if (psmouse->poll(psmouse))
1092 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1093 for (i = 0; i < psmouse->pktsize; i++) {
1094 psmouse->pktcnt++;
1095 rc = psmouse->protocol_handler(psmouse);
1101 psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
1110 if (!ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE)) {
1118 printk(KERN_WARNING "psmouse.c: failed to re-enable mouse on %s\n",
1119 psmouse->ps2dev.serio->phys);
1124 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1125 printk(KERN_INFO "psmouse.c: resync failed, issuing reconnect request\n");
1128 psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
1142 struct psmouse *psmouse = serio_get_drvdata(serio);
1143 struct psmouse *parent = NULL;
1152 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1157 if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE))
1158 printk(KERN_WARNING "psmouse.c: Failed to disable mouse on %s\n",
1159 psmouse->ps2dev.serio->phys);
1161 if (psmouse->cleanup)
1162 psmouse->cleanup(psmouse);
1167 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
1173 ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE);
1191 struct psmouse *psmouse, *parent = NULL;
1193 psmouse = serio_get_drvdata(serio);
1199 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1211 if (psmouse->disconnect)
1212 psmouse->disconnect(psmouse);
1217 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1221 input_unregister_device(psmouse->dev);
1222 kfree(psmouse);
1230 static int psmouse_switch_protocol(struct psmouse *psmouse,
1234 struct input_dev *input_dev = psmouse->dev;
1236 input_dev->dev.parent = &psmouse->ps2dev.serio->dev;
1243 psmouse->set_rate = psmouse_set_rate;
1244 psmouse->set_resolution = psmouse_set_resolution;
1245 psmouse->poll = psmouse_poll;
1246 psmouse->protocol_handler = psmouse_process_byte;
1247 psmouse->pktsize = 3;
1250 if (proto->detect && proto->detect(psmouse, true) < 0)
1253 if (proto->init && proto->init(psmouse) < 0)
1256 psmouse->type = proto->type;
1259 psmouse->type = psmouse_extensions(psmouse,
1261 selected_proto = psmouse_protocol_by_type(psmouse->type);
1264 psmouse->ignore_parity = selected_proto->ignore_parity;
1271 if (psmouse->pktsize == 3)
1272 psmouse->resync_time = 0;
1280 if (psmouse->resync_time && psmouse->poll(psmouse))
1281 psmouse->resync_time = 0;
1283 snprintf(psmouse->devname, sizeof(psmouse->devname), "%s %s %s",
1284 selected_proto->name, psmouse->vendor, psmouse->name);
1286 input_dev->name = psmouse->devname;
1287 input_dev->phys = psmouse->phys;
1290 input_dev->id.product = psmouse->type;
1291 input_dev->id.version = psmouse->model;
1302 struct psmouse *psmouse, *parent = NULL;
1317 psmouse = kzalloc(sizeof(struct psmouse), GFP_KERNEL);
1319 if (!psmouse || !input_dev)
1322 ps2_init(&psmouse->ps2dev, serio);
1323 INIT_DELAYED_WORK(&psmouse->resync_work, psmouse_resync);
1324 psmouse->dev = input_dev;
1325 snprintf(psmouse->phys, sizeof(psmouse->phys), "%s/input0", serio->phys);
1327 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1329 serio_set_drvdata(serio, psmouse);
1335 if (psmouse_probe(psmouse) < 0) {
1340 psmouse->rate = psmouse_rate;
1341 psmouse->resolution = psmouse_resolution;
1342 psmouse->resetafter = psmouse_resetafter;
1343 psmouse->resync_time = parent ? 0 : psmouse_resync_time;
1344 psmouse->smartscroll = psmouse_smartscroll;
1346 psmouse_switch_protocol(psmouse, NULL);
1348 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1349 psmouse_initialize(psmouse);
1351 error = input_register_device(psmouse->dev);
1362 psmouse_activate(psmouse);
1375 input_unregister_device(psmouse->dev);
1378 if (psmouse->disconnect)
1379 psmouse->disconnect(psmouse);
1380 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1387 kfree(psmouse);
1396 struct psmouse *psmouse = serio_get_drvdata(serio);
1397 struct psmouse *parent = NULL;
1402 if (!drv || !psmouse) {
1403 printk(KERN_DEBUG "psmouse: reconnect request, but serio is disconnected, ignoring...\n");
1414 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1416 if (psmouse->reconnect) {
1417 if (psmouse->reconnect(psmouse))
1420 psmouse_reset(psmouse);
1422 if (psmouse_probe(psmouse) < 0)
1425 type = psmouse_extensions(psmouse, psmouse_max_proto, false);
1426 if (psmouse->type != type)
1433 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1435 psmouse_initialize(psmouse);
1440 psmouse_activate(psmouse);
1472 .name = "psmouse",
1488 struct psmouse *psmouse;
1490 psmouse = serio_get_drvdata(serio);
1492 return attr->show(psmouse, attr->data, buf);
1500 struct psmouse *psmouse, *parent = NULL;
1507 psmouse = serio_get_drvdata(serio);
1510 if (psmouse->state == PSMOUSE_IGNORE) {
1520 psmouse_deactivate(psmouse);
1523 retval = attr->set(psmouse, attr->data, buf, count);
1527 psmouse_activate(psmouse);
1539 static ssize_t psmouse_show_int_attr(struct psmouse *psmouse, void *offset, char *buf)
1541 unsigned int *field = (unsigned int *)((char *)psmouse + (size_t)offset);
1546 static ssize_t psmouse_set_int_attr(struct psmouse *psmouse, void *offset, const char *buf, size_t count)
1548 unsigned int *field = (unsigned int *)((char *)psmouse + (size_t)offset);
1562 static ssize_t psmouse_attr_show_protocol(struct psmouse *psmouse, void *data, char *buf)
1564 return sprintf(buf, "%s\n", psmouse_protocol_by_type(psmouse->type)->name);
1567 static ssize_t psmouse_attr_set_protocol(struct psmouse *psmouse, void *data, const char *buf, size_t count)
1569 struct serio *serio = psmouse->ps2dev.serio;
1570 struct psmouse *parent = NULL;
1580 if (psmouse->type == proto->type)
1590 "psmouse: failed to destroy child port, "
1605 if (psmouse->type == proto->type) {
1617 old_dev = psmouse->dev;
1618 old_proto = psmouse_protocol_by_type(psmouse->type);
1620 if (psmouse->disconnect)
1621 psmouse->disconnect(psmouse);
1623 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1625 psmouse->dev = new_dev;
1626 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1628 if (psmouse_switch_protocol(psmouse, proto) < 0) {
1629 psmouse_reset(psmouse);
1631 psmouse_switch_protocol(psmouse, &psmouse_protocols[0]);
1634 psmouse_initialize(psmouse);
1635 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1637 error = input_register_device(psmouse->dev);
1639 if (psmouse->disconnect)
1640 psmouse->disconnect(psmouse);
1642 psmouse_set_state(psmouse, PSMOUSE_IGNORE);
1644 psmouse->dev = old_dev;
1645 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
1646 psmouse_switch_protocol(psmouse, old_proto);
1647 psmouse_initialize(psmouse);
1648 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
1661 static ssize_t psmouse_attr_set_rate(struct psmouse *psmouse, void *data, const char *buf, size_t count)
1668 psmouse->set_rate(psmouse, value);
1672 static ssize_t psmouse_attr_set_resolution(struct psmouse *psmouse, void *data, const char *buf, size_t count)
1679 psmouse->set_resolution(psmouse, value);
1717 printk(KERN_ERR "psmouse: failed to create kpsmoused workqueue\n");