summaryrefslogtreecommitdiff
path: root/drivers/usb/core
diff options
context:
space:
mode:
authorSakari Ailus <sakari.ailus@linux.intel.com>2025-08-20 17:38:21 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-09-06 15:25:05 +0200
commitd6725169a9bbcb5bd1dd14b2891b874614c59f52 (patch)
treeed9a83aa5266a79df81259cbb29ce66ddd6bc745 /drivers/usb/core
parent24b8762e05ed8203dc0b76b62c802aadd487e9aa (diff)
usb: core: Introduce usb_endpoint_is_hs_isoc_double()
Introduce usb_endpoint_is_hs_isoc_double() tell whether an endpoint conforms to USB 2.0 Isochronous Double IN Bandwidth ECN. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Acked-by: Mathias Nyman <mathias.nyman@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://lore.kernel.org/r/20250820143824.551777-7-sakari.ailus@linux.intel.com
Diffstat (limited to 'drivers/usb/core')
-rw-r--r--drivers/usb/core/usb.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
index ca9ff6ad8e73..939dc4aafb89 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
@@ -1139,6 +1139,25 @@ u32 usb_endpoint_max_periodic_payload(struct usb_device *udev,
}
EXPORT_SYMBOL_GPL(usb_endpoint_max_periodic_payload);
+/**
+ * usb_endpoint_is_hs_isoc_double - Tell whether an endpoint uses USB 2
+ * Isochronous Double IN Bandwidth
+ * @udev: The USB device
+ * @ep: The endpoint
+ *
+ * Returns: true if an endpoint @ep conforms to USB 2 Isochronous Double IN
+ * Bandwidth ECN, false otherwise.
+ */
+bool usb_endpoint_is_hs_isoc_double(struct usb_device *udev,
+ const struct usb_host_endpoint *ep)
+{
+ return ep->eusb2_isoc_ep_comp.bDescriptorType &&
+ le16_to_cpu(udev->descriptor.bcdUSB) == 0x220 &&
+ usb_endpoint_is_isoc_in(&ep->desc) &&
+ !le16_to_cpu(ep->desc.wMaxPacketSize);
+}
+EXPORT_SYMBOL_GPL(usb_endpoint_is_hs_isoc_double);
+
/*
* Notifications of device and interface registration
*/