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
pull/1354/merge
Sakari Ailus 2025-08-20 17:38:21 +03:00 committed by Greg Kroah-Hartman
parent 24b8762e05
commit d6725169a9
2 changed files with 22 additions and 0 deletions

View File

@ -1139,6 +1139,25 @@ u32 usb_endpoint_max_periodic_payload(struct usb_device *udev,
} }
EXPORT_SYMBOL_GPL(usb_endpoint_max_periodic_payload); 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 * Notifications of device and interface registration
*/ */

View File

@ -2042,6 +2042,9 @@ static inline u16 usb_maxpacket(struct usb_device *udev, int pipe)
u32 usb_endpoint_max_periodic_payload(struct usb_device *udev, u32 usb_endpoint_max_periodic_payload(struct usb_device *udev,
const struct usb_host_endpoint *ep); const struct usb_host_endpoint *ep);
bool usb_endpoint_is_hs_isoc_double(struct usb_device *udev,
const struct usb_host_endpoint *ep);
/* translate USB error codes to codes user space understands */ /* translate USB error codes to codes user space understands */
static inline int usb_translate_errors(int error_code) static inline int usb_translate_errors(int error_code)
{ {