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)

Reply via email to