Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp1340836imm; Tue, 2 Oct 2018 06:48:06 -0700 (PDT) X-Google-Smtp-Source: ACcGV61v7xXR5O1A+E/ymZLNe6VudBIFVyWVCcvMkowTgVVkptiPCBvlfKSNHI1C2siTixX9vck1 X-Received: by 2002:a63:4f20:: with SMTP id d32-v6mr14147926pgb.231.1538488086930; Tue, 02 Oct 2018 06:48:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538488086; cv=none; d=google.com; s=arc-20160816; b=TxNlKeAraqXyU2BN5eo81qCG5pp7+Spi4QTw9uxyKlmWjacI/S0Fb/jFVpCJWnY1gA 8Vfw4Xu2UwMV6y+itu9Inz0mUdC/Y9AQFJl3cMJztEMQ3tHzkymHg9PpMS/p7peMYUcF c/3uw8ZXjtvW8/bFgBMpdVh56jeu61A/qIGN4by6+g8+v0MFIecrcwJ2WkIWGJv2mgxN 89ULIpjOQyyq77M3L6ejmrlbxbVLNsu4t0LhVFppPztoWiyWSgGPSePPR+sMAbS1yNkH 5cUMzDldbCGdG4badBYBcnaaoLfzcOLXsX0ztU2zyPzszHhtsebtvJzlzjLaZ3Pn2Rtl csXA== 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; bh=SiOzlSP1TE4UpTmQpGjJCvYnfQB6eTBTVl9QCfoK9po=; b=IM6SQwM+FRj7bcELm1kKSI54ph7tzFwFhzXnpnPZbRdphWzWeTdNqsOkU7bJnDSspI 1AnCa64RKUYad9MhqATt7WMlnrZU4pWgGfFtJ3pnAomWUC8nm6nUdnaSJK3jt1IOGc1S CVTyR2RVK6NKr5L/5SIFAeA68YHImGEfw3bBpe5raDUiiD22va06oGfewe4VW+dJr1FP HE1myFUGgtPTOcHDvHf/KjzgaO9gOiQnOActzv/PGBnLAKY7ZMRUD6o96Xx+j/wFtgyc GeMSqJu7RsYe0TufAEZQ7W2jYG2KdGRdmh4wUeBnoXCGMqoH3yTH2FZqxw35Rzpr21hA /PSQ== ARC-Authentication-Results: i=1; mx.google.com; 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 q10-v6si17939439pli.202.2018.10.02.06.47.52; Tue, 02 Oct 2018 06:48:06 -0700 (PDT) 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; 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 S1732460AbeJBUSX (ORCPT + 99 others); Tue, 2 Oct 2018 16:18:23 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:35466 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730235AbeJBUSW (ORCPT ); Tue, 2 Oct 2018 16:18:22 -0400 Received: from localhost (24-104-73-23-ip-static.hfc.comcastbusiness.net [24.104.73.23]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 1DFF8B2F; Tue, 2 Oct 2018 13:34:57 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, ming_qian , Laurent Pinchart , Kai-Heng Feng , Ana Guerrero Lopez , Mauro Carvalho Chehab Subject: [PATCH 4.14 098/137] media: uvcvideo: Support realteks UVC 1.5 device Date: Tue, 2 Oct 2018 06:24:59 -0700 Message-Id: <20181002132505.363448671@linuxfoundation.org> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181002132458.446916963@linuxfoundation.org> References: <20181002132458.446916963@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review 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 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: ming_qian commit f620d1d7afc7db57ab59f35000752840c91f67e7 upstream. media: uvcvideo: Support UVC 1.5 video probe & commit controls The length of UVC 1.5 video control is 48, and it is 34 for UVC 1.1. Change it to 48 for UVC 1.5 device, and the UVC 1.5 device can be recognized. More changes to the driver are needed for full UVC 1.5 compatibility. However, at least the UVC 1.5 Realtek RTS5847/RTS5852 cameras have been reported to work well. [laurent.pinchart@ideasonboard.com: Factor out code to helper function, update size checks] Cc: stable@vger.kernel.org Signed-off-by: ming_qian Signed-off-by: Laurent Pinchart Tested-by: Kai-Heng Feng Tested-by: Ana Guerrero Lopez Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Greg Kroah-Hartman --- drivers/media/usb/uvc/uvc_video.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -163,14 +163,27 @@ static void uvc_fixup_video_ctrl(struct } } +static size_t uvc_video_ctrl_size(struct uvc_streaming *stream) +{ + /* + * Return the size of the video probe and commit controls, which depends + * on the protocol version. + */ + if (stream->dev->uvc_version < 0x0110) + return 26; + else if (stream->dev->uvc_version < 0x0150) + return 34; + else + return 48; +} + static int uvc_get_video_ctrl(struct uvc_streaming *stream, struct uvc_streaming_control *ctrl, int probe, __u8 query) { + __u16 size = uvc_video_ctrl_size(stream); __u8 *data; - __u16 size; int ret; - size = stream->dev->uvc_version >= 0x0110 ? 34 : 26; if ((stream->dev->quirks & UVC_QUIRK_PROBE_DEF) && query == UVC_GET_DEF) return -EIO; @@ -225,7 +238,7 @@ static int uvc_get_video_ctrl(struct uvc ctrl->dwMaxVideoFrameSize = get_unaligned_le32(&data[18]); ctrl->dwMaxPayloadTransferSize = get_unaligned_le32(&data[22]); - if (size == 34) { + if (size >= 34) { ctrl->dwClockFrequency = get_unaligned_le32(&data[26]); ctrl->bmFramingInfo = data[30]; ctrl->bPreferedVersion = data[31]; @@ -254,11 +267,10 @@ out: static int uvc_set_video_ctrl(struct uvc_streaming *stream, struct uvc_streaming_control *ctrl, int probe) { + __u16 size = uvc_video_ctrl_size(stream); __u8 *data; - __u16 size; int ret; - size = stream->dev->uvc_version >= 0x0110 ? 34 : 26; data = kzalloc(size, GFP_KERNEL); if (data == NULL) return -ENOMEM; @@ -275,7 +287,7 @@ static int uvc_set_video_ctrl(struct uvc put_unaligned_le32(ctrl->dwMaxVideoFrameSize, &data[18]); put_unaligned_le32(ctrl->dwMaxPayloadTransferSize, &data[22]); - if (size == 34) { + if (size >= 34) { put_unaligned_le32(ctrl->dwClockFrequency, &data[26]); data[30] = ctrl->bmFramingInfo; data[31] = ctrl->bPreferedVersion;