On 31/01/17(Tue) 14:05, Christopher Zimmermann wrote:
> On 2017-01-29 Martin Pieuchot <m...@openbsd.org> wrote:
> > On 29/01/17(Sun) 19:33, Christopher Zimmermann wrote:
> > > [...]
> > > @@ -444,6 +447,11 @@ uaudio_match(struct device *parent, void
> > >   if (uaa->iface == NULL || uaa->device == NULL)
> > >           return (UMATCH_NONE);
> > >  
> > > + if (uaa->vendor == USB_VENDOR_MAUDIO &&
> > > +     uaa->product == USB_PRODUCT_MAUDIO_FASTTRACKPRO &&
> > > +     uaa->configno != 2)
> > > +         return UMATCH_NONE;  
> > 
> > Why to you need this?
> 
> This device exposes only a very limited set of features in
> configuration 1.

But configuration 1 is midi not audio right?  So it won't match, so why
do you need that?

> > > @@ -3312,6 +3340,9 @@ uaudio_set_params(void *addr, int setmod
> > >                   }
> > >                   break;
> > >           }
> > > +
> > > +         if (sc->sc_quirks & UAUDIO_FLAG_BE)
> > > +                 p->encoding = AUDIO_ENCODING_SLINEAR_BE;  
> > 
> > Why do you need this chunk and we don't need to set
> > AUDIO_ENCODING_SLINEAR_LE in the other case?
> 
> We probably should set it to _LE in the other case. I moved this piece
> of code into uaudio_match_alt() and made it agnostic about the specific 
> endianness.
> 
> > > @@ -152,6 +153,11 @@ umidi_match(struct device *parent, void 
> > >   DPRINTFN(1,("umidi_match\n"));
> > >  
> > >   if (uaa->iface == NULL)
> > > +         return UMATCH_NONE;
> > > +
> > > + if (uaa->vendor == USB_VENDOR_MAUDIO &&
> > > +     uaa->product == USB_PRODUCT_MAUDIO_FASTTRACKPRO &&
> > > +     uaa->configno != 2)
> > >           return UMATCH_NONE;  
> > 
> > I'd leave the configno check out and add a comment explaining why we
> > want to force this driver to attach to uaudio(4).
> 
> See my comment above about the same piece of code in uaudio.c.
> If I don't add this condition umidi will attach to configuration 1 and
> configuration 2 wouldn't be tried, uaudio wouldn't attach.

Please re-read my comment.  I'm talking about the "configno" check.
Think about somebody reading your code in 5 years, it will just looks
like black magic.

What you're doing is working around our stupid USB detection mechanism
to use a specific configuration.  So you don't want your device to
attach to umidi(4) no matter with which configuration.

> +             if (p->precision > 8)
> +                     /*
> +                      * Don't search for matching encoding.
> +                      * Just tell the upper layers which one we support.
> +                      */
> +                     p->encoding = sc->sc_alts[i].encoding;

Why do you need that?

> +             else if (p->encoding != sc->sc_alts[i].encoding)
> +                     continue;
> +
>               alts_eh |= 1 << i;
>               DPRINTFN(6,("%s: matched %s alt %d for enc/pre\n", __func__,
>                   mode == AUMODE_RECORD ? "rec" : "play", i));

Reply via email to