mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	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
					
				
					 11 changed files with 38 additions and 6 deletions
				
			
		|  | @ -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…
	
	Add table
		
		Reference in a new issue
	
	 Linus Torvalds
						Linus Torvalds