diff options
| -rw-r--r-- | drivers/usb/core/quirks.c | 8 | ||||
| -rw-r--r-- | drivers/usb/musb/musb_core.h | 17 | ||||
| -rw-r--r-- | drivers/usb/musb/omap2430.c | 1 | ||||
| -rw-r--r-- | drivers/usb/serial/sierra.c | 3 | ||||
| -rw-r--r-- | drivers/usb/serial/usb_wwan.c | 15 | ||||
| -rw-r--r-- | drivers/usb/serial/visor.c | 12 |
6 files changed, 42 insertions, 14 deletions
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index 44c595432d6f..81ce6a8e1d94 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c | |||
| @@ -48,6 +48,10 @@ static const struct usb_device_id usb_quirk_list[] = { | |||
| 48 | { USB_DEVICE(0x04b4, 0x0526), .driver_info = | 48 | { USB_DEVICE(0x04b4, 0x0526), .driver_info = |
| 49 | USB_QUIRK_CONFIG_INTF_STRINGS }, | 49 | USB_QUIRK_CONFIG_INTF_STRINGS }, |
| 50 | 50 | ||
| 51 | /* Samsung Android phone modem - ID conflict with SPH-I500 */ | ||
| 52 | { USB_DEVICE(0x04e8, 0x6601), .driver_info = | ||
| 53 | USB_QUIRK_CONFIG_INTF_STRINGS }, | ||
| 54 | |||
| 51 | /* Roland SC-8820 */ | 55 | /* Roland SC-8820 */ |
| 52 | { USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME }, | 56 | { USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 53 | 57 | ||
| @@ -68,6 +72,10 @@ static const struct usb_device_id usb_quirk_list[] = { | |||
| 68 | /* M-Systems Flash Disk Pioneers */ | 72 | /* M-Systems Flash Disk Pioneers */ |
| 69 | { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, | 73 | { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 70 | 74 | ||
| 75 | /* Keytouch QWERTY Panel keyboard */ | ||
| 76 | { USB_DEVICE(0x0926, 0x3333), .driver_info = | ||
| 77 | USB_QUIRK_CONFIG_INTF_STRINGS }, | ||
| 78 | |||
| 71 | /* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */ | 79 | /* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */ |
| 72 | { USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF }, | 80 | { USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF }, |
| 73 | 81 | ||
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index d74a8113ae74..e6400be8a0f8 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h | |||
| @@ -488,6 +488,15 @@ struct musb { | |||
| 488 | unsigned set_address:1; | 488 | unsigned set_address:1; |
| 489 | unsigned test_mode:1; | 489 | unsigned test_mode:1; |
| 490 | unsigned softconnect:1; | 490 | unsigned softconnect:1; |
| 491 | |||
| 492 | u8 address; | ||
| 493 | u8 test_mode_nr; | ||
| 494 | u16 ackpend; /* ep0 */ | ||
| 495 | enum musb_g_ep0_state ep0_state; | ||
| 496 | struct usb_gadget g; /* the gadget */ | ||
| 497 | struct usb_gadget_driver *gadget_driver; /* its driver */ | ||
| 498 | #endif | ||
| 499 | |||
| 491 | /* | 500 | /* |
| 492 | * FIXME: Remove this flag. | 501 | * FIXME: Remove this flag. |
| 493 | * | 502 | * |
| @@ -501,14 +510,6 @@ struct musb { | |||
| 501 | */ | 510 | */ |
| 502 | unsigned double_buffer_not_ok:1 __deprecated; | 511 | unsigned double_buffer_not_ok:1 __deprecated; |
| 503 | 512 | ||
| 504 | u8 address; | ||
| 505 | u8 test_mode_nr; | ||
| 506 | u16 ackpend; /* ep0 */ | ||
| 507 | enum musb_g_ep0_state ep0_state; | ||
| 508 | struct usb_gadget g; /* the gadget */ | ||
| 509 | struct usb_gadget_driver *gadget_driver; /* its driver */ | ||
| 510 | #endif | ||
| 511 | |||
| 512 | struct musb_hdrc_config *config; | 513 | struct musb_hdrc_config *config; |
| 513 | 514 | ||
| 514 | #ifdef MUSB_CONFIG_PROC_FS | 515 | #ifdef MUSB_CONFIG_PROC_FS |
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c index a3f12333fc41..bc8badd16897 100644 --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c | |||
| @@ -362,6 +362,7 @@ static int omap2430_musb_init(struct musb *musb) | |||
| 362 | 362 | ||
| 363 | static int omap2430_musb_exit(struct musb *musb) | 363 | static int omap2430_musb_exit(struct musb *musb) |
| 364 | { | 364 | { |
| 365 | del_timer_sync(&musb_idle_timer); | ||
| 365 | 366 | ||
| 366 | omap2430_low_level_exit(musb); | 367 | omap2430_low_level_exit(musb); |
| 367 | otg_put_transceiver(musb->xceiv); | 368 | otg_put_transceiver(musb->xceiv); |
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index 7481ff8a49e4..0457813eebee 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c | |||
| @@ -301,6 +301,9 @@ static const struct usb_device_id id_table[] = { | |||
| 301 | { USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless Direct IP modems */ | 301 | { USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless Direct IP modems */ |
| 302 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist | 302 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist |
| 303 | }, | 303 | }, |
| 304 | { USB_DEVICE(0x0f3d, 0x68A3), /* Airprime/Sierra Wireless Direct IP modems */ | ||
| 305 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist | ||
| 306 | }, | ||
| 304 | { USB_DEVICE(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */ | 307 | { USB_DEVICE(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */ |
| 305 | 308 | ||
| 306 | { } | 309 | { } |
diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c index b004b2a485c3..9c014e2ecd68 100644 --- a/drivers/usb/serial/usb_wwan.c +++ b/drivers/usb/serial/usb_wwan.c | |||
| @@ -295,12 +295,15 @@ static void usb_wwan_indat_callback(struct urb *urb) | |||
| 295 | __func__, status, endpoint); | 295 | __func__, status, endpoint); |
| 296 | } else { | 296 | } else { |
| 297 | tty = tty_port_tty_get(&port->port); | 297 | tty = tty_port_tty_get(&port->port); |
| 298 | if (urb->actual_length) { | 298 | if (tty) { |
| 299 | tty_insert_flip_string(tty, data, urb->actual_length); | 299 | if (urb->actual_length) { |
| 300 | tty_flip_buffer_push(tty); | 300 | tty_insert_flip_string(tty, data, |
| 301 | } else | 301 | urb->actual_length); |
| 302 | dbg("%s: empty read urb received", __func__); | 302 | tty_flip_buffer_push(tty); |
| 303 | tty_kref_put(tty); | 303 | } else |
| 304 | dbg("%s: empty read urb received", __func__); | ||
| 305 | tty_kref_put(tty); | ||
| 306 | } | ||
| 304 | 307 | ||
| 305 | /* Resubmit urb so we continue receiving */ | 308 | /* Resubmit urb so we continue receiving */ |
| 306 | if (status != -ESHUTDOWN) { | 309 | if (status != -ESHUTDOWN) { |
diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c index 15a5d89b7f39..1c11959a7d58 100644 --- a/drivers/usb/serial/visor.c +++ b/drivers/usb/serial/visor.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <linux/uaccess.h> | 27 | #include <linux/uaccess.h> |
| 28 | #include <linux/usb.h> | 28 | #include <linux/usb.h> |
| 29 | #include <linux/usb/serial.h> | 29 | #include <linux/usb/serial.h> |
| 30 | #include <linux/usb/cdc.h> | ||
| 30 | #include "visor.h" | 31 | #include "visor.h" |
| 31 | 32 | ||
| 32 | /* | 33 | /* |
| @@ -479,6 +480,17 @@ static int visor_probe(struct usb_serial *serial, | |||
| 479 | 480 | ||
| 480 | dbg("%s", __func__); | 481 | dbg("%s", __func__); |
| 481 | 482 | ||
| 483 | /* | ||
| 484 | * some Samsung Android phones in modem mode have the same ID | ||
| 485 | * as SPH-I500, but they are ACM devices, so dont bind to them | ||
| 486 | */ | ||
| 487 | if (id->idVendor == SAMSUNG_VENDOR_ID && | ||
| 488 | id->idProduct == SAMSUNG_SPH_I500_ID && | ||
| 489 | serial->dev->descriptor.bDeviceClass == USB_CLASS_COMM && | ||
| 490 | serial->dev->descriptor.bDeviceSubClass == | ||
| 491 | USB_CDC_SUBCLASS_ACM) | ||
| 492 | return -ENODEV; | ||
| 493 | |||
| 482 | if (serial->dev->actconfig->desc.bConfigurationValue != 1) { | 494 | if (serial->dev->actconfig->desc.bConfigurationValue != 1) { |
| 483 | dev_err(&serial->dev->dev, "active config #%d != 1 ??\n", | 495 | dev_err(&serial->dev->dev, "active config #%d != 1 ??\n", |
| 484 | serial->dev->actconfig->desc.bConfigurationValue); | 496 | serial->dev->actconfig->desc.bConfigurationValue); |
