From: Kirill A. Korinsky Subject: Support Jabra PanaCast 20 webcam To: OpenBSD tech Date: Tue, 26 Nov 2024 23:51:56 +0100 tech@, I had figured out why the Jabra PanaCast 20 wouldn't start streaming. It needs uvideo_vs_negotiation between usbd_set_interface and usbd_open_pipe. Once I'd added it, it just started working. Putting it before usbd_set_interface or after usbd_open_pipe doesn't help. I am not sure if I should enable it only for this webcam via quirks or keep it for everything. I had tested on Azurewave, USB camera which is embedded in my laptop, this diff doesn't affect it and it continues to work as if nothing had changed. I guess it might fix some webcams that don't work today. Feedback? Tests? Ok? Index: sys/dev/usb/uvideo.c =================================================================== RCS file: /home/cvs/src/sys/dev/usb/uvideo.c,v diff -u -p -r1.222 uvideo.c --- sys/dev/usb/uvideo.c 1 Sep 2024 03:09:00 -0000 1.222 +++ sys/dev/usb/uvideo.c 26 Nov 2024 22:24:25 -0000 @@ -1899,6 +1899,11 @@ uvideo_vs_open(struct uvideo_softc *sc) return (USBD_INVAL); } + /* do device negotiation witht commit after switch interface */ + error = uvideo_vs_negotiation(sc, 1); + if (error != USBD_NORMAL_COMPLETION) + printf("%s: could not negotiation after switch interface\n", + DEVNAME(sc)); + DPRINTF(1, "%s: open pipe for bEndpointAddress=0x%02x\n", DEVNAME(sc), sc->sc_vs_cur->endpoint); error = usbd_open_pipe( -- wbr, Kirill