diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-01-30 22:35:35 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-01-30 22:35:35 -0500 |
| commit | 73dc61cb386b0fdc488e8c6545817c1bbbb6e93e (patch) | |
| tree | c659d6b8dbf031439fbce4d548bf68c4732eb67f | |
| parent | 6155bc14315763cf0f1989b3636ccc2f3e57f0d6 (diff) | |
| parent | 54eb4cd465423280c0e8a7150176667c92939ec4 (diff) | |
Merge tag 'usb-3.19-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB fixes from Greg KH:
"Here are some small USB fixes and quirk additions for 3.19-rc7.
All have been in linux-next for a while with no reported problems"
* tag 'usb-3.19-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
USB: Add OTG PET device to TPL
usb-storage/SCSI: blacklist FUA on JMicron 152d:2566 USB-SATA controller
uas: Add no-report-opcodes quirk for Simpletech devices with id 4971:8017
storage: Revise/fix quirk for 04E6:000F SCM USB-SCSI converter
usb: phy: never defer probe in non-OF case
usb: dwc2: call dwc2_is_controller_alive() under spinlock
| -rw-r--r-- | drivers/usb/core/otg_whitelist.h | 5 | ||||
| -rw-r--r-- | drivers/usb/core/quirks.c | 4 | ||||
| -rw-r--r-- | drivers/usb/dwc2/core_intr.c | 6 | ||||
| -rw-r--r-- | drivers/usb/phy/phy.c | 2 | ||||
| -rw-r--r-- | drivers/usb/storage/unusual_devs.h | 9 | ||||
| -rw-r--r-- | drivers/usb/storage/unusual_uas.h | 7 |
6 files changed, 28 insertions, 5 deletions
diff --git a/drivers/usb/core/otg_whitelist.h b/drivers/usb/core/otg_whitelist.h index de0c9c9d7091..a6315abe7b7c 100644 --- a/drivers/usb/core/otg_whitelist.h +++ b/drivers/usb/core/otg_whitelist.h | |||
| @@ -55,6 +55,11 @@ static int is_targeted(struct usb_device *dev) | |||
| 55 | le16_to_cpu(dev->descriptor.idProduct) == 0xbadd)) | 55 | le16_to_cpu(dev->descriptor.idProduct) == 0xbadd)) |
| 56 | return 0; | 56 | return 0; |
| 57 | 57 | ||
| 58 | /* OTG PET device is always targeted (see OTG 2.0 ECN 6.4.2) */ | ||
| 59 | if ((le16_to_cpu(dev->descriptor.idVendor) == 0x1a0a && | ||
| 60 | le16_to_cpu(dev->descriptor.idProduct) == 0x0200)) | ||
| 61 | return 1; | ||
| 62 | |||
| 58 | /* NOTE: can't use usb_match_id() since interface caches | 63 | /* NOTE: can't use usb_match_id() since interface caches |
| 59 | * aren't set up yet. this is cut/paste from that code. | 64 | * aren't set up yet. this is cut/paste from that code. |
| 60 | */ | 65 | */ |
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index 0ffb4ed0a945..41e510ae8c83 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c | |||
| @@ -179,6 +179,10 @@ static const struct usb_device_id usb_quirk_list[] = { | |||
| 179 | { USB_DEVICE(0x0b05, 0x17e0), .driver_info = | 179 | { USB_DEVICE(0x0b05, 0x17e0), .driver_info = |
| 180 | USB_QUIRK_IGNORE_REMOTE_WAKEUP }, | 180 | USB_QUIRK_IGNORE_REMOTE_WAKEUP }, |
| 181 | 181 | ||
| 182 | /* Protocol and OTG Electrical Test Device */ | ||
| 183 | { USB_DEVICE(0x1a0a, 0x0200), .driver_info = | ||
| 184 | USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL }, | ||
| 185 | |||
| 182 | { } /* terminating entry must be last */ | 186 | { } /* terminating entry must be last */ |
| 183 | }; | 187 | }; |
| 184 | 188 | ||
diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c index ad43c5bc1ef1..02e3e2d4ea56 100644 --- a/drivers/usb/dwc2/core_intr.c +++ b/drivers/usb/dwc2/core_intr.c | |||
| @@ -476,13 +476,13 @@ irqreturn_t dwc2_handle_common_intr(int irq, void *dev) | |||
| 476 | u32 gintsts; | 476 | u32 gintsts; |
| 477 | irqreturn_t retval = IRQ_NONE; | 477 | irqreturn_t retval = IRQ_NONE; |
| 478 | 478 | ||
| 479 | spin_lock(&hsotg->lock); | ||
| 480 | |||
| 479 | if (!dwc2_is_controller_alive(hsotg)) { | 481 | if (!dwc2_is_controller_alive(hsotg)) { |
| 480 | dev_warn(hsotg->dev, "Controller is dead\n"); | 482 | dev_warn(hsotg->dev, "Controller is dead\n"); |
| 481 | goto out; | 483 | goto out; |
| 482 | } | 484 | } |
| 483 | 485 | ||
| 484 | spin_lock(&hsotg->lock); | ||
| 485 | |||
| 486 | gintsts = dwc2_read_common_intr(hsotg); | 486 | gintsts = dwc2_read_common_intr(hsotg); |
| 487 | if (gintsts & ~GINTSTS_PRTINT) | 487 | if (gintsts & ~GINTSTS_PRTINT) |
| 488 | retval = IRQ_HANDLED; | 488 | retval = IRQ_HANDLED; |
| @@ -515,8 +515,8 @@ irqreturn_t dwc2_handle_common_intr(int irq, void *dev) | |||
| 515 | } | 515 | } |
| 516 | } | 516 | } |
| 517 | 517 | ||
| 518 | spin_unlock(&hsotg->lock); | ||
| 519 | out: | 518 | out: |
| 519 | spin_unlock(&hsotg->lock); | ||
| 520 | return retval; | 520 | return retval; |
| 521 | } | 521 | } |
| 522 | EXPORT_SYMBOL_GPL(dwc2_handle_common_intr); | 522 | EXPORT_SYMBOL_GPL(dwc2_handle_common_intr); |
diff --git a/drivers/usb/phy/phy.c b/drivers/usb/phy/phy.c index ccfdfb24b240..2f9735b35338 100644 --- a/drivers/usb/phy/phy.c +++ b/drivers/usb/phy/phy.c | |||
| @@ -34,7 +34,7 @@ static struct usb_phy *__usb_find_phy(struct list_head *list, | |||
| 34 | return phy; | 34 | return phy; |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | return ERR_PTR(-EPROBE_DEFER); | 37 | return ERR_PTR(-ENODEV); |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | static struct usb_phy *__usb_find_phy_dev(struct device *dev, | 40 | static struct usb_phy *__usb_find_phy_dev(struct device *dev, |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 11c7a9676441..d684b4b8108f 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
| @@ -507,7 +507,7 @@ UNUSUAL_DEV( 0x04e6, 0x000c, 0x0100, 0x0100, | |||
| 507 | UNUSUAL_DEV( 0x04e6, 0x000f, 0x0000, 0x9999, | 507 | UNUSUAL_DEV( 0x04e6, 0x000f, 0x0000, 0x9999, |
| 508 | "SCM Microsystems", | 508 | "SCM Microsystems", |
| 509 | "eUSB SCSI Adapter (Bus Powered)", | 509 | "eUSB SCSI Adapter (Bus Powered)", |
| 510 | USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init, | 510 | USB_SC_SCSI, USB_PR_BULK, usb_stor_euscsi_init, |
| 511 | US_FL_SCM_MULT_TARG ), | 511 | US_FL_SCM_MULT_TARG ), |
| 512 | 512 | ||
| 513 | UNUSUAL_DEV( 0x04e6, 0x0101, 0x0200, 0x0200, | 513 | UNUSUAL_DEV( 0x04e6, 0x0101, 0x0200, 0x0200, |
| @@ -1995,6 +1995,13 @@ UNUSUAL_DEV( 0x152d, 0x2329, 0x0100, 0x0100, | |||
| 1995 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | 1995 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
| 1996 | US_FL_IGNORE_RESIDUE | US_FL_SANE_SENSE ), | 1996 | US_FL_IGNORE_RESIDUE | US_FL_SANE_SENSE ), |
| 1997 | 1997 | ||
| 1998 | /* Reported by Dmitry Nezhevenko <dion@dion.org.ua> */ | ||
| 1999 | UNUSUAL_DEV( 0x152d, 0x2566, 0x0114, 0x0114, | ||
| 2000 | "JMicron", | ||
| 2001 | "USB to ATA/ATAPI Bridge", | ||
| 2002 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
| 2003 | US_FL_BROKEN_FUA ), | ||
| 2004 | |||
| 1998 | /* Entrega Technologies U1-SC25 (later Xircom PortGear PGSCSI) | 2005 | /* Entrega Technologies U1-SC25 (later Xircom PortGear PGSCSI) |
| 1999 | * and Mac USB Dock USB-SCSI */ | 2006 | * and Mac USB Dock USB-SCSI */ |
| 2000 | UNUSUAL_DEV( 0x1645, 0x0007, 0x0100, 0x0133, | 2007 | UNUSUAL_DEV( 0x1645, 0x0007, 0x0100, 0x0133, |
diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h index 6df4357d9ee3..dbc00e56c7f5 100644 --- a/drivers/usb/storage/unusual_uas.h +++ b/drivers/usb/storage/unusual_uas.h | |||
| @@ -140,3 +140,10 @@ UNUSUAL_DEV(0x4971, 0x1012, 0x0000, 0x9999, | |||
| 140 | "External HDD", | 140 | "External HDD", |
| 141 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | 141 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
| 142 | US_FL_IGNORE_UAS), | 142 | US_FL_IGNORE_UAS), |
| 143 | |||
| 144 | /* Reported-by: Richard Henderson <rth@redhat.com> */ | ||
| 145 | UNUSUAL_DEV(0x4971, 0x8017, 0x0000, 0x9999, | ||
| 146 | "SimpleTech", | ||
| 147 | "External HDD", | ||
| 148 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
| 149 | US_FL_NO_REPORT_OPCODES), | ||
