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: appletouch - implement reset-resume logic
Input: i8042 - retry failed CTR writes when resuming
Input: i8042 - add Fujitsu-Siemens Amilo Pro V2030 to nomux table
Input: pcspkr - remove negative dependency on snd-pcsp

Manually fixed up trivial conflict in drivers/usb/core/quirks.c

+57 -11
-1
drivers/input/misc/Kconfig
··· 15 config INPUT_PCSPKR 16 tristate "PC Speaker support" 17 depends on PCSPKR_PLATFORM 18 - depends on SND_PCSP=n 19 help 20 Say Y here if you want the standard PC Speaker to be used for 21 bells and whistles.
··· 15 config INPUT_PCSPKR 16 tristate "PC Speaker support" 17 depends on PCSPKR_PLATFORM 18 help 19 Say Y here if you want the standard PC Speaker to be used for 20 bells and whistles.
+41 -8
drivers/input/mouse/appletouch.c
··· 589 dev->open = 0; 590 } 591 592 static int atp_probe(struct usb_interface *iface, const struct usb_device_id *id) 593 { 594 struct atp *dev; ··· 648 else 649 dev->datalen = 81; 650 651 - if (!atp_is_fountain(dev)) { 652 - /* switch to raw sensor mode */ 653 - if (atp_geyser_init(udev)) 654 - goto err_free_devs; 655 - 656 - printk(KERN_INFO "appletouch: Geyser mode initialized.\n"); 657 - } 658 - 659 dev->urb = usb_alloc_urb(0, GFP_KERNEL); 660 if (!dev->urb) 661 goto err_free_devs; ··· 660 usb_fill_int_urb(dev->urb, udev, 661 usb_rcvintpipe(udev, int_in_endpointAddr), 662 dev->data, dev->datalen, atp_complete, dev, 1); 663 664 usb_make_path(udev, dev->phys, sizeof(dev->phys)); 665 strlcat(dev->phys, "/input0", sizeof(dev->phys)); ··· 755 printk(KERN_INFO "input: appletouch disconnected\n"); 756 } 757 758 static int atp_suspend(struct usb_interface *iface, pm_message_t message) 759 { 760 struct atp *dev = usb_get_intfdata(iface); ··· 789 return 0; 790 } 791 792 static struct usb_driver atp_driver = { 793 .name = "appletouch", 794 .probe = atp_probe, 795 .disconnect = atp_disconnect, 796 .suspend = atp_suspend, 797 .resume = atp_resume, 798 .id_table = atp_table, 799 }; 800
··· 589 dev->open = 0; 590 } 591 592 + static int atp_handle_geyser(struct atp *dev) 593 + { 594 + struct usb_device *udev = dev->udev; 595 + 596 + if (!atp_is_fountain(dev)) { 597 + /* switch to raw sensor mode */ 598 + if (atp_geyser_init(udev)) 599 + return -EIO; 600 + 601 + printk(KERN_INFO "appletouch: Geyser mode initialized.\n"); 602 + } 603 + 604 + return 0; 605 + } 606 + 607 static int atp_probe(struct usb_interface *iface, const struct usb_device_id *id) 608 { 609 struct atp *dev; ··· 633 else 634 dev->datalen = 81; 635 636 dev->urb = usb_alloc_urb(0, GFP_KERNEL); 637 if (!dev->urb) 638 goto err_free_devs; ··· 653 usb_fill_int_urb(dev->urb, udev, 654 usb_rcvintpipe(udev, int_in_endpointAddr), 655 dev->data, dev->datalen, atp_complete, dev, 1); 656 + 657 + error = atp_handle_geyser(dev); 658 + if (error) 659 + goto err_free_buffer; 660 661 usb_make_path(udev, dev->phys, sizeof(dev->phys)); 662 strlcat(dev->phys, "/input0", sizeof(dev->phys)); ··· 744 printk(KERN_INFO "input: appletouch disconnected\n"); 745 } 746 747 + static int atp_recover(struct atp *dev) 748 + { 749 + int error; 750 + 751 + error = atp_handle_geyser(dev); 752 + if (error) 753 + return error; 754 + 755 + if (dev->open && usb_submit_urb(dev->urb, GFP_ATOMIC)) 756 + return -EIO; 757 + 758 + return 0; 759 + } 760 + 761 static int atp_suspend(struct usb_interface *iface, pm_message_t message) 762 { 763 struct atp *dev = usb_get_intfdata(iface); ··· 764 return 0; 765 } 766 767 + static int atp_reset_resume(struct usb_interface *iface) 768 + { 769 + struct atp *dev = usb_get_intfdata(iface); 770 + 771 + return atp_recover(dev); 772 + } 773 + 774 static struct usb_driver atp_driver = { 775 .name = "appletouch", 776 .probe = atp_probe, 777 .disconnect = atp_disconnect, 778 .suspend = atp_suspend, 779 .resume = atp_resume, 780 + .reset_resume = atp_reset_resume, 781 .id_table = atp_table, 782 }; 783
+7
drivers/input/serio/i8042-x86ia64io.h
··· 193 }, 194 }, 195 { 196 /* 197 * No data is coming from the touchscreen unless KBC 198 * is in legacy mode.
··· 193 }, 194 }, 195 { 196 + .ident = "Fujitsu-Siemens Amilo Pro 2030", 197 + .matches = { 198 + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), 199 + DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"), 200 + }, 201 + }, 202 + { 203 /* 204 * No data is coming from the touchscreen unless KBC 205 * is in legacy mode.
+6 -2
drivers/input/serio/i8042.c
··· 952 i8042_ctr |= I8042_CTR_AUXDIS | I8042_CTR_KBDDIS; 953 i8042_ctr &= ~(I8042_CTR_AUXINT | I8042_CTR_KBDINT); 954 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { 955 - printk(KERN_ERR "i8042: Can't write CTR to resume\n"); 956 - return -EIO; 957 } 958 959
··· 952 i8042_ctr |= I8042_CTR_AUXDIS | I8042_CTR_KBDDIS; 953 i8042_ctr &= ~(I8042_CTR_AUXINT | I8042_CTR_KBDINT); 954 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { 955 + printk(KERN_WARNING "i8042: Can't write CTR to resume, retrying...\n"); 956 + msleep(50); 957 + if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { 958 + printk(KERN_ERR "i8042: CTR write retry failed\n"); 959 + return -EIO; 960 + } 961 } 962 963
+3
drivers/usb/core/quirks.c
··· 47 /* Edirol SD-20 */ 48 { USB_DEVICE(0x0582, 0x0027), .driver_info = USB_QUIRK_RESET_RESUME }, 49 50 /* Avision AV600U */ 51 { USB_DEVICE(0x0638, 0x0a13), .driver_info = 52 USB_QUIRK_STRING_FETCH_255 },
··· 47 /* Edirol SD-20 */ 48 { USB_DEVICE(0x0582, 0x0027), .driver_info = USB_QUIRK_RESET_RESUME }, 49 50 + /* appletouch */ 51 + { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME }, 52 + 53 /* Avision AV600U */ 54 { USB_DEVICE(0x0638, 0x0a13), .driver_info = 55 USB_QUIRK_STRING_FETCH_255 },