Преглед на файлове

V4L/DVB (12327): uvcvideo: Add PROBE_DEF quirk and enable it for the MT6227 device

At least one MT6227 model crashes when receiving a GET_DEF request on the
video probe control. As the various models can't be told apart based on the
descriptors, add a PROBE_DEF quirk to avoid sending the GET_DEF request and
enable the quirk for all models.

Signed-off-by: Laurent Pinchart <laurent.pinchart@skynet.be>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Laurent Pinchart преди 16 години
родител
ревизия
bab6f66c08
променени са 3 файла, в които са добавени 6 реда и са изтрити 1 реда
  1. 2 1
      drivers/media/video/uvc/uvc_driver.c
  2. 3 0
      drivers/media/video/uvc/uvc_video.c
  3. 1 0
      drivers/media/video/uvc/uvcvideo.h

+ 2 - 1
drivers/media/video/uvc/uvc_driver.c

@@ -1884,7 +1884,8 @@ static struct usb_device_id uvc_ids[] = {
 	  .bInterfaceClass	= USB_CLASS_VIDEO,
 	  .bInterfaceSubClass	= 1,
 	  .bInterfaceProtocol	= 0,
-	  .driver_info		= UVC_QUIRK_PROBE_MINMAX },
+	  .driver_info		= UVC_QUIRK_PROBE_MINMAX
+				| UVC_QUIRK_PROBE_DEF },
 	/* Syntek (HP Spartan) */
 	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
 				| USB_DEVICE_ID_MATCH_INT_INFO,

+ 3 - 0
drivers/media/video/uvc/uvc_video.c

@@ -128,6 +128,9 @@ static int uvc_get_video_ctrl(struct uvc_video_device *video,
 	if (data == NULL)
 		return -ENOMEM;
 
+	if ((video->dev->quirks & UVC_QUIRK_PROBE_DEF) && query == UVC_GET_DEF)
+		return -EIO;
+
 	ret = __uvc_query_ctrl(video->dev, query, 0, video->streaming->intfnum,
 		probe ? UVC_VS_PROBE_CONTROL : UVC_VS_COMMIT_CONTROL, data,
 		size, UVC_CTRL_STREAMING_TIMEOUT);

+ 1 - 0
drivers/media/video/uvc/uvcvideo.h

@@ -156,6 +156,7 @@ struct uvc_xu_control {
 #define UVC_QUIRK_STREAM_NO_FID		0x00000010
 #define UVC_QUIRK_IGNORE_SELECTOR_UNIT	0x00000020
 #define UVC_QUIRK_FIX_BANDWIDTH		0x00000080
+#define UVC_QUIRK_PROBE_DEF		0x00000100
 
 /* Format flags */
 #define UVC_FMT_FLAG_COMPRESSED		0x00000001