diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-23 13:09:50 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-23 13:09:50 -0400 |
commit | a27028349ccbcec9dde9d6dbba9d4017ad9ad5ab (patch) | |
tree | 58d7deaeda91cf854543b8dfcef097097eb856fb /drivers/usb | |
parent | 45432371b448c80622d8069b845625996127caeb (diff) | |
parent | 6c6409459a18a825ce12ecb003d5686af61f7a2f (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6:
USB: don't rebind drivers after failed resume or reset
USB: fix memory leak in cdc-acm
USB: Unusual dev for Mio moov 330 gps
USB: cdc-wdm: make module autoload work
USB: Fix unneeded endpoint check in pxa27x_udc
usb/gadget: fix kernel-doc warning
USB: Speedtouch: add pre_reset and post_reset routines
USB: usbtest.c: length, sglen and vary are unsigned, so cannot be negative
USB: support Huawei data card product IDs
USB: add ZTE MF626 USB GSM modem entry
USB: storage: Avoid I/O errors when issuing SCSI ioctls to JMicron USB/ATA bridge
USB: Fix debugfs_create_file's error checking method for usb/gadget/s3c2410_udc
USB: ohci: add support for tmio-ohci cell
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/Kconfig | 3 | ||||
-rw-r--r-- | drivers/usb/atm/speedtch.c | 12 | ||||
-rw-r--r-- | drivers/usb/class/cdc-acm.c | 3 | ||||
-rw-r--r-- | drivers/usb/class/cdc-wdm.c | 2 | ||||
-rw-r--r-- | drivers/usb/core/driver.c | 3 | ||||
-rw-r--r-- | drivers/usb/core/hub.c | 2 | ||||
-rw-r--r-- | drivers/usb/gadget/config.c | 2 | ||||
-rw-r--r-- | drivers/usb/gadget/pxa27x_udc.c | 2 | ||||
-rw-r--r-- | drivers/usb/gadget/s3c2410_udc.c | 7 | ||||
-rw-r--r-- | drivers/usb/host/Kconfig | 1 | ||||
-rw-r--r-- | drivers/usb/host/ohci-hcd.c | 21 | ||||
-rw-r--r-- | drivers/usb/host/ohci-tmio.c | 376 | ||||
-rw-r--r-- | drivers/usb/misc/usbtest.c | 3 | ||||
-rw-r--r-- | drivers/usb/serial/option.c | 96 | ||||
-rw-r--r-- | drivers/usb/storage/initializers.c | 3 | ||||
-rw-r--r-- | drivers/usb/storage/unusual_devs.h | 291 |
16 files changed, 792 insertions, 35 deletions
diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig index c23a9857ee67..289d81adfb9c 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig | |||
@@ -36,7 +36,8 @@ config USB_ARCH_HAS_OHCI | |||
36 | default y if PXA3xx | 36 | default y if PXA3xx |
37 | default y if ARCH_EP93XX | 37 | default y if ARCH_EP93XX |
38 | default y if ARCH_AT91 | 38 | default y if ARCH_AT91 |
39 | default y if ARCH_PNX4008 | 39 | default y if ARCH_PNX4008 && I2C |
40 | default y if MFD_TC6393XB | ||
40 | # PPC: | 41 | # PPC: |
41 | default y if STB03xxx | 42 | default y if STB03xxx |
42 | default y if PPC_MPC52xx | 43 | default y if PPC_MPC52xx |
diff --git a/drivers/usb/atm/speedtch.c b/drivers/usb/atm/speedtch.c index 76fce44c2f9a..3e862401a638 100644 --- a/drivers/usb/atm/speedtch.c +++ b/drivers/usb/atm/speedtch.c | |||
@@ -722,6 +722,16 @@ static void speedtch_atm_stop(struct usbatm_data *usbatm, struct atm_dev *atm_de | |||
722 | flush_scheduled_work(); | 722 | flush_scheduled_work(); |
723 | } | 723 | } |
724 | 724 | ||
725 | static int speedtch_pre_reset(struct usb_interface *intf) | ||
726 | { | ||
727 | return 0; | ||
728 | } | ||
729 | |||
730 | static int speedtch_post_reset(struct usb_interface *intf) | ||
731 | { | ||
732 | return 0; | ||
733 | } | ||
734 | |||
725 | 735 | ||
726 | /********** | 736 | /********** |
727 | ** USB ** | 737 | ** USB ** |
@@ -740,6 +750,8 @@ static struct usb_driver speedtch_usb_driver = { | |||
740 | .name = speedtch_driver_name, | 750 | .name = speedtch_driver_name, |
741 | .probe = speedtch_usb_probe, | 751 | .probe = speedtch_usb_probe, |
742 | .disconnect = usbatm_usb_disconnect, | 752 | .disconnect = usbatm_usb_disconnect, |
753 | .pre_reset = speedtch_pre_reset, | ||
754 | .post_reset = speedtch_post_reset, | ||
743 | .id_table = speedtch_usb_ids | 755 | .id_table = speedtch_usb_ids |
744 | }; | 756 | }; |
745 | 757 | ||
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index fab23ee8702b..20104443081a 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c | |||
@@ -849,9 +849,10 @@ static void acm_write_buffers_free(struct acm *acm) | |||
849 | { | 849 | { |
850 | int i; | 850 | int i; |
851 | struct acm_wb *wb; | 851 | struct acm_wb *wb; |
852 | struct usb_device *usb_dev = interface_to_usbdev(acm->control); | ||
852 | 853 | ||
853 | for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) { | 854 | for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) { |
854 | usb_buffer_free(acm->dev, acm->writesize, wb->buf, wb->dmah); | 855 | usb_buffer_free(usb_dev, acm->writesize, wb->buf, wb->dmah); |
855 | } | 856 | } |
856 | } | 857 | } |
857 | 858 | ||
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c index 7429f70b9d06..5a8ecc045e3f 100644 --- a/drivers/usb/class/cdc-wdm.c +++ b/drivers/usb/class/cdc-wdm.c | |||
@@ -42,6 +42,8 @@ static struct usb_device_id wdm_ids[] = { | |||
42 | { } | 42 | { } |
43 | }; | 43 | }; |
44 | 44 | ||
45 | MODULE_DEVICE_TABLE (usb, wdm_ids); | ||
46 | |||
45 | #define WDM_MINOR_BASE 176 | 47 | #define WDM_MINOR_BASE 176 |
46 | 48 | ||
47 | 49 | ||
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index e935be7eb468..3d7793d93031 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c | |||
@@ -1610,7 +1610,8 @@ int usb_external_resume_device(struct usb_device *udev) | |||
1610 | status = usb_resume_both(udev); | 1610 | status = usb_resume_both(udev); |
1611 | udev->last_busy = jiffies; | 1611 | udev->last_busy = jiffies; |
1612 | usb_pm_unlock(udev); | 1612 | usb_pm_unlock(udev); |
1613 | do_unbind_rebind(udev, DO_REBIND); | 1613 | if (status == 0) |
1614 | do_unbind_rebind(udev, DO_REBIND); | ||
1614 | 1615 | ||
1615 | /* Now that the device is awake, we can start trying to autosuspend | 1616 | /* Now that the device is awake, we can start trying to autosuspend |
1616 | * it again. */ | 1617 | * it again. */ |
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index d73ce262c365..9b3f16bd12cb 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -3504,7 +3504,7 @@ int usb_reset_device(struct usb_device *udev) | |||
3504 | USB_INTERFACE_BOUND) | 3504 | USB_INTERFACE_BOUND) |
3505 | rebind = 1; | 3505 | rebind = 1; |
3506 | } | 3506 | } |
3507 | if (rebind) | 3507 | if (ret == 0 && rebind) |
3508 | usb_rebind_intf(cintf); | 3508 | usb_rebind_intf(cintf); |
3509 | } | 3509 | } |
3510 | } | 3510 | } |
diff --git a/drivers/usb/gadget/config.c b/drivers/usb/gadget/config.c index 1ca1c326392a..e1191b9a316a 100644 --- a/drivers/usb/gadget/config.c +++ b/drivers/usb/gadget/config.c | |||
@@ -168,7 +168,7 @@ usb_copy_descriptors(struct usb_descriptor_header **src) | |||
168 | * usb_find_endpoint - find a copy of an endpoint descriptor | 168 | * usb_find_endpoint - find a copy of an endpoint descriptor |
169 | * @src: original vector of descriptors | 169 | * @src: original vector of descriptors |
170 | * @copy: copy of @src | 170 | * @copy: copy of @src |
171 | * @ep: endpoint descriptor found in @src | 171 | * @match: endpoint descriptor found in @src |
172 | * | 172 | * |
173 | * This returns the copy of the @match descriptor made for @copy. Its | 173 | * This returns the copy of the @match descriptor made for @copy. Its |
174 | * intended use is to help remembering the endpoint descriptor to use | 174 | * intended use is to help remembering the endpoint descriptor to use |
diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c index bcf375ca3d72..caa37c95802c 100644 --- a/drivers/usb/gadget/pxa27x_udc.c +++ b/drivers/usb/gadget/pxa27x_udc.c | |||
@@ -650,7 +650,7 @@ pxa_ep_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags) | |||
650 | struct pxa27x_request *req; | 650 | struct pxa27x_request *req; |
651 | 651 | ||
652 | req = kzalloc(sizeof *req, gfp_flags); | 652 | req = kzalloc(sizeof *req, gfp_flags); |
653 | if (!req || !_ep) | 653 | if (!req) |
654 | return NULL; | 654 | return NULL; |
655 | 655 | ||
656 | INIT_LIST_HEAD(&req->queue); | 656 | INIT_LIST_HEAD(&req->queue); |
diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c index 48f51b12d2e2..00ba06b44752 100644 --- a/drivers/usb/gadget/s3c2410_udc.c +++ b/drivers/usb/gadget/s3c2410_udc.c | |||
@@ -1894,11 +1894,8 @@ static int s3c2410_udc_probe(struct platform_device *pdev) | |||
1894 | udc->regs_info = debugfs_create_file("registers", S_IRUGO, | 1894 | udc->regs_info = debugfs_create_file("registers", S_IRUGO, |
1895 | s3c2410_udc_debugfs_root, | 1895 | s3c2410_udc_debugfs_root, |
1896 | udc, &s3c2410_udc_debugfs_fops); | 1896 | udc, &s3c2410_udc_debugfs_fops); |
1897 | if (IS_ERR(udc->regs_info)) { | 1897 | if (!udc->regs_info) |
1898 | dev_warn(dev, "debugfs file creation failed %ld\n", | 1898 | dev_warn(dev, "debugfs file creation failed\n"); |
1899 | PTR_ERR(udc->regs_info)); | ||
1900 | udc->regs_info = NULL; | ||
1901 | } | ||
1902 | } | 1899 | } |
1903 | 1900 | ||
1904 | dev_dbg(dev, "probe ok\n"); | 1901 | dev_dbg(dev, "probe ok\n"); |
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig index 72fb655e6033..56f592dc0b36 100644 --- a/drivers/usb/host/Kconfig +++ b/drivers/usb/host/Kconfig | |||
@@ -138,7 +138,6 @@ config USB_OHCI_HCD | |||
138 | tristate "OHCI HCD support" | 138 | tristate "OHCI HCD support" |
139 | depends on USB && USB_ARCH_HAS_OHCI | 139 | depends on USB && USB_ARCH_HAS_OHCI |
140 | select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3 | 140 | select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3 |
141 | select I2C if ARCH_PNX4008 | ||
142 | ---help--- | 141 | ---help--- |
143 | The Open Host Controller Interface (OHCI) is a standard for accessing | 142 | The Open Host Controller Interface (OHCI) is a standard for accessing |
144 | USB 1.1 host controller hardware. It does more in hardware than Intel's | 143 | USB 1.1 host controller hardware. It does more in hardware than Intel's |
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 8647dab0d7f9..8aa3f4556a32 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c | |||
@@ -1075,12 +1075,18 @@ MODULE_LICENSE ("GPL"); | |||
1075 | #define SM501_OHCI_DRIVER ohci_hcd_sm501_driver | 1075 | #define SM501_OHCI_DRIVER ohci_hcd_sm501_driver |
1076 | #endif | 1076 | #endif |
1077 | 1077 | ||
1078 | #ifdef CONFIG_MFD_TC6393XB | ||
1079 | #include "ohci-tmio.c" | ||
1080 | #define TMIO_OHCI_DRIVER ohci_hcd_tmio_driver | ||
1081 | #endif | ||
1082 | |||
1078 | #if !defined(PCI_DRIVER) && \ | 1083 | #if !defined(PCI_DRIVER) && \ |
1079 | !defined(PLATFORM_DRIVER) && \ | 1084 | !defined(PLATFORM_DRIVER) && \ |
1080 | !defined(OF_PLATFORM_DRIVER) && \ | 1085 | !defined(OF_PLATFORM_DRIVER) && \ |
1081 | !defined(SA1111_DRIVER) && \ | 1086 | !defined(SA1111_DRIVER) && \ |
1082 | !defined(PS3_SYSTEM_BUS_DRIVER) && \ | 1087 | !defined(PS3_SYSTEM_BUS_DRIVER) && \ |
1083 | !defined(SM501_OHCI_DRIVER) && \ | 1088 | !defined(SM501_OHCI_DRIVER) && \ |
1089 | !defined(TMIO_OHCI_DRIVER) && \ | ||
1084 | !defined(SSB_OHCI_DRIVER) | 1090 | !defined(SSB_OHCI_DRIVER) |
1085 | #error "missing bus glue for ohci-hcd" | 1091 | #error "missing bus glue for ohci-hcd" |
1086 | #endif | 1092 | #endif |
@@ -1147,13 +1153,25 @@ static int __init ohci_hcd_mod_init(void) | |||
1147 | goto error_sm501; | 1153 | goto error_sm501; |
1148 | #endif | 1154 | #endif |
1149 | 1155 | ||
1156 | #ifdef TMIO_OHCI_DRIVER | ||
1157 | retval = platform_driver_register(&TMIO_OHCI_DRIVER); | ||
1158 | if (retval < 0) | ||
1159 | goto error_tmio; | ||
1160 | #endif | ||
1161 | |||
1150 | return retval; | 1162 | return retval; |
1151 | 1163 | ||
1152 | /* Error path */ | 1164 | /* Error path */ |
1165 | #ifdef TMIO_OHCI_DRIVER | ||
1166 | platform_driver_unregister(&TMIO_OHCI_DRIVER); | ||
1167 | error_tmio: | ||
1168 | #endif | ||
1153 | #ifdef SM501_OHCI_DRIVER | 1169 | #ifdef SM501_OHCI_DRIVER |
1170 | platform_driver_unregister(&SM501_OHCI_DRIVER); | ||
1154 | error_sm501: | 1171 | error_sm501: |
1155 | #endif | 1172 | #endif |
1156 | #ifdef SSB_OHCI_DRIVER | 1173 | #ifdef SSB_OHCI_DRIVER |
1174 | ssb_driver_unregister(&SSB_OHCI_DRIVER); | ||
1157 | error_ssb: | 1175 | error_ssb: |
1158 | #endif | 1176 | #endif |
1159 | #ifdef PCI_DRIVER | 1177 | #ifdef PCI_DRIVER |
@@ -1189,6 +1207,9 @@ module_init(ohci_hcd_mod_init); | |||
1189 | 1207 | ||
1190 | static void __exit ohci_hcd_mod_exit(void) | 1208 | static void __exit ohci_hcd_mod_exit(void) |
1191 | { | 1209 | { |
1210 | #ifdef TMIO_OHCI_DRIVER | ||
1211 | platform_driver_unregister(&TMIO_OHCI_DRIVER); | ||
1212 | #endif | ||
1192 | #ifdef SM501_OHCI_DRIVER | 1213 | #ifdef SM501_OHCI_DRIVER |
1193 | platform_driver_unregister(&SM501_OHCI_DRIVER); | 1214 | platform_driver_unregister(&SM501_OHCI_DRIVER); |
1194 | #endif | 1215 | #endif |
diff --git a/drivers/usb/host/ohci-tmio.c b/drivers/usb/host/ohci-tmio.c new file mode 100644 index 000000000000..f9f134af0bd1 --- /dev/null +++ b/drivers/usb/host/ohci-tmio.c | |||
@@ -0,0 +1,376 @@ | |||
1 | /* | ||
2 | * OHCI HCD(Host Controller Driver) for USB. | ||
3 | * | ||
4 | *(C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at> | ||
5 | *(C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net> | ||
6 | *(C) Copyright 2002 Hewlett-Packard Company | ||
7 | * | ||
8 | * Bus glue for Toshiba Mobile IO(TMIO) Controller's OHCI core | ||
9 | * (C) Copyright 2005 Chris Humbert <mahadri-usb@drigon.com> | ||
10 | * (C) Copyright 2007, 2008 Dmitry Baryshkov <dbaryshkov@gmail.com> | ||
11 | * | ||
12 | * This is known to work with the following variants: | ||
13 | * TC6393XB revision 3 (32kB SRAM) | ||
14 | * | ||
15 | * The TMIO's OHCI core DMAs through a small internal buffer that | ||
16 | * is directly addressable by the CPU. | ||
17 | * | ||
18 | * Written from sparse documentation from Toshiba and Sharp's driver | ||
19 | * for the 2.4 kernel, | ||
20 | * usb-ohci-tc6393.c(C) Copyright 2004 Lineo Solutions, Inc. | ||
21 | * | ||
22 | * This program is free software; you can redistribute it and/or modify | ||
23 | * it under the terms of the GNU General Public License version 2 as | ||
24 | * published by the Free Software Foundation. | ||
25 | */ | ||
26 | |||
27 | /*#include <linux/fs.h> | ||
28 | #include <linux/mount.h> | ||
29 | #include <linux/pagemap.h> | ||
30 | #include <linux/init.h> | ||
31 | #include <linux/namei.h> | ||
32 | #include <linux/sched.h>*/ | ||
33 | #include <linux/platform_device.h> | ||
34 | #include <linux/mfd/core.h> | ||
35 | #include <linux/mfd/tmio.h> | ||
36 | #include <linux/dma-mapping.h> | ||
37 | |||
38 | /*-------------------------------------------------------------------------*/ | ||
39 | |||
40 | /* | ||
41 | * USB Host Controller Configuration Register | ||
42 | */ | ||
43 | #define CCR_REVID 0x08 /* b Revision ID */ | ||
44 | #define CCR_BASE 0x10 /* l USB Control Register Base Address Low */ | ||
45 | #define CCR_ILME 0x40 /* b Internal Local Memory Enable */ | ||
46 | #define CCR_PM 0x4c /* w Power Management */ | ||
47 | #define CCR_INTC 0x50 /* b INT Control */ | ||
48 | #define CCR_LMW1L 0x54 /* w Local Memory Window 1 LMADRS Low */ | ||
49 | #define CCR_LMW1H 0x56 /* w Local Memory Window 1 LMADRS High */ | ||
50 | #define CCR_LMW1BL 0x58 /* w Local Memory Window 1 Base Address Low */ | ||
51 | #define CCR_LMW1BH 0x5A /* w Local Memory Window 1 Base Address High */ | ||
52 | #define CCR_LMW2L 0x5C /* w Local Memory Window 2 LMADRS Low */ | ||
53 | #define CCR_LMW2H 0x5E /* w Local Memory Window 2 LMADRS High */ | ||
54 | #define CCR_LMW2BL 0x60 /* w Local Memory Window 2 Base Address Low */ | ||
55 | #define CCR_LMW2BH 0x62 /* w Local Memory Window 2 Base Address High */ | ||
56 | #define CCR_MISC 0xFC /* b MISC */ | ||
57 | |||
58 | #define CCR_PM_GKEN 0x0001 | ||
59 | #define CCR_PM_CKRNEN 0x0002 | ||
60 | #define CCR_PM_USBPW1 0x0004 | ||
61 | #define CCR_PM_USBPW2 0x0008 | ||
62 | #define CCR_PM_USBPW3 0x0008 | ||
63 | #define CCR_PM_PMEE 0x0100 | ||
64 | #define CCR_PM_PMES 0x8000 | ||
65 | |||
66 | /*-------------------------------------------------------------------------*/ | ||
67 | |||
68 | struct tmio_hcd { | ||
69 | void __iomem *ccr; | ||
70 | spinlock_t lock; /* protects RMW cycles */ | ||
71 | }; | ||
72 | |||
73 | #define hcd_to_tmio(hcd) ((struct tmio_hcd *)(hcd_to_ohci(hcd) + 1)) | ||
74 | |||
75 | /*-------------------------------------------------------------------------*/ | ||
76 | |||
77 | static void tmio_write_pm(struct platform_device *dev) | ||
78 | { | ||
79 | struct usb_hcd *hcd = platform_get_drvdata(dev); | ||
80 | struct tmio_hcd *tmio = hcd_to_tmio(hcd); | ||
81 | u16 pm; | ||
82 | unsigned long flags; | ||
83 | |||
84 | spin_lock_irqsave(&tmio->lock, flags); | ||
85 | |||
86 | pm = CCR_PM_GKEN | CCR_PM_CKRNEN | | ||
87 | CCR_PM_PMEE | CCR_PM_PMES; | ||
88 | |||
89 | tmio_iowrite16(pm, tmio->ccr + CCR_PM); | ||
90 | spin_unlock_irqrestore(&tmio->lock, flags); | ||
91 | } | ||
92 | |||
93 | static void tmio_stop_hc(struct platform_device *dev) | ||
94 | { | ||
95 | struct usb_hcd *hcd = platform_get_drvdata(dev); | ||
96 | struct ohci_hcd *ohci = hcd_to_ohci(hcd); | ||
97 | struct tmio_hcd *tmio = hcd_to_tmio(hcd); | ||
98 | u16 pm; | ||
99 | |||
100 | pm = CCR_PM_GKEN | CCR_PM_CKRNEN; | ||
101 | switch (ohci->num_ports) { | ||
102 | default: | ||
103 | dev_err(&dev->dev, "Unsupported amount of ports: %d\n", ohci->num_ports); | ||
104 | case 3: | ||
105 | pm |= CCR_PM_USBPW3; | ||
106 | case 2: | ||
107 | pm |= CCR_PM_USBPW2; | ||
108 | case 1: | ||
109 | pm |= CCR_PM_USBPW1; | ||
110 | } | ||
111 | tmio_iowrite8(0, tmio->ccr + CCR_INTC); | ||
112 | tmio_iowrite8(0, tmio->ccr + CCR_ILME); | ||
113 | tmio_iowrite16(0, tmio->ccr + CCR_BASE); | ||
114 | tmio_iowrite16(0, tmio->ccr + CCR_BASE + 2); | ||
115 | tmio_iowrite16(pm, tmio->ccr + CCR_PM); | ||
116 | } | ||
117 | |||
118 | static void tmio_start_hc(struct platform_device *dev) | ||
119 | { | ||
120 | struct usb_hcd *hcd = platform_get_drvdata(dev); | ||
121 | struct tmio_hcd *tmio = hcd_to_tmio(hcd); | ||
122 | unsigned long base = hcd->rsrc_start; | ||
123 | |||
124 | tmio_write_pm(dev); | ||
125 | tmio_iowrite16(base, tmio->ccr + CCR_BASE); | ||
126 | tmio_iowrite16(base >> 16, tmio->ccr + CCR_BASE + 2); | ||
127 | tmio_iowrite8(1, tmio->ccr + CCR_ILME); | ||
128 | tmio_iowrite8(2, tmio->ccr + CCR_INTC); | ||
129 | |||
130 | dev_info(&dev->dev, "revision %d @ 0x%08llx, irq %d\n", | ||
131 | tmio_ioread8(tmio->ccr + CCR_REVID), hcd->rsrc_start, hcd->irq); | ||
132 | } | ||
133 | |||
134 | static int ohci_tmio_start(struct usb_hcd *hcd) | ||
135 | { | ||
136 | struct ohci_hcd *ohci = hcd_to_ohci(hcd); | ||
137 | int ret; | ||
138 | |||
139 | if ((ret = ohci_init(ohci)) < 0) | ||
140 | return ret; | ||
141 | |||
142 | if ((ret = ohci_run(ohci)) < 0) { | ||
143 | err("can't start %s", hcd->self.bus_name); | ||
144 | ohci_stop(hcd); | ||
145 | return ret; | ||
146 | } | ||
147 | |||
148 | return 0; | ||
149 | } | ||
150 | |||
151 | static const struct hc_driver ohci_tmio_hc_driver = { | ||
152 | .description = hcd_name, | ||
153 | .product_desc = "TMIO OHCI USB Host Controller", | ||
154 | .hcd_priv_size = sizeof(struct ohci_hcd) + sizeof (struct tmio_hcd), | ||
155 | |||
156 | /* generic hardware linkage */ | ||
157 | .irq = ohci_irq, | ||
158 | .flags = HCD_USB11 | HCD_MEMORY | HCD_LOCAL_MEM, | ||
159 | |||
160 | /* basic lifecycle operations */ | ||
161 | .start = ohci_tmio_start, | ||
162 | .stop = ohci_stop, | ||
163 | .shutdown = ohci_shutdown, | ||
164 | |||
165 | /* managing i/o requests and associated device resources */ | ||
166 | .urb_enqueue = ohci_urb_enqueue, | ||
167 | .urb_dequeue = ohci_urb_dequeue, | ||
168 | .endpoint_disable = ohci_endpoint_disable, | ||
169 | |||
170 | /* scheduling support */ | ||
171 | .get_frame_number = ohci_get_frame, | ||
172 | |||
173 | /* root hub support */ | ||
174 | .hub_status_data = ohci_hub_status_data, | ||
175 | .hub_control = ohci_hub_control, | ||
176 | #ifdef CONFIG_PM | ||
177 | .bus_suspend = ohci_bus_suspend, | ||
178 | .bus_resume = ohci_bus_resume, | ||
179 | #endif | ||
180 | .start_port_reset = ohci_start_port_reset, | ||
181 | }; | ||
182 | |||
183 | /*-------------------------------------------------------------------------*/ | ||
184 | static struct platform_driver ohci_hcd_tmio_driver; | ||
185 | |||
186 | static int __devinit ohci_hcd_tmio_drv_probe(struct platform_device *dev) | ||
187 | { | ||
188 | struct mfd_cell *cell = dev->dev.platform_data; | ||
189 | struct resource *regs = platform_get_resource(dev, IORESOURCE_MEM, 0); | ||
190 | struct resource *config = platform_get_resource(dev, IORESOURCE_MEM, 1); | ||
191 | struct resource *sram = platform_get_resource(dev, IORESOURCE_MEM, 2); | ||
192 | int irq = platform_get_irq(dev, 0); | ||
193 | struct tmio_hcd *tmio; | ||
194 | struct ohci_hcd *ohci; | ||
195 | struct usb_hcd *hcd; | ||
196 | int ret; | ||
197 | |||
198 | if (usb_disabled()) | ||
199 | return -ENODEV; | ||
200 | |||
201 | if (!cell) | ||
202 | return -EINVAL; | ||
203 | |||
204 | hcd = usb_create_hcd(&ohci_tmio_hc_driver, &dev->dev, dev->dev.bus_id); | ||
205 | if (!hcd) { | ||
206 | ret = -ENOMEM; | ||
207 | goto err_usb_create_hcd; | ||
208 | } | ||
209 | |||
210 | hcd->rsrc_start = regs->start; | ||
211 | hcd->rsrc_len = regs->end - regs->start + 1; | ||
212 | |||
213 | tmio = hcd_to_tmio(hcd); | ||
214 | |||
215 | spin_lock_init(&tmio->lock); | ||
216 | |||
217 | tmio->ccr = ioremap(config->start, config->end - config->start + 1); | ||
218 | if (!tmio->ccr) { | ||
219 | ret = -ENOMEM; | ||
220 | goto err_ioremap_ccr; | ||
221 | } | ||
222 | |||
223 | hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len); | ||
224 | if (!hcd->regs) { | ||
225 | ret = -ENOMEM; | ||
226 | goto err_ioremap_regs; | ||
227 | } | ||
228 | |||
229 | if (!dma_declare_coherent_memory(&dev->dev, sram->start, | ||
230 | sram->start, | ||
231 | sram->end - sram->start + 1, | ||
232 | DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE)) { | ||
233 | ret = -EBUSY; | ||
234 | goto err_dma_declare; | ||
235 | } | ||
236 | |||
237 | if (cell->enable) { | ||
238 | ret = cell->enable(dev); | ||
239 | if (ret) | ||
240 | goto err_enable; | ||
241 | } | ||
242 | |||
243 | tmio_start_hc(dev); | ||
244 | ohci = hcd_to_ohci(hcd); | ||
245 | ohci_hcd_init(ohci); | ||
246 | |||
247 | ret = usb_add_hcd(hcd, irq, IRQF_DISABLED); | ||
248 | if (ret) | ||
249 | goto err_add_hcd; | ||
250 | |||
251 | if (ret == 0) | ||
252 | return ret; | ||
253 | |||
254 | usb_remove_hcd(hcd); | ||
255 | |||
256 | err_add_hcd: | ||
257 | tmio_stop_hc(dev); | ||
258 | if (cell->disable) | ||
259 | cell->disable(dev); | ||
260 | err_enable: | ||
261 | dma_release_declared_memory(&dev->dev); | ||
262 | err_dma_declare: | ||
263 | iounmap(hcd->regs); | ||
264 | err_ioremap_regs: | ||
265 | iounmap(tmio->ccr); | ||
266 | err_ioremap_ccr: | ||
267 | usb_put_hcd(hcd); | ||
268 | err_usb_create_hcd: | ||
269 | |||
270 | return ret; | ||
271 | } | ||
272 | |||
273 | static int __devexit ohci_hcd_tmio_drv_remove(struct platform_device *dev) | ||
274 | { | ||
275 | struct usb_hcd *hcd = platform_get_drvdata(dev); | ||
276 | struct tmio_hcd *tmio = hcd_to_tmio(hcd); | ||
277 | struct mfd_cell *cell = dev->dev.platform_data; | ||
278 | |||
279 | usb_remove_hcd(hcd); | ||
280 | tmio_stop_hc(dev); | ||
281 | if (cell->disable) | ||
282 | cell->disable(dev); | ||
283 | dma_release_declared_memory(&dev->dev); | ||
284 | iounmap(hcd->regs); | ||
285 | iounmap(tmio->ccr); | ||
286 | usb_put_hcd(hcd); | ||
287 | |||
288 | platform_set_drvdata(dev, NULL); | ||
289 | |||
290 | return 0; | ||
291 | } | ||
292 | |||
293 | #ifdef CONFIG_PM | ||
294 | static int ohci_hcd_tmio_drv_suspend(struct platform_device *dev, pm_message_t state) | ||
295 | { | ||
296 | struct mfd_cell *cell = dev->dev.platform_data; | ||
297 | struct usb_hcd *hcd = platform_get_drvdata(dev); | ||
298 | struct ohci_hcd *ohci = hcd_to_ohci(hcd); | ||
299 | struct tmio_hcd *tmio = hcd_to_tmio(hcd); | ||
300 | unsigned long flags; | ||
301 | u8 misc; | ||
302 | int ret; | ||
303 | |||
304 | if (time_before(jiffies, ohci->next_statechange)) | ||
305 | msleep(5); | ||
306 | ohci->next_statechange = jiffies; | ||
307 | |||
308 | spin_lock_irqsave(&tmio->lock, flags); | ||
309 | |||
310 | misc = tmio_ioread8(tmio->ccr + CCR_MISC); | ||
311 | misc |= 1 << 3; /* USSUSP */ | ||
312 | tmio_iowrite8(misc, tmio->ccr + CCR_MISC); | ||
313 | |||
314 | spin_unlock_irqrestore(&tmio->lock, flags); | ||
315 | |||
316 | if (cell->suspend) { | ||
317 | ret = cell->suspend(dev); | ||
318 | if (ret) | ||
319 | return ret; | ||
320 | } | ||
321 | |||
322 | hcd->state = HC_STATE_SUSPENDED; | ||
323 | |||
324 | return 0; | ||
325 | } | ||
326 | |||
327 | static int ohci_hcd_tmio_drv_resume(struct platform_device *dev) | ||
328 | { | ||
329 | struct mfd_cell *cell = dev->dev.platform_data; | ||
330 | struct usb_hcd *hcd = platform_get_drvdata(dev); | ||
331 | struct ohci_hcd *ohci = hcd_to_ohci(hcd); | ||
332 | struct tmio_hcd *tmio = hcd_to_tmio(hcd); | ||
333 | unsigned long flags; | ||
334 | u8 misc; | ||
335 | int ret; | ||
336 | |||
337 | if (time_before(jiffies, ohci->next_statechange)) | ||
338 | msleep(5); | ||
339 | ohci->next_statechange = jiffies; | ||
340 | |||
341 | if (cell->resume) { | ||
342 | ret = cell->resume(dev); | ||
343 | if (ret) | ||
344 | return ret; | ||
345 | } | ||
346 | |||
347 | tmio_start_hc(dev); | ||
348 | |||
349 | spin_lock_irqsave(&tmio->lock, flags); | ||
350 | |||
351 | misc = tmio_ioread8(tmio->ccr + CCR_MISC); | ||
352 | misc &= ~(1 << 3); /* USSUSP */ | ||
353 | tmio_iowrite8(misc, tmio->ccr + CCR_MISC); | ||
354 | |||
355 | spin_unlock_irqrestore(&tmio->lock, flags); | ||
356 | |||
357 | ohci_finish_controller_resume(hcd); | ||
358 | |||
359 | return 0; | ||
360 | } | ||
361 | #else | ||
362 | #define ohci_hcd_tmio_drv_suspend NULL | ||
363 | #define ohci_hcd_tmio_drv_resume NULL | ||
364 | #endif | ||
365 | |||
366 | static struct platform_driver ohci_hcd_tmio_driver = { | ||
367 | .probe = ohci_hcd_tmio_drv_probe, | ||
368 | .remove = __devexit_p(ohci_hcd_tmio_drv_remove), | ||
369 | .shutdown = usb_hcd_platform_shutdown, | ||
370 | .suspend = ohci_hcd_tmio_drv_suspend, | ||
371 | .resume = ohci_hcd_tmio_drv_resume, | ||
372 | .driver = { | ||
373 | .name = "tmio-ohci", | ||
374 | .owner = THIS_MODULE, | ||
375 | }, | ||
376 | }; | ||
diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c index b358c4e1cf21..444c69c447be 100644 --- a/drivers/usb/misc/usbtest.c +++ b/drivers/usb/misc/usbtest.c | |||
@@ -1561,8 +1561,7 @@ usbtest_ioctl (struct usb_interface *intf, unsigned int code, void *buf) | |||
1561 | if (code != USBTEST_REQUEST) | 1561 | if (code != USBTEST_REQUEST) |
1562 | return -EOPNOTSUPP; | 1562 | return -EOPNOTSUPP; |
1563 | 1563 | ||
1564 | if (param->iterations <= 0 || param->length < 0 | 1564 | if (param->iterations <= 0) |
1565 | || param->sglen < 0 || param->vary < 0) | ||
1566 | return -EINVAL; | 1565 | return -EINVAL; |
1567 | 1566 | ||
1568 | if (mutex_lock_interruptible(&dev->lock)) | 1567 | if (mutex_lock_interruptible(&dev->lock)) |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 3d87eabcd922..bd07eaa300b9 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -95,11 +95,20 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
95 | #define HUAWEI_PRODUCT_E220 0x1003 | 95 | #define HUAWEI_PRODUCT_E220 0x1003 |
96 | #define HUAWEI_PRODUCT_E220BIS 0x1004 | 96 | #define HUAWEI_PRODUCT_E220BIS 0x1004 |
97 | #define HUAWEI_PRODUCT_E1401 0x1401 | 97 | #define HUAWEI_PRODUCT_E1401 0x1401 |
98 | #define HUAWEI_PRODUCT_E1402 0x1402 | ||
98 | #define HUAWEI_PRODUCT_E1403 0x1403 | 99 | #define HUAWEI_PRODUCT_E1403 0x1403 |
100 | #define HUAWEI_PRODUCT_E1404 0x1404 | ||
99 | #define HUAWEI_PRODUCT_E1405 0x1405 | 101 | #define HUAWEI_PRODUCT_E1405 0x1405 |
100 | #define HUAWEI_PRODUCT_E1406 0x1406 | 102 | #define HUAWEI_PRODUCT_E1406 0x1406 |
103 | #define HUAWEI_PRODUCT_E1407 0x1407 | ||
101 | #define HUAWEI_PRODUCT_E1408 0x1408 | 104 | #define HUAWEI_PRODUCT_E1408 0x1408 |
102 | #define HUAWEI_PRODUCT_E1409 0x1409 | 105 | #define HUAWEI_PRODUCT_E1409 0x1409 |
106 | #define HUAWEI_PRODUCT_E140A 0x140A | ||
107 | #define HUAWEI_PRODUCT_E140B 0x140B | ||
108 | #define HUAWEI_PRODUCT_E140C 0x140C | ||
109 | #define HUAWEI_PRODUCT_E140D 0x140D | ||
110 | #define HUAWEI_PRODUCT_E140E 0x140E | ||
111 | #define HUAWEI_PRODUCT_E140F 0x140F | ||
103 | #define HUAWEI_PRODUCT_E1410 0x1410 | 112 | #define HUAWEI_PRODUCT_E1410 0x1410 |
104 | #define HUAWEI_PRODUCT_E1411 0x1411 | 113 | #define HUAWEI_PRODUCT_E1411 0x1411 |
105 | #define HUAWEI_PRODUCT_E1412 0x1412 | 114 | #define HUAWEI_PRODUCT_E1412 0x1412 |
@@ -110,6 +119,44 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
110 | #define HUAWEI_PRODUCT_E1417 0x1417 | 119 | #define HUAWEI_PRODUCT_E1417 0x1417 |
111 | #define HUAWEI_PRODUCT_E1418 0x1418 | 120 | #define HUAWEI_PRODUCT_E1418 0x1418 |
112 | #define HUAWEI_PRODUCT_E1419 0x1419 | 121 | #define HUAWEI_PRODUCT_E1419 0x1419 |
122 | #define HUAWEI_PRODUCT_E141A 0x141A | ||
123 | #define HUAWEI_PRODUCT_E141B 0x141B | ||
124 | #define HUAWEI_PRODUCT_E141C 0x141C | ||
125 | #define HUAWEI_PRODUCT_E141D 0x141D | ||
126 | #define HUAWEI_PRODUCT_E141E 0x141E | ||
127 | #define HUAWEI_PRODUCT_E141F 0x141F | ||
128 | #define HUAWEI_PRODUCT_E1420 0x1420 | ||
129 | #define HUAWEI_PRODUCT_E1421 0x1421 | ||
130 | #define HUAWEI_PRODUCT_E1422 0x1422 | ||
131 | #define HUAWEI_PRODUCT_E1423 0x1423 | ||
132 | #define HUAWEI_PRODUCT_E1424 0x1424 | ||
133 | #define HUAWEI_PRODUCT_E1425 0x1425 | ||
134 | #define HUAWEI_PRODUCT_E1426 0x1426 | ||
135 | #define HUAWEI_PRODUCT_E1427 0x1427 | ||
136 | #define HUAWEI_PRODUCT_E1428 0x1428 | ||
137 | #define HUAWEI_PRODUCT_E1429 0x1429 | ||
138 | #define HUAWEI_PRODUCT_E142A 0x142A | ||
139 | #define HUAWEI_PRODUCT_E142B 0x142B | ||
140 | #define HUAWEI_PRODUCT_E142C 0x142C | ||
141 | #define HUAWEI_PRODUCT_E142D 0x142D | ||
142 | #define HUAWEI_PRODUCT_E142E 0x142E | ||
143 | #define HUAWEI_PRODUCT_E142F 0x142F | ||
144 | #define HUAWEI_PRODUCT_E1430 0x1430 | ||
145 | #define HUAWEI_PRODUCT_E1431 0x1431 | ||
146 | #define HUAWEI_PRODUCT_E1432 0x1432 | ||
147 | #define HUAWEI_PRODUCT_E1433 0x1433 | ||
148 | #define HUAWEI_PRODUCT_E1434 0x1434 | ||
149 | #define HUAWEI_PRODUCT_E1435 0x1435 | ||
150 | #define HUAWEI_PRODUCT_E1436 0x1436 | ||
151 | #define HUAWEI_PRODUCT_E1437 0x1437 | ||
152 | #define HUAWEI_PRODUCT_E1438 0x1438 | ||
153 | #define HUAWEI_PRODUCT_E1439 0x1439 | ||
154 | #define HUAWEI_PRODUCT_E143A 0x143A | ||
155 | #define HUAWEI_PRODUCT_E143B 0x143B | ||
156 | #define HUAWEI_PRODUCT_E143C 0x143C | ||
157 | #define HUAWEI_PRODUCT_E143D 0x143D | ||
158 | #define HUAWEI_PRODUCT_E143E 0x143E | ||
159 | #define HUAWEI_PRODUCT_E143F 0x143F | ||
113 | 160 | ||
114 | #define NOVATELWIRELESS_VENDOR_ID 0x1410 | 161 | #define NOVATELWIRELESS_VENDOR_ID 0x1410 |
115 | 162 | ||
@@ -207,6 +254,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
207 | /* ZTE PRODUCTS */ | 254 | /* ZTE PRODUCTS */ |
208 | #define ZTE_VENDOR_ID 0x19d2 | 255 | #define ZTE_VENDOR_ID 0x19d2 |
209 | #define ZTE_PRODUCT_MF628 0x0015 | 256 | #define ZTE_PRODUCT_MF628 0x0015 |
257 | #define ZTE_PRODUCT_MF626 0x0031 | ||
210 | #define ZTE_PRODUCT_CDMA_TECH 0xfffe | 258 | #define ZTE_PRODUCT_CDMA_TECH 0xfffe |
211 | 259 | ||
212 | /* Ericsson products */ | 260 | /* Ericsson products */ |
@@ -248,11 +296,20 @@ static struct usb_device_id option_ids[] = { | |||
248 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) }, | 296 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) }, |
249 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) }, | 297 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) }, |
250 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401, 0xff, 0xff, 0xff) }, | 298 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401, 0xff, 0xff, 0xff) }, |
299 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1402, 0xff, 0xff, 0xff) }, | ||
251 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403, 0xff, 0xff, 0xff) }, | 300 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403, 0xff, 0xff, 0xff) }, |
301 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1404, 0xff, 0xff, 0xff) }, | ||
252 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405, 0xff, 0xff, 0xff) }, | 302 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405, 0xff, 0xff, 0xff) }, |
253 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406, 0xff, 0xff, 0xff) }, | 303 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406, 0xff, 0xff, 0xff) }, |
304 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1407, 0xff, 0xff, 0xff) }, | ||
254 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408, 0xff, 0xff, 0xff) }, | 305 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408, 0xff, 0xff, 0xff) }, |
255 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409, 0xff, 0xff, 0xff) }, | 306 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409, 0xff, 0xff, 0xff) }, |
307 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140A, 0xff, 0xff, 0xff) }, | ||
308 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140B, 0xff, 0xff, 0xff) }, | ||
309 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140C, 0xff, 0xff, 0xff) }, | ||
310 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140D, 0xff, 0xff, 0xff) }, | ||
311 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140E, 0xff, 0xff, 0xff) }, | ||
312 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140F, 0xff, 0xff, 0xff) }, | ||
256 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410, 0xff, 0xff, 0xff) }, | 313 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410, 0xff, 0xff, 0xff) }, |
257 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411, 0xff, 0xff, 0xff) }, | 314 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411, 0xff, 0xff, 0xff) }, |
258 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412, 0xff, 0xff, 0xff) }, | 315 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412, 0xff, 0xff, 0xff) }, |
@@ -263,6 +320,44 @@ static struct usb_device_id option_ids[] = { | |||
263 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417, 0xff, 0xff, 0xff) }, | 320 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417, 0xff, 0xff, 0xff) }, |
264 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418, 0xff, 0xff, 0xff) }, | 321 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418, 0xff, 0xff, 0xff) }, |
265 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419, 0xff, 0xff, 0xff) }, | 322 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419, 0xff, 0xff, 0xff) }, |
323 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141A, 0xff, 0xff, 0xff) }, | ||
324 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141B, 0xff, 0xff, 0xff) }, | ||
325 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141C, 0xff, 0xff, 0xff) }, | ||
326 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141D, 0xff, 0xff, 0xff) }, | ||
327 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141E, 0xff, 0xff, 0xff) }, | ||
328 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141F, 0xff, 0xff, 0xff) }, | ||
329 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1420, 0xff, 0xff, 0xff) }, | ||
330 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1421, 0xff, 0xff, 0xff) }, | ||
331 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1422, 0xff, 0xff, 0xff) }, | ||
332 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1423, 0xff, 0xff, 0xff) }, | ||
333 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1424, 0xff, 0xff, 0xff) }, | ||
334 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1425, 0xff, 0xff, 0xff) }, | ||
335 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1426, 0xff, 0xff, 0xff) }, | ||
336 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1427, 0xff, 0xff, 0xff) }, | ||
337 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1428, 0xff, 0xff, 0xff) }, | ||
338 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1429, 0xff, 0xff, 0xff) }, | ||
339 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142A, 0xff, 0xff, 0xff) }, | ||
340 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142B, 0xff, 0xff, 0xff) }, | ||
341 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142C, 0xff, 0xff, 0xff) }, | ||
342 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142D, 0xff, 0xff, 0xff) }, | ||
343 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142E, 0xff, 0xff, 0xff) }, | ||
344 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142F, 0xff, 0xff, 0xff) }, | ||
345 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1430, 0xff, 0xff, 0xff) }, | ||
346 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1431, 0xff, 0xff, 0xff) }, | ||
347 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1432, 0xff, 0xff, 0xff) }, | ||
348 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1433, 0xff, 0xff, 0xff) }, | ||
349 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1434, 0xff, 0xff, 0xff) }, | ||
350 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1435, 0xff, 0xff, 0xff) }, | ||
351 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1436, 0xff, 0xff, 0xff) }, | ||
352 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1437, 0xff, 0xff, 0xff) }, | ||
353 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1438, 0xff, 0xff, 0xff) }, | ||
354 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1439, 0xff, 0xff, 0xff) }, | ||
355 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143A, 0xff, 0xff, 0xff) }, | ||
356 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143B, 0xff, 0xff, 0xff) }, | ||
357 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143C, 0xff, 0xff, 0xff) }, | ||
358 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) }, | ||
359 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) }, | ||
360 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) }, | ||
266 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) }, | 361 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) }, |
267 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */ | 362 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */ |
268 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */ | 363 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */ |
@@ -336,6 +431,7 @@ static struct usb_device_id option_ids[] = { | |||
336 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ | 431 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ |
337 | { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ | 432 | { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ |
338 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, | 433 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, |
434 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) }, | ||
339 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, | 435 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, |
340 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, | 436 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, |
341 | { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G) }, | 437 | { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G) }, |
diff --git a/drivers/usb/storage/initializers.c b/drivers/usb/storage/initializers.c index 4995bb595aef..2dd9bd4bff56 100644 --- a/drivers/usb/storage/initializers.c +++ b/drivers/usb/storage/initializers.c | |||
@@ -95,11 +95,10 @@ int usb_stor_huawei_e220_init(struct us_data *us) | |||
95 | { | 95 | { |
96 | int result; | 96 | int result; |
97 | 97 | ||
98 | us->iobuf[0] = 0x1; | ||
99 | result = usb_stor_control_msg(us, us->send_ctrl_pipe, | 98 | result = usb_stor_control_msg(us, us->send_ctrl_pipe, |
100 | USB_REQ_SET_FEATURE, | 99 | USB_REQ_SET_FEATURE, |
101 | USB_TYPE_STANDARD | USB_RECIP_DEVICE, | 100 | USB_TYPE_STANDARD | USB_RECIP_DEVICE, |
102 | 0x01, 0x0, us->iobuf, 0x1, 1000); | 101 | 0x01, 0x0, NULL, 0x0, 1000); |
103 | US_DEBUGP("usb_control_msg performing result is %d\n", result); | 102 | US_DEBUGP("usb_control_msg performing result is %d\n", result); |
104 | return (result ? 0 : -1); | 103 | return (result ? 0 : -1); |
105 | } | 104 | } |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index cd155475cb6e..a2b9ebbef38e 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
@@ -1628,97 +1628,332 @@ UNUSUAL_DEV( 0x1210, 0x0003, 0x0100, 0x0100, | |||
1628 | /* Reported by fangxiaozhi <huananhu@huawei.com> | 1628 | /* Reported by fangxiaozhi <huananhu@huawei.com> |
1629 | * This brings the HUAWEI data card devices into multi-port mode | 1629 | * This brings the HUAWEI data card devices into multi-port mode |
1630 | */ | 1630 | */ |
1631 | UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000, | 1631 | UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000, |
1632 | "HUAWEI MOBILE", | 1632 | "HUAWEI MOBILE", |
1633 | "Mass Storage", | 1633 | "Mass Storage", |
1634 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1634 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1635 | 0), | 1635 | 0), |
1636 | UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000, | 1636 | UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000, |
1637 | "HUAWEI MOBILE", | 1637 | "HUAWEI MOBILE", |
1638 | "Mass Storage", | 1638 | "Mass Storage", |
1639 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1639 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1640 | 0), | 1640 | 0), |
1641 | UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000, | 1641 | UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000, |
1642 | "HUAWEI MOBILE", | 1642 | "HUAWEI MOBILE", |
1643 | "Mass Storage", | 1643 | "Mass Storage", |
1644 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1644 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1645 | 0), | 1645 | 0), |
1646 | UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000, | 1646 | UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000, |
1647 | "HUAWEI MOBILE", | 1647 | "HUAWEI MOBILE", |
1648 | "Mass Storage", | 1648 | "Mass Storage", |
1649 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1649 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1650 | 0), | 1650 | 0), |
1651 | UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000, | 1651 | UNUSUAL_DEV( 0x12d1, 0x1402, 0x0000, 0x0000, |
1652 | "HUAWEI MOBILE", | 1652 | "HUAWEI MOBILE", |
1653 | "Mass Storage", | 1653 | "Mass Storage", |
1654 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1654 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1655 | 0), | 1655 | 0), |
1656 | UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000, | 1656 | UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000, |
1657 | "HUAWEI MOBILE", | 1657 | "HUAWEI MOBILE", |
1658 | "Mass Storage", | 1658 | "Mass Storage", |
1659 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1659 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1660 | 0), | 1660 | 0), |
1661 | UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000, | 1661 | UNUSUAL_DEV( 0x12d1, 0x1404, 0x0000, 0x0000, |
1662 | "HUAWEI MOBILE", | 1662 | "HUAWEI MOBILE", |
1663 | "Mass Storage", | 1663 | "Mass Storage", |
1664 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1664 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1665 | 0), | 1665 | 0), |
1666 | UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000, | 1666 | UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000, |
1667 | "HUAWEI MOBILE", | 1667 | "HUAWEI MOBILE", |
1668 | "Mass Storage", | 1668 | "Mass Storage", |
1669 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1669 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1670 | 0), | 1670 | 0), |
1671 | UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000, | 1671 | UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000, |
1672 | "HUAWEI MOBILE", | 1672 | "HUAWEI MOBILE", |
1673 | "Mass Storage", | 1673 | "Mass Storage", |
1674 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1674 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1675 | 0), | 1675 | 0), |
1676 | UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000, | 1676 | UNUSUAL_DEV( 0x12d1, 0x1407, 0x0000, 0x0000, |
1677 | "HUAWEI MOBILE", | 1677 | "HUAWEI MOBILE", |
1678 | "Mass Storage", | 1678 | "Mass Storage", |
1679 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1679 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1680 | 0), | 1680 | 0), |
1681 | UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000, | 1681 | UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000, |
1682 | "HUAWEI MOBILE", | 1682 | "HUAWEI MOBILE", |
1683 | "Mass Storage", | 1683 | "Mass Storage", |
1684 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1684 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1685 | 0), | 1685 | 0), |
1686 | UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000, | 1686 | UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000, |
1687 | "HUAWEI MOBILE", | 1687 | "HUAWEI MOBILE", |
1688 | "Mass Storage", | 1688 | "Mass Storage", |
1689 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1689 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1690 | 0), | 1690 | 0), |
1691 | UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000, | 1691 | UNUSUAL_DEV( 0x12d1, 0x140A, 0x0000, 0x0000, |
1692 | "HUAWEI MOBILE", | 1692 | "HUAWEI MOBILE", |
1693 | "Mass Storage", | 1693 | "Mass Storage", |
1694 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1694 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1695 | 0), | 1695 | 0), |
1696 | UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000, | 1696 | UNUSUAL_DEV( 0x12d1, 0x140B, 0x0000, 0x0000, |
1697 | "HUAWEI MOBILE", | 1697 | "HUAWEI MOBILE", |
1698 | "Mass Storage", | 1698 | "Mass Storage", |
1699 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1699 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1700 | 0), | 1700 | 0), |
1701 | UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000, | 1701 | UNUSUAL_DEV( 0x12d1, 0x140C, 0x0000, 0x0000, |
1702 | "HUAWEI MOBILE", | 1702 | "HUAWEI MOBILE", |
1703 | "Mass Storage", | 1703 | "Mass Storage", |
1704 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1704 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1705 | 0), | 1705 | 0), |
1706 | UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000, | 1706 | UNUSUAL_DEV( 0x12d1, 0x140D, 0x0000, 0x0000, |
1707 | "HUAWEI MOBILE", | 1707 | "HUAWEI MOBILE", |
1708 | "Mass Storage", | 1708 | "Mass Storage", |
1709 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1709 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1710 | 0), | 1710 | 0), |
1711 | UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000, | 1711 | UNUSUAL_DEV( 0x12d1, 0x140E, 0x0000, 0x0000, |
1712 | "HUAWEI MOBILE", | 1712 | "HUAWEI MOBILE", |
1713 | "Mass Storage", | 1713 | "Mass Storage", |
1714 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1714 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1715 | 0), | 1715 | 0), |
1716 | UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000, | 1716 | UNUSUAL_DEV( 0x12d1, 0x140F, 0x0000, 0x0000, |
1717 | "HUAWEI MOBILE", | 1717 | "HUAWEI MOBILE", |
1718 | "Mass Storage", | 1718 | "Mass Storage", |
1719 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1719 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
1720 | 0), | 1720 | 0), |
1721 | UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000, | 1721 | UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000, |
1722 | "HUAWEI MOBILE", | ||
1723 | "Mass Storage", | ||
1724 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1725 | 0), | ||
1726 | UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000, | ||
1727 | "HUAWEI MOBILE", | ||
1728 | "Mass Storage", | ||
1729 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1730 | 0), | ||
1731 | UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000, | ||
1732 | "HUAWEI MOBILE", | ||
1733 | "Mass Storage", | ||
1734 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1735 | 0), | ||
1736 | UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000, | ||
1737 | "HUAWEI MOBILE", | ||
1738 | "Mass Storage", | ||
1739 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1740 | 0), | ||
1741 | UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000, | ||
1742 | "HUAWEI MOBILE", | ||
1743 | "Mass Storage", | ||
1744 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1745 | 0), | ||
1746 | UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000, | ||
1747 | "HUAWEI MOBILE", | ||
1748 | "Mass Storage", | ||
1749 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1750 | 0), | ||
1751 | UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000, | ||
1752 | "HUAWEI MOBILE", | ||
1753 | "Mass Storage", | ||
1754 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1755 | 0), | ||
1756 | UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000, | ||
1757 | "HUAWEI MOBILE", | ||
1758 | "Mass Storage", | ||
1759 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1760 | 0), | ||
1761 | UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000, | ||
1762 | "HUAWEI MOBILE", | ||
1763 | "Mass Storage", | ||
1764 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1765 | 0), | ||
1766 | UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000, | ||
1767 | "HUAWEI MOBILE", | ||
1768 | "Mass Storage", | ||
1769 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1770 | 0), | ||
1771 | UNUSUAL_DEV( 0x12d1, 0x141A, 0x0000, 0x0000, | ||
1772 | "HUAWEI MOBILE", | ||
1773 | "Mass Storage", | ||
1774 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1775 | 0), | ||
1776 | UNUSUAL_DEV( 0x12d1, 0x141B, 0x0000, 0x0000, | ||
1777 | "HUAWEI MOBILE", | ||
1778 | "Mass Storage", | ||
1779 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1780 | 0), | ||
1781 | UNUSUAL_DEV( 0x12d1, 0x141C, 0x0000, 0x0000, | ||
1782 | "HUAWEI MOBILE", | ||
1783 | "Mass Storage", | ||
1784 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1785 | 0), | ||
1786 | UNUSUAL_DEV( 0x12d1, 0x141D, 0x0000, 0x0000, | ||
1787 | "HUAWEI MOBILE", | ||
1788 | "Mass Storage", | ||
1789 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1790 | 0), | ||
1791 | UNUSUAL_DEV( 0x12d1, 0x141E, 0x0000, 0x0000, | ||
1792 | "HUAWEI MOBILE", | ||
1793 | "Mass Storage", | ||
1794 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1795 | 0), | ||
1796 | UNUSUAL_DEV( 0x12d1, 0x141F, 0x0000, 0x0000, | ||
1797 | "HUAWEI MOBILE", | ||
1798 | "Mass Storage", | ||
1799 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1800 | 0), | ||
1801 | UNUSUAL_DEV( 0x12d1, 0x1420, 0x0000, 0x0000, | ||
1802 | "HUAWEI MOBILE", | ||
1803 | "Mass Storage", | ||
1804 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1805 | 0), | ||
1806 | UNUSUAL_DEV( 0x12d1, 0x1421, 0x0000, 0x0000, | ||
1807 | "HUAWEI MOBILE", | ||
1808 | "Mass Storage", | ||
1809 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1810 | 0), | ||
1811 | UNUSUAL_DEV( 0x12d1, 0x1422, 0x0000, 0x0000, | ||
1812 | "HUAWEI MOBILE", | ||
1813 | "Mass Storage", | ||
1814 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1815 | 0), | ||
1816 | UNUSUAL_DEV( 0x12d1, 0x1423, 0x0000, 0x0000, | ||
1817 | "HUAWEI MOBILE", | ||
1818 | "Mass Storage", | ||
1819 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1820 | 0), | ||
1821 | UNUSUAL_DEV( 0x12d1, 0x1424, 0x0000, 0x0000, | ||
1822 | "HUAWEI MOBILE", | ||
1823 | "Mass Storage", | ||
1824 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1825 | 0), | ||
1826 | UNUSUAL_DEV( 0x12d1, 0x1425, 0x0000, 0x0000, | ||
1827 | "HUAWEI MOBILE", | ||
1828 | "Mass Storage", | ||
1829 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1830 | 0), | ||
1831 | UNUSUAL_DEV( 0x12d1, 0x1426, 0x0000, 0x0000, | ||
1832 | "HUAWEI MOBILE", | ||
1833 | "Mass Storage", | ||
1834 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1835 | 0), | ||
1836 | UNUSUAL_DEV( 0x12d1, 0x1427, 0x0000, 0x0000, | ||
1837 | "HUAWEI MOBILE", | ||
1838 | "Mass Storage", | ||
1839 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1840 | 0), | ||
1841 | UNUSUAL_DEV( 0x12d1, 0x1428, 0x0000, 0x0000, | ||
1842 | "HUAWEI MOBILE", | ||
1843 | "Mass Storage", | ||
1844 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1845 | 0), | ||
1846 | UNUSUAL_DEV( 0x12d1, 0x1429, 0x0000, 0x0000, | ||
1847 | "HUAWEI MOBILE", | ||
1848 | "Mass Storage", | ||
1849 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1850 | 0), | ||
1851 | UNUSUAL_DEV( 0x12d1, 0x142A, 0x0000, 0x0000, | ||
1852 | "HUAWEI MOBILE", | ||
1853 | "Mass Storage", | ||
1854 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1855 | 0), | ||
1856 | UNUSUAL_DEV( 0x12d1, 0x142B, 0x0000, 0x0000, | ||
1857 | "HUAWEI MOBILE", | ||
1858 | "Mass Storage", | ||
1859 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1860 | 0), | ||
1861 | UNUSUAL_DEV( 0x12d1, 0x142C, 0x0000, 0x0000, | ||
1862 | "HUAWEI MOBILE", | ||
1863 | "Mass Storage", | ||
1864 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1865 | 0), | ||
1866 | UNUSUAL_DEV( 0x12d1, 0x142D, 0x0000, 0x0000, | ||
1867 | "HUAWEI MOBILE", | ||
1868 | "Mass Storage", | ||
1869 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1870 | 0), | ||
1871 | UNUSUAL_DEV( 0x12d1, 0x142E, 0x0000, 0x0000, | ||
1872 | "HUAWEI MOBILE", | ||
1873 | "Mass Storage", | ||
1874 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1875 | 0), | ||
1876 | UNUSUAL_DEV( 0x12d1, 0x142F, 0x0000, 0x0000, | ||
1877 | "HUAWEI MOBILE", | ||
1878 | "Mass Storage", | ||
1879 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1880 | 0), | ||
1881 | UNUSUAL_DEV( 0x12d1, 0x1430, 0x0000, 0x0000, | ||
1882 | "HUAWEI MOBILE", | ||
1883 | "Mass Storage", | ||
1884 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1885 | 0), | ||
1886 | UNUSUAL_DEV( 0x12d1, 0x1431, 0x0000, 0x0000, | ||
1887 | "HUAWEI MOBILE", | ||
1888 | "Mass Storage", | ||
1889 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1890 | 0), | ||
1891 | UNUSUAL_DEV( 0x12d1, 0x1432, 0x0000, 0x0000, | ||
1892 | "HUAWEI MOBILE", | ||
1893 | "Mass Storage", | ||
1894 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1895 | 0), | ||
1896 | UNUSUAL_DEV( 0x12d1, 0x1433, 0x0000, 0x0000, | ||
1897 | "HUAWEI MOBILE", | ||
1898 | "Mass Storage", | ||
1899 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1900 | 0), | ||
1901 | UNUSUAL_DEV( 0x12d1, 0x1434, 0x0000, 0x0000, | ||
1902 | "HUAWEI MOBILE", | ||
1903 | "Mass Storage", | ||
1904 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1905 | 0), | ||
1906 | UNUSUAL_DEV( 0x12d1, 0x1435, 0x0000, 0x0000, | ||
1907 | "HUAWEI MOBILE", | ||
1908 | "Mass Storage", | ||
1909 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1910 | 0), | ||
1911 | UNUSUAL_DEV( 0x12d1, 0x1436, 0x0000, 0x0000, | ||
1912 | "HUAWEI MOBILE", | ||
1913 | "Mass Storage", | ||
1914 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1915 | 0), | ||
1916 | UNUSUAL_DEV( 0x12d1, 0x1437, 0x0000, 0x0000, | ||
1917 | "HUAWEI MOBILE", | ||
1918 | "Mass Storage", | ||
1919 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1920 | 0), | ||
1921 | UNUSUAL_DEV( 0x12d1, 0x1438, 0x0000, 0x0000, | ||
1922 | "HUAWEI MOBILE", | ||
1923 | "Mass Storage", | ||
1924 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1925 | 0), | ||
1926 | UNUSUAL_DEV( 0x12d1, 0x1439, 0x0000, 0x0000, | ||
1927 | "HUAWEI MOBILE", | ||
1928 | "Mass Storage", | ||
1929 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1930 | 0), | ||
1931 | UNUSUAL_DEV( 0x12d1, 0x143A, 0x0000, 0x0000, | ||
1932 | "HUAWEI MOBILE", | ||
1933 | "Mass Storage", | ||
1934 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1935 | 0), | ||
1936 | UNUSUAL_DEV( 0x12d1, 0x143B, 0x0000, 0x0000, | ||
1937 | "HUAWEI MOBILE", | ||
1938 | "Mass Storage", | ||
1939 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1940 | 0), | ||
1941 | UNUSUAL_DEV( 0x12d1, 0x143C, 0x0000, 0x0000, | ||
1942 | "HUAWEI MOBILE", | ||
1943 | "Mass Storage", | ||
1944 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1945 | 0), | ||
1946 | UNUSUAL_DEV( 0x12d1, 0x143D, 0x0000, 0x0000, | ||
1947 | "HUAWEI MOBILE", | ||
1948 | "Mass Storage", | ||
1949 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1950 | 0), | ||
1951 | UNUSUAL_DEV( 0x12d1, 0x143E, 0x0000, 0x0000, | ||
1952 | "HUAWEI MOBILE", | ||
1953 | "Mass Storage", | ||
1954 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1955 | 0), | ||
1956 | UNUSUAL_DEV( 0x12d1, 0x143F, 0x0000, 0x0000, | ||
1722 | "HUAWEI MOBILE", | 1957 | "HUAWEI MOBILE", |
1723 | "Mass Storage", | 1958 | "Mass Storage", |
1724 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, | 1959 | US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init, |
@@ -1745,6 +1980,15 @@ UNUSUAL_DEV( 0x14cd, 0x6600, 0x0201, 0x0201, | |||
1745 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1980 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
1746 | US_FL_IGNORE_RESIDUE ), | 1981 | US_FL_IGNORE_RESIDUE ), |
1747 | 1982 | ||
1983 | /* Reported by Alexandre Oliva <oliva@lsd.ic.unicamp.br> | ||
1984 | * JMicron responds to USN and several other SCSI ioctls with a | ||
1985 | * residue that causes subsequent I/O requests to fail. */ | ||
1986 | UNUSUAL_DEV( 0x152d, 0x2329, 0x0100, 0x0100, | ||
1987 | "JMicron", | ||
1988 | "USB to ATA/ATAPI Bridge", | ||
1989 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
1990 | US_FL_IGNORE_RESIDUE ), | ||
1991 | |||
1748 | /* Reported by Robert Schedel <r.schedel@yahoo.de> | 1992 | /* Reported by Robert Schedel <r.schedel@yahoo.de> |
1749 | * Note: this is a 'super top' device like the above 14cd/6600 device */ | 1993 | * Note: this is a 'super top' device like the above 14cd/6600 device */ |
1750 | UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x0201, | 1994 | UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x0201, |
@@ -1818,6 +2062,15 @@ UNUSUAL_DEV( 0x2770, 0x915d, 0x0010, 0x0010, | |||
1818 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 2062 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
1819 | US_FL_FIX_CAPACITY ), | 2063 | US_FL_FIX_CAPACITY ), |
1820 | 2064 | ||
2065 | /* Reported by Frederic Marchal <frederic.marchal@wowcompany.com> | ||
2066 | * Mio Moov 330 | ||
2067 | */ | ||
2068 | UNUSUAL_DEV( 0x3340, 0xffff, 0x0000, 0x0000, | ||
2069 | "Mitac", | ||
2070 | "Mio DigiWalker USB Sync", | ||
2071 | US_SC_DEVICE,US_PR_DEVICE,NULL, | ||
2072 | US_FL_MAX_SECTORS_64 ), | ||
2073 | |||
1821 | /* Reported by Andrey Rahmatullin <wrar@altlinux.org> */ | 2074 | /* Reported by Andrey Rahmatullin <wrar@altlinux.org> */ |
1822 | UNUSUAL_DEV( 0x4102, 0x1020, 0x0100, 0x0100, | 2075 | UNUSUAL_DEV( 0x4102, 0x1020, 0x0100, 0x0100, |
1823 | "iRiver", | 2076 | "iRiver", |