diff options
author | Bjørn Mork <bjorn@mork.no> | 2013-03-04 08:19:21 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-03-06 23:23:17 -0500 |
commit | ab4b71644a26d1ab92b987b2fd30e17c25e89f85 (patch) | |
tree | d262332166a26363ab1fdbfb1402b42f50bf6ecb | |
parent | fbb8c745ec20fd9e6ba9af56dabab987c765263c (diff) |
USB: storage: fix Huawei mode switching regression
This reverts commit 200e0d99 ("USB: storage: optimize to match the
Huawei USB storage devices and support new switch command" and the
followup bugfix commit cd060956 ("USB: storage: properly handle
the endian issues of idProduct").
The commit effectively added a large number of Huawei devices to
the deprecated usb-storage mode switching logic. Many of these
devices have been in use and supported by the userspace
usb_modeswitch utility for years. Forcing the switching inside
the kernel causes a number of regressions as a result of ignoring
existing onfigurations, and also completely takes away the ability
to configure mode switching per device/system/user.
Known regressions caused by this:
- Some of the devices support multiple modes, using different
switching commands. There are existing configurations taking
advantage of this.
- There is a real use case for disabling mode switching and
instead mounting the exposed storage device. This becomes
impossible with switching logic inside the usb-storage driver.
- At least on device fail as a result of the usb-storage switching
command, becoming completely unswitchable. This is possibly a
firmware bug, but still a regression because the device work as
expected using usb_modeswitch defaults.
In-kernel mode switching was deprecated years ago with the
development of the more user friendly userspace alternatives. The
existing list of devices in usb-storage was only kept to prevent
breaking already working systems. The long term plan is to remove
the list, not to add to it. Ref:
http://permalink.gmane.org/gmane.linux.usb.general/28543
Cc: <fangxiaozhi@huawei.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/usb/storage/initializers.c | 76 | ||||
-rw-r--r-- | drivers/usb/storage/initializers.h | 4 | ||||
-rw-r--r-- | drivers/usb/storage/unusual_devs.h | 329 |
3 files changed, 331 insertions, 78 deletions
diff --git a/drivers/usb/storage/initializers.c b/drivers/usb/storage/initializers.c index 7ab9046ae0ec..105d900150c1 100644 --- a/drivers/usb/storage/initializers.c +++ b/drivers/usb/storage/initializers.c | |||
@@ -92,8 +92,8 @@ int usb_stor_ucr61s2b_init(struct us_data *us) | |||
92 | return 0; | 92 | return 0; |
93 | } | 93 | } |
94 | 94 | ||
95 | /* This places the HUAWEI usb dongles in multi-port mode */ | 95 | /* This places the HUAWEI E220 devices in multi-port mode */ |
96 | static int usb_stor_huawei_feature_init(struct us_data *us) | 96 | int usb_stor_huawei_e220_init(struct us_data *us) |
97 | { | 97 | { |
98 | int result; | 98 | int result; |
99 | 99 | ||
@@ -104,75 +104,3 @@ static int usb_stor_huawei_feature_init(struct us_data *us) | |||
104 | US_DEBUGP("Huawei mode set result is %d\n", result); | 104 | US_DEBUGP("Huawei mode set result is %d\n", result); |
105 | return 0; | 105 | return 0; |
106 | } | 106 | } |
107 | |||
108 | /* | ||
109 | * It will send a scsi switch command called rewind' to huawei dongle. | ||
110 | * When the dongle receives this command at the first time, | ||
111 | * it will reboot immediately. After rebooted, it will ignore this command. | ||
112 | * So it is unnecessary to read its response. | ||
113 | */ | ||
114 | static int usb_stor_huawei_scsi_init(struct us_data *us) | ||
115 | { | ||
116 | int result = 0; | ||
117 | int act_len = 0; | ||
118 | struct bulk_cb_wrap *bcbw = (struct bulk_cb_wrap *) us->iobuf; | ||
119 | char rewind_cmd[] = {0x11, 0x06, 0x20, 0x00, 0x00, 0x01, 0x01, 0x00, | ||
120 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; | ||
121 | |||
122 | bcbw->Signature = cpu_to_le32(US_BULK_CB_SIGN); | ||
123 | bcbw->Tag = 0; | ||
124 | bcbw->DataTransferLength = 0; | ||
125 | bcbw->Flags = bcbw->Lun = 0; | ||
126 | bcbw->Length = sizeof(rewind_cmd); | ||
127 | memset(bcbw->CDB, 0, sizeof(bcbw->CDB)); | ||
128 | memcpy(bcbw->CDB, rewind_cmd, sizeof(rewind_cmd)); | ||
129 | |||
130 | result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, bcbw, | ||
131 | US_BULK_CB_WRAP_LEN, &act_len); | ||
132 | US_DEBUGP("transfer actual length=%d, result=%d\n", act_len, result); | ||
133 | return result; | ||
134 | } | ||
135 | |||
136 | /* | ||
137 | * It tries to find the supported Huawei USB dongles. | ||
138 | * In Huawei, they assign the following product IDs | ||
139 | * for all of their mobile broadband dongles, | ||
140 | * including the new dongles in the future. | ||
141 | * So if the product ID is not included in this list, | ||
142 | * it means it is not Huawei's mobile broadband dongles. | ||
143 | */ | ||
144 | static int usb_stor_huawei_dongles_pid(struct us_data *us) | ||
145 | { | ||
146 | struct usb_interface_descriptor *idesc; | ||
147 | int idProduct; | ||
148 | |||
149 | idesc = &us->pusb_intf->cur_altsetting->desc; | ||
150 | idProduct = le16_to_cpu(us->pusb_dev->descriptor.idProduct); | ||
151 | /* The first port is CDROM, | ||
152 | * means the dongle in the single port mode, | ||
153 | * and a switch command is required to be sent. */ | ||
154 | if (idesc && idesc->bInterfaceNumber == 0) { | ||
155 | if ((idProduct == 0x1001) | ||
156 | || (idProduct == 0x1003) | ||
157 | || (idProduct == 0x1004) | ||
158 | || (idProduct >= 0x1401 && idProduct <= 0x1500) | ||
159 | || (idProduct >= 0x1505 && idProduct <= 0x1600) | ||
160 | || (idProduct >= 0x1c02 && idProduct <= 0x2202)) { | ||
161 | return 1; | ||
162 | } | ||
163 | } | ||
164 | return 0; | ||
165 | } | ||
166 | |||
167 | int usb_stor_huawei_init(struct us_data *us) | ||
168 | { | ||
169 | int result = 0; | ||
170 | |||
171 | if (usb_stor_huawei_dongles_pid(us)) { | ||
172 | if (le16_to_cpu(us->pusb_dev->descriptor.idProduct) >= 0x1446) | ||
173 | result = usb_stor_huawei_scsi_init(us); | ||
174 | else | ||
175 | result = usb_stor_huawei_feature_init(us); | ||
176 | } | ||
177 | return result; | ||
178 | } | ||
diff --git a/drivers/usb/storage/initializers.h b/drivers/usb/storage/initializers.h index 5376d4fc76f0..529327fbb06b 100644 --- a/drivers/usb/storage/initializers.h +++ b/drivers/usb/storage/initializers.h | |||
@@ -46,5 +46,5 @@ int usb_stor_euscsi_init(struct us_data *us); | |||
46 | * flash reader */ | 46 | * flash reader */ |
47 | int usb_stor_ucr61s2b_init(struct us_data *us); | 47 | int usb_stor_ucr61s2b_init(struct us_data *us); |
48 | 48 | ||
49 | /* This places the HUAWEI usb dongles in multi-port mode */ | 49 | /* This places the HUAWEI E220 devices in multi-port mode */ |
50 | int usb_stor_huawei_init(struct us_data *us); | 50 | int usb_stor_huawei_e220_init(struct us_data *us); |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 731c1d75716d..da04a074e790 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
@@ -1535,10 +1535,335 @@ UNUSUAL_DEV( 0x1210, 0x0003, 0x0100, 0x0100, | |||
1535 | /* Reported by fangxiaozhi <huananhu@huawei.com> | 1535 | /* Reported by fangxiaozhi <huananhu@huawei.com> |
1536 | * This brings the HUAWEI data card devices into multi-port mode | 1536 | * This brings the HUAWEI data card devices into multi-port mode |
1537 | */ | 1537 | */ |
1538 | UNUSUAL_VENDOR_INTF(0x12d1, 0x08, 0x06, 0x50, | 1538 | UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000, |
1539 | "HUAWEI MOBILE", | 1539 | "HUAWEI MOBILE", |
1540 | "Mass Storage", | 1540 | "Mass Storage", |
1541 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_init, | 1541 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, |
1542 | 0), | ||
1543 | UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000, | ||
1544 | "HUAWEI MOBILE", | ||
1545 | "Mass Storage", | ||
1546 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1547 | 0), | ||
1548 | UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000, | ||
1549 | "HUAWEI MOBILE", | ||
1550 | "Mass Storage", | ||
1551 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1552 | 0), | ||
1553 | UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000, | ||
1554 | "HUAWEI MOBILE", | ||
1555 | "Mass Storage", | ||
1556 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1557 | 0), | ||
1558 | UNUSUAL_DEV( 0x12d1, 0x1402, 0x0000, 0x0000, | ||
1559 | "HUAWEI MOBILE", | ||
1560 | "Mass Storage", | ||
1561 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1562 | 0), | ||
1563 | UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000, | ||
1564 | "HUAWEI MOBILE", | ||
1565 | "Mass Storage", | ||
1566 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1567 | 0), | ||
1568 | UNUSUAL_DEV( 0x12d1, 0x1404, 0x0000, 0x0000, | ||
1569 | "HUAWEI MOBILE", | ||
1570 | "Mass Storage", | ||
1571 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1572 | 0), | ||
1573 | UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000, | ||
1574 | "HUAWEI MOBILE", | ||
1575 | "Mass Storage", | ||
1576 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1577 | 0), | ||
1578 | UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000, | ||
1579 | "HUAWEI MOBILE", | ||
1580 | "Mass Storage", | ||
1581 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1582 | 0), | ||
1583 | UNUSUAL_DEV( 0x12d1, 0x1407, 0x0000, 0x0000, | ||
1584 | "HUAWEI MOBILE", | ||
1585 | "Mass Storage", | ||
1586 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1587 | 0), | ||
1588 | UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000, | ||
1589 | "HUAWEI MOBILE", | ||
1590 | "Mass Storage", | ||
1591 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1592 | 0), | ||
1593 | UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000, | ||
1594 | "HUAWEI MOBILE", | ||
1595 | "Mass Storage", | ||
1596 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1597 | 0), | ||
1598 | UNUSUAL_DEV( 0x12d1, 0x140A, 0x0000, 0x0000, | ||
1599 | "HUAWEI MOBILE", | ||
1600 | "Mass Storage", | ||
1601 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1602 | 0), | ||
1603 | UNUSUAL_DEV( 0x12d1, 0x140B, 0x0000, 0x0000, | ||
1604 | "HUAWEI MOBILE", | ||
1605 | "Mass Storage", | ||
1606 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1607 | 0), | ||
1608 | UNUSUAL_DEV( 0x12d1, 0x140C, 0x0000, 0x0000, | ||
1609 | "HUAWEI MOBILE", | ||
1610 | "Mass Storage", | ||
1611 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1612 | 0), | ||
1613 | UNUSUAL_DEV( 0x12d1, 0x140D, 0x0000, 0x0000, | ||
1614 | "HUAWEI MOBILE", | ||
1615 | "Mass Storage", | ||
1616 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1617 | 0), | ||
1618 | UNUSUAL_DEV( 0x12d1, 0x140E, 0x0000, 0x0000, | ||
1619 | "HUAWEI MOBILE", | ||
1620 | "Mass Storage", | ||
1621 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1622 | 0), | ||
1623 | UNUSUAL_DEV( 0x12d1, 0x140F, 0x0000, 0x0000, | ||
1624 | "HUAWEI MOBILE", | ||
1625 | "Mass Storage", | ||
1626 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1627 | 0), | ||
1628 | UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000, | ||
1629 | "HUAWEI MOBILE", | ||
1630 | "Mass Storage", | ||
1631 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1632 | 0), | ||
1633 | UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000, | ||
1634 | "HUAWEI MOBILE", | ||
1635 | "Mass Storage", | ||
1636 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1637 | 0), | ||
1638 | UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000, | ||
1639 | "HUAWEI MOBILE", | ||
1640 | "Mass Storage", | ||
1641 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1642 | 0), | ||
1643 | UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000, | ||
1644 | "HUAWEI MOBILE", | ||
1645 | "Mass Storage", | ||
1646 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1647 | 0), | ||
1648 | UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000, | ||
1649 | "HUAWEI MOBILE", | ||
1650 | "Mass Storage", | ||
1651 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1652 | 0), | ||
1653 | UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000, | ||
1654 | "HUAWEI MOBILE", | ||
1655 | "Mass Storage", | ||
1656 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1657 | 0), | ||
1658 | UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000, | ||
1659 | "HUAWEI MOBILE", | ||
1660 | "Mass Storage", | ||
1661 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1662 | 0), | ||
1663 | UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000, | ||
1664 | "HUAWEI MOBILE", | ||
1665 | "Mass Storage", | ||
1666 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1667 | 0), | ||
1668 | UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000, | ||
1669 | "HUAWEI MOBILE", | ||
1670 | "Mass Storage", | ||
1671 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1672 | 0), | ||
1673 | UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000, | ||
1674 | "HUAWEI MOBILE", | ||
1675 | "Mass Storage", | ||
1676 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1677 | 0), | ||
1678 | UNUSUAL_DEV( 0x12d1, 0x141A, 0x0000, 0x0000, | ||
1679 | "HUAWEI MOBILE", | ||
1680 | "Mass Storage", | ||
1681 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1682 | 0), | ||
1683 | UNUSUAL_DEV( 0x12d1, 0x141B, 0x0000, 0x0000, | ||
1684 | "HUAWEI MOBILE", | ||
1685 | "Mass Storage", | ||
1686 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1687 | 0), | ||
1688 | UNUSUAL_DEV( 0x12d1, 0x141C, 0x0000, 0x0000, | ||
1689 | "HUAWEI MOBILE", | ||
1690 | "Mass Storage", | ||
1691 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1692 | 0), | ||
1693 | UNUSUAL_DEV( 0x12d1, 0x141D, 0x0000, 0x0000, | ||
1694 | "HUAWEI MOBILE", | ||
1695 | "Mass Storage", | ||
1696 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1697 | 0), | ||
1698 | UNUSUAL_DEV( 0x12d1, 0x141E, 0x0000, 0x0000, | ||
1699 | "HUAWEI MOBILE", | ||
1700 | "Mass Storage", | ||
1701 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1702 | 0), | ||
1703 | UNUSUAL_DEV( 0x12d1, 0x141F, 0x0000, 0x0000, | ||
1704 | "HUAWEI MOBILE", | ||
1705 | "Mass Storage", | ||
1706 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1707 | 0), | ||
1708 | UNUSUAL_DEV( 0x12d1, 0x1420, 0x0000, 0x0000, | ||
1709 | "HUAWEI MOBILE", | ||
1710 | "Mass Storage", | ||
1711 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1712 | 0), | ||
1713 | UNUSUAL_DEV( 0x12d1, 0x1421, 0x0000, 0x0000, | ||
1714 | "HUAWEI MOBILE", | ||
1715 | "Mass Storage", | ||
1716 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1717 | 0), | ||
1718 | UNUSUAL_DEV( 0x12d1, 0x1422, 0x0000, 0x0000, | ||
1719 | "HUAWEI MOBILE", | ||
1720 | "Mass Storage", | ||
1721 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1722 | 0), | ||
1723 | UNUSUAL_DEV( 0x12d1, 0x1423, 0x0000, 0x0000, | ||
1724 | "HUAWEI MOBILE", | ||
1725 | "Mass Storage", | ||
1726 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1727 | 0), | ||
1728 | UNUSUAL_DEV( 0x12d1, 0x1424, 0x0000, 0x0000, | ||
1729 | "HUAWEI MOBILE", | ||
1730 | "Mass Storage", | ||
1731 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1732 | 0), | ||
1733 | UNUSUAL_DEV( 0x12d1, 0x1425, 0x0000, 0x0000, | ||
1734 | "HUAWEI MOBILE", | ||
1735 | "Mass Storage", | ||
1736 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1737 | 0), | ||
1738 | UNUSUAL_DEV( 0x12d1, 0x1426, 0x0000, 0x0000, | ||
1739 | "HUAWEI MOBILE", | ||
1740 | "Mass Storage", | ||
1741 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1742 | 0), | ||
1743 | UNUSUAL_DEV( 0x12d1, 0x1427, 0x0000, 0x0000, | ||
1744 | "HUAWEI MOBILE", | ||
1745 | "Mass Storage", | ||
1746 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1747 | 0), | ||
1748 | UNUSUAL_DEV( 0x12d1, 0x1428, 0x0000, 0x0000, | ||
1749 | "HUAWEI MOBILE", | ||
1750 | "Mass Storage", | ||
1751 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1752 | 0), | ||
1753 | UNUSUAL_DEV( 0x12d1, 0x1429, 0x0000, 0x0000, | ||
1754 | "HUAWEI MOBILE", | ||
1755 | "Mass Storage", | ||
1756 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1757 | 0), | ||
1758 | UNUSUAL_DEV( 0x12d1, 0x142A, 0x0000, 0x0000, | ||
1759 | "HUAWEI MOBILE", | ||
1760 | "Mass Storage", | ||
1761 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1762 | 0), | ||
1763 | UNUSUAL_DEV( 0x12d1, 0x142B, 0x0000, 0x0000, | ||
1764 | "HUAWEI MOBILE", | ||
1765 | "Mass Storage", | ||
1766 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1767 | 0), | ||
1768 | UNUSUAL_DEV( 0x12d1, 0x142C, 0x0000, 0x0000, | ||
1769 | "HUAWEI MOBILE", | ||
1770 | "Mass Storage", | ||
1771 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1772 | 0), | ||
1773 | UNUSUAL_DEV( 0x12d1, 0x142D, 0x0000, 0x0000, | ||
1774 | "HUAWEI MOBILE", | ||
1775 | "Mass Storage", | ||
1776 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1777 | 0), | ||
1778 | UNUSUAL_DEV( 0x12d1, 0x142E, 0x0000, 0x0000, | ||
1779 | "HUAWEI MOBILE", | ||
1780 | "Mass Storage", | ||
1781 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1782 | 0), | ||
1783 | UNUSUAL_DEV( 0x12d1, 0x142F, 0x0000, 0x0000, | ||
1784 | "HUAWEI MOBILE", | ||
1785 | "Mass Storage", | ||
1786 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1787 | 0), | ||
1788 | UNUSUAL_DEV( 0x12d1, 0x1430, 0x0000, 0x0000, | ||
1789 | "HUAWEI MOBILE", | ||
1790 | "Mass Storage", | ||
1791 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1792 | 0), | ||
1793 | UNUSUAL_DEV( 0x12d1, 0x1431, 0x0000, 0x0000, | ||
1794 | "HUAWEI MOBILE", | ||
1795 | "Mass Storage", | ||
1796 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1797 | 0), | ||
1798 | UNUSUAL_DEV( 0x12d1, 0x1432, 0x0000, 0x0000, | ||
1799 | "HUAWEI MOBILE", | ||
1800 | "Mass Storage", | ||
1801 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1802 | 0), | ||
1803 | UNUSUAL_DEV( 0x12d1, 0x1433, 0x0000, 0x0000, | ||
1804 | "HUAWEI MOBILE", | ||
1805 | "Mass Storage", | ||
1806 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1807 | 0), | ||
1808 | UNUSUAL_DEV( 0x12d1, 0x1434, 0x0000, 0x0000, | ||
1809 | "HUAWEI MOBILE", | ||
1810 | "Mass Storage", | ||
1811 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1812 | 0), | ||
1813 | UNUSUAL_DEV( 0x12d1, 0x1435, 0x0000, 0x0000, | ||
1814 | "HUAWEI MOBILE", | ||
1815 | "Mass Storage", | ||
1816 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1817 | 0), | ||
1818 | UNUSUAL_DEV( 0x12d1, 0x1436, 0x0000, 0x0000, | ||
1819 | "HUAWEI MOBILE", | ||
1820 | "Mass Storage", | ||
1821 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1822 | 0), | ||
1823 | UNUSUAL_DEV( 0x12d1, 0x1437, 0x0000, 0x0000, | ||
1824 | "HUAWEI MOBILE", | ||
1825 | "Mass Storage", | ||
1826 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1827 | 0), | ||
1828 | UNUSUAL_DEV( 0x12d1, 0x1438, 0x0000, 0x0000, | ||
1829 | "HUAWEI MOBILE", | ||
1830 | "Mass Storage", | ||
1831 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1832 | 0), | ||
1833 | UNUSUAL_DEV( 0x12d1, 0x1439, 0x0000, 0x0000, | ||
1834 | "HUAWEI MOBILE", | ||
1835 | "Mass Storage", | ||
1836 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1837 | 0), | ||
1838 | UNUSUAL_DEV( 0x12d1, 0x143A, 0x0000, 0x0000, | ||
1839 | "HUAWEI MOBILE", | ||
1840 | "Mass Storage", | ||
1841 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1842 | 0), | ||
1843 | UNUSUAL_DEV( 0x12d1, 0x143B, 0x0000, 0x0000, | ||
1844 | "HUAWEI MOBILE", | ||
1845 | "Mass Storage", | ||
1846 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1847 | 0), | ||
1848 | UNUSUAL_DEV( 0x12d1, 0x143C, 0x0000, 0x0000, | ||
1849 | "HUAWEI MOBILE", | ||
1850 | "Mass Storage", | ||
1851 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1852 | 0), | ||
1853 | UNUSUAL_DEV( 0x12d1, 0x143D, 0x0000, 0x0000, | ||
1854 | "HUAWEI MOBILE", | ||
1855 | "Mass Storage", | ||
1856 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1857 | 0), | ||
1858 | UNUSUAL_DEV( 0x12d1, 0x143E, 0x0000, 0x0000, | ||
1859 | "HUAWEI MOBILE", | ||
1860 | "Mass Storage", | ||
1861 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1862 | 0), | ||
1863 | UNUSUAL_DEV( 0x12d1, 0x143F, 0x0000, 0x0000, | ||
1864 | "HUAWEI MOBILE", | ||
1865 | "Mass Storage", | ||
1866 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, | ||
1542 | 0), | 1867 | 0), |
1543 | 1868 | ||
1544 | /* Reported by Vilius Bilinkevicius <vilisas AT xxx DOT lt) */ | 1869 | /* Reported by Vilius Bilinkevicius <vilisas AT xxx DOT lt) */ |