提交 7e55f81e 编写于 作者: L Linus Torvalds

Merge tag 'usb-3.15-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb

Pull USB fixes from Greg KH:
 "Here are a number of tiny USB fixes and new device ids for 3.15-rc2.
  Nothing major, just issues some people have reported.

  All of these have been in linux-next"

* tag 'usb-3.15-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
  uas: fix deadlocky memory allocations
  uas: fix error handling during scsi_scan()
  uas: fix GFP_NOIO under spinlock
  uwb: adds missing error handling
  USB: cdc-acm: Remove Motorola/Telit H24 serial interfaces from ACM driver
  USB: ohci-jz4740: FEAT_POWER is a port feature, not a hub feature
  USB: ohci-jz4740: Fix uninitialized variable warning
  USB: EHCI: tegra: set txfill_tuning
  usb: ehci-platform: Return immediately from suspend if ehci_suspend fails
  usb: ehci-exynos: Return immediately from suspend if ehci_suspend fails
  USB: fix crash during hotplug of PCI USB controller card
  USB: cdc-acm: fix double usb_autopm_put_interface() in acm_port_activate()
  usb: usb-common: fix typo for usb_state_string
  USB: usb_wwan: fix handling of missing bulk endpoints
  USB: pl2303: add ids for Hewlett-Packard HP POS pole displays
  USB: cp210x: Add 8281 (Nanotec Plug & Drive)
  usb: option driver, add support for Telit UE910v2
  Revert "USB: serial: add usbid for dell wwan card to sierra.c"
  USB: serial: ftdi_sio: add id for Brainboxes serial cards
...@@ -518,13 +518,16 @@ static int acm_port_activate(struct tty_port *port, struct tty_struct *tty) ...@@ -518,13 +518,16 @@ static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) { if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
dev_err(&acm->control->dev, dev_err(&acm->control->dev,
"%s - usb_submit_urb(ctrl irq) failed\n", __func__); "%s - usb_submit_urb(ctrl irq) failed\n", __func__);
usb_autopm_put_interface(acm->control);
goto error_submit_urb; goto error_submit_urb;
} }
acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS; acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS;
if (acm_set_control(acm, acm->ctrlout) < 0 && if (acm_set_control(acm, acm->ctrlout) < 0 &&
(acm->ctrl_caps & USB_CDC_CAP_LINE)) (acm->ctrl_caps & USB_CDC_CAP_LINE)) {
usb_autopm_put_interface(acm->control);
goto error_set_control; goto error_set_control;
}
usb_autopm_put_interface(acm->control); usb_autopm_put_interface(acm->control);
...@@ -549,7 +552,6 @@ static int acm_port_activate(struct tty_port *port, struct tty_struct *tty) ...@@ -549,7 +552,6 @@ static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
error_set_control: error_set_control:
usb_kill_urb(acm->ctrlurb); usb_kill_urb(acm->ctrlurb);
error_submit_urb: error_submit_urb:
usb_autopm_put_interface(acm->control);
error_get_interface: error_get_interface:
disconnected: disconnected:
mutex_unlock(&acm->mutex); mutex_unlock(&acm->mutex);
...@@ -1652,13 +1654,27 @@ static const struct usb_device_id acm_ids[] = { ...@@ -1652,13 +1654,27 @@ static const struct usb_device_id acm_ids[] = {
}, },
/* Motorola H24 HSPA module: */ /* Motorola H24 HSPA module: */
{ USB_DEVICE(0x22b8, 0x2d91) }, /* modem */ { USB_DEVICE(0x22b8, 0x2d91) }, /* modem */
{ USB_DEVICE(0x22b8, 0x2d92) }, /* modem + diagnostics */ { USB_DEVICE(0x22b8, 0x2d92), /* modem + diagnostics */
{ USB_DEVICE(0x22b8, 0x2d93) }, /* modem + AT port */ .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
{ USB_DEVICE(0x22b8, 0x2d95) }, /* modem + AT port + diagnostics */ },
{ USB_DEVICE(0x22b8, 0x2d96) }, /* modem + NMEA */ { USB_DEVICE(0x22b8, 0x2d93), /* modem + AT port */
{ USB_DEVICE(0x22b8, 0x2d97) }, /* modem + diagnostics + NMEA */ .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
{ USB_DEVICE(0x22b8, 0x2d99) }, /* modem + AT port + NMEA */ },
{ USB_DEVICE(0x22b8, 0x2d9a) }, /* modem + AT port + diagnostics + NMEA */ { USB_DEVICE(0x22b8, 0x2d95), /* modem + AT port + diagnostics */
.driver_info = NO_UNION_NORMAL, /* handle only modem interface */
},
{ USB_DEVICE(0x22b8, 0x2d96), /* modem + NMEA */
.driver_info = NO_UNION_NORMAL, /* handle only modem interface */
},
{ USB_DEVICE(0x22b8, 0x2d97), /* modem + diagnostics + NMEA */
.driver_info = NO_UNION_NORMAL, /* handle only modem interface */
},
{ USB_DEVICE(0x22b8, 0x2d99), /* modem + AT port + NMEA */
.driver_info = NO_UNION_NORMAL, /* handle only modem interface */
},
{ USB_DEVICE(0x22b8, 0x2d9a), /* modem + AT port + diagnostics + NMEA */
.driver_info = NO_UNION_NORMAL, /* handle only modem interface */
},
{ USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */ { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
.driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
......
...@@ -75,7 +75,7 @@ static void for_each_companion(struct pci_dev *pdev, struct usb_hcd *hcd, ...@@ -75,7 +75,7 @@ static void for_each_companion(struct pci_dev *pdev, struct usb_hcd *hcd,
PCI_SLOT(companion->devfn) != slot) PCI_SLOT(companion->devfn) != slot)
continue; continue;
companion_hcd = pci_get_drvdata(companion); companion_hcd = pci_get_drvdata(companion);
if (!companion_hcd) if (!companion_hcd || !companion_hcd->self.root_hub)
continue; continue;
fn(pdev, hcd, companion, companion_hcd); fn(pdev, hcd, companion, companion_hcd);
} }
......
...@@ -212,6 +212,8 @@ static int exynos_ehci_suspend(struct device *dev) ...@@ -212,6 +212,8 @@ static int exynos_ehci_suspend(struct device *dev)
int rc; int rc;
rc = ehci_suspend(hcd, do_wakeup); rc = ehci_suspend(hcd, do_wakeup);
if (rc)
return rc;
if (exynos_ehci->otg) if (exynos_ehci->otg)
exynos_ehci->otg->set_host(exynos_ehci->otg, &hcd->self); exynos_ehci->otg->set_host(exynos_ehci->otg, &hcd->self);
......
...@@ -303,6 +303,8 @@ static int ehci_platform_suspend(struct device *dev) ...@@ -303,6 +303,8 @@ static int ehci_platform_suspend(struct device *dev)
int ret; int ret;
ret = ehci_suspend(hcd, do_wakeup); ret = ehci_suspend(hcd, do_wakeup);
if (ret)
return ret;
if (pdata->power_suspend) if (pdata->power_suspend)
pdata->power_suspend(pdev); pdata->power_suspend(pdev);
......
...@@ -509,8 +509,31 @@ static struct platform_driver tegra_ehci_driver = { ...@@ -509,8 +509,31 @@ static struct platform_driver tegra_ehci_driver = {
} }
}; };
static int tegra_ehci_reset(struct usb_hcd *hcd)
{
struct ehci_hcd *ehci = hcd_to_ehci(hcd);
int retval;
int txfifothresh;
retval = ehci_setup(hcd);
if (retval)
return retval;
/*
* We should really pull this value out of tegra_ehci_soc_config, but
* to avoid needing access to it, make use of the fact that Tegra20 is
* the only one so far that needs a value of 10, and Tegra20 is the
* only one which doesn't set has_hostpc.
*/
txfifothresh = ehci->has_hostpc ? 0x10 : 10;
ehci_writel(ehci, txfifothresh << 16, &ehci->regs->txfill_tuning);
return 0;
}
static const struct ehci_driver_overrides tegra_overrides __initconst = { static const struct ehci_driver_overrides tegra_overrides __initconst = {
.extra_priv_size = sizeof(struct tegra_ehci_hcd), .extra_priv_size = sizeof(struct tegra_ehci_hcd),
.reset = tegra_ehci_reset,
}; };
static int __init ehci_tegra_init(void) static int __init ehci_tegra_init(void)
......
...@@ -82,14 +82,14 @@ static int ohci_jz4740_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, ...@@ -82,14 +82,14 @@ static int ohci_jz4740_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
u16 wIndex, char *buf, u16 wLength) u16 wIndex, char *buf, u16 wLength)
{ {
struct jz4740_ohci_hcd *jz4740_ohci = hcd_to_jz4740_hcd(hcd); struct jz4740_ohci_hcd *jz4740_ohci = hcd_to_jz4740_hcd(hcd);
int ret; int ret = 0;
switch (typeReq) { switch (typeReq) {
case SetHubFeature: case SetPortFeature:
if (wValue == USB_PORT_FEAT_POWER) if (wValue == USB_PORT_FEAT_POWER)
ret = ohci_jz4740_set_vbus_power(jz4740_ohci, true); ret = ohci_jz4740_set_vbus_power(jz4740_ohci, true);
break; break;
case ClearHubFeature: case ClearPortFeature:
if (wValue == USB_PORT_FEAT_POWER) if (wValue == USB_PORT_FEAT_POWER)
ret = ohci_jz4740_set_vbus_power(jz4740_ohci, false); ret = ohci_jz4740_set_vbus_power(jz4740_ohci, false);
break; break;
......
...@@ -104,6 +104,7 @@ static const struct usb_device_id id_table[] = { ...@@ -104,6 +104,7 @@ static const struct usb_device_id id_table[] = {
{ USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */
{ USB_DEVICE(0x10C4, 0x822B) }, /* Modem EDGE(GSM) Comander 2 */ { USB_DEVICE(0x10C4, 0x822B) }, /* Modem EDGE(GSM) Comander 2 */
{ USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */ { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */
{ USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */
{ USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */ { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */
{ USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */ { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */
{ USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */ { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */
......
...@@ -909,6 +909,39 @@ static const struct usb_device_id id_table_combined[] = { ...@@ -909,6 +909,39 @@ static const struct usb_device_id id_table_combined[] = {
{ USB_DEVICE(FTDI_VID, FTDI_Z3X_PID) }, { USB_DEVICE(FTDI_VID, FTDI_Z3X_PID) },
/* Cressi Devices */ /* Cressi Devices */
{ USB_DEVICE(FTDI_VID, FTDI_CRESSI_PID) }, { USB_DEVICE(FTDI_VID, FTDI_CRESSI_PID) },
/* Brainboxes Devices */
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_001_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_012_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_023_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_034_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_101_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_1_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_2_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_3_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_4_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_5_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_6_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_7_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_8_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_257_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_1_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_2_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_3_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_4_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_313_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_324_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_1_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_2_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_357_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_1_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_2_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_3_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_701_1_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_701_2_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_1_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_2_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_3_PID) },
{ USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_4_PID) },
{ } /* Terminating entry */ { } /* Terminating entry */
}; };
......
...@@ -1326,3 +1326,40 @@ ...@@ -1326,3 +1326,40 @@
* Manufacturer: Cressi * Manufacturer: Cressi
*/ */
#define FTDI_CRESSI_PID 0x87d0 #define FTDI_CRESSI_PID 0x87d0
/*
* Brainboxes devices
*/
#define BRAINBOXES_VID 0x05d1
#define BRAINBOXES_VX_001_PID 0x1001 /* VX-001 ExpressCard 1 Port RS232 */
#define BRAINBOXES_VX_012_PID 0x1002 /* VX-012 ExpressCard 2 Port RS232 */
#define BRAINBOXES_VX_023_PID 0x1003 /* VX-023 ExpressCard 1 Port RS422/485 */
#define BRAINBOXES_VX_034_PID 0x1004 /* VX-034 ExpressCard 2 Port RS422/485 */
#define BRAINBOXES_US_101_PID 0x1011 /* US-101 1xRS232 */
#define BRAINBOXES_US_324_PID 0x1013 /* US-324 1xRS422/485 1Mbaud */
#define BRAINBOXES_US_606_1_PID 0x2001 /* US-606 6 Port RS232 Serial Port 1 and 2 */
#define BRAINBOXES_US_606_2_PID 0x2002 /* US-606 6 Port RS232 Serial Port 3 and 4 */
#define BRAINBOXES_US_606_3_PID 0x2003 /* US-606 6 Port RS232 Serial Port 4 and 6 */
#define BRAINBOXES_US_701_1_PID 0x2011 /* US-701 4xRS232 1Mbaud Port 1 and 2 */
#define BRAINBOXES_US_701_2_PID 0x2012 /* US-701 4xRS422 1Mbaud Port 3 and 4 */
#define BRAINBOXES_US_279_1_PID 0x2021 /* US-279 8xRS422 1Mbaud Port 1 and 2 */
#define BRAINBOXES_US_279_2_PID 0x2022 /* US-279 8xRS422 1Mbaud Port 3 and 4 */
#define BRAINBOXES_US_279_3_PID 0x2023 /* US-279 8xRS422 1Mbaud Port 5 and 6 */
#define BRAINBOXES_US_279_4_PID 0x2024 /* US-279 8xRS422 1Mbaud Port 7 and 8 */
#define BRAINBOXES_US_346_1_PID 0x3011 /* US-346 4xRS422/485 1Mbaud Port 1 and 2 */
#define BRAINBOXES_US_346_2_PID 0x3012 /* US-346 4xRS422/485 1Mbaud Port 3 and 4 */
#define BRAINBOXES_US_257_PID 0x5001 /* US-257 2xRS232 1Mbaud */
#define BRAINBOXES_US_313_PID 0x6001 /* US-313 2xRS422/485 1Mbaud */
#define BRAINBOXES_US_357_PID 0x7001 /* US_357 1xRS232/422/485 */
#define BRAINBOXES_US_842_1_PID 0x8001 /* US-842 8xRS422/485 1Mbaud Port 1 and 2 */
#define BRAINBOXES_US_842_2_PID 0x8002 /* US-842 8xRS422/485 1Mbaud Port 3 and 4 */
#define BRAINBOXES_US_842_3_PID 0x8003 /* US-842 8xRS422/485 1Mbaud Port 5 and 6 */
#define BRAINBOXES_US_842_4_PID 0x8004 /* US-842 8xRS422/485 1Mbaud Port 7 and 8 */
#define BRAINBOXES_US_160_1_PID 0x9001 /* US-160 16xRS232 1Mbaud Port 1 and 2 */
#define BRAINBOXES_US_160_2_PID 0x9002 /* US-160 16xRS232 1Mbaud Port 3 and 4 */
#define BRAINBOXES_US_160_3_PID 0x9003 /* US-160 16xRS232 1Mbaud Port 5 and 6 */
#define BRAINBOXES_US_160_4_PID 0x9004 /* US-160 16xRS232 1Mbaud Port 7 and 8 */
#define BRAINBOXES_US_160_5_PID 0x9005 /* US-160 16xRS232 1Mbaud Port 9 and 10 */
#define BRAINBOXES_US_160_6_PID 0x9006 /* US-160 16xRS232 1Mbaud Port 11 and 12 */
#define BRAINBOXES_US_160_7_PID 0x9007 /* US-160 16xRS232 1Mbaud Port 13 and 14 */
#define BRAINBOXES_US_160_8_PID 0x9008 /* US-160 16xRS232 1Mbaud Port 15 and 16 */
...@@ -243,6 +243,7 @@ static void option_instat_callback(struct urb *urb); ...@@ -243,6 +243,7 @@ static void option_instat_callback(struct urb *urb);
#define TELIT_PRODUCT_CC864_DUAL 0x1005 #define TELIT_PRODUCT_CC864_DUAL 0x1005
#define TELIT_PRODUCT_CC864_SINGLE 0x1006 #define TELIT_PRODUCT_CC864_SINGLE 0x1006
#define TELIT_PRODUCT_DE910_DUAL 0x1010 #define TELIT_PRODUCT_DE910_DUAL 0x1010
#define TELIT_PRODUCT_UE910_V2 0x1012
#define TELIT_PRODUCT_LE920 0x1200 #define TELIT_PRODUCT_LE920 0x1200
/* ZTE PRODUCTS */ /* ZTE PRODUCTS */
...@@ -1041,6 +1042,7 @@ static const struct usb_device_id option_ids[] = { ...@@ -1041,6 +1042,7 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_DUAL) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_DUAL) },
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) },
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) },
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UE910_V2) },
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920), { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
.driver_info = (kernel_ulong_t)&telit_le920_blacklist }, .driver_info = (kernel_ulong_t)&telit_le920_blacklist },
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
......
...@@ -83,6 +83,9 @@ static const struct usb_device_id id_table[] = { ...@@ -83,6 +83,9 @@ static const struct usb_device_id id_table[] = {
{ USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) }, { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
{ USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) }, { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) }, { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LD960_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LCM220_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LCM960_PRODUCT_ID) },
{ USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) }, { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) },
{ USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) }, { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) },
{ USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) }, { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) },
......
...@@ -121,8 +121,11 @@ ...@@ -121,8 +121,11 @@
#define SUPERIAL_VENDOR_ID 0x5372 #define SUPERIAL_VENDOR_ID 0x5372
#define SUPERIAL_PRODUCT_ID 0x2303 #define SUPERIAL_PRODUCT_ID 0x2303
/* Hewlett-Packard LD220-HP POS Pole Display */ /* Hewlett-Packard POS Pole Displays */
#define HP_VENDOR_ID 0x03f0 #define HP_VENDOR_ID 0x03f0
#define HP_LD960_PRODUCT_ID 0x0b39
#define HP_LCM220_PRODUCT_ID 0x3139
#define HP_LCM960_PRODUCT_ID 0x3239
#define HP_LD220_PRODUCT_ID 0x3524 #define HP_LD220_PRODUCT_ID 0x3524
/* Cressi Edy (diving computer) PC interface */ /* Cressi Edy (diving computer) PC interface */
......
...@@ -291,7 +291,6 @@ static const struct usb_device_id id_table[] = { ...@@ -291,7 +291,6 @@ static const struct usb_device_id id_table[] = {
{ USB_DEVICE(0x0f3d, 0x68A3), /* Airprime/Sierra Wireless Direct IP modems */ { USB_DEVICE(0x0f3d, 0x68A3), /* Airprime/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(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */
{ } { }
}; };
......
...@@ -466,6 +466,9 @@ int usb_wwan_port_probe(struct usb_serial_port *port) ...@@ -466,6 +466,9 @@ int usb_wwan_port_probe(struct usb_serial_port *port)
int err; int err;
int i; int i;
if (!port->bulk_in_size || !port->bulk_out_size)
return -ENODEV;
portdata = kzalloc(sizeof(*portdata), GFP_KERNEL); portdata = kzalloc(sizeof(*portdata), GFP_KERNEL);
if (!portdata) if (!portdata)
return -ENOMEM; return -ENOMEM;
...@@ -473,9 +476,6 @@ int usb_wwan_port_probe(struct usb_serial_port *port) ...@@ -473,9 +476,6 @@ int usb_wwan_port_probe(struct usb_serial_port *port)
init_usb_anchor(&portdata->delayed); init_usb_anchor(&portdata->delayed);
for (i = 0; i < N_IN_URB; i++) { for (i = 0; i < N_IN_URB; i++) {
if (!port->bulk_in_size)
break;
buffer = (u8 *)__get_free_page(GFP_KERNEL); buffer = (u8 *)__get_free_page(GFP_KERNEL);
if (!buffer) if (!buffer)
goto bail_out_error; goto bail_out_error;
...@@ -489,9 +489,6 @@ int usb_wwan_port_probe(struct usb_serial_port *port) ...@@ -489,9 +489,6 @@ int usb_wwan_port_probe(struct usb_serial_port *port)
} }
for (i = 0; i < N_OUT_URB; i++) { for (i = 0; i < N_OUT_URB; i++) {
if (!port->bulk_out_size)
break;
buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL); buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL);
if (!buffer) if (!buffer)
goto bail_out_error2; goto bail_out_error2;
......
...@@ -137,7 +137,7 @@ static void uas_do_work(struct work_struct *work) ...@@ -137,7 +137,7 @@ static void uas_do_work(struct work_struct *work)
if (!(cmdinfo->state & IS_IN_WORK_LIST)) if (!(cmdinfo->state & IS_IN_WORK_LIST))
continue; continue;
err = uas_submit_urbs(cmnd, cmnd->device->hostdata, GFP_NOIO); err = uas_submit_urbs(cmnd, cmnd->device->hostdata, GFP_ATOMIC);
if (!err) if (!err)
cmdinfo->state &= ~IS_IN_WORK_LIST; cmdinfo->state &= ~IS_IN_WORK_LIST;
else else
...@@ -803,7 +803,7 @@ static int uas_eh_task_mgmt(struct scsi_cmnd *cmnd, ...@@ -803,7 +803,7 @@ static int uas_eh_task_mgmt(struct scsi_cmnd *cmnd,
devinfo->running_task = 1; devinfo->running_task = 1;
memset(&devinfo->response, 0, sizeof(devinfo->response)); memset(&devinfo->response, 0, sizeof(devinfo->response));
sense_urb = uas_submit_sense_urb(cmnd, GFP_NOIO, sense_urb = uas_submit_sense_urb(cmnd, GFP_ATOMIC,
devinfo->use_streams ? tag : 0); devinfo->use_streams ? tag : 0);
if (!sense_urb) { if (!sense_urb) {
shost_printk(KERN_INFO, shost, shost_printk(KERN_INFO, shost,
...@@ -813,7 +813,7 @@ static int uas_eh_task_mgmt(struct scsi_cmnd *cmnd, ...@@ -813,7 +813,7 @@ static int uas_eh_task_mgmt(struct scsi_cmnd *cmnd,
spin_unlock_irqrestore(&devinfo->lock, flags); spin_unlock_irqrestore(&devinfo->lock, flags);
return FAILED; return FAILED;
} }
if (uas_submit_task_urb(cmnd, GFP_NOIO, function, tag)) { if (uas_submit_task_urb(cmnd, GFP_ATOMIC, function, tag)) {
shost_printk(KERN_INFO, shost, shost_printk(KERN_INFO, shost,
"%s: %s: submit task mgmt urb failed\n", "%s: %s: submit task mgmt urb failed\n",
__func__, fname); __func__, fname);
...@@ -1030,7 +1030,7 @@ static int uas_configure_endpoints(struct uas_dev_info *devinfo) ...@@ -1030,7 +1030,7 @@ static int uas_configure_endpoints(struct uas_dev_info *devinfo)
devinfo->use_streams = 0; devinfo->use_streams = 0;
} else { } else {
devinfo->qdepth = usb_alloc_streams(devinfo->intf, eps + 1, devinfo->qdepth = usb_alloc_streams(devinfo->intf, eps + 1,
3, 256, GFP_KERNEL); 3, 256, GFP_NOIO);
if (devinfo->qdepth < 0) if (devinfo->qdepth < 0)
return devinfo->qdepth; return devinfo->qdepth;
devinfo->use_streams = 1; devinfo->use_streams = 1;
...@@ -1047,7 +1047,7 @@ static void uas_free_streams(struct uas_dev_info *devinfo) ...@@ -1047,7 +1047,7 @@ static void uas_free_streams(struct uas_dev_info *devinfo)
eps[0] = usb_pipe_endpoint(udev, devinfo->status_pipe); eps[0] = usb_pipe_endpoint(udev, devinfo->status_pipe);
eps[1] = usb_pipe_endpoint(udev, devinfo->data_in_pipe); eps[1] = usb_pipe_endpoint(udev, devinfo->data_in_pipe);
eps[2] = usb_pipe_endpoint(udev, devinfo->data_out_pipe); eps[2] = usb_pipe_endpoint(udev, devinfo->data_out_pipe);
usb_free_streams(devinfo->intf, eps, 3, GFP_KERNEL); usb_free_streams(devinfo->intf, eps, 3, GFP_NOIO);
} }
static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id) static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
...@@ -1096,16 +1096,17 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id) ...@@ -1096,16 +1096,17 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
if (result) if (result)
goto free_streams; goto free_streams;
usb_set_intfdata(intf, shost);
result = scsi_add_host(shost, &intf->dev); result = scsi_add_host(shost, &intf->dev);
if (result) if (result)
goto free_streams; goto free_streams;
scsi_scan_host(shost); scsi_scan_host(shost);
usb_set_intfdata(intf, shost);
return result; return result;
free_streams: free_streams:
uas_free_streams(devinfo); uas_free_streams(devinfo);
usb_set_intfdata(intf, NULL);
set_alt0: set_alt0:
usb_set_interface(udev, intf->altsetting[0].desc.bInterfaceNumber, 0); usb_set_interface(udev, intf->altsetting[0].desc.bInterfaceNumber, 0);
if (shost) if (shost)
......
...@@ -69,7 +69,7 @@ const char *usb_state_string(enum usb_device_state state) ...@@ -69,7 +69,7 @@ const char *usb_state_string(enum usb_device_state state)
[USB_STATE_RECONNECTING] = "reconnecting", [USB_STATE_RECONNECTING] = "reconnecting",
[USB_STATE_UNAUTHENTICATED] = "unauthenticated", [USB_STATE_UNAUTHENTICATED] = "unauthenticated",
[USB_STATE_DEFAULT] = "default", [USB_STATE_DEFAULT] = "default",
[USB_STATE_ADDRESS] = "addresssed", [USB_STATE_ADDRESS] = "addressed",
[USB_STATE_CONFIGURED] = "configured", [USB_STATE_CONFIGURED] = "configured",
[USB_STATE_SUSPENDED] = "suspended", [USB_STATE_SUSPENDED] = "suspended",
}; };
......
...@@ -599,8 +599,11 @@ static void uwb_drp_handle_alien_drp(struct uwb_rc *rc, struct uwb_ie_drp *drp_i ...@@ -599,8 +599,11 @@ static void uwb_drp_handle_alien_drp(struct uwb_rc *rc, struct uwb_ie_drp *drp_i
/* alloc and initialize new uwb_cnflt_alien */ /* alloc and initialize new uwb_cnflt_alien */
cnflt = kzalloc(sizeof(struct uwb_cnflt_alien), GFP_KERNEL); cnflt = kzalloc(sizeof(struct uwb_cnflt_alien), GFP_KERNEL);
if (!cnflt) if (!cnflt) {
dev_err(dev, "failed to alloc uwb_cnflt_alien struct\n"); dev_err(dev, "failed to alloc uwb_cnflt_alien struct\n");
return;
}
INIT_LIST_HEAD(&cnflt->rc_node); INIT_LIST_HEAD(&cnflt->rc_node);
init_timer(&cnflt->timer); init_timer(&cnflt->timer);
cnflt->timer.function = uwb_cnflt_timer; cnflt->timer.function = uwb_cnflt_timer;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册