diff options
| author | Dmitry Torokhov <dtor@insightbb.com> | 2006-09-19 01:56:44 -0400 |
|---|---|---|
| committer | Dmitry Torokhov <dtor@insightbb.com> | 2006-09-19 01:56:44 -0400 |
| commit | 0612ec48762bf8712db1925b2e67246d2237ebab (patch) | |
| tree | 01b0d69c9c9915015c0f23ad4263646dd5413e99 /drivers/input | |
| parent | 4263cf0fac28122c8381b6f4f9441a43cd93c81f (diff) | |
| parent | 47a5c6fa0e204a2b63309c648bb2fde36836c826 (diff) | |
Merge rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'drivers/input')
| -rw-r--r-- | drivers/input/keyboard/atkbd.c | 103 | ||||
| -rw-r--r-- | drivers/input/misc/wistron_btns.c | 16 | ||||
| -rw-r--r-- | drivers/input/mouse/logips2pp.c | 3 | ||||
| -rw-r--r-- | drivers/input/mouse/psmouse-base.c | 7 | ||||
| -rw-r--r-- | drivers/input/mouse/trackpoint.c | 52 |
5 files changed, 103 insertions, 78 deletions
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index 9874072cf9..40244d4ce0 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
| @@ -482,13 +482,7 @@ out: | |||
| 482 | return IRQ_HANDLED; | 482 | return IRQ_HANDLED; |
| 483 | } | 483 | } |
| 484 | 484 | ||
| 485 | /* | 485 | static int atkbd_set_repeat_rate(struct atkbd *atkbd) |
| 486 | * atkbd_event_work() is used to complete processing of events that | ||
| 487 | * can not be processed by input_event() which is often called from | ||
| 488 | * interrupt context. | ||
| 489 | */ | ||
| 490 | |||
| 491 | static void atkbd_event_work(void *data) | ||
| 492 | { | 486 | { |
| 493 | const short period[32] = | 487 | const short period[32] = |
| 494 | { 33, 37, 42, 46, 50, 54, 58, 63, 67, 75, 83, 92, 100, 109, 116, 125, | 488 | { 33, 37, 42, 46, 50, 54, 58, 63, 67, 75, 83, 92, 100, 109, 116, 125, |
| @@ -496,41 +490,64 @@ static void atkbd_event_work(void *data) | |||
| 496 | const short delay[4] = | 490 | const short delay[4] = |
| 497 | { 250, 500, 750, 1000 }; | 491 | { 250, 500, 750, 1000 }; |
| 498 | 492 | ||
| 499 | struct atkbd *atkbd = data; | 493 | struct input_dev *dev = atkbd->dev; |
| 494 | unsigned char param; | ||
| 495 | int i = 0, j = 0; | ||
| 496 | |||
| 497 | while (i < ARRAY_SIZE(period) - 1 && period[i] < dev->rep[REP_PERIOD]) | ||
| 498 | i++; | ||
| 499 | dev->rep[REP_PERIOD] = period[i]; | ||
| 500 | |||
| 501 | while (j < ARRAY_SIZE(delay) - 1 && delay[j] < dev->rep[REP_DELAY]) | ||
| 502 | j++; | ||
| 503 | dev->rep[REP_DELAY] = delay[j]; | ||
| 504 | |||
| 505 | param = i | (j << 5); | ||
| 506 | return ps2_command(&atkbd->ps2dev, ¶m, ATKBD_CMD_SETREP); | ||
| 507 | } | ||
| 508 | |||
| 509 | static int atkbd_set_leds(struct atkbd *atkbd) | ||
| 510 | { | ||
| 500 | struct input_dev *dev = atkbd->dev; | 511 | struct input_dev *dev = atkbd->dev; |
| 501 | unsigned char param[2]; | 512 | unsigned char param[2]; |
| 502 | int i, j; | ||
| 503 | 513 | ||
| 504 | mutex_lock(&atkbd->event_mutex); | 514 | param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0) |
| 515 | | (test_bit(LED_NUML, dev->led) ? 2 : 0) | ||
| 516 | | (test_bit(LED_CAPSL, dev->led) ? 4 : 0); | ||
| 517 | if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS)) | ||
| 518 | return -1; | ||
| 505 | 519 | ||
| 506 | if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask)) { | 520 | if (atkbd->extra) { |
| 507 | param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0) | 521 | param[0] = 0; |
| 508 | | (test_bit(LED_NUML, dev->led) ? 2 : 0) | 522 | param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0) |
| 509 | | (test_bit(LED_CAPSL, dev->led) ? 4 : 0); | 523 | | (test_bit(LED_SLEEP, dev->led) ? 0x02 : 0) |
| 510 | ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS); | 524 | | (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0) |
| 511 | 525 | | (test_bit(LED_MISC, dev->led) ? 0x10 : 0) | |
| 512 | if (atkbd->extra) { | 526 | | (test_bit(LED_MUTE, dev->led) ? 0x20 : 0); |
| 513 | param[0] = 0; | 527 | if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS)) |
| 514 | param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0) | 528 | return -1; |
| 515 | | (test_bit(LED_SLEEP, dev->led) ? 0x02 : 0) | ||
| 516 | | (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0) | ||
| 517 | | (test_bit(LED_MISC, dev->led) ? 0x10 : 0) | ||
| 518 | | (test_bit(LED_MUTE, dev->led) ? 0x20 : 0); | ||
| 519 | ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS); | ||
| 520 | } | ||
| 521 | } | 529 | } |
| 522 | 530 | ||
| 523 | if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask)) { | 531 | return 0; |
| 524 | i = j = 0; | 532 | } |
| 525 | while (i < 31 && period[i] < dev->rep[REP_PERIOD]) | 533 | |
| 526 | i++; | 534 | /* |
| 527 | while (j < 3 && delay[j] < dev->rep[REP_DELAY]) | 535 | * atkbd_event_work() is used to complete processing of events that |
| 528 | j++; | 536 | * can not be processed by input_event() which is often called from |
| 529 | dev->rep[REP_PERIOD] = period[i]; | 537 | * interrupt context. |
| 530 | dev->rep[REP_DELAY] = delay[j]; | 538 | */ |
| 531 | param[0] = i | (j << 5); | 539 | |
| 532 | ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETREP); | 540 | static void atkbd_event_work(void *data) |
| 533 | } | 541 | { |
| 542 | struct atkbd *atkbd = data; | ||
| 543 | |||
| 544 | mutex_lock(&atkbd->event_mutex); | ||
| 545 | |||
| 546 | if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask)) | ||
| 547 | atkbd_set_leds(atkbd); | ||
| 548 | |||
| 549 | if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask)) | ||
| 550 | atkbd_set_repeat_rate(atkbd); | ||
| 534 | 551 | ||
| 535 | mutex_unlock(&atkbd->event_mutex); | 552 | mutex_unlock(&atkbd->event_mutex); |
| 536 | } | 553 | } |
| @@ -973,7 +990,6 @@ static int atkbd_reconnect(struct serio *serio) | |||
| 973 | { | 990 | { |
| 974 | struct atkbd *atkbd = serio_get_drvdata(serio); | 991 | struct atkbd *atkbd = serio_get_drvdata(serio); |
| 975 | struct serio_driver *drv = serio->drv; | 992 | struct serio_driver *drv = serio->drv; |
| 976 | unsigned char param[1]; | ||
| 977 | 993 | ||
| 978 | if (!atkbd || !drv) { | 994 | if (!atkbd || !drv) { |
| 979 | printk(KERN_DEBUG "atkbd: reconnect request, but serio is disconnected, ignoring...\n"); | 995 | printk(KERN_DEBUG "atkbd: reconnect request, but serio is disconnected, ignoring...\n"); |
| @@ -983,10 +999,6 @@ static int atkbd_reconnect(struct serio *serio) | |||
| 983 | atkbd_disable(atkbd); | 999 | atkbd_disable(atkbd); |
| 984 | 1000 | ||
| 985 | if (atkbd->write) { | 1001 | if (atkbd->write) { |
| 986 | param[0] = (test_bit(LED_SCROLLL, atkbd->dev->led) ? 1 : 0) | ||
| 987 | | (test_bit(LED_NUML, atkbd->dev->led) ? 2 : 0) | ||
| 988 | | (test_bit(LED_CAPSL, atkbd->dev->led) ? 4 : 0); | ||
| 989 | |||
| 990 | if (atkbd_probe(atkbd)) | 1002 | if (atkbd_probe(atkbd)) |
| 991 | return -1; | 1003 | return -1; |
| 992 | if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra)) | 1004 | if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra)) |
| @@ -994,8 +1006,13 @@ static int atkbd_reconnect(struct serio *serio) | |||
| 994 | 1006 | ||
| 995 | atkbd_activate(atkbd); | 1007 | atkbd_activate(atkbd); |
| 996 | 1008 | ||
| 997 | if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS)) | 1009 | /* |
| 998 | return -1; | 1010 | * Restore repeat rate and LEDs (that were reset by atkbd_activate) |
| 1011 | * to pre-resume state | ||
| 1012 | */ | ||
| 1013 | if (!atkbd->softrepeat) | ||
| 1014 | atkbd_set_repeat_rate(atkbd); | ||
| 1015 | atkbd_set_leds(atkbd); | ||
| 999 | } | 1016 | } |
| 1000 | 1017 | ||
| 1001 | atkbd_enable(atkbd); | 1018 | atkbd_enable(atkbd); |
diff --git a/drivers/input/misc/wistron_btns.c b/drivers/input/misc/wistron_btns.c index a8efc1af36..de0f46dd96 100644 --- a/drivers/input/misc/wistron_btns.c +++ b/drivers/input/misc/wistron_btns.c | |||
| @@ -259,11 +259,11 @@ static int __init dmi_matched(struct dmi_system_id *dmi) | |||
| 259 | return 1; | 259 | return 1; |
| 260 | } | 260 | } |
| 261 | 261 | ||
| 262 | static struct key_entry keymap_empty[] __initdata = { | 262 | static struct key_entry keymap_empty[] = { |
| 263 | { KE_END, 0 } | 263 | { KE_END, 0 } |
| 264 | }; | 264 | }; |
| 265 | 265 | ||
| 266 | static struct key_entry keymap_fs_amilo_pro_v2000[] __initdata = { | 266 | static struct key_entry keymap_fs_amilo_pro_v2000[] = { |
| 267 | { KE_KEY, 0x01, KEY_HELP }, | 267 | { KE_KEY, 0x01, KEY_HELP }, |
| 268 | { KE_KEY, 0x11, KEY_PROG1 }, | 268 | { KE_KEY, 0x11, KEY_PROG1 }, |
| 269 | { KE_KEY, 0x12, KEY_PROG2 }, | 269 | { KE_KEY, 0x12, KEY_PROG2 }, |
| @@ -273,7 +273,7 @@ static struct key_entry keymap_fs_amilo_pro_v2000[] __initdata = { | |||
| 273 | { KE_END, 0 } | 273 | { KE_END, 0 } |
| 274 | }; | 274 | }; |
| 275 | 275 | ||
| 276 | static struct key_entry keymap_fujitsu_n3510[] __initdata = { | 276 | static struct key_entry keymap_fujitsu_n3510[] = { |
| 277 | { KE_KEY, 0x11, KEY_PROG1 }, | 277 | { KE_KEY, 0x11, KEY_PROG1 }, |
| 278 | { KE_KEY, 0x12, KEY_PROG2 }, | 278 | { KE_KEY, 0x12, KEY_PROG2 }, |
| 279 | { KE_KEY, 0x36, KEY_WWW }, | 279 | { KE_KEY, 0x36, KEY_WWW }, |
| @@ -285,7 +285,7 @@ static struct key_entry keymap_fujitsu_n3510[] __initdata = { | |||
| 285 | { KE_END, 0 } | 285 | { KE_END, 0 } |
| 286 | }; | 286 | }; |
| 287 | 287 | ||
| 288 | static struct key_entry keymap_wistron_ms2111[] __initdata = { | 288 | static struct key_entry keymap_wistron_ms2111[] = { |
| 289 | { KE_KEY, 0x11, KEY_PROG1 }, | 289 | { KE_KEY, 0x11, KEY_PROG1 }, |
| 290 | { KE_KEY, 0x12, KEY_PROG2 }, | 290 | { KE_KEY, 0x12, KEY_PROG2 }, |
| 291 | { KE_KEY, 0x13, KEY_PROG3 }, | 291 | { KE_KEY, 0x13, KEY_PROG3 }, |
| @@ -294,7 +294,7 @@ static struct key_entry keymap_wistron_ms2111[] __initdata = { | |||
| 294 | { KE_END, 0 } | 294 | { KE_END, 0 } |
| 295 | }; | 295 | }; |
| 296 | 296 | ||
| 297 | static struct key_entry keymap_wistron_ms2141[] __initdata = { | 297 | static struct key_entry keymap_wistron_ms2141[] = { |
| 298 | { KE_KEY, 0x11, KEY_PROG1 }, | 298 | { KE_KEY, 0x11, KEY_PROG1 }, |
| 299 | { KE_KEY, 0x12, KEY_PROG2 }, | 299 | { KE_KEY, 0x12, KEY_PROG2 }, |
| 300 | { KE_WIFI, 0x30, 0 }, | 300 | { KE_WIFI, 0x30, 0 }, |
| @@ -307,7 +307,7 @@ static struct key_entry keymap_wistron_ms2141[] __initdata = { | |||
| 307 | { KE_END, 0 } | 307 | { KE_END, 0 } |
| 308 | }; | 308 | }; |
| 309 | 309 | ||
| 310 | static struct key_entry keymap_acer_aspire_1500[] __initdata = { | 310 | static struct key_entry keymap_acer_aspire_1500[] = { |
| 311 | { KE_KEY, 0x11, KEY_PROG1 }, | 311 | { KE_KEY, 0x11, KEY_PROG1 }, |
| 312 | { KE_KEY, 0x12, KEY_PROG2 }, | 312 | { KE_KEY, 0x12, KEY_PROG2 }, |
| 313 | { KE_WIFI, 0x30, 0 }, | 313 | { KE_WIFI, 0x30, 0 }, |
| @@ -317,7 +317,7 @@ static struct key_entry keymap_acer_aspire_1500[] __initdata = { | |||
| 317 | { KE_END, 0 } | 317 | { KE_END, 0 } |
| 318 | }; | 318 | }; |
| 319 | 319 | ||
| 320 | static struct key_entry keymap_acer_travelmate_240[] __initdata = { | 320 | static struct key_entry keymap_acer_travelmate_240[] = { |
| 321 | { KE_KEY, 0x31, KEY_MAIL }, | 321 | { KE_KEY, 0x31, KEY_MAIL }, |
| 322 | { KE_KEY, 0x36, KEY_WWW }, | 322 | { KE_KEY, 0x36, KEY_WWW }, |
| 323 | { KE_KEY, 0x11, KEY_PROG1 }, | 323 | { KE_KEY, 0x11, KEY_PROG1 }, |
| @@ -327,7 +327,7 @@ static struct key_entry keymap_acer_travelmate_240[] __initdata = { | |||
| 327 | { KE_END, 0 } | 327 | { KE_END, 0 } |
| 328 | }; | 328 | }; |
| 329 | 329 | ||
| 330 | static struct key_entry keymap_aopen_1559as[] __initdata = { | 330 | static struct key_entry keymap_aopen_1559as[] = { |
| 331 | { KE_KEY, 0x01, KEY_HELP }, | 331 | { KE_KEY, 0x01, KEY_HELP }, |
| 332 | { KE_KEY, 0x06, KEY_PROG3 }, | 332 | { KE_KEY, 0x06, KEY_PROG3 }, |
| 333 | { KE_KEY, 0x11, KEY_PROG1 }, | 333 | { KE_KEY, 0x11, KEY_PROG1 }, |
diff --git a/drivers/input/mouse/logips2pp.c b/drivers/input/mouse/logips2pp.c index eb03f3a3f8..7972eecbcf 100644 --- a/drivers/input/mouse/logips2pp.c +++ b/drivers/input/mouse/logips2pp.c | |||
| @@ -239,8 +239,7 @@ static const struct ps2pp_info *get_model_info(unsigned char model) | |||
| 239 | { 100, PS2PP_KIND_MX, /* MX510 */ | 239 | { 100, PS2PP_KIND_MX, /* MX510 */ |
| 240 | PS2PP_WHEEL | PS2PP_SIDE_BTN | PS2PP_TASK_BTN | | 240 | PS2PP_WHEEL | PS2PP_SIDE_BTN | PS2PP_TASK_BTN | |
| 241 | PS2PP_EXTRA_BTN | PS2PP_NAV_BTN }, | 241 | PS2PP_EXTRA_BTN | PS2PP_NAV_BTN }, |
| 242 | { 111, PS2PP_KIND_MX, /* MX300 */ | 242 | { 111, PS2PP_KIND_MX, PS2PP_WHEEL | PS2PP_SIDE_BTN }, /* MX300 reports task button as side */ |
| 243 | PS2PP_WHEEL | PS2PP_EXTRA_BTN | PS2PP_TASK_BTN }, | ||
| 244 | { 112, PS2PP_KIND_MX, /* MX500 */ | 243 | { 112, PS2PP_KIND_MX, /* MX500 */ |
| 245 | PS2PP_WHEEL | PS2PP_SIDE_BTN | PS2PP_TASK_BTN | | 244 | PS2PP_WHEEL | PS2PP_SIDE_BTN | PS2PP_TASK_BTN | |
| 246 | PS2PP_EXTRA_BTN | PS2PP_NAV_BTN }, | 245 | PS2PP_EXTRA_BTN | PS2PP_NAV_BTN }, |
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c index ec0119459b..9fb7eb6b0f 100644 --- a/drivers/input/mouse/psmouse-base.c +++ b/drivers/input/mouse/psmouse-base.c | |||
| @@ -485,13 +485,6 @@ static int im_explorer_detect(struct psmouse *psmouse, int set_properties) | |||
| 485 | param[0] = 40; | 485 | param[0] = 40; |
| 486 | ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE); | 486 | ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE); |
| 487 | 487 | ||
| 488 | param[0] = 200; | ||
| 489 | ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE); | ||
| 490 | param[0] = 200; | ||
| 491 | ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE); | ||
| 492 | param[0] = 60; | ||
| 493 | ps2_command(ps2dev, param, PSMOUSE_CMD_SETRATE); | ||
| 494 | |||
| 495 | if (set_properties) { | 488 | if (set_properties) { |
| 496 | set_bit(BTN_MIDDLE, psmouse->dev->keybit); | 489 | set_bit(BTN_MIDDLE, psmouse->dev->keybit); |
| 497 | set_bit(REL_WHEEL, psmouse->dev->relbit); | 490 | set_bit(REL_WHEEL, psmouse->dev->relbit); |
diff --git a/drivers/input/mouse/trackpoint.c b/drivers/input/mouse/trackpoint.c index 6d9ec9ab1b..ae5871a0e0 100644 --- a/drivers/input/mouse/trackpoint.c +++ b/drivers/input/mouse/trackpoint.c | |||
| @@ -183,21 +183,26 @@ static struct attribute_group trackpoint_attr_group = { | |||
| 183 | .attrs = trackpoint_attrs, | 183 | .attrs = trackpoint_attrs, |
| 184 | }; | 184 | }; |
| 185 | 185 | ||
| 186 | static void trackpoint_disconnect(struct psmouse *psmouse) | 186 | static int trackpoint_start_protocol(struct psmouse *psmouse, unsigned char *firmware_id) |
| 187 | { | 187 | { |
| 188 | sysfs_remove_group(&psmouse->ps2dev.serio->dev.kobj, &trackpoint_attr_group); | 188 | unsigned char param[2] = { 0 }; |
| 189 | 189 | ||
| 190 | kfree(psmouse->private); | 190 | if (ps2_command(&psmouse->ps2dev, param, MAKE_PS2_CMD(0, 2, TP_READ_ID))) |
| 191 | psmouse->private = NULL; | 191 | return -1; |
| 192 | |||
| 193 | if (param[0] != TP_MAGIC_IDENT) | ||
| 194 | return -1; | ||
| 195 | |||
| 196 | if (firmware_id) | ||
| 197 | *firmware_id = param[1]; | ||
| 198 | |||
| 199 | return 0; | ||
| 192 | } | 200 | } |
| 193 | 201 | ||
| 194 | static int trackpoint_sync(struct psmouse *psmouse) | 202 | static int trackpoint_sync(struct psmouse *psmouse) |
| 195 | { | 203 | { |
| 196 | unsigned char toggle; | ||
| 197 | struct trackpoint_data *tp = psmouse->private; | 204 | struct trackpoint_data *tp = psmouse->private; |
| 198 | 205 | unsigned char toggle; | |
| 199 | if (!tp) | ||
| 200 | return -1; | ||
| 201 | 206 | ||
| 202 | /* Disable features that may make device unusable with this driver */ | 207 | /* Disable features that may make device unusable with this driver */ |
| 203 | trackpoint_read(&psmouse->ps2dev, TP_TOGGLE_TWOHAND, &toggle); | 208 | trackpoint_read(&psmouse->ps2dev, TP_TOGGLE_TWOHAND, &toggle); |
| @@ -263,27 +268,38 @@ static void trackpoint_defaults(struct trackpoint_data *tp) | |||
| 263 | tp->ext_dev = TP_DEF_EXT_DEV; | 268 | tp->ext_dev = TP_DEF_EXT_DEV; |
| 264 | } | 269 | } |
| 265 | 270 | ||
| 271 | static void trackpoint_disconnect(struct psmouse *psmouse) | ||
| 272 | { | ||
| 273 | sysfs_remove_group(&psmouse->ps2dev.serio->dev.kobj, &trackpoint_attr_group); | ||
| 274 | |||
| 275 | kfree(psmouse->private); | ||
| 276 | psmouse->private = NULL; | ||
| 277 | } | ||
| 278 | |||
| 279 | static int trackpoint_reconnect(struct psmouse *psmouse) | ||
| 280 | { | ||
| 281 | if (trackpoint_start_protocol(psmouse, NULL)) | ||
| 282 | return -1; | ||
| 283 | |||
| 284 | if (trackpoint_sync(psmouse)) | ||
| 285 | return -1; | ||
| 286 | |||
| 287 | return 0; | ||
| 288 | } | ||
| 289 | |||
| 266 | int trackpoint_detect(struct psmouse *psmouse, int set_properties) | 290 | int trackpoint_detect(struct psmouse *psmouse, int set_properties) |
| 267 | { | 291 | { |
| 268 | struct trackpoint_data *priv; | 292 | struct trackpoint_data *priv; |
| 269 | struct ps2dev *ps2dev = &psmouse->ps2dev; | 293 | struct ps2dev *ps2dev = &psmouse->ps2dev; |
| 270 | unsigned char firmware_id; | 294 | unsigned char firmware_id; |
| 271 | unsigned char button_info; | 295 | unsigned char button_info; |
| 272 | unsigned char param[2]; | ||
| 273 | |||
| 274 | param[0] = param[1] = 0; | ||
| 275 | 296 | ||
| 276 | if (ps2_command(ps2dev, param, MAKE_PS2_CMD(0, 2, TP_READ_ID))) | 297 | if (trackpoint_start_protocol(psmouse, &firmware_id)) |
| 277 | return -1; | ||
| 278 | |||
| 279 | if (param[0] != TP_MAGIC_IDENT) | ||
| 280 | return -1; | 298 | return -1; |
| 281 | 299 | ||
| 282 | if (!set_properties) | 300 | if (!set_properties) |
| 283 | return 0; | 301 | return 0; |
| 284 | 302 | ||
| 285 | firmware_id = param[1]; | ||
| 286 | |||
| 287 | if (trackpoint_read(&psmouse->ps2dev, TP_EXT_BTN, &button_info)) { | 303 | if (trackpoint_read(&psmouse->ps2dev, TP_EXT_BTN, &button_info)) { |
| 288 | printk(KERN_WARNING "trackpoint.c: failed to get extended button data\n"); | 304 | printk(KERN_WARNING "trackpoint.c: failed to get extended button data\n"); |
| 289 | button_info = 0; | 305 | button_info = 0; |
| @@ -296,7 +312,7 @@ int trackpoint_detect(struct psmouse *psmouse, int set_properties) | |||
| 296 | psmouse->vendor = "IBM"; | 312 | psmouse->vendor = "IBM"; |
| 297 | psmouse->name = "TrackPoint"; | 313 | psmouse->name = "TrackPoint"; |
| 298 | 314 | ||
| 299 | psmouse->reconnect = trackpoint_sync; | 315 | psmouse->reconnect = trackpoint_reconnect; |
| 300 | psmouse->disconnect = trackpoint_disconnect; | 316 | psmouse->disconnect = trackpoint_disconnect; |
| 301 | 317 | ||
| 302 | trackpoint_defaults(priv); | 318 | trackpoint_defaults(priv); |
