Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp1635018ybv; Fri, 21 Feb 2020 00:42:59 -0800 (PST) X-Google-Smtp-Source: APXvYqyOSyDgrIHIVJaE8wDqMpdrLGnOKq0eRoootnuwIjfyt8LbS7B678GDVNl5Z0aVEmD7v4Zl X-Received: by 2002:a9d:4f02:: with SMTP id d2mr12011162otl.368.1582274579310; Fri, 21 Feb 2020 00:42:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582274579; cv=none; d=google.com; s=arc-20160816; b=SH5dYHma7oOuTDC52Rs6nGsGd1+TUU3Z09EIc18bc9KpGmiQTHigIq4Xtiz3mEBe3h +cJgyRYqWboILmMwpf5XqRbH1Pk8HlJOFgJW+efF/7zY0oU7C+PD1+orqCwtXI61XfHR qUnB7HyYcihkYoxhbaK2LdlupzVaw2mlHddl4dfTWTVpnk81nWmIA6ywAA8vzz0LFLba vNIgEQp/ZPLg1w0Kz9Cyz4canX800qOLDNwS6ATloOq69DIXRrpeN0q+eUMaWETHy8HQ EjOkQNBdMgbCz0BuWvkEJ279Sg8SIYmG4sJV0adil57CCkBjZxACZY2lOKIEYpNbTLeQ wATQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=5a09SzscFlf7aEY5pCtkX1/mm7zjCKKtJ9M2alWv0sM=; b=wPxerSJ1o1+YPICMKFzJ9Ue91krlfcP9LhZoSr1LRqZQS0bYQLQ/jsXAxpi79hIbTg oiYF2onDcR/U6UfyHN+832IwrgJHxv7G3I0x2XUGi9MBRidpkqO/a48J8DNGY2l2Zih4 20/eS8++vYm9uIB7WM4P2ng1u1kmdzdVv0jutS7uoqQbH3iSb/ZM1RYn1t9msUyoPyeG 4lRH5qprIxyXsl3vkI+t/roVUvVOztBDVLQpok2N+LfqMYjSs81tEjMFJL5tEdHk0t9O Ouw1vtE/LiszifMmTKdZuZqey9z9dUOF9qZD0yjDnvwNeyhGsc0UKLawvGDh0qtH+llJ It4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=iLF6+Ybt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z14si1037528oth.15.2020.02.21.00.42.47; Fri, 21 Feb 2020 00:42:59 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=iLF6+Ybt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731836AbgBUIlV (ORCPT + 99 others); Fri, 21 Feb 2020 03:41:21 -0500 Received: from mail.kernel.org ([198.145.29.99]:57462 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729037AbgBUH5t (ORCPT ); Fri, 21 Feb 2020 02:57:49 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9354B20578; Fri, 21 Feb 2020 07:57:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582271868; bh=wV0lBlScGsvZs+a12E4IqKgnQqyNxyfFky+kMRcA+SA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iLF6+YbtYMqmCD3P+FwxMBuao4a3n0gnf/ZbX6VgTT28JajWGD1pPphQ9SxqOhOU5 Y+fsVQBXD3oNFmG5OG0ow7hpn80RMHJ7BQ+YfmyIYYFpFoB3GIeM4aeBbrcZKiw4Ez KMxP4MJpKuMdOrmiNbrpXxV380u6D0AGdC6kqG1I= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sergey Zakharchenko , Laurent Pinchart , Mauro Carvalho Chehab , Sasha Levin Subject: [PATCH 5.5 329/399] media: uvcvideo: Add a quirk to force GEO GC6500 Camera bits-per-pixel value Date: Fri, 21 Feb 2020 08:40:54 +0100 Message-Id: <20200221072433.157164784@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200221072402.315346745@linuxfoundation.org> References: <20200221072402.315346745@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sergey Zakharchenko [ Upstream commit 1dd2e8f942574e2be18374ebb81751082d8d467c ] This device does not function correctly in raw mode in kernel versions validating buffer sizes in bulk mode. It erroneously announces 16 bits per pixel instead of 12 for NV12 format, so it needs this quirk to fix computed frame size and avoid legitimate frames getting discarded. [Move info and div variables to local scope] Signed-off-by: Sergey Zakharchenko Signed-off-by: Laurent Pinchart Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/usb/uvc/uvc_driver.c | 25 +++++++++++++++++++++++++ drivers/media/usb/uvc/uvcvideo.h | 1 + 2 files changed, 26 insertions(+) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c index 2b688cc39bb81..99883550375e9 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -497,6 +497,22 @@ static int uvc_parse_format(struct uvc_device *dev, } } + /* Some devices report bpp that doesn't match the format. */ + if (dev->quirks & UVC_QUIRK_FORCE_BPP) { + const struct v4l2_format_info *info = + v4l2_format_info(format->fcc); + + if (info) { + unsigned int div = info->hdiv * info->vdiv; + + n = info->bpp[0] * div; + for (i = 1; i < info->comp_planes; i++) + n += info->bpp[i]; + + format->bpp = DIV_ROUND_UP(8 * n, div); + } + } + if (buffer[2] == UVC_VS_FORMAT_UNCOMPRESSED) { ftype = UVC_VS_FRAME_UNCOMPRESSED; } else { @@ -2874,6 +2890,15 @@ static const struct usb_device_id uvc_ids[] = { .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, .driver_info = (kernel_ulong_t)&uvc_quirk_force_y8 }, + /* GEO Semiconductor GC6500 */ + { .match_flags = USB_DEVICE_ID_MATCH_DEVICE + | USB_DEVICE_ID_MATCH_INT_INFO, + .idVendor = 0x29fe, + .idProduct = 0x4d53, + .bInterfaceClass = USB_CLASS_VIDEO, + .bInterfaceSubClass = 1, + .bInterfaceProtocol = 0, + .driver_info = UVC_INFO_QUIRK(UVC_QUIRK_FORCE_BPP) }, /* Intel RealSense D4M */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index f773dc5d802cd..6ab972c643e37 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -198,6 +198,7 @@ #define UVC_QUIRK_RESTRICT_FRAME_RATE 0x00000200 #define UVC_QUIRK_RESTORE_CTRLS_ON_INIT 0x00000400 #define UVC_QUIRK_FORCE_Y8 0x00000800 +#define UVC_QUIRK_FORCE_BPP 0x00001000 /* Format flags */ #define UVC_FMT_FLAG_COMPRESSED 0x00000001 -- 2.20.1