> On Sep 23 20:55:45, h...@stare.cz wrote:
> > On Aug 29 18:06:32, lau...@tratt.net wrote:
> > > Lots of us have to use webcams more than we used to. There have been some
> > > recent changes in OpenBSD support for webcams that some might find useful.
> > > Most of the hard work was done by Marcus Glocker, with input from Ingo
> > > Feinerer, sc.dying, and myself.
> > 
> > Thanks to all! The uvideo on my old MacBook1,1
> > (dmesg below) is back, for instance.
> 
> Ah. This is with a diff (below) I got on misc earlier.
> Sorry for the confusion.

Here is the same with UVIDEO_DEBUG, if it's of any help.
I can donate the MacBook if anyone is interested.

        Jan


$ video -q
video device /dev/video:
  encodings: uyvy
  frame sizes (width x height, in pixels) and rates (in frames per second):
        320x240: 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 
30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30
        352x288: 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 
30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30
        640x480: 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 
30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30
  controls: brightness, saturation, gamma, sharpness

messages:

Sep 24 09:58:29 mb32 /bsd: uvideo0: uvideo_open: sc=0xd580b000
Sep 24 09:58:29 mb32 /bsd: uvideo0: uvideo_find_ctrl: control not supported by 
device!
Sep 24 09:58:29 mb32 last message repeated 4 times
Sep 24 09:58:30 mb32 /bsd: uvideo0: uvideo_close: sc=0xd580b000
Sep 24 09:58:30 mb32 /bsd: uvideo0: uvideo_vs_free_isoc


$ video -c
video: VIDIOC_G_CTRL: Invalid argument
brightness=63
saturation=5
gamma=100
sharpness=3

messages:

Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_open: sc=0xd580b000
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_find_ctrl: control not supported by 
device!
Sep 24 09:58:35 mb32 last message repeated 4 times
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_s_fmt: requested width=640, 
height=480
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_find_res: frame index 0: width=640, 
height=480
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_find_res: frame index 1: width=352, 
height=288
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_find_res: frame index 2: width=320, 
height=240
Sep 24 09:58:35 mb32 /bsd: uvideo0: SET probe request successfully
Sep 24 09:58:35 mb32 /bsd: bmHint=0x01
Sep 24 09:58:35 mb32 /bsd: bFormatIndex=0x01
Sep 24 09:58:35 mb32 /bsd: bFrameIndex=0x01
Sep 24 09:58:35 mb32 /bsd: dwFrameInterval=333333 (100ns units)
Sep 24 09:58:35 mb32 /bsd: wKeyFrameRate=0
Sep 24 09:58:35 mb32 /bsd: wPFrameRate=0
Sep 24 09:58:35 mb32 /bsd: wCompQuality=0
Sep 24 09:58:35 mb32 /bsd: wCompWindowSize=0
Sep 24 09:58:35 mb32 /bsd: wDelay=0 (ms)
Sep 24 09:58:35 mb32 /bsd: dwMaxVideoFrameSize=0 (bytes)
Sep 24 09:58:35 mb32 /bsd: dwMaxPayloadTransferSize=0 (bytes)
Sep 24 09:58:35 mb32 /bsd: uvideo0: GET probe request successfully
Sep 24 09:58:35 mb32 /bsd: bmHint=0x00
Sep 24 09:58:35 mb32 /bsd: bFormatIndex=0x01
Sep 24 09:58:35 mb32 /bsd: bFrameIndex=0x01
Sep 24 09:58:35 mb32 /bsd: dwFrameInterval=333333 (100ns units)
Sep 24 09:58:35 mb32 /bsd: wKeyFrameRate=0
Sep 24 09:58:35 mb32 /bsd: wPFrameRate=0
Sep 24 09:58:35 mb32 /bsd: wCompQuality=0
Sep 24 09:58:35 mb32 /bsd: wCompWindowSize=0
Sep 24 09:58:35 mb32 /bsd: wDelay=33 (ms)
Sep 24 09:58:35 mb32 /bsd: dwMaxVideoFrameSize=614400 (bytes)
Sep 24 09:58:35 mb32 /bsd: dwMaxPayloadTransferSize=3072 (bytes)
Sep 24 09:58:35 mb32 /bsd: fixed dwMaxVideoFrameSize=614400, width=640 
height=480 bpp=16
Sep 24 09:58:35 mb32 /bsd: uvideo0: SET commit request successfully
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_s_fmt: offered width=640, height=480
Sep 24 09:58:35 mb32 /bsd: uvideo0: SET probe request successfully
Sep 24 09:58:35 mb32 /bsd: bmHint=0x01
Sep 24 09:58:35 mb32 /bsd: bFormatIndex=0x01
Sep 24 09:58:35 mb32 /bsd: bFrameIndex=0x01
Sep 24 09:58:35 mb32 /bsd: dwFrameInterval=333333 (100ns units)
Sep 24 09:58:35 mb32 /bsd: wKeyFrameRate=0
Sep 24 09:58:35 mb32 /bsd: wPFrameRate=0
Sep 24 09:58:35 mb32 /bsd: wCompQuality=0
Sep 24 09:58:35 mb32 /bsd: wCompWindowSize=0
Sep 24 09:58:35 mb32 /bsd: wDelay=0 (ms)
Sep 24 09:58:35 mb32 /bsd: dwMaxVideoFrameSize=0 (bytes)
Sep 24 09:58:35 mb32 /bsd: dwMaxPayloadTransferSize=0 (bytes)
Sep 24 09:58:35 mb32 /bsd: uvideo0: GET probe request successfully
Sep 24 09:58:35 mb32 /bsd: bmHint=0x00
Sep 24 09:58:35 mb32 /bsd: bFormatIndex=0x01
Sep 24 09:58:35 mb32 /bsd: bFrameIndex=0x01
Sep 24 09:58:35 mb32 /bsd: dwFrameInterval=333333 (100ns units)
Sep 24 09:58:35 mb32 /bsd: wKeyFrameRate=0
Sep 24 09:58:35 mb32 /bsd: wPFrameRate=0
Sep 24 09:58:35 mb32 /bsd: wCompQuality=0
Sep 24 09:58:35 mb32 /bsd: wCompWindowSize=0
Sep 24 09:58:35 mb32 /bsd: wDelay=33 (ms)
Sep 24 09:58:35 mb32 /bsd: dwMaxVideoFrameSize=614400 (bytes)
Sep 24 09:58:35 mb32 /bsd: dwMaxPayloadTransferSize=3072 (bytes)
Sep 24 09:58:35 mb32 /bsd: fixed dwMaxVideoFrameSize=614400, width=640 
height=480 bpp=16
Sep 24 09:58:35 mb32 /bsd: uvideo0: SET commit request successfully
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_reqbufs: count=4
Sep 24 09:58:35 mb32 /bsd: uvideo0: allocated 2457600 bytes mmap buffer
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_reqbufs: index=0, offset=0, 
length=614400
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_reqbufs: index=1, offset=614400, 
length=614400
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_reqbufs: index=2, offset=1228800, 
length=614400
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_reqbufs: index=3, offset=1843200, 
length=614400
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_querybuf: index=0, offset=0, 
length=614400
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_querybuf: index=1, offset=614400, 
length=614400
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_querybuf: index=2, offset=1228800, 
length=614400
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_querybuf: index=3, offset=1843200, 
length=614400
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_vs_open
Sep 24 09:58:35 mb32 /bsd: uvideo0: set alternate iface to 
bAlternateSetting=0x01 psize=3072 max_packet_size=3072
Sep 24 09:58:35 mb32 /bsd: uvideo0: open pipe for bEndpointAddress=0x82
Sep 24 09:58:35 mb32 /bsd: uvideo0: nframes=40
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_vs_alloc_isoc
Sep 24 09:58:35 mb32 /bsd: uvideo0: allocated 122880 bytes isoc VS xfer buffer
Sep 24 09:58:35 mb32 last message repeated 2 times
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_vs_alloc_frame: allocated 614400 
bytes frame buffer
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_find_ctrl: control not supported by 
device!
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_vs_cb: CANCELLED
Sep 24 09:58:35 mb32 last message repeated 2 times
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_close: sc=0xd580b000
Sep 24 09:58:35 mb32 /bsd: uvideo0: uvideo_vs_free_isoc


$ video
video: VIDIOC_G_CTRL: Invalid argument

messages:

Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_open: sc=0xd580b000
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_find_ctrl: control not supported by 
device!
Sep 24 09:58:39 mb32 last message repeated 4 times
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_s_fmt: requested width=640, 
height=480
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_find_res: frame index 0: width=640, 
height=480
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_find_res: frame index 1: width=352, 
height=288
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_find_res: frame index 2: width=320, 
height=240
Sep 24 09:58:39 mb32 /bsd: uvideo0: SET probe request successfully
Sep 24 09:58:39 mb32 /bsd: bmHint=0x01
Sep 24 09:58:39 mb32 /bsd: bFormatIndex=0x01
Sep 24 09:58:39 mb32 /bsd: bFrameIndex=0x01
Sep 24 09:58:39 mb32 /bsd: dwFrameInterval=333333 (100ns units)
Sep 24 09:58:39 mb32 /bsd: wKeyFrameRate=0
Sep 24 09:58:39 mb32 /bsd: wPFrameRate=0
Sep 24 09:58:39 mb32 /bsd: wCompQuality=0
Sep 24 09:58:39 mb32 /bsd: wCompWindowSize=0
Sep 24 09:58:39 mb32 /bsd: wDelay=0 (ms)
Sep 24 09:58:39 mb32 /bsd: dwMaxVideoFrameSize=0 (bytes)
Sep 24 09:58:39 mb32 /bsd: dwMaxPayloadTransferSize=0 (bytes)
Sep 24 09:58:39 mb32 /bsd: uvideo0: GET probe request successfully
Sep 24 09:58:39 mb32 /bsd: bmHint=0x00
Sep 24 09:58:39 mb32 /bsd: bFormatIndex=0x01
Sep 24 09:58:39 mb32 /bsd: bFrameIndex=0x01
Sep 24 09:58:39 mb32 /bsd: dwFrameInterval=333333 (100ns units)
Sep 24 09:58:39 mb32 /bsd: wKeyFrameRate=0
Sep 24 09:58:39 mb32 /bsd: wPFrameRate=0
Sep 24 09:58:39 mb32 /bsd: wCompQuality=0
Sep 24 09:58:39 mb32 /bsd: wCompWindowSize=0
Sep 24 09:58:39 mb32 /bsd: wDelay=33 (ms)
Sep 24 09:58:39 mb32 /bsd: dwMaxVideoFrameSize=614400 (bytes)
Sep 24 09:58:39 mb32 /bsd: dwMaxPayloadTransferSize=3072 (bytes)
Sep 24 09:58:39 mb32 /bsd: fixed dwMaxVideoFrameSize=614400, width=640 
height=480 bpp=16
Sep 24 09:58:39 mb32 /bsd: uvideo0: SET commit request successfully
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_s_fmt: offered width=640, height=480
Sep 24 09:58:39 mb32 /bsd: uvideo0: SET probe request successfully
Sep 24 09:58:39 mb32 /bsd: bmHint=0x01
Sep 24 09:58:39 mb32 /bsd: bFormatIndex=0x01
Sep 24 09:58:39 mb32 /bsd: bFrameIndex=0x01
Sep 24 09:58:39 mb32 /bsd: dwFrameInterval=333333 (100ns units)
Sep 24 09:58:39 mb32 /bsd: wKeyFrameRate=0
Sep 24 09:58:39 mb32 /bsd: wPFrameRate=0
Sep 24 09:58:39 mb32 /bsd: wCompQuality=0
Sep 24 09:58:39 mb32 /bsd: wCompWindowSize=0
Sep 24 09:58:39 mb32 /bsd: wDelay=0 (ms)
Sep 24 09:58:39 mb32 /bsd: dwMaxVideoFrameSize=0 (bytes)
Sep 24 09:58:39 mb32 /bsd: dwMaxPayloadTransferSize=0 (bytes)
Sep 24 09:58:39 mb32 /bsd: uvideo0: GET probe request successfully
Sep 24 09:58:39 mb32 /bsd: bmHint=0x00
Sep 24 09:58:39 mb32 /bsd: bFormatIndex=0x01
Sep 24 09:58:39 mb32 /bsd: bFrameIndex=0x01
Sep 24 09:58:39 mb32 /bsd: dwFrameInterval=333333 (100ns units)
Sep 24 09:58:39 mb32 /bsd: wKeyFrameRate=0
Sep 24 09:58:39 mb32 /bsd: wPFrameRate=0
Sep 24 09:58:39 mb32 /bsd: wCompQuality=0
Sep 24 09:58:39 mb32 /bsd: wCompWindowSize=0
Sep 24 09:58:39 mb32 /bsd: wDelay=33 (ms)
Sep 24 09:58:39 mb32 /bsd: dwMaxVideoFrameSize=614400 (bytes)
Sep 24 09:58:39 mb32 /bsd: dwMaxPayloadTransferSize=3072 (bytes)
Sep 24 09:58:39 mb32 /bsd: fixed dwMaxVideoFrameSize=614400, width=640 
height=480 bpp=16
Sep 24 09:58:39 mb32 /bsd: uvideo0: SET commit request successfully
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_reqbufs: count=4
Sep 24 09:58:39 mb32 /bsd: uvideo0: allocated 2457600 bytes mmap buffer
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_reqbufs: index=0, offset=0, 
length=614400
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_reqbufs: index=1, offset=614400, 
length=614400
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_reqbufs: index=2, offset=1228800, 
length=614400
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_reqbufs: index=3, offset=1843200, 
length=614400
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_querybuf: index=0, offset=0, 
length=614400
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_querybuf: index=1, offset=614400, 
length=614400
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_querybuf: index=2, offset=1228800, 
length=614400
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_querybuf: index=3, offset=1843200, 
length=614400
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_vs_open
Sep 24 09:58:39 mb32 /bsd: uvideo0: set alternate iface to 
bAlternateSetting=0x01 psize=3072 max_packet_size=3072
Sep 24 09:58:39 mb32 /bsd: uvideo0: open pipe for bEndpointAddress=0x82
Sep 24 09:58:39 mb32 /bsd: uvideo0: nframes=40
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_vs_alloc_isoc
Sep 24 09:58:39 mb32 /bsd: uvideo0: allocated 122880 bytes isoc VS xfer buffer
Sep 24 09:58:39 mb32 last message repeated 2 times
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_vs_alloc_frame: allocated 614400 
bytes frame buffer
Sep 24 09:58:39 mb32 /bsd: uvideo0: uvideo_find_ctrl: control not supported by 
device!


After some timeout (I didn't press q), video(1) says

video: ioctl VIDIOC_DQBUF: Invalid argument

and messages say:

Sep 24 09:58:49 mb32 /bsd: uvideo0: uvideo_vs_cb: CANCELLED
Sep 24 09:58:49 mb32 last message repeated 2 times
Sep 24 09:58:49 mb32 /bsd: uvideo0: uvideo_close: sc=0xd580b000
Sep 24 09:58:50 mb32 /bsd: uvideo0: uvideo_vs_free_isoc


        Jan

> > OpenBSD 6.8-beta (GENERIC.MP) #0: Wed Sep 23 13:07:51 CEST 2020
> >     h...@mb32.stare.cz:/usr/src/sys/arch/i386/compile/GENERIC.MP
> > real mem  = 2113323008 (2015MB)
> > avail mem = 2058436608 (1963MB)
> > random: good seed from bootblocks
> > mpath0 at root
> > scsibus0 at mpath0: 256 targets
> > mainbus0 at root
> > bios0 at mainbus0: date 07/29/05, SMBIOS rev. 2.4 @ 0xe7490 (36 entries)
> > bios0: vendor Apple Computer, Inc. version "MB11.88Z.0061.B03.0610121324" 
> > date 10/12/06
> > bios0: Apple Computer, Inc. MacBook1,1
> > acpi0 at bios0: ACPI 3.0
> > acpi0: sleep states S0 S3 S4 S5
> > acpi0: tables DSDT FACP HPET APIC MCFG ASF! SBST ECDT SSDT SSDT SSDT
> > acpi0: wakeup devices ADP1(S3) LID0(S3) PXS1(S4) PXS2(S4) USB1(S3) USB2(S3) 
> > USB3(S3) USB4(S3) USB7(S3) EC__(S3)
> > acpitimer0 at acpi0: 3579545 Hz, 24 bits
> > acpihpet0 at acpi0: 14318179 Hz
> > acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
> > cpu0 at mainbus0: apid 0 (boot processor)
> > cpu0: Genuine Intel(R) CPU T2500 @ 2.00GHz ("GenuineIntel" 686-class) 2 
> > GHz, 06-0e-08
> > cpu0: 
> > FPU,V86,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,MWAIT,VMX,EST,TM2,xTPR,PDCM,NXE,PERF,SENSOR,MELTDOWN
> > mtrr: Pentium Pro MTRR support, 8 var ranges, 88 fixed ranges
> > cpu0: apic clock running at 166MHz
> > cpu0: mwait min=64, max=64, C-substates=0.2.2.2.2, IBE
> > cpu1 at mainbus0: apid 1 (application processor)
> > cpu1: Genuine Intel(R) CPU T2500 @ 2.00GHz ("GenuineIntel" 686-class) 2 
> > GHz, 06-0e-08
> > cpu1: 
> > FPU,V86,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,MWAIT,VMX,EST,TM2,xTPR,PDCM,NXE,PERF,SENSOR,MELTDOWN
> > ioapic0 at mainbus0: apid 1 pa 0xfec00000, version 20, 24 pins, remapped
> > acpimcfg0 at acpi0
> > acpimcfg0: addr 0xe0000000, bus 0-255
> > acpiec0 at acpi0
> > acpiprt0 at acpi0: bus 0 (PCI0)
> > acpiprt1 at acpi0: bus 1 (RP01)
> > acpiprt2 at acpi0: bus 2 (RP02)
> > acpiprt3 at acpi0: bus 3 (PCIB)
> > acpisbs0 at acpi0: SBS0 model "ASMB016" serial 35580 type LION oem "DP"
> > acpiac0 at acpi0: AC unit online
> > acpibtn0 at acpi0: LID0
> > "APP0002" at acpi0 not configured
> > acpibtn1 at acpi0: PWRB
> > acpibtn2 at acpi0: SLPB
> > "PNP0A08" at acpi0 not configured
> > asmc0 at acpi0: SMC_ (smc-napa) addr 0x300/0x20: rev 1.4f504, 203 keys
> > "APP0003" at acpi0 not configured
> > "ACPI0001" at acpi0 not configured
> > "IFX0101" at acpi0 not configured
> > acpicmos0 at acpi0
> > acpicpu0 at acpi0: !C4(100@55 mwait@0x31), !C3(500@1 mwait@0x20), !C2(500@1 
> > mwait@0x10), C1(1000@1 mwait), PSS
> > acpicpu1 at acpi0: !C4(100@55 mwait@0x31), !C3(500@1 mwait@0x20), !C2(500@1 
> > mwait@0x10), C1(1000@1 mwait), PSS
> > acpivideo0 at acpi0: GFX0
> > bios0: ROM list: 0xc0000/0xe600!
> > cpu0: Enhanced SpeedStep 1998 MHz: speeds: 2000, 1833, 1667, 1500, 1333, 
> > 1000 MHz
> > memory map conflict 0xe00f8000/0x1000
> > memory map conflict 0xfed1c000/0x4000
> > memory map conflict 0xfffb0000/0x30000
> > pci0 at mainbus0 bus 0: configuration mode 1 (bios)
> > pchb0 at pci0 dev 0 function 0 "Intel 82945GM Host" rev 0x03
> > inteldrm0 at pci0 dev 2 function 0 "Intel 82945GM Video" rev 0x03
> > drm0 at inteldrm0
> > intagp0 at inteldrm0
> > agp0 at intagp0: aperture at 0x80000000, size 0x10000000
> > inteldrm0: apic 1 int 16, I945GM, gen 3
> > "Intel 82945GM Video" rev 0x03 at pci0 dev 2 function 1 not configured
> > vendor "Intel", unknown product 0x27a3 (class DASP subclass Time and 
> > Frequency, rev 0x03) at pci0 dev 7 function 0 not configured
> > azalia0 at pci0 dev 27 function 0 "Intel 82801GB HD Audio" rev 0x02: msi
> > azalia0: codecs: Sigmatel STAC9220/1
> > audio0 at azalia0
> > ppb0 at pci0 dev 28 function 0 "Intel 82801GB PCIE" rev 0x02: apic 1 int 17
> > pci1 at ppb0 bus 1
> > mskc0 at pci1 dev 0 function 0 "Marvell Yukon 88E8053" rev 0x22, Yukon-2 EC 
> > rev. A3 (0x2): apic 1 int 16
> > msk0 at mskc0 port A: address 00:16:cb:d0:c4:3c
> > eephy0 at msk0 phy 0: 88E1111 Gigabit PHY, rev. 2
> > ppb1 at pci0 dev 28 function 1 "Intel 82801GB PCIE" rev 0x02: apic 1 int 16
> > pci2 at ppb1 bus 2
> > ath0 at pci2 dev 0 function 0 "Atheros AR5424" rev 0x01: apic 1 int 17
> > ath0: AR5424 10.3 phy 6.1 rf 10.2 eeprom 5.3, WORAW, address 
> > 00:16:cb:bf:f6:88
> > uhci0 at pci0 dev 29 function 0 "Intel 82801GB USB" rev 0x02: apic 1 int 21
> > uhci1 at pci0 dev 29 function 1 "Intel 82801GB USB" rev 0x02: apic 1 int 19
> > uhci2 at pci0 dev 29 function 2 "Intel 82801GB USB" rev 0x02: apic 1 int 18
> > uhci3 at pci0 dev 29 function 3 "Intel 82801GB USB" rev 0x02: apic 1 int 16
> > ehci0 at pci0 dev 29 function 7 "Intel 82801GB USB" rev 0x02: apic 1 int 21
> > usb0 at ehci0: USB revision 2.0
> > uhub0 at usb0 configuration 1 interface 0 "Intel EHCI root hub" rev 
> > 2.00/1.00 addr 1
> > ppb2 at pci0 dev 30 function 0 "Intel 82801BAM Hub-to-PCI" rev 0xe2
> > pci3 at ppb2 bus 3
> > "AT&T/Lucent FW322 1394" rev 0x61 at pci3 dev 3 function 0 not configured
> > ichpcib0 at pci0 dev 31 function 0 "Intel 82801GBM LPC" rev 0x02: PM 
> > disabled
> > pciide0 at pci0 dev 31 function 1 "Intel 82801GB IDE" rev 0x02: DMA, 
> > channel 0 configured to compatibility, channel 1 configured to compatibility
> > atapiscsi0 at pciide0 channel 0 drive 0
> > scsibus1 at atapiscsi0: 2 targets
> > cd0 at scsibus1 targ 0 lun 0: <MATSHITA, DVD-R UJ-857, HBEA> removable
> > cd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 4
> > pciide0: channel 1 disabled (no drives)
> > pciide1 at pci0 dev 31 function 2 "Intel 82801GBM SATA" rev 0x02: DMA, 
> > channel 0 configured to native-PCI, channel 1 configured to native-PCI
> > pciide1: using apic 1 int 19 for native-PCI interrupt
> > wd0 at pciide1 channel 0 drive 1: <ST960813AS>
> > wd0: 16-sector PIO, LBA48, 57231MB, 117210240 sectors
> > wd0(pciide1:0:1): using PIO mode 4, Ultra-DMA mode 5
> > ichiic0 at pci0 dev 31 function 3 "Intel 82801GB SMBus" rev 0x02: apic 1 
> > int 19
> > iic0 at ichiic0
> > spdmem0 at iic0 addr 0x50: 2GB DDR2 SDRAM non-parity PC2-5300CL5 SO-DIMM
> > usb1 at uhci0: USB revision 1.0
> > uhub1 at usb1 configuration 1 interface 0 "Intel UHCI root hub" rev 
> > 1.00/1.00 addr 1
> > usb2 at uhci1: USB revision 1.0
> > uhub2 at usb2 configuration 1 interface 0 "Intel UHCI root hub" rev 
> > 1.00/1.00 addr 1
> > usb3 at uhci2: USB revision 1.0
> > uhub3 at usb3 configuration 1 interface 0 "Intel UHCI root hub" rev 
> > 1.00/1.00 addr 1
> > usb4 at uhci3: USB revision 1.0
> > uhub4 at usb4 configuration 1 interface 0 "Intel UHCI root hub" rev 
> > 1.00/1.00 addr 1
> > isa0 at ichpcib0
> > isadma0 at isa0
> > pcppi0 at isa0 port 0x61
> > spkr0 at pcppi0
> > npx0 at isa0 port 0xf0/16: reported by CPUID; using exception 16
> > uvideo0 at uhub0 port 4 configuration 1 interface 0 "Apple Computer 
> > Bluetooth" rev 2.00/0.0c addr 2
> > uhidev0 at uhub1 port 2 configuration 1 interface 0 "Apple Inc. Apple 
> > Internal Keyboard / Trackpad" rev 2.00/0.09 addr 2
> > uhidev0: iclass 3/1
> > ukbd0 at uhidev0: 8 variable keys, 5 key codes, country code 13
> > wskbd0 at ukbd0: console keyboard
> > uhidev1 at uhub1 port 2 configuration 1 interface 1 "Apple Inc. Apple 
> > Internal Keyboard / Trackpad" rev 2.00/0.09 addr 2
> > uhidev1: iclass 3/1, 5 report ids
> > ums0 at uhidev1 reportid 2: 3 buttons
> > wsmouse0 at ums0 mux 0
> > ums1 at uhidev1 reportid 5
> > ums1: mouse has no X report
> > uhidev2 at uhub1 port 2 configuration 1 interface 2 "Apple Inc. Apple 
> > Internal Keyboard / Trackpad" rev 2.00/0.09 addr 2
> > uhidev2: iclass 3/0
> > uhid0 at uhidev2: input=1, output=0, feature=0
> > uhidev3 at uhub3 port 2 configuration 1 interface 0 "Apple Computer, Inc. 
> > IR Receiver" rev 2.00/1.10 addr 2
> > uhidev3: iclass 3/0, 38 report ids
> > uhid1 at uhidev3 reportid 36: input=4, output=0, feature=0
> > uhid2 at uhidev3 reportid 37: input=4, output=0, feature=0
> > uhid3 at uhidev3 reportid 38: input=4, output=0, feature=0
> > uhidev4 at uhub4 port 1 configuration 1 interface 0 "Apple Computer 
> > HID-proxy" rev 2.00/19.65 addr 2
> > uhidev4: iclass 3/1
> > ukbd1 at uhidev4: 8 variable keys, 6 key codes
> > wskbd1 at ukbd1 mux 1
> > uhidev5 at uhub4 port 1 configuration 1 interface 1 "Apple Computer 
> > HID-proxy" rev 2.00/19.65 addr 2
> > uhidev5: iclass 3/1
> > ums2 at uhidev5: 5 buttons
> > wsmouse1 at ums2 mux 0
> > vscsi0 at root
> > scsibus2 at vscsi0: 256 targets
> > softraid0 at root
> > scsibus3 at softraid0: 256 targets
> > root on wd0a (d56fb6b19bfb4252.a) swap on wd0b dump on wd0b
> > inteldrm0: 1280x800, 32bpp
> > wsdisplay0 at inteldrm0 mux 1: console (std, vt100 emulation), using wskbd0
> > wskbd1: connecting to wsdisplay0
> > wsdisplay0: screen 1-5 added (std, vt100 emulation)
> > uvideo0 detached
> > uvideo0 at uhub0 port 4 configuration 1 interface 0 "Micron Built-in 
> > iSight" rev 2.00/1.84 addr 2
> > video0 at uvideo0
> 
> 
> diff --git a/sys/dev/usb/uvideo.c b/sys/dev/usb/uvideo.c
> index d33e3079acd..da00d0d3d0d 100644
> --- a/sys/dev/usb/uvideo.c
> +++ b/sys/dev/usb/uvideo.c
> @@ -510,6 +510,8 @@ uvideo_attach(struct device *parent, struct device *self, 
> void *aux)
>       int i;
>  
>       sc->sc_udev = uaa->device;
> +     sc->sc_iface = uaa->ifaceno;
> +     sc->sc_nifaces = uaa->nifaces;
>  
>       /* Find the first unclaimed video interface. */
>       for (i = 0; i < uaa->nifaces; i++) {
> @@ -521,10 +523,8 @@ uvideo_attach(struct device *parent, struct device 
> *self, void *aux)
>               if (id->bInterfaceClass == UICLASS_VIDEO)
>                       break;
>       }
> -     if (i == uaa->nifaces) {
> -             printf("%s: can't find video interface\n", DEVNAME(sc));
> -             return;
> -     }
> +     if (i == uaa->nifaces)
> +             goto attach;
>  
>       /* Find out which interface association we belong to. */
>       usbd_desc_iter_init(sc->sc_udev, &iter);
> @@ -540,30 +540,38 @@ uvideo_attach(struct device *parent, struct device 
> *self, void *aux)
>                       break;
>               desc = usbd_desc_iter_next(&iter);
>       }
> -     if (desc == NULL) {
> -             printf("%s: can't find interface assoc descriptor\n",
> -                 DEVNAME(sc));
> -             return;
> -     }
> +     if (desc != NULL) {
> +             /*
> +              * Claim all interfaces of our association.  Interfaces must be
> +              * claimed during attach, during attach hooks is too late.
> +              */
> +             for (i = iad->bFirstInterface;
> +                 i < iad->bFirstInterface + iad->bInterfaceCount; i++) {
> +                     if (usbd_iface_claimed(sc->sc_udev, i)) {
> +                             printf("%s: interface already claimed\n",
> +                                 DEVNAME(sc));
> +                             return;
> +                     }
> +                     usbd_claim_iface(sc->sc_udev, i);
> +             }
>  
> -     /*
> -      * Claim all interfaces of our association.  Interfaces must be
> -      * claimed during attach, during attach hooks is too late.
> -      */
> -     for (i = iad->bFirstInterface;
> -         i < iad->bFirstInterface + iad->bInterfaceCount; i++) {
> -             if (usbd_iface_claimed(sc->sc_udev, i)) {
> -                     printf("%s: interface already claimed\n",
> -                         DEVNAME(sc));
> -                     return;
> +             /* Remember our association by saving the first interface. */
> +             sc->sc_iface = iad->bFirstInterface;
> +             sc->sc_nifaces = iad->bInterfaceCount;
> +     } else {
> +             /* No association, so simply claim them all. */
> +             for (i = 0; i < uaa->nifaces; i++) {
> +                     if (usbd_iface_claimed(sc->sc_udev, i))
> +                             continue;
> +                     id = 
> usbd_get_interface_descriptor(&sc->sc_udev->ifaces[i]);
> +                     if (id == NULL)
> +                             continue;
> +                     if (id->bInterfaceClass == UICLASS_VIDEO)
> +                             usbd_claim_iface(sc->sc_udev, i);
>               }
> -             usbd_claim_iface(sc->sc_udev, i);
>       }
>  
> -     /* Remember our association by saving the first interface. */
> -     sc->sc_iface = iad->bFirstInterface;
> -     sc->sc_nifaces = iad->bInterfaceCount;
> -
> +attach:
>       /* maybe the device has quirks */
>       sc->sc_quirk = uvideo_lookup(uaa->vendor, uaa->product);

Reply via email to