On Fri, May 27, 2016 at 08:36:54AM +0200, Marcus Glocker wrote:
> On Thu, May 26, 2016 at 04:18:58PM -0700, patrick keshishian wrote:
>
> > On Thu, May 26, 2016 at 10:55:47PM +0200, Marcus Glocker wrote:
> > > On Tue, May 17, 2016 at 05:15:51PM -0700, patrick keshishian wrote:
> > >
> > > > Greetings,
> > > >
> > > > I have been looking at uvideo trying to model a new driver I'm
> > > > attempting to port over and found a few issues (or what I precive
> > > > as issues).
> > > >
> > > > Since the list likes separate diffs for easier discussion, Here
> > > > is my attempt to break them up in four emails. I think, with
> > > > exception of one, all should apply and compile individually.
> > > >
> > > > Here are description of patches in decreasing order of my
> > > > confidence in proposing them:
> > > >
> > > > 1/4: Incorrect enum used for v4l2_buf.flags.
> > > > This is a paste error I believe. Very simple diff
> > > >
> > > > 2/4: Assumption on endpoint index to use in uvideo_vs_open() vs
> > > > actual saved endpoint address.
> > >
> > > Makes sense. I also would change the following DPRINTF text to
> > > remove 'sc->sc_vs_cur->endpoint' since this will be same as
> > > 'ed->bEndpointAddress' and also remove 'sc->sc_vs_cur->psize'
> > > since this information is already printed in uvideo_vs_set_alt().
> >
> > As long as it is understood that the actually packet size is
> > not the literal value of wMaxPacketSize, rather:
> >
> > psize = UGETW(ed->wMaxPacketSize);
> > psize = UE_GET_SIZE(psize) * (1 + UE_GET_TRANS(psize));
>
> Right, which is also the information printed in uvideo_vs_set_alt()
> already. When we think a minute about what is done here with
> the retained endpoint descriptor in uvideo_vs_open(); mainly nothing.
> We just check if we can access the endpoint selected before by
> uvideo_vs_set_alt(). Therefore it's a kind of double check since
> latest at the next step when we try to open the pipe we would fail if
> the endpoint wouldn't be valid.
>
> My proposal is, leave it in just as a double check with your
> fix to do it for the proper endpoint and print a short debug
> info including the endpoint number before doing the pipe
> opening.
>
> > Fancy stuff this USB.
>
> Sigh ...
>
>
> Index: uvideo.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/uvideo.c,v
> retrieving revision 1.187
> diff -u -p -u -p -r1.187 uvideo.c
> --- uvideo.c 26 May 2016 04:47:08 -0000 1.187
> +++ uvideo.c 27 May 2016 06:07:22 -0000
> @@ -1817,19 +1817,17 @@ uvideo_vs_open(struct uvideo_softc *sc)
> return (error);
> }
>
> - ed = usbd_interface2endpoint_descriptor(sc->sc_vs_cur->ifaceh, 0);
> + /* double check if we can access the selected endpoint descriptor */
> + ed = usbd_get_endpoint_descriptor(sc->sc_vs_cur->ifaceh,
> + sc->sc_vs_cur->endpoint);
> if (ed == NULL) {
> printf("%s: no endpoint descriptor for VS iface\n",
> DEVNAME(sc));
> return (USBD_INVAL);
> }
> - DPRINTF(1, "%s: open pipe for ", DEVNAME(sc));
> - DPRINTF(1, "bEndpointAddress=0x%02x (0x%02x), wMaxPacketSize=%d (%d)\n",
> - ed->bEndpointAddress,
> - sc->sc_vs_cur->endpoint,
> - UGETW(ed->wMaxPacketSize),
> - sc->sc_vs_cur->psize);
>
> + DPRINTF(1, "%s: open pipe for bEndpointAddress=0x%02x",
> + DEVNAME(sc), sc->sc_vs_cur->endpoint);
> error = usbd_open_pipe(
> sc->sc_vs_cur->ifaceh,
> sc->sc_vs_cur->endpoint,
>
This one has been committed as well now.