aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/input/keyboard/atkbd.c2
-rw-r--r--drivers/input/keyboard/pxa27x_keypad.c38
-rw-r--r--drivers/input/misc/Kconfig1
-rw-r--r--drivers/input/misc/apanel.c1
-rw-r--r--drivers/input/mouse/appletouch.c49
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h14
-rw-r--r--drivers/input/serio/i8042.c41
-rw-r--r--drivers/input/tablet/gtco.c17
-rw-r--r--drivers/input/touchscreen/wm9713.c22
-rw-r--r--drivers/input/touchscreen/wm97xx-core.c25
-rw-r--r--drivers/usb/core/quirks.c3
-rw-r--r--include/linux/input.h4
-rw-r--r--include/linux/wm97xx.h1
13 files changed, 162 insertions, 56 deletions
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index 56857d1e56d5..c27537be82ae 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -807,6 +807,8 @@ static int atkbd_activate(struct atkbd *atkbd)
807static void atkbd_cleanup(struct serio *serio) 807static void atkbd_cleanup(struct serio *serio)
808{ 808{
809 struct atkbd *atkbd = serio_get_drvdata(serio); 809 struct atkbd *atkbd = serio_get_drvdata(serio);
810
811 atkbd_disable(atkbd);
810 ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT); 812 ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT);
811} 813}
812 814
diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c
index c7c9599b315d..6f1516f50750 100644
--- a/drivers/input/keyboard/pxa27x_keypad.c
+++ b/drivers/input/keyboard/pxa27x_keypad.c
@@ -138,6 +138,9 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad)
138 set_bit(code, input_dev->keybit); 138 set_bit(code, input_dev->keybit);
139 } 139 }
140 140
141 for (i = 0; i < pdata->direct_key_num; i++)
142 set_bit(pdata->direct_key_map[i], input_dev->keybit);
143
141 keypad->rotary_up_key[0] = pdata->rotary0_up_key; 144 keypad->rotary_up_key[0] = pdata->rotary0_up_key;
142 keypad->rotary_up_key[1] = pdata->rotary1_up_key; 145 keypad->rotary_up_key[1] = pdata->rotary1_up_key;
143 keypad->rotary_down_key[0] = pdata->rotary0_down_key; 146 keypad->rotary_down_key[0] = pdata->rotary0_down_key;
@@ -145,17 +148,21 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad)
145 keypad->rotary_rel_code[0] = pdata->rotary0_rel_code; 148 keypad->rotary_rel_code[0] = pdata->rotary0_rel_code;
146 keypad->rotary_rel_code[1] = pdata->rotary1_rel_code; 149 keypad->rotary_rel_code[1] = pdata->rotary1_rel_code;
147 150
148 if (pdata->rotary0_up_key && pdata->rotary0_down_key) { 151 if (pdata->enable_rotary0) {
149 set_bit(pdata->rotary0_up_key, input_dev->keybit); 152 if (pdata->rotary0_up_key && pdata->rotary0_down_key) {
150 set_bit(pdata->rotary0_down_key, input_dev->keybit); 153 set_bit(pdata->rotary0_up_key, input_dev->keybit);
151 } else 154 set_bit(pdata->rotary0_down_key, input_dev->keybit);
152 set_bit(pdata->rotary0_rel_code, input_dev->relbit); 155 } else
153 156 set_bit(pdata->rotary0_rel_code, input_dev->relbit);
154 if (pdata->rotary1_up_key && pdata->rotary1_down_key) { 157 }
155 set_bit(pdata->rotary1_up_key, input_dev->keybit); 158
156 set_bit(pdata->rotary1_down_key, input_dev->keybit); 159 if (pdata->enable_rotary1) {
157 } else 160 if (pdata->rotary1_up_key && pdata->rotary1_down_key) {
158 set_bit(pdata->rotary1_rel_code, input_dev->relbit); 161 set_bit(pdata->rotary1_up_key, input_dev->keybit);
162 set_bit(pdata->rotary1_down_key, input_dev->keybit);
163 } else
164 set_bit(pdata->rotary1_rel_code, input_dev->relbit);
165 }
159} 166}
160 167
161static inline unsigned int lookup_matrix_keycode( 168static inline unsigned int lookup_matrix_keycode(
@@ -493,8 +500,13 @@ static int __devinit pxa27x_keypad_probe(struct platform_device *pdev)
493 keypad->input_dev = input_dev; 500 keypad->input_dev = input_dev;
494 input_set_drvdata(input_dev, keypad); 501 input_set_drvdata(input_dev, keypad);
495 502
496 input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | 503 input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);
497 BIT_MASK(EV_REL); 504 if ((keypad->pdata->enable_rotary0 &&
505 keypad->pdata->rotary0_rel_code) ||
506 (keypad->pdata->enable_rotary1 &&
507 keypad->pdata->rotary1_rel_code)) {
508 input_dev->evbit[0] |= BIT_MASK(EV_REL);
509 }
498 510
499 pxa27x_keypad_build_keycode(keypad); 511 pxa27x_keypad_build_keycode(keypad);
500 platform_set_drvdata(pdev, keypad); 512 platform_set_drvdata(pdev, keypad);
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index 3ad8bd9f7543..432699d61c58 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -15,7 +15,6 @@ if INPUT_MISC
15config INPUT_PCSPKR 15config INPUT_PCSPKR
16 tristate "PC Speaker support" 16 tristate "PC Speaker support"
17 depends on PCSPKR_PLATFORM 17 depends on PCSPKR_PLATFORM
18 depends on SND_PCSP=n
19 help 18 help
20 Say Y here if you want the standard PC Speaker to be used for 19 Say Y here if you want the standard PC Speaker to be used for
21 bells and whistles. 20 bells and whistles.
diff --git a/drivers/input/misc/apanel.c b/drivers/input/misc/apanel.c
index 9531d8c7444f..d82f7f727f7a 100644
--- a/drivers/input/misc/apanel.c
+++ b/drivers/input/misc/apanel.c
@@ -20,7 +20,6 @@
20#include <linux/module.h> 20#include <linux/module.h>
21#include <linux/ioport.h> 21#include <linux/ioport.h>
22#include <linux/io.h> 22#include <linux/io.h>
23#include <linux/module.h>
24#include <linux/input-polldev.h> 23#include <linux/input-polldev.h>
25#include <linux/i2c.h> 24#include <linux/i2c.h>
26#include <linux/workqueue.h> 25#include <linux/workqueue.h>
diff --git a/drivers/input/mouse/appletouch.c b/drivers/input/mouse/appletouch.c
index 6867c914b024..1f41ae94f26b 100644
--- a/drivers/input/mouse/appletouch.c
+++ b/drivers/input/mouse/appletouch.c
@@ -564,6 +564,21 @@ static void atp_close(struct input_dev *input)
564 dev->open = 0; 564 dev->open = 0;
565} 565}
566 566
567static int atp_handle_geyser(struct atp *dev)
568{
569 struct usb_device *udev = dev->udev;
570
571 if (dev->type != ATP_FOUNTAIN) {
572 /* switch to raw sensor mode */
573 if (atp_geyser_init(udev))
574 return -EIO;
575
576 printk(KERN_INFO "appletouch: Geyser mode initialized.\n");
577 }
578
579 return 0;
580}
581
567static int atp_probe(struct usb_interface *iface, 582static int atp_probe(struct usb_interface *iface,
568 const struct usb_device_id *id) 583 const struct usb_device_id *id)
569{ 584{
@@ -608,14 +623,6 @@ static int atp_probe(struct usb_interface *iface,
608 else 623 else
609 dev->datalen = 64; 624 dev->datalen = 64;
610 625
611 if (dev->type != ATP_FOUNTAIN) {
612 /* switch to raw sensor mode */
613 if (atp_geyser_init(udev))
614 goto err_free_devs;
615
616 printk(KERN_INFO "appletouch: Geyser mode initialized.\n");
617 }
618
619 dev->urb = usb_alloc_urb(0, GFP_KERNEL); 626 dev->urb = usb_alloc_urb(0, GFP_KERNEL);
620 if (!dev->urb) 627 if (!dev->urb)
621 goto err_free_devs; 628 goto err_free_devs;
@@ -629,6 +636,10 @@ static int atp_probe(struct usb_interface *iface,
629 usb_rcvintpipe(udev, int_in_endpointAddr), 636 usb_rcvintpipe(udev, int_in_endpointAddr),
630 dev->data, dev->datalen, atp_complete, dev, 1); 637 dev->data, dev->datalen, atp_complete, dev, 1);
631 638
639 error = atp_handle_geyser(dev);
640 if (error)
641 goto err_free_buffer;
642
632 usb_make_path(udev, dev->phys, sizeof(dev->phys)); 643 usb_make_path(udev, dev->phys, sizeof(dev->phys));
633 strlcat(dev->phys, "/input0", sizeof(dev->phys)); 644 strlcat(dev->phys, "/input0", sizeof(dev->phys));
634 645
@@ -721,6 +732,20 @@ static void atp_disconnect(struct usb_interface *iface)
721 printk(KERN_INFO "input: appletouch disconnected\n"); 732 printk(KERN_INFO "input: appletouch disconnected\n");
722} 733}
723 734
735static int atp_recover(struct atp *dev)
736{
737 int error;
738
739 error = atp_handle_geyser(dev);
740 if (error)
741 return error;
742
743 if (dev->open && usb_submit_urb(dev->urb, GFP_ATOMIC))
744 return -EIO;
745
746 return 0;
747}
748
724static int atp_suspend(struct usb_interface *iface, pm_message_t message) 749static int atp_suspend(struct usb_interface *iface, pm_message_t message)
725{ 750{
726 struct atp *dev = usb_get_intfdata(iface); 751 struct atp *dev = usb_get_intfdata(iface);
@@ -741,12 +766,20 @@ static int atp_resume(struct usb_interface *iface)
741 return 0; 766 return 0;
742} 767}
743 768
769static int atp_reset_resume(struct usb_interface *iface)
770{
771 struct atp *dev = usb_get_intfdata(iface);
772
773 return atp_recover(dev);
774}
775
744static struct usb_driver atp_driver = { 776static struct usb_driver atp_driver = {
745 .name = "appletouch", 777 .name = "appletouch",
746 .probe = atp_probe, 778 .probe = atp_probe,
747 .disconnect = atp_disconnect, 779 .disconnect = atp_disconnect,
748 .suspend = atp_suspend, 780 .suspend = atp_suspend,
749 .resume = atp_resume, 781 .resume = atp_resume,
782 .reset_resume = atp_reset_resume,
750 .id_table = atp_table, 783 .id_table = atp_table,
751}; 784};
752 785
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index 2289e3a8f25c..9818359d26e2 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -193,6 +193,13 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
193 }, 193 },
194 }, 194 },
195 { 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 {
196 /* 203 /*
197 * No data is coming from the touchscreen unless KBC 204 * No data is coming from the touchscreen unless KBC
198 * is in legacy mode. 205 * is in legacy mode.
@@ -336,6 +343,13 @@ static struct dmi_system_id __initdata i8042_dmi_dritek_table[] = {
336 }, 343 },
337 }, 344 },
338 { 345 {
346 .ident = "Acer TravelMate 660",
347 .matches = {
348 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
349 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"),
350 },
351 },
352 {
339 .ident = "Acer TravelMate 2490", 353 .ident = "Acer TravelMate 2490",
340 .matches = { 354 .matches = {
341 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 355 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index 65a74cfc187b..170f71ee5772 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
@@ -885,6 +885,20 @@ static long i8042_panic_blink(long count)
885 885
886#undef DELAY 886#undef DELAY
887 887
888#ifdef CONFIG_X86
889static void i8042_dritek_enable(void)
890{
891 char param = 0x90;
892 int error;
893
894 error = i8042_command(&param, 0x1059);
895 if (error)
896 printk(KERN_WARNING
897 "Failed to enable DRITEK extension: %d\n",
898 error);
899}
900#endif
901
888#ifdef CONFIG_PM 902#ifdef CONFIG_PM
889/* 903/*
890 * Here we try to restore the original BIOS settings. We only want to 904 * Here we try to restore the original BIOS settings. We only want to
@@ -938,10 +952,20 @@ static int i8042_resume(struct platform_device *dev)
938 i8042_ctr |= I8042_CTR_AUXDIS | I8042_CTR_KBDDIS; 952 i8042_ctr |= I8042_CTR_AUXDIS | I8042_CTR_KBDDIS;
939 i8042_ctr &= ~(I8042_CTR_AUXINT | I8042_CTR_KBDINT); 953 i8042_ctr &= ~(I8042_CTR_AUXINT | I8042_CTR_KBDINT);
940 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { 954 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
941 printk(KERN_ERR "i8042: Can't write CTR to resume\n"); 955 printk(KERN_WARNING "i8042: Can't write CTR to resume, retrying...\n");
942 return -EIO; 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 }
943 } 961 }
944 962
963
964#ifdef CONFIG_X86
965 if (i8042_dritek)
966 i8042_dritek_enable();
967#endif
968
945 if (i8042_mux_present) { 969 if (i8042_mux_present) {
946 if (i8042_set_mux_mode(1, NULL) || i8042_enable_mux_ports()) 970 if (i8042_set_mux_mode(1, NULL) || i8042_enable_mux_ports())
947 printk(KERN_WARNING 971 printk(KERN_WARNING
@@ -1160,6 +1184,11 @@ static int __devinit i8042_probe(struct platform_device *dev)
1160 if (error) 1184 if (error)
1161 return error; 1185 return error;
1162 1186
1187#ifdef CONFIG_X86
1188 if (i8042_dritek)
1189 i8042_dritek_enable();
1190#endif
1191
1163 if (!i8042_noaux) { 1192 if (!i8042_noaux) {
1164 error = i8042_setup_aux(); 1193 error = i8042_setup_aux();
1165 if (error && error != -ENODEV && error != -EBUSY) 1194 if (error && error != -ENODEV && error != -EBUSY)
@@ -1171,14 +1200,6 @@ static int __devinit i8042_probe(struct platform_device *dev)
1171 if (error) 1200 if (error)
1172 goto out_fail; 1201 goto out_fail;
1173 } 1202 }
1174#ifdef CONFIG_X86
1175 if (i8042_dritek) {
1176 char param = 0x90;
1177 error = i8042_command(&param, 0x1059);
1178 if (error)
1179 goto out_fail;
1180 }
1181#endif
1182/* 1203/*
1183 * Ok, everything is ready, let's register all serio ports 1204 * Ok, everything is ready, let's register all serio ports
1184 */ 1205 */
diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c
index c5a8661a1baa..1e748e46d12e 100644
--- a/drivers/input/tablet/gtco.c
+++ b/drivers/input/tablet/gtco.c
@@ -830,7 +830,7 @@ static int gtco_probe(struct usb_interface *usbinterface,
830 struct gtco *gtco; 830 struct gtco *gtco;
831 struct input_dev *input_dev; 831 struct input_dev *input_dev;
832 struct hid_descriptor *hid_desc; 832 struct hid_descriptor *hid_desc;
833 char *report = NULL; 833 char *report;
834 int result = 0, retry; 834 int result = 0, retry;
835 int error; 835 int error;
836 struct usb_endpoint_descriptor *endpoint; 836 struct usb_endpoint_descriptor *endpoint;
@@ -916,12 +916,16 @@ static int gtco_probe(struct usb_interface *usbinterface,
916 le16_to_cpu(hid_desc->wDescriptorLength), 916 le16_to_cpu(hid_desc->wDescriptorLength),
917 5000); /* 5 secs */ 917 5000); /* 5 secs */
918 918
919 if (result == le16_to_cpu(hid_desc->wDescriptorLength)) 919 dbg("usb_control_msg result: %d", result);
920 if (result == le16_to_cpu(hid_desc->wDescriptorLength)) {
921 parse_hid_report_descriptor(gtco, report, result);
920 break; 922 break;
923 }
921 } 924 }
922 925
926 kfree(report);
927
923 /* If we didn't get the report, fail */ 928 /* If we didn't get the report, fail */
924 dbg("usb_control_msg result: :%d", result);
925 if (result != le16_to_cpu(hid_desc->wDescriptorLength)) { 929 if (result != le16_to_cpu(hid_desc->wDescriptorLength)) {
926 err("Failed to get HID Report Descriptor of size: %d", 930 err("Failed to get HID Report Descriptor of size: %d",
927 hid_desc->wDescriptorLength); 931 hid_desc->wDescriptorLength);
@@ -929,12 +933,6 @@ static int gtco_probe(struct usb_interface *usbinterface,
929 goto err_free_urb; 933 goto err_free_urb;
930 } 934 }
931 935
932 /* Now we parse the report */
933 parse_hid_report_descriptor(gtco, report, result);
934
935 /* Now we delete it */
936 kfree(report);
937
938 /* Create a device file node */ 936 /* Create a device file node */
939 usb_make_path(gtco->usbdev, gtco->usbpath, sizeof(gtco->usbpath)); 937 usb_make_path(gtco->usbdev, gtco->usbpath, sizeof(gtco->usbpath));
940 strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath)); 938 strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath));
@@ -988,7 +986,6 @@ static int gtco_probe(struct usb_interface *usbinterface,
988 usb_buffer_free(gtco->usbdev, REPORT_MAX_SIZE, 986 usb_buffer_free(gtco->usbdev, REPORT_MAX_SIZE,
989 gtco->buffer, gtco->buf_dma); 987 gtco->buffer, gtco->buf_dma);
990 err_free_devs: 988 err_free_devs:
991 kfree(report);
992 input_free_device(input_dev); 989 input_free_device(input_dev);
993 kfree(gtco); 990 kfree(gtco);
994 return error; 991 return error;
diff --git a/drivers/input/touchscreen/wm9713.c b/drivers/input/touchscreen/wm9713.c
index 01278bd7e65c..838458792ea0 100644
--- a/drivers/input/touchscreen/wm9713.c
+++ b/drivers/input/touchscreen/wm9713.c
@@ -85,6 +85,15 @@ module_param(delay, int, 0);
85MODULE_PARM_DESC(delay, "Set adc sample delay."); 85MODULE_PARM_DESC(delay, "Set adc sample delay.");
86 86
87/* 87/*
88 * Set five_wire = 1 to use a 5 wire touchscreen.
89 *
90 * NOTE: Five wire mode does not allow for readback of pressure.
91 */
92static int five_wire;
93module_param(five_wire, int, 0);
94MODULE_PARM_DESC(five_wire, "Set to '1' to use 5-wire touchscreen.");
95
96/*
88 * Set adc mask function. 97 * Set adc mask function.
89 * 98 *
90 * Sources of glitch noise, such as signals driving an LCD display, may feed 99 * Sources of glitch noise, such as signals driving an LCD display, may feed
@@ -162,6 +171,19 @@ static void wm9713_phy_init(struct wm97xx *wm)
162 64000 / rpu); 171 64000 / rpu);
163 } 172 }
164 173
174 /* Five wire panel? */
175 if (five_wire) {
176 dig3 |= WM9713_45W;
177 dev_info(wm->dev, "setting 5-wire touchscreen mode.");
178
179 if (pil) {
180 dev_warn(wm->dev,
181 "Pressure measurement not supported in 5 "
182 "wire mode, disabling\n");
183 pil = 0;
184 }
185 }
186
165 /* touchpanel pressure */ 187 /* touchpanel pressure */
166 if (pil == 2) { 188 if (pil == 2) {
167 dig3 |= WM9712_PIL; 189 dig3 |= WM9712_PIL;
diff --git a/drivers/input/touchscreen/wm97xx-core.c b/drivers/input/touchscreen/wm97xx-core.c
index e9c7ea46b6e3..cdc24ad314e0 100644
--- a/drivers/input/touchscreen/wm97xx-core.c
+++ b/drivers/input/touchscreen/wm97xx-core.c
@@ -608,6 +608,17 @@ static int wm97xx_probe(struct device *dev)
608 goto alloc_err; 608 goto alloc_err;
609 } 609 }
610 610
611 /* set up physical characteristics */
612 wm->codec->phy_init(wm);
613
614 /* load gpio cache */
615 wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG);
616 wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
617 wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY);
618 wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP);
619 wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
620 wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE);
621
611 wm->input_dev = input_allocate_device(); 622 wm->input_dev = input_allocate_device();
612 if (wm->input_dev == NULL) { 623 if (wm->input_dev == NULL) {
613 ret = -ENOMEM; 624 ret = -ENOMEM;
@@ -616,6 +627,7 @@ static int wm97xx_probe(struct device *dev)
616 627
617 /* set up touch configuration */ 628 /* set up touch configuration */
618 wm->input_dev->name = "wm97xx touchscreen"; 629 wm->input_dev->name = "wm97xx touchscreen";
630 wm->input_dev->phys = "wm97xx";
619 wm->input_dev->open = wm97xx_ts_input_open; 631 wm->input_dev->open = wm97xx_ts_input_open;
620 wm->input_dev->close = wm97xx_ts_input_close; 632 wm->input_dev->close = wm97xx_ts_input_close;
621 set_bit(EV_ABS, wm->input_dev->evbit); 633 set_bit(EV_ABS, wm->input_dev->evbit);
@@ -634,17 +646,6 @@ static int wm97xx_probe(struct device *dev)
634 if (ret < 0) 646 if (ret < 0)
635 goto dev_alloc_err; 647 goto dev_alloc_err;
636 648
637 /* set up physical characteristics */
638 wm->codec->phy_init(wm);
639
640 /* load gpio cache */
641 wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG);
642 wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
643 wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY);
644 wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP);
645 wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
646 wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE);
647
648 /* register our battery device */ 649 /* register our battery device */
649 wm->battery_dev = platform_device_alloc("wm97xx-battery", -1); 650 wm->battery_dev = platform_device_alloc("wm97xx-battery", -1);
650 if (!wm->battery_dev) { 651 if (!wm->battery_dev) {
@@ -801,7 +802,7 @@ void wm97xx_unregister_mach_ops(struct wm97xx *wm)
801EXPORT_SYMBOL_GPL(wm97xx_unregister_mach_ops); 802EXPORT_SYMBOL_GPL(wm97xx_unregister_mach_ops);
802 803
803static struct device_driver wm97xx_driver = { 804static struct device_driver wm97xx_driver = {
804 .name = "ac97", 805 .name = "wm97xx-ts",
805 .bus = &ac97_bus_type, 806 .bus = &ac97_bus_type,
806 .owner = THIS_MODULE, 807 .owner = THIS_MODULE,
807 .probe = wm97xx_probe, 808 .probe = wm97xx_probe,
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index 2e2019390290..ec15f1dd1d0b 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -47,6 +47,9 @@ static const struct usb_device_id usb_quirk_list[] = {
47 /* Edirol SD-20 */ 47 /* Edirol SD-20 */
48 { USB_DEVICE(0x0582, 0x0027), .driver_info = USB_QUIRK_RESET_RESUME }, 48 { USB_DEVICE(0x0582, 0x0027), .driver_info = USB_QUIRK_RESET_RESUME },
49 49
50 /* appletouch */
51 { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME },
52
50 /* M-Systems Flash Disk Pioneers */ 53 /* M-Systems Flash Disk Pioneers */
51 { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, 54 { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
52 55
diff --git a/include/linux/input.h b/include/linux/input.h
index af9c6314153b..3e86b61d2e4c 100644
--- a/include/linux/input.h
+++ b/include/linux/input.h
@@ -639,7 +639,9 @@ struct input_absinfo {
639#define SW_LID 0x00 /* set = lid shut */ 639#define SW_LID 0x00 /* set = lid shut */
640#define SW_TABLET_MODE 0x01 /* set = tablet mode */ 640#define SW_TABLET_MODE 0x01 /* set = tablet mode */
641#define SW_HEADPHONE_INSERT 0x02 /* set = inserted */ 641#define SW_HEADPHONE_INSERT 0x02 /* set = inserted */
642#define SW_RADIO 0x03 /* set = radio enabled */ 642#define SW_RFKILL_ALL 0x03 /* rfkill master switch, type "any"
643 set = radio enabled */
644#define SW_RADIO SW_RFKILL_ALL /* deprecated */
643#define SW_MAX 0x0f 645#define SW_MAX 0x0f
644#define SW_CNT (SW_MAX+1) 646#define SW_CNT (SW_MAX+1)
645 647
diff --git a/include/linux/wm97xx.h b/include/linux/wm97xx.h
index 4d13732e9cf0..6f69968eab24 100644
--- a/include/linux/wm97xx.h
+++ b/include/linux/wm97xx.h
@@ -100,6 +100,7 @@
100#define WM9713_ADCSEL_Y 0x0004 /* Y measurement */ 100#define WM9713_ADCSEL_Y 0x0004 /* Y measurement */
101#define WM9713_ADCSEL_PRES 0x0008 /* Pressure measurement */ 101#define WM9713_ADCSEL_PRES 0x0008 /* Pressure measurement */
102#define WM9713_COO 0x0001 /* enable coordinate mode */ 102#define WM9713_COO 0x0001 /* enable coordinate mode */
103#define WM9713_45W 0x1000 /* set for 5 wire panel */
103#define WM9713_PDEN 0x0800 /* measure only when pen down */ 104#define WM9713_PDEN 0x0800 /* measure only when pen down */
104#define WM9713_ADCSEL_MASK 0x00fe /* ADC selection mask */ 105#define WM9713_ADCSEL_MASK 0x00fe /* ADC selection mask */
105#define WM9713_WAIT 0x0200 /* coordinate wait */ 106#define WM9713_WAIT 0x0200 /* coordinate wait */