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: don't rebind drivers after failed resume or reset USB: fix memory leak in cdc-acm USB: Unusual dev for Mio moov 330 gps USB: cdc-wdm: make module autoload work USB: Fix unneeded endpoint check in pxa27x_udc usb/gadget: fix kernel-doc warning USB: Speedtouch: add pre_reset and post_reset routines USB: usbtest.c: length, sglen and vary are unsigned, so cannot be negative USB: support Huawei data card product IDs USB: add ZTE MF626 USB GSM modem entry USB: storage: Avoid I/O errors when issuing SCSI ioctls to JMicron USB/ATA bridge USB: Fix debugfs_create_file's error checking method for usb/gadget/s3c2410_udc USB: ohci: add support for tmio-ohci cell
This commit is contained in:
commit
a27028349c
|
@ -36,7 +36,8 @@ config USB_ARCH_HAS_OHCI
|
|||
default y if PXA3xx
|
||||
default y if ARCH_EP93XX
|
||||
default y if ARCH_AT91
|
||||
default y if ARCH_PNX4008
|
||||
default y if ARCH_PNX4008 && I2C
|
||||
default y if MFD_TC6393XB
|
||||
# PPC:
|
||||
default y if STB03xxx
|
||||
default y if PPC_MPC52xx
|
||||
|
|
|
@ -722,6 +722,16 @@ static void speedtch_atm_stop(struct usbatm_data *usbatm, struct atm_dev *atm_de
|
|||
flush_scheduled_work();
|
||||
}
|
||||
|
||||
static int speedtch_pre_reset(struct usb_interface *intf)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int speedtch_post_reset(struct usb_interface *intf)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**********
|
||||
** USB **
|
||||
|
@ -740,6 +750,8 @@ static struct usb_driver speedtch_usb_driver = {
|
|||
.name = speedtch_driver_name,
|
||||
.probe = speedtch_usb_probe,
|
||||
.disconnect = usbatm_usb_disconnect,
|
||||
.pre_reset = speedtch_pre_reset,
|
||||
.post_reset = speedtch_post_reset,
|
||||
.id_table = speedtch_usb_ids
|
||||
};
|
||||
|
||||
|
|
|
@ -849,9 +849,10 @@ static void acm_write_buffers_free(struct acm *acm)
|
|||
{
|
||||
int i;
|
||||
struct acm_wb *wb;
|
||||
struct usb_device *usb_dev = interface_to_usbdev(acm->control);
|
||||
|
||||
for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
|
||||
usb_buffer_free(acm->dev, acm->writesize, wb->buf, wb->dmah);
|
||||
usb_buffer_free(usb_dev, acm->writesize, wb->buf, wb->dmah);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,8 @@ static struct usb_device_id wdm_ids[] = {
|
|||
{ }
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE (usb, wdm_ids);
|
||||
|
||||
#define WDM_MINOR_BASE 176
|
||||
|
||||
|
||||
|
|
|
@ -1610,7 +1610,8 @@ int usb_external_resume_device(struct usb_device *udev)
|
|||
status = usb_resume_both(udev);
|
||||
udev->last_busy = jiffies;
|
||||
usb_pm_unlock(udev);
|
||||
do_unbind_rebind(udev, DO_REBIND);
|
||||
if (status == 0)
|
||||
do_unbind_rebind(udev, DO_REBIND);
|
||||
|
||||
/* Now that the device is awake, we can start trying to autosuspend
|
||||
* it again. */
|
||||
|
|
|
@ -3504,7 +3504,7 @@ int usb_reset_device(struct usb_device *udev)
|
|||
USB_INTERFACE_BOUND)
|
||||
rebind = 1;
|
||||
}
|
||||
if (rebind)
|
||||
if (ret == 0 && rebind)
|
||||
usb_rebind_intf(cintf);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -168,7 +168,7 @@ usb_copy_descriptors(struct usb_descriptor_header **src)
|
|||
* usb_find_endpoint - find a copy of an endpoint descriptor
|
||||
* @src: original vector of descriptors
|
||||
* @copy: copy of @src
|
||||
* @ep: endpoint descriptor found in @src
|
||||
* @match: endpoint descriptor found in @src
|
||||
*
|
||||
* This returns the copy of the @match descriptor made for @copy. Its
|
||||
* intended use is to help remembering the endpoint descriptor to use
|
||||
|
|
|
@ -650,7 +650,7 @@ pxa_ep_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
|
|||
struct pxa27x_request *req;
|
||||
|
||||
req = kzalloc(sizeof *req, gfp_flags);
|
||||
if (!req || !_ep)
|
||||
if (!req)
|
||||
return NULL;
|
||||
|
||||
INIT_LIST_HEAD(&req->queue);
|
||||
|
|
|
@ -1894,11 +1894,8 @@ static int s3c2410_udc_probe(struct platform_device *pdev)
|
|||
udc->regs_info = debugfs_create_file("registers", S_IRUGO,
|
||||
s3c2410_udc_debugfs_root,
|
||||
udc, &s3c2410_udc_debugfs_fops);
|
||||
if (IS_ERR(udc->regs_info)) {
|
||||
dev_warn(dev, "debugfs file creation failed %ld\n",
|
||||
PTR_ERR(udc->regs_info));
|
||||
udc->regs_info = NULL;
|
||||
}
|
||||
if (!udc->regs_info)
|
||||
dev_warn(dev, "debugfs file creation failed\n");
|
||||
}
|
||||
|
||||
dev_dbg(dev, "probe ok\n");
|
||||
|
|
|
@ -138,7 +138,6 @@ config USB_OHCI_HCD
|
|||
tristate "OHCI HCD support"
|
||||
depends on USB && USB_ARCH_HAS_OHCI
|
||||
select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3
|
||||
select I2C if ARCH_PNX4008
|
||||
---help---
|
||||
The Open Host Controller Interface (OHCI) is a standard for accessing
|
||||
USB 1.1 host controller hardware. It does more in hardware than Intel's
|
||||
|
|
|
@ -1075,12 +1075,18 @@ MODULE_LICENSE ("GPL");
|
|||
#define SM501_OHCI_DRIVER ohci_hcd_sm501_driver
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MFD_TC6393XB
|
||||
#include "ohci-tmio.c"
|
||||
#define TMIO_OHCI_DRIVER ohci_hcd_tmio_driver
|
||||
#endif
|
||||
|
||||
#if !defined(PCI_DRIVER) && \
|
||||
!defined(PLATFORM_DRIVER) && \
|
||||
!defined(OF_PLATFORM_DRIVER) && \
|
||||
!defined(SA1111_DRIVER) && \
|
||||
!defined(PS3_SYSTEM_BUS_DRIVER) && \
|
||||
!defined(SM501_OHCI_DRIVER) && \
|
||||
!defined(TMIO_OHCI_DRIVER) && \
|
||||
!defined(SSB_OHCI_DRIVER)
|
||||
#error "missing bus glue for ohci-hcd"
|
||||
#endif
|
||||
|
@ -1147,13 +1153,25 @@ static int __init ohci_hcd_mod_init(void)
|
|||
goto error_sm501;
|
||||
#endif
|
||||
|
||||
#ifdef TMIO_OHCI_DRIVER
|
||||
retval = platform_driver_register(&TMIO_OHCI_DRIVER);
|
||||
if (retval < 0)
|
||||
goto error_tmio;
|
||||
#endif
|
||||
|
||||
return retval;
|
||||
|
||||
/* Error path */
|
||||
#ifdef TMIO_OHCI_DRIVER
|
||||
platform_driver_unregister(&TMIO_OHCI_DRIVER);
|
||||
error_tmio:
|
||||
#endif
|
||||
#ifdef SM501_OHCI_DRIVER
|
||||
platform_driver_unregister(&SM501_OHCI_DRIVER);
|
||||
error_sm501:
|
||||
#endif
|
||||
#ifdef SSB_OHCI_DRIVER
|
||||
ssb_driver_unregister(&SSB_OHCI_DRIVER);
|
||||
error_ssb:
|
||||
#endif
|
||||
#ifdef PCI_DRIVER
|
||||
|
@ -1189,6 +1207,9 @@ module_init(ohci_hcd_mod_init);
|
|||
|
||||
static void __exit ohci_hcd_mod_exit(void)
|
||||
{
|
||||
#ifdef TMIO_OHCI_DRIVER
|
||||
platform_driver_unregister(&TMIO_OHCI_DRIVER);
|
||||
#endif
|
||||
#ifdef SM501_OHCI_DRIVER
|
||||
platform_driver_unregister(&SM501_OHCI_DRIVER);
|
||||
#endif
|
||||
|
|
376
drivers/usb/host/ohci-tmio.c
Normal file
376
drivers/usb/host/ohci-tmio.c
Normal file
|
@ -0,0 +1,376 @@
|
|||
/*
|
||||
* OHCI HCD(Host Controller Driver) for USB.
|
||||
*
|
||||
*(C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
|
||||
*(C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
|
||||
*(C) Copyright 2002 Hewlett-Packard Company
|
||||
*
|
||||
* Bus glue for Toshiba Mobile IO(TMIO) Controller's OHCI core
|
||||
* (C) Copyright 2005 Chris Humbert <mahadri-usb@drigon.com>
|
||||
* (C) Copyright 2007, 2008 Dmitry Baryshkov <dbaryshkov@gmail.com>
|
||||
*
|
||||
* This is known to work with the following variants:
|
||||
* TC6393XB revision 3 (32kB SRAM)
|
||||
*
|
||||
* The TMIO's OHCI core DMAs through a small internal buffer that
|
||||
* is directly addressable by the CPU.
|
||||
*
|
||||
* Written from sparse documentation from Toshiba and Sharp's driver
|
||||
* for the 2.4 kernel,
|
||||
* usb-ohci-tc6393.c(C) Copyright 2004 Lineo Solutions, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/*#include <linux/fs.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/namei.h>
|
||||
#include <linux/sched.h>*/
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mfd/core.h>
|
||||
#include <linux/mfd/tmio.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* USB Host Controller Configuration Register
|
||||
*/
|
||||
#define CCR_REVID 0x08 /* b Revision ID */
|
||||
#define CCR_BASE 0x10 /* l USB Control Register Base Address Low */
|
||||
#define CCR_ILME 0x40 /* b Internal Local Memory Enable */
|
||||
#define CCR_PM 0x4c /* w Power Management */
|
||||
#define CCR_INTC 0x50 /* b INT Control */
|
||||
#define CCR_LMW1L 0x54 /* w Local Memory Window 1 LMADRS Low */
|
||||
#define CCR_LMW1H 0x56 /* w Local Memory Window 1 LMADRS High */
|
||||
#define CCR_LMW1BL 0x58 /* w Local Memory Window 1 Base Address Low */
|
||||
#define CCR_LMW1BH 0x5A /* w Local Memory Window 1 Base Address High */
|
||||
#define CCR_LMW2L 0x5C /* w Local Memory Window 2 LMADRS Low */
|
||||
#define CCR_LMW2H 0x5E /* w Local Memory Window 2 LMADRS High */
|
||||
#define CCR_LMW2BL 0x60 /* w Local Memory Window 2 Base Address Low */
|
||||
#define CCR_LMW2BH 0x62 /* w Local Memory Window 2 Base Address High */
|
||||
#define CCR_MISC 0xFC /* b MISC */
|
||||
|
||||
#define CCR_PM_GKEN 0x0001
|
||||
#define CCR_PM_CKRNEN 0x0002
|
||||
#define CCR_PM_USBPW1 0x0004
|
||||
#define CCR_PM_USBPW2 0x0008
|
||||
#define CCR_PM_USBPW3 0x0008
|
||||
#define CCR_PM_PMEE 0x0100
|
||||
#define CCR_PM_PMES 0x8000
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
struct tmio_hcd {
|
||||
void __iomem *ccr;
|
||||
spinlock_t lock; /* protects RMW cycles */
|
||||
};
|
||||
|
||||
#define hcd_to_tmio(hcd) ((struct tmio_hcd *)(hcd_to_ohci(hcd) + 1))
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
static void tmio_write_pm(struct platform_device *dev)
|
||||
{
|
||||
struct usb_hcd *hcd = platform_get_drvdata(dev);
|
||||
struct tmio_hcd *tmio = hcd_to_tmio(hcd);
|
||||
u16 pm;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&tmio->lock, flags);
|
||||
|
||||
pm = CCR_PM_GKEN | CCR_PM_CKRNEN |
|
||||
CCR_PM_PMEE | CCR_PM_PMES;
|
||||
|
||||
tmio_iowrite16(pm, tmio->ccr + CCR_PM);
|
||||
spin_unlock_irqrestore(&tmio->lock, flags);
|
||||
}
|
||||
|
||||
static void tmio_stop_hc(struct platform_device *dev)
|
||||
{
|
||||
struct usb_hcd *hcd = platform_get_drvdata(dev);
|
||||
struct ohci_hcd *ohci = hcd_to_ohci(hcd);
|
||||
struct tmio_hcd *tmio = hcd_to_tmio(hcd);
|
||||
u16 pm;
|
||||
|
||||
pm = CCR_PM_GKEN | CCR_PM_CKRNEN;
|
||||
switch (ohci->num_ports) {
|
||||
default:
|
||||
dev_err(&dev->dev, "Unsupported amount of ports: %d\n", ohci->num_ports);
|
||||
case 3:
|
||||
pm |= CCR_PM_USBPW3;
|
||||
case 2:
|
||||
pm |= CCR_PM_USBPW2;
|
||||
case 1:
|
||||
pm |= CCR_PM_USBPW1;
|
||||
}
|
||||
tmio_iowrite8(0, tmio->ccr + CCR_INTC);
|
||||
tmio_iowrite8(0, tmio->ccr + CCR_ILME);
|
||||
tmio_iowrite16(0, tmio->ccr + CCR_BASE);
|
||||
tmio_iowrite16(0, tmio->ccr + CCR_BASE + 2);
|
||||
tmio_iowrite16(pm, tmio->ccr + CCR_PM);
|
||||
}
|
||||
|
||||
static void tmio_start_hc(struct platform_device *dev)
|
||||
{
|
||||
struct usb_hcd *hcd = platform_get_drvdata(dev);
|
||||
struct tmio_hcd *tmio = hcd_to_tmio(hcd);
|
||||
unsigned long base = hcd->rsrc_start;
|
||||
|
||||
tmio_write_pm(dev);
|
||||
tmio_iowrite16(base, tmio->ccr + CCR_BASE);
|
||||
tmio_iowrite16(base >> 16, tmio->ccr + CCR_BASE + 2);
|
||||
tmio_iowrite8(1, tmio->ccr + CCR_ILME);
|
||||
tmio_iowrite8(2, tmio->ccr + CCR_INTC);
|
||||
|
||||
dev_info(&dev->dev, "revision %d @ 0x%08llx, irq %d\n",
|
||||
tmio_ioread8(tmio->ccr + CCR_REVID), hcd->rsrc_start, hcd->irq);
|
||||
}
|
||||
|
||||
static int ohci_tmio_start(struct usb_hcd *hcd)
|
||||
{
|
||||
struct ohci_hcd *ohci = hcd_to_ohci(hcd);
|
||||
int ret;
|
||||
|
||||
if ((ret = ohci_init(ohci)) < 0)
|
||||
return ret;
|
||||
|
||||
if ((ret = ohci_run(ohci)) < 0) {
|
||||
err("can't start %s", hcd->self.bus_name);
|
||||
ohci_stop(hcd);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct hc_driver ohci_tmio_hc_driver = {
|
||||
.description = hcd_name,
|
||||
.product_desc = "TMIO OHCI USB Host Controller",
|
||||
.hcd_priv_size = sizeof(struct ohci_hcd) + sizeof (struct tmio_hcd),
|
||||
|
||||
/* generic hardware linkage */
|
||||
.irq = ohci_irq,
|
||||
.flags = HCD_USB11 | HCD_MEMORY | HCD_LOCAL_MEM,
|
||||
|
||||
/* basic lifecycle operations */
|
||||
.start = ohci_tmio_start,
|
||||
.stop = ohci_stop,
|
||||
.shutdown = ohci_shutdown,
|
||||
|
||||
/* managing i/o requests and associated device resources */
|
||||
.urb_enqueue = ohci_urb_enqueue,
|
||||
.urb_dequeue = ohci_urb_dequeue,
|
||||
.endpoint_disable = ohci_endpoint_disable,
|
||||
|
||||
/* scheduling support */
|
||||
.get_frame_number = ohci_get_frame,
|
||||
|
||||
/* root hub support */
|
||||
.hub_status_data = ohci_hub_status_data,
|
||||
.hub_control = ohci_hub_control,
|
||||
#ifdef CONFIG_PM
|
||||
.bus_suspend = ohci_bus_suspend,
|
||||
.bus_resume = ohci_bus_resume,
|
||||
#endif
|
||||
.start_port_reset = ohci_start_port_reset,
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
static struct platform_driver ohci_hcd_tmio_driver;
|
||||
|
||||
static int __devinit ohci_hcd_tmio_drv_probe(struct platform_device *dev)
|
||||
{
|
||||
struct mfd_cell *cell = dev->dev.platform_data;
|
||||
struct resource *regs = platform_get_resource(dev, IORESOURCE_MEM, 0);
|
||||
struct resource *config = platform_get_resource(dev, IORESOURCE_MEM, 1);
|
||||
struct resource *sram = platform_get_resource(dev, IORESOURCE_MEM, 2);
|
||||
int irq = platform_get_irq(dev, 0);
|
||||
struct tmio_hcd *tmio;
|
||||
struct ohci_hcd *ohci;
|
||||
struct usb_hcd *hcd;
|
||||
int ret;
|
||||
|
||||
if (usb_disabled())
|
||||
return -ENODEV;
|
||||
|
||||
if (!cell)
|
||||
return -EINVAL;
|
||||
|
||||
hcd = usb_create_hcd(&ohci_tmio_hc_driver, &dev->dev, dev->dev.bus_id);
|
||||
if (!hcd) {
|
||||
ret = -ENOMEM;
|
||||
goto err_usb_create_hcd;
|
||||
}
|
||||
|
||||
hcd->rsrc_start = regs->start;
|
||||
hcd->rsrc_len = regs->end - regs->start + 1;
|
||||
|
||||
tmio = hcd_to_tmio(hcd);
|
||||
|
||||
spin_lock_init(&tmio->lock);
|
||||
|
||||
tmio->ccr = ioremap(config->start, config->end - config->start + 1);
|
||||
if (!tmio->ccr) {
|
||||
ret = -ENOMEM;
|
||||
goto err_ioremap_ccr;
|
||||
}
|
||||
|
||||
hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
|
||||
if (!hcd->regs) {
|
||||
ret = -ENOMEM;
|
||||
goto err_ioremap_regs;
|
||||
}
|
||||
|
||||
if (!dma_declare_coherent_memory(&dev->dev, sram->start,
|
||||
sram->start,
|
||||
sram->end - sram->start + 1,
|
||||
DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE)) {
|
||||
ret = -EBUSY;
|
||||
goto err_dma_declare;
|
||||
}
|
||||
|
||||
if (cell->enable) {
|
||||
ret = cell->enable(dev);
|
||||
if (ret)
|
||||
goto err_enable;
|
||||
}
|
||||
|
||||
tmio_start_hc(dev);
|
||||
ohci = hcd_to_ohci(hcd);
|
||||
ohci_hcd_init(ohci);
|
||||
|
||||
ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
|
||||
if (ret)
|
||||
goto err_add_hcd;
|
||||
|
||||
if (ret == 0)
|
||||
return ret;
|
||||
|
||||
usb_remove_hcd(hcd);
|
||||
|
||||
err_add_hcd:
|
||||
tmio_stop_hc(dev);
|
||||
if (cell->disable)
|
||||
cell->disable(dev);
|
||||
err_enable:
|
||||
dma_release_declared_memory(&dev->dev);
|
||||
err_dma_declare:
|
||||
iounmap(hcd->regs);
|
||||
err_ioremap_regs:
|
||||
iounmap(tmio->ccr);
|
||||
err_ioremap_ccr:
|
||||
usb_put_hcd(hcd);
|
||||
err_usb_create_hcd:
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __devexit ohci_hcd_tmio_drv_remove(struct platform_device *dev)
|
||||
{
|
||||
struct usb_hcd *hcd = platform_get_drvdata(dev);
|
||||
struct tmio_hcd *tmio = hcd_to_tmio(hcd);
|
||||
struct mfd_cell *cell = dev->dev.platform_data;
|
||||
|
||||
usb_remove_hcd(hcd);
|
||||
tmio_stop_hc(dev);
|
||||
if (cell->disable)
|
||||
cell->disable(dev);
|
||||
dma_release_declared_memory(&dev->dev);
|
||||
iounmap(hcd->regs);
|
||||
iounmap(tmio->ccr);
|
||||
usb_put_hcd(hcd);
|
||||
|
||||
platform_set_drvdata(dev, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int ohci_hcd_tmio_drv_suspend(struct platform_device *dev, pm_message_t state)
|
||||
{
|
||||
struct mfd_cell *cell = dev->dev.platform_data;
|
||||
struct usb_hcd *hcd = platform_get_drvdata(dev);
|
||||
struct ohci_hcd *ohci = hcd_to_ohci(hcd);
|
||||
struct tmio_hcd *tmio = hcd_to_tmio(hcd);
|
||||
unsigned long flags;
|
||||
u8 misc;
|
||||
int ret;
|
||||
|
||||
if (time_before(jiffies, ohci->next_statechange))
|
||||
msleep(5);
|
||||
ohci->next_statechange = jiffies;
|
||||
|
||||
spin_lock_irqsave(&tmio->lock, flags);
|
||||
|
||||
misc = tmio_ioread8(tmio->ccr + CCR_MISC);
|
||||
misc |= 1 << 3; /* USSUSP */
|
||||
tmio_iowrite8(misc, tmio->ccr + CCR_MISC);
|
||||
|
||||
spin_unlock_irqrestore(&tmio->lock, flags);
|
||||
|
||||
if (cell->suspend) {
|
||||
ret = cell->suspend(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
hcd->state = HC_STATE_SUSPENDED;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ohci_hcd_tmio_drv_resume(struct platform_device *dev)
|
||||
{
|
||||
struct mfd_cell *cell = dev->dev.platform_data;
|
||||
struct usb_hcd *hcd = platform_get_drvdata(dev);
|
||||
struct ohci_hcd *ohci = hcd_to_ohci(hcd);
|
||||
struct tmio_hcd *tmio = hcd_to_tmio(hcd);
|
||||
unsigned long flags;
|
||||
u8 misc;
|
||||
int ret;
|
||||
|
||||
if (time_before(jiffies, ohci->next_statechange))
|
||||
msleep(5);
|
||||
ohci->next_statechange = jiffies;
|
||||
|
||||
if (cell->resume) {
|
||||
ret = cell->resume(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
tmio_start_hc(dev);
|
||||
|
||||
spin_lock_irqsave(&tmio->lock, flags);
|
||||
|
||||
misc = tmio_ioread8(tmio->ccr + CCR_MISC);
|
||||
misc &= ~(1 << 3); /* USSUSP */
|
||||
tmio_iowrite8(misc, tmio->ccr + CCR_MISC);
|
||||
|
||||
spin_unlock_irqrestore(&tmio->lock, flags);
|
||||
|
||||
ohci_finish_controller_resume(hcd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define ohci_hcd_tmio_drv_suspend NULL
|
||||
#define ohci_hcd_tmio_drv_resume NULL
|
||||
#endif
|
||||
|
||||
static struct platform_driver ohci_hcd_tmio_driver = {
|
||||
.probe = ohci_hcd_tmio_drv_probe,
|
||||
.remove = __devexit_p(ohci_hcd_tmio_drv_remove),
|
||||
.shutdown = usb_hcd_platform_shutdown,
|
||||
.suspend = ohci_hcd_tmio_drv_suspend,
|
||||
.resume = ohci_hcd_tmio_drv_resume,
|
||||
.driver = {
|
||||
.name = "tmio-ohci",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
|
@ -1561,8 +1561,7 @@ usbtest_ioctl (struct usb_interface *intf, unsigned int code, void *buf)
|
|||
if (code != USBTEST_REQUEST)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (param->iterations <= 0 || param->length < 0
|
||||
|| param->sglen < 0 || param->vary < 0)
|
||||
if (param->iterations <= 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (mutex_lock_interruptible(&dev->lock))
|
||||
|
|
|
@ -95,11 +95,20 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
|
|||
#define HUAWEI_PRODUCT_E220 0x1003
|
||||
#define HUAWEI_PRODUCT_E220BIS 0x1004
|
||||
#define HUAWEI_PRODUCT_E1401 0x1401
|
||||
#define HUAWEI_PRODUCT_E1402 0x1402
|
||||
#define HUAWEI_PRODUCT_E1403 0x1403
|
||||
#define HUAWEI_PRODUCT_E1404 0x1404
|
||||
#define HUAWEI_PRODUCT_E1405 0x1405
|
||||
#define HUAWEI_PRODUCT_E1406 0x1406
|
||||
#define HUAWEI_PRODUCT_E1407 0x1407
|
||||
#define HUAWEI_PRODUCT_E1408 0x1408
|
||||
#define HUAWEI_PRODUCT_E1409 0x1409
|
||||
#define HUAWEI_PRODUCT_E140A 0x140A
|
||||
#define HUAWEI_PRODUCT_E140B 0x140B
|
||||
#define HUAWEI_PRODUCT_E140C 0x140C
|
||||
#define HUAWEI_PRODUCT_E140D 0x140D
|
||||
#define HUAWEI_PRODUCT_E140E 0x140E
|
||||
#define HUAWEI_PRODUCT_E140F 0x140F
|
||||
#define HUAWEI_PRODUCT_E1410 0x1410
|
||||
#define HUAWEI_PRODUCT_E1411 0x1411
|
||||
#define HUAWEI_PRODUCT_E1412 0x1412
|
||||
|
@ -110,6 +119,44 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
|
|||
#define HUAWEI_PRODUCT_E1417 0x1417
|
||||
#define HUAWEI_PRODUCT_E1418 0x1418
|
||||
#define HUAWEI_PRODUCT_E1419 0x1419
|
||||
#define HUAWEI_PRODUCT_E141A 0x141A
|
||||
#define HUAWEI_PRODUCT_E141B 0x141B
|
||||
#define HUAWEI_PRODUCT_E141C 0x141C
|
||||
#define HUAWEI_PRODUCT_E141D 0x141D
|
||||
#define HUAWEI_PRODUCT_E141E 0x141E
|
||||
#define HUAWEI_PRODUCT_E141F 0x141F
|
||||
#define HUAWEI_PRODUCT_E1420 0x1420
|
||||
#define HUAWEI_PRODUCT_E1421 0x1421
|
||||
#define HUAWEI_PRODUCT_E1422 0x1422
|
||||
#define HUAWEI_PRODUCT_E1423 0x1423
|
||||
#define HUAWEI_PRODUCT_E1424 0x1424
|
||||
#define HUAWEI_PRODUCT_E1425 0x1425
|
||||
#define HUAWEI_PRODUCT_E1426 0x1426
|
||||
#define HUAWEI_PRODUCT_E1427 0x1427
|
||||
#define HUAWEI_PRODUCT_E1428 0x1428
|
||||
#define HUAWEI_PRODUCT_E1429 0x1429
|
||||
#define HUAWEI_PRODUCT_E142A 0x142A
|
||||
#define HUAWEI_PRODUCT_E142B 0x142B
|
||||
#define HUAWEI_PRODUCT_E142C 0x142C
|
||||
#define HUAWEI_PRODUCT_E142D 0x142D
|
||||
#define HUAWEI_PRODUCT_E142E 0x142E
|
||||
#define HUAWEI_PRODUCT_E142F 0x142F
|
||||
#define HUAWEI_PRODUCT_E1430 0x1430
|
||||
#define HUAWEI_PRODUCT_E1431 0x1431
|
||||
#define HUAWEI_PRODUCT_E1432 0x1432
|
||||
#define HUAWEI_PRODUCT_E1433 0x1433
|
||||
#define HUAWEI_PRODUCT_E1434 0x1434
|
||||
#define HUAWEI_PRODUCT_E1435 0x1435
|
||||
#define HUAWEI_PRODUCT_E1436 0x1436
|
||||
#define HUAWEI_PRODUCT_E1437 0x1437
|
||||
#define HUAWEI_PRODUCT_E1438 0x1438
|
||||
#define HUAWEI_PRODUCT_E1439 0x1439
|
||||
#define HUAWEI_PRODUCT_E143A 0x143A
|
||||
#define HUAWEI_PRODUCT_E143B 0x143B
|
||||
#define HUAWEI_PRODUCT_E143C 0x143C
|
||||
#define HUAWEI_PRODUCT_E143D 0x143D
|
||||
#define HUAWEI_PRODUCT_E143E 0x143E
|
||||
#define HUAWEI_PRODUCT_E143F 0x143F
|
||||
|
||||
#define NOVATELWIRELESS_VENDOR_ID 0x1410
|
||||
|
||||
|
@ -207,6 +254,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
|
|||
/* ZTE PRODUCTS */
|
||||
#define ZTE_VENDOR_ID 0x19d2
|
||||
#define ZTE_PRODUCT_MF628 0x0015
|
||||
#define ZTE_PRODUCT_MF626 0x0031
|
||||
#define ZTE_PRODUCT_CDMA_TECH 0xfffe
|
||||
|
||||
/* Ericsson products */
|
||||
|
@ -248,11 +296,20 @@ static struct usb_device_id option_ids[] = {
|
|||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1402, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1404, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1407, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140A, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140B, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140C, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140D, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140E, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140F, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412, 0xff, 0xff, 0xff) },
|
||||
|
@ -263,6 +320,44 @@ static struct usb_device_id option_ids[] = {
|
|||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141A, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141B, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141C, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141D, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141E, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141F, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1420, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1421, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1422, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1423, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1424, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1425, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1426, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1427, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1428, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1429, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142A, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142B, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142C, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142D, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142E, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142F, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1430, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1431, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1432, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1433, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1434, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1435, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1436, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1437, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1438, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1439, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143A, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143B, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143C, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) },
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */
|
||||
|
@ -336,6 +431,7 @@ 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_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) },
|
||||
|
|
|
@ -95,11 +95,10 @@ int usb_stor_huawei_e220_init(struct us_data *us)
|
|||
{
|
||||
int result;
|
||||
|
||||
us->iobuf[0] = 0x1;
|
||||
result = usb_stor_control_msg(us, us->send_ctrl_pipe,
|
||||
USB_REQ_SET_FEATURE,
|
||||
USB_TYPE_STANDARD | USB_RECIP_DEVICE,
|
||||
0x01, 0x0, us->iobuf, 0x1, 1000);
|
||||
0x01, 0x0, NULL, 0x0, 1000);
|
||||
US_DEBUGP("usb_control_msg performing result is %d\n", result);
|
||||
return (result ? 0 : -1);
|
||||
}
|
||||
|
|
|
@ -1628,97 +1628,332 @@ UNUSUAL_DEV( 0x1210, 0x0003, 0x0100, 0x0100,
|
|||
/* Reported by fangxiaozhi <huananhu@huawei.com>
|
||||
* This brings the HUAWEI data card devices into multi-port mode
|
||||
*/
|
||||
UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1402, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1404, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1407, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x140A, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x140B, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x140C, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x140D, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x140E, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x140F, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000,
|
||||
UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x141A, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x141B, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x141C, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x141D, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x141E, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x141F, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1420, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1421, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1422, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1423, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1424, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1425, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1426, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1427, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1428, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1429, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x142A, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x142B, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x142C, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x142D, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x142E, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x142F, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1430, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1431, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1432, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1433, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1434, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1435, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1436, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1437, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1438, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x1439, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x143A, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x143B, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x143C, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x143D, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x143E, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
0),
|
||||
UNUSUAL_DEV( 0x12d1, 0x143F, 0x0000, 0x0000,
|
||||
"HUAWEI MOBILE",
|
||||
"Mass Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_huawei_e220_init,
|
||||
|
@ -1745,6 +1980,15 @@ UNUSUAL_DEV( 0x14cd, 0x6600, 0x0201, 0x0201,
|
|||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
US_FL_IGNORE_RESIDUE ),
|
||||
|
||||
/* Reported by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
|
||||
* JMicron responds to USN and several other SCSI ioctls with a
|
||||
* residue that causes subsequent I/O requests to fail. */
|
||||
UNUSUAL_DEV( 0x152d, 0x2329, 0x0100, 0x0100,
|
||||
"JMicron",
|
||||
"USB to ATA/ATAPI Bridge",
|
||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
US_FL_IGNORE_RESIDUE ),
|
||||
|
||||
/* Reported by Robert Schedel <r.schedel@yahoo.de>
|
||||
* Note: this is a 'super top' device like the above 14cd/6600 device */
|
||||
UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x0201,
|
||||
|
@ -1818,6 +2062,15 @@ UNUSUAL_DEV( 0x2770, 0x915d, 0x0010, 0x0010,
|
|||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
US_FL_FIX_CAPACITY ),
|
||||
|
||||
/* Reported by Frederic Marchal <frederic.marchal@wowcompany.com>
|
||||
* Mio Moov 330
|
||||
*/
|
||||
UNUSUAL_DEV( 0x3340, 0xffff, 0x0000, 0x0000,
|
||||
"Mitac",
|
||||
"Mio DigiWalker USB Sync",
|
||||
US_SC_DEVICE,US_PR_DEVICE,NULL,
|
||||
US_FL_MAX_SECTORS_64 ),
|
||||
|
||||
/* Reported by Andrey Rahmatullin <wrar@altlinux.org> */
|
||||
UNUSUAL_DEV( 0x4102, 0x1020, 0x0100, 0x0100,
|
||||
"iRiver",
|
||||
|
|
Loading…
Reference in a new issue