USB fixes for 5.10-rc3
Here are some small USB fixes and new device ids for 5.10-rc3 They include: - USB gadget fixes for some reported issues - Fixes for the every-troublesome apple fastcharge driver, hopefully we finally have it right. - More USB core quirks for odd devices - USB serial driver fixes for some long-standing issues that were recently found - some new USB serial driver device ids All have been in linux-next with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCX6g8RA8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ynX/wCg2StXM3DVNqnEvOF8OQ23WAgcC0IAoKIYuTNi Uh303+JJ6A0cz4uGfhc0 =OKt5 -----END PGP SIGNATURE----- Merge tag 'usb-5.10-rc3' 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 new device ids: - USB gadget fixes for some reported issues - Fixes for the ever-troublesome apple fastcharge driver, hopefully we finally have it right. - More USB core quirks for odd devices - USB serial driver fixes for some long-standing issues that were recently found - some new USB serial driver device ids All have been in linux-next with no reported issues" * tag 'usb-5.10-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: USB: apple-mfi-fastcharge: fix reference leak in apple_mfi_fc_set_property usb: mtu3: fix panic in mtu3_gadget_stop() USB: serial: option: add Telit FN980 composition 0x1055 USB: serial: option: add LE910Cx compositions 0x1203, 0x1230, 0x1231 USB: serial: cyberjack: fix write-URB completion race USB: Add NO_LPM quirk for Kingston flash drive USB: serial: option: add Quectel EC200T module support usb: raw-gadget: fix memory leak in gadget_setup usb: dwc2: Avoid leaving the error_debugfs label unused usb: dwc3: ep0: Fix delay status handling usb: gadget: fsl: fix null pointer checking usb: gadget: goku_udc: fix potential crashes in probe usb: dwc3: pci: add support for the Intel Alder Lake-S
This commit is contained in:
commit
df53b815c7
|
@ -378,6 +378,9 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||||
{ USB_DEVICE(0x0926, 0x3333), .driver_info =
|
{ USB_DEVICE(0x0926, 0x3333), .driver_info =
|
||||||
USB_QUIRK_CONFIG_INTF_STRINGS },
|
USB_QUIRK_CONFIG_INTF_STRINGS },
|
||||||
|
|
||||||
|
/* Kingston DataTraveler 3.0 */
|
||||||
|
{ USB_DEVICE(0x0951, 0x1666), .driver_info = USB_QUIRK_NO_LPM },
|
||||||
|
|
||||||
/* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */
|
/* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */
|
||||||
{ USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF },
|
{ USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF },
|
||||||
|
|
||||||
|
|
|
@ -608,10 +608,13 @@ static int dwc2_driver_probe(struct platform_device *dev)
|
||||||
#endif /* CONFIG_USB_DWC2_PERIPHERAL || CONFIG_USB_DWC2_DUAL_ROLE */
|
#endif /* CONFIG_USB_DWC2_PERIPHERAL || CONFIG_USB_DWC2_DUAL_ROLE */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) || \
|
||||||
|
IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
|
||||||
error_debugfs:
|
error_debugfs:
|
||||||
dwc2_debugfs_exit(hsotg);
|
dwc2_debugfs_exit(hsotg);
|
||||||
if (hsotg->hcd_enabled)
|
if (hsotg->hcd_enabled)
|
||||||
dwc2_hcd_remove(hsotg);
|
dwc2_hcd_remove(hsotg);
|
||||||
|
#endif
|
||||||
error_drd:
|
error_drd:
|
||||||
dwc2_drd_exit(hsotg);
|
dwc2_drd_exit(hsotg);
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#define PCI_DEVICE_ID_INTEL_TGPLP 0xa0ee
|
#define PCI_DEVICE_ID_INTEL_TGPLP 0xa0ee
|
||||||
#define PCI_DEVICE_ID_INTEL_TGPH 0x43ee
|
#define PCI_DEVICE_ID_INTEL_TGPH 0x43ee
|
||||||
#define PCI_DEVICE_ID_INTEL_JSP 0x4dee
|
#define PCI_DEVICE_ID_INTEL_JSP 0x4dee
|
||||||
|
#define PCI_DEVICE_ID_INTEL_ADLS 0x7ae1
|
||||||
|
|
||||||
#define PCI_INTEL_BXT_DSM_GUID "732b85d5-b7a7-4a1b-9ba0-4bbd00ffd511"
|
#define PCI_INTEL_BXT_DSM_GUID "732b85d5-b7a7-4a1b-9ba0-4bbd00ffd511"
|
||||||
#define PCI_INTEL_BXT_FUNC_PMU_PWR 4
|
#define PCI_INTEL_BXT_FUNC_PMU_PWR 4
|
||||||
|
@ -367,6 +368,9 @@ static const struct pci_device_id dwc3_pci_id_table[] = {
|
||||||
{ PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_JSP),
|
{ PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_JSP),
|
||||||
(kernel_ulong_t) &dwc3_pci_intel_properties, },
|
(kernel_ulong_t) &dwc3_pci_intel_properties, },
|
||||||
|
|
||||||
|
{ PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ADLS),
|
||||||
|
(kernel_ulong_t) &dwc3_pci_intel_properties, },
|
||||||
|
|
||||||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_NL_USB),
|
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_NL_USB),
|
||||||
(kernel_ulong_t) &dwc3_pci_amd_properties, },
|
(kernel_ulong_t) &dwc3_pci_amd_properties, },
|
||||||
{ } /* Terminating Entry */
|
{ } /* Terminating Entry */
|
||||||
|
|
|
@ -1058,10 +1058,11 @@ void dwc3_ep0_send_delayed_status(struct dwc3 *dwc)
|
||||||
{
|
{
|
||||||
unsigned int direction = !dwc->ep0_expect_in;
|
unsigned int direction = !dwc->ep0_expect_in;
|
||||||
|
|
||||||
|
dwc->delayed_status = false;
|
||||||
|
|
||||||
if (dwc->ep0state != EP0_STATUS_PHASE)
|
if (dwc->ep0state != EP0_STATUS_PHASE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dwc->delayed_status = false;
|
|
||||||
__dwc3_ep0_do_control_status(dwc, dwc->eps[direction]);
|
__dwc3_ep0_do_control_status(dwc, dwc->eps[direction]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -564,9 +564,12 @@ static int raw_ioctl_event_fetch(struct raw_dev *dev, unsigned long value)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
length = min(arg.length, event->length);
|
length = min(arg.length, event->length);
|
||||||
if (copy_to_user((void __user *)value, event, sizeof(*event) + length))
|
if (copy_to_user((void __user *)value, event, sizeof(*event) + length)) {
|
||||||
|
kfree(event);
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
kfree(event);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1051,7 +1051,7 @@ static int fsl_ep_fifo_status(struct usb_ep *_ep)
|
||||||
u32 bitmask;
|
u32 bitmask;
|
||||||
struct ep_queue_head *qh;
|
struct ep_queue_head *qh;
|
||||||
|
|
||||||
if (!_ep || _ep->desc || !(_ep->desc->bEndpointAddress&0xF))
|
if (!_ep || !_ep->desc || !(_ep->desc->bEndpointAddress&0xF))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
ep = container_of(_ep, struct fsl_ep, ep);
|
ep = container_of(_ep, struct fsl_ep, ep);
|
||||||
|
|
|
@ -1760,6 +1760,7 @@ static int goku_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pci_set_drvdata(pdev, dev);
|
||||||
spin_lock_init(&dev->lock);
|
spin_lock_init(&dev->lock);
|
||||||
dev->pdev = pdev;
|
dev->pdev = pdev;
|
||||||
dev->gadget.ops = &goku_ops;
|
dev->gadget.ops = &goku_ops;
|
||||||
|
@ -1793,7 +1794,6 @@ static int goku_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
}
|
}
|
||||||
dev->regs = (struct goku_udc_regs __iomem *) base;
|
dev->regs = (struct goku_udc_regs __iomem *) base;
|
||||||
|
|
||||||
pci_set_drvdata(pdev, dev);
|
|
||||||
INFO(dev, "%s\n", driver_desc);
|
INFO(dev, "%s\n", driver_desc);
|
||||||
INFO(dev, "version: " DRIVER_VERSION " %s\n", dmastr());
|
INFO(dev, "version: " DRIVER_VERSION " %s\n", dmastr());
|
||||||
INFO(dev, "irq %d, pci mem %p\n", pdev->irq, base);
|
INFO(dev, "irq %d, pci mem %p\n", pdev->irq, base);
|
||||||
|
|
|
@ -120,8 +120,10 @@ static int apple_mfi_fc_set_property(struct power_supply *psy,
|
||||||
dev_dbg(&mfi->udev->dev, "prop: %d\n", psp);
|
dev_dbg(&mfi->udev->dev, "prop: %d\n", psp);
|
||||||
|
|
||||||
ret = pm_runtime_get_sync(&mfi->udev->dev);
|
ret = pm_runtime_get_sync(&mfi->udev->dev);
|
||||||
if (ret < 0)
|
if (ret < 0) {
|
||||||
|
pm_runtime_put_noidle(&mfi->udev->dev);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
switch (psp) {
|
switch (psp) {
|
||||||
case POWER_SUPPLY_PROP_CHARGE_TYPE:
|
case POWER_SUPPLY_PROP_CHARGE_TYPE:
|
||||||
|
|
|
@ -564,6 +564,7 @@ static int mtu3_gadget_stop(struct usb_gadget *g)
|
||||||
|
|
||||||
spin_unlock_irqrestore(&mtu->lock, flags);
|
spin_unlock_irqrestore(&mtu->lock, flags);
|
||||||
|
|
||||||
|
synchronize_irq(mtu->irq);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -357,11 +357,12 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
|
||||||
struct device *dev = &port->dev;
|
struct device *dev = &port->dev;
|
||||||
int status = urb->status;
|
int status = urb->status;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
bool resubmitted = false;
|
||||||
|
|
||||||
set_bit(0, &port->write_urbs_free);
|
|
||||||
if (status) {
|
if (status) {
|
||||||
dev_dbg(dev, "%s - nonzero write bulk status received: %d\n",
|
dev_dbg(dev, "%s - nonzero write bulk status received: %d\n",
|
||||||
__func__, status);
|
__func__, status);
|
||||||
|
set_bit(0, &port->write_urbs_free);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -394,6 +395,8 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resubmitted = true;
|
||||||
|
|
||||||
dev_dbg(dev, "%s - priv->wrsent=%d\n", __func__, priv->wrsent);
|
dev_dbg(dev, "%s - priv->wrsent=%d\n", __func__, priv->wrsent);
|
||||||
dev_dbg(dev, "%s - priv->wrfilled=%d\n", __func__, priv->wrfilled);
|
dev_dbg(dev, "%s - priv->wrfilled=%d\n", __func__, priv->wrfilled);
|
||||||
|
|
||||||
|
@ -410,6 +413,8 @@ static void cyberjack_write_bulk_callback(struct urb *urb)
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
spin_unlock_irqrestore(&priv->lock, flags);
|
spin_unlock_irqrestore(&priv->lock, flags);
|
||||||
|
if (!resubmitted)
|
||||||
|
set_bit(0, &port->write_urbs_free);
|
||||||
usb_serial_port_softint(port);
|
usb_serial_port_softint(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -250,6 +250,7 @@ static void option_instat_callback(struct urb *urb);
|
||||||
#define QUECTEL_PRODUCT_EP06 0x0306
|
#define QUECTEL_PRODUCT_EP06 0x0306
|
||||||
#define QUECTEL_PRODUCT_EM12 0x0512
|
#define QUECTEL_PRODUCT_EM12 0x0512
|
||||||
#define QUECTEL_PRODUCT_RM500Q 0x0800
|
#define QUECTEL_PRODUCT_RM500Q 0x0800
|
||||||
|
#define QUECTEL_PRODUCT_EC200T 0x6026
|
||||||
|
|
||||||
#define CMOTECH_VENDOR_ID 0x16d8
|
#define CMOTECH_VENDOR_ID 0x16d8
|
||||||
#define CMOTECH_PRODUCT_6001 0x6001
|
#define CMOTECH_PRODUCT_6001 0x6001
|
||||||
|
@ -1117,6 +1118,7 @@ static const struct usb_device_id option_ids[] = {
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10),
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10),
|
||||||
.driver_info = ZLP },
|
.driver_info = ZLP },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) },
|
||||||
|
|
||||||
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
|
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
|
||||||
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
|
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
|
||||||
|
@ -1189,6 +1191,8 @@ static const struct usb_device_id option_ids[] = {
|
||||||
.driver_info = NCTRL(0) | RSVD(1) },
|
.driver_info = NCTRL(0) | RSVD(1) },
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1054, 0xff), /* Telit FT980-KS */
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1054, 0xff), /* Telit FT980-KS */
|
||||||
.driver_info = NCTRL(2) | RSVD(3) },
|
.driver_info = NCTRL(2) | RSVD(3) },
|
||||||
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1055, 0xff), /* Telit FN980 (PCIe) */
|
||||||
|
.driver_info = NCTRL(0) | RSVD(1) },
|
||||||
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
|
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
|
||||||
.driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },
|
.driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },
|
||||||
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
|
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
|
||||||
|
@ -1201,6 +1205,8 @@ static const struct usb_device_id option_ids[] = {
|
||||||
.driver_info = NCTRL(0) },
|
.driver_info = NCTRL(0) },
|
||||||
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
|
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
|
||||||
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
|
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
|
||||||
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1203, 0xff), /* Telit LE910Cx (RNDIS) */
|
||||||
|
.driver_info = NCTRL(2) | RSVD(3) },
|
||||||
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
|
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
|
||||||
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
|
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
|
||||||
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
|
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
|
||||||
|
@ -1215,6 +1221,10 @@ static const struct usb_device_id option_ids[] = {
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1213, 0xff) },
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1213, 0xff) },
|
||||||
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214),
|
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214),
|
||||||
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
|
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) },
|
||||||
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1230, 0xff), /* Telit LE910Cx (rmnet) */
|
||||||
|
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
|
||||||
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1231, 0xff), /* Telit LE910Cx (RNDIS) */
|
||||||
|
.driver_info = NCTRL(2) | RSVD(3) },
|
||||||
{ USB_DEVICE(TELIT_VENDOR_ID, 0x1260),
|
{ USB_DEVICE(TELIT_VENDOR_ID, 0x1260),
|
||||||
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
|
.driver_info = NCTRL(0) | RSVD(1) | RSVD(2) },
|
||||||
{ USB_DEVICE(TELIT_VENDOR_ID, 0x1261),
|
{ USB_DEVICE(TELIT_VENDOR_ID, 0x1261),
|
||||||
|
|
Loading…
Reference in New Issue