> Date: Mon, 5 Apr 2021 23:15:23 +0200
> From: Marcus Glocker <mar...@nazgul.ch>
> 
> On Mon, Apr 05, 2021 at 07:30:43AM -0700, Greg Steuck wrote:
> 
> > OK gnezdo with a usability question inline.
> 
> Thanks.  See below.
>  
> > Marcus Glocker <mar...@nazgul.ch> writes:
> > 
> > > martijn@ has recently reported that in his machine he has two cams
> > > of which one is doing IR, which isn't really supported by uvideo(4).
> > > This IR device attaches always first as uvideo0, so he needs to swap
> > > that regularly with his working cam which by default attaches to uvideo1.
> > >
> > > I came up with a new quirk flag to *not* attach certain devices.  Tested
> > > successfully by martijn@, the IR cam attaches to ugen0 and the supported
> > > cam to uvideo0.
> > >
> > > This patch shouldn't affect any supported uvideo(4) devices.
> > >
> > > OK?
> > >
> > > Index: sys/dev/usb/uvideo.c
> > > ===================================================================
> > > RCS file: /cvs/src/sys/dev/usb/uvideo.c,v
> > > retrieving revision 1.211
> > > diff -u -p -u -p -r1.211 uvideo.c
> > > --- sys/dev/usb/uvideo.c  27 Jan 2021 17:28:19 -0000      1.211
> > > +++ sys/dev/usb/uvideo.c  8 Mar 2021 22:06:51 -0000
> > > @@ -307,6 +307,7 @@ struct video_hw_if uvideo_hw_if = {
> > >  #define UVIDEO_FLAG_ISIGHT_STREAM_HEADER 0x1
> > >  #define UVIDEO_FLAG_REATTACH                     0x2
> > >  #define UVIDEO_FLAG_VENDOR_CLASS         0x4
> > > +#define UVIDEO_FLAG_NOATTACH                     0x8
> > >  struct uvideo_devs {
> > >   struct usb_devno         uv_dev;
> > >   char                    *ucode_name;
> > > @@ -382,6 +383,12 @@ struct uvideo_devs {
> > >       NULL,
> > >       UVIDEO_FLAG_VENDOR_CLASS
> > >   },
> > > + {   /* Infrared camera not supported */
> > > +     { USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_IRCAMERA },
> > > +     NULL,
> > > +     NULL,
> > > +     UVIDEO_FLAG_NOATTACH
> > > + },
> > >  };
> > >  #define uvideo_lookup(v, p) \
> > >   ((struct uvideo_devs *)usb_lookup(uvideo_devs, v, p))
> > > @@ -480,13 +487,12 @@ uvideo_match(struct device *parent, void
> > >   if (id == NULL)
> > >           return (UMATCH_NONE);
> > >  
> > > - if (id->bInterfaceClass == UICLASS_VIDEO &&
> > > -     id->bInterfaceSubClass == UISUBCLASS_VIDEOCONTROL)
> > > -         return (UMATCH_VENDOR_PRODUCT_CONF_IFACE);
> > > -
> > > - /* quirk devices which we want to attach */
> > > + /* quirk devices */
> > >   quirk = uvideo_lookup(uaa->vendor, uaa->product);
> > >   if (quirk != NULL) {
> > > +         if (quirk->flags & UVIDEO_FLAG_NOATTACH)
> > 
> > How common is it to explain the system behavior in cases like this?
> > Would it be less surprising (generate less misc@ traffic) if we printed
> > a note explaining why the camera was skipped?
> 
> I wouldn't print a specific message per unsupported device, but I think
> a generic message that the video device isn't supported would make
> sense.  Something like that maybe?  Obviously this can print more than
> once, but I'm not sure if it's worth to make that a unique print.
> 
> E.g.:
> 
> vmm0 at mainbus0: VMX/EPT
> uvideo: device 13d3:56b2 isn't supported
> uvideo: device 13d3:56b2 isn't supported
> ugen0 at uhub0 port 8 "SunplusIT Inc Integrated Camera" rev 2.01/17.11 addr 2

No; match functions shouldn't print stuff.

> Index: sys/dev/usb/uvideo.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/uvideo.c,v
> retrieving revision 1.212
> diff -u -p -u -p -r1.212 uvideo.c
> --- sys/dev/usb/uvideo.c      5 Apr 2021 20:45:49 -0000       1.212
> +++ sys/dev/usb/uvideo.c      5 Apr 2021 21:09:36 -0000
> @@ -490,8 +490,11 @@ uvideo_match(struct device *parent, void
>       /* quirk devices */
>       quirk = uvideo_lookup(uaa->vendor, uaa->product);
>       if (quirk != NULL) {
> -             if (quirk->flags & UVIDEO_FLAG_NOATTACH)
> +             if (quirk->flags & UVIDEO_FLAG_NOATTACH) {
> +                     printf("uvideo: device %x:%x isn't supported\n",
> +                         uaa->vendor, uaa->product);
>                       return (UMATCH_NONE);
> +             }
>  
>               if (quirk->flags & UVIDEO_FLAG_REATTACH)
>                       return (UMATCH_VENDOR_PRODUCT_CONF_IFACE);
> 
> 

Reply via email to