Fix incorrect bandwidth on some Chicony webcams

This commit is contained in:
Josh Boyer 2015-05-18 13:17:08 -04:00
parent 40fce7a9f9
commit 2aaba31e49
2 changed files with 42 additions and 0 deletions

View File

@ -655,6 +655,8 @@ Patch26201: ovl-don-t-remove-non-empty-opaque-directory.patch
#rhbz 1220118
Patch26202: 0001-media-media-Fix-regression-in-some-more-dib0700-base.patch
Patch26203: v4l-uvcvideo-Fix-incorrect-bandwidth-with-Chicony-de.patch
# END OF PATCH DEFINITIONS
%endif
@ -1424,6 +1426,8 @@ ApplyPatch ovl-don-t-remove-non-empty-opaque-directory.patch
#rhbz 1220118
ApplyPatch 0001-media-media-Fix-regression-in-some-more-dib0700-base.patch
ApplyPatch v4l-uvcvideo-Fix-incorrect-bandwidth-with-Chicony-de.patch
# END OF PATCH APPLICATIONS
%endif
@ -2274,6 +2278,9 @@ fi
#
#
%changelog
* Mon May 18 2015 Josh Boyer <jwboyer@fedoraproject.org>
- Fix incorrect bandwidth on some Chicony webcams
* Mon May 18 2015 Justin M. Forbes <jforbes@fedoraproject.org> - 4.0.4-300
- Linux v4.0.4

View File

@ -0,0 +1,35 @@
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date: Mon, 18 May 2015 10:53:48 +0300
Subject: [PATCH] v4l: uvcvideo: Fix incorrect bandwidth with Chicony device
04f2:b50b
The "TOSHIBA Web Camera - 5M" Chicony device (04f2:b50b) seems to
compute the bandwidth on 16 bits and erroneously sign-extend it to
32 bits, resulting in a huge bandwidth value. Detect and fix that
condition by setting the 16 MSBs to 0 when they're all equal to 1.
Reported-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
drivers/media/usb/uvc/uvc_video.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
index 20ccc9d315dc..f839654ea436 100644
--- a/drivers/media/usb/uvc/uvc_video.c
+++ b/drivers/media/usb/uvc/uvc_video.c
@@ -119,6 +119,14 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming *stream,
ctrl->dwMaxVideoFrameSize =
frame->dwMaxVideoFrameBufferSize;
+ /* The "TOSHIBA Web Camera - 5M" Chicony device (04f2:b50b) seems to
+ * compute the bandwidth on 16 bits and erroneously sign-extend it to
+ * 32 bits, resulting in a huge bandwidth value. Detect and fix that
+ * condition by setting the 16 MSBs to 0 when they're all equal to 1.
+ */
+ if ((ctrl->dwMaxPayloadTransferSize & 0xffff0000) == 0xffff0000)
+ ctrl->dwMaxPayloadTransferSize &= ~0xffff0000;
+
if (!(format->flags & UVC_FMT_FLAG_COMPRESSED) &&
stream->dev->quirks & UVC_QUIRK_FIX_BANDWIDTH &&
stream->intf->num_altsetting > 1) {