USB fixes for 4.1-rc4
Here are some USB fixes and new device ids for 4.1-rc4. All are pretty minor, and have been in linux-next successfully. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEABECAAYFAlVX4DEACgkQMUfUDdst+ynfngCfcs8LxLL4au1ig7X7b5zN9qzw SYwAnj5IoQEDMVfpvoq1Pb2+g3KMCodl =GMQH -----END PGP SIGNATURE----- Merge tag 'usb-4.1-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb Pull USB fixes from Greg KH: "Here are some USB fixes and new device ids for 4.1-rc4. All are pretty minor, and have been in linux-next successfully" * tag 'usb-4.1-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: usb-storage: Add NO_WP_DETECT quirk for Lacie 059f:0651 devices Added another USB product ID for ELAN touchscreen quirks. xhci: gracefully handle xhci_irq dead device xhci: Solve full event ring by increasing TRBS_PER_SEGMENT to 256 xhci: fix isoc endpoint dequeue from advancing too far on transaction error usb: chipidea: debug: avoid out of bound read USB: visor: Match I330 phone more precisely USB: pl2303: Remove support for Samsung I330 USB: cp210x: add ID for KCF Technologies PRN device usb: gadget: remove incorrect __init/__exit annotations usb: phy: isp1301: work around tps65010 dependency usb: gadget: serial: fix re-ordering of tx data usb: gadget: hid: Fix static variable usage usb: gadget: configfs: Fix interfaces array NULL-termination usb: gadget: xilinx: fix devm_ioremap_resource() check usb: dwc3: dwc3-omap: correct the register macros
This commit is contained in:
commit
c0655fe9b0
|
@ -88,9 +88,13 @@ static ssize_t ci_port_test_write(struct file *file, const char __user *ubuf,
|
||||||
char buf[32];
|
char buf[32];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (copy_from_user(buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
|
count = min_t(size_t, sizeof(buf) - 1, count);
|
||||||
|
if (copy_from_user(buf, ubuf, count))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
|
/* sscanf requires a zero terminated string */
|
||||||
|
buf[count] = '\0';
|
||||||
|
|
||||||
if (sscanf(buf, "%u", &mode) != 1)
|
if (sscanf(buf, "%u", &mode) != 1)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
|
|
@ -106,6 +106,9 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||||
{ USB_DEVICE(0x04f3, 0x010c), .driver_info =
|
{ USB_DEVICE(0x04f3, 0x010c), .driver_info =
|
||||||
USB_QUIRK_DEVICE_QUALIFIER },
|
USB_QUIRK_DEVICE_QUALIFIER },
|
||||||
|
|
||||||
|
{ USB_DEVICE(0x04f3, 0x0125), .driver_info =
|
||||||
|
USB_QUIRK_DEVICE_QUALIFIER },
|
||||||
|
|
||||||
{ USB_DEVICE(0x04f3, 0x016f), .driver_info =
|
{ USB_DEVICE(0x04f3, 0x016f), .driver_info =
|
||||||
USB_QUIRK_DEVICE_QUALIFIER },
|
USB_QUIRK_DEVICE_QUALIFIER },
|
||||||
|
|
||||||
|
|
|
@ -65,8 +65,8 @@
|
||||||
#define USBOTGSS_IRQENABLE_SET_MISC 0x003c
|
#define USBOTGSS_IRQENABLE_SET_MISC 0x003c
|
||||||
#define USBOTGSS_IRQENABLE_CLR_MISC 0x0040
|
#define USBOTGSS_IRQENABLE_CLR_MISC 0x0040
|
||||||
#define USBOTGSS_IRQMISC_OFFSET 0x03fc
|
#define USBOTGSS_IRQMISC_OFFSET 0x03fc
|
||||||
#define USBOTGSS_UTMI_OTG_CTRL 0x0080
|
#define USBOTGSS_UTMI_OTG_STATUS 0x0080
|
||||||
#define USBOTGSS_UTMI_OTG_STATUS 0x0084
|
#define USBOTGSS_UTMI_OTG_CTRL 0x0084
|
||||||
#define USBOTGSS_UTMI_OTG_OFFSET 0x0480
|
#define USBOTGSS_UTMI_OTG_OFFSET 0x0480
|
||||||
#define USBOTGSS_TXFIFO_DEPTH 0x0508
|
#define USBOTGSS_TXFIFO_DEPTH 0x0508
|
||||||
#define USBOTGSS_RXFIFO_DEPTH 0x050c
|
#define USBOTGSS_RXFIFO_DEPTH 0x050c
|
||||||
|
@ -98,20 +98,20 @@
|
||||||
#define USBOTGSS_IRQMISC_DISCHRGVBUS_FALL (1 << 3)
|
#define USBOTGSS_IRQMISC_DISCHRGVBUS_FALL (1 << 3)
|
||||||
#define USBOTGSS_IRQMISC_IDPULLUP_FALL (1 << 0)
|
#define USBOTGSS_IRQMISC_IDPULLUP_FALL (1 << 0)
|
||||||
|
|
||||||
/* UTMI_OTG_CTRL REGISTER */
|
|
||||||
#define USBOTGSS_UTMI_OTG_CTRL_DRVVBUS (1 << 5)
|
|
||||||
#define USBOTGSS_UTMI_OTG_CTRL_CHRGVBUS (1 << 4)
|
|
||||||
#define USBOTGSS_UTMI_OTG_CTRL_DISCHRGVBUS (1 << 3)
|
|
||||||
#define USBOTGSS_UTMI_OTG_CTRL_IDPULLUP (1 << 0)
|
|
||||||
|
|
||||||
/* UTMI_OTG_STATUS REGISTER */
|
/* UTMI_OTG_STATUS REGISTER */
|
||||||
#define USBOTGSS_UTMI_OTG_STATUS_SW_MODE (1 << 31)
|
#define USBOTGSS_UTMI_OTG_STATUS_DRVVBUS (1 << 5)
|
||||||
#define USBOTGSS_UTMI_OTG_STATUS_POWERPRESENT (1 << 9)
|
#define USBOTGSS_UTMI_OTG_STATUS_CHRGVBUS (1 << 4)
|
||||||
#define USBOTGSS_UTMI_OTG_STATUS_TXBITSTUFFENABLE (1 << 8)
|
#define USBOTGSS_UTMI_OTG_STATUS_DISCHRGVBUS (1 << 3)
|
||||||
#define USBOTGSS_UTMI_OTG_STATUS_IDDIG (1 << 4)
|
#define USBOTGSS_UTMI_OTG_STATUS_IDPULLUP (1 << 0)
|
||||||
#define USBOTGSS_UTMI_OTG_STATUS_SESSEND (1 << 3)
|
|
||||||
#define USBOTGSS_UTMI_OTG_STATUS_SESSVALID (1 << 2)
|
/* UTMI_OTG_CTRL REGISTER */
|
||||||
#define USBOTGSS_UTMI_OTG_STATUS_VBUSVALID (1 << 1)
|
#define USBOTGSS_UTMI_OTG_CTRL_SW_MODE (1 << 31)
|
||||||
|
#define USBOTGSS_UTMI_OTG_CTRL_POWERPRESENT (1 << 9)
|
||||||
|
#define USBOTGSS_UTMI_OTG_CTRL_TXBITSTUFFENABLE (1 << 8)
|
||||||
|
#define USBOTGSS_UTMI_OTG_CTRL_IDDIG (1 << 4)
|
||||||
|
#define USBOTGSS_UTMI_OTG_CTRL_SESSEND (1 << 3)
|
||||||
|
#define USBOTGSS_UTMI_OTG_CTRL_SESSVALID (1 << 2)
|
||||||
|
#define USBOTGSS_UTMI_OTG_CTRL_VBUSVALID (1 << 1)
|
||||||
|
|
||||||
struct dwc3_omap {
|
struct dwc3_omap {
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
@ -119,7 +119,7 @@ struct dwc3_omap {
|
||||||
int irq;
|
int irq;
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
|
|
||||||
u32 utmi_otg_status;
|
u32 utmi_otg_ctrl;
|
||||||
u32 utmi_otg_offset;
|
u32 utmi_otg_offset;
|
||||||
u32 irqmisc_offset;
|
u32 irqmisc_offset;
|
||||||
u32 irq_eoi_offset;
|
u32 irq_eoi_offset;
|
||||||
|
@ -153,15 +153,15 @@ static inline void dwc3_omap_writel(void __iomem *base, u32 offset, u32 value)
|
||||||
writel(value, base + offset);
|
writel(value, base + offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 dwc3_omap_read_utmi_status(struct dwc3_omap *omap)
|
static u32 dwc3_omap_read_utmi_ctrl(struct dwc3_omap *omap)
|
||||||
{
|
{
|
||||||
return dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_STATUS +
|
return dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_CTRL +
|
||||||
omap->utmi_otg_offset);
|
omap->utmi_otg_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dwc3_omap_write_utmi_status(struct dwc3_omap *omap, u32 value)
|
static void dwc3_omap_write_utmi_ctrl(struct dwc3_omap *omap, u32 value)
|
||||||
{
|
{
|
||||||
dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_STATUS +
|
dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_CTRL +
|
||||||
omap->utmi_otg_offset, value);
|
omap->utmi_otg_offset, value);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -235,25 +235,25 @@ static void dwc3_omap_set_mailbox(struct dwc3_omap *omap,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val = dwc3_omap_read_utmi_status(omap);
|
val = dwc3_omap_read_utmi_ctrl(omap);
|
||||||
val &= ~(USBOTGSS_UTMI_OTG_STATUS_IDDIG
|
val &= ~(USBOTGSS_UTMI_OTG_CTRL_IDDIG
|
||||||
| USBOTGSS_UTMI_OTG_STATUS_VBUSVALID
|
| USBOTGSS_UTMI_OTG_CTRL_VBUSVALID
|
||||||
| USBOTGSS_UTMI_OTG_STATUS_SESSEND);
|
| USBOTGSS_UTMI_OTG_CTRL_SESSEND);
|
||||||
val |= USBOTGSS_UTMI_OTG_STATUS_SESSVALID
|
val |= USBOTGSS_UTMI_OTG_CTRL_SESSVALID
|
||||||
| USBOTGSS_UTMI_OTG_STATUS_POWERPRESENT;
|
| USBOTGSS_UTMI_OTG_CTRL_POWERPRESENT;
|
||||||
dwc3_omap_write_utmi_status(omap, val);
|
dwc3_omap_write_utmi_ctrl(omap, val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OMAP_DWC3_VBUS_VALID:
|
case OMAP_DWC3_VBUS_VALID:
|
||||||
dev_dbg(omap->dev, "VBUS Connect\n");
|
dev_dbg(omap->dev, "VBUS Connect\n");
|
||||||
|
|
||||||
val = dwc3_omap_read_utmi_status(omap);
|
val = dwc3_omap_read_utmi_ctrl(omap);
|
||||||
val &= ~USBOTGSS_UTMI_OTG_STATUS_SESSEND;
|
val &= ~USBOTGSS_UTMI_OTG_CTRL_SESSEND;
|
||||||
val |= USBOTGSS_UTMI_OTG_STATUS_IDDIG
|
val |= USBOTGSS_UTMI_OTG_CTRL_IDDIG
|
||||||
| USBOTGSS_UTMI_OTG_STATUS_VBUSVALID
|
| USBOTGSS_UTMI_OTG_CTRL_VBUSVALID
|
||||||
| USBOTGSS_UTMI_OTG_STATUS_SESSVALID
|
| USBOTGSS_UTMI_OTG_CTRL_SESSVALID
|
||||||
| USBOTGSS_UTMI_OTG_STATUS_POWERPRESENT;
|
| USBOTGSS_UTMI_OTG_CTRL_POWERPRESENT;
|
||||||
dwc3_omap_write_utmi_status(omap, val);
|
dwc3_omap_write_utmi_ctrl(omap, val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OMAP_DWC3_ID_FLOAT:
|
case OMAP_DWC3_ID_FLOAT:
|
||||||
|
@ -263,13 +263,13 @@ static void dwc3_omap_set_mailbox(struct dwc3_omap *omap,
|
||||||
case OMAP_DWC3_VBUS_OFF:
|
case OMAP_DWC3_VBUS_OFF:
|
||||||
dev_dbg(omap->dev, "VBUS Disconnect\n");
|
dev_dbg(omap->dev, "VBUS Disconnect\n");
|
||||||
|
|
||||||
val = dwc3_omap_read_utmi_status(omap);
|
val = dwc3_omap_read_utmi_ctrl(omap);
|
||||||
val &= ~(USBOTGSS_UTMI_OTG_STATUS_SESSVALID
|
val &= ~(USBOTGSS_UTMI_OTG_CTRL_SESSVALID
|
||||||
| USBOTGSS_UTMI_OTG_STATUS_VBUSVALID
|
| USBOTGSS_UTMI_OTG_CTRL_VBUSVALID
|
||||||
| USBOTGSS_UTMI_OTG_STATUS_POWERPRESENT);
|
| USBOTGSS_UTMI_OTG_CTRL_POWERPRESENT);
|
||||||
val |= USBOTGSS_UTMI_OTG_STATUS_SESSEND
|
val |= USBOTGSS_UTMI_OTG_CTRL_SESSEND
|
||||||
| USBOTGSS_UTMI_OTG_STATUS_IDDIG;
|
| USBOTGSS_UTMI_OTG_CTRL_IDDIG;
|
||||||
dwc3_omap_write_utmi_status(omap, val);
|
dwc3_omap_write_utmi_ctrl(omap, val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -422,22 +422,22 @@ static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap)
|
||||||
struct device_node *node = omap->dev->of_node;
|
struct device_node *node = omap->dev->of_node;
|
||||||
int utmi_mode = 0;
|
int utmi_mode = 0;
|
||||||
|
|
||||||
reg = dwc3_omap_read_utmi_status(omap);
|
reg = dwc3_omap_read_utmi_ctrl(omap);
|
||||||
|
|
||||||
of_property_read_u32(node, "utmi-mode", &utmi_mode);
|
of_property_read_u32(node, "utmi-mode", &utmi_mode);
|
||||||
|
|
||||||
switch (utmi_mode) {
|
switch (utmi_mode) {
|
||||||
case DWC3_OMAP_UTMI_MODE_SW:
|
case DWC3_OMAP_UTMI_MODE_SW:
|
||||||
reg |= USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
|
reg |= USBOTGSS_UTMI_OTG_CTRL_SW_MODE;
|
||||||
break;
|
break;
|
||||||
case DWC3_OMAP_UTMI_MODE_HW:
|
case DWC3_OMAP_UTMI_MODE_HW:
|
||||||
reg &= ~USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
|
reg &= ~USBOTGSS_UTMI_OTG_CTRL_SW_MODE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dev_dbg(omap->dev, "UNKNOWN utmi mode %d\n", utmi_mode);
|
dev_dbg(omap->dev, "UNKNOWN utmi mode %d\n", utmi_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
dwc3_omap_write_utmi_status(omap, reg);
|
dwc3_omap_write_utmi_ctrl(omap, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dwc3_omap_extcon_register(struct dwc3_omap *omap)
|
static int dwc3_omap_extcon_register(struct dwc3_omap *omap)
|
||||||
|
@ -614,7 +614,7 @@ static int dwc3_omap_suspend(struct device *dev)
|
||||||
{
|
{
|
||||||
struct dwc3_omap *omap = dev_get_drvdata(dev);
|
struct dwc3_omap *omap = dev_get_drvdata(dev);
|
||||||
|
|
||||||
omap->utmi_otg_status = dwc3_omap_read_utmi_status(omap);
|
omap->utmi_otg_ctrl = dwc3_omap_read_utmi_ctrl(omap);
|
||||||
dwc3_omap_disable_irqs(omap);
|
dwc3_omap_disable_irqs(omap);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -624,7 +624,7 @@ static int dwc3_omap_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
struct dwc3_omap *omap = dev_get_drvdata(dev);
|
struct dwc3_omap *omap = dev_get_drvdata(dev);
|
||||||
|
|
||||||
dwc3_omap_write_utmi_status(omap, omap->utmi_otg_status);
|
dwc3_omap_write_utmi_ctrl(omap, omap->utmi_otg_ctrl);
|
||||||
dwc3_omap_enable_irqs(omap);
|
dwc3_omap_enable_irqs(omap);
|
||||||
|
|
||||||
pm_runtime_disable(dev);
|
pm_runtime_disable(dev);
|
||||||
|
|
|
@ -1295,6 +1295,7 @@ static void purge_configs_funcs(struct gadget_info *gi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c->next_interface_id = 0;
|
c->next_interface_id = 0;
|
||||||
|
memset(c->interface, 0, sizeof(c->interface));
|
||||||
c->superspeed = 0;
|
c->superspeed = 0;
|
||||||
c->highspeed = 0;
|
c->highspeed = 0;
|
||||||
c->fullspeed = 0;
|
c->fullspeed = 0;
|
||||||
|
|
|
@ -437,12 +437,20 @@ static int hidg_setup(struct usb_function *f,
|
||||||
| USB_REQ_GET_DESCRIPTOR):
|
| USB_REQ_GET_DESCRIPTOR):
|
||||||
switch (value >> 8) {
|
switch (value >> 8) {
|
||||||
case HID_DT_HID:
|
case HID_DT_HID:
|
||||||
|
{
|
||||||
|
struct hid_descriptor hidg_desc_copy = hidg_desc;
|
||||||
|
|
||||||
VDBG(cdev, "USB_REQ_GET_DESCRIPTOR: HID\n");
|
VDBG(cdev, "USB_REQ_GET_DESCRIPTOR: HID\n");
|
||||||
|
hidg_desc_copy.desc[0].bDescriptorType = HID_DT_REPORT;
|
||||||
|
hidg_desc_copy.desc[0].wDescriptorLength =
|
||||||
|
cpu_to_le16(hidg->report_desc_length);
|
||||||
|
|
||||||
length = min_t(unsigned short, length,
|
length = min_t(unsigned short, length,
|
||||||
hidg_desc.bLength);
|
hidg_desc_copy.bLength);
|
||||||
memcpy(req->buf, &hidg_desc, length);
|
memcpy(req->buf, &hidg_desc_copy, length);
|
||||||
goto respond;
|
goto respond;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case HID_DT_REPORT:
|
case HID_DT_REPORT:
|
||||||
VDBG(cdev, "USB_REQ_GET_DESCRIPTOR: REPORT\n");
|
VDBG(cdev, "USB_REQ_GET_DESCRIPTOR: REPORT\n");
|
||||||
length = min_t(unsigned short, length,
|
length = min_t(unsigned short, length,
|
||||||
|
@ -632,6 +640,10 @@ static int hidg_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
hidg_fs_in_ep_desc.wMaxPacketSize = cpu_to_le16(hidg->report_length);
|
hidg_fs_in_ep_desc.wMaxPacketSize = cpu_to_le16(hidg->report_length);
|
||||||
hidg_hs_out_ep_desc.wMaxPacketSize = cpu_to_le16(hidg->report_length);
|
hidg_hs_out_ep_desc.wMaxPacketSize = cpu_to_le16(hidg->report_length);
|
||||||
hidg_fs_out_ep_desc.wMaxPacketSize = cpu_to_le16(hidg->report_length);
|
hidg_fs_out_ep_desc.wMaxPacketSize = cpu_to_le16(hidg->report_length);
|
||||||
|
/*
|
||||||
|
* We can use hidg_desc struct here but we should not relay
|
||||||
|
* that its content won't change after returning from this function.
|
||||||
|
*/
|
||||||
hidg_desc.desc[0].bDescriptorType = HID_DT_REPORT;
|
hidg_desc.desc[0].bDescriptorType = HID_DT_REPORT;
|
||||||
hidg_desc.desc[0].wDescriptorLength =
|
hidg_desc.desc[0].wDescriptorLength =
|
||||||
cpu_to_le16(hidg->report_desc_length);
|
cpu_to_le16(hidg->report_desc_length);
|
||||||
|
|
|
@ -113,6 +113,7 @@ struct gs_port {
|
||||||
int write_allocated;
|
int write_allocated;
|
||||||
struct gs_buf port_write_buf;
|
struct gs_buf port_write_buf;
|
||||||
wait_queue_head_t drain_wait; /* wait while writes drain */
|
wait_queue_head_t drain_wait; /* wait while writes drain */
|
||||||
|
bool write_busy;
|
||||||
|
|
||||||
/* REVISIT this state ... */
|
/* REVISIT this state ... */
|
||||||
struct usb_cdc_line_coding port_line_coding; /* 8-N-1 etc */
|
struct usb_cdc_line_coding port_line_coding; /* 8-N-1 etc */
|
||||||
|
@ -363,7 +364,7 @@ __acquires(&port->port_lock)
|
||||||
int status = 0;
|
int status = 0;
|
||||||
bool do_tty_wake = false;
|
bool do_tty_wake = false;
|
||||||
|
|
||||||
while (!list_empty(pool)) {
|
while (!port->write_busy && !list_empty(pool)) {
|
||||||
struct usb_request *req;
|
struct usb_request *req;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
|
@ -393,9 +394,11 @@ __acquires(&port->port_lock)
|
||||||
* NOTE that we may keep sending data for a while after
|
* NOTE that we may keep sending data for a while after
|
||||||
* the TTY closed (dev->ioport->port_tty is NULL).
|
* the TTY closed (dev->ioport->port_tty is NULL).
|
||||||
*/
|
*/
|
||||||
|
port->write_busy = true;
|
||||||
spin_unlock(&port->port_lock);
|
spin_unlock(&port->port_lock);
|
||||||
status = usb_ep_queue(in, req, GFP_ATOMIC);
|
status = usb_ep_queue(in, req, GFP_ATOMIC);
|
||||||
spin_lock(&port->port_lock);
|
spin_lock(&port->port_lock);
|
||||||
|
port->write_busy = false;
|
||||||
|
|
||||||
if (status) {
|
if (status) {
|
||||||
pr_debug("%s: %s %s err %d\n",
|
pr_debug("%s: %s %s err %d\n",
|
||||||
|
|
|
@ -121,7 +121,7 @@ static struct usb_function *f_msg;
|
||||||
/*
|
/*
|
||||||
* We _always_ have both ACM and mass storage functions.
|
* We _always_ have both ACM and mass storage functions.
|
||||||
*/
|
*/
|
||||||
static int __init acm_ms_do_config(struct usb_configuration *c)
|
static int acm_ms_do_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
struct fsg_opts *opts;
|
struct fsg_opts *opts;
|
||||||
int status;
|
int status;
|
||||||
|
@ -174,7 +174,7 @@ static struct usb_configuration acm_ms_config_driver = {
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static int __init acm_ms_bind(struct usb_composite_dev *cdev)
|
static int acm_ms_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
struct usb_gadget *gadget = cdev->gadget;
|
struct usb_gadget *gadget = cdev->gadget;
|
||||||
struct fsg_opts *opts;
|
struct fsg_opts *opts;
|
||||||
|
@ -249,7 +249,7 @@ fail_get_msg:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit acm_ms_unbind(struct usb_composite_dev *cdev)
|
static int acm_ms_unbind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
usb_put_function(f_msg);
|
usb_put_function(f_msg);
|
||||||
usb_put_function_instance(fi_msg);
|
usb_put_function_instance(fi_msg);
|
||||||
|
@ -258,13 +258,13 @@ static int __exit acm_ms_unbind(struct usb_composite_dev *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver acm_ms_driver = {
|
static struct usb_composite_driver acm_ms_driver = {
|
||||||
.name = "g_acm_ms",
|
.name = "g_acm_ms",
|
||||||
.dev = &device_desc,
|
.dev = &device_desc,
|
||||||
.max_speed = USB_SPEED_SUPER,
|
.max_speed = USB_SPEED_SUPER,
|
||||||
.strings = dev_strings,
|
.strings = dev_strings,
|
||||||
.bind = acm_ms_bind,
|
.bind = acm_ms_bind,
|
||||||
.unbind = __exit_p(acm_ms_unbind),
|
.unbind = acm_ms_unbind,
|
||||||
};
|
};
|
||||||
|
|
||||||
module_usb_composite_driver(acm_ms_driver);
|
module_usb_composite_driver(acm_ms_driver);
|
||||||
|
|
|
@ -167,7 +167,7 @@ static const struct usb_descriptor_header *otg_desc[] = {
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static int __init audio_do_config(struct usb_configuration *c)
|
static int audio_do_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ static struct usb_configuration audio_config_driver = {
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static int __init audio_bind(struct usb_composite_dev *cdev)
|
static int audio_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
#ifndef CONFIG_GADGET_UAC1
|
#ifndef CONFIG_GADGET_UAC1
|
||||||
struct f_uac2_opts *uac2_opts;
|
struct f_uac2_opts *uac2_opts;
|
||||||
|
@ -276,7 +276,7 @@ fail:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit audio_unbind(struct usb_composite_dev *cdev)
|
static int audio_unbind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_GADGET_UAC1
|
#ifdef CONFIG_GADGET_UAC1
|
||||||
if (!IS_ERR_OR_NULL(f_uac1))
|
if (!IS_ERR_OR_NULL(f_uac1))
|
||||||
|
@ -292,13 +292,13 @@ static int __exit audio_unbind(struct usb_composite_dev *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver audio_driver = {
|
static struct usb_composite_driver audio_driver = {
|
||||||
.name = "g_audio",
|
.name = "g_audio",
|
||||||
.dev = &device_desc,
|
.dev = &device_desc,
|
||||||
.strings = audio_strings,
|
.strings = audio_strings,
|
||||||
.max_speed = USB_SPEED_HIGH,
|
.max_speed = USB_SPEED_HIGH,
|
||||||
.bind = audio_bind,
|
.bind = audio_bind,
|
||||||
.unbind = __exit_p(audio_unbind),
|
.unbind = audio_unbind,
|
||||||
};
|
};
|
||||||
|
|
||||||
module_usb_composite_driver(audio_driver);
|
module_usb_composite_driver(audio_driver);
|
||||||
|
|
|
@ -104,7 +104,7 @@ static struct usb_function_instance *fi_ecm;
|
||||||
/*
|
/*
|
||||||
* We _always_ have both CDC ECM and CDC ACM functions.
|
* We _always_ have both CDC ECM and CDC ACM functions.
|
||||||
*/
|
*/
|
||||||
static int __init cdc_do_config(struct usb_configuration *c)
|
static int cdc_do_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
@ -153,7 +153,7 @@ static struct usb_configuration cdc_config_driver = {
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static int __init cdc_bind(struct usb_composite_dev *cdev)
|
static int cdc_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
struct usb_gadget *gadget = cdev->gadget;
|
struct usb_gadget *gadget = cdev->gadget;
|
||||||
struct f_ecm_opts *ecm_opts;
|
struct f_ecm_opts *ecm_opts;
|
||||||
|
@ -211,7 +211,7 @@ fail:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit cdc_unbind(struct usb_composite_dev *cdev)
|
static int cdc_unbind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
usb_put_function(f_acm);
|
usb_put_function(f_acm);
|
||||||
usb_put_function_instance(fi_serial);
|
usb_put_function_instance(fi_serial);
|
||||||
|
@ -222,13 +222,13 @@ static int __exit cdc_unbind(struct usb_composite_dev *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver cdc_driver = {
|
static struct usb_composite_driver cdc_driver = {
|
||||||
.name = "g_cdc",
|
.name = "g_cdc",
|
||||||
.dev = &device_desc,
|
.dev = &device_desc,
|
||||||
.strings = dev_strings,
|
.strings = dev_strings,
|
||||||
.max_speed = USB_SPEED_HIGH,
|
.max_speed = USB_SPEED_HIGH,
|
||||||
.bind = cdc_bind,
|
.bind = cdc_bind,
|
||||||
.unbind = __exit_p(cdc_unbind),
|
.unbind = cdc_unbind,
|
||||||
};
|
};
|
||||||
|
|
||||||
module_usb_composite_driver(cdc_driver);
|
module_usb_composite_driver(cdc_driver);
|
||||||
|
|
|
@ -284,7 +284,7 @@ fail_1:
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init dbgp_bind(struct usb_gadget *gadget,
|
static int dbgp_bind(struct usb_gadget *gadget,
|
||||||
struct usb_gadget_driver *driver)
|
struct usb_gadget_driver *driver)
|
||||||
{
|
{
|
||||||
int err, stp;
|
int err, stp;
|
||||||
|
@ -406,7 +406,7 @@ fail:
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __refdata struct usb_gadget_driver dbgp_driver = {
|
static struct usb_gadget_driver dbgp_driver = {
|
||||||
.function = "dbgp",
|
.function = "dbgp",
|
||||||
.max_speed = USB_SPEED_HIGH,
|
.max_speed = USB_SPEED_HIGH,
|
||||||
.bind = dbgp_bind,
|
.bind = dbgp_bind,
|
||||||
|
|
|
@ -222,7 +222,7 @@ static struct usb_function *f_rndis;
|
||||||
* the first one present. That's to make Microsoft's drivers happy,
|
* the first one present. That's to make Microsoft's drivers happy,
|
||||||
* and to follow DOCSIS 1.0 (cable modem standard).
|
* and to follow DOCSIS 1.0 (cable modem standard).
|
||||||
*/
|
*/
|
||||||
static int __init rndis_do_config(struct usb_configuration *c)
|
static int rndis_do_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
@ -264,7 +264,7 @@ MODULE_PARM_DESC(use_eem, "use CDC EEM mode");
|
||||||
/*
|
/*
|
||||||
* We _always_ have an ECM, CDC Subset, or EEM configuration.
|
* We _always_ have an ECM, CDC Subset, or EEM configuration.
|
||||||
*/
|
*/
|
||||||
static int __init eth_do_config(struct usb_configuration *c)
|
static int eth_do_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
|
@ -318,7 +318,7 @@ static struct usb_configuration eth_config_driver = {
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static int __init eth_bind(struct usb_composite_dev *cdev)
|
static int eth_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
struct usb_gadget *gadget = cdev->gadget;
|
struct usb_gadget *gadget = cdev->gadget;
|
||||||
struct f_eem_opts *eem_opts = NULL;
|
struct f_eem_opts *eem_opts = NULL;
|
||||||
|
@ -447,7 +447,7 @@ fail:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit eth_unbind(struct usb_composite_dev *cdev)
|
static int eth_unbind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
if (has_rndis()) {
|
if (has_rndis()) {
|
||||||
usb_put_function(f_rndis);
|
usb_put_function(f_rndis);
|
||||||
|
@ -466,13 +466,13 @@ static int __exit eth_unbind(struct usb_composite_dev *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver eth_driver = {
|
static struct usb_composite_driver eth_driver = {
|
||||||
.name = "g_ether",
|
.name = "g_ether",
|
||||||
.dev = &device_desc,
|
.dev = &device_desc,
|
||||||
.strings = dev_strings,
|
.strings = dev_strings,
|
||||||
.max_speed = USB_SPEED_SUPER,
|
.max_speed = USB_SPEED_SUPER,
|
||||||
.bind = eth_bind,
|
.bind = eth_bind,
|
||||||
.unbind = __exit_p(eth_unbind),
|
.unbind = eth_unbind,
|
||||||
};
|
};
|
||||||
|
|
||||||
module_usb_composite_driver(eth_driver);
|
module_usb_composite_driver(eth_driver);
|
||||||
|
|
|
@ -163,7 +163,7 @@ static int gfs_unbind(struct usb_composite_dev *cdev);
|
||||||
static int gfs_do_config(struct usb_configuration *c);
|
static int gfs_do_config(struct usb_configuration *c);
|
||||||
|
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver gfs_driver = {
|
static struct usb_composite_driver gfs_driver = {
|
||||||
.name = DRIVER_NAME,
|
.name = DRIVER_NAME,
|
||||||
.dev = &gfs_dev_desc,
|
.dev = &gfs_dev_desc,
|
||||||
.strings = gfs_dev_strings,
|
.strings = gfs_dev_strings,
|
||||||
|
|
|
@ -118,7 +118,7 @@ static struct usb_gadget_strings *dev_strings[] = {
|
||||||
static struct usb_function_instance *fi_midi;
|
static struct usb_function_instance *fi_midi;
|
||||||
static struct usb_function *f_midi;
|
static struct usb_function *f_midi;
|
||||||
|
|
||||||
static int __exit midi_unbind(struct usb_composite_dev *dev)
|
static int midi_unbind(struct usb_composite_dev *dev)
|
||||||
{
|
{
|
||||||
usb_put_function(f_midi);
|
usb_put_function(f_midi);
|
||||||
usb_put_function_instance(fi_midi);
|
usb_put_function_instance(fi_midi);
|
||||||
|
@ -133,7 +133,7 @@ static struct usb_configuration midi_config = {
|
||||||
.MaxPower = CONFIG_USB_GADGET_VBUS_DRAW,
|
.MaxPower = CONFIG_USB_GADGET_VBUS_DRAW,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init midi_bind_config(struct usb_configuration *c)
|
static int midi_bind_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ static int __init midi_bind_config(struct usb_configuration *c)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init midi_bind(struct usb_composite_dev *cdev)
|
static int midi_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
struct f_midi_opts *midi_opts;
|
struct f_midi_opts *midi_opts;
|
||||||
int status;
|
int status;
|
||||||
|
@ -185,13 +185,13 @@ put:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver midi_driver = {
|
static struct usb_composite_driver midi_driver = {
|
||||||
.name = (char *) longname,
|
.name = (char *) longname,
|
||||||
.dev = &device_desc,
|
.dev = &device_desc,
|
||||||
.strings = dev_strings,
|
.strings = dev_strings,
|
||||||
.max_speed = USB_SPEED_HIGH,
|
.max_speed = USB_SPEED_HIGH,
|
||||||
.bind = midi_bind,
|
.bind = midi_bind,
|
||||||
.unbind = __exit_p(midi_unbind),
|
.unbind = midi_unbind,
|
||||||
};
|
};
|
||||||
|
|
||||||
module_usb_composite_driver(midi_driver);
|
module_usb_composite_driver(midi_driver);
|
||||||
|
|
|
@ -106,7 +106,7 @@ static struct usb_gadget_strings *dev_strings[] = {
|
||||||
|
|
||||||
/****************************** Configurations ******************************/
|
/****************************** Configurations ******************************/
|
||||||
|
|
||||||
static int __init do_config(struct usb_configuration *c)
|
static int do_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
struct hidg_func_node *e, *n;
|
struct hidg_func_node *e, *n;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
@ -147,7 +147,7 @@ static struct usb_configuration config_driver = {
|
||||||
|
|
||||||
/****************************** Gadget Bind ******************************/
|
/****************************** Gadget Bind ******************************/
|
||||||
|
|
||||||
static int __init hid_bind(struct usb_composite_dev *cdev)
|
static int hid_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
struct usb_gadget *gadget = cdev->gadget;
|
struct usb_gadget *gadget = cdev->gadget;
|
||||||
struct list_head *tmp;
|
struct list_head *tmp;
|
||||||
|
@ -205,7 +205,7 @@ put:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit hid_unbind(struct usb_composite_dev *cdev)
|
static int hid_unbind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
struct hidg_func_node *n;
|
struct hidg_func_node *n;
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ static int __exit hid_unbind(struct usb_composite_dev *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init hidg_plat_driver_probe(struct platform_device *pdev)
|
static int hidg_plat_driver_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct hidg_func_descriptor *func = dev_get_platdata(&pdev->dev);
|
struct hidg_func_descriptor *func = dev_get_platdata(&pdev->dev);
|
||||||
struct hidg_func_node *entry;
|
struct hidg_func_node *entry;
|
||||||
|
@ -252,13 +252,13 @@ static int hidg_plat_driver_remove(struct platform_device *pdev)
|
||||||
/****************************** Some noise ******************************/
|
/****************************** Some noise ******************************/
|
||||||
|
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver hidg_driver = {
|
static struct usb_composite_driver hidg_driver = {
|
||||||
.name = "g_hid",
|
.name = "g_hid",
|
||||||
.dev = &device_desc,
|
.dev = &device_desc,
|
||||||
.strings = dev_strings,
|
.strings = dev_strings,
|
||||||
.max_speed = USB_SPEED_HIGH,
|
.max_speed = USB_SPEED_HIGH,
|
||||||
.bind = hid_bind,
|
.bind = hid_bind,
|
||||||
.unbind = __exit_p(hid_unbind),
|
.unbind = hid_unbind,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_driver hidg_plat_driver = {
|
static struct platform_driver hidg_plat_driver = {
|
||||||
|
|
|
@ -130,7 +130,7 @@ static int msg_thread_exits(struct fsg_common *common)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init msg_do_config(struct usb_configuration *c)
|
static int msg_do_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
struct fsg_opts *opts;
|
struct fsg_opts *opts;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -170,7 +170,7 @@ static struct usb_configuration msg_config_driver = {
|
||||||
|
|
||||||
/****************************** Gadget Bind ******************************/
|
/****************************** Gadget Bind ******************************/
|
||||||
|
|
||||||
static int __init msg_bind(struct usb_composite_dev *cdev)
|
static int msg_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
static const struct fsg_operations ops = {
|
static const struct fsg_operations ops = {
|
||||||
.thread_exits = msg_thread_exits,
|
.thread_exits = msg_thread_exits,
|
||||||
|
@ -248,7 +248,7 @@ static int msg_unbind(struct usb_composite_dev *cdev)
|
||||||
|
|
||||||
/****************************** Some noise ******************************/
|
/****************************** Some noise ******************************/
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver msg_driver = {
|
static struct usb_composite_driver msg_driver = {
|
||||||
.name = "g_mass_storage",
|
.name = "g_mass_storage",
|
||||||
.dev = &msg_device_desc,
|
.dev = &msg_device_desc,
|
||||||
.max_speed = USB_SPEED_SUPER,
|
.max_speed = USB_SPEED_SUPER,
|
||||||
|
|
|
@ -149,7 +149,7 @@ static struct usb_function *f_acm_rndis;
|
||||||
static struct usb_function *f_rndis;
|
static struct usb_function *f_rndis;
|
||||||
static struct usb_function *f_msg_rndis;
|
static struct usb_function *f_msg_rndis;
|
||||||
|
|
||||||
static __init int rndis_do_config(struct usb_configuration *c)
|
static int rndis_do_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
struct fsg_opts *fsg_opts;
|
struct fsg_opts *fsg_opts;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -237,7 +237,7 @@ static struct usb_function *f_acm_multi;
|
||||||
static struct usb_function *f_ecm;
|
static struct usb_function *f_ecm;
|
||||||
static struct usb_function *f_msg_multi;
|
static struct usb_function *f_msg_multi;
|
||||||
|
|
||||||
static __init int cdc_do_config(struct usb_configuration *c)
|
static int cdc_do_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
struct fsg_opts *fsg_opts;
|
struct fsg_opts *fsg_opts;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -466,7 +466,7 @@ fail:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit multi_unbind(struct usb_composite_dev *cdev)
|
static int multi_unbind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_USB_G_MULTI_CDC
|
#ifdef CONFIG_USB_G_MULTI_CDC
|
||||||
usb_put_function(f_msg_multi);
|
usb_put_function(f_msg_multi);
|
||||||
|
@ -497,13 +497,13 @@ static int __exit multi_unbind(struct usb_composite_dev *cdev)
|
||||||
/****************************** Some noise ******************************/
|
/****************************** Some noise ******************************/
|
||||||
|
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver multi_driver = {
|
static struct usb_composite_driver multi_driver = {
|
||||||
.name = "g_multi",
|
.name = "g_multi",
|
||||||
.dev = &device_desc,
|
.dev = &device_desc,
|
||||||
.strings = dev_strings,
|
.strings = dev_strings,
|
||||||
.max_speed = USB_SPEED_HIGH,
|
.max_speed = USB_SPEED_HIGH,
|
||||||
.bind = multi_bind,
|
.bind = multi_bind,
|
||||||
.unbind = __exit_p(multi_unbind),
|
.unbind = multi_unbind,
|
||||||
.needs_serial = 1,
|
.needs_serial = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ static struct usb_function *f_ncm;
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static int __init ncm_do_config(struct usb_configuration *c)
|
static int ncm_do_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ static struct usb_configuration ncm_config_driver = {
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static int __init gncm_bind(struct usb_composite_dev *cdev)
|
static int gncm_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
struct usb_gadget *gadget = cdev->gadget;
|
struct usb_gadget *gadget = cdev->gadget;
|
||||||
struct f_ncm_opts *ncm_opts;
|
struct f_ncm_opts *ncm_opts;
|
||||||
|
@ -186,7 +186,7 @@ fail:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit gncm_unbind(struct usb_composite_dev *cdev)
|
static int gncm_unbind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
if (!IS_ERR_OR_NULL(f_ncm))
|
if (!IS_ERR_OR_NULL(f_ncm))
|
||||||
usb_put_function(f_ncm);
|
usb_put_function(f_ncm);
|
||||||
|
@ -195,13 +195,13 @@ static int __exit gncm_unbind(struct usb_composite_dev *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver ncm_driver = {
|
static struct usb_composite_driver ncm_driver = {
|
||||||
.name = "g_ncm",
|
.name = "g_ncm",
|
||||||
.dev = &device_desc,
|
.dev = &device_desc,
|
||||||
.strings = dev_strings,
|
.strings = dev_strings,
|
||||||
.max_speed = USB_SPEED_HIGH,
|
.max_speed = USB_SPEED_HIGH,
|
||||||
.bind = gncm_bind,
|
.bind = gncm_bind,
|
||||||
.unbind = __exit_p(gncm_unbind),
|
.unbind = gncm_unbind,
|
||||||
};
|
};
|
||||||
|
|
||||||
module_usb_composite_driver(ncm_driver);
|
module_usb_composite_driver(ncm_driver);
|
||||||
|
|
|
@ -118,7 +118,7 @@ static struct usb_function_instance *fi_obex1;
|
||||||
static struct usb_function_instance *fi_obex2;
|
static struct usb_function_instance *fi_obex2;
|
||||||
static struct usb_function_instance *fi_phonet;
|
static struct usb_function_instance *fi_phonet;
|
||||||
|
|
||||||
static int __init nokia_bind_config(struct usb_configuration *c)
|
static int nokia_bind_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
struct usb_function *f_acm;
|
struct usb_function *f_acm;
|
||||||
struct usb_function *f_phonet = NULL;
|
struct usb_function *f_phonet = NULL;
|
||||||
|
@ -224,7 +224,7 @@ err_get_acm:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init nokia_bind(struct usb_composite_dev *cdev)
|
static int nokia_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
struct usb_gadget *gadget = cdev->gadget;
|
struct usb_gadget *gadget = cdev->gadget;
|
||||||
int status;
|
int status;
|
||||||
|
@ -307,7 +307,7 @@ err_usb:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit nokia_unbind(struct usb_composite_dev *cdev)
|
static int nokia_unbind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
if (!IS_ERR_OR_NULL(f_obex1_cfg2))
|
if (!IS_ERR_OR_NULL(f_obex1_cfg2))
|
||||||
usb_put_function(f_obex1_cfg2);
|
usb_put_function(f_obex1_cfg2);
|
||||||
|
@ -338,13 +338,13 @@ static int __exit nokia_unbind(struct usb_composite_dev *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver nokia_driver = {
|
static struct usb_composite_driver nokia_driver = {
|
||||||
.name = "g_nokia",
|
.name = "g_nokia",
|
||||||
.dev = &device_desc,
|
.dev = &device_desc,
|
||||||
.strings = dev_strings,
|
.strings = dev_strings,
|
||||||
.max_speed = USB_SPEED_HIGH,
|
.max_speed = USB_SPEED_HIGH,
|
||||||
.bind = nokia_bind,
|
.bind = nokia_bind,
|
||||||
.unbind = __exit_p(nokia_unbind),
|
.unbind = nokia_unbind,
|
||||||
};
|
};
|
||||||
|
|
||||||
module_usb_composite_driver(nokia_driver);
|
module_usb_composite_driver(nokia_driver);
|
||||||
|
|
|
@ -126,7 +126,7 @@ static struct usb_configuration printer_cfg_driver = {
|
||||||
.bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
|
.bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init printer_do_config(struct usb_configuration *c)
|
static int printer_do_config(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
struct usb_gadget *gadget = c->cdev->gadget;
|
struct usb_gadget *gadget = c->cdev->gadget;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
@ -152,7 +152,7 @@ static int __init printer_do_config(struct usb_configuration *c)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init printer_bind(struct usb_composite_dev *cdev)
|
static int printer_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
struct f_printer_opts *opts;
|
struct f_printer_opts *opts;
|
||||||
int ret, len;
|
int ret, len;
|
||||||
|
@ -191,7 +191,7 @@ static int __init printer_bind(struct usb_composite_dev *cdev)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit printer_unbind(struct usb_composite_dev *cdev)
|
static int printer_unbind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
usb_put_function(f_printer);
|
usb_put_function(f_printer);
|
||||||
usb_put_function_instance(fi_printer);
|
usb_put_function_instance(fi_printer);
|
||||||
|
@ -199,7 +199,7 @@ static int __exit printer_unbind(struct usb_composite_dev *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver printer_driver = {
|
static struct usb_composite_driver printer_driver = {
|
||||||
.name = shortname,
|
.name = shortname,
|
||||||
.dev = &device_desc,
|
.dev = &device_desc,
|
||||||
.strings = dev_strings,
|
.strings = dev_strings,
|
||||||
|
|
|
@ -174,7 +174,7 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init gs_bind(struct usb_composite_dev *cdev)
|
static int gs_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
@ -230,7 +230,7 @@ static int gs_unbind(struct usb_composite_dev *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver gserial_driver = {
|
static struct usb_composite_driver gserial_driver = {
|
||||||
.name = "g_serial",
|
.name = "g_serial",
|
||||||
.dev = &device_desc,
|
.dev = &device_desc,
|
||||||
.strings = dev_strings,
|
.strings = dev_strings,
|
||||||
|
|
|
@ -2397,7 +2397,7 @@ static int usb_target_bind(struct usb_composite_dev *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver usbg_driver = {
|
static struct usb_composite_driver usbg_driver = {
|
||||||
.name = "g_target",
|
.name = "g_target",
|
||||||
.dev = &usbg_device_desc,
|
.dev = &usbg_device_desc,
|
||||||
.strings = usbg_strings,
|
.strings = usbg_strings,
|
||||||
|
|
|
@ -334,7 +334,7 @@ static const struct uvc_descriptor_header * const uvc_ss_streaming_cls[] = {
|
||||||
* USB configuration
|
* USB configuration
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int __init
|
static int
|
||||||
webcam_config_bind(struct usb_configuration *c)
|
webcam_config_bind(struct usb_configuration *c)
|
||||||
{
|
{
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
@ -358,7 +358,7 @@ static struct usb_configuration webcam_config_driver = {
|
||||||
.MaxPower = CONFIG_USB_GADGET_VBUS_DRAW,
|
.MaxPower = CONFIG_USB_GADGET_VBUS_DRAW,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int /* __init_or_exit */
|
static int
|
||||||
webcam_unbind(struct usb_composite_dev *cdev)
|
webcam_unbind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
if (!IS_ERR_OR_NULL(f_uvc))
|
if (!IS_ERR_OR_NULL(f_uvc))
|
||||||
|
@ -368,7 +368,7 @@ webcam_unbind(struct usb_composite_dev *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init
|
static int
|
||||||
webcam_bind(struct usb_composite_dev *cdev)
|
webcam_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
struct f_uvc_opts *uvc_opts;
|
struct f_uvc_opts *uvc_opts;
|
||||||
|
@ -422,7 +422,7 @@ error:
|
||||||
* Driver
|
* Driver
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver webcam_driver = {
|
static struct usb_composite_driver webcam_driver = {
|
||||||
.name = "g_webcam",
|
.name = "g_webcam",
|
||||||
.dev = &webcam_device_descriptor,
|
.dev = &webcam_device_descriptor,
|
||||||
.strings = webcam_device_strings,
|
.strings = webcam_device_strings,
|
||||||
|
|
|
@ -272,7 +272,7 @@ static struct usb_function_instance *func_inst_lb;
|
||||||
module_param_named(qlen, gzero_options.qlen, uint, S_IRUGO|S_IWUSR);
|
module_param_named(qlen, gzero_options.qlen, uint, S_IRUGO|S_IWUSR);
|
||||||
MODULE_PARM_DESC(qlen, "depth of loopback queue");
|
MODULE_PARM_DESC(qlen, "depth of loopback queue");
|
||||||
|
|
||||||
static int __init zero_bind(struct usb_composite_dev *cdev)
|
static int zero_bind(struct usb_composite_dev *cdev)
|
||||||
{
|
{
|
||||||
struct f_ss_opts *ss_opts;
|
struct f_ss_opts *ss_opts;
|
||||||
struct f_lb_opts *lb_opts;
|
struct f_lb_opts *lb_opts;
|
||||||
|
@ -400,7 +400,7 @@ static int zero_unbind(struct usb_composite_dev *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __refdata struct usb_composite_driver zero_driver = {
|
static struct usb_composite_driver zero_driver = {
|
||||||
.name = "zero",
|
.name = "zero",
|
||||||
.dev = &device_desc,
|
.dev = &device_desc,
|
||||||
.strings = dev_strings,
|
.strings = dev_strings,
|
||||||
|
|
|
@ -1942,7 +1942,7 @@ err_unprepare_fclk:
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit at91udc_remove(struct platform_device *pdev)
|
static int at91udc_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct at91_udc *udc = platform_get_drvdata(pdev);
|
struct at91_udc *udc = platform_get_drvdata(pdev);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -2018,7 +2018,7 @@ static int at91udc_resume(struct platform_device *pdev)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static struct platform_driver at91_udc_driver = {
|
static struct platform_driver at91_udc_driver = {
|
||||||
.remove = __exit_p(at91udc_remove),
|
.remove = at91udc_remove,
|
||||||
.shutdown = at91udc_shutdown,
|
.shutdown = at91udc_shutdown,
|
||||||
.suspend = at91udc_suspend,
|
.suspend = at91udc_suspend,
|
||||||
.resume = at91udc_resume,
|
.resume = at91udc_resume,
|
||||||
|
|
|
@ -2186,7 +2186,7 @@ static int usba_udc_probe(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __exit usba_udc_remove(struct platform_device *pdev)
|
static int usba_udc_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct usba_udc *udc;
|
struct usba_udc *udc;
|
||||||
int i;
|
int i;
|
||||||
|
@ -2258,7 +2258,7 @@ static int usba_udc_resume(struct device *dev)
|
||||||
static SIMPLE_DEV_PM_OPS(usba_udc_pm_ops, usba_udc_suspend, usba_udc_resume);
|
static SIMPLE_DEV_PM_OPS(usba_udc_pm_ops, usba_udc_suspend, usba_udc_resume);
|
||||||
|
|
||||||
static struct platform_driver udc_driver = {
|
static struct platform_driver udc_driver = {
|
||||||
.remove = __exit_p(usba_udc_remove),
|
.remove = usba_udc_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "atmel_usba_udc",
|
.name = "atmel_usba_udc",
|
||||||
.pm = &usba_udc_pm_ops,
|
.pm = &usba_udc_pm_ops,
|
||||||
|
|
|
@ -2525,7 +2525,7 @@ err_kfree:
|
||||||
/* Driver removal function
|
/* Driver removal function
|
||||||
* Free resources and finish pending transactions
|
* Free resources and finish pending transactions
|
||||||
*/
|
*/
|
||||||
static int __exit fsl_udc_remove(struct platform_device *pdev)
|
static int fsl_udc_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
struct fsl_usb2_platform_data *pdata = dev_get_platdata(&pdev->dev);
|
struct fsl_usb2_platform_data *pdata = dev_get_platdata(&pdev->dev);
|
||||||
|
@ -2663,7 +2663,7 @@ static const struct platform_device_id fsl_udc_devtype[] = {
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(platform, fsl_udc_devtype);
|
MODULE_DEVICE_TABLE(platform, fsl_udc_devtype);
|
||||||
static struct platform_driver udc_driver = {
|
static struct platform_driver udc_driver = {
|
||||||
.remove = __exit_p(fsl_udc_remove),
|
.remove = fsl_udc_remove,
|
||||||
/* Just for FSL i.mx SoC currently */
|
/* Just for FSL i.mx SoC currently */
|
||||||
.id_table = fsl_udc_devtype,
|
.id_table = fsl_udc_devtype,
|
||||||
/* these suspend and resume are not usb suspend and resume */
|
/* these suspend and resume are not usb suspend and resume */
|
||||||
|
|
|
@ -1342,7 +1342,7 @@ static const struct usb_gadget_ops fusb300_gadget_ops = {
|
||||||
.udc_stop = fusb300_udc_stop,
|
.udc_stop = fusb300_udc_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __exit fusb300_remove(struct platform_device *pdev)
|
static int fusb300_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct fusb300 *fusb300 = platform_get_drvdata(pdev);
|
struct fusb300 *fusb300 = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
|
@ -1492,7 +1492,7 @@ clean_up:
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_driver fusb300_driver = {
|
static struct platform_driver fusb300_driver = {
|
||||||
.remove = __exit_p(fusb300_remove),
|
.remove = fusb300_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = (char *) udc_name,
|
.name = (char *) udc_name,
|
||||||
},
|
},
|
||||||
|
|
|
@ -1528,7 +1528,7 @@ static const struct usb_gadget_ops m66592_gadget_ops = {
|
||||||
.pullup = m66592_pullup,
|
.pullup = m66592_pullup,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __exit m66592_remove(struct platform_device *pdev)
|
static int m66592_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct m66592 *m66592 = platform_get_drvdata(pdev);
|
struct m66592 *m66592 = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
|
@ -1695,7 +1695,7 @@ clean_up:
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
static struct platform_driver m66592_driver = {
|
static struct platform_driver m66592_driver = {
|
||||||
.remove = __exit_p(m66592_remove),
|
.remove = m66592_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = (char *) udc_name,
|
.name = (char *) udc_name,
|
||||||
},
|
},
|
||||||
|
|
|
@ -1820,7 +1820,7 @@ static const struct usb_gadget_ops r8a66597_gadget_ops = {
|
||||||
.set_selfpowered = r8a66597_set_selfpowered,
|
.set_selfpowered = r8a66597_set_selfpowered,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __exit r8a66597_remove(struct platform_device *pdev)
|
static int r8a66597_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct r8a66597 *r8a66597 = platform_get_drvdata(pdev);
|
struct r8a66597 *r8a66597 = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
|
@ -1974,7 +1974,7 @@ clean_up2:
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
static struct platform_driver r8a66597_driver = {
|
static struct platform_driver r8a66597_driver = {
|
||||||
.remove = __exit_p(r8a66597_remove),
|
.remove = r8a66597_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = (char *) udc_name,
|
.name = (char *) udc_name,
|
||||||
},
|
},
|
||||||
|
|
|
@ -2071,8 +2071,8 @@ static int xudc_probe(struct platform_device *pdev)
|
||||||
/* Map the registers */
|
/* Map the registers */
|
||||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
udc->addr = devm_ioremap_resource(&pdev->dev, res);
|
udc->addr = devm_ioremap_resource(&pdev->dev, res);
|
||||||
if (!udc->addr)
|
if (IS_ERR(udc->addr))
|
||||||
return -ENOMEM;
|
return PTR_ERR(udc->addr);
|
||||||
|
|
||||||
irq = platform_get_irq(pdev, 0);
|
irq = platform_get_irq(pdev, 0);
|
||||||
if (irq < 0) {
|
if (irq < 0) {
|
||||||
|
|
|
@ -2026,8 +2026,13 @@ static int process_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td,
|
||||||
break;
|
break;
|
||||||
case COMP_DEV_ERR:
|
case COMP_DEV_ERR:
|
||||||
case COMP_STALL:
|
case COMP_STALL:
|
||||||
|
frame->status = -EPROTO;
|
||||||
|
skip_td = true;
|
||||||
|
break;
|
||||||
case COMP_TX_ERR:
|
case COMP_TX_ERR:
|
||||||
frame->status = -EPROTO;
|
frame->status = -EPROTO;
|
||||||
|
if (event_trb != td->last_trb)
|
||||||
|
return 0;
|
||||||
skip_td = true;
|
skip_td = true;
|
||||||
break;
|
break;
|
||||||
case COMP_STOP:
|
case COMP_STOP:
|
||||||
|
@ -2640,7 +2645,7 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd)
|
||||||
xhci_halt(xhci);
|
xhci_halt(xhci);
|
||||||
hw_died:
|
hw_died:
|
||||||
spin_unlock(&xhci->lock);
|
spin_unlock(&xhci->lock);
|
||||||
return -ESHUTDOWN;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1267,7 +1267,7 @@ union xhci_trb {
|
||||||
* since the command ring is 64-byte aligned.
|
* since the command ring is 64-byte aligned.
|
||||||
* It must also be greater than 16.
|
* It must also be greater than 16.
|
||||||
*/
|
*/
|
||||||
#define TRBS_PER_SEGMENT 64
|
#define TRBS_PER_SEGMENT 256
|
||||||
/* Allow two commands + a link TRB, along with any reserved command TRBs */
|
/* Allow two commands + a link TRB, along with any reserved command TRBs */
|
||||||
#define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3)
|
#define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3)
|
||||||
#define TRB_SEGMENT_SIZE (TRBS_PER_SEGMENT*16)
|
#define TRB_SEGMENT_SIZE (TRBS_PER_SEGMENT*16)
|
||||||
|
|
|
@ -94,7 +94,7 @@ struct isp1301 {
|
||||||
|
|
||||||
#if defined(CONFIG_MACH_OMAP_H2) || defined(CONFIG_MACH_OMAP_H3)
|
#if defined(CONFIG_MACH_OMAP_H2) || defined(CONFIG_MACH_OMAP_H3)
|
||||||
|
|
||||||
#if defined(CONFIG_TPS65010) || defined(CONFIG_TPS65010_MODULE)
|
#if defined(CONFIG_TPS65010) || (defined(CONFIG_TPS65010_MODULE) && defined(MODULE))
|
||||||
|
|
||||||
#include <linux/i2c/tps65010.h>
|
#include <linux/i2c/tps65010.h>
|
||||||
|
|
||||||
|
|
|
@ -127,6 +127,7 @@ static const struct usb_device_id id_table[] = {
|
||||||
{ USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */
|
{ USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */
|
||||||
{ USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
|
{ USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
|
||||||
{ USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */
|
{ USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */
|
||||||
|
{ USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */
|
||||||
{ USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
|
{ USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
|
||||||
{ USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
|
{ USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
|
||||||
{ USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
|
{ USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
|
||||||
|
|
|
@ -61,7 +61,6 @@ static const struct usb_device_id id_table[] = {
|
||||||
{ USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
|
{ USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
|
{ USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
|
{ USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
|
||||||
{ USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
|
|
||||||
{ USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1),
|
{ USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1),
|
||||||
.driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
|
.driver_info = PL2303_QUIRK_UART_STATE_IDX0 },
|
||||||
{ USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65),
|
{ USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65),
|
||||||
|
|
|
@ -62,10 +62,6 @@
|
||||||
#define ALCATEL_VENDOR_ID 0x11f7
|
#define ALCATEL_VENDOR_ID 0x11f7
|
||||||
#define ALCATEL_PRODUCT_ID 0x02df
|
#define ALCATEL_PRODUCT_ID 0x02df
|
||||||
|
|
||||||
/* Samsung I330 phone cradle */
|
|
||||||
#define SAMSUNG_VENDOR_ID 0x04e8
|
|
||||||
#define SAMSUNG_PRODUCT_ID 0x8001
|
|
||||||
|
|
||||||
#define SIEMENS_VENDOR_ID 0x11f5
|
#define SIEMENS_VENDOR_ID 0x11f5
|
||||||
#define SIEMENS_PRODUCT_ID_SX1 0x0001
|
#define SIEMENS_PRODUCT_ID_SX1 0x0001
|
||||||
#define SIEMENS_PRODUCT_ID_X65 0x0003
|
#define SIEMENS_PRODUCT_ID_X65 0x0003
|
||||||
|
|
|
@ -95,7 +95,7 @@ static const struct usb_device_id id_table[] = {
|
||||||
.driver_info = (kernel_ulong_t)&palm_os_4_probe },
|
.driver_info = (kernel_ulong_t)&palm_os_4_probe },
|
||||||
{ USB_DEVICE(ACER_VENDOR_ID, ACER_S10_ID),
|
{ USB_DEVICE(ACER_VENDOR_ID, ACER_S10_ID),
|
||||||
.driver_info = (kernel_ulong_t)&palm_os_4_probe },
|
.driver_info = (kernel_ulong_t)&palm_os_4_probe },
|
||||||
{ USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SCH_I330_ID),
|
{ USB_DEVICE_INTERFACE_CLASS(SAMSUNG_VENDOR_ID, SAMSUNG_SCH_I330_ID, 0xff),
|
||||||
.driver_info = (kernel_ulong_t)&palm_os_4_probe },
|
.driver_info = (kernel_ulong_t)&palm_os_4_probe },
|
||||||
{ USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SPH_I500_ID),
|
{ USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SPH_I500_ID),
|
||||||
.driver_info = (kernel_ulong_t)&palm_os_4_probe },
|
.driver_info = (kernel_ulong_t)&palm_os_4_probe },
|
||||||
|
|
|
@ -766,6 +766,13 @@ UNUSUAL_DEV( 0x059f, 0x0643, 0x0000, 0x0000,
|
||||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||||
US_FL_GO_SLOW ),
|
US_FL_GO_SLOW ),
|
||||||
|
|
||||||
|
/* Reported by Christian Schaller <cschalle@redhat.com> */
|
||||||
|
UNUSUAL_DEV( 0x059f, 0x0651, 0x0000, 0x0000,
|
||||||
|
"LaCie",
|
||||||
|
"External HDD",
|
||||||
|
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||||
|
US_FL_NO_WP_DETECT ),
|
||||||
|
|
||||||
/* Submitted by Joel Bourquard <numlock@freesurf.ch>
|
/* Submitted by Joel Bourquard <numlock@freesurf.ch>
|
||||||
* Some versions of this device need the SubClass and Protocol overrides
|
* Some versions of this device need the SubClass and Protocol overrides
|
||||||
* while others don't.
|
* while others don't.
|
||||||
|
|
Loading…
Reference in a new issue