Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6: uhci-hcd: fix list access bug USB: Support for ELECOM LD-USB20 in pegasus USB: Add VIA quirk fixup for VT8235 usb2 USB: rtl8150_disconnect() needs tasklet_kill() USB Storage: unusual_devs.h for Sony Ericsson M600i USB Storage: Remove the finecam3 unusual_devs entry UHCI: don't stop at an Iso error usb gadget: g_ether spinlock recursion fix USB: add all wacom device to hid-core.c blacklist hid-core.c: Adds all GTCO CalComp Digitizers and InterWrite School Products to blacklist USB floppy drive SAMSUNG SFD-321U/EP detected 8 times
This commit is contained in:
Коммит
d738752fc4
|
@ -667,6 +667,7 @@ DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, quirk_vi
|
||||||
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, quirk_via_irq);
|
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, quirk_via_irq);
|
||||||
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_2, quirk_via_irq);
|
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_2, quirk_via_irq);
|
||||||
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_via_irq);
|
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_via_irq);
|
||||||
|
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235_USB_2, quirk_via_irq);
|
||||||
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_irq);
|
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_irq);
|
||||||
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_via_irq);
|
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_via_irq);
|
||||||
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, quirk_via_irq);
|
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, quirk_via_irq);
|
||||||
|
|
|
@ -117,6 +117,8 @@ struct eth_dev {
|
||||||
struct usb_ep *in_ep, *out_ep, *status_ep;
|
struct usb_ep *in_ep, *out_ep, *status_ep;
|
||||||
const struct usb_endpoint_descriptor
|
const struct usb_endpoint_descriptor
|
||||||
*in, *out, *status;
|
*in, *out, *status;
|
||||||
|
|
||||||
|
spinlock_t req_lock;
|
||||||
struct list_head tx_reqs, rx_reqs;
|
struct list_head tx_reqs, rx_reqs;
|
||||||
|
|
||||||
struct net_device *net;
|
struct net_device *net;
|
||||||
|
@ -1066,21 +1068,31 @@ static void eth_reset_config (struct eth_dev *dev)
|
||||||
*/
|
*/
|
||||||
if (dev->in) {
|
if (dev->in) {
|
||||||
usb_ep_disable (dev->in_ep);
|
usb_ep_disable (dev->in_ep);
|
||||||
|
spin_lock(&dev->req_lock);
|
||||||
while (likely (!list_empty (&dev->tx_reqs))) {
|
while (likely (!list_empty (&dev->tx_reqs))) {
|
||||||
req = container_of (dev->tx_reqs.next,
|
req = container_of (dev->tx_reqs.next,
|
||||||
struct usb_request, list);
|
struct usb_request, list);
|
||||||
list_del (&req->list);
|
list_del (&req->list);
|
||||||
|
|
||||||
|
spin_unlock(&dev->req_lock);
|
||||||
usb_ep_free_request (dev->in_ep, req);
|
usb_ep_free_request (dev->in_ep, req);
|
||||||
|
spin_lock(&dev->req_lock);
|
||||||
}
|
}
|
||||||
|
spin_unlock(&dev->req_lock);
|
||||||
}
|
}
|
||||||
if (dev->out) {
|
if (dev->out) {
|
||||||
usb_ep_disable (dev->out_ep);
|
usb_ep_disable (dev->out_ep);
|
||||||
|
spin_lock(&dev->req_lock);
|
||||||
while (likely (!list_empty (&dev->rx_reqs))) {
|
while (likely (!list_empty (&dev->rx_reqs))) {
|
||||||
req = container_of (dev->rx_reqs.next,
|
req = container_of (dev->rx_reqs.next,
|
||||||
struct usb_request, list);
|
struct usb_request, list);
|
||||||
list_del (&req->list);
|
list_del (&req->list);
|
||||||
|
|
||||||
|
spin_unlock(&dev->req_lock);
|
||||||
usb_ep_free_request (dev->out_ep, req);
|
usb_ep_free_request (dev->out_ep, req);
|
||||||
|
spin_lock(&dev->req_lock);
|
||||||
}
|
}
|
||||||
|
spin_unlock(&dev->req_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->status) {
|
if (dev->status) {
|
||||||
|
@ -1659,9 +1671,9 @@ enomem:
|
||||||
if (retval) {
|
if (retval) {
|
||||||
DEBUG (dev, "rx submit --> %d\n", retval);
|
DEBUG (dev, "rx submit --> %d\n", retval);
|
||||||
dev_kfree_skb_any (skb);
|
dev_kfree_skb_any (skb);
|
||||||
spin_lock (&dev->lock);
|
spin_lock(&dev->req_lock);
|
||||||
list_add (&req->list, &dev->rx_reqs);
|
list_add (&req->list, &dev->rx_reqs);
|
||||||
spin_unlock (&dev->lock);
|
spin_unlock(&dev->req_lock);
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
@ -1730,8 +1742,9 @@ quiesce:
|
||||||
dev_kfree_skb_any (skb);
|
dev_kfree_skb_any (skb);
|
||||||
if (!netif_running (dev->net)) {
|
if (!netif_running (dev->net)) {
|
||||||
clean:
|
clean:
|
||||||
/* nobody reading rx_reqs, so no dev->lock */
|
spin_lock(&dev->req_lock);
|
||||||
list_add (&req->list, &dev->rx_reqs);
|
list_add (&req->list, &dev->rx_reqs);
|
||||||
|
spin_unlock(&dev->req_lock);
|
||||||
req = NULL;
|
req = NULL;
|
||||||
}
|
}
|
||||||
if (req)
|
if (req)
|
||||||
|
@ -1782,15 +1795,18 @@ static int alloc_requests (struct eth_dev *dev, unsigned n, gfp_t gfp_flags)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
spin_lock(&dev->req_lock);
|
||||||
status = prealloc (&dev->tx_reqs, dev->in_ep, n, gfp_flags);
|
status = prealloc (&dev->tx_reqs, dev->in_ep, n, gfp_flags);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
status = prealloc (&dev->rx_reqs, dev->out_ep, n, gfp_flags);
|
status = prealloc (&dev->rx_reqs, dev->out_ep, n, gfp_flags);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
return 0;
|
goto done;
|
||||||
fail:
|
fail:
|
||||||
DEBUG (dev, "can't alloc requests\n");
|
DEBUG (dev, "can't alloc requests\n");
|
||||||
|
done:
|
||||||
|
spin_unlock(&dev->req_lock);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1800,21 +1816,21 @@ static void rx_fill (struct eth_dev *dev, gfp_t gfp_flags)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
/* fill unused rxq slots with some skb */
|
/* fill unused rxq slots with some skb */
|
||||||
spin_lock_irqsave (&dev->lock, flags);
|
spin_lock_irqsave(&dev->req_lock, flags);
|
||||||
while (!list_empty (&dev->rx_reqs)) {
|
while (!list_empty (&dev->rx_reqs)) {
|
||||||
req = container_of (dev->rx_reqs.next,
|
req = container_of (dev->rx_reqs.next,
|
||||||
struct usb_request, list);
|
struct usb_request, list);
|
||||||
list_del_init (&req->list);
|
list_del_init (&req->list);
|
||||||
spin_unlock_irqrestore (&dev->lock, flags);
|
spin_unlock_irqrestore(&dev->req_lock, flags);
|
||||||
|
|
||||||
if (rx_submit (dev, req, gfp_flags) < 0) {
|
if (rx_submit (dev, req, gfp_flags) < 0) {
|
||||||
defer_kevent (dev, WORK_RX_MEMORY);
|
defer_kevent (dev, WORK_RX_MEMORY);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_irqsave (&dev->lock, flags);
|
spin_lock_irqsave(&dev->req_lock, flags);
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore (&dev->lock, flags);
|
spin_unlock_irqrestore(&dev->req_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void eth_work (void *_dev)
|
static void eth_work (void *_dev)
|
||||||
|
@ -1848,9 +1864,9 @@ static void tx_complete (struct usb_ep *ep, struct usb_request *req)
|
||||||
}
|
}
|
||||||
dev->stats.tx_packets++;
|
dev->stats.tx_packets++;
|
||||||
|
|
||||||
spin_lock (&dev->lock);
|
spin_lock(&dev->req_lock);
|
||||||
list_add (&req->list, &dev->tx_reqs);
|
list_add (&req->list, &dev->tx_reqs);
|
||||||
spin_unlock (&dev->lock);
|
spin_unlock(&dev->req_lock);
|
||||||
dev_kfree_skb_any (skb);
|
dev_kfree_skb_any (skb);
|
||||||
|
|
||||||
atomic_dec (&dev->tx_qlen);
|
atomic_dec (&dev->tx_qlen);
|
||||||
|
@ -1896,12 +1912,12 @@ static int eth_start_xmit (struct sk_buff *skb, struct net_device *net)
|
||||||
/* ignores USB_CDC_PACKET_TYPE_DIRECTED */
|
/* ignores USB_CDC_PACKET_TYPE_DIRECTED */
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_irqsave (&dev->lock, flags);
|
spin_lock_irqsave(&dev->req_lock, flags);
|
||||||
req = container_of (dev->tx_reqs.next, struct usb_request, list);
|
req = container_of (dev->tx_reqs.next, struct usb_request, list);
|
||||||
list_del (&req->list);
|
list_del (&req->list);
|
||||||
if (list_empty (&dev->tx_reqs))
|
if (list_empty (&dev->tx_reqs))
|
||||||
netif_stop_queue (net);
|
netif_stop_queue (net);
|
||||||
spin_unlock_irqrestore (&dev->lock, flags);
|
spin_unlock_irqrestore(&dev->req_lock, flags);
|
||||||
|
|
||||||
/* no buffer copies needed, unless the network stack did it
|
/* no buffer copies needed, unless the network stack did it
|
||||||
* or the hardware can't use skb buffers.
|
* or the hardware can't use skb buffers.
|
||||||
|
@ -1955,11 +1971,11 @@ static int eth_start_xmit (struct sk_buff *skb, struct net_device *net)
|
||||||
drop:
|
drop:
|
||||||
dev->stats.tx_dropped++;
|
dev->stats.tx_dropped++;
|
||||||
dev_kfree_skb_any (skb);
|
dev_kfree_skb_any (skb);
|
||||||
spin_lock_irqsave (&dev->lock, flags);
|
spin_lock_irqsave(&dev->req_lock, flags);
|
||||||
if (list_empty (&dev->tx_reqs))
|
if (list_empty (&dev->tx_reqs))
|
||||||
netif_start_queue (net);
|
netif_start_queue (net);
|
||||||
list_add (&req->list, &dev->tx_reqs);
|
list_add (&req->list, &dev->tx_reqs);
|
||||||
spin_unlock_irqrestore (&dev->lock, flags);
|
spin_unlock_irqrestore(&dev->req_lock, flags);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2378,6 +2394,7 @@ autoconf_fail:
|
||||||
return status;
|
return status;
|
||||||
dev = netdev_priv(net);
|
dev = netdev_priv(net);
|
||||||
spin_lock_init (&dev->lock);
|
spin_lock_init (&dev->lock);
|
||||||
|
spin_lock_init (&dev->req_lock);
|
||||||
INIT_WORK (&dev->work, eth_work, dev);
|
INIT_WORK (&dev->work, eth_work, dev);
|
||||||
INIT_LIST_HEAD (&dev->tx_reqs);
|
INIT_LIST_HEAD (&dev->tx_reqs);
|
||||||
INIT_LIST_HEAD (&dev->rx_reqs);
|
INIT_LIST_HEAD (&dev->rx_reqs);
|
||||||
|
|
|
@ -372,7 +372,7 @@ static void uhci_fixup_toggles(struct uhci_qh *qh, int skip_first)
|
||||||
* need to change any toggles in this URB */
|
* need to change any toggles in this URB */
|
||||||
td = list_entry(urbp->td_list.next, struct uhci_td, list);
|
td = list_entry(urbp->td_list.next, struct uhci_td, list);
|
||||||
if (toggle > 1 || uhci_toggle(td_token(td)) == toggle) {
|
if (toggle > 1 || uhci_toggle(td_token(td)) == toggle) {
|
||||||
td = list_entry(urbp->td_list.next, struct uhci_td,
|
td = list_entry(urbp->td_list.prev, struct uhci_td,
|
||||||
list);
|
list);
|
||||||
toggle = uhci_toggle(td_token(td)) ^ 1;
|
toggle = uhci_toggle(td_token(td)) ^ 1;
|
||||||
|
|
||||||
|
@ -1348,7 +1348,7 @@ static void uhci_scan_qh(struct uhci_hcd *uhci, struct uhci_qh *qh,
|
||||||
}
|
}
|
||||||
|
|
||||||
uhci_giveback_urb(uhci, qh, urb, regs);
|
uhci_giveback_urb(uhci, qh, urb, regs);
|
||||||
if (status < 0)
|
if (status < 0 && qh->type != USB_ENDPOINT_XFER_ISOC)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1411,17 +1411,54 @@ void hid_init_reports(struct hid_device *hid)
|
||||||
warn("timeout initializing reports");
|
warn("timeout initializing reports");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define USB_VENDOR_ID_GTCO 0x078c
|
||||||
|
#define USB_DEVICE_ID_GTCO_90 0x0090
|
||||||
|
#define USB_DEVICE_ID_GTCO_100 0x0100
|
||||||
|
#define USB_DEVICE_ID_GTCO_101 0x0101
|
||||||
|
#define USB_DEVICE_ID_GTCO_103 0x0103
|
||||||
|
#define USB_DEVICE_ID_GTCO_104 0x0104
|
||||||
|
#define USB_DEVICE_ID_GTCO_105 0x0105
|
||||||
|
#define USB_DEVICE_ID_GTCO_106 0x0106
|
||||||
|
#define USB_DEVICE_ID_GTCO_107 0x0107
|
||||||
|
#define USB_DEVICE_ID_GTCO_108 0x0108
|
||||||
|
#define USB_DEVICE_ID_GTCO_200 0x0200
|
||||||
|
#define USB_DEVICE_ID_GTCO_201 0x0201
|
||||||
|
#define USB_DEVICE_ID_GTCO_202 0x0202
|
||||||
|
#define USB_DEVICE_ID_GTCO_203 0x0203
|
||||||
|
#define USB_DEVICE_ID_GTCO_204 0x0204
|
||||||
|
#define USB_DEVICE_ID_GTCO_205 0x0205
|
||||||
|
#define USB_DEVICE_ID_GTCO_206 0x0206
|
||||||
|
#define USB_DEVICE_ID_GTCO_207 0x0207
|
||||||
|
#define USB_DEVICE_ID_GTCO_300 0x0300
|
||||||
|
#define USB_DEVICE_ID_GTCO_301 0x0301
|
||||||
|
#define USB_DEVICE_ID_GTCO_302 0x0302
|
||||||
|
#define USB_DEVICE_ID_GTCO_303 0x0303
|
||||||
|
#define USB_DEVICE_ID_GTCO_304 0x0304
|
||||||
|
#define USB_DEVICE_ID_GTCO_305 0x0305
|
||||||
|
#define USB_DEVICE_ID_GTCO_306 0x0306
|
||||||
|
#define USB_DEVICE_ID_GTCO_307 0x0307
|
||||||
|
#define USB_DEVICE_ID_GTCO_308 0x0308
|
||||||
|
#define USB_DEVICE_ID_GTCO_309 0x0309
|
||||||
|
#define USB_DEVICE_ID_GTCO_400 0x0400
|
||||||
|
#define USB_DEVICE_ID_GTCO_401 0x0401
|
||||||
|
#define USB_DEVICE_ID_GTCO_402 0x0402
|
||||||
|
#define USB_DEVICE_ID_GTCO_403 0x0403
|
||||||
|
#define USB_DEVICE_ID_GTCO_404 0x0404
|
||||||
|
#define USB_DEVICE_ID_GTCO_404 0x0405
|
||||||
|
#define USB_DEVICE_ID_GTCO_500 0x0500
|
||||||
|
#define USB_DEVICE_ID_GTCO_501 0x0501
|
||||||
|
#define USB_DEVICE_ID_GTCO_502 0x0502
|
||||||
|
#define USB_DEVICE_ID_GTCO_503 0x0503
|
||||||
|
#define USB_DEVICE_ID_GTCO_504 0x0504
|
||||||
|
#define USB_DEVICE_ID_GTCO_1000 0x1000
|
||||||
|
#define USB_DEVICE_ID_GTCO_1001 0x1001
|
||||||
|
#define USB_DEVICE_ID_GTCO_1002 0x1002
|
||||||
|
#define USB_DEVICE_ID_GTCO_1003 0x1003
|
||||||
|
#define USB_DEVICE_ID_GTCO_1004 0x1004
|
||||||
|
#define USB_DEVICE_ID_GTCO_1005 0x1005
|
||||||
|
#define USB_DEVICE_ID_GTCO_1006 0x1006
|
||||||
|
|
||||||
#define USB_VENDOR_ID_WACOM 0x056a
|
#define USB_VENDOR_ID_WACOM 0x056a
|
||||||
#define USB_DEVICE_ID_WACOM_PENPARTNER 0x0000
|
|
||||||
#define USB_DEVICE_ID_WACOM_GRAPHIRE 0x0010
|
|
||||||
#define USB_DEVICE_ID_WACOM_INTUOS 0x0020
|
|
||||||
#define USB_DEVICE_ID_WACOM_PL 0x0030
|
|
||||||
#define USB_DEVICE_ID_WACOM_INTUOS2 0x0040
|
|
||||||
#define USB_DEVICE_ID_WACOM_VOLITO 0x0060
|
|
||||||
#define USB_DEVICE_ID_WACOM_PTU 0x0003
|
|
||||||
#define USB_DEVICE_ID_WACOM_INTUOS3 0x00B0
|
|
||||||
#define USB_DEVICE_ID_WACOM_CINTIQ 0x003F
|
|
||||||
#define USB_DEVICE_ID_WACOM_DTF 0x00C0
|
|
||||||
|
|
||||||
#define USB_VENDOR_ID_ACECAD 0x0460
|
#define USB_VENDOR_ID_ACECAD 0x0460
|
||||||
#define USB_DEVICE_ID_ACECAD_FLAIR 0x0004
|
#define USB_DEVICE_ID_ACECAD_FLAIR 0x0004
|
||||||
|
@ -1588,6 +1625,51 @@ static const struct hid_blacklist {
|
||||||
{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_8_IF_KIT, HID_QUIRK_IGNORE },
|
{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_8_IF_KIT, HID_QUIRK_IGNORE },
|
||||||
{ USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE, HID_QUIRK_IGNORE },
|
{ USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE, HID_QUIRK_IGNORE },
|
||||||
{ USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_SOUNDKNOB, HID_QUIRK_IGNORE },
|
{ USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_SOUNDKNOB, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_90, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_100, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_101, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_103, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_104, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_105, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_106, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_107, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_108, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_200, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_201, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_202, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_203, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_204, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_205, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_206, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_207, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_300, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_301, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_302, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_303, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_304, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_305, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_306, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_307, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_308, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_309, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_400, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_401, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_402, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_403, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_404, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_404, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_500, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_501, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_502, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_503, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_504, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1000, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1001, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1002, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1003, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1004, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1005, HID_QUIRK_IGNORE },
|
||||||
|
{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006, HID_QUIRK_IGNORE },
|
||||||
{ USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO, HID_QUIRK_IGNORE },
|
{ USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO, HID_QUIRK_IGNORE },
|
||||||
{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CASSY, HID_QUIRK_IGNORE },
|
{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CASSY, HID_QUIRK_IGNORE },
|
||||||
{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POCKETCASSY, HID_QUIRK_IGNORE },
|
{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POCKETCASSY, HID_QUIRK_IGNORE },
|
||||||
|
@ -1617,49 +1699,6 @@ static const struct hid_blacklist {
|
||||||
{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP, HID_QUIRK_IGNORE },
|
{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP, HID_QUIRK_IGNORE },
|
||||||
{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP, HID_QUIRK_IGNORE },
|
{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP, HID_QUIRK_IGNORE },
|
||||||
{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS, HID_QUIRK_IGNORE },
|
{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS, HID_QUIRK_IGNORE },
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PENPARTNER, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 1, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 2, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 3, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 4, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 1, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 2, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 3, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 4, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 1, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 2, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 3, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 4, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 5, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 7, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 8, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 9, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 1, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 2, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 3, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 4, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 5, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 7, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO + 1, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO + 2, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO + 3, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO + 4, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 5, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 6, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PTU, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 1, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 2, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 3, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 4, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS3 + 5, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_CINTIQ, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_DTF + 3, HID_QUIRK_IGNORE },
|
|
||||||
{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
|
{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
|
||||||
{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
|
{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
|
||||||
{ USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K, HID_QUIRK_IGNORE },
|
{ USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K, HID_QUIRK_IGNORE },
|
||||||
|
@ -1778,6 +1817,10 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
|
||||||
char *rdesc;
|
char *rdesc;
|
||||||
int n, len, insize = 0;
|
int n, len, insize = 0;
|
||||||
|
|
||||||
|
/* Ignore all Wacom devices */
|
||||||
|
if (dev->descriptor.idVendor == USB_VENDOR_ID_WACOM)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
for (n = 0; hid_blacklist[n].idVendor; n++)
|
for (n = 0; hid_blacklist[n].idVendor; n++)
|
||||||
if ((hid_blacklist[n].idVendor == le16_to_cpu(dev->descriptor.idVendor)) &&
|
if ((hid_blacklist[n].idVendor == le16_to_cpu(dev->descriptor.idVendor)) &&
|
||||||
(hid_blacklist[n].idProduct == le16_to_cpu(dev->descriptor.idProduct)))
|
(hid_blacklist[n].idProduct == le16_to_cpu(dev->descriptor.idProduct)))
|
||||||
|
|
|
@ -131,6 +131,7 @@ struct usb_eth_dev {
|
||||||
#define VENDOR_COREGA 0x07aa
|
#define VENDOR_COREGA 0x07aa
|
||||||
#define VENDOR_DLINK 0x2001
|
#define VENDOR_DLINK 0x2001
|
||||||
#define VENDOR_ELCON 0x0db7
|
#define VENDOR_ELCON 0x0db7
|
||||||
|
#define VENDOR_ELECOM 0x056e
|
||||||
#define VENDOR_ELSA 0x05cc
|
#define VENDOR_ELSA 0x05cc
|
||||||
#define VENDOR_GIGABYTE 0x1044
|
#define VENDOR_GIGABYTE 0x1044
|
||||||
#define VENDOR_HAWKING 0x0e66
|
#define VENDOR_HAWKING 0x0e66
|
||||||
|
@ -233,6 +234,8 @@ PEGASUS_DEV( "D-Link DSB-650", VENDOR_DLINK, 0xabc1,
|
||||||
DEFAULT_GPIO_RESET )
|
DEFAULT_GPIO_RESET )
|
||||||
PEGASUS_DEV( "GOLDPFEIL USB Adapter", VENDOR_ELCON, 0x0002,
|
PEGASUS_DEV( "GOLDPFEIL USB Adapter", VENDOR_ELCON, 0x0002,
|
||||||
DEFAULT_GPIO_RESET | PEGASUS_II | HAS_HOME_PNA )
|
DEFAULT_GPIO_RESET | PEGASUS_II | HAS_HOME_PNA )
|
||||||
|
PEGASUS_DEV( "ELECOM USB Ethernet LD-USB20", VENDOR_ELECOM, 0x4010,
|
||||||
|
DEFAULT_GPIO_RESET | PEGASUS_II )
|
||||||
PEGASUS_DEV( "EasiDock Ethernet", VENDOR_MOBILITY, 0x0304,
|
PEGASUS_DEV( "EasiDock Ethernet", VENDOR_MOBILITY, 0x0304,
|
||||||
DEFAULT_GPIO_RESET )
|
DEFAULT_GPIO_RESET )
|
||||||
PEGASUS_DEV( "Elsa Micolink USB2Ethernet", VENDOR_ELSA, 0x3000,
|
PEGASUS_DEV( "Elsa Micolink USB2Ethernet", VENDOR_ELSA, 0x3000,
|
||||||
|
|
|
@ -972,6 +972,7 @@ static void rtl8150_disconnect(struct usb_interface *intf)
|
||||||
if (dev) {
|
if (dev) {
|
||||||
set_bit(RTL8150_UNPLUG, &dev->flags);
|
set_bit(RTL8150_UNPLUG, &dev->flags);
|
||||||
tasklet_disable(&dev->tl);
|
tasklet_disable(&dev->tl);
|
||||||
|
tasklet_kill(&dev->tl);
|
||||||
unregister_netdev(dev->netdev);
|
unregister_netdev(dev->netdev);
|
||||||
unlink_all_urbs(dev);
|
unlink_all_urbs(dev);
|
||||||
free_all_urbs(dev);
|
free_all_urbs(dev);
|
||||||
|
|
|
@ -241,16 +241,6 @@ UNUSUAL_DEV( 0x0482, 0x0103, 0x0100, 0x0100,
|
||||||
"Finecam S5",
|
"Finecam S5",
|
||||||
US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY),
|
US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY),
|
||||||
|
|
||||||
/* Patch for Kyocera Finecam L3
|
|
||||||
* Submitted by Michael Krauth <michael.krauth@web.de>
|
|
||||||
* and Alessandro Fracchetti <al.fracchetti@tin.it>
|
|
||||||
*/
|
|
||||||
UNUSUAL_DEV( 0x0482, 0x0105, 0x0100, 0x0100,
|
|
||||||
"Kyocera",
|
|
||||||
"Finecam L3",
|
|
||||||
US_SC_SCSI, US_PR_BULK, NULL,
|
|
||||||
US_FL_FIX_INQUIRY),
|
|
||||||
|
|
||||||
/* Reported by Paul Stewart <stewart@wetlogic.net>
|
/* Reported by Paul Stewart <stewart@wetlogic.net>
|
||||||
* This entry is needed because the device reports Sub=ff */
|
* This entry is needed because the device reports Sub=ff */
|
||||||
UNUSUAL_DEV( 0x04a4, 0x0004, 0x0001, 0x0001,
|
UNUSUAL_DEV( 0x04a4, 0x0004, 0x0001, 0x0001,
|
||||||
|
@ -599,6 +589,13 @@ UNUSUAL_DEV( 0x054c, 0x0099, 0x0000, 0x9999,
|
||||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
US_FL_FIX_INQUIRY ),
|
US_FL_FIX_INQUIRY ),
|
||||||
|
|
||||||
|
/* floppy reports multiple luns */
|
||||||
|
UNUSUAL_DEV( 0x055d, 0x2020, 0x0000, 0x0210,
|
||||||
|
"SAMSUNG",
|
||||||
|
"SFD-321U [FW 0C]",
|
||||||
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
|
US_FL_SINGLE_LUN ),
|
||||||
|
|
||||||
|
|
||||||
UNUSUAL_DEV( 0x057b, 0x0000, 0x0000, 0x0299,
|
UNUSUAL_DEV( 0x057b, 0x0000, 0x0000, 0x0299,
|
||||||
"Y-E Data",
|
"Y-E Data",
|
||||||
|
@ -1257,6 +1254,13 @@ UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000,
|
||||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
US_FL_NO_WP_DETECT ),
|
US_FL_NO_WP_DETECT ),
|
||||||
|
|
||||||
|
/* Reported by Emmanuel Vasilakis <evas@forthnet.gr> */
|
||||||
|
UNUSUAL_DEV( 0x0fce, 0xe031, 0x0000, 0x0000,
|
||||||
|
"Sony Ericsson",
|
||||||
|
"M600i",
|
||||||
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
|
US_FL_FIX_CAPACITY ),
|
||||||
|
|
||||||
/* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu>
|
/* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu>
|
||||||
* Tested on hardware version 1.10.
|
* Tested on hardware version 1.10.
|
||||||
* Entry is needed only for the initializer function override.
|
* Entry is needed only for the initializer function override.
|
||||||
|
|
|
@ -1292,6 +1292,7 @@
|
||||||
#define PCI_DEVICE_ID_VIA_8367_0 0x3099
|
#define PCI_DEVICE_ID_VIA_8367_0 0x3099
|
||||||
#define PCI_DEVICE_ID_VIA_8653_0 0x3101
|
#define PCI_DEVICE_ID_VIA_8653_0 0x3101
|
||||||
#define PCI_DEVICE_ID_VIA_8622 0x3102
|
#define PCI_DEVICE_ID_VIA_8622 0x3102
|
||||||
|
#define PCI_DEVICE_ID_VIA_8235_USB_2 0x3104
|
||||||
#define PCI_DEVICE_ID_VIA_8233C_0 0x3109
|
#define PCI_DEVICE_ID_VIA_8233C_0 0x3109
|
||||||
#define PCI_DEVICE_ID_VIA_8361 0x3112
|
#define PCI_DEVICE_ID_VIA_8361 0x3112
|
||||||
#define PCI_DEVICE_ID_VIA_XM266 0x3116
|
#define PCI_DEVICE_ID_VIA_XM266 0x3116
|
||||||
|
|
Загрузка…
Ссылка в новой задаче