Hi Laurent,

On 18/09/18 11:35, Laurent Pinchart wrote:
> When USB requests for video data fail to be submitted, the driver
> signals a problem to the host by halting the video streaming endpoint.
> This is only valid in bulk mode, as isochronous transfers have no
> handshake phase and can't thus report a stall. The usb_ep_set_halt()
> call returns an error when using isochronous endpoints, which we happily
> ignore, but some UDCs complain in the kernel log. Fix this by only
> trying to halt the endpoint in bulk mode.
> 

Agreed,

> Signed-off-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>

Reviewed-by: Kieran Bingham <kieran.bing...@ideasonboard.com>

> ---
>  drivers/usb/gadget/function/uvc_video.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/gadget/function/uvc_video.c 
> b/drivers/usb/gadget/function/uvc_video.c
> index a95c8e2364ed..2c9821ec836e 100644
> --- a/drivers/usb/gadget/function/uvc_video.c
> +++ b/drivers/usb/gadget/function/uvc_video.c
> @@ -132,7 +132,9 @@ static int uvcg_video_ep_queue(struct uvc_video *video, 
> struct usb_request *req)
>       ret = usb_ep_queue(video->ep, req, GFP_ATOMIC);
>       if (ret < 0) {
>               printk(KERN_INFO "Failed to queue request (%d).\n", ret);
> -             usb_ep_set_halt(video->ep);
> +             /* Isochronous endpoints can't be halted. */
> +             if (usb_endpoint_xfer_bulk(video->ep->desc))
> +                     usb_ep_set_halt(video->ep);
>       }
>  
>       return ret;
> 

-- 
Regards
--
Kieran

Reply via email to