diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-02 18:43:03 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-02 18:43:03 -0500 |
| commit | 6b3bf2049180c4d4d6f4432f9148621410c179a9 (patch) | |
| tree | 4f8d936d792ef3740d40189053155f7be331f7b0 | |
| parent | 36b31106b725ac2ca4941d4ee8dbb67df72ed5dd (diff) | |
| parent | 9ab7b25e6a30d2292bd6d4913b71c918ee1e21b4 (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
Input: elantech - touchpad driver miss-recognising logitech mice
Input: synaptics - ensure we reset the device on resume
Input: usbtouchscreen - fix eGalax HID ignoring
Input: ambakmi - fix timeout handling in amba_kmi_write()
Input: pxa930_trkball - fix write timeout handling
Input: struct device - replace bus_id with dev_name(), dev_set_name()
Input: bf54x-keys - fix debounce time validation
Input: spitzkbd - mark probe function as __devinit
Input: omap-keypad - mark probe function as __devinit
Input: corgi_ts - mark probe function as __devinit
Input: corgikbd - mark probe function as __devinit
Input: uvc - the button on the camera is KEY_CAMERA
Input: psmouse - make MOUSE_PS2_LIFEBOOK depend on X86
Input: atkbd - make forced_release_keys[] static
Input: usbtouchscreen - allow reporting calibrated data
| -rw-r--r-- | drivers/input/keyboard/atkbd.c | 4 | ||||
| -rw-r--r-- | drivers/input/keyboard/bf54x-keys.c | 4 | ||||
| -rw-r--r-- | drivers/input/keyboard/corgikbd.c | 8 | ||||
| -rw-r--r-- | drivers/input/keyboard/omap-keypad.c | 8 | ||||
| -rw-r--r-- | drivers/input/keyboard/spitzkbd.c | 8 | ||||
| -rw-r--r-- | drivers/input/mouse/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/input/mouse/elantech.c | 32 | ||||
| -rw-r--r-- | drivers/input/mouse/pxa930_trkball.c | 2 | ||||
| -rw-r--r-- | drivers/input/mouse/synaptics.c | 9 | ||||
| -rw-r--r-- | drivers/input/serio/ambakmi.c | 6 | ||||
| -rw-r--r-- | drivers/input/serio/gscps2.c | 2 | ||||
| -rw-r--r-- | drivers/input/serio/sa1111ps2.c | 4 | ||||
| -rw-r--r-- | drivers/input/touchscreen/atmel_tsadcc.c | 2 | ||||
| -rw-r--r-- | drivers/input/touchscreen/corgi_ts.c | 9 | ||||
| -rw-r--r-- | drivers/input/touchscreen/tsc2007.c | 3 | ||||
| -rw-r--r-- | drivers/input/touchscreen/usbtouchscreen.c | 20 | ||||
| -rw-r--r-- | drivers/media/video/uvc/uvc_status.c | 10 |
17 files changed, 84 insertions, 49 deletions
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index c3c8b9bc40ae..45470f18d7e9 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
| @@ -839,7 +839,7 @@ static void atkbd_disconnect(struct serio *serio) | |||
| 839 | */ | 839 | */ |
| 840 | static void atkbd_dell_laptop_keymap_fixup(struct atkbd *atkbd) | 840 | static void atkbd_dell_laptop_keymap_fixup(struct atkbd *atkbd) |
| 841 | { | 841 | { |
| 842 | const unsigned int forced_release_keys[] = { | 842 | static const unsigned int forced_release_keys[] = { |
| 843 | 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93, | 843 | 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93, |
| 844 | }; | 844 | }; |
| 845 | int i; | 845 | int i; |
| @@ -856,7 +856,7 @@ static void atkbd_dell_laptop_keymap_fixup(struct atkbd *atkbd) | |||
| 856 | */ | 856 | */ |
| 857 | static void atkbd_hp_keymap_fixup(struct atkbd *atkbd) | 857 | static void atkbd_hp_keymap_fixup(struct atkbd *atkbd) |
| 858 | { | 858 | { |
| 859 | const unsigned int forced_release_keys[] = { | 859 | static const unsigned int forced_release_keys[] = { |
| 860 | 0x94, | 860 | 0x94, |
| 861 | }; | 861 | }; |
| 862 | int i; | 862 | int i; |
diff --git a/drivers/input/keyboard/bf54x-keys.c b/drivers/input/keyboard/bf54x-keys.c index 19284016e0f4..ee855c5202e8 100644 --- a/drivers/input/keyboard/bf54x-keys.c +++ b/drivers/input/keyboard/bf54x-keys.c | |||
| @@ -209,8 +209,8 @@ static int __devinit bfin_kpad_probe(struct platform_device *pdev) | |||
| 209 | goto out; | 209 | goto out; |
| 210 | } | 210 | } |
| 211 | 211 | ||
| 212 | if (!pdata->debounce_time || !pdata->debounce_time > MAX_MULT || | 212 | if (!pdata->debounce_time || pdata->debounce_time > MAX_MULT || |
| 213 | !pdata->coldrive_time || !pdata->coldrive_time > MAX_MULT) { | 213 | !pdata->coldrive_time || pdata->coldrive_time > MAX_MULT) { |
| 214 | printk(KERN_ERR DRV_NAME | 214 | printk(KERN_ERR DRV_NAME |
| 215 | ": Invalid Debounce/Columdrive Time from pdata\n"); | 215 | ": Invalid Debounce/Columdrive Time from pdata\n"); |
| 216 | bfin_write_KPAD_MSEL(0xFF0); /* Default MSEL */ | 216 | bfin_write_KPAD_MSEL(0xFF0); /* Default MSEL */ |
diff --git a/drivers/input/keyboard/corgikbd.c b/drivers/input/keyboard/corgikbd.c index c8ed065ea0cb..abb04c82c622 100644 --- a/drivers/input/keyboard/corgikbd.c +++ b/drivers/input/keyboard/corgikbd.c | |||
| @@ -288,7 +288,7 @@ static int corgikbd_resume(struct platform_device *dev) | |||
| 288 | #define corgikbd_resume NULL | 288 | #define corgikbd_resume NULL |
| 289 | #endif | 289 | #endif |
| 290 | 290 | ||
| 291 | static int __init corgikbd_probe(struct platform_device *pdev) | 291 | static int __devinit corgikbd_probe(struct platform_device *pdev) |
| 292 | { | 292 | { |
| 293 | struct corgikbd *corgikbd; | 293 | struct corgikbd *corgikbd; |
| 294 | struct input_dev *input_dev; | 294 | struct input_dev *input_dev; |
| @@ -368,7 +368,7 @@ static int __init corgikbd_probe(struct platform_device *pdev) | |||
| 368 | return err; | 368 | return err; |
| 369 | } | 369 | } |
| 370 | 370 | ||
| 371 | static int corgikbd_remove(struct platform_device *pdev) | 371 | static int __devexit corgikbd_remove(struct platform_device *pdev) |
| 372 | { | 372 | { |
| 373 | int i; | 373 | int i; |
| 374 | struct corgikbd *corgikbd = platform_get_drvdata(pdev); | 374 | struct corgikbd *corgikbd = platform_get_drvdata(pdev); |
| @@ -388,7 +388,7 @@ static int corgikbd_remove(struct platform_device *pdev) | |||
| 388 | 388 | ||
| 389 | static struct platform_driver corgikbd_driver = { | 389 | static struct platform_driver corgikbd_driver = { |
| 390 | .probe = corgikbd_probe, | 390 | .probe = corgikbd_probe, |
| 391 | .remove = corgikbd_remove, | 391 | .remove = __devexit_p(corgikbd_remove), |
| 392 | .suspend = corgikbd_suspend, | 392 | .suspend = corgikbd_suspend, |
| 393 | .resume = corgikbd_resume, | 393 | .resume = corgikbd_resume, |
| 394 | .driver = { | 394 | .driver = { |
| @@ -397,7 +397,7 @@ static struct platform_driver corgikbd_driver = { | |||
| 397 | }, | 397 | }, |
| 398 | }; | 398 | }; |
| 399 | 399 | ||
| 400 | static int __devinit corgikbd_init(void) | 400 | static int __init corgikbd_init(void) |
| 401 | { | 401 | { |
| 402 | return platform_driver_register(&corgikbd_driver); | 402 | return platform_driver_register(&corgikbd_driver); |
| 403 | } | 403 | } |
diff --git a/drivers/input/keyboard/omap-keypad.c b/drivers/input/keyboard/omap-keypad.c index 3f3d1198cdb1..058fa8b02c21 100644 --- a/drivers/input/keyboard/omap-keypad.c +++ b/drivers/input/keyboard/omap-keypad.c | |||
| @@ -279,7 +279,7 @@ static int omap_kp_resume(struct platform_device *dev) | |||
| 279 | #define omap_kp_resume NULL | 279 | #define omap_kp_resume NULL |
| 280 | #endif | 280 | #endif |
| 281 | 281 | ||
| 282 | static int __init omap_kp_probe(struct platform_device *pdev) | 282 | static int __devinit omap_kp_probe(struct platform_device *pdev) |
| 283 | { | 283 | { |
| 284 | struct omap_kp *omap_kp; | 284 | struct omap_kp *omap_kp; |
| 285 | struct input_dev *input_dev; | 285 | struct input_dev *input_dev; |
| @@ -422,7 +422,7 @@ err1: | |||
| 422 | return -EINVAL; | 422 | return -EINVAL; |
| 423 | } | 423 | } |
| 424 | 424 | ||
| 425 | static int omap_kp_remove(struct platform_device *pdev) | 425 | static int __devexit omap_kp_remove(struct platform_device *pdev) |
| 426 | { | 426 | { |
| 427 | struct omap_kp *omap_kp = platform_get_drvdata(pdev); | 427 | struct omap_kp *omap_kp = platform_get_drvdata(pdev); |
| 428 | 428 | ||
| @@ -454,7 +454,7 @@ static int omap_kp_remove(struct platform_device *pdev) | |||
| 454 | 454 | ||
| 455 | static struct platform_driver omap_kp_driver = { | 455 | static struct platform_driver omap_kp_driver = { |
| 456 | .probe = omap_kp_probe, | 456 | .probe = omap_kp_probe, |
| 457 | .remove = omap_kp_remove, | 457 | .remove = __devexit_p(omap_kp_remove), |
| 458 | .suspend = omap_kp_suspend, | 458 | .suspend = omap_kp_suspend, |
| 459 | .resume = omap_kp_resume, | 459 | .resume = omap_kp_resume, |
| 460 | .driver = { | 460 | .driver = { |
| @@ -463,7 +463,7 @@ static struct platform_driver omap_kp_driver = { | |||
| 463 | }, | 463 | }, |
| 464 | }; | 464 | }; |
| 465 | 465 | ||
| 466 | static int __devinit omap_kp_init(void) | 466 | static int __init omap_kp_init(void) |
| 467 | { | 467 | { |
| 468 | printk(KERN_INFO "OMAP Keypad Driver\n"); | 468 | printk(KERN_INFO "OMAP Keypad Driver\n"); |
| 469 | return platform_driver_register(&omap_kp_driver); | 469 | return platform_driver_register(&omap_kp_driver); |
diff --git a/drivers/input/keyboard/spitzkbd.c b/drivers/input/keyboard/spitzkbd.c index c48b76a46a58..9d1781a618e9 100644 --- a/drivers/input/keyboard/spitzkbd.c +++ b/drivers/input/keyboard/spitzkbd.c | |||
| @@ -343,7 +343,7 @@ static int spitzkbd_resume(struct platform_device *dev) | |||
| 343 | #define spitzkbd_resume NULL | 343 | #define spitzkbd_resume NULL |
| 344 | #endif | 344 | #endif |
| 345 | 345 | ||
| 346 | static int __init spitzkbd_probe(struct platform_device *dev) | 346 | static int __devinit spitzkbd_probe(struct platform_device *dev) |
| 347 | { | 347 | { |
| 348 | struct spitzkbd *spitzkbd; | 348 | struct spitzkbd *spitzkbd; |
| 349 | struct input_dev *input_dev; | 349 | struct input_dev *input_dev; |
| @@ -444,7 +444,7 @@ static int __init spitzkbd_probe(struct platform_device *dev) | |||
| 444 | return err; | 444 | return err; |
| 445 | } | 445 | } |
| 446 | 446 | ||
| 447 | static int spitzkbd_remove(struct platform_device *dev) | 447 | static int __devexit spitzkbd_remove(struct platform_device *dev) |
| 448 | { | 448 | { |
| 449 | int i; | 449 | int i; |
| 450 | struct spitzkbd *spitzkbd = platform_get_drvdata(dev); | 450 | struct spitzkbd *spitzkbd = platform_get_drvdata(dev); |
| @@ -470,7 +470,7 @@ static int spitzkbd_remove(struct platform_device *dev) | |||
| 470 | 470 | ||
| 471 | static struct platform_driver spitzkbd_driver = { | 471 | static struct platform_driver spitzkbd_driver = { |
| 472 | .probe = spitzkbd_probe, | 472 | .probe = spitzkbd_probe, |
| 473 | .remove = spitzkbd_remove, | 473 | .remove = __devexit_p(spitzkbd_remove), |
| 474 | .suspend = spitzkbd_suspend, | 474 | .suspend = spitzkbd_suspend, |
| 475 | .resume = spitzkbd_resume, | 475 | .resume = spitzkbd_resume, |
| 476 | .driver = { | 476 | .driver = { |
| @@ -479,7 +479,7 @@ static struct platform_driver spitzkbd_driver = { | |||
| 479 | }, | 479 | }, |
| 480 | }; | 480 | }; |
| 481 | 481 | ||
| 482 | static int __devinit spitzkbd_init(void) | 482 | static int __init spitzkbd_init(void) |
| 483 | { | 483 | { |
| 484 | return platform_driver_register(&spitzkbd_driver); | 484 | return platform_driver_register(&spitzkbd_driver); |
| 485 | } | 485 | } |
diff --git a/drivers/input/mouse/Kconfig b/drivers/input/mouse/Kconfig index 093c8c1bca74..9705f3a00a3d 100644 --- a/drivers/input/mouse/Kconfig +++ b/drivers/input/mouse/Kconfig | |||
| @@ -70,7 +70,7 @@ config MOUSE_PS2_SYNAPTICS | |||
| 70 | config MOUSE_PS2_LIFEBOOK | 70 | config MOUSE_PS2_LIFEBOOK |
| 71 | bool "Fujitsu Lifebook PS/2 mouse protocol extension" if EMBEDDED | 71 | bool "Fujitsu Lifebook PS/2 mouse protocol extension" if EMBEDDED |
| 72 | default y | 72 | default y |
| 73 | depends on MOUSE_PS2 | 73 | depends on MOUSE_PS2 && X86 |
| 74 | help | 74 | help |
| 75 | Say Y here if you have a Fujitsu B-series Lifebook PS/2 | 75 | Say Y here if you have a Fujitsu B-series Lifebook PS/2 |
| 76 | TouchScreen connected to your system. | 76 | TouchScreen connected to your system. |
diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c index b9a25d57bc5e..6ab0eb1ada1c 100644 --- a/drivers/input/mouse/elantech.c +++ b/drivers/input/mouse/elantech.c | |||
| @@ -542,7 +542,7 @@ int elantech_detect(struct psmouse *psmouse, int set_properties) | |||
| 542 | ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || | 542 | ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || |
| 543 | ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || | 543 | ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || |
| 544 | ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) { | 544 | ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) { |
| 545 | pr_err("elantech.c: sending Elantech magic knock failed.\n"); | 545 | pr_debug("elantech.c: sending Elantech magic knock failed.\n"); |
| 546 | return -1; | 546 | return -1; |
| 547 | } | 547 | } |
| 548 | 548 | ||
| @@ -551,8 +551,27 @@ int elantech_detect(struct psmouse *psmouse, int set_properties) | |||
| 551 | * set of magic numbers | 551 | * set of magic numbers |
| 552 | */ | 552 | */ |
| 553 | if (param[0] != 0x3c || param[1] != 0x03 || param[2] != 0xc8) { | 553 | if (param[0] != 0x3c || param[1] != 0x03 || param[2] != 0xc8) { |
| 554 | pr_info("elantech.c: unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n", | 554 | pr_debug("elantech.c: " |
| 555 | param[0], param[1], param[2]); | 555 | "unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n", |
| 556 | param[0], param[1], param[2]); | ||
| 557 | return -1; | ||
| 558 | } | ||
| 559 | |||
| 560 | /* | ||
| 561 | * Query touchpad's firmware version and see if it reports known | ||
| 562 | * value to avoid mis-detection. Logitech mice are known to respond | ||
| 563 | * to Elantech magic knock and there might be more. | ||
| 564 | */ | ||
| 565 | if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) { | ||
| 566 | pr_debug("elantech.c: failed to query firmware version.\n"); | ||
| 567 | return -1; | ||
| 568 | } | ||
| 569 | |||
| 570 | pr_debug("elantech.c: Elantech version query result 0x%02x, 0x%02x, 0x%02x.\n", | ||
| 571 | param[0], param[1], param[2]); | ||
| 572 | |||
| 573 | if (param[0] == 0 || param[1] != 0) { | ||
| 574 | pr_debug("elantech.c: Probably not a real Elantech touchpad. Aborting.\n"); | ||
| 556 | return -1; | 575 | return -1; |
| 557 | } | 576 | } |
| 558 | 577 | ||
| @@ -600,8 +619,7 @@ int elantech_init(struct psmouse *psmouse) | |||
| 600 | int i, error; | 619 | int i, error; |
| 601 | unsigned char param[3]; | 620 | unsigned char param[3]; |
| 602 | 621 | ||
| 603 | etd = kzalloc(sizeof(struct elantech_data), GFP_KERNEL); | 622 | psmouse->private = etd = kzalloc(sizeof(struct elantech_data), GFP_KERNEL); |
| 604 | psmouse->private = etd; | ||
| 605 | if (!etd) | 623 | if (!etd) |
| 606 | return -1; | 624 | return -1; |
| 607 | 625 | ||
| @@ -610,14 +628,12 @@ int elantech_init(struct psmouse *psmouse) | |||
| 610 | etd->parity[i] = etd->parity[i & (i - 1)] ^ 1; | 628 | etd->parity[i] = etd->parity[i & (i - 1)] ^ 1; |
| 611 | 629 | ||
| 612 | /* | 630 | /* |
| 613 | * Find out what version hardware this is | 631 | * Do the version query again so we can store the result |
| 614 | */ | 632 | */ |
| 615 | if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) { | 633 | if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) { |
| 616 | pr_err("elantech.c: failed to query firmware version.\n"); | 634 | pr_err("elantech.c: failed to query firmware version.\n"); |
| 617 | goto init_fail; | 635 | goto init_fail; |
| 618 | } | 636 | } |
| 619 | pr_info("elantech.c: Elantech version query result 0x%02x, 0x%02x, 0x%02x.\n", | ||
| 620 | param[0], param[1], param[2]); | ||
| 621 | etd->fw_version_maj = param[0]; | 637 | etd->fw_version_maj = param[0]; |
| 622 | etd->fw_version_min = param[2]; | 638 | etd->fw_version_min = param[2]; |
| 623 | 639 | ||
diff --git a/drivers/input/mouse/pxa930_trkball.c b/drivers/input/mouse/pxa930_trkball.c index d297accf9a7f..1e827ad0afbe 100644 --- a/drivers/input/mouse/pxa930_trkball.c +++ b/drivers/input/mouse/pxa930_trkball.c | |||
| @@ -83,7 +83,7 @@ static int write_tbcr(struct pxa930_trkball *trkball, int v) | |||
| 83 | 83 | ||
| 84 | __raw_writel(v, trkball->mmio_base + TBCR); | 84 | __raw_writel(v, trkball->mmio_base + TBCR); |
| 85 | 85 | ||
| 86 | while (i--) { | 86 | while (--i) { |
| 87 | if (__raw_readl(trkball->mmio_base + TBCR) == v) | 87 | if (__raw_readl(trkball->mmio_base + TBCR) == v) |
| 88 | break; | 88 | break; |
| 89 | msleep(1); | 89 | msleep(1); |
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index 865fc69e9bc3..f3e4f7b0240d 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c | |||
| @@ -182,11 +182,6 @@ static int synaptics_identify(struct psmouse *psmouse) | |||
| 182 | 182 | ||
| 183 | static int synaptics_query_hardware(struct psmouse *psmouse) | 183 | static int synaptics_query_hardware(struct psmouse *psmouse) |
| 184 | { | 184 | { |
| 185 | int retries = 0; | ||
| 186 | |||
| 187 | while ((retries++ < 3) && psmouse_reset(psmouse)) | ||
| 188 | /* empty */; | ||
| 189 | |||
| 190 | if (synaptics_identify(psmouse)) | 185 | if (synaptics_identify(psmouse)) |
| 191 | return -1; | 186 | return -1; |
| 192 | if (synaptics_model_id(psmouse)) | 187 | if (synaptics_model_id(psmouse)) |
| @@ -582,6 +577,8 @@ static int synaptics_reconnect(struct psmouse *psmouse) | |||
| 582 | struct synaptics_data *priv = psmouse->private; | 577 | struct synaptics_data *priv = psmouse->private; |
| 583 | struct synaptics_data old_priv = *priv; | 578 | struct synaptics_data old_priv = *priv; |
| 584 | 579 | ||
| 580 | psmouse_reset(psmouse); | ||
| 581 | |||
| 585 | if (synaptics_detect(psmouse, 0)) | 582 | if (synaptics_detect(psmouse, 0)) |
| 586 | return -1; | 583 | return -1; |
| 587 | 584 | ||
| @@ -640,6 +637,8 @@ int synaptics_init(struct psmouse *psmouse) | |||
| 640 | if (!priv) | 637 | if (!priv) |
| 641 | return -1; | 638 | return -1; |
| 642 | 639 | ||
| 640 | psmouse_reset(psmouse); | ||
| 641 | |||
| 643 | if (synaptics_query_hardware(psmouse)) { | 642 | if (synaptics_query_hardware(psmouse)) { |
| 644 | printk(KERN_ERR "Unable to query Synaptics hardware.\n"); | 643 | printk(KERN_ERR "Unable to query Synaptics hardware.\n"); |
| 645 | goto init_fail; | 644 | goto init_fail; |
diff --git a/drivers/input/serio/ambakmi.c b/drivers/input/serio/ambakmi.c index b10ffae7c39b..e29cdc13a199 100644 --- a/drivers/input/serio/ambakmi.c +++ b/drivers/input/serio/ambakmi.c | |||
| @@ -57,7 +57,7 @@ static int amba_kmi_write(struct serio *io, unsigned char val) | |||
| 57 | struct amba_kmi_port *kmi = io->port_data; | 57 | struct amba_kmi_port *kmi = io->port_data; |
| 58 | unsigned int timeleft = 10000; /* timeout in 100ms */ | 58 | unsigned int timeleft = 10000; /* timeout in 100ms */ |
| 59 | 59 | ||
| 60 | while ((readb(KMISTAT) & KMISTAT_TXEMPTY) == 0 && timeleft--) | 60 | while ((readb(KMISTAT) & KMISTAT_TXEMPTY) == 0 && --timeleft) |
| 61 | udelay(10); | 61 | udelay(10); |
| 62 | 62 | ||
| 63 | if (timeleft) | 63 | if (timeleft) |
| @@ -129,8 +129,8 @@ static int amba_kmi_probe(struct amba_device *dev, void *id) | |||
| 129 | io->write = amba_kmi_write; | 129 | io->write = amba_kmi_write; |
| 130 | io->open = amba_kmi_open; | 130 | io->open = amba_kmi_open; |
| 131 | io->close = amba_kmi_close; | 131 | io->close = amba_kmi_close; |
| 132 | strlcpy(io->name, dev->dev.bus_id, sizeof(io->name)); | 132 | strlcpy(io->name, dev_name(&dev->dev), sizeof(io->name)); |
| 133 | strlcpy(io->phys, dev->dev.bus_id, sizeof(io->phys)); | 133 | strlcpy(io->phys, dev_name(&dev->dev), sizeof(io->phys)); |
| 134 | io->port_data = kmi; | 134 | io->port_data = kmi; |
| 135 | io->dev.parent = &dev->dev; | 135 | io->dev.parent = &dev->dev; |
| 136 | 136 | ||
diff --git a/drivers/input/serio/gscps2.c b/drivers/input/serio/gscps2.c index adc3bd6e7f7b..bd0f92d9f40f 100644 --- a/drivers/input/serio/gscps2.c +++ b/drivers/input/serio/gscps2.c | |||
| @@ -359,7 +359,7 @@ static int __init gscps2_probe(struct parisc_device *dev) | |||
| 359 | 359 | ||
| 360 | snprintf(serio->name, sizeof(serio->name), "GSC PS/2 %s", | 360 | snprintf(serio->name, sizeof(serio->name), "GSC PS/2 %s", |
| 361 | (ps2port->id == GSC_ID_KEYBOARD) ? "keyboard" : "mouse"); | 361 | (ps2port->id == GSC_ID_KEYBOARD) ? "keyboard" : "mouse"); |
| 362 | strlcpy(serio->phys, dev->dev.bus_id, sizeof(serio->phys)); | 362 | strlcpy(serio->phys, dev_name(&dev->dev), sizeof(serio->phys)); |
| 363 | serio->id.type = SERIO_8042; | 363 | serio->id.type = SERIO_8042; |
| 364 | serio->write = gscps2_write; | 364 | serio->write = gscps2_write; |
| 365 | serio->open = gscps2_open; | 365 | serio->open = gscps2_open; |
diff --git a/drivers/input/serio/sa1111ps2.c b/drivers/input/serio/sa1111ps2.c index 2ad88780a170..57953c0eb82f 100644 --- a/drivers/input/serio/sa1111ps2.c +++ b/drivers/input/serio/sa1111ps2.c | |||
| @@ -246,8 +246,8 @@ static int __devinit ps2_probe(struct sa1111_dev *dev) | |||
| 246 | serio->write = ps2_write; | 246 | serio->write = ps2_write; |
| 247 | serio->open = ps2_open; | 247 | serio->open = ps2_open; |
| 248 | serio->close = ps2_close; | 248 | serio->close = ps2_close; |
| 249 | strlcpy(serio->name, dev->dev.bus_id, sizeof(serio->name)); | 249 | strlcpy(serio->name, dev_name(&dev->dev), sizeof(serio->name)); |
| 250 | strlcpy(serio->phys, dev->dev.bus_id, sizeof(serio->phys)); | 250 | strlcpy(serio->phys, dev_name(&dev->dev), sizeof(serio->phys)); |
| 251 | serio->port_data = ps2if; | 251 | serio->port_data = ps2if; |
| 252 | serio->dev.parent = &dev->dev; | 252 | serio->dev.parent = &dev->dev; |
| 253 | ps2if->io = serio; | 253 | ps2if->io = serio; |
diff --git a/drivers/input/touchscreen/atmel_tsadcc.c b/drivers/input/touchscreen/atmel_tsadcc.c index a89a6a8f05e6..055969e8be13 100644 --- a/drivers/input/touchscreen/atmel_tsadcc.c +++ b/drivers/input/touchscreen/atmel_tsadcc.c | |||
| @@ -236,7 +236,7 @@ static int __devinit atmel_tsadcc_probe(struct platform_device *pdev) | |||
| 236 | ts_dev->bufferedmeasure = 0; | 236 | ts_dev->bufferedmeasure = 0; |
| 237 | 237 | ||
| 238 | snprintf(ts_dev->phys, sizeof(ts_dev->phys), | 238 | snprintf(ts_dev->phys, sizeof(ts_dev->phys), |
| 239 | "%s/input0", pdev->dev.bus_id); | 239 | "%s/input0", dev_name(&pdev->dev)); |
| 240 | 240 | ||
| 241 | input_dev->name = "atmel touch screen controller"; | 241 | input_dev->name = "atmel touch screen controller"; |
| 242 | input_dev->phys = ts_dev->phys; | 242 | input_dev->phys = ts_dev->phys; |
diff --git a/drivers/input/touchscreen/corgi_ts.c b/drivers/input/touchscreen/corgi_ts.c index 65202c9f63ff..3fb51b54fe61 100644 --- a/drivers/input/touchscreen/corgi_ts.c +++ b/drivers/input/touchscreen/corgi_ts.c | |||
| @@ -268,7 +268,7 @@ static int corgits_resume(struct platform_device *dev) | |||
| 268 | #define corgits_resume NULL | 268 | #define corgits_resume NULL |
| 269 | #endif | 269 | #endif |
| 270 | 270 | ||
| 271 | static int __init corgits_probe(struct platform_device *pdev) | 271 | static int __devinit corgits_probe(struct platform_device *pdev) |
| 272 | { | 272 | { |
| 273 | struct corgi_ts *corgi_ts; | 273 | struct corgi_ts *corgi_ts; |
| 274 | struct input_dev *input_dev; | 274 | struct input_dev *input_dev; |
| @@ -343,7 +343,7 @@ static int __init corgits_probe(struct platform_device *pdev) | |||
| 343 | return err; | 343 | return err; |
| 344 | } | 344 | } |
| 345 | 345 | ||
| 346 | static int corgits_remove(struct platform_device *pdev) | 346 | static int __devexit corgits_remove(struct platform_device *pdev) |
| 347 | { | 347 | { |
| 348 | struct corgi_ts *corgi_ts = platform_get_drvdata(pdev); | 348 | struct corgi_ts *corgi_ts = platform_get_drvdata(pdev); |
| 349 | 349 | ||
| @@ -352,12 +352,13 @@ static int corgits_remove(struct platform_device *pdev) | |||
| 352 | corgi_ts->machinfo->put_hsync(); | 352 | corgi_ts->machinfo->put_hsync(); |
| 353 | input_unregister_device(corgi_ts->input); | 353 | input_unregister_device(corgi_ts->input); |
| 354 | kfree(corgi_ts); | 354 | kfree(corgi_ts); |
| 355 | |||
| 355 | return 0; | 356 | return 0; |
| 356 | } | 357 | } |
| 357 | 358 | ||
| 358 | static struct platform_driver corgits_driver = { | 359 | static struct platform_driver corgits_driver = { |
| 359 | .probe = corgits_probe, | 360 | .probe = corgits_probe, |
| 360 | .remove = corgits_remove, | 361 | .remove = __devexit_p(corgits_remove), |
| 361 | .suspend = corgits_suspend, | 362 | .suspend = corgits_suspend, |
| 362 | .resume = corgits_resume, | 363 | .resume = corgits_resume, |
| 363 | .driver = { | 364 | .driver = { |
| @@ -366,7 +367,7 @@ static struct platform_driver corgits_driver = { | |||
| 366 | }, | 367 | }, |
| 367 | }; | 368 | }; |
| 368 | 369 | ||
| 369 | static int __devinit corgits_init(void) | 370 | static int __init corgits_init(void) |
| 370 | { | 371 | { |
| 371 | return platform_driver_register(&corgits_driver); | 372 | return platform_driver_register(&corgits_driver); |
| 372 | } | 373 | } |
diff --git a/drivers/input/touchscreen/tsc2007.c b/drivers/input/touchscreen/tsc2007.c index b75dc2990574..4ab070246892 100644 --- a/drivers/input/touchscreen/tsc2007.c +++ b/drivers/input/touchscreen/tsc2007.c | |||
| @@ -289,7 +289,8 @@ static int tsc2007_probe(struct i2c_client *client, | |||
| 289 | 289 | ||
| 290 | pdata->init_platform_hw(); | 290 | pdata->init_platform_hw(); |
| 291 | 291 | ||
| 292 | snprintf(ts->phys, sizeof(ts->phys), "%s/input0", client->dev.bus_id); | 292 | snprintf(ts->phys, sizeof(ts->phys), |
| 293 | "%s/input0", dev_name(&client->dev)); | ||
| 293 | 294 | ||
| 294 | input_dev->name = "TSC2007 Touchscreen"; | 295 | input_dev->name = "TSC2007 Touchscreen"; |
| 295 | input_dev->phys = ts->phys; | 296 | input_dev->phys = ts->phys; |
diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c index 5080b26ba160..fb7cb9bdfbd5 100644 --- a/drivers/input/touchscreen/usbtouchscreen.c +++ b/drivers/input/touchscreen/usbtouchscreen.c | |||
| @@ -60,6 +60,10 @@ static int swap_xy; | |||
| 60 | module_param(swap_xy, bool, 0644); | 60 | module_param(swap_xy, bool, 0644); |
| 61 | MODULE_PARM_DESC(swap_xy, "If set X and Y axes are swapped."); | 61 | MODULE_PARM_DESC(swap_xy, "If set X and Y axes are swapped."); |
| 62 | 62 | ||
| 63 | static int hwcalib_xy; | ||
| 64 | module_param(hwcalib_xy, bool, 0644); | ||
| 65 | MODULE_PARM_DESC(hwcalib_xy, "If set hw-calibrated X/Y are used if available"); | ||
| 66 | |||
| 63 | /* device specifc data/functions */ | 67 | /* device specifc data/functions */ |
| 64 | struct usbtouch_usb; | 68 | struct usbtouch_usb; |
| 65 | struct usbtouch_device_info { | 69 | struct usbtouch_device_info { |
| @@ -118,6 +122,7 @@ enum { | |||
| 118 | 122 | ||
| 119 | #define USB_DEVICE_HID_CLASS(vend, prod) \ | 123 | #define USB_DEVICE_HID_CLASS(vend, prod) \ |
| 120 | .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS \ | 124 | .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS \ |
| 125 | | USB_DEVICE_ID_MATCH_INT_PROTOCOL \ | ||
| 121 | | USB_DEVICE_ID_MATCH_DEVICE, \ | 126 | | USB_DEVICE_ID_MATCH_DEVICE, \ |
| 122 | .idVendor = (vend), \ | 127 | .idVendor = (vend), \ |
| 123 | .idProduct = (prod), \ | 128 | .idProduct = (prod), \ |
| @@ -260,8 +265,13 @@ static int panjit_read_data(struct usbtouch_usb *dev, unsigned char *pkt) | |||
| 260 | 265 | ||
| 261 | static int mtouch_read_data(struct usbtouch_usb *dev, unsigned char *pkt) | 266 | static int mtouch_read_data(struct usbtouch_usb *dev, unsigned char *pkt) |
| 262 | { | 267 | { |
| 263 | dev->x = (pkt[8] << 8) | pkt[7]; | 268 | if (hwcalib_xy) { |
| 264 | dev->y = (pkt[10] << 8) | pkt[9]; | 269 | dev->x = (pkt[4] << 8) | pkt[3]; |
| 270 | dev->y = 0xffff - ((pkt[6] << 8) | pkt[5]); | ||
| 271 | } else { | ||
| 272 | dev->x = (pkt[8] << 8) | pkt[7]; | ||
| 273 | dev->y = (pkt[10] << 8) | pkt[9]; | ||
| 274 | } | ||
| 265 | dev->touch = (pkt[2] & 0x40) ? 1 : 0; | 275 | dev->touch = (pkt[2] & 0x40) ? 1 : 0; |
| 266 | 276 | ||
| 267 | return 1; | 277 | return 1; |
| @@ -294,6 +304,12 @@ static int mtouch_init(struct usbtouch_usb *usbtouch) | |||
| 294 | return ret; | 304 | return ret; |
| 295 | } | 305 | } |
| 296 | 306 | ||
| 307 | /* Default min/max xy are the raw values, override if using hw-calib */ | ||
| 308 | if (hwcalib_xy) { | ||
| 309 | input_set_abs_params(usbtouch->input, ABS_X, 0, 0xffff, 0, 0); | ||
| 310 | input_set_abs_params(usbtouch->input, ABS_Y, 0, 0xffff, 0, 0); | ||
| 311 | } | ||
| 312 | |||
| 297 | return 0; | 313 | return 0; |
| 298 | } | 314 | } |
| 299 | #endif | 315 | #endif |
diff --git a/drivers/media/video/uvc/uvc_status.c b/drivers/media/video/uvc/uvc_status.c index c1e4ae27c613..c705f248da88 100644 --- a/drivers/media/video/uvc/uvc_status.c +++ b/drivers/media/video/uvc/uvc_status.c | |||
| @@ -46,8 +46,8 @@ static int uvc_input_init(struct uvc_device *dev) | |||
| 46 | usb_to_input_id(udev, &input->id); | 46 | usb_to_input_id(udev, &input->id); |
| 47 | input->dev.parent = &dev->intf->dev; | 47 | input->dev.parent = &dev->intf->dev; |
| 48 | 48 | ||
| 49 | set_bit(EV_KEY, input->evbit); | 49 | __set_bit(EV_KEY, input->evbit); |
| 50 | set_bit(BTN_0, input->keybit); | 50 | __set_bit(KEY_CAMERA, input->keybit); |
| 51 | 51 | ||
| 52 | if ((ret = input_register_device(input)) < 0) | 52 | if ((ret = input_register_device(input)) < 0) |
| 53 | goto error; | 53 | goto error; |
| @@ -70,8 +70,10 @@ static void uvc_input_cleanup(struct uvc_device *dev) | |||
| 70 | static void uvc_input_report_key(struct uvc_device *dev, unsigned int code, | 70 | static void uvc_input_report_key(struct uvc_device *dev, unsigned int code, |
| 71 | int value) | 71 | int value) |
| 72 | { | 72 | { |
| 73 | if (dev->input) | 73 | if (dev->input) { |
| 74 | input_report_key(dev->input, code, value); | 74 | input_report_key(dev->input, code, value); |
| 75 | input_sync(dev->input); | ||
| 76 | } | ||
| 75 | } | 77 | } |
| 76 | 78 | ||
| 77 | #else | 79 | #else |
| @@ -96,7 +98,7 @@ static void uvc_event_streaming(struct uvc_device *dev, __u8 *data, int len) | |||
| 96 | return; | 98 | return; |
| 97 | uvc_trace(UVC_TRACE_STATUS, "Button (intf %u) %s len %d\n", | 99 | uvc_trace(UVC_TRACE_STATUS, "Button (intf %u) %s len %d\n", |
| 98 | data[1], data[3] ? "pressed" : "released", len); | 100 | data[1], data[3] ? "pressed" : "released", len); |
| 99 | uvc_input_report_key(dev, BTN_0, data[3]); | 101 | uvc_input_report_key(dev, KEY_CAMERA, data[3]); |
| 100 | } else { | 102 | } else { |
| 101 | uvc_trace(UVC_TRACE_STATUS, "Stream %u error event %02x %02x " | 103 | uvc_trace(UVC_TRACE_STATUS, "Stream %u error event %02x %02x " |
| 102 | "len %d.\n", data[1], data[2], data[3], len); | 104 | "len %d.\n", data[1], data[2], data[3], len); |
