Commit c6ad1217 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'usb-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6

* 'usb-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6:
  Revert "USB: Reset USB 3.0 devices on (re)discovery"
  USB: musb: omap2430: fix kernel panic on reboot
  sierra: add new ID for Airprime/Sierra USB IP modem
  USB: serial/usb_wwan, fix tty NULL dereference
  USB: Reset USB 3.0 devices on (re)discovery
  USB: Add quirk for Samsung Android phone modem
  USB: Add Samsung SGH-I500/Android modem ID switch to visor driver
  USB: add quirks entry for Keytouch QWERTY Panel
  usb: musb: omap2430: fix kernel panic on reboot
  usb: musb: fix build breakage
parents d8204a37 9ce4f80f
...@@ -48,6 +48,10 @@ static const struct usb_device_id usb_quirk_list[] = { ...@@ -48,6 +48,10 @@ static const struct usb_device_id usb_quirk_list[] = {
{ USB_DEVICE(0x04b4, 0x0526), .driver_info = { USB_DEVICE(0x04b4, 0x0526), .driver_info =
USB_QUIRK_CONFIG_INTF_STRINGS }, USB_QUIRK_CONFIG_INTF_STRINGS },
/* Samsung Android phone modem - ID conflict with SPH-I500 */
{ USB_DEVICE(0x04e8, 0x6601), .driver_info =
USB_QUIRK_CONFIG_INTF_STRINGS },
/* Roland SC-8820 */ /* Roland SC-8820 */
{ USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME }, { USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME },
...@@ -68,6 +72,10 @@ static const struct usb_device_id usb_quirk_list[] = { ...@@ -68,6 +72,10 @@ static const struct usb_device_id usb_quirk_list[] = {
/* M-Systems Flash Disk Pioneers */ /* M-Systems Flash Disk Pioneers */
{ USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
/* Keytouch QWERTY Panel keyboard */
{ USB_DEVICE(0x0926, 0x3333), .driver_info =
USB_QUIRK_CONFIG_INTF_STRINGS },
/* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */ /* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */
{ USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF }, { USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF },
......
...@@ -488,6 +488,15 @@ struct musb { ...@@ -488,6 +488,15 @@ struct musb {
unsigned set_address:1; unsigned set_address:1;
unsigned test_mode:1; unsigned test_mode:1;
unsigned softconnect:1; unsigned softconnect:1;
u8 address;
u8 test_mode_nr;
u16 ackpend; /* ep0 */
enum musb_g_ep0_state ep0_state;
struct usb_gadget g; /* the gadget */
struct usb_gadget_driver *gadget_driver; /* its driver */
#endif
/* /*
* FIXME: Remove this flag. * FIXME: Remove this flag.
* *
...@@ -501,14 +510,6 @@ struct musb { ...@@ -501,14 +510,6 @@ struct musb {
*/ */
unsigned double_buffer_not_ok:1 __deprecated; unsigned double_buffer_not_ok:1 __deprecated;
u8 address;
u8 test_mode_nr;
u16 ackpend; /* ep0 */
enum musb_g_ep0_state ep0_state;
struct usb_gadget g; /* the gadget */
struct usb_gadget_driver *gadget_driver; /* its driver */
#endif
struct musb_hdrc_config *config; struct musb_hdrc_config *config;
#ifdef MUSB_CONFIG_PROC_FS #ifdef MUSB_CONFIG_PROC_FS
......
...@@ -362,6 +362,7 @@ static int omap2430_musb_init(struct musb *musb) ...@@ -362,6 +362,7 @@ static int omap2430_musb_init(struct musb *musb)
static int omap2430_musb_exit(struct musb *musb) static int omap2430_musb_exit(struct musb *musb)
{ {
del_timer_sync(&musb_idle_timer);
omap2430_low_level_exit(musb); omap2430_low_level_exit(musb);
otg_put_transceiver(musb->xceiv); otg_put_transceiver(musb->xceiv);
......
...@@ -301,6 +301,9 @@ static const struct usb_device_id id_table[] = { ...@@ -301,6 +301,9 @@ static const struct usb_device_id id_table[] = {
{ USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless Direct IP modems */ { USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless Direct IP modems */
.driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
}, },
{ USB_DEVICE(0x0f3d, 0x68A3), /* Airprime/Sierra Wireless Direct IP modems */
.driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
},
{ USB_DEVICE(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */ { USB_DEVICE(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */
{ } { }
......
...@@ -295,12 +295,15 @@ static void usb_wwan_indat_callback(struct urb *urb) ...@@ -295,12 +295,15 @@ static void usb_wwan_indat_callback(struct urb *urb)
__func__, status, endpoint); __func__, status, endpoint);
} else { } else {
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (urb->actual_length) { if (tty) {
tty_insert_flip_string(tty, data, urb->actual_length); if (urb->actual_length) {
tty_flip_buffer_push(tty); tty_insert_flip_string(tty, data,
} else urb->actual_length);
dbg("%s: empty read urb received", __func__); tty_flip_buffer_push(tty);
tty_kref_put(tty); } else
dbg("%s: empty read urb received", __func__);
tty_kref_put(tty);
}
/* Resubmit urb so we continue receiving */ /* Resubmit urb so we continue receiving */
if (status != -ESHUTDOWN) { if (status != -ESHUTDOWN) {
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/usb.h> #include <linux/usb.h>
#include <linux/usb/serial.h> #include <linux/usb/serial.h>
#include <linux/usb/cdc.h>
#include "visor.h" #include "visor.h"
/* /*
...@@ -479,6 +480,17 @@ static int visor_probe(struct usb_serial *serial, ...@@ -479,6 +480,17 @@ static int visor_probe(struct usb_serial *serial,
dbg("%s", __func__); dbg("%s", __func__);
/*
* some Samsung Android phones in modem mode have the same ID
* as SPH-I500, but they are ACM devices, so dont bind to them
*/
if (id->idVendor == SAMSUNG_VENDOR_ID &&
id->idProduct == SAMSUNG_SPH_I500_ID &&
serial->dev->descriptor.bDeviceClass == USB_CLASS_COMM &&
serial->dev->descriptor.bDeviceSubClass ==
USB_CDC_SUBCLASS_ACM)
return -ENODEV;
if (serial->dev->actconfig->desc.bConfigurationValue != 1) { if (serial->dev->actconfig->desc.bConfigurationValue != 1) {
dev_err(&serial->dev->dev, "active config #%d != 1 ??\n", dev_err(&serial->dev->dev, "active config #%d != 1 ??\n",
serial->dev->actconfig->desc.bConfigurationValue); serial->dev->actconfig->desc.bConfigurationValue);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment