summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/uvc
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@skynet.be>2009-07-19 23:39:56 +0200
committerLaurent Pinchart <laurent.pinchart@skynet.be>2009-07-19 23:39:56 +0200
commit391fa9b1286e89a5b82f26c2efc3df18d72428e5 (patch)
treefb82193aea2efd54dbbfd2b986e1e77543b4d4ec /linux/drivers/media/video/uvc
parente1afff6e5f2d6b35928ab6651ac5705659713ca0 (diff)
downloadmediapointer-dvb-s2-391fa9b1286e89a5b82f26c2efc3df18d72428e5.tar.gz
mediapointer-dvb-s2-391fa9b1286e89a5b82f26c2efc3df18d72428e5.tar.bz2
uvcvideo: Add PROBE_DEF quirk and enable it for the MT6227 device
From: Laurent Pinchart <laurent.pinchart@skynet.be> 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. Priority: normal Signed-off-by: Laurent Pinchart <laurent.pinchart@skynet.be>
Diffstat (limited to 'linux/drivers/media/video/uvc')
-rw-r--r--linux/drivers/media/video/uvc/uvc_driver.c3
-rw-r--r--linux/drivers/media/video/uvc/uvc_video.c3
-rw-r--r--linux/drivers/media/video/uvc/uvcvideo.h1
3 files changed, 6 insertions, 1 deletions
diff --git a/linux/drivers/media/video/uvc/uvc_driver.c b/linux/drivers/media/video/uvc/uvc_driver.c
index f7b76884d..1c09cd809 100644
--- a/linux/drivers/media/video/uvc/uvc_driver.c
+++ b/linux/drivers/media/video/uvc/uvc_driver.c
@@ -1868,7 +1868,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,
diff --git a/linux/drivers/media/video/uvc/uvc_video.c b/linux/drivers/media/video/uvc/uvc_video.c
index c833e984e..f4f4e1bb3 100644
--- a/linux/drivers/media/video/uvc/uvc_video.c
+++ b/linux/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);
diff --git a/linux/drivers/media/video/uvc/uvcvideo.h b/linux/drivers/media/video/uvc/uvcvideo.h
index 4887650c9..e700bdc20 100644
--- a/linux/drivers/media/video/uvc/uvcvideo.h
+++ b/linux/drivers/media/video/uvc/uvcvideo.h
@@ -157,6 +157,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