if (!enable) {
                uvc_uninit_video(stream, 1);
-               usb_set_interface(stream->dev->udev, stream->intfnum, 0);
+               if (stream->intf->num_altsetting > 1) {
+                       usb_set_interface(stream->dev->udev,
+                                         stream->intfnum, 0);
+               } else {
+                       /* UVC doesn't specify how to inform a bulk-based device
+                        * when the video stream is stopped. Windows sends a
+                        * CLEAR_FEATURE(HALT) request to the video streaming
+                        * bulk endpoint, mimic the same behaviour.
+                        */
+                       unsigned int epnum = stream->header.bEndpointAddress
+                                          & USB_ENDPOINT_NUMBER_MASK;
+                       unsigned int dir = stream->header.bEndpointAddress
+                                        & USB_ENDPOINT_DIR_MASK;
+                       unsigned int pipe;
+
+                       pipe = usb_sndbulkpipe(stream->dev->udev, epnum) | dir;
+                       usb_clear_halt(stream->dev->udev, pipe);
+               }
+
                uvc_queue_enable(&stream->queue, 0);
                uvc_video_clock_cleanup(stream);
                return 0;