Hi, since we already dump most of the descriptors, also dump the interface association descriptor, which helped me debug the previous issue.
Patrick diff --git a/sys/dev/usb/uvideo.c b/sys/dev/usb/uvideo.c index c990c899c45..1a9dfc733fa 100644 --- a/sys/dev/usb/uvideo.c +++ b/sys/dev/usb/uvideo.c @@ -198,6 +198,8 @@ void uvideo_dump_desc_output(struct uvideo_softc *, const usb_descriptor_t *); void uvideo_dump_desc_endpoint(struct uvideo_softc *, const usb_descriptor_t *); +void uvideo_dump_desc_iface_assoc(struct uvideo_softc *, + const usb_descriptor_t *); void uvideo_dump_desc_interface(struct uvideo_softc *, const usb_descriptor_t *); void uvideo_dump_desc_config(struct uvideo_softc *, @@ -2487,6 +2489,11 @@ uvideo_dump_desc_all(struct uvideo_softc *sc) printf("|\n"); uvideo_dump_desc_interface(sc, desc); break; + case UDESC_IFACE_ASSOC: + printf(" (UDESC_IFACE_ASSOC)\n"); + printf("|\n"); + uvideo_dump_desc_iface_assoc(sc, desc); + break; default: printf(" (unknown)\n"); break; @@ -2608,6 +2615,24 @@ uvideo_dump_desc_endpoint(struct uvideo_softc *sc, printf("bInterval=0x%02x\n", d->bInterval); } +void +uvideo_dump_desc_iface_assoc(struct uvideo_softc *sc, + const usb_descriptor_t *desc) +{ + usb_interface_assoc_descriptor_t *d; + + d = (usb_interface_assoc_descriptor_t *)(uint8_t *)desc; + + printf("bLength=%d\n", d->bLength); + printf("bDescriptorType=0x%02x\n", d->bDescriptorType); + printf("bFirstInterface=0x%02x\n", d->bFirstInterface); + printf("bInterfaceCount=%d\n", d->bInterfaceCount); + printf("bFunctionClass=0x%02x\n", d->bFunctionClass); + printf("bFunctionSubClass=0x%02x\n", d->bFunctionSubClass); + printf("bFunctionProtocol=0x%02x\n", d->bFunctionProtocol); + printf("iFunction=0x%02x\n", d->iFunction); +} + void uvideo_dump_desc_interface(struct uvideo_softc *sc, const usb_descriptor_t *desc)