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)