diff options
author | Laurent Pinchart <laurent.pinchart@skynet.be> | 2009-07-19 17:39:56 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-09-12 11:18:09 -0400 |
commit | bab6f66c08043a93b9460f6e0bf2b1cd9cc03e53 (patch) | |
tree | e7866ec7df71b5e9e52373479308bad1dcafebf4 /drivers/media/video/uvc | |
parent | 76594c5315d843fb1d3bffe7a8e2559086755f72 (diff) |
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>
Diffstat (limited to 'drivers/media/video/uvc')
-rw-r--r-- | drivers/media/video/uvc/uvc_driver.c | 3 | ||||
-rw-r--r-- | drivers/media/video/uvc/uvc_video.c | 3 | ||||
-rw-r--r-- | drivers/media/video/uvc/uvcvideo.h | 1 |
3 files changed, 6 insertions, 1 deletions
diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c index f5deb2bc8177..e17216c96ac5 100644 --- a/drivers/media/video/uvc/uvc_driver.c +++ b/drivers/media/video/uvc/uvc_driver.c | |||
@@ -1884,7 +1884,8 @@ static struct usb_device_id uvc_ids[] = { | |||
1884 | .bInterfaceClass = USB_CLASS_VIDEO, | 1884 | .bInterfaceClass = USB_CLASS_VIDEO, |
1885 | .bInterfaceSubClass = 1, | 1885 | .bInterfaceSubClass = 1, |
1886 | .bInterfaceProtocol = 0, | 1886 | .bInterfaceProtocol = 0, |
1887 | .driver_info = UVC_QUIRK_PROBE_MINMAX }, | 1887 | .driver_info = UVC_QUIRK_PROBE_MINMAX |
1888 | | UVC_QUIRK_PROBE_DEF }, | ||
1888 | /* Syntek (HP Spartan) */ | 1889 | /* Syntek (HP Spartan) */ |
1889 | { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | 1890 | { .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
1890 | | USB_DEVICE_ID_MATCH_INT_INFO, | 1891 | | USB_DEVICE_ID_MATCH_INT_INFO, |
diff --git a/drivers/media/video/uvc/uvc_video.c b/drivers/media/video/uvc/uvc_video.c index cf618d7c1f55..68468309932d 100644 --- a/drivers/media/video/uvc/uvc_video.c +++ b/drivers/media/video/uvc/uvc_video.c | |||
@@ -128,6 +128,9 @@ static int uvc_get_video_ctrl(struct uvc_video_device *video, | |||
128 | if (data == NULL) | 128 | if (data == NULL) |
129 | return -ENOMEM; | 129 | return -ENOMEM; |
130 | 130 | ||
131 | if ((video->dev->quirks & UVC_QUIRK_PROBE_DEF) && query == UVC_GET_DEF) | ||
132 | return -EIO; | ||
133 | |||
131 | ret = __uvc_query_ctrl(video->dev, query, 0, video->streaming->intfnum, | 134 | ret = __uvc_query_ctrl(video->dev, query, 0, video->streaming->intfnum, |
132 | probe ? UVC_VS_PROBE_CONTROL : UVC_VS_COMMIT_CONTROL, data, | 135 | probe ? UVC_VS_PROBE_CONTROL : UVC_VS_COMMIT_CONTROL, data, |
133 | size, UVC_CTRL_STREAMING_TIMEOUT); | 136 | size, UVC_CTRL_STREAMING_TIMEOUT); |
diff --git a/drivers/media/video/uvc/uvcvideo.h b/drivers/media/video/uvc/uvcvideo.h index 5cf68f590725..fcccf9c9b7ba 100644 --- a/drivers/media/video/uvc/uvcvideo.h +++ b/drivers/media/video/uvc/uvcvideo.h | |||
@@ -156,6 +156,7 @@ struct uvc_xu_control { | |||
156 | #define UVC_QUIRK_STREAM_NO_FID 0x00000010 | 156 | #define UVC_QUIRK_STREAM_NO_FID 0x00000010 |
157 | #define UVC_QUIRK_IGNORE_SELECTOR_UNIT 0x00000020 | 157 | #define UVC_QUIRK_IGNORE_SELECTOR_UNIT 0x00000020 |
158 | #define UVC_QUIRK_FIX_BANDWIDTH 0x00000080 | 158 | #define UVC_QUIRK_FIX_BANDWIDTH 0x00000080 |
159 | #define UVC_QUIRK_PROBE_DEF 0x00000100 | ||
159 | 160 | ||
160 | /* Format flags */ | 161 | /* Format flags */ |
161 | #define UVC_FMT_FLAG_COMPRESSED 0x00000001 | 162 | #define UVC_FMT_FLAG_COMPRESSED 0x00000001 |