diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-03-02 18:15:07 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-03-02 18:15:07 -0500 |
| commit | a53c8ceb01c5ae29ae26ab1f97d53018b2021a29 (patch) | |
| tree | e7c44300f589caff9e1f53b9d6693797c0c7cb6b /drivers | |
| parent | 3751c97036011fc4492ff80ab4ac52c0b81ccf37 (diff) | |
| parent | a1227f3c1030e96ebc51d677d2f636268845c5fb (diff) | |
Merge tag 'usb-3.14-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB fixes from Greg KH:
"Here are 2 USB patches for 3.14-rc5, one a new device id, and the
other fixes a reported problem with threaded irqs and the USB EHCI
driver"
* tag 'usb-3.14-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
usb: ehci: fix deadlock when threadirqs option is used
USB: ftdi_sio: add Cressi Leonardo PID
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/usb/host/ehci-hcd.c | 13 | ||||
| -rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 2 | ||||
| -rw-r--r-- | drivers/usb/serial/ftdi_sio_ids.h | 6 |
3 files changed, 18 insertions, 3 deletions
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 471142725ffe..81cda09b47e3 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c | |||
| @@ -685,8 +685,15 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd) | |||
| 685 | struct ehci_hcd *ehci = hcd_to_ehci (hcd); | 685 | struct ehci_hcd *ehci = hcd_to_ehci (hcd); |
| 686 | u32 status, masked_status, pcd_status = 0, cmd; | 686 | u32 status, masked_status, pcd_status = 0, cmd; |
| 687 | int bh; | 687 | int bh; |
| 688 | unsigned long flags; | ||
| 688 | 689 | ||
| 689 | spin_lock (&ehci->lock); | 690 | /* |
| 691 | * For threadirqs option we use spin_lock_irqsave() variant to prevent | ||
| 692 | * deadlock with ehci hrtimer callback, because hrtimer callbacks run | ||
| 693 | * in interrupt context even when threadirqs is specified. We can go | ||
| 694 | * back to spin_lock() variant when hrtimer callbacks become threaded. | ||
| 695 | */ | ||
| 696 | spin_lock_irqsave(&ehci->lock, flags); | ||
| 690 | 697 | ||
| 691 | status = ehci_readl(ehci, &ehci->regs->status); | 698 | status = ehci_readl(ehci, &ehci->regs->status); |
| 692 | 699 | ||
| @@ -704,7 +711,7 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd) | |||
| 704 | 711 | ||
| 705 | /* Shared IRQ? */ | 712 | /* Shared IRQ? */ |
| 706 | if (!masked_status || unlikely(ehci->rh_state == EHCI_RH_HALTED)) { | 713 | if (!masked_status || unlikely(ehci->rh_state == EHCI_RH_HALTED)) { |
| 707 | spin_unlock(&ehci->lock); | 714 | spin_unlock_irqrestore(&ehci->lock, flags); |
| 708 | return IRQ_NONE; | 715 | return IRQ_NONE; |
| 709 | } | 716 | } |
| 710 | 717 | ||
| @@ -815,7 +822,7 @@ dead: | |||
| 815 | 822 | ||
| 816 | if (bh) | 823 | if (bh) |
| 817 | ehci_work (ehci); | 824 | ehci_work (ehci); |
| 818 | spin_unlock (&ehci->lock); | 825 | spin_unlock_irqrestore(&ehci->lock, flags); |
| 819 | if (pcd_status) | 826 | if (pcd_status) |
| 820 | usb_hcd_poll_rh_status(hcd); | 827 | usb_hcd_poll_rh_status(hcd); |
| 821 | return IRQ_HANDLED; | 828 | return IRQ_HANDLED; |
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index ee1f00f03c43..44ab12986805 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
| @@ -907,6 +907,8 @@ static const struct usb_device_id id_table_combined[] = { | |||
| 907 | /* Crucible Devices */ | 907 | /* Crucible Devices */ |
| 908 | { USB_DEVICE(FTDI_VID, FTDI_CT_COMET_PID) }, | 908 | { USB_DEVICE(FTDI_VID, FTDI_CT_COMET_PID) }, |
| 909 | { USB_DEVICE(FTDI_VID, FTDI_Z3X_PID) }, | 909 | { USB_DEVICE(FTDI_VID, FTDI_Z3X_PID) }, |
| 910 | /* Cressi Devices */ | ||
| 911 | { USB_DEVICE(FTDI_VID, FTDI_CRESSI_PID) }, | ||
| 910 | { } /* Terminating entry */ | 912 | { } /* Terminating entry */ |
| 911 | }; | 913 | }; |
| 912 | 914 | ||
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h index 1e2d369df86e..e599fbfcde5f 100644 --- a/drivers/usb/serial/ftdi_sio_ids.h +++ b/drivers/usb/serial/ftdi_sio_ids.h | |||
| @@ -1320,3 +1320,9 @@ | |||
| 1320 | * Manufacturer: Smart GSM Team | 1320 | * Manufacturer: Smart GSM Team |
| 1321 | */ | 1321 | */ |
| 1322 | #define FTDI_Z3X_PID 0x0011 | 1322 | #define FTDI_Z3X_PID 0x0011 |
| 1323 | |||
| 1324 | /* | ||
| 1325 | * Product: Cressi PC Interface | ||
| 1326 | * Manufacturer: Cressi | ||
| 1327 | */ | ||
| 1328 | #define FTDI_CRESSI_PID 0x87d0 | ||
