aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2011-06-06 17:22:44 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-06-06 18:58:14 -0400
commit15badbcc8eede58b0d7e53a3acde1c90a7b6e40e (patch)
tree1ea554354240cf1dca726ce45b4656752ae793bd /drivers/usb
parentcdacb598fe7ab85de80908c818dd7d66a2971117 (diff)
option: add Alcatel X200 to sendsetup blacklist
This modem really wants sendsetup blacklisted for interfaces 0 and 1, otherwise the kernel hardlocks for about 10 seconds while waiting for the modem's firmware to respond, which it of course doesn't do. A slight complication here is that TCT (who owns the Alcatel brand) used the same USB IDs for the X200 as the X060s despite the devices having completely different firmware and AT command sets, so we end up adding the X060s to the blacklist at the same time. PSA to OEMs: don't use the same USB IDs for different devices. Really. It makes your kittens cry. Signed-off-by: Dan Williams <dcbw@redhat.com> Cc: stable@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/serial/option.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index e39e7e8ba53a..c7cca3f24c9d 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -344,7 +344,7 @@ static void option_instat_callback(struct urb *urb);
344 344
345/* ALCATEL PRODUCTS */ 345/* ALCATEL PRODUCTS */
346#define ALCATEL_VENDOR_ID 0x1bbb 346#define ALCATEL_VENDOR_ID 0x1bbb
347#define ALCATEL_PRODUCT_X060S 0x0000 347#define ALCATEL_PRODUCT_X060S_X200 0x0000
348 348
349#define PIRELLI_VENDOR_ID 0x1266 349#define PIRELLI_VENDOR_ID 0x1266
350#define PIRELLI_PRODUCT_C100_1 0x1002 350#define PIRELLI_PRODUCT_C100_1 0x1002
@@ -435,6 +435,13 @@ static const struct option_blacklist_info four_g_w14_blacklist = {
435 .reason = OPTION_BLACKLIST_SENDSETUP 435 .reason = OPTION_BLACKLIST_SENDSETUP
436}; 436};
437 437
438static const u8 alcatel_x200_no_sendsetup[] = { 0, 1 };
439static const struct option_blacklist_info alcatel_x200_blacklist = {
440 .infolen = ARRAY_SIZE(alcatel_x200_no_sendsetup),
441 .ifaceinfo = alcatel_x200_no_sendsetup,
442 .reason = OPTION_BLACKLIST_SENDSETUP
443};
444
438static const struct usb_device_id option_ids[] = { 445static const struct usb_device_id option_ids[] = {
439 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, 446 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
440 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) }, 447 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
@@ -939,7 +946,9 @@ static const struct usb_device_id option_ids[] = {
939 { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_HSDPA_MINICARD ) }, /* Toshiba 3G HSDPA == Novatel Expedite EU870D MiniCard */ 946 { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_HSDPA_MINICARD ) }, /* Toshiba 3G HSDPA == Novatel Expedite EU870D MiniCard */
940 { USB_DEVICE(ALINK_VENDOR_ID, 0x9000) }, 947 { USB_DEVICE(ALINK_VENDOR_ID, 0x9000) },
941 { USB_DEVICE_AND_INTERFACE_INFO(ALINK_VENDOR_ID, ALINK_PRODUCT_3GU, 0xff, 0xff, 0xff) }, 948 { USB_DEVICE_AND_INTERFACE_INFO(ALINK_VENDOR_ID, ALINK_PRODUCT_3GU, 0xff, 0xff, 0xff) },
942 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S) }, 949 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200),
950 .driver_info = (kernel_ulong_t)&alcatel_x200_blacklist
951 },
943 { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) }, 952 { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) },
944 { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) }, 953 { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) },
945 { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14), 954 { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14),