uvc-gadget: Do not send Set Interface (alternate setting) response twice
authorRoger Quadros <rogerq@ti.com>
Fri, 3 Mar 2017 11:17:15 +0000 (13:17 +0200)
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Mon, 6 Mar 2017 20:48:54 +0000 (22:48 +0200)
On alternate setting change, the webcam gadget sends us a
UVC_EVENT_STREAMON or UVC_EVENT_STREAMOFF event. In the first case, the
driver will issue a delayed status response automatically when we call
the VIDIOC_STREAMON ioctl. In the second case, the driver sends the
status response immediately. We must thus not send the status response
manually with UVCIOC_SEND_RESPONSE in any of those cases.

Without this, the ISO streaming doesn't work if host application
(e.g. luvcview) is closed and restarted.
On dwc3 gadget controller it was resulting in Buffer Expiry error on
the ISO endpoint.

Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
uvc-gadget.c

index 9ef315c..4d59ab8 100644 (file)
@@ -597,12 +597,12 @@ uvc_events_process(struct uvc_device *dev)
        case UVC_EVENT_STREAMON:
                uvc_video_reqbufs(dev, 4);
                uvc_video_stream(dev, 1);
-               break;
+               return;
 
        case UVC_EVENT_STREAMOFF:
                uvc_video_stream(dev, 0);
                uvc_video_reqbufs(dev, 0);
-               break;
+               return;
        }
 
        ioctl(dev->fd, UVCIOC_SEND_RESPONSE, &resp);