diff options
Diffstat (limited to 'drivers/input/mouse/psmouse-base.c')
| -rw-r--r-- | drivers/input/mouse/psmouse-base.c | 113 |
1 files changed, 71 insertions, 42 deletions
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c index b407b355dceb..690aed905436 100644 --- a/drivers/input/mouse/psmouse-base.c +++ b/drivers/input/mouse/psmouse-base.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include "trackpoint.h" | 30 | #include "trackpoint.h" |
| 31 | #include "touchkit_ps2.h" | 31 | #include "touchkit_ps2.h" |
| 32 | #include "elantech.h" | 32 | #include "elantech.h" |
| 33 | #include "sentelic.h" | ||
| 33 | 34 | ||
| 34 | #define DRIVER_DESC "PS/2 mouse driver" | 35 | #define DRIVER_DESC "PS/2 mouse driver" |
| 35 | 36 | ||
| @@ -108,10 +109,10 @@ static struct workqueue_struct *kpsmoused_wq; | |||
| 108 | 109 | ||
| 109 | struct psmouse_protocol { | 110 | struct psmouse_protocol { |
| 110 | enum psmouse_type type; | 111 | enum psmouse_type type; |
| 112 | bool maxproto; | ||
| 111 | const char *name; | 113 | const char *name; |
| 112 | const char *alias; | 114 | const char *alias; |
| 113 | int maxproto; | 115 | int (*detect)(struct psmouse *, bool); |
| 114 | int (*detect)(struct psmouse *, int); | ||
| 115 | int (*init)(struct psmouse *); | 116 | int (*init)(struct psmouse *); |
| 116 | }; | 117 | }; |
| 117 | 118 | ||
| @@ -216,7 +217,7 @@ void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work, | |||
| 216 | static inline void __psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state) | 217 | static inline void __psmouse_set_state(struct psmouse *psmouse, enum psmouse_state new_state) |
| 217 | { | 218 | { |
| 218 | psmouse->state = new_state; | 219 | psmouse->state = new_state; |
| 219 | psmouse->pktcnt = psmouse->out_of_sync = 0; | 220 | psmouse->pktcnt = psmouse->out_of_sync_cnt = 0; |
| 220 | psmouse->ps2dev.flags = 0; | 221 | psmouse->ps2dev.flags = 0; |
| 221 | psmouse->last = jiffies; | 222 | psmouse->last = jiffies; |
| 222 | } | 223 | } |
| @@ -249,7 +250,7 @@ static int psmouse_handle_byte(struct psmouse *psmouse) | |||
| 249 | if (psmouse->state == PSMOUSE_ACTIVATED) { | 250 | if (psmouse->state == PSMOUSE_ACTIVATED) { |
| 250 | printk(KERN_WARNING "psmouse.c: %s at %s lost sync at byte %d\n", | 251 | printk(KERN_WARNING "psmouse.c: %s at %s lost sync at byte %d\n", |
| 251 | psmouse->name, psmouse->phys, psmouse->pktcnt); | 252 | psmouse->name, psmouse->phys, psmouse->pktcnt); |
| 252 | if (++psmouse->out_of_sync == psmouse->resetafter) { | 253 | if (++psmouse->out_of_sync_cnt == psmouse->resetafter) { |
| 253 | __psmouse_set_state(psmouse, PSMOUSE_IGNORE); | 254 | __psmouse_set_state(psmouse, PSMOUSE_IGNORE); |
| 254 | printk(KERN_NOTICE "psmouse.c: issuing reconnect request\n"); | 255 | printk(KERN_NOTICE "psmouse.c: issuing reconnect request\n"); |
| 255 | serio_reconnect(psmouse->ps2dev.serio); | 256 | serio_reconnect(psmouse->ps2dev.serio); |
| @@ -261,8 +262,8 @@ static int psmouse_handle_byte(struct psmouse *psmouse) | |||
| 261 | 262 | ||
| 262 | case PSMOUSE_FULL_PACKET: | 263 | case PSMOUSE_FULL_PACKET: |
| 263 | psmouse->pktcnt = 0; | 264 | psmouse->pktcnt = 0; |
| 264 | if (psmouse->out_of_sync) { | 265 | if (psmouse->out_of_sync_cnt) { |
| 265 | psmouse->out_of_sync = 0; | 266 | psmouse->out_of_sync_cnt = 0; |
| 266 | printk(KERN_NOTICE "psmouse.c: %s at %s - driver resynched.\n", | 267 | printk(KERN_NOTICE "psmouse.c: %s at %s - driver resynched.\n", |
| 267 | psmouse->name, psmouse->phys); | 268 | psmouse->name, psmouse->phys); |
| 268 | } | 269 | } |
| @@ -408,7 +409,7 @@ int psmouse_reset(struct psmouse *psmouse) | |||
| 408 | /* | 409 | /* |
| 409 | * Genius NetMouse magic init. | 410 | * Genius NetMouse magic init. |
| 410 | */ | 411 | */ |
| 411 | static int genius_detect(struct psmouse *psmouse, int set_properties) | 412 | static int genius_detect(struct psmouse *psmouse, bool set_properties) |
| 412 | { | 413 | { |
| 413 | struct ps2dev *ps2dev = &psmouse->ps2dev; | 414 | struct ps2dev *ps2dev = &psmouse->ps2dev; |
| 414 | unsigned char param[4]; | 415 | unsigned char param[4]; |
| @@ -424,9 +425,9 @@ static int genius_detect(struct psmouse *psmouse, int set_properties) | |||
| 424 | return -1; | 425 | return -1; |
| 425 | 426 | ||
| 426 | if (set_properties) { | 427 | if (set_properties) { |
| 427 | set_bit(BTN_EXTRA, psmouse->dev->keybit); | 428 | __set_bit(BTN_EXTRA, psmouse->dev->keybit); |
| 428 | set_bit(BTN_SIDE, psmouse->dev->keybit); | 429 | __set_bit(BTN_SIDE, psmouse->dev->keybit); |
| 429 | set_bit(REL_WHEEL, psmouse->dev->relbit); | 430 | __set_bit(REL_WHEEL, psmouse->dev->relbit); |
| 430 | 431 | ||
| 431 | psmouse->vendor = "Genius"; | 432 | psmouse->vendor = "Genius"; |
| 432 | psmouse->name = "Mouse"; | 433 | psmouse->name = "Mouse"; |
| @@ -439,7 +440,7 @@ static int genius_detect(struct psmouse *psmouse, int set_properties) | |||
| 439 | /* | 440 | /* |
| 440 | * IntelliMouse magic init. | 441 | * IntelliMouse magic init. |
| 441 | */ | 442 | */ |
| 442 | static int intellimouse_detect(struct psmouse *psmouse, int set_properties) | 443 | static int intellimouse_detect(struct psmouse *psmouse, bool set_properties) |
| 443 | { | 444 | { |
| 444 | struct ps2dev *ps2dev = &psmouse->ps2dev; | 445 | struct ps2dev *ps2dev = &psmouse->ps2dev; |
| 445 | unsigned char param[2]; | 446 | unsigned char param[2]; |
| @@ -456,8 +457,8 @@ static int intellimouse_detect(struct psmouse *psmouse, int set_properties) | |||
| 456 | return -1; | 457 | return -1; |
| 457 | 458 | ||
| 458 | if (set_properties) { | 459 | if (set_properties) { |
| 459 | set_bit(BTN_MIDDLE, psmouse->dev->keybit); | 460 | __set_bit(BTN_MIDDLE, psmouse->dev->keybit); |
| 460 | set_bit(REL_WHEEL, psmouse->dev->relbit); | 461 | __set_bit(REL_WHEEL, psmouse->dev->relbit); |
| 461 | 462 | ||
| 462 | if (!psmouse->vendor) psmouse->vendor = "Generic"; | 463 | if (!psmouse->vendor) psmouse->vendor = "Generic"; |
| 463 | if (!psmouse->name) psmouse->name = "Wheel Mouse"; | 464 | if (!psmouse->name) psmouse->name = "Wheel Mouse"; |
| @@ -470,7 +471,7 @@ static int intellimouse_detect(struct psmouse *psmouse, int set_properties) | |||
| 470 | /* | 471 | /* |
| 471 | * Try IntelliMouse/Explorer magic init. | 472 | * Try IntelliMouse/Explorer magic init. |
| 472 | */ | 473 | */ |
| 473 | static int im_explorer_detect(struct psmouse *psmouse, int set_properties) | 474 | static int im_explorer_detect(struct psmouse *psmouse, bool set_properties) |
| 474 | { | 475 | { |
| 475 | struct ps2dev *ps2dev = &psmouse->ps2dev; | 476 | struct ps2dev *ps2dev = &psmouse->ps2dev; |
| 476 | unsigned char param[2]; | 477 | unsigned char param[2]; |
| @@ -497,11 +498,11 @@ static int im_explorer_detect(struct psmouse *psmouse, int set_properties) | |||
| 497 | ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE); | 498 | ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE); |
| 498 | 499 | ||
| 499 | if (set_properties) { | 500 | if (set_properties) { |
| 500 | set_bit(BTN_MIDDLE, psmouse->dev->keybit); | 501 | __set_bit(BTN_MIDDLE, psmouse->dev->keybit); |
| 501 | set_bit(REL_WHEEL, psmouse->dev->relbit); | 502 | __set_bit(REL_WHEEL, psmouse->dev->relbit); |
| 502 | set_bit(REL_HWHEEL, psmouse->dev->relbit); | 503 | __set_bit(REL_HWHEEL, psmouse->dev->relbit); |
| 503 | set_bit(BTN_SIDE, psmouse->dev->keybit); | 504 | __set_bit(BTN_SIDE, psmouse->dev->keybit); |
| 504 | set_bit(BTN_EXTRA, psmouse->dev->keybit); | 505 | __set_bit(BTN_EXTRA, psmouse->dev->keybit); |
| 505 | 506 | ||
| 506 | if (!psmouse->vendor) psmouse->vendor = "Generic"; | 507 | if (!psmouse->vendor) psmouse->vendor = "Generic"; |
| 507 | if (!psmouse->name) psmouse->name = "Explorer Mouse"; | 508 | if (!psmouse->name) psmouse->name = "Explorer Mouse"; |
| @@ -514,7 +515,7 @@ static int im_explorer_detect(struct psmouse *psmouse, int set_properties) | |||
| 514 | /* | 515 | /* |
| 515 | * Kensington ThinkingMouse / ExpertMouse magic init. | 516 | * Kensington ThinkingMouse / ExpertMouse magic init. |
| 516 | */ | 517 | */ |
| 517 | static int thinking_detect(struct psmouse *psmouse, int set_properties) | 518 | static int thinking_detect(struct psmouse *psmouse, bool set_properties) |
| 518 | { | 519 | { |
| 519 | struct ps2dev *ps2dev = &psmouse->ps2dev; | 520 | struct ps2dev *ps2dev = &psmouse->ps2dev; |
| 520 | unsigned char param[2]; | 521 | unsigned char param[2]; |
| @@ -535,7 +536,7 @@ static int thinking_detect(struct psmouse *psmouse, int set_properties) | |||
| 535 | return -1; | 536 | return -1; |
| 536 | 537 | ||
| 537 | if (set_properties) { | 538 | if (set_properties) { |
| 538 | set_bit(BTN_EXTRA, psmouse->dev->keybit); | 539 | __set_bit(BTN_EXTRA, psmouse->dev->keybit); |
| 539 | 540 | ||
| 540 | psmouse->vendor = "Kensington"; | 541 | psmouse->vendor = "Kensington"; |
| 541 | psmouse->name = "ThinkingMouse"; | 542 | psmouse->name = "ThinkingMouse"; |
| @@ -547,7 +548,7 @@ static int thinking_detect(struct psmouse *psmouse, int set_properties) | |||
| 547 | /* | 548 | /* |
| 548 | * Bare PS/2 protocol "detection". Always succeeds. | 549 | * Bare PS/2 protocol "detection". Always succeeds. |
| 549 | */ | 550 | */ |
| 550 | static int ps2bare_detect(struct psmouse *psmouse, int set_properties) | 551 | static int ps2bare_detect(struct psmouse *psmouse, bool set_properties) |
| 551 | { | 552 | { |
| 552 | if (set_properties) { | 553 | if (set_properties) { |
| 553 | if (!psmouse->vendor) psmouse->vendor = "Generic"; | 554 | if (!psmouse->vendor) psmouse->vendor = "Generic"; |
| @@ -561,12 +562,12 @@ static int ps2bare_detect(struct psmouse *psmouse, int set_properties) | |||
| 561 | * Cortron PS/2 protocol detection. There's no special way to detect it, so it | 562 | * Cortron PS/2 protocol detection. There's no special way to detect it, so it |
| 562 | * must be forced by sysfs protocol writing. | 563 | * must be forced by sysfs protocol writing. |
| 563 | */ | 564 | */ |
| 564 | static int cortron_detect(struct psmouse *psmouse, int set_properties) | 565 | |
