Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: USB: storage: Unusual USB device Prolific 2507 variation added USB: Add device id for Option GTM380 to option driver USB: Add Vendor/Product ID for new CDMA U727 to option driver USB: Updated unusual-devs entry for USB mass storage on Nokia 6233 USB: Option: let cdc-acm handle Sony Ericsson F3507g / Dell 5530 USB: EHCI: expedite unlinks when the root hub is suspended USB: EHCI: Fix isochronous URB leak USB: option.c: add ZTE 622 modem device USB: wusbcore/wa-xfer, fix lock imbalance USB: misc/vstusb, fix lock imbalance USB: misc/adutux, fix lock imbalance USB: image/mdc800, fix lock imbalance USB: atm/cxacru, fix lock imbalance USB: unusual_devs: Add support for GI 0431 SD-Card interface USB: serial: new cp2101 device id USB: serial: ftdi: enable UART detection on gnICE JTAG adaptors blacklist interface0 USB: serial: add FTDI USB/Serial converter devices USB: usbfs: keep async URBs until the device file is closed USB: usbtmc: add protocol 1 support USB: usbtmc: fix stupid bug in open()
This commit is contained in:
commit
99dbe10968
14 changed files with 72 additions and 28 deletions
|
@ -485,7 +485,7 @@ static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm,
|
|||
usb_err(instance->usbatm, "requested transfer size too large (%d, %d)\n",
|
||||
wbuflen, rbuflen);
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
goto err;
|
||||
}
|
||||
|
||||
mutex_lock(&instance->cm_serialize);
|
||||
|
@ -565,6 +565,7 @@ static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm,
|
|||
dbg("cm %#x", cm);
|
||||
fail:
|
||||
mutex_unlock(&instance->cm_serialize);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -50,6 +50,7 @@
|
|||
|
||||
static struct usb_device_id usbtmc_devices[] = {
|
||||
{ USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), },
|
||||
{ USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 1), },
|
||||
{ 0, } /* terminating entry */
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, usbtmc_devices);
|
||||
|
@ -106,12 +107,13 @@ static int usbtmc_open(struct inode *inode, struct file *filp)
|
|||
{
|
||||
struct usb_interface *intf;
|
||||
struct usbtmc_device_data *data;
|
||||
int retval = -ENODEV;
|
||||
int retval = 0;
|
||||
|
||||
intf = usb_find_interface(&usbtmc_driver, iminor(inode));
|
||||
if (!intf) {
|
||||
printk(KERN_ERR KBUILD_MODNAME
|
||||
": can not find device for minor %d", iminor(inode));
|
||||
retval = -ENODEV;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
|
|
|
@ -359,11 +359,6 @@ static void destroy_async(struct dev_state *ps, struct list_head *list)
|
|||
spin_lock_irqsave(&ps->lock, flags);
|
||||
}
|
||||
spin_unlock_irqrestore(&ps->lock, flags);
|
||||
as = async_getcompleted(ps);
|
||||
while (as) {
|
||||
free_async(as);
|
||||
as = async_getcompleted(ps);
|
||||
}
|
||||
}
|
||||
|
||||
static void destroy_async_on_interface(struct dev_state *ps,
|
||||
|
@ -643,6 +638,7 @@ static int usbdev_release(struct inode *inode, struct file *file)
|
|||
struct dev_state *ps = file->private_data;
|
||||
struct usb_device *dev = ps->dev;
|
||||
unsigned int ifnum;
|
||||
struct async *as;
|
||||
|
||||
usb_lock_device(dev);
|
||||
|
||||
|
@ -661,6 +657,12 @@ static int usbdev_release(struct inode *inode, struct file *file)
|
|||
usb_unlock_device(dev);
|
||||
usb_put_dev(dev);
|
||||
put_pid(ps->disc_pid);
|
||||
|
||||
as = async_getcompleted(ps);
|
||||
while (as) {
|
||||
free_async(as);
|
||||
as = async_getcompleted(ps);
|
||||
}
|
||||
kfree(ps);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1095,7 +1095,8 @@ static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
|
|||
prev->qh_next = qh->qh_next;
|
||||
wmb ();
|
||||
|
||||
if (unlikely (ehci_to_hcd(ehci)->state == HC_STATE_HALT)) {
|
||||
/* If the controller isn't running, we don't have to wait for it */
|
||||
if (unlikely(!HC_IS_RUNNING(ehci_to_hcd(ehci)->state))) {
|
||||
/* if (unlikely (qh->reclaim != 0))
|
||||
* this will recurse, probably not much
|
||||
*/
|
||||
|
|
|
@ -1536,7 +1536,7 @@ itd_link_urb (
|
|||
struct ehci_itd, itd_list);
|
||||
list_move_tail (&itd->itd_list, &stream->td_list);
|
||||
itd->stream = iso_stream_get (stream);
|
||||
itd->urb = usb_get_urb (urb);
|
||||
itd->urb = urb;
|
||||
itd_init (ehci, stream, itd);
|
||||
}
|
||||
|
||||
|
@ -1645,7 +1645,7 @@ itd_complete (
|
|||
(void) disable_periodic(ehci);
|
||||
ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--;
|
||||
|
||||
if (unlikely (list_empty (&stream->td_list))) {
|
||||
if (unlikely(list_is_singular(&stream->td_list))) {
|
||||
ehci_to_hcd(ehci)->self.bandwidth_allocated
|
||||
-= stream->bandwidth;
|
||||
ehci_vdbg (ehci,
|
||||
|
@ -1656,7 +1656,6 @@ itd_complete (
|
|||
iso_stream_put (ehci, stream);
|
||||
|
||||
done:
|
||||
usb_put_urb(urb);
|
||||
itd->urb = NULL;
|
||||
if (ehci->clock_frame != itd->frame || itd->index[7] != -1) {
|
||||
/* OK to recycle this ITD now. */
|
||||
|
@ -1949,7 +1948,7 @@ sitd_link_urb (
|
|||
struct ehci_sitd, sitd_list);
|
||||
list_move_tail (&sitd->sitd_list, &stream->td_list);
|
||||
sitd->stream = iso_stream_get (stream);
|
||||
sitd->urb = usb_get_urb (urb);
|
||||
sitd->urb = urb;
|
||||
|
||||
sitd_patch(ehci, stream, sitd, sched, packet);
|
||||
sitd_link (ehci, (next_uframe >> 3) % ehci->periodic_size,
|
||||
|
@ -2034,7 +2033,7 @@ sitd_complete (
|
|||
(void) disable_periodic(ehci);
|
||||
ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--;
|
||||
|
||||
if (list_empty (&stream->td_list)) {
|
||||
if (list_is_singular(&stream->td_list)) {
|
||||
ehci_to_hcd(ehci)->self.bandwidth_allocated
|
||||
-= stream->bandwidth;
|
||||
ehci_vdbg (ehci,
|
||||
|
@ -2045,7 +2044,6 @@ sitd_complete (
|
|||
iso_stream_put (ehci, stream);
|
||||
/* OK to recycle this SITD now that its completion callback ran. */
|
||||
done:
|
||||
usb_put_urb(urb);
|
||||
sitd->urb = NULL;
|
||||
sitd->stream = NULL;
|
||||
list_move(&sitd->sitd_list, &stream->free_list);
|
||||
|
|
|
@ -499,6 +499,7 @@ static int mdc800_usb_probe (struct usb_interface *intf,
|
|||
retval = usb_register_dev(intf, &mdc800_class);
|
||||
if (retval) {
|
||||
dev_err(&intf->dev, "Not able to get a minor for this device.\n");
|
||||
mutex_unlock(&mdc800->io_lock);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
|
|
@ -376,7 +376,7 @@ static int adu_release(struct inode *inode, struct file *file)
|
|||
if (dev->open_count <= 0) {
|
||||
dbg(1," %s : device not opened", __func__);
|
||||
retval = -ENODEV;
|
||||
goto exit;
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
adu_release_internal(dev);
|
||||
|
@ -385,9 +385,9 @@ static int adu_release(struct inode *inode, struct file *file)
|
|||
if (!dev->open_count) /* ... and we're the last user */
|
||||
adu_delete(dev);
|
||||
}
|
||||
|
||||
exit:
|
||||
unlock:
|
||||
mutex_unlock(&adutux_mutex);
|
||||
exit:
|
||||
dbg(2," %s : leave, return value %d", __func__, retval);
|
||||
return retval;
|
||||
}
|
||||
|
|
|
@ -401,6 +401,7 @@ static ssize_t vstusb_write(struct file *file, const char __user *buffer,
|
|||
}
|
||||
|
||||
if (copy_from_user(buf, buffer, count)) {
|
||||
mutex_unlock(&vstdev->lock);
|
||||
dev_err(&dev->dev, "%s: can't copy_from_user\n", __func__);
|
||||
retval = -EFAULT;
|
||||
goto exit;
|
||||
|
|
|
@ -79,6 +79,7 @@ static struct usb_device_id id_table [] = {
|
|||
{ USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */
|
||||
{ USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */
|
||||
{ USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */
|
||||
{ USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */
|
||||
{ USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */
|
||||
{ USB_DEVICE(0x10C4, 0x81AC) }, /* MSD Dash Hawk */
|
||||
{ USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */
|
||||
|
|
|
@ -663,6 +663,11 @@ static struct usb_device_id id_table_combined [] = {
|
|||
{ USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, DIEBOLD_BCS_SE923_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_NDI_HUC_PID) },
|
||||
{ USB_DEVICE(ATMEL_VID, STK541_PID) },
|
||||
{ USB_DEVICE(DE_VID, STB_PID) },
|
||||
{ USB_DEVICE(DE_VID, WHT_PID) },
|
||||
{ USB_DEVICE(ADI_VID, ADI_GNICE_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ }, /* Optional parameter entry */
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
|
|
@ -892,6 +892,26 @@
|
|||
*/
|
||||
#define DIEBOLD_BCS_SE923_PID 0xfb99
|
||||
|
||||
/*
|
||||
* Atmel STK541
|
||||
*/
|
||||
#define ATMEL_VID 0x03eb /* Vendor ID */
|
||||
#define STK541_PID 0x2109 /* Zigbee Controller */
|
||||
|
||||
/*
|
||||
* Dresden Elektronic Sensor Terminal Board
|
||||
*/
|
||||
#define DE_VID 0x1cf1 /* Vendor ID */
|
||||
#define STB_PID 0x0001 /* Sensor Terminal Board */
|
||||
#define WHT_PID 0x0004 /* Wireless Handheld Terminal */
|
||||
|
||||
/*
|
||||
* Blackfin gnICE JTAG
|
||||
* http://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice
|
||||
*/
|
||||
#define ADI_VID 0x0456
|
||||
#define ADI_GNICE_PID 0xF000
|
||||
|
||||
/*
|
||||
* BmRequestType: 1100 0000b
|
||||
* bRequest: FTDI_E2_READ
|
||||
|
|
|
@ -89,6 +89,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
|
|||
#define OPTION_PRODUCT_ETNA_MODEM_GT 0x7041
|
||||
#define OPTION_PRODUCT_ETNA_MODEM_EX 0x7061
|
||||
#define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100
|
||||
#define OPTION_PRODUCT_GTM380_MODEM 0x7201
|
||||
|
||||
#define HUAWEI_VENDOR_ID 0x12D1
|
||||
#define HUAWEI_PRODUCT_E600 0x1001
|
||||
|
@ -197,6 +198,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
|
|||
/* OVATION PRODUCTS */
|
||||
#define NOVATELWIRELESS_PRODUCT_MC727 0x4100
|
||||
#define NOVATELWIRELESS_PRODUCT_MC950D 0x4400
|
||||
#define NOVATELWIRELESS_PRODUCT_U727 0x5010
|
||||
|
||||
/* FUTURE NOVATEL PRODUCTS */
|
||||
#define NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED 0X6000
|
||||
|
@ -288,15 +290,11 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
|
|||
|
||||
/* ZTE PRODUCTS */
|
||||
#define ZTE_VENDOR_ID 0x19d2
|
||||
#define ZTE_PRODUCT_MF622 0x0001
|
||||
#define ZTE_PRODUCT_MF628 0x0015
|
||||
#define ZTE_PRODUCT_MF626 0x0031
|
||||
#define ZTE_PRODUCT_CDMA_TECH 0xfffe
|
||||
|
||||
/* Ericsson products */
|
||||
#define ERICSSON_VENDOR_ID 0x0bdb
|
||||
#define ERICSSON_PRODUCT_F3507G_1 0x1900
|
||||
#define ERICSSON_PRODUCT_F3507G_2 0x1902
|
||||
|
||||
#define BENQ_VENDOR_ID 0x04a5
|
||||
#define BENQ_PRODUCT_H10 0x4068
|
||||
|
||||
|
@ -325,6 +323,7 @@ static struct usb_device_id option_ids[] = {
|
|||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_GT) },
|
||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_EX) },
|
||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) },
|
||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GTM380_MODEM) },
|
||||
{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_Q101) },
|
||||
{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_Q111) },
|
||||
{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLX) },
|
||||
|
@ -415,6 +414,7 @@ static struct usb_device_id option_ids[] = {
|
|||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U727) }, /* Novatel MC727/U727/USB727 */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED) }, /* Novatel EVDO product */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) }, /* Novatel HSPA product */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) }, /* Novatel EVDO Embedded product */
|
||||
|
@ -442,7 +442,6 @@ static struct usb_device_id option_ids[] = {
|
|||
{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_CINGULAR) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */
|
||||
{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_L) }, /* Dell Wireless HSDPA 5520 */
|
||||
{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_I) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */
|
||||
{ USB_DEVICE(DELL_VENDOR_ID, 0x8147) }, /* Dell Wireless 5530 Mobile Broadband (3G HSPA) Mini-Card */
|
||||
{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
|
||||
{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
|
||||
{ USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
|
||||
|
@ -510,11 +509,10 @@ static struct usb_device_id option_ids[] = {
|
|||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
|
||||
{ USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */
|
||||
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) },
|
||||
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622) },
|
||||
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) },
|
||||
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) },
|
||||
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) },
|
||||
{ USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G_1) },
|
||||
{ USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G_2) },
|
||||
{ USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
|
||||
{ USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */
|
||||
{ } /* Terminating entry */
|
||||
|
|
|
@ -226,7 +226,7 @@ UNUSUAL_DEV( 0x0421, 0x047c, 0x0370, 0x0610,
|
|||
US_FL_MAX_SECTORS_64 ),
|
||||
|
||||
/* Reported by Manuel Osdoba <manuel.osdoba@tu-ilmenau.de> */
|
||||
UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x0452,
|
||||
UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x9999,
|
||||
"Nokia",
|
||||
"Nokia 6233",
|
||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
|
@ -951,7 +951,9 @@ UNUSUAL_DEV( 0x066f, 0x8000, 0x0001, 0x0001,
|
|||
US_FL_FIX_CAPACITY ),
|
||||
|
||||
/* Reported by Richard -=[]=- <micro_flyer@hotmail.com> */
|
||||
UNUSUAL_DEV( 0x067b, 0x2507, 0x0100, 0x0100,
|
||||
/* Change to bcdDeviceMin (0x0100 to 0x0001) reported by
|
||||
* Thomas Bartosik <tbartdev@gmx-topmail.de> */
|
||||
UNUSUAL_DEV( 0x067b, 0x2507, 0x0001, 0x0100,
|
||||
"Prolific Technology Inc.",
|
||||
"Mass Storage Device",
|
||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
|
@ -1390,6 +1392,16 @@ UNUSUAL_DEV( 0x0af0, 0x7401, 0x0000, 0x0000,
|
|||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
0 ),
|
||||
|
||||
/* Reported by Jan Dumon <j.dumon@option.com>
|
||||
* This device (wrongly) has a vendor-specific device descriptor.
|
||||
* The entry is needed so usb-storage can bind to it's mass-storage
|
||||
* interface as an interface driver */
|
||||
UNUSUAL_DEV( 0x0af0, 0x7501, 0x0000, 0x0000,
|
||||
"Option",
|
||||
"GI 0431 SD-Card",
|
||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
0 ),
|
||||
|
||||
/* Reported by Ben Efros <ben@pc-doctor.com> */
|
||||
UNUSUAL_DEV( 0x0bc2, 0x3010, 0x0000, 0x0000,
|
||||
"Seagate",
|
||||
|
|
|
@ -921,8 +921,10 @@ static void wa_urb_enqueue_b(struct wa_xfer *xfer)
|
|||
result = -ENODEV;
|
||||
/* FIXME: segmentation broken -- kills DWA */
|
||||
mutex_lock(&wusbhc->mutex); /* get a WUSB dev */
|
||||
if (urb->dev == NULL)
|
||||
if (urb->dev == NULL) {
|
||||
mutex_unlock(&wusbhc->mutex);
|
||||
goto error_dev_gone;
|
||||
}
|
||||
wusb_dev = __wusb_dev_get_by_usb_dev(wusbhc, urb->dev);
|
||||
if (wusb_dev == NULL) {
|
||||
mutex_unlock(&wusbhc->mutex);
|
||||
|
|
Loading…
Reference in a new issue