aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-10-23 13:09:50 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-23 13:09:50 -0400
commita27028349ccbcec9dde9d6dbba9d4017ad9ad5ab (patch)
tree58d7deaeda91cf854543b8dfcef097097eb856fb
parent45432371b448c80622d8069b845625996127caeb (diff)
parent6c6409459a18a825ce12ecb003d5686af61f7a2f (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
-rw-r--r--drivers/usb/Kconfig3
-rw-r--r--drivers/usb/atm/speedtch.c12
-rw-r--r--drivers/usb/class/cdc-acm.c3
-rw-r--r--drivers/usb/class/cdc-wdm.c2
-rw-r--r--drivers/usb/core/driver.c3
-rw-r--r--drivers/usb/core/hub.c2
-rw-r--r--drivers/usb/gadget/config.c2
-rw-r--r--drivers/usb/gadget/pxa27x_udc.c2
-rw-r--r--drivers/usb/gadget/s3c2410_udc.c7
-rw-r--r--drivers/usb/host/Kconfig1
-rw-r--r--drivers/usb/host/ohci-hcd.c21
-rw-r--r--drivers/usb/host/ohci-tmio.c376
-rw-r--r--drivers/usb/misc/usbtest.c3
-rw-r--r--drivers/usb/serial/option.c96
-rw-r--r--drivers/usb/storage/initializers.c3
-rw-r--r--drivers/usb/storage/unusual_devs.h291
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
725static int speedtch_pre_reset(struct usb_interface *intf)
726{
727 return 0;
728}
729
730static 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
45MODULE_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
1190static void __exit ohci_hcd_mod_exit(void) 1208static 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
68struct 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
77static 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
93static 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
118static 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
134static 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
151static 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/*-------------------------------------------------------------------------*/
184static struct platform_driver ohci_hcd_tmio_driver;
185
186static 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
256err_add_hcd:
257 tmio_stop_hc(dev);
258 if (cell->disable)
259 cell->disable(dev);
260err_enable:
261 dma_release_declared_memory(&dev->dev);
262err_dma_declare:
263 iounmap(hcd->regs);
264err_ioremap_regs:
265 iounmap(tmio->ccr);
266err_ioremap_ccr:
267 usb_put_hcd(hcd);
268err_usb_create_hcd:
269
270 return ret;
271}
272
273static 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
294static 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
327static 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
366static 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 */
1631UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000, 1631UNUSUAL_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),
1636UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000, 1636UNUSUAL_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),
1641UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000, 1641UNUSUAL_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),
1646UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000, 1646UNUSUAL_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),
1651UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000, 1651UNUSUAL_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),
1656UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000, 1656UNUSUAL_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),
1661UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000, 1661UNUSUAL_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),
1666UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000, 1666UNUSUAL_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),
1671UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000, 1671UNUSUAL_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),
1676UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000, 1676UNUSUAL_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),
1681UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000, 1681UNUSUAL_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),
1686UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000, 1686UNUSUAL_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),
1691UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000, 1691UNUSUAL_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),
1696UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000, 1696UNUSUAL_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),
1701UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000, 1701UNUSUAL_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),
1706UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000, 1706UNUSUAL_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),
1711UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000, 1711UNUSUAL_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),
1716UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000, 1716UNUSUAL_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),
1721UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000, 1721UNUSUAL_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),
1726UNUSUAL_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),
1731UNUSUAL_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),
1736UNUSUAL_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),
1741UNUSUAL_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),
1746UNUSUAL_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),
1751UNUSUAL_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),
1756UNUSUAL_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),
1761UNUSUAL_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),
1766UNUSUAL_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),
1771UNUSUAL_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),
1776UNUSUAL_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),
1781UNUSUAL_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),
1786UNUSUAL_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),
1791UNUSUAL_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),
1796UNUSUAL_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),
1801UNUSUAL_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),
1806UNUSUAL_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),
1811UNUSUAL_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),
1816UNUSUAL_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),
1821UNUSUAL_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),
1826UNUSUAL_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),
1831UNUSUAL_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),
1836UNUSUAL_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),
1841UNUSUAL_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),
1846UNUSUAL_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),
1851UNUSUAL_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),
1856UNUSUAL_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),
1861UNUSUAL_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),
1866UNUSUAL_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),
1871UNUSUAL_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),
1876UNUSUAL_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),
1881UNUSUAL_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),
1886UNUSUAL_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),
1891UNUSUAL_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),
1896UNUSUAL_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),
1901UNUSUAL_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),
1906UNUSUAL_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),
1911UNUSUAL_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),
1916UNUSUAL_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),
1921UNUSUAL_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),
1926UNUSUAL_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),
1931UNUSUAL_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),
1936UNUSUAL_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),
1941UNUSUAL_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),
1946UNUSUAL_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),
1951UNUSUAL_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),
1956UNUSUAL_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. */
1986UNUSUAL_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 */
1750UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x0201, 1994UNUSUAL_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 */
2068UNUSUAL_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> */
1822UNUSUAL_DEV( 0x4102, 0x1020, 0x0100, 0x0100, 2075UNUSUAL_DEV( 0x4102, 0x1020, 0x0100, 0x0100,
1823 "iRiver", 2076 "iRiver",