Commit e8784b0a authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull USB fixes from Greg KH:
 "Here are some small USB fixes for 6.11-rc6.  Included in here are:

   - dwc3 driver fixes for reported issues

   - MAINTAINER file update, marking a driver as unsupported :(

   - cdnsp driver fixes

   - USB gadget driver fix

   - USB sysfs fix

   - other tiny fixes

   - new device ids for usb serial driver

  All of these have been in linux-next this week with no reported
  issues"

* tag 'usb-6.11-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
  USB: serial: option: add MeiG Smart SRM825L
  usb: cdnsp: fix for Link TRB with TC
  usb: dwc3: st: add missing depopulate in probe error path
  usb: dwc3: st: fix probed platform device ref count on probe error path
  usb: dwc3: ep0: Don't reset resource alloc flag (including ep0)
  usb: core: sysfs: Unmerge @usb3_hardware_lpm_attr_group in remove_power_attributes()
  usb: typec: fsa4480: Relax CHIP_ID check
  usb: dwc3: xilinx: add missing depopulate in probe error path
  usb: dwc3: omap: add missing depopulate in probe error path
  dt-bindings: usb: microchip,usb2514: Fix reference USB device schema
  usb: gadget: uvc: queue pump work in uvcg_video_enable()
  cdc-acm: Add DISABLE_ECHO quirk for GE HealthCare UI Controller
  usb: cdnsp: fix incorrect index in cdnsp_get_hw_deq function
  usb: dwc3: core: Prevent USB core invalid event buffer address access
  MAINTAINERS: Mark UVC gadget driver as orphan
parents 770b0ffe 58c2fa54
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ maintainers:
  - Fabio Estevam <festevam@gmail.com>

allOf:
  - $ref: usb-hcd.yaml#
  - $ref: usb-device.yaml#

properties:
  compatible:
@@ -36,6 +36,13 @@ required:
  - compatible
  - reg

patternProperties:
  "^.*@[0-9a-f]{1,2}$":
    description: The hard wired USB devices
    type: object
    $ref: /schemas/usb/usb-device.yaml
    additionalProperties: true

unevaluatedProperties: false

examples:
+1 −3
Original line number Diff line number Diff line
@@ -23848,10 +23848,8 @@ F: drivers/media/usb/uvc/
F:	include/uapi/linux/uvcvideo.h
USB WEBCAM GADGET
M:	Laurent Pinchart <laurent.pinchart@ideasonboard.com>
M:	Daniel Scally <dan.scally@ideasonboard.com>
L:	linux-usb@vger.kernel.org
S:	Maintained
S:	Orphan
F:	drivers/usb/gadget/function/*uvc*
F:	drivers/usb/gadget/legacy/webcam.c
F:	include/uapi/linux/usb/g_uvc.h
+3 −0
Original line number Diff line number Diff line
@@ -811,6 +811,7 @@ struct cdnsp_stream_info {
 *        generate Missed Service Error Event.
 *        Set skip flag when receive a Missed Service Error Event and
 *        process the missed tds on the endpoint ring.
 * @wa1_nop_trb: hold pointer to NOP trb.
 */
struct cdnsp_ep {
	struct usb_ep endpoint;
@@ -838,6 +839,8 @@ struct cdnsp_ep {
#define EP_UNCONFIGURED		BIT(7)

	bool skip;
	union cdnsp_trb	 *wa1_nop_trb;

};

/**
+29 −1
Original line number Diff line number Diff line
@@ -402,7 +402,7 @@ static u64 cdnsp_get_hw_deq(struct cdnsp_device *pdev,
	struct cdnsp_stream_ctx *st_ctx;
	struct cdnsp_ep *pep;

	pep = &pdev->eps[stream_id];
	pep = &pdev->eps[ep_index];

	if (pep->ep_state & EP_HAS_STREAMS) {
		st_ctx = &pep->stream_info.stream_ctx_array[stream_id];
@@ -1904,6 +1904,23 @@ int cdnsp_queue_bulk_tx(struct cdnsp_device *pdev, struct cdnsp_request *preq)
	if (ret)
		return ret;

	/*
	 * workaround 1: STOP EP command on LINK TRB with TC bit set to 1
	 * causes that internal cycle bit can have incorrect state after
	 * command complete. In consequence empty transfer ring can be
	 * incorrectly detected when EP is resumed.
	 * NOP TRB before LINK TRB avoid such scenario. STOP EP command is
	 * then on NOP TRB and internal cycle bit is not changed and have
	 * correct value.
	 */
	if (pep->wa1_nop_trb) {
		field = le32_to_cpu(pep->wa1_nop_trb->trans_event.flags);
		field ^= TRB_CYCLE;

		pep->wa1_nop_trb->trans_event.flags = cpu_to_le32(field);
		pep->wa1_nop_trb = NULL;
	}

	/*
	 * Don't give the first TRB to the hardware (by toggling the cycle bit)
	 * until we've finished creating all the other TRBs. The ring's cycle
@@ -1999,6 +2016,17 @@ int cdnsp_queue_bulk_tx(struct cdnsp_device *pdev, struct cdnsp_request *preq)
		send_addr = addr;
	}

	if (cdnsp_trb_is_link(ring->enqueue + 1)) {
		field = TRB_TYPE(TRB_TR_NOOP) | TRB_IOC;
		if (!ring->cycle_state)
			field |= TRB_CYCLE;

		pep->wa1_nop_trb = ring->enqueue;

		cdnsp_queue_trb(pdev, ring, 0, 0x0, 0x0,
				TRB_INTR_TARGET(0), field);
	}

	cdnsp_check_trb_math(preq, enqd_len);
	ret = cdnsp_giveback_first_trb(pdev, pep, preq->request.stream_id,
				       start_cycle, start_trb);
+3 −0
Original line number Diff line number Diff line
@@ -1761,6 +1761,9 @@ static const struct usb_device_id acm_ids[] = {
	{ USB_DEVICE(0x11ca, 0x0201), /* VeriFone Mx870 Gadget Serial */
	.driver_info = SINGLE_RX_URB,
	},
	{ USB_DEVICE(0x1901, 0x0006), /* GE Healthcare Patient Monitor UI Controller */
	.driver_info = DISABLE_ECHO, /* DISABLE ECHO in termios flag */
	},
	{ USB_DEVICE(0x1965, 0x0018), /* Uniden UBC125XLT */
	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
	},
Loading