aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/atm/Makefile4
-rw-r--r--drivers/usb/atm/usbatm.h5
-rw-r--r--drivers/usb/core/Makefile4
-rw-r--r--drivers/usb/core/buffer.c8
-rw-r--r--drivers/usb/core/config.c5
-rw-r--r--drivers/usb/core/devio.c6
-rw-r--r--drivers/usb/core/file.c6
-rw-r--r--drivers/usb/core/hcd-pci.c7
-rw-r--r--drivers/usb/core/hcd.c5
-rw-r--r--drivers/usb/core/hub.c5
-rw-r--r--drivers/usb/core/inode.c7
-rw-r--r--drivers/usb/core/message.c10
-rw-r--r--drivers/usb/core/notify.c6
-rw-r--r--drivers/usb/core/sysfs.c7
-rw-r--r--drivers/usb/core/urb.c6
-rw-r--r--drivers/usb/core/usb.c7
-rw-r--r--drivers/usb/gadget/dummy_hcd.c4
-rw-r--r--drivers/usb/host/ohci-lh7a404.c2
-rw-r--r--drivers/usb/host/ohci-ppc-soc.c2
-rw-r--r--drivers/usb/image/microtek.c35
-rw-r--r--drivers/usb/image/microtek.h2
-rw-r--r--drivers/usb/input/Makefile4
-rw-r--r--drivers/usb/input/hid-core.c12
-rw-r--r--drivers/usb/input/itmtouch.c7
-rw-r--r--drivers/usb/input/keyspan_remote.c5
-rw-r--r--drivers/usb/input/mtouchusb.c7
-rw-r--r--drivers/usb/input/pid.c2
-rw-r--r--drivers/usb/input/touchkitusb.c4
-rw-r--r--drivers/usb/input/wacom.c133
-rw-r--r--drivers/usb/misc/Makefile6
-rw-r--r--drivers/usb/misc/auerswald.c1
-rw-r--r--drivers/usb/misc/phidgetservo.c3
-rw-r--r--drivers/usb/misc/rio500.c2
-rw-r--r--drivers/usb/misc/usbled.c3
-rw-r--r--drivers/usb/misc/usbtest.c3
-rw-r--r--drivers/usb/misc/uss720.c2
-rw-r--r--drivers/usb/net/Makefile4
-rw-r--r--drivers/usb/net/asix.c3
-rw-r--r--drivers/usb/net/cdc_ether.c3
-rw-r--r--drivers/usb/net/cdc_subset.c3
-rw-r--r--drivers/usb/net/gl620a.c3
-rw-r--r--drivers/usb/net/kaweth.c13
-rw-r--r--drivers/usb/net/net1080.c3
-rw-r--r--drivers/usb/net/pegasus.c2
-rw-r--r--drivers/usb/net/plusb.c3
-rw-r--r--drivers/usb/net/rndis_host.c3
-rw-r--r--drivers/usb/net/usbnet.c3
-rw-r--r--drivers/usb/net/zaurus.c3
-rw-r--r--drivers/usb/serial/ChangeLog.history (renamed from drivers/usb/serial/ChangeLog.old)2
-rw-r--r--drivers/usb/serial/Kconfig18
-rw-r--r--drivers/usb/serial/Makefile2
-rw-r--r--drivers/usb/serial/anydata.c123
-rw-r--r--drivers/usb/serial/cp2101.c1
-rw-r--r--drivers/usb/serial/generic.c1
-rw-r--r--drivers/usb/serial/nokia_dku2.c142
-rw-r--r--drivers/usb/serial/pl2303.c6
-rw-r--r--drivers/usb/serial/pl2303.h2
-rw-r--r--drivers/usb/storage/Kconfig2
-rw-r--r--drivers/usb/storage/shuttle_usbat.c2
-rw-r--r--drivers/usb/storage/unusual_devs.h10
60 files changed, 335 insertions, 359 deletions
diff --git a/drivers/usb/atm/Makefile b/drivers/usb/atm/Makefile
index 751f297be2ef..85099718c683 100644
--- a/drivers/usb/atm/Makefile
+++ b/drivers/usb/atm/Makefile
@@ -6,3 +6,7 @@ obj-$(CONFIG_USB_CXACRU) += cxacru.o
6obj-$(CONFIG_USB_SPEEDTOUCH) += speedtch.o 6obj-$(CONFIG_USB_SPEEDTOUCH) += speedtch.o
7obj-$(CONFIG_USB_ATM) += usbatm.o 7obj-$(CONFIG_USB_ATM) += usbatm.o
8obj-$(CONFIG_USB_XUSBATM) += xusbatm.o 8obj-$(CONFIG_USB_XUSBATM) += xusbatm.o
9
10ifeq ($(CONFIG_USB_DEBUG),y)
11EXTRA_CFLAGS += -DDEBUG
12endif
diff --git a/drivers/usb/atm/usbatm.h b/drivers/usb/atm/usbatm.h
index 936646457935..1adacd60d713 100644
--- a/drivers/usb/atm/usbatm.h
+++ b/drivers/usb/atm/usbatm.h
@@ -27,14 +27,9 @@
27#include <linux/config.h> 27#include <linux/config.h>
28 28
29/* 29/*
30#define DEBUG
31#define VERBOSE_DEBUG 30#define VERBOSE_DEBUG
32*/ 31*/
33 32
34#if !defined (DEBUG) && defined (CONFIG_USB_DEBUG)
35# define DEBUG
36#endif
37
38#include <asm/semaphore.h> 33#include <asm/semaphore.h>
39#include <linux/atm.h> 34#include <linux/atm.h>
40#include <linux/atmdev.h> 35#include <linux/atmdev.h>
diff --git a/drivers/usb/core/Makefile b/drivers/usb/core/Makefile
index dd1c4d2a0c31..86d5c380892d 100644
--- a/drivers/usb/core/Makefile
+++ b/drivers/usb/core/Makefile
@@ -14,3 +14,7 @@ ifeq ($(CONFIG_USB_DEVICEFS),y)
14endif 14endif
15 15
16obj-$(CONFIG_USB) += usbcore.o 16obj-$(CONFIG_USB) += usbcore.o
17
18ifeq ($(CONFIG_USB_DEBUG),y)
19EXTRA_CFLAGS += -DDEBUG
20endif
diff --git a/drivers/usb/core/buffer.c b/drivers/usb/core/buffer.c
index 57e800ac3cee..419c9943a7cb 100644
--- a/drivers/usb/core/buffer.c
+++ b/drivers/usb/core/buffer.c
@@ -15,14 +15,6 @@
15#include <asm/scatterlist.h> 15#include <asm/scatterlist.h>
16#include <linux/dma-mapping.h> 16#include <linux/dma-mapping.h>
17#include <linux/dmapool.h> 17#include <linux/dmapool.h>
18
19
20#ifdef CONFIG_USB_DEBUG
21 #define DEBUG
22#else
23 #undef DEBUG
24#endif
25
26#include <linux/usb.h> 18#include <linux/usb.h>
27#include "hcd.h" 19#include "hcd.h"
28 20
diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
index 993019500cc3..a9d89c78cc20 100644
--- a/drivers/usb/core/config.c
+++ b/drivers/usb/core/config.c
@@ -1,9 +1,4 @@
1#include <linux/config.h> 1#include <linux/config.h>
2
3#ifdef CONFIG_USB_DEBUG
4#define DEBUG
5#endif
6
7#include <linux/usb.h> 2#include <linux/usb.h>
8#include <linux/module.h> 3#include <linux/module.h>
9#include <linux/init.h> 4#include <linux/init.h>
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index 942cd437dc48..b1d6e9af732d 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -1392,13 +1392,13 @@ static int proc_ioctl_default(struct dev_state *ps, void __user *arg)
1392} 1392}
1393 1393
1394#ifdef CONFIG_COMPAT 1394#ifdef CONFIG_COMPAT
1395static int proc_ioctl_compat(struct dev_state *ps, void __user *arg) 1395static int proc_ioctl_compat(struct dev_state *ps, compat_uptr_t arg)
1396{ 1396{
1397 struct usbdevfs_ioctl32 __user *uioc; 1397 struct usbdevfs_ioctl32 __user *uioc;
1398 struct usbdevfs_ioctl ctrl; 1398 struct usbdevfs_ioctl ctrl;
1399 u32 udata; 1399 u32 udata;
1400 1400
1401 uioc = compat_ptr(arg); 1401 uioc = compat_ptr((long)arg);
1402 if (get_user(ctrl.ifno, &uioc->ifno) || 1402 if (get_user(ctrl.ifno, &uioc->ifno) ||
1403 get_user(ctrl.ioctl_code, &uioc->ioctl_code) || 1403 get_user(ctrl.ioctl_code, &uioc->ioctl_code) ||
1404 __get_user(udata, &uioc->data)) 1404 __get_user(udata, &uioc->data))
@@ -1511,7 +1511,7 @@ static int usbdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd
1511 1511
1512 case USBDEVFS_IOCTL32: 1512 case USBDEVFS_IOCTL32:
1513 snoop(&dev->dev, "%s: IOCTL\n", __FUNCTION__); 1513 snoop(&dev->dev, "%s: IOCTL\n", __FUNCTION__);
1514 ret = proc_ioctl_compat(ps, p); 1514 ret = proc_ioctl_compat(ps, (compat_uptr_t)(long)p);
1515 break; 1515 break;
1516#endif 1516#endif
1517 1517
diff --git a/drivers/usb/core/file.c b/drivers/usb/core/file.c
index e695308095ae..37b13368c814 100644
--- a/drivers/usb/core/file.c
+++ b/drivers/usb/core/file.c
@@ -19,12 +19,6 @@
19#include <linux/module.h> 19#include <linux/module.h>
20#include <linux/spinlock.h> 20#include <linux/spinlock.h>
21#include <linux/errno.h> 21#include <linux/errno.h>
22
23#ifdef CONFIG_USB_DEBUG
24 #define DEBUG
25#else
26 #undef DEBUG
27#endif
28#include <linux/usb.h> 22#include <linux/usb.h>
29 23
30#include "usb.h" 24#include "usb.h"
diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
index 84d9e69329bb..7feb829362d6 100644
--- a/drivers/usb/core/hcd-pci.c
+++ b/drivers/usb/core/hcd-pci.c
@@ -17,13 +17,6 @@
17 */ 17 */
18 18
19#include <linux/config.h> 19#include <linux/config.h>
20
21#ifdef CONFIG_USB_DEBUG
22 #define DEBUG
23#else
24 #undef DEBUG
25#endif
26
27#include <linux/kernel.h> 20#include <linux/kernel.h>
28#include <linux/module.h> 21#include <linux/module.h>
29#include <linux/pci.h> 22#include <linux/pci.h>
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 6c7ca5b08cd6..5e5f65a475ab 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -23,11 +23,6 @@
23 */ 23 */
24 24
25#include <linux/config.h> 25#include <linux/config.h>
26
27#ifdef CONFIG_USB_DEBUG
28#define DEBUG
29#endif
30
31#include <linux/module.h> 26#include <linux/module.h>
32#include <linux/version.h> 27#include <linux/version.h>
33#include <linux/kernel.h> 28#include <linux/kernel.h>
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 256d9f698715..840727948d84 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -9,11 +9,6 @@
9 */ 9 */
10 10
11#include <linux/config.h> 11#include <linux/config.h>
12#ifdef CONFIG_USB_DEBUG
13 #define DEBUG
14#else
15 #undef DEBUG
16#endif
17#include <linux/kernel.h> 12#include <linux/kernel.h>
18#include <linux/errno.h> 13#include <linux/errno.h>
19#include <linux/module.h> 14#include <linux/module.h>
diff --git a/drivers/usb/core/inode.c b/drivers/usb/core/inode.c
index 12f490fdee8f..c44bbedec817 100644
--- a/drivers/usb/core/inode.c
+++ b/drivers/usb/core/inode.c
@@ -46,7 +46,6 @@
46 46
47static struct super_operations usbfs_ops; 47static struct super_operations usbfs_ops;
48static struct file_operations default_file_operations; 48static struct file_operations default_file_operations;
49static struct inode_operations usbfs_dir_inode_operations;
50static struct vfsmount *usbfs_mount; 49static struct vfsmount *usbfs_mount;
51static int usbfs_mount_count; /* = 0 */ 50static int usbfs_mount_count; /* = 0 */
52static int ignore_mount = 0; 51static int ignore_mount = 0;
@@ -262,7 +261,7 @@ static struct inode *usbfs_get_inode (struct super_block *sb, int mode, dev_t de
262 inode->i_fop = &default_file_operations; 261 inode->i_fop = &default_file_operations;
263 break; 262 break;
264 case S_IFDIR: 263 case S_IFDIR:
265 inode->i_op = &usbfs_dir_inode_operations; 264 inode->i_op = &simple_dir_inode_operations;
266 inode->i_fop = &simple_dir_operations; 265 inode->i_fop = &simple_dir_operations;
267 266
268 /* directory inodes start off with i_nlink == 2 (for "." entry) */ 267 /* directory inodes start off with i_nlink == 2 (for "." entry) */
@@ -417,10 +416,6 @@ static struct file_operations default_file_operations = {
417 .llseek = default_file_lseek, 416 .llseek = default_file_lseek,
418}; 417};
419 418
420static struct inode_operations usbfs_dir_inode_operations = {
421 .lookup = simple_lookup,
422};
423
424static struct super_operations usbfs_ops = { 419static struct super_operations usbfs_ops = {
425 .statfs = simple_statfs, 420 .statfs = simple_statfs,
426 .drop_inode = generic_delete_inode, 421 .drop_inode = generic_delete_inode,
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 644a3d4f12aa..fe74f99ca5f4 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -3,13 +3,6 @@
3 */ 3 */
4 4
5#include <linux/config.h> 5#include <linux/config.h>
6
7#ifdef CONFIG_USB_DEBUG
8 #define DEBUG
9#else
10 #undef DEBUG
11#endif
12
13#include <linux/pci.h> /* for scatterlist macros */ 6#include <linux/pci.h> /* for scatterlist macros */
14#include <linux/usb.h> 7#include <linux/usb.h>
15#include <linux/module.h> 8#include <linux/module.h>
@@ -1457,12 +1450,11 @@ free_interfaces:
1457 */ 1450 */
1458 for (i = 0; i < nintf; ++i) { 1451 for (i = 0; i < nintf; ++i) {
1459 struct usb_interface *intf = cp->interface[i]; 1452 struct usb_interface *intf = cp->interface[i];
1460 struct usb_host_interface *alt = intf->cur_altsetting;
1461 1453
1462 dev_dbg (&dev->dev, 1454 dev_dbg (&dev->dev,
1463 "adding %s (config #%d, interface %d)\n", 1455 "adding %s (config #%d, interface %d)\n",
1464 intf->dev.bus_id, configuration, 1456 intf->dev.bus_id, configuration,
1465 alt->desc.bInterfaceNumber); 1457 intf->cur_altsetting->desc.bInterfaceNumber);
1466 ret = device_add (&intf->dev); 1458 ret = device_add (&intf->dev);
1467 if (ret != 0) { 1459 if (ret != 0) {
1468 dev_err(&dev->dev, 1460 dev_err(&dev->dev,
diff --git a/drivers/usb/core/notify.c b/drivers/usb/core/notify.c
index 37da059eced7..fbbebab52fbd 100644
--- a/drivers/usb/core/notify.c
+++ b/drivers/usb/core/notify.c
@@ -12,13 +12,7 @@
12#include <linux/config.h> 12#include <linux/config.h>
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/notifier.h> 14#include <linux/notifier.h>
15#ifdef CONFIG_USB_DEBUG
16 #define DEBUG
17#else
18 #undef DEBUG
19#endif
20#include <linux/usb.h> 15#include <linux/usb.h>
21
22#include "usb.h" 16#include "usb.h"
23 17
24 18
diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c
index edd83e014452..71d881327e88 100644
--- a/drivers/usb/core/sysfs.c
+++ b/drivers/usb/core/sysfs.c
@@ -12,14 +12,7 @@
12 12
13#include <linux/config.h> 13#include <linux/config.h>
14#include <linux/kernel.h> 14#include <linux/kernel.h>
15
16#ifdef CONFIG_USB_DEBUG
17 #define DEBUG
18#else
19 #undef DEBUG
20#endif
21#include <linux/usb.h> 15#include <linux/usb.h>
22
23#include "usb.h" 16#include "usb.h"
24 17
25/* endpoint stuff */ 18/* endpoint stuff */
diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
index f2a1fed2a802..081796726b95 100644
--- a/drivers/usb/core/urb.c
+++ b/drivers/usb/core/urb.c
@@ -4,12 +4,6 @@
4#include <linux/bitops.h> 4#include <linux/bitops.h>
5#include <linux/slab.h> 5#include <linux/slab.h>
6#include <linux/init.h> 6#include <linux/init.h>
7
8#ifdef CONFIG_USB_DEBUG
9 #define DEBUG
10#else
11 #undef DEBUG
12#endif
13#include <linux/usb.h> 7#include <linux/usb.h>
14#include "hcd.h" 8#include "hcd.h"
15 9
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
index 0eefff7bcb3c..e197ce9353de 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
@@ -22,13 +22,6 @@
22 */ 22 */
23 23
24#include <linux/config.h> 24#include <linux/config.h>
25
26#ifdef CONFIG_USB_DEBUG
27 #define DEBUG
28#else
29 #undef DEBUG
30#endif
31
32#include <linux/module.h> 25#include <linux/module.h>
33#include <linux/string.h> 26#include <linux/string.h>
34#include <linux/bitops.h> 27#include <linux/bitops.h>
diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c
index 1e407745c115..c655d46c8aed 100644
--- a/drivers/usb/gadget/dummy_hcd.c
+++ b/drivers/usb/gadget/dummy_hcd.c
@@ -944,7 +944,7 @@ static int dummy_udc_suspend (struct platform_device *dev, pm_message_t state)
944 set_link_state (dum); 944 set_link_state (dum);
945 spin_unlock_irq (&dum->lock); 945 spin_unlock_irq (&dum->lock);
946 946
947 dev->power.power_state = state; 947 dev->dev.power.power_state = state;
948 usb_hcd_poll_rh_status (dummy_to_hcd (dum)); 948 usb_hcd_poll_rh_status (dummy_to_hcd (dum));
949 return 0; 949 return 0;
950} 950}
@@ -1904,7 +1904,7 @@ static int dummy_hcd_probe (struct platform_device *dev)
1904 struct usb_hcd *hcd; 1904 struct usb_hcd *hcd;
1905 int retval; 1905 int retval;
1906 1906
1907 dev_info (dev, "%s, driver " DRIVER_VERSION "\n", driver_desc); 1907 dev_info(&dev->dev, "%s, driver " DRIVER_VERSION "\n", driver_desc);
1908 1908
1909 hcd = usb_create_hcd (&dummy_hcd, &dev->dev, dev->dev.bus_id); 1909 hcd = usb_create_hcd (&dummy_hcd, &dev->dev, dev->dev.bus_id);
1910 if (!hcd) 1910 if (!hcd)
diff --git a/drivers/usb/host/ohci-lh7a404.c b/drivers/usb/host/ohci-lh7a404.c
index 081ec3f5cff4..3959ccc88332 100644
--- a/drivers/usb/host/ohci-lh7a404.c
+++ b/drivers/usb/host/ohci-lh7a404.c
@@ -219,7 +219,7 @@ static int ohci_hcd_lh7a404_drv_probe(struct platform_device *pdev)
219 219
220static int ohci_hcd_lh7a404_drv_remove(struct platform_device *pdev) 220static int ohci_hcd_lh7a404_drv_remove(struct platform_device *pdev)
221{ 221{
222 struct usb_hcd *hcd = platform_get_drvdata(dev); 222 struct usb_hcd *hcd = platform_get_drvdata(pdev);
223 223
224 usb_hcd_lh7a404_remove(hcd, pdev); 224 usb_hcd_lh7a404_remove(hcd, pdev);
225 return 0; 225 return 0;
diff --git a/drivers/usb/host/ohci-ppc-soc.c b/drivers/usb/host/ohci-ppc-soc.c
index 18755766e406..2ec6a78bd65e 100644
--- a/drivers/usb/host/ohci-ppc-soc.c
+++ b/drivers/usb/host/ohci-ppc-soc.c
@@ -185,7 +185,7 @@ static int ohci_hcd_ppc_soc_drv_probe(struct platform_device *pdev)
185 185
186static int ohci_hcd_ppc_soc_drv_remove(struct platform_device *pdev) 186static int ohci_hcd_ppc_soc_drv_remove(struct platform_device *pdev)
187{ 187{
188 struct usb_hcd *hcd = platform_get_drvdata(dev); 188 struct usb_hcd *hcd = platform_get_drvdata(pdev);
189 189
190 usb_hcd_ppc_soc_remove(hcd, pdev); 190 usb_hcd_ppc_soc_remove(hcd, pdev);
191 return 0; 191 return 0;
diff --git a/drivers/usb/image/microtek.c b/drivers/usb/image/microtek.c
index 61a2604cce4f..950543aa5ac7 100644
--- a/drivers/usb/image/microtek.c
+++ b/drivers/usb/image/microtek.c
@@ -327,6 +327,18 @@ static inline void mts_urb_abort(struct mts_desc* desc) {
327 usb_kill_urb( desc->urb ); 327 usb_kill_urb( desc->urb );
328} 328}
329 329
330static int mts_slave_alloc (struct scsi_device *s)
331{
332 s->inquiry_len = 0x24;
333 return 0;
334}
335
336static int mts_slave_configure (struct scsi_device *s)
337{
338 blk_queue_dma_alignment(s->request_queue, (512 - 1));
339 return 0;
340}
341
330static int mts_scsi_abort (Scsi_Cmnd *srb) 342static int mts_scsi_abort (Scsi_Cmnd *srb)
331{ 343{
332 struct mts_desc* desc = (struct mts_desc*)(srb->device->host->hostdata[0]); 344 struct mts_desc* desc = (struct mts_desc*)(srb->device->host->hostdata[0]);
@@ -411,7 +423,7 @@ static void mts_transfer_done( struct urb *transfer, struct pt_regs *regs )
411 MTS_INT_INIT(); 423 MTS_INT_INIT();
412 424
413 context->srb->result &= MTS_SCSI_ERR_MASK; 425 context->srb->result &= MTS_SCSI_ERR_MASK;
414 context->srb->result |= (unsigned)context->status<<1; 426 context->srb->result |= (unsigned)(*context->scsi_status)<<1;
415 427
416 mts_transfer_cleanup(transfer); 428 mts_transfer_cleanup(transfer);
417 429
@@ -427,7 +439,7 @@ static void mts_get_status( struct urb *transfer )
427 mts_int_submit_urb(transfer, 439 mts_int_submit_urb(transfer,
428 usb_rcvbulkpipe(context->instance->usb_dev, 440 usb_rcvbulkpipe(context->instance->usb_dev,
429 context->instance->ep_response), 441 context->instance->ep_response),
430 &context->status, 442 context->scsi_status,
431 1, 443 1,
432 mts_transfer_done ); 444 mts_transfer_done );
433} 445}
@@ -481,7 +493,7 @@ static void mts_command_done( struct urb *transfer, struct pt_regs *regs )
481 context->data_pipe, 493 context->data_pipe,
482 context->data, 494 context->data,
483 context->data_length, 495 context->data_length,
484 context->srb->use_sg ? mts_do_sg : mts_data_done); 496 context->srb->use_sg > 1 ? mts_do_sg : mts_data_done);
485 } else { 497 } else {
486 mts_get_status(transfer); 498 mts_get_status(transfer);
487 } 499 }
@@ -627,7 +639,6 @@ int mts_scsi_queuecommand( Scsi_Cmnd *srb, mts_scsi_cmnd_callback callback )
627 callback(srb); 639 callback(srb);
628 640
629 } 641 }
630
631out: 642out:
632 return err; 643 return err;
633} 644}
@@ -645,6 +656,9 @@ static struct scsi_host_template mts_scsi_host_template = {
645 .cmd_per_lun = 1, 656 .cmd_per_lun = 1,
646 .use_clustering = 1, 657 .use_clustering = 1,
647 .emulated = 1, 658 .emulated = 1,
659 .slave_alloc = mts_slave_alloc,
660 .slave_configure = mts_slave_configure,
661 .max_sectors= 256, /* 128 K */
648}; 662};
649 663
650struct vendor_product 664struct vendor_product
@@ -771,8 +785,8 @@ static int mts_usb_probe(struct usb_interface *intf,
771 MTS_WARNING( "couldn't find an output bulk endpoint. Bailing out.\n" ); 785 MTS_WARNING( "couldn't find an output bulk endpoint. Bailing out.\n" );
772 return -ENODEV; 786 return -ENODEV;
773 } 787 }
774 788
775 789
776 new_desc = kzalloc(sizeof(struct mts_desc), GFP_KERNEL); 790 new_desc = kzalloc(sizeof(struct mts_desc), GFP_KERNEL);
777 if (!new_desc) 791 if (!new_desc)
778 goto out; 792 goto out;
@@ -781,6 +795,10 @@ static int mts_usb_probe(struct usb_interface *intf,
781 if (!new_desc->urb) 795 if (!new_desc->urb)
782 goto out_kfree; 796 goto out_kfree;
783 797
798 new_desc->context.scsi_status = kmalloc(1, GFP_KERNEL);
799 if (!new_desc->context.scsi_status)
800 goto out_kfree2;
801
784 new_desc->usb_dev = dev; 802 new_desc->usb_dev = dev;
785 new_desc->usb_intf = intf; 803 new_desc->usb_intf = intf;
786 init_MUTEX(&new_desc->lock); 804 init_MUTEX(&new_desc->lock);
@@ -817,6 +835,8 @@ static int mts_usb_probe(struct usb_interface *intf,
817 usb_set_intfdata(intf, new_desc); 835 usb_set_intfdata(intf, new_desc);
818 return 0; 836 return 0;
819 837
838 out_kfree2:
839 kfree(new_desc->context.scsi_status);
820 out_free_urb: 840 out_free_urb:
821 usb_free_urb(new_desc->urb); 841 usb_free_urb(new_desc->urb);
822 out_kfree: 842 out_kfree:
@@ -836,6 +856,7 @@ static void mts_usb_disconnect (struct usb_interface *intf)
836 856
837 scsi_host_put(desc->host); 857 scsi_host_put(desc->host);
838 usb_free_urb(desc->urb); 858 usb_free_urb(desc->urb);
859 kfree(desc->context.scsi_status);
839 kfree(desc); 860 kfree(desc);
840} 861}
841 862
@@ -856,5 +877,3 @@ module_exit(microtek_drv_exit);
856MODULE_AUTHOR( DRIVER_AUTHOR ); 877MODULE_AUTHOR( DRIVER_AUTHOR );
857MODULE_DESCRIPTION( DRIVER_DESC ); 878MODULE_DESCRIPTION( DRIVER_DESC );
858MODULE_LICENSE("GPL"); 879MODULE_LICENSE("GPL");
859
860
diff --git a/drivers/usb/image/microtek.h b/drivers/usb/image/microtek.h
index 3271deb8c001..926d4bdc6746 100644
--- a/drivers/usb/image/microtek.h
+++ b/drivers/usb/image/microtek.h
@@ -22,7 +22,7 @@ struct mts_transfer_context
22 int data_pipe; 22 int data_pipe;
23 int fragment; 23 int fragment;
24 24
25 u8 status; /* status returned from ep_response after command completion */ 25 u8 *scsi_status; /* status returned from ep_response after command completion */
26}; 26};
27 27
28 28
diff --git a/drivers/usb/input/Makefile b/drivers/usb/input/Makefile
index 5e03b93f29f6..07cb17db42fc 100644
--- a/drivers/usb/input/Makefile
+++ b/drivers/usb/input/Makefile
@@ -42,3 +42,7 @@ obj-$(CONFIG_USB_ACECAD) += acecad.o
42obj-$(CONFIG_USB_YEALINK) += yealink.o 42obj-$(CONFIG_USB_YEALINK) += yealink.o
43obj-$(CONFIG_USB_XPAD) += xpad.o 43obj-$(CONFIG_USB_XPAD) += xpad.o
44obj-$(CONFIG_USB_APPLETOUCH) += appletouch.o 44obj-$(CONFIG_USB_APPLETOUCH) += appletouch.o
45
46ifeq ($(CONFIG_USB_DEBUG),y)
47EXTRA_CFLAGS += -DDEBUG
48endif
diff --git a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c
index 79ddce4555ab..45f3130fadea 100644
--- a/drivers/usb/input/hid-core.c
+++ b/drivers/usb/input/hid-core.c
@@ -1318,6 +1318,7 @@ void hid_init_reports(struct hid_device *hid)
1318#define USB_DEVICE_ID_WACOM_PTU 0x0003 1318#define USB_DEVICE_ID_WACOM_PTU 0x0003
1319#define USB_DEVICE_ID_WACOM_INTUOS3 0x00B0 1319#define USB_DEVICE_ID_WACOM_INTUOS3 0x00B0
1320#define USB_DEVICE_ID_WACOM_CINTIQ 0x003F 1320#define USB_DEVICE_ID_WACOM_CINTIQ 0x003F
1321#define USB_DEVICE_ID_WACOM_DTF 0x00C0
1321 1322
1322#define USB_VENDOR_ID_ACECAD 0x0460 1323#define USB_VENDOR_ID_ACECAD 0x0460
1323#define USB_DEVICE_ID_ACECAD_FLAIR 0x0004 1324#define USB_DEVICE_ID_ACECAD_FLAIR 0x0004
@@ -1524,6 +1525,9 @@ static struct hid_blacklist {
1524 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 3, HID_QUIRK_IGNORE }, 1525 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 3, HID_QUIRK_IGNORE },
1525 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 4, HID_QUIRK_IGNORE }, 1526 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 4, HID_QUIRK_IGNORE },
1526 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 5, HID_QUIRK_IGNORE }, 1527 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 5, HID_QUIRK_IGNORE },
1528 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 7, HID_QUIRK_IGNORE },
1529 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 8, HID_QUIRK_IGNORE },
1530 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 9, HID_QUIRK_IGNORE },
1527 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 1, HID_QUIRK_IGNORE }, 1531 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 1, HID_QUIRK_IGNORE },
1528 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 2, HID_QUIRK_IGNORE }, 1532 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 2, HID_QUIRK_IGNORE },
1529 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 3, HID_QUIRK_IGNORE }, 1533 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 3, HID_QUIRK_IGNORE },
@@ -1531,11 +1535,19 @@ static struct hid_blacklist {
1531 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 5, HID_QUIRK_IGNORE }, 1535 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 5, HID_QUIRK_IGNORE },
1532 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 7, HID_QUIRK_IGNORE }, 1536 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 7, HID_QUIRK_IGNORE },
1533 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO, HID_QUIRK_IGNORE }, 1537 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO, HID_QUIRK_IGNORE },
1538 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO + 1, HID_QUIRK_IGNORE },
1539 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO + 2, HID_QUIRK_IGNORE },
1540 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO + 3, HID_QUIRK_IGNORE },
1541 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO + 4, HID_QUIRK_IGNORE },
1542 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 5, HID_QUIRK_IGNORE },
1543 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 6, HID_QUIRK_IGNORE },
1534 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PTU, HID_QUIRK_IGNORE }, 1544 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PTU, HID_QUIRK_IGNORE },
1535 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3, HID_QUIRK_IGNORE }, 1545 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3, HID_QUIRK_IGNORE },
1536 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 1, HID_QUIRK_IGNORE }, 1546 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 1, HID_QUIRK_IGNORE },
1537 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 2, HID_QUIRK_IGNORE }, 1547 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 2, HID_QUIRK_IGNORE },
1548 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 5, HID_QUIRK_IGNORE },
1538 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE }, 1549 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE },
1550 { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF, HID_QUIRK_IGNORE },
1539 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, 1551 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
1540 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, 1552 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
1541 1553
diff --git a/drivers/usb/input/itmtouch.c b/drivers/usb/input/itmtouch.c
index 3b581853cf10..4a50acb39d29 100644
--- a/drivers/usb/input/itmtouch.c
+++ b/drivers/usb/input/itmtouch.c
@@ -40,13 +40,6 @@
40 *****************************************************************************/ 40 *****************************************************************************/
41 41
42#include <linux/config.h> 42#include <linux/config.h>
43
44#ifdef CONFIG_USB_DEBUG
45 #define DEBUG
46#else
47 #undef DEBUG
48#endif
49
50#include <linux/kernel.h> 43#include <linux/kernel.h>
51#include <linux/slab.h> 44#include <linux/slab.h>
52#include <linux/input.h> 45#include <linux/input.h>
diff --git a/drivers/usb/input/keyspan_remote.c b/drivers/usb/input/keyspan_remote.c
index 5b8d65f62abf..a32cfe51b77d 100644
--- a/drivers/usb/input/keyspan_remote.c
+++ b/drivers/usb/input/keyspan_remote.c
@@ -160,7 +160,8 @@ static int keyspan_load_tester(struct usb_keyspan* dev, int bits_needed)
160 * though so it's not too big a deal 160 * though so it's not too big a deal
161 */ 161 */
162 if (dev->data.pos >= dev->data.len) { 162 if (dev->data.pos >= dev->data.len) {
163 dev_dbg(&dev->udev, "%s - Error ran out of data. pos: %d, len: %d\n", 163 dev_dbg(&dev->udev->dev,
164 "%s - Error ran out of data. pos: %d, len: %d\n",
164 __FUNCTION__, dev->data.pos, dev->data.len); 165 __FUNCTION__, dev->data.pos, dev->data.len);
165 return -1; 166 return -1;
166 } 167 }
@@ -306,7 +307,7 @@ static void keyspan_check_data(struct usb_keyspan *remote, struct pt_regs *regs)
306 err("Bad message recieved, no stop bit found.\n"); 307 err("Bad message recieved, no stop bit found.\n");
307 } 308 }
308 309
309 dev_dbg(&remote->udev, 310 dev_dbg(&remote->udev->dev,
310 "%s found valid message: system: %d, button: %d, toggle: %d\n", 311 "%s found valid message: system: %d, button: %d, toggle: %d\n",
311 __FUNCTION__, message.system, message.button, message.toggle); 312 __FUNCTION__, message.system, message.button, message.toggle);
312 313
diff --git a/drivers/usb/input/mtouchusb.c b/drivers/usb/input/mtouchusb.c
index 7fce526560ca..52cc18cd247d 100644
--- a/drivers/usb/input/mtouchusb.c
+++ b/drivers/usb/input/mtouchusb.c
@@ -40,13 +40,6 @@
40 *****************************************************************************/ 40 *****************************************************************************/
41 41
42#include <linux/config.h> 42#include <linux/config.h>
43
44#ifdef CONFIG_USB_DEBUG
45 #define DEBUG
46#else
47 #undef DEBUG
48#endif
49
50#include <linux/kernel.h> 43#include <linux/kernel.h>
51#include <linux/slab.h> 44#include <linux/slab.h>
52#include <linux/input.h> 45#include <linux/input.h>
diff --git a/drivers/usb/input/pid.c b/drivers/usb/input/pid.c
index dca5ee93a4ef..19e015d171aa 100644
--- a/drivers/usb/input/pid.c
+++ b/drivers/usb/input/pid.c
@@ -37,8 +37,6 @@
37#include "hid.h" 37#include "hid.h"
38#include "pid.h" 38#include "pid.h"
39 39
40#define DEBUG
41
42#define CHECK_OWNERSHIP(i, hid_pid) \ 40#define CHECK_OWNERSHIP(i, hid_pid) \
43 ((i) < FF_EFFECTS_MAX && i >= 0 && \ 41 ((i) < FF_EFFECTS_MAX && i >= 0 && \
44 test_bit(FF_PID_FLAGS_USED, &hid_pid->effects[(i)].flags) && \ 42 test_bit(FF_PID_FLAGS_USED, &hid_pid->effects[(i)].flags) && \
diff --git a/drivers/usb/input/touchkitusb.c b/drivers/usb/input/touchkitusb.c
index 0043e6ebcd1f..7420c6b84284 100644
--- a/drivers/usb/input/touchkitusb.c
+++ b/drivers/usb/input/touchkitusb.c
@@ -30,10 +30,6 @@
30#include <linux/input.h> 30#include <linux/input.h>
31#include <linux/module.h> 31#include <linux/module.h>
32#include <linux/init.h> 32#include <linux/init.h>
33
34#if !defined(DEBUG) && defined(CONFIG_USB_DEBUG)
35#define DEBUG
36#endif
37#include <linux/usb.h> 33#include <linux/usb.h>
38#include <linux/usb_input.h> 34#include <linux/usb_input.h>
39 35
diff --git a/drivers/usb/input/wacom.c b/drivers/usb/input/wacom.c
index ea0f75773ae1..aea1cfae34cc 100644
--- a/drivers/usb/input/wacom.c
+++ b/drivers/usb/input/wacom.c
@@ -52,8 +52,10 @@
52 * v1.30.1 (pi) - Added Graphire3 support 52 * v1.30.1 (pi) - Added Graphire3 support
53 * v1.40 (pc) - Add support for several new devices, fix eraser reporting, ... 53 * v1.40 (pc) - Add support for several new devices, fix eraser reporting, ...
54 * v1.43 (pc) - Added support for Cintiq 21UX 54 * v1.43 (pc) - Added support for Cintiq 21UX
55 - Fixed a Graphire bug 55 * - Fixed a Graphire bug
56 - Merged wacom_intuos3_irq into wacom_intuos_irq 56 * - Merged wacom_intuos3_irq into wacom_intuos_irq
57 * v1.44 (pc) - Added support for Graphire4, Cintiq 710, Intuos3 6x11, etc.
58 * - Report Device IDs
57 */ 59 */
58 60
59/* 61/*
@@ -76,7 +78,7 @@
76/* 78/*
77 * Version Information 79 * Version Information
78 */ 80 */
79#define DRIVER_VERSION "v1.43" 81#define DRIVER_VERSION "v1.44"
80#define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>" 82#define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>"
81#define DRIVER_DESC "USB Wacom Graphire and Wacom Intuos tablet driver" 83#define DRIVER_DESC "USB Wacom Graphire and Wacom Intuos tablet driver"
82#define DRIVER_LICENSE "GPL" 84#define DRIVER_LICENSE "GPL"
@@ -86,10 +88,14 @@ MODULE_DESCRIPTION(DRIVER_DESC);
86MODULE_LICENSE(DRIVER_LICENSE); 88MODULE_LICENSE(DRIVER_LICENSE);
87 89
88#define USB_VENDOR_ID_WACOM 0x056a 90#define USB_VENDOR_ID_WACOM 0x056a
91#define STYLUS_DEVICE_ID 0x02
92#define CURSOR_DEVICE_ID 0x06
93#define ERASER_DEVICE_ID 0x0A
89 94
90enum { 95enum {
91 PENPARTNER = 0, 96 PENPARTNER = 0,
92 GRAPHIRE, 97 GRAPHIRE,
98 G4,
93 PL, 99 PL,
94 INTUOS, 100 INTUOS,
95 INTUOS3, 101 INTUOS3,
@@ -116,6 +122,7 @@ struct wacom {
116 struct urb *irq; 122 struct urb *irq;
117 struct wacom_features *features; 123 struct wacom_features *features;
118 int tool[2]; 124 int tool[2];
125 int id[2];
119 __u32 serial[2]; 126 __u32 serial[2];
120 char phys[32]; 127 char phys[32];
121}; 128};
@@ -136,7 +143,7 @@ static void wacom_pl_irq(struct urb *urb, struct pt_regs *regs)
136 struct wacom *wacom = urb->context; 143 struct wacom *wacom = urb->context;
137 unsigned char *data = wacom->data; 144 unsigned char *data = wacom->data;
138 struct input_dev *dev = wacom->dev; 145 struct input_dev *dev = wacom->dev;
139 int prox, pressure; 146 int prox, pressure, id;
140 int retval; 147 int retval;
141 148
142 switch (urb->status) { 149 switch (urb->status) {
@@ -163,6 +170,7 @@ static void wacom_pl_irq(struct urb *urb, struct pt_regs *regs)
163 170
164 input_regs(dev, regs); 171 input_regs(dev, regs);
165 172
173 id = ERASER_DEVICE_ID;
166 if (prox) { 174 if (prox) {
167 175
168 pressure = (signed char)((data[7] << 1) | ((data[4] >> 2) & 1)); 176 pressure = (signed char)((data[7] << 1) | ((data[4] >> 2) & 1));
@@ -177,11 +185,15 @@ static void wacom_pl_irq(struct urb *urb, struct pt_regs *regs)
177 * an out of proximity for previous tool then a in for new tool. 185 * an out of proximity for previous tool then a in for new tool.
178 */ 186 */
179 if (!wacom->tool[0]) { 187 if (!wacom->tool[0]) {
180 /* Going into proximity select tool */ 188 /* Eraser bit set for DTF */
181 wacom->tool[1] = (data[4] & 0x20)? BTN_TOOL_RUBBER : BTN_TOOL_PEN; 189 if (data[1] & 0x10)
190 wacom->tool[1] = BTN_TOOL_RUBBER;
191 else
192 /* Going into proximity select tool */
193 wacom->tool[1] = (data[4] & 0x20) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN;
182 } else { 194 } else {
183 /* was entered with stylus2 pressed */ 195 /* was entered with stylus2 pressed */
184 if (wacom->tool[1] == BTN_TOOL_RUBBER && !(data[4] & 0x20) ) { 196 if (wacom->tool[1] == BTN_TOOL_RUBBER && !(data[4] & 0x20)) {
185 /* report out proximity for previous tool */ 197 /* report out proximity for previous tool */
186 input_report_key(dev, wacom->tool[1], 0); 198 input_report_key(dev, wacom->tool[1], 0);
187 input_sync(dev); 199 input_sync(dev);
@@ -192,8 +204,9 @@ static void wacom_pl_irq(struct urb *urb, struct pt_regs *regs)
192 if (wacom->tool[1] != BTN_TOOL_RUBBER) { 204 if (wacom->tool[1] != BTN_TOOL_RUBBER) {
193 /* Unknown tool selected default to pen tool */ 205 /* Unknown tool selected default to pen tool */
194 wacom->tool[1] = BTN_TOOL_PEN; 206 wacom->tool[1] = BTN_TOOL_PEN;
207 id = STYLUS_DEVICE_ID;
195 } 208 }
196 input_report_key(dev, wacom->tool[1], prox); /* report in proximity for tool */ 209 input_report_key(dev, wacom->tool[1], id); /* report in proximity for tool */
197 input_report_abs(dev, ABS_X, data[3] | (data[2] << 7) | ((data[1] & 0x03) << 14)); 210 input_report_abs(dev, ABS_X, data[3] | (data[2] << 7) | ((data[1] & 0x03) << 14));
198 input_report_abs(dev, ABS_Y, data[6] | (data[5] << 7) | ((data[4] & 0x03) << 14)); 211 input_report_abs(dev, ABS_Y, data[6] | (data[5] << 7) | ((data[4] & 0x03) << 14));
199 input_report_abs(dev, ABS_PRESSURE, pressure); 212 input_report_abs(dev, ABS_PRESSURE, pressure);
@@ -250,10 +263,10 @@ static void wacom_ptu_irq(struct urb *urb, struct pt_regs *regs)
250 263
251 input_regs(dev, regs); 264 input_regs(dev, regs);
252 if (data[1] & 0x04) { 265 if (data[1] & 0x04) {
253 input_report_key(dev, BTN_TOOL_RUBBER, data[1] & 0x20); 266 input_report_key(dev, BTN_TOOL_RUBBER, (data[1] & 0x20) ? ERASER_DEVICE_ID : 0);
254 input_report_key(dev, BTN_TOUCH, data[1] & 0x08); 267 input_report_key(dev, BTN_TOUCH, data[1] & 0x08);
255 } else { 268 } else {
256 input_report_key(dev, BTN_TOOL_PEN, data[1] & 0x20); 269 input_report_key(dev, BTN_TOOL_PEN, (data[1] & 0x20) ? STYLUS_DEVICE_ID : 0);
257 input_report_key(dev, BTN_TOUCH, data[1] & 0x01); 270 input_report_key(dev, BTN_TOUCH, data[1] & 0x01);
258 } 271 }
259 input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[2])); 272 input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[2]));
@@ -299,7 +312,7 @@ static void wacom_penpartner_irq(struct urb *urb, struct pt_regs *regs)
299 } 312 }
300 313
301 input_regs(dev, regs); 314 input_regs(dev, regs);
302 input_report_key(dev, BTN_TOOL_PEN, 1); 315 input_report_key(dev, BTN_TOOL_PEN, STYLUS_DEVICE_ID);
303 input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1])); 316 input_report_abs(dev, ABS_X, le16_to_cpu(*(__le16 *) &data[1]));
304 input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3])); 317 input_report_abs(dev, ABS_Y, le16_to_cpu(*(__le16 *) &data[3]));
305 input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127); 318 input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127);
@@ -319,7 +332,7 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
319 struct wacom *wacom = urb->context; 332 struct wacom *wacom = urb->context;
320 unsigned char *data = wacom->data; 333 unsigned char *data = wacom->data;
321 struct input_dev *dev = wacom->dev; 334 struct input_dev *dev = wacom->dev;
322 int x, y; 335 int x, y, id, rw;
323 int retval; 336 int retval;
324 337
325 switch (urb->status) { 338 switch (urb->status) {
@@ -344,6 +357,7 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
344 357
345 input_regs(dev, regs); 358 input_regs(dev, regs);
346 359
360 id = STYLUS_DEVICE_ID;
347 if (data[1] & 0x10) { /* in prox */ 361 if (data[1] & 0x10) { /* in prox */
348 362
349 switch ((data[1] >> 5) & 3) { 363 switch ((data[1] >> 5) & 3) {
@@ -354,18 +368,27 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
354 368
355 case 1: /* Rubber */ 369 case 1: /* Rubber */
356 wacom->tool[0] = BTN_TOOL_RUBBER; 370 wacom->tool[0] = BTN_TOOL_RUBBER;
371 id = ERASER_DEVICE_ID;
357 break; 372 break;
358 373
359 case 2: /* Mouse with wheel */ 374 case 2: /* Mouse with wheel */
360 input_report_key(dev, BTN_MIDDLE, data[1] & 0x04); 375 input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
361 input_report_rel(dev, REL_WHEEL, (signed char) data[6]); 376 if (wacom->features->type == G4) {
377 rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
378 input_report_rel(dev, REL_WHEEL, rw);
379 } else
380 input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
362 /* fall through */ 381 /* fall through */
363 382
364 case 3: /* Mouse without wheel */ 383 case 3: /* Mouse without wheel */
365 wacom->tool[0] = BTN_TOOL_MOUSE; 384 wacom->tool[0] = BTN_TOOL_MOUSE;
385 id = CURSOR_DEVICE_ID;
366 input_report_key(dev, BTN_LEFT, data[1] & 0x01); 386 input_report_key(dev, BTN_LEFT, data[1] & 0x01);
367 input_report_key(dev, BTN_RIGHT, data[1] & 0x02); 387 input_report_key(dev, BTN_RIGHT, data[1] & 0x02);
368 input_report_abs(dev, ABS_DISTANCE, data[7]); 388 if (wacom->features->type == G4)
389 input_report_abs(dev, ABS_DISTANCE, data[6]);
390 else
391 input_report_abs(dev, ABS_DISTANCE, data[7]);
369 break; 392 break;
370 } 393 }
371 } 394 }
@@ -376,16 +399,50 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
376 input_report_abs(dev, ABS_X, x); 399 input_report_abs(dev, ABS_X, x);
377 input_report_abs(dev, ABS_Y, y); 400 input_report_abs(dev, ABS_Y, y);
378 if (wacom->tool[0] != BTN_TOOL_MOUSE) { 401 if (wacom->tool[0] != BTN_TOOL_MOUSE) {
379 input_report_abs(dev, ABS_PRESSURE, le16_to_cpu(*(__le16 *) &data[6])); 402 input_report_abs(dev, ABS_PRESSURE, data[6] | ((data[7] & 0x01) << 8));
380 input_report_key(dev, BTN_TOUCH, data[1] & 0x01); 403 input_report_key(dev, BTN_TOUCH, data[1] & 0x01);
381 input_report_key(dev, BTN_STYLUS, data[1] & 0x02); 404 input_report_key(dev, BTN_STYLUS, data[1] & 0x02);
382 input_report_key(dev, BTN_STYLUS2, data[1] & 0x04); 405 input_report_key(dev, BTN_STYLUS2, data[1] & 0x04);
383 } 406 }
384 } 407 }
385 408
386 input_report_key(dev, wacom->tool[0], data[1] & 0x10); 409 input_report_key(dev, wacom->tool[0], (data[1] & 0x10) ? id : 0);
387 input_sync(dev); 410 input_sync(dev);
388 411
412 /* send pad data */
413 if (wacom->features->type == G4) {
414 /* fist time sending pad data */
415 if (wacom->tool[1] != BTN_TOOL_FINGER) {
416 wacom->id[1] = 0;
417 wacom->serial[1] = (data[7] & 0x38) >> 2;
418 }
419 if (data[7] & 0xf8) {
420 input_report_key(dev, BTN_0, (data[7] & 0x40));
421 input_report_key(dev, BTN_4, (data[7] & 0x80));
422 if (((data[7] & 0x38) >> 2) == (wacom->serial[1] & 0x0e))
423 /* alter REL_WHEEL value so X apps can get it */
424 wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1;
425 else
426 wacom->serial[1] = (data[7] & 0x38 ) >> 2;
427
428 /* don't alter the value when there is no wheel event */
429 if (wacom->serial[1] == 1)
430 wacom->serial[1] = 0;
431 rw = wacom->serial[1];
432 rw = (rw & 0x08) ? -(rw & 0x07) : (rw & 0x07);
433 input_report_rel(dev, REL_WHEEL, rw);
434 wacom->tool[1] = BTN_TOOL_FINGER;
435 wacom->id[1] = data[7] & 0xf8;
436 input_report_key(dev, wacom->tool[1], 0xf0);
437 input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
438 } else if (wacom->id[1]) {
439 wacom->id[1] = 0;
440 wacom->serial[1] = 0;
441 input_report_key(dev, wacom->tool[1], 0);
442 input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
443 }
444 input_sync(dev);
445 }
389 exit: 446 exit:
390 retval = usb_submit_urb (urb, GFP_ATOMIC); 447 retval = usb_submit_urb (urb, GFP_ATOMIC);
391 if (retval) 448 if (retval)
@@ -410,7 +467,8 @@ static int wacom_intuos_inout(struct urb *urb)
410 (data[4] << 20) + (data[5] << 12) + 467 (data[4] << 20) + (data[5] << 12) +
411 (data[6] << 4) + (data[7] >> 4); 468 (data[6] << 4) + (data[7] >> 4);
412 469
413 switch ((data[2] << 4) | (data[3] >> 4)) { 470 wacom->id[idx] = (data[2] << 4) | (data[3] >> 4);
471 switch (wacom->id[idx]) {
414 case 0x812: /* Inking pen */ 472 case 0x812: /* Inking pen */
415 case 0x801: /* Intuos3 Inking pen */ 473 case 0x801: /* Intuos3 Inking pen */
416 case 0x012: 474 case 0x012:
@@ -458,7 +516,7 @@ static int wacom_intuos_inout(struct urb *urb)
458 default: /* Unknown tool */ 516 default: /* Unknown tool */
459 wacom->tool[idx] = BTN_TOOL_PEN; 517 wacom->tool[idx] = BTN_TOOL_PEN;
460 } 518 }
461 input_report_key(dev, wacom->tool[idx], 1); 519 input_report_key(dev, wacom->tool[idx], wacom->id[idx]);
462 input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]); 520 input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
463 input_sync(dev); 521 input_sync(dev);
464 return 1; 522 return 1;
@@ -637,7 +695,7 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
637 } 695 }
638 } 696 }
639 697
640 input_report_key(dev, wacom->tool[idx], 1); 698 input_report_key(dev, wacom->tool[idx], wacom->id[idx]);
641 input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]); 699 input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
642 input_sync(dev); 700 input_sync(dev);
643 701
@@ -655,6 +713,13 @@ static struct wacom_features wacom_features[] = {
655 { "Wacom Graphire2 5x7", 8, 13918, 10206, 511, 32, GRAPHIRE, wacom_graphire_irq }, 713 { "Wacom Graphire2 5x7", 8, 13918, 10206, 511, 32, GRAPHIRE, wacom_graphire_irq },
656 { "Wacom Graphire3", 8, 10208, 7424, 511, 32, GRAPHIRE, wacom_graphire_irq }, 714 { "Wacom Graphire3", 8, 10208, 7424, 511, 32, GRAPHIRE, wacom_graphire_irq },
657 { "Wacom Graphire3 6x8", 8, 16704, 12064, 511, 32, GRAPHIRE, wacom_graphire_irq }, 715 { "Wacom Graphire3 6x8", 8, 16704, 12064, 511, 32, GRAPHIRE, wacom_graphire_irq },
716 { "Wacom Graphire4 4x5", 8, 10208, 7424, 511, 32, G4, wacom_graphire_irq },
717 { "Wacom Graphire4 6x8", 8, 16704, 12064, 511, 32, G4, wacom_graphire_irq },
718 { "Wacom Volito", 8, 5104, 3712, 511, 32, GRAPHIRE, wacom_graphire_irq },
719 { "Wacom PenStation2", 8, 3250, 2320, 255, 32, GRAPHIRE, wacom_graphire_irq },
720 { "Wacom Volito2 4x5", 8, 5104, 3712, 511, 32, GRAPHIRE, wacom_graphire_irq },
721 { "Wacom Volito2 2x3", 8, 3248, 2320, 511, 32, GRAPHIRE, wacom_graphire_irq },
722 { "Wacom PenPartner2", 8, 3250, 2320, 255, 32, GRAPHIRE, wacom_graphire_irq },
658 { "Wacom Intuos 4x5", 10, 12700, 10600, 1023, 15, INTUOS, wacom_intuos_irq }, 723 { "Wacom Intuos 4x5", 10, 12700, 10600, 1023, 15, INTUOS, wacom_intuos_irq },
659 { "Wacom Intuos 6x8", 10, 20320, 16240, 1023, 15, INTUOS, wacom_intuos_irq }, 724 { "Wacom Intuos 6x8", 10, 20320, 16240, 1023, 15, INTUOS, wacom_intuos_irq },
660 { "Wacom Intuos 9x12", 10, 30480, 24060, 1023, 15, INTUOS, wacom_intuos_irq }, 725 { "Wacom Intuos 9x12", 10, 30480, 24060, 1023, 15, INTUOS, wacom_intuos_irq },
@@ -666,16 +731,20 @@ static struct wacom_features wacom_features[] = {
666 { "Wacom PL600SX", 8, 6260, 5016, 255, 32, PL, wacom_pl_irq }, 731 { "Wacom PL600SX", 8, 6260, 5016, 255, 32, PL, wacom_pl_irq },
667 { "Wacom PL550", 8, 6144, 4608, 511, 32, PL, wacom_pl_irq }, 732 { "Wacom PL550", 8, 6144, 4608, 511, 32, PL, wacom_pl_irq },
668 { "Wacom PL800", 8, 7220, 5780, 511, 32, PL, wacom_pl_irq }, 733 { "Wacom PL800", 8, 7220, 5780, 511, 32, PL, wacom_pl_irq },
734 { "Wacom PL700", 8, 6758, 5406, 511, 32, PL, wacom_pl_irq },
735 { "Wacom PL510", 8, 6282, 4762, 511, 32, PL, wacom_pl_irq },
736 { "Wacom PL710", 8, 34080, 27660, 511, 32, PL, wacom_pl_irq },
737 { "Wacom DTF720", 8, 6858, 5506, 511, 32, PL, wacom_pl_irq },
738 { "Wacom Cintiq Partner",8, 20480, 15360, 511, 32, PL, wacom_ptu_irq },
669 { "Wacom Intuos2 4x5", 10, 12700, 10600, 1023, 15, INTUOS, wacom_intuos_irq }, 739 { "Wacom Intuos2 4x5", 10, 12700, 10600, 1023, 15, INTUOS, wacom_intuos_irq },
670 { "Wacom Intuos2 6x8", 10, 20320, 16240, 1023, 15, INTUOS, wacom_intuos_irq }, 740 { "Wacom Intuos2 6x8", 10, 20320, 16240, 1023, 15, INTUOS, wacom_intuos_irq },
671 { "Wacom Intuos2 9x12", 10, 30480, 24060, 1023, 15, INTUOS, wacom_intuos_irq }, 741 { "Wacom Intuos2 9x12", 10, 30480, 24060, 1023, 15, INTUOS, wacom_intuos_irq },
672 { "Wacom Intuos2 12x12", 10, 30480, 31680, 1023, 15, INTUOS, wacom_intuos_irq }, 742 { "Wacom Intuos2 12x12", 10, 30480, 31680, 1023, 15, INTUOS, wacom_intuos_irq },
673 { "Wacom Intuos2 12x18", 10, 45720, 31680, 1023, 15, INTUOS, wacom_intuos_irq }, 743 { "Wacom Intuos2 12x18", 10, 45720, 31680, 1023, 15, INTUOS, wacom_intuos_irq },
674 { "Wacom Volito", 8, 5104, 3712, 511, 32, GRAPHIRE, wacom_graphire_irq },
675 { "Wacom Cintiq Partner",8, 20480, 15360, 511, 32, PL, wacom_ptu_irq },
676 { "Wacom Intuos3 4x5", 10, 25400, 20320, 1023, 15, INTUOS3, wacom_intuos_irq }, 744 { "Wacom Intuos3 4x5", 10, 25400, 20320, 1023, 15, INTUOS3, wacom_intuos_irq },
677 { "Wacom Intuos3 6x8", 10, 40640, 30480, 1023, 15, INTUOS3, wacom_intuos_irq }, 745 { "Wacom Intuos3 6x8", 10, 40640, 30480, 1023, 15, INTUOS3, wacom_intuos_irq },
678 { "Wacom Intuos3 9x12", 10, 60960, 45720, 1023, 15, INTUOS3, wacom_intuos_irq }, 746 { "Wacom Intuos3 9x12", 10, 60960, 45720, 1023, 15, INTUOS3, wacom_intuos_irq },
747 { "Wacom Intuos3 6x11", 10, 54204, 31750, 1023, 15, INTUOS3, wacom_intuos_irq },
679 { "Wacom Cintiq 21UX", 10, 87200, 65600, 1023, 15, CINTIQ, wacom_intuos_irq }, 748 { "Wacom Cintiq 21UX", 10, 87200, 65600, 1023, 15, CINTIQ, wacom_intuos_irq },
680 { "Wacom Intuos2 6x8", 10, 20320, 16240, 1023, 15, INTUOS, wacom_intuos_irq }, 749 { "Wacom Intuos2 6x8", 10, 20320, 16240, 1023, 15, INTUOS, wacom_intuos_irq },
681 { } 750 { }
@@ -688,6 +757,13 @@ static struct usb_device_id wacom_ids[] = {
688 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x12) }, 757 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x12) },
689 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x13) }, 758 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x13) },
690 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x14) }, 759 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x14) },
760 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x15) },
761 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x16) },
762 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x60) },
763 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x61) },
764 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x62) },
765 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x63) },
766 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x64) },
691 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x20) }, 767 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x20) },
692 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x21) }, 768 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x21) },
693 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x22) }, 769 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x22) },
@@ -699,16 +775,20 @@ static struct usb_device_id wacom_ids[] = {
699 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x33) }, 775 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x33) },
700 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x34) }, 776 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x34) },
701 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x35) }, 777 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x35) },
778 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x37) },
779 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x38) },
780 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x39) },
781 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xC0) },
782 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x03) },
702 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x41) }, 783 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x41) },
703 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x42) }, 784 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x42) },
704 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x43) }, 785 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x43) },
705 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x44) }, 786 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x44) },
706 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x45) }, 787 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x45) },
707 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x60) },
708 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x03) },
709 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB0) }, 788 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB0) },
710 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB1) }, 789 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB1) },
711 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB2) }, 790 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB2) },
791 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xB5) },
712 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x3F) }, 792 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x3F) },
713 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x47) }, 793 { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x47) },
714 { } 794 { }
@@ -779,6 +859,13 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
779 input_set_abs_params(input_dev, ABS_PRESSURE, 0, wacom->features->pressure_max, 0, 0); 859 input_set_abs_params(input_dev, ABS_PRESSURE, 0, wacom->features->pressure_max, 0, 0);
780 860
781 switch (wacom->features->type) { 861 switch (wacom->features->type) {
862 case G4:
863 input_dev->evbit[0] |= BIT(EV_MSC);
864 input_dev->mscbit[0] |= BIT(MSC_SERIAL);
865 input_dev->keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_FINGER);
866 input_dev->keybit[LONG(BTN_LEFT)] |= BIT(BTN_0) | BIT(BTN_1) | BIT(BTN_2) | BIT(BTN_3) | BIT(BTN_4) | BIT(BTN_5) | BIT(BTN_6) | BIT(BTN_7);
867 /* fall through */
868
782 case GRAPHIRE: 869 case GRAPHIRE:
783 input_dev->evbit[0] |= BIT(EV_REL); 870 input_dev->evbit[0] |= BIT(EV_REL);
784 input_dev->relbit[0] |= BIT(REL_WHEEL); 871 input_dev->relbit[0] |= BIT(REL_WHEEL);
diff --git a/drivers/usb/misc/Makefile b/drivers/usb/misc/Makefile
index 862e40a83689..6c693bc68e2e 100644
--- a/drivers/usb/misc/Makefile
+++ b/drivers/usb/misc/Makefile
@@ -18,4 +18,8 @@ obj-$(CONFIG_USB_RIO500) += rio500.o
18obj-$(CONFIG_USB_TEST) += usbtest.o 18obj-$(CONFIG_USB_TEST) += usbtest.o
19obj-$(CONFIG_USB_USS720) += uss720.o 19obj-$(CONFIG_USB_USS720) += uss720.o
20 20
21obj-$(CONFIG_USB_SISUSBVGA) += sisusbvga/ \ No newline at end of file 21obj-$(CONFIG_USB_SISUSBVGA) += sisusbvga/
22
23ifeq ($(CONFIG_USB_DEBUG),y)
24EXTRA_CFLAGS += -DDEBUG
25endif
diff --git a/drivers/usb/misc/auerswald.c b/drivers/usb/misc/auerswald.c
index 5f33f7c64885..2a28ceeaa66a 100644
--- a/drivers/usb/misc/auerswald.c
+++ b/drivers/usb/misc/auerswald.c
@@ -30,7 +30,6 @@
30#include <linux/module.h> 30#include <linux/module.h>
31#include <linux/init.h> 31#include <linux/init.h>
32#include <linux/wait.h> 32#include <linux/wait.h>
33#undef DEBUG /* include debug macros until it's done */
34#include <linux/usb.h> 33#include <linux/usb.h>
35 34
36/*-------------------------------------------------------------------*/ 35/*-------------------------------------------------------------------*/
diff --git a/drivers/usb/misc/phidgetservo.c b/drivers/usb/misc/phidgetservo.c
index b84eda631ab5..a30d4a6ee824 100644
--- a/drivers/usb/misc/phidgetservo.c
+++ b/drivers/usb/misc/phidgetservo.c
@@ -26,9 +26,6 @@
26 */ 26 */
27 27
28#include <linux/config.h> 28#include <linux/config.h>
29#ifdef CONFIG_USB_DEBUG
30#define DEBUG 1
31#endif
32#include <linux/kernel.h> 29#include <linux/kernel.h>
33#include <linux/errno.h> 30#include <linux/errno.h>
34#include <linux/init.h> 31#include <linux/init.h>
diff --git a/drivers/usb/misc/rio500.c b/drivers/usb/misc/rio500.c
index 7d02d8ec6b1a..9590dbac5d9a 100644
--- a/drivers/usb/misc/rio500.c
+++ b/drivers/usb/misc/rio500.c
@@ -393,7 +393,7 @@ read_rio(struct file *file, char __user *buffer, size_t count, loff_t * ppos)
393 ibuf, this_read, &partial, 393 ibuf, this_read, &partial,
394 8000); 394 8000);
395 395
396 dbg(KERN_DEBUG "read stats: result:%d this_read:%u partial:%u", 396 dbg("read stats: result:%d this_read:%u partial:%u",
397 result, this_read, partial); 397 result, this_read, partial);
398 398
399 if (partial) { 399 if (partial) {
diff --git a/drivers/usb/misc/usbled.c b/drivers/usb/misc/usbled.c
index f6ba4c788dbc..3c93921cb6b3 100644
--- a/drivers/usb/misc/usbled.c
+++ b/drivers/usb/misc/usbled.c
@@ -10,9 +10,6 @@
10 */ 10 */
11 11
12#include <linux/config.h> 12#include <linux/config.h>
13#ifdef CONFIG_USB_DEBUG
14 #define DEBUG 1
15#endif
16#include <linux/kernel.h> 13#include <linux/kernel.h>
17#include <linux/errno.h> 14#include <linux/errno.h>
18#include <linux/init.h> 15#include <linux/init.h>
diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
index 2997f558159b..605a2afe34ed 100644
--- a/drivers/usb/misc/usbtest.c
+++ b/drivers/usb/misc/usbtest.c
@@ -1,7 +1,4 @@
1#include <linux/config.h> 1#include <linux/config.h>
2#if !defined (DEBUG) && defined (CONFIG_USB_DEBUG)
3# define DEBUG
4#endif
5#include <linux/kernel.h> 2#include <linux/kernel.h>
6#include <linux/errno.h> 3#include <linux/errno.h>
7#include <linux/init.h> 4#include <linux/init.h>
diff --git a/drivers/usb/misc/uss720.c b/drivers/usb/misc/uss720.c
index 0592cb5e6c4d..1cabe7ed91f5 100644
--- a/drivers/usb/misc/uss720.c
+++ b/drivers/usb/misc/uss720.c
@@ -41,8 +41,6 @@
41 41
42/*****************************************************************************/ 42/*****************************************************************************/
43 43
44#define DEBUG
45
46#include <linux/module.h> 44#include <linux/module.h>
47#include <linux/socket.h> 45#include <linux/socket.h>
48#include <linux/parport.h> 46#include <linux/parport.h>
diff --git a/drivers/usb/net/Makefile b/drivers/usb/net/Makefile
index 222c0495f791..a21e6eaabaf6 100644
--- a/drivers/usb/net/Makefile
+++ b/drivers/usb/net/Makefile
@@ -16,3 +16,7 @@ obj-$(CONFIG_USB_NET_CDC_SUBSET) += cdc_subset.o
16obj-$(CONFIG_USB_NET_ZAURUS) += zaurus.o 16obj-$(CONFIG_USB_NET_ZAURUS) += zaurus.o
17obj-$(CONFIG_USB_USBNET) += usbnet.o 17obj-$(CONFIG_USB_USBNET) += usbnet.o
18obj-$(CONFIG_USB_ZD1201) += zd1201.o 18obj-$(CONFIG_USB_ZD1201) += zd1201.o
19
20ifeq ($(CONFIG_USB_DEBUG),y)
21EXTRA_CFLAGS += -DDEBUG
22endif
diff --git a/drivers/usb/net/asix.c b/drivers/usb/net/asix.c
index 252a34fbb42c..542120ef1fd2 100644
--- a/drivers/usb/net/asix.c
+++ b/drivers/usb/net/asix.c
@@ -23,9 +23,6 @@
23// #define VERBOSE // more; success messages 23// #define VERBOSE // more; success messages
24 24
25#include <linux/config.h> 25#include <linux/config.h>
26#ifdef CONFIG_USB_DEBUG
27# define DEBUG
28#endif
29#include <linux/module.h> 26#include <linux/module.h>
30#include <linux/kmod.h> 27#include <linux/kmod.h>
31#include <linux/sched.h> 28#include <linux/sched.h>
diff --git a/drivers/usb/net/cdc_ether.c b/drivers/usb/net/cdc_ether.c
index 652b04bbf6af..c008c981862b 100644
--- a/drivers/usb/net/cdc_ether.c
+++ b/drivers/usb/net/cdc_ether.c
@@ -21,9 +21,6 @@
21// #define VERBOSE // more; success messages 21// #define VERBOSE // more; success messages
22 22
23#include <linux/config.h> 23#include <linux/config.h>
24#ifdef CONFIG_USB_DEBUG
25# define DEBUG
26#endif
27#include <linux/module.h> 24#include <linux/module.h>
28#include <linux/sched.h> 25#include <linux/sched.h>
29#include <linux/init.h> 26#include <linux/init.h>
diff --git a/drivers/usb/net/cdc_subset.c b/drivers/usb/net/cdc_subset.c
index f1730b685fd2..f05cfb83c82d 100644
--- a/drivers/usb/net/cdc_subset.c
+++ b/drivers/usb/net/cdc_subset.c
@@ -18,9 +18,6 @@
18 */ 18 */
19 19
20#include <linux/config.h> 20#include <linux/config.h>
21#ifdef CONFIG_USB_DEBUG
22# define DEBUG
23#endif
24#include <linux/module.h> 21#include <linux/module.h>
25#include <linux/kmod.h> 22#include <linux/kmod.h>
26#include <linux/sched.h> 23#include <linux/sched.h>
diff --git a/drivers/usb/net/gl620a.c b/drivers/usb/net/gl620a.c
index c0f263b202a6..2455e9a85674 100644
--- a/drivers/usb/net/gl620a.c
+++ b/drivers/usb/net/gl620a.c
@@ -22,9 +22,6 @@
22// #define VERBOSE // more; success messages 22// #define VERBOSE // more; success messages
23 23
24#include <linux/config.h> 24#include <linux/config.h>
25#ifdef CONFIG_USB_DEBUG
26# define DEBUG
27#endif
28#include <linux/module.h> 25#include <linux/module.h>
29#include <linux/sched.h> 26#include <linux/sched.h>
30#include <linux/init.h> 27#include <linux/init.h>
diff --git a/drivers/usb/net/kaweth.c b/drivers/usb/net/kaweth.c
index 6bef1be6b36c..b5776518020f 100644
--- a/drivers/usb/net/kaweth.c
+++ b/drivers/usb/net/kaweth.c
@@ -219,7 +219,6 @@ struct kaweth_device
219 219
220 __u32 status; 220 __u32 status;
221 int end; 221 int end;
222 int removed;
223 int suspend_lowmem_rx; 222 int suspend_lowmem_rx;
224 int suspend_lowmem_ctrl; 223 int suspend_lowmem_ctrl;
225 int linkstate; 224 int linkstate;
@@ -699,6 +698,7 @@ static int kaweth_close(struct net_device *net)
699 698
700 usb_kill_urb(kaweth->irq_urb); 699 usb_kill_urb(kaweth->irq_urb);
701 usb_kill_urb(kaweth->rx_urb); 700 usb_kill_urb(kaweth->rx_urb);
701 usb_kill_urb(kaweth->tx_urb);
702 702
703 flush_scheduled_work(); 703 flush_scheduled_work();
704 704
@@ -750,13 +750,6 @@ static int kaweth_start_xmit(struct sk_buff *skb, struct net_device *net)
750 750
751 spin_lock(&kaweth->device_lock); 751 spin_lock(&kaweth->device_lock);
752 752
753 if (kaweth->removed) {
754 /* our device is undergoing disconnection - we bail out */
755 spin_unlock(&kaweth->device_lock);
756 dev_kfree_skb_irq(skb);
757 return 0;
758 }
759
760 kaweth_async_set_rx_mode(kaweth); 753 kaweth_async_set_rx_mode(kaweth);
761 netif_stop_queue(net); 754 netif_stop_queue(net);
762 755
@@ -1136,10 +1129,6 @@ static void kaweth_disconnect(struct usb_interface *intf)
1136 return; 1129 return;
1137 } 1130 }
1138 netdev = kaweth->net; 1131 netdev = kaweth->net;
1139 kaweth->removed = 1;
1140 usb_kill_urb(kaweth->irq_urb);
1141 usb_kill_urb(kaweth->rx_urb);
1142 usb_kill_urb(kaweth->tx_urb);
1143 1132
1144 kaweth_dbg("Unregistering net device"); 1133 kaweth_dbg("Unregistering net device");
1145 unregister_netdev(netdev); 1134 unregister_netdev(netdev);
diff --git a/drivers/usb/net/net1080.c b/drivers/usb/net/net1080.c
index cee55f8cf64f..b3799b1a2b0d 100644
--- a/drivers/usb/net/net1080.c
+++ b/drivers/usb/net/net1080.c
@@ -21,9 +21,6 @@
21// #define VERBOSE // more; success messages 21// #define VERBOSE // more; success messages
22 22
23#include <linux/config.h> 23#include <linux/config.h>
24#ifdef CONFIG_USB_DEBUG
25# define DEBUG
26#endif
27#include <linux/module.h> 24#include <linux/module.h>
28#include <linux/sched.h> 25#include <linux/sched.h>
29#include <linux/init.h> 26#include <linux/init.h>
diff --git a/drivers/usb/net/pegasus.c b/drivers/usb/net/pegasus.c
index 537eb181d985..683e3df5d607 100644
--- a/drivers/usb/net/pegasus.c
+++ b/drivers/usb/net/pegasus.c
@@ -28,8 +28,6 @@
28 * is out of the interrupt routine. 28 * is out of the interrupt routine.
29 */ 29 */
30 30
31#undef DEBUG
32
33#include <linux/sched.h> 31#include <linux/sched.h>
34#include <linux/slab.h> 32#include <linux/slab.h>
35#include <linux/init.h> 33#include <linux/init.h>
diff --git a/drivers/usb/net/plusb.c b/drivers/usb/net/plusb.c
index 74c2b3581c76..89856aa0e3b8 100644
--- a/drivers/usb/net/plusb.c
+++ b/drivers/usb/net/plusb.c
@@ -21,9 +21,6 @@
21// #define VERBOSE // more; success messages 21// #define VERBOSE // more; success messages
22 22
23#include <linux/config.h> 23#include <linux/config.h>
24#ifdef CONFIG_USB_DEBUG
25# define DEBUG
26#endif
27#include <linux/module.h> 24#include <linux/module.h>
28#include <linux/sched.h> 25#include <linux/sched.h>
29#include <linux/init.h> 26#include <linux/init.h>
diff --git a/drivers/usb/net/rndis_host.c b/drivers/usb/net/rndis_host.c
index b5a925dc1beb..c0ecbab6f6ba 100644
--- a/drivers/usb/net/rndis_host.c
+++ b/drivers/usb/net/rndis_host.c
@@ -21,9 +21,6 @@
21// #define VERBOSE // more; success messages 21// #define VERBOSE // more; success messages
22 22
23#include <linux/config.h> 23#include <linux/config.h>
24#ifdef CONFIG_USB_DEBUG
25# define DEBUG
26#endif
27#include <linux/module.h> 24#include <linux/module.h>
28#include <linux/sched.h> 25#include <linux/sched.h>
29#include <linux/init.h> 26#include <linux/init.h>
diff --git a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c
index 74f05c9c84d5..362d6907c9bb 100644
--- a/drivers/usb/net/usbnet.c
+++ b/drivers/usb/net/usbnet.c
@@ -34,9 +34,6 @@
34// #define VERBOSE // more; success messages 34// #define VERBOSE // more; success messages
35 35
36#include <linux/config.h> 36#include <linux/config.h>
37#ifdef CONFIG_USB_DEBUG
38# define DEBUG
39#endif
40#include <linux/module.h> 37#include <linux/module.h>
41#include <linux/sched.h> 38#include <linux/sched.h>
42#include <linux/init.h> 39#include <linux/init.h>
diff --git a/drivers/usb/net/zaurus.c b/drivers/usb/net/zaurus.c
index 5d4b7d55b097..680d13957af4 100644
--- a/drivers/usb/net/zaurus.c
+++ b/drivers/usb/net/zaurus.c
@@ -21,9 +21,6 @@
21// #define VERBOSE // more; success messages 21// #define VERBOSE // more; success messages
22 22
23#include <linux/config.h> 23#include <linux/config.h>
24#ifdef CONFIG_USB_DEBUG
25# define DEBUG
26#endif
27#include <linux/module.h> 24#include <linux/module.h>
28#include <linux/sched.h> 25#include <linux/sched.h>
29#include <linux/init.h> 26#include <linux/init.h>
diff --git a/drivers/usb/serial/ChangeLog.old b/drivers/usb/serial/ChangeLog.history
index c1b279939bbf..52c4f7bd7a80 100644
--- a/drivers/usb/serial/ChangeLog.old
+++ b/drivers/usb/serial/ChangeLog.history
@@ -400,7 +400,7 @@ visor.c Change Log comments:
400 400
401 (11/11/2001) gkh 401 (11/11/2001) gkh
402 Added support for the m125 devices, and added check to prevent oopses 402 Added support for the m125 devices, and added check to prevent oopses
403 for Clié devices that lie about the number of ports they have. 403 for Clié devices that lie about the number of ports they have.
404 404
405 (08/30/2001) gkh 405 (08/30/2001) gkh
406 Added support for the Clie devices, both the 3.5 and 4.0 os versions. 406 Added support for the Clie devices, both the 3.5 and 4.0 os versions.
diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
index 7b5e8e4ee2bb..14f55fd26a64 100644
--- a/drivers/usb/serial/Kconfig
+++ b/drivers/usb/serial/Kconfig
@@ -62,6 +62,15 @@ config USB_SERIAL_AIRPRIME
62 To compile this driver as a module, choose M here: the 62 To compile this driver as a module, choose M here: the
63 module will be called airprime. 63 module will be called airprime.
64 64
65config USB_SERIAL_ANYDATA
66 tristate "USB AnyData CDMA Wireless Driver"
67 depends on USB_SERIAL
68 help
69 Say Y here if you want to use a AnyData CDMA device.
70
71 To compile this driver as a module, choose M here: the
72 module will be called anydata.
73
65config USB_SERIAL_BELKIN 74config USB_SERIAL_BELKIN
66 tristate "USB Belkin and Peracom Single Port Serial Driver" 75 tristate "USB Belkin and Peracom Single Port Serial Driver"
67 depends on USB_SERIAL 76 depends on USB_SERIAL
@@ -394,15 +403,6 @@ config USB_SERIAL_MCT_U232
394 To compile this driver as a module, choose M here: the 403 To compile this driver as a module, choose M here: the
395 module will be called mct_u232. 404 module will be called mct_u232.
396 405
397config USB_SERIAL_NOKIA_DKU2
398 tristate "USB Nokia DKU2 Driver"
399 depends on USB_SERIAL
400 help
401 Say Y here if you want to use a Nokia DKU2 device.
402
403 To compile this driver as a module, choose M here: the
404 module will be called nokia_dku2.
405
406config USB_SERIAL_PL2303 406config USB_SERIAL_PL2303
407 tristate "USB Prolific 2303 Single Port Serial Driver" 407 tristate "USB Prolific 2303 Single Port Serial Driver"
408 depends on USB_SERIAL 408 depends on USB_SERIAL
diff --git a/drivers/usb/serial/Makefile b/drivers/usb/serial/Makefile
index 55fd461793b7..f0b04420cea1 100644
--- a/drivers/usb/serial/Makefile
+++ b/drivers/usb/serial/Makefile
@@ -12,6 +12,7 @@ usbserial-obj-$(CONFIG_USB_EZUSB) += ezusb.o
12usbserial-objs := usb-serial.o generic.o bus.o $(usbserial-obj-y) 12usbserial-objs := usb-serial.o generic.o bus.o $(usbserial-obj-y)
13 13
14obj-$(CONFIG_USB_SERIAL_AIRPRIME) += airprime.o 14obj-$(CONFIG_USB_SERIAL_AIRPRIME) += airprime.o
15obj-$(CONFIG_USB_SERIAL_ANYDATA) += anydata.o
15obj-$(CONFIG_USB_SERIAL_BELKIN) += belkin_sa.o 16obj-$(CONFIG_USB_SERIAL_BELKIN) += belkin_sa.o
16obj-$(CONFIG_USB_SERIAL_CP2101) += cp2101.o 17obj-$(CONFIG_USB_SERIAL_CP2101) += cp2101.o
17obj-$(CONFIG_USB_SERIAL_CYBERJACK) += cyberjack.o 18obj-$(CONFIG_USB_SERIAL_CYBERJACK) += cyberjack.o
@@ -31,7 +32,6 @@ obj-$(CONFIG_USB_SERIAL_KEYSPAN_PDA) += keyspan_pda.o
31obj-$(CONFIG_USB_SERIAL_KLSI) += kl5kusb105.o 32obj-$(CONFIG_USB_SERIAL_KLSI) += kl5kusb105.o
32obj-$(CONFIG_USB_SERIAL_KOBIL_SCT) += kobil_sct.o 33obj-$(CONFIG_USB_SERIAL_KOBIL_SCT) += kobil_sct.o
33obj-$(CONFIG_USB_SERIAL_MCT_U232) += mct_u232.o 34obj-$(CONFIG_USB_SERIAL_MCT_U232) += mct_u232.o
34obj-$(CONFIG_USB_SERIAL_NOKIA_DKU2) += nokia_dku2.o
35obj-$(CONFIG_USB_SERIAL_OMNINET) += omninet.o 35obj-$(CONFIG_USB_SERIAL_OMNINET) += omninet.o
36obj-$(CONFIG_USB_SERIAL_OPTION) += option.o 36obj-$(CONFIG_USB_SERIAL_OPTION) += option.o
37obj-$(CONFIG_USB_SERIAL_PL2303) += pl2303.o 37obj-$(CONFIG_USB_SERIAL_PL2303) += pl2303.o
diff --git a/drivers/usb/serial/anydata.c b/drivers/usb/serial/anydata.c
new file mode 100644
index 000000000000..18022a74a3dc
--- /dev/null
+++ b/drivers/usb/serial/anydata.c
@@ -0,0 +1,123 @@
1/*
2 * AnyData CDMA Serial USB driver
3 *
4 * Copyright (C) 2005 Greg Kroah-Hartman <gregkh@suse.de>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License version
8 * 2 as published by the Free Software Foundation.
9 */
10
11#include <linux/kernel.h>
12#include <linux/init.h>
13#include <linux/tty.h>
14#include <linux/module.h>
15#include <linux/usb.h>
16#include "usb-serial.h"
17
18static struct usb_device_id id_table [] = {
19 { USB_DEVICE(0x16d5, 0x6501) }, /* AirData CDMA device */
20 { },
21};
22MODULE_DEVICE_TABLE(usb, id_table);
23
24/* if overridden by the user, then use their value for the size of the
25 * read and write urbs */
26static int buffer_size;
27static int debug;
28
29static struct usb_driver anydata_driver = {
30 .owner = THIS_MODULE,
31 .name = "anydata",
32 .probe = usb_serial_probe,
33 .disconnect = usb_serial_disconnect,
34 .id_table = id_table,
35};
36
37static int anydata_open(struct usb_serial_port *port, struct file *filp)
38{
39 char *buffer;
40 int result = 0;
41
42 dbg("%s - port %d", __FUNCTION__, port->number);
43
44 if (buffer_size) {
45 /* override the default buffer sizes */
46 buffer = kmalloc(buffer_size, GFP_KERNEL);
47 if (!buffer) {
48 dev_err(&port->dev, "%s - out of memory.\n",
49 __FUNCTION__);
50 return -ENOMEM;
51 }
52 kfree (port->read_urb->transfer_buffer);
53 port->read_urb->transfer_buffer = buffer;
54 port->read_urb->transfer_buffer_length = buffer_size;
55
56 buffer = kmalloc(buffer_size, GFP_KERNEL);
57 if (!buffer) {
58 dev_err(&port->dev, "%s - out of memory.\n",
59 __FUNCTION__);
60 return -ENOMEM;
61 }
62 kfree (port->write_urb->transfer_buffer);
63 port->write_urb->transfer_buffer = buffer;
64 port->write_urb->transfer_buffer_length = buffer_size;
65 port->bulk_out_size = buffer_size;
66 }
67
68 /* Start reading from the device */
69 usb_fill_bulk_urb(port->read_urb, port->serial->dev,
70 usb_rcvbulkpipe(port->serial->dev,
71 port->bulk_in_endpointAddress),
72 port->read_urb->transfer_buffer,
73 port->read_urb->transfer_buffer_length,
74 usb_serial_generic_write_bulk_callback, port);
75 result = usb_submit_urb(port->read_urb, GFP_KERNEL);
76 if (result)
77 dev_err(&port->dev,
78 "%s - failed submitting read urb, error %d\n",
79 __FUNCTION__, result);
80
81 return result;
82}
83
84static struct usb_serial_driver anydata_device = {
85 .driver = {
86 .owner = THIS_MODULE,
87 .name = "anydata",
88 },
89 .id_table = id_table,
90 .num_interrupt_in = NUM_DONT_CARE,
91 .num_bulk_in = NUM_DONT_CARE,
92 .num_bulk_out = NUM_DONT_CARE,
93 .num_ports = 1,
94 .open = anydata_open,
95};
96
97static int __init anydata_init(void)
98{
99 int retval;
100
101 retval = usb_serial_register(&anydata_device);
102 if (retval)
103 return retval;
104 retval = usb_register(&anydata_driver);
105 if (retval)
106 usb_serial_deregister(&anydata_device);
107 return retval;
108}
109
110static void __exit anydata_exit(void)
111{
112 usb_deregister(&anydata_driver);
113 usb_serial_deregister(&anydata_device);
114}
115
116module_init(anydata_init);
117module_exit(anydata_exit);
118MODULE_LICENSE("GPL");
119
120module_param(debug, bool, S_IRUGO | S_IWUSR);
121MODULE_PARM_DESC(debug, "Debug enabled or not");
122module_param(buffer_size, int, 0);
123MODULE_PARM_DESC(buffer_size, "Size of the transfer buffers");
diff --git a/drivers/usb/serial/cp2101.c b/drivers/usb/serial/cp2101.c
index c5334dd89b12..c9787001cf2a 100644
--- a/drivers/usb/serial/cp2101.c
+++ b/drivers/usb/serial/cp2101.c
@@ -60,6 +60,7 @@ static struct usb_device_id id_table [] = {
60 { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */ 60 { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */
61 { USB_DEVICE(0x10A6, 0xAA26) }, /* Knock-off DCU-11 cable */ 61 { USB_DEVICE(0x10A6, 0xAA26) }, /* Knock-off DCU-11 cable */
62 { USB_DEVICE(0x10AB, 0x10C5) }, /* Siemens MC60 Cable */ 62 { USB_DEVICE(0x10AB, 0x10C5) }, /* Siemens MC60 Cable */
63 { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */
63 { } /* Terminating Entry */ 64 { } /* Terminating Entry */
64}; 65};
65 66
diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
index 8909208f506a..53a47c31cd0e 100644
--- a/drivers/usb/serial/generic.c
+++ b/drivers/usb/serial/generic.c
@@ -309,6 +309,7 @@ void usb_serial_generic_write_bulk_callback (struct urb *urb, struct pt_regs *re
309 309
310 schedule_work(&port->work); 310 schedule_work(&port->work);
311} 311}
312EXPORT_SYMBOL_GPL(usb_serial_generic_write_bulk_callback);
312 313
313void usb_serial_generic_shutdown (struct usb_serial *serial) 314void usb_serial_generic_shutdown (struct usb_serial *serial)
314{ 315{
diff --git a/drivers/usb/serial/nokia_dku2.c b/drivers/usb/serial/nokia_dku2.c
deleted file mode 100644
index fad01bef3a64..000000000000
--- a/drivers/usb/serial/nokia_dku2.c
+++ /dev/null
@@ -1,142 +0,0 @@
1/*
2 * Nokia DKU2 USB driver
3 *
4 * Copyright (C) 2004
5 * Author: C Kemp
6 *
7 * This program is largely derived from work by the linux-usb group
8 * and associated source files. Please see the usb/serial files for
9 * individual credits and copyrights.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * 20.09.2005 - Matthias Blaesing <matthias.blaesing@rwth-aachen.de>
17 * Added short name to device structure to make driver load into kernel 2.6.13
18 *
19 * 20.09.2005 - Matthias Blaesing <matthias.blaesing@rwth-aachen.de>
20 * Added usb_deregister to exit code - to allow remove and reinsert of module
21 */
22
23
24#include <linux/config.h>
25#include <linux/kernel.h>
26#include <linux/errno.h>
27#include <linux/init.h>
28#include <linux/slab.h>
29#include <linux/tty.h>
30#include <linux/tty_driver.h>
31#include <linux/tty_flip.h>
32#include <linux/module.h>
33#include <linux/usb.h>
34#include "usb-serial.h"
35
36
37#define NOKIA_VENDOR_ID 0x0421
38#define NOKIA7600_PRODUCT_ID 0x0400
39#define NOKIA6230_PRODUCT_ID 0x040f
40#define NOKIA6170_PRODUCT_ID 0x0416
41#define NOKIA6670_PRODUCT_ID 0x041d
42#define NOKIA6680_PRODUCT_ID 0x041e
43#define NOKIA6230i_PRODUCT_ID 0x0428
44
45#define NOKIA_AT_PORT 0x82
46#define NOKIA_FBUS_PORT 0x86
47
48/*
49 * Version Information
50 */
51#define DRIVER_VERSION "v0.2"
52#define DRIVER_AUTHOR "C Kemp"
53#define DRIVER_DESC "Nokia DKU2 Driver"
54
55static struct usb_device_id id_table [] = {
56 { USB_DEVICE(NOKIA_VENDOR_ID, NOKIA7600_PRODUCT_ID) },
57 { USB_DEVICE(NOKIA_VENDOR_ID, NOKIA6230_PRODUCT_ID) },
58 { USB_DEVICE(NOKIA_VENDOR_ID, NOKIA6170_PRODUCT_ID) },
59 { USB_DEVICE(NOKIA_VENDOR_ID, NOKIA6670_PRODUCT_ID) },
60 { USB_DEVICE(NOKIA_VENDOR_ID, NOKIA6680_PRODUCT_ID) },
61 { USB_DEVICE(NOKIA_VENDOR_ID, NOKIA6230i_PRODUCT_ID) },
62 { } /* Terminating entry */
63};
64MODULE_DEVICE_TABLE(usb, id_table);
65
66/* The only thing which makes this device different from a generic
67 * device is that we have to set an alternative configuration to make
68 * the relevant endpoints available. In 2.6 this is really easy... */
69static int nokia_probe(struct usb_serial *serial,
70 const struct usb_device_id *id)
71{
72 int retval = -ENODEV;
73
74 if (serial->interface->altsetting[0].endpoint[0].desc.bEndpointAddress == NOKIA_AT_PORT) {
75 /* the AT port */
76 dev_info(&serial->dev->dev, "Nokia AT Port:\n");
77 retval = 0;
78 } else if (serial->interface->num_altsetting == 2 &&
79 serial->interface->altsetting[1].endpoint[0].desc.bEndpointAddress == NOKIA_FBUS_PORT) {
80 /* the FBUS port */
81 dev_info(&serial->dev->dev, "Nokia FBUS Port:\n");
82 usb_set_interface(serial->dev, 10, 1);
83 retval = 0;
84 }
85
86 return retval;
87}
88
89static struct usb_driver nokia_driver = {
90 .owner = THIS_MODULE,
91 .name = "nokia_dku2",
92 .probe = usb_serial_probe,
93 .disconnect = usb_serial_disconnect,
94 .id_table = id_table,
95};
96
97static struct usb_serial_driver nokia_serial_driver = {
98 .driver = {
99 .owner = THIS_MODULE,
100 .name = "nokia_dku2",
101 },
102 .description = "Nokia 7600/6230(i)/6170/66x0 DKU2 driver",
103 .id_table = id_table,
104 .num_interrupt_in = 1,
105 .num_bulk_in = 1,
106 .num_bulk_out = 1,
107 .num_ports = 1,
108 .probe = nokia_probe,
109};
110
111static int __init nokia_init(void)
112{
113 int retval;
114
115 retval = usb_serial_register(&nokia_serial_driver);
116 if (retval)
117 return retval;
118
119 retval = usb_register(&nokia_driver);
120 if (retval) {
121 usb_serial_deregister(&nokia_serial_driver);
122 return retval;
123 }
124
125 info(DRIVER_VERSION " " DRIVER_AUTHOR);
126 info(DRIVER_DESC);
127
128 return retval;
129}
130
131static void __exit nokia_exit(void)
132{
133 usb_deregister(&nokia_driver);
134 usb_serial_deregister(&nokia_serial_driver);
135}
136
137module_init(nokia_init);
138module_exit(nokia_exit);
139
140MODULE_AUTHOR(DRIVER_AUTHOR);
141MODULE_DESCRIPTION(DRIVER_DESC);
142MODULE_LICENSE("GPL");
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index 165c119bf10e..41a45a5025b2 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -71,7 +71,9 @@ static struct usb_device_id id_table [] = {
71 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) }, 71 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
72 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) }, 72 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
73 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) }, 73 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
74 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1) },
74 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) }, 75 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
76 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) },
75 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) }, 77 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
76 { USB_DEVICE( NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID ) }, 78 { USB_DEVICE( NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID ) },
77 { } /* Terminating entry */ 79 { } /* Terminating entry */
@@ -811,7 +813,9 @@ static void pl2303_update_line_status(struct usb_serial_port *port,
811 u8 length = UART_STATE; 813 u8 length = UART_STATE;
812 814
813 if ((le16_to_cpu(port->serial->dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) && 815 if ((le16_to_cpu(port->serial->dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
814 (le16_to_cpu(port->serial->dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_X65)) { 816 (le16_to_cpu(port->serial->dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_X65 ||
817 le16_to_cpu(port->serial->dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_SX1 ||
818 le16_to_cpu(port->serial->dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_X75)) {
815 length = 1; 819 length = 1;
816 status_idx = 0; 820 status_idx = 0;
817 } 821 }
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
index 7be9644f5a03..21d434d81813 100644
--- a/drivers/usb/serial/pl2303.h
+++ b/drivers/usb/serial/pl2303.h
@@ -54,7 +54,9 @@
54#define SAMSUNG_PRODUCT_ID 0x8001 54#define SAMSUNG_PRODUCT_ID 0x8001
55 55
56#define SIEMENS_VENDOR_ID 0x11f5 56#define SIEMENS_VENDOR_ID 0x11f5
57#define SIEMENS_PRODUCT_ID_SX1 0x0001
57#define SIEMENS_PRODUCT_ID_X65 0x0003 58#define SIEMENS_PRODUCT_ID_X65 0x0003
59#define SIEMENS_PRODUCT_ID_X75 0x0004
58 60
59#define SYNTECH_VENDOR_ID 0x0745 61#define SYNTECH_VENDOR_ID 0x0745
60#define SYNTECH_PRODUCT_ID 0x0001 62#define SYNTECH_PRODUCT_ID 0x0001
diff --git a/drivers/usb/storage/Kconfig b/drivers/usb/storage/Kconfig
index 1a9679f76f5a..c41d64dbb0f0 100644
--- a/drivers/usb/storage/Kconfig
+++ b/drivers/usb/storage/Kconfig
@@ -115,7 +115,7 @@ config USB_STORAGE_JUMPSHOT
115 115
116config USB_STORAGE_ONETOUCH 116config USB_STORAGE_ONETOUCH
117 bool "Support OneTouch Button on Maxtor Hard Drives (EXPERIMENTAL)" 117 bool "Support OneTouch Button on Maxtor Hard Drives (EXPERIMENTAL)"
118 depends on USB_STORAGE && INPUT_EVDEV && EXPERIMENTAL 118 depends on USB_STORAGE && INPUT_EVDEV && EXPERIMENTAL && !PM
119 help 119 help
120 Say Y here to include additional code to support the Maxtor OneTouch 120 Say Y here to include additional code to support the Maxtor OneTouch
121 USB hard drive's onetouch button. 121 USB hard drive's onetouch button.
diff --git a/drivers/usb/storage/shuttle_usbat.c b/drivers/usb/storage/shuttle_usbat.c
index 33c55a6261bb..fea176d7e79a 100644
--- a/drivers/usb/storage/shuttle_usbat.c
+++ b/drivers/usb/storage/shuttle_usbat.c
@@ -853,7 +853,7 @@ static int usbat_identify_device(struct us_data *us,
853 rc = usbat_device_reset(us); 853 rc = usbat_device_reset(us);
854 if (rc != USB_STOR_TRANSPORT_GOOD) 854 if (rc != USB_STOR_TRANSPORT_GOOD)
855 return rc; 855 return rc;
856 msleep(25); 856 msleep(500);
857 857
858 /* 858 /*
859 * In attempt to distinguish between HP CDRW's and Flash readers, we now 859 * In attempt to distinguish between HP CDRW's and Flash readers, we now
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
index 9e926a8f2116..0a9858f69a9b 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -710,11 +710,6 @@ UNUSUAL_DEV( 0x0686, 0x4017, 0x0001, 0x0001,
710 "DIMAGE E223", 710 "DIMAGE E223",
711 US_SC_SCSI, US_PR_DEVICE, NULL, 0 ), 711 US_SC_SCSI, US_PR_DEVICE, NULL, 0 ),
712 712
713UNUSUAL_DEV( 0x0693, 0x0002, 0x0100, 0x0100,
714 "Hagiwara",
715 "FlashGate SmartMedia",
716 US_SC_SCSI, US_PR_BULK, NULL, 0 ),
717
718UNUSUAL_DEV( 0x0693, 0x0005, 0x0100, 0x0100, 713UNUSUAL_DEV( 0x0693, 0x0005, 0x0100, 0x0100,
719 "Hagiwara", 714 "Hagiwara",
720 "Flashgate", 715 "Flashgate",
@@ -1008,6 +1003,11 @@ UNUSUAL_DEV( 0x0c0b, 0xa109, 0x0000, 0xffff,
1008 * 1003 *
1009 */ 1004 */
1010#ifdef CONFIG_USB_STORAGE_ONETOUCH 1005#ifdef CONFIG_USB_STORAGE_ONETOUCH
1006 UNUSUAL_DEV( 0x0d49, 0x7000, 0x0000, 0x9999,
1007 "Maxtor",
1008 "OneTouch External Harddrive",
1009 US_SC_DEVICE, US_PR_DEVICE, onetouch_connect_input,
1010 0),
1011 UNUSUAL_DEV( 0x0d49, 0x7010, 0x0000, 0x9999, 1011 UNUSUAL_DEV( 0x0d49, 0x7010, 0x0000, 0x9999,
1012 "Maxtor", 1012 "Maxtor",
1013 "OneTouch External Harddrive", 1013 "OneTouch External Harddrive",