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) */ |
