From nobody Fri Dec 19 18:59:24 2025 Received: from mail-qv1-f53.google.com (mail-qv1-f53.google.com [209.85.219.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 291A11514F3 for ; Mon, 10 Jun 2024 23:09:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718060998; cv=none; b=oY8H5f3KeO1l8yTPu1TKXXRTRKYROFLyo3EJ/OHe2pZhDcxpsA1LGndXSYurfHV9q0cA5OuQOkGOTmJCwFAZ6LVkq5ubZ8bfl9/8dM86UfGfVvg8kylTXqSYnA6iP4Q3zXU2omsxnf0I1SPbkxZDVKwuHyErNLEszWd0706Cetg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718060998; c=relaxed/simple; bh=mmRiog2A0uIil7zCDWbDB/RKRQKrz+dasll7tr7FLWQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PRYxEy/6C4PpNGRD+d7DbgxZ1r6Kb9E/M/q7EFvuFvqyvTlJ4vNIowOhSbOZpxjSDQMyazjOFXNM9EuweTbxTfLunPH5vDHvFiuL9B9liLgX7pTS+q6eC9jK0Q/4UQaJbJVWwPrjJo6gaIMYn+S2f9lCPhaFyaZqZzcvFlRkXcQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=MLHWCuCh; arc=none smtp.client-ip=209.85.219.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="MLHWCuCh" Received: by mail-qv1-f53.google.com with SMTP id 6a1803df08f44-6b06bb80d7dso12194006d6.0 for ; Mon, 10 Jun 2024 16:09:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1718060995; x=1718665795; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Vu2oMVYEjcsFAa+zF1RhnzGy00bzVv1v7T1Od5qxCIk=; b=MLHWCuChNAbVxsAqb/olKWGzXJ5m80Ww2uKLaIjEhulDndbnxldWgzQDQiGiSUpyOa bNshPVMgKl8ljlR0WdRvSCFlDcPM3gZF2h2ogHjqRR10ahvU2qbiSZvMbc+NtUWYKQH5 5/23EfXkGFn4YVZCnJqU+Ng1Xe9T3ayNs90uQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718060995; x=1718665795; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Vu2oMVYEjcsFAa+zF1RhnzGy00bzVv1v7T1Od5qxCIk=; b=sAXM+PwtlmYKHwz6TQJ5zEUdqTuSYMKGuvYTqnlsdvZ2b5kfkQegd+0u9di8TIKdCA S6YeiTWttk7kIPD233qE6LH4QUmGERZUDOS77dcZzjET8Tqi8CgECbyjenxTf1cueIDV Uo+iNGwszPGX0WX4u1DNjiZx4jqfqxliEpdkePeaObJEm2FtHYtzvtlrpR6xXFjemzqk WdrdfGRm2rSahiThFr39xfUVKmNyym5qJTIL5Zl1UV/pvIM80mOBNHQy4Cukk6XQxaoU wx343y0KrHOTsG64RZGr33M2wfSnomOfP1aPjoNzZifJnZ0ae1sDkPPc+R4dukntMdzu laew== X-Forwarded-Encrypted: i=1; AJvYcCUkSSzJdqLt+o4H3GTFX0hyA7GhvXfgmX5hVauzF+I2ttOopv4nCnPipWRcxFbWTRbavvTZ8AsOuNquTQRvHQ9g7JsKRJ0abuCTN1/m X-Gm-Message-State: AOJu0YwYeYJT8+Z72Gc/7id9ZebN1oynoZw3cfQbw7FyCQjguLHHI+Sh J9yTepKQ7YRUBuPuirsQ+TxEbsia5c65snK2Kq5Gh0iYGrqf6ymW9X2gfDHt1w== X-Google-Smtp-Source: AGHT+IFSMLwcHePmJYpuKv8V2B4L07cpCeuaHyXPO3dO9KZYt9s0uHdtA5t5lc2zXRfrWt6NJanmiQ== X-Received: by 2002:a05:6214:2dc8:b0:6b0:7afb:5c85 with SMTP id 6a1803df08f44-6b07afb6026mr69292796d6.3.1718060995102; Mon, 10 Jun 2024 16:09:55 -0700 (PDT) Received: from denia.c.googlers.com (123.178.145.34.bc.googleusercontent.com. [34.145.178.123]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b06519d521sm35256946d6.65.2024.06.10.16.09.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Jun 2024 16:09:54 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 10 Jun 2024 23:09:52 +0000 Subject: [PATCH v2 1/7] media: uvcvideo: Allow custom control mapping Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240610-billion-v2-1-38e861475f85@chromium.org> References: <20240610-billion-v2-0-38e861475f85@chromium.org> In-Reply-To: <20240610-billion-v2-0-38e861475f85@chromium.org> To: Laurent Pinchart , Mauro Carvalho Chehab Cc: Sergey Senozhatsky , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.12.4 Some advanced controls might not be completely implemented by vendors. If the controls are a enumeration, UVC does not gives a way to probe what is implemented and what is not. Let's create a new callback function where heuristics can be implemented to detect what is implemented and what not. Reviewed-by: Sergey Senozhatsky Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_ctrl.c | 10 +++++++++- drivers/media/usb/uvc/uvcvideo.h | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index e59a463c2761..44ec185a8c8b 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -2360,7 +2360,7 @@ static int uvc_ctrl_add_info(struct uvc_device *dev, = struct uvc_control *ctrl, /* * Add a control mapping to a given control. */ -static int __uvc_ctrl_add_mapping(struct uvc_video_chain *chain, +static int __uvc_ctrl_add_mapping_to_list(struct uvc_video_chain *chain, struct uvc_control *ctrl, const struct uvc_control_mapping *mapping) { struct uvc_control_mapping *map; @@ -2434,6 +2434,14 @@ static int __uvc_ctrl_add_mapping(struct uvc_video_c= hain *chain, return -ENOMEM; } =20 +static int __uvc_ctrl_add_mapping(struct uvc_video_chain *chain, + struct uvc_control *ctrl, const struct uvc_control_mapping *mapping) +{ + if (mapping && mapping->add_mapping) + return mapping->add_mapping(chain, ctrl, mapping); + return __uvc_ctrl_add_mapping_to_list(chain, ctrl, mapping); +} + int uvc_ctrl_add_mapping(struct uvc_video_chain *chain, const struct uvc_control_mapping *mapping) { diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 6fb0a78b1b00..fa0396dd5b35 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -84,7 +84,9 @@ =20 struct gpio_desc; struct sg_table; +struct uvc_control; struct uvc_device; +struct uvc_video_chain; =20 /* * TODO: Put the most frequently accessed fields at the beginning of @@ -123,6 +125,9 @@ struct uvc_control_mapping { s32 master_manual; u32 slave_ids[2]; =20 + int (*add_mapping)(struct uvc_video_chain *chain, + struct uvc_control *ctrl, + const struct uvc_control_mapping *mapping); s32 (*get)(struct uvc_control_mapping *mapping, u8 query, const u8 *data); void (*set)(struct uvc_control_mapping *mapping, s32 value, --=20 2.45.2.505.gda0bf45e8d-goog From nobody Fri Dec 19 18:59:24 2025 Received: from mail-qv1-f41.google.com (mail-qv1-f41.google.com [209.85.219.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 36FF7152178 for ; Mon, 10 Jun 2024 23:09:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718060998; cv=none; b=GIlrlbiPQiQGENnTqgN2D+AJ212qkVR1qwKKPy8RdZKdA5t+Z6Dos3G6OeXphpNraO/jewNSfhopQGZgldPa2U0xgBaZxa0enGU55M23oYmfE9uV/xf52yJRrCAJv3+fMSN8WDJDGPfTQIyEkmHsIJ4fb0tBgf2A9uCCCmE/7Y0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718060998; c=relaxed/simple; bh=5KtcvntcMUZkACMFk5rU2ybB+ZMYW6Y9YCbSQeSS2kI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EFX12nXgugvAPqMw3OZztAb1ii1KUjTWaRNtWU35ebtxrL78Cub7QbMJQcibBR6USA9lgn7wo8mHSCYF/bHekq/SATCBFFVkNq5bbvqZACYo0f37dFxVPMTKAznh3SntiMQzjAXM/bVPgUqe1l7SB4Abl0QjCLrCNNrKiK6hHtI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=Mc7Npuc6; arc=none smtp.client-ip=209.85.219.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="Mc7Npuc6" Received: by mail-qv1-f41.google.com with SMTP id 6a1803df08f44-6b064841f81so30285256d6.1 for ; Mon, 10 Jun 2024 16:09:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1718060996; x=1718665796; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=AbM4kNTJNPzmGxmhqRn7T4MAUpw44gO0YyJKcWOn6hw=; b=Mc7Npuc6hM3Sm4YInJw6f/eWbK+ZllD/PKntLxkuLKT2k307yJQTF5fqSOLSVWr8hR BdiCpk5OevTGPDiXrKZfjPOytON3ZrCbC/J6xvBd58HbZhT3Cr0gbYJkvrzuy1ZIBhqZ tttuvZiuDttG2r8Sn8/SwPRPUXxarZ2V1u5y8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718060996; x=1718665796; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AbM4kNTJNPzmGxmhqRn7T4MAUpw44gO0YyJKcWOn6hw=; b=NGGwKEJp/dueh48C27UNRy3STNyGy3aUlhU3R1ec6fCDL650mn6ezFaFS2GRDBwqOd qHTcQ+0Qwi9Dt56Dom4ogS+K1U65/J+AYKNOTEwmcK2CN55f7kcHPfgMUTkE7Xu21orT 5a7Se13A8fmzoPegXf1Ol2u0A6XcSkq3j2e/vpg+QTDO+bDIMQLDSN8aILIi6okPl/Wy 7zEzYFqexLVvJjRbm4hLVzuPRkXUHt8rQiymQe93M89RWhZrjzplWvzEw/oeqAPPwq0T gsF9Ot675tdeEKQ4Dz96tNTdJ0IESs/2/85W4VWK9R/arzHktHMtcTWJsYqA7lKht93y U9BQ== X-Forwarded-Encrypted: i=1; AJvYcCX0SOZWj+FTG7PlnIL6Dv5al/c3f2Ij3qaPjtVM7yAvasjeMnrKha5wLeYICrI9UEH04OCIo5j5TEsSGTOsFJP29yo5HD+grFUUPiA7 X-Gm-Message-State: AOJu0YyyCLj8h9FbrulKXZcrmeKftVfHDwRSVGRh2ZMapeOQonvVHni7 aj0gs7cboqaKgO6xqL8ZIh9jfEu95Km4DjTYwfCpxjAelmcGP2MnpS0DbaGa4A== X-Google-Smtp-Source: AGHT+IH2h0TqAZAmA0RqqwWg+HjA1/ZYxta7QDd7AU9qer6HLjPF9Oj/kvRaWHlK8xVe5Q9cgLSkww== X-Received: by 2002:a05:6214:524a:b0:6b0:6b57:4c57 with SMTP id 6a1803df08f44-6b06b574fbbmr88218606d6.1.1718060995938; Mon, 10 Jun 2024 16:09:55 -0700 (PDT) Received: from denia.c.googlers.com (123.178.145.34.bc.googleusercontent.com. [34.145.178.123]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b06519d521sm35256946d6.65.2024.06.10.16.09.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Jun 2024 16:09:55 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 10 Jun 2024 23:09:53 +0000 Subject: [PATCH v2 2/7] media: uvcvideo: Refactor Power Line Frequency limit selection Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240610-billion-v2-2-38e861475f85@chromium.org> References: <20240610-billion-v2-0-38e861475f85@chromium.org> In-Reply-To: <20240610-billion-v2-0-38e861475f85@chromium.org> To: Laurent Pinchart , Mauro Carvalho Chehab Cc: Sergey Senozhatsky , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.12.4 Move the PLF mapping logic to its own function. This patch does not introduce any new functionality to the logic, it is just a preparation patch. Reviewed-by: Sergey Senozhatsky Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_ctrl.c | 93 ++++++++++++++++++++++++------------= ---- 1 file changed, 55 insertions(+), 38 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 44ec185a8c8b..d82cfc56dfd5 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -459,6 +459,56 @@ static void uvc_ctrl_set_rel_speed(struct uvc_control_= mapping *mapping, data[first+1] =3D min_t(int, abs(value), 0xff); } =20 +const struct uvc_control_mapping uvc_ctrl_power_line_mapping_limited =3D { + .id =3D V4L2_CID_POWER_LINE_FREQUENCY, + .entity =3D UVC_GUID_UVC_PROCESSING, + .selector =3D UVC_PU_POWER_LINE_FREQUENCY_CONTROL, + .size =3D 2, + .offset =3D 0, + .v4l2_type =3D V4L2_CTRL_TYPE_MENU, + .data_type =3D UVC_CTRL_DATA_TYPE_ENUM, + .menu_mask =3D GENMASK(V4L2_CID_POWER_LINE_FREQUENCY_60HZ, + V4L2_CID_POWER_LINE_FREQUENCY_50HZ), +}; + +const struct uvc_control_mapping uvc_ctrl_power_line_mapping_uvc11 =3D { + .id =3D V4L2_CID_POWER_LINE_FREQUENCY, + .entity =3D UVC_GUID_UVC_PROCESSING, + .selector =3D UVC_PU_POWER_LINE_FREQUENCY_CONTROL, + .size =3D 2, + .offset =3D 0, + .v4l2_type =3D V4L2_CTRL_TYPE_MENU, + .data_type =3D UVC_CTRL_DATA_TYPE_ENUM, + .menu_mask =3D GENMASK(V4L2_CID_POWER_LINE_FREQUENCY_60HZ, + V4L2_CID_POWER_LINE_FREQUENCY_DISABLED), +}; + +static const struct uvc_control_mapping uvc_ctrl_power_line_mapping_uvc15 = =3D { + .id =3D V4L2_CID_POWER_LINE_FREQUENCY, + .entity =3D UVC_GUID_UVC_PROCESSING, + .selector =3D UVC_PU_POWER_LINE_FREQUENCY_CONTROL, + .size =3D 2, + .offset =3D 0, + .v4l2_type =3D V4L2_CTRL_TYPE_MENU, + .data_type =3D UVC_CTRL_DATA_TYPE_ENUM, + .menu_mask =3D GENMASK(V4L2_CID_POWER_LINE_FREQUENCY_AUTO, + V4L2_CID_POWER_LINE_FREQUENCY_DISABLED), +}; + +static int __uvc_ctrl_add_mapping(struct uvc_video_chain *chain, + struct uvc_control *ctrl, const struct uvc_control_mapping *mapping); + +static int uvc_ctrl_add_plf_mapping(struct uvc_video_chain *chain, + struct uvc_control *ctrl, const struct uvc_control_mapping *mapping) +{ + if (chain->dev->uvc_version < 0x150) + return __uvc_ctrl_add_mapping(chain, ctrl, + &uvc_ctrl_power_line_mapping_uvc11); + + return __uvc_ctrl_add_mapping(chain, ctrl, + &uvc_ctrl_power_line_mapping_uvc15); +} + static const struct uvc_control_mapping uvc_ctrl_mappings[] =3D { { .id =3D V4L2_CID_BRIGHTNESS, @@ -748,51 +798,18 @@ static const struct uvc_control_mapping uvc_ctrl_mapp= ings[] =3D { .v4l2_type =3D V4L2_CTRL_TYPE_BOOLEAN, .data_type =3D UVC_CTRL_DATA_TYPE_BOOLEAN, }, -}; - -const struct uvc_control_mapping uvc_ctrl_power_line_mapping_limited =3D { - .id =3D V4L2_CID_POWER_LINE_FREQUENCY, - .entity =3D UVC_GUID_UVC_PROCESSING, - .selector =3D UVC_PU_POWER_LINE_FREQUENCY_CONTROL, - .size =3D 2, - .offset =3D 0, - .v4l2_type =3D V4L2_CTRL_TYPE_MENU, - .data_type =3D UVC_CTRL_DATA_TYPE_ENUM, - .menu_mask =3D GENMASK(V4L2_CID_POWER_LINE_FREQUENCY_60HZ, - V4L2_CID_POWER_LINE_FREQUENCY_50HZ), -}; - -const struct uvc_control_mapping uvc_ctrl_power_line_mapping_uvc11 =3D { - .id =3D V4L2_CID_POWER_LINE_FREQUENCY, - .entity =3D UVC_GUID_UVC_PROCESSING, - .selector =3D UVC_PU_POWER_LINE_FREQUENCY_CONTROL, - .size =3D 2, - .offset =3D 0, - .v4l2_type =3D V4L2_CTRL_TYPE_MENU, - .data_type =3D UVC_CTRL_DATA_TYPE_ENUM, - .menu_mask =3D GENMASK(V4L2_CID_POWER_LINE_FREQUENCY_60HZ, - V4L2_CID_POWER_LINE_FREQUENCY_DISABLED), + { + .entity =3D UVC_GUID_UVC_PROCESSING, + .selector =3D UVC_PU_POWER_LINE_FREQUENCY_CONTROL, + .add_mapping =3D uvc_ctrl_add_plf_mapping, + }, }; =20 static const struct uvc_control_mapping *uvc_ctrl_mappings_uvc11[] =3D { - &uvc_ctrl_power_line_mapping_uvc11, NULL, /* Sentinel */ }; =20 -static const struct uvc_control_mapping uvc_ctrl_power_line_mapping_uvc15 = =3D { - .id =3D V4L2_CID_POWER_LINE_FREQUENCY, - .entity =3D UVC_GUID_UVC_PROCESSING, - .selector =3D UVC_PU_POWER_LINE_FREQUENCY_CONTROL, - .size =3D 2, - .offset =3D 0, - .v4l2_type =3D V4L2_CTRL_TYPE_MENU, - .data_type =3D UVC_CTRL_DATA_TYPE_ENUM, - .menu_mask =3D GENMASK(V4L2_CID_POWER_LINE_FREQUENCY_AUTO, - V4L2_CID_POWER_LINE_FREQUENCY_DISABLED), -}; - static const struct uvc_control_mapping *uvc_ctrl_mappings_uvc15[] =3D { - &uvc_ctrl_power_line_mapping_uvc15, NULL, /* Sentinel */ }; =20 --=20 2.45.2.505.gda0bf45e8d-goog From nobody Fri Dec 19 18:59:24 2025 Received: from mail-yw1-f170.google.com (mail-yw1-f170.google.com [209.85.128.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5AF10152516 for ; Mon, 10 Jun 2024 23:09:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718061000; cv=none; b=Z2dy2Y2SvL9i3+Hhu7mRWxLL7ObhG+16Ex5jxrwKDJ++BUfA9spT+8JP+qExWKEvf+66Dv8tmTF/NCkp15dMa4oukq1PjDfCz2eoeBtNKaLn6vDMrfggckq2i0D1ZWbPbbpEMZxUpIGlOHODmD1/Leg9TTEJ6RyfDqdEFI0zCXQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718061000; c=relaxed/simple; bh=j8MR+0Zdp3uWVc1WjRQyCRAas8P1RT3ZjAZLRfXEnB4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=a+hv4bAlIVh0PCPdMzhcVxz+QiWXz+TUQmUHT0VGwVPi6XpW1GSt1fAEIAuUAu6TsI/KdATWTbi3LHssB2ST38V1sm7QD3mtVb64bFg/88ZBQ2mwaMzPJ6lTaDDXCnDmGg4i+N2Z0m9XlRT/a5/4ifejWhTchAs9wHiAE6xzSfI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=Lm6+NkQk; arc=none smtp.client-ip=209.85.128.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="Lm6+NkQk" Received: by mail-yw1-f170.google.com with SMTP id 00721157ae682-627f3265898so52609327b3.3 for ; Mon, 10 Jun 2024 16:09:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1718060997; x=1718665797; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ggXYPXXJz9pqRmEYjjKEnuceXrydB78eIdBvang4V2c=; b=Lm6+NkQkQqOkqRcP/pR4gBk95xatY6QxI3pmTLlh3/4DviH4OU3zkEtOjcHyt01cos PtVCs1GQcMiiKNJFwbUw1MYGg0YVWi4+ImyQ095Et+fIpkEFeEUAGbbtDGOK9/3vsN+J f6bIZ0yEioVCLYKnblLSNCR/DTJ/w3MlHlRpE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718060997; x=1718665797; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ggXYPXXJz9pqRmEYjjKEnuceXrydB78eIdBvang4V2c=; b=jMnt9W/9dIf62YvP62Lfn1kKwznk3HAD4FX3p23wLdqMxvT2kkwTJTckqD/Q8p5YqS 9wqSnmINMaKkNmlzW6xD7sf3gNEzjvSPz7xRREk/DNiXUPLQV1NXAAmpIKPGSvHGeFz5 9R/vY/meTH3I4pE8+4gFSDZvoonBqxVg2nbV3odhCrOCP9FBRApT5YgE7dBYEl9Fb+z1 NWsqxzxoANdw2pU94qFkX7GOHqoFZwo3LuUU/AXnSopojnPcedRLP9QoMby95KJx8zjH Jc/67Qai2LBMSNUQGFF/oJ7q/U7263W2su+bsk+xcyPzqQ9JdF0P/hdqTrRCdd2QXKAM /ViA== X-Forwarded-Encrypted: i=1; AJvYcCV2AW9b508l+JrmSVS/odrKWfN/zQWPo4/D3ii4tLtiMNQwpKoOAaQiUUB94OCfJrfDsQVN83vf0+inPBqlw/i3qXJlLb5NnuYgUM/V X-Gm-Message-State: AOJu0YxSc3o145edV6PJNCaBUU0xahroY9prYmhSd4vQ8HYQ8YH3sLUR dWzA5Ih7pi+0nb6qRo1Qro2oxFRNo9lF0SgtM7cGJ+fSziw9x2j/U/S9WIBPKg== X-Google-Smtp-Source: AGHT+IFkwiQpPmkIhbjE6EIVr7NDSN5urKP15cf7bAX2HFwkUmXks8NU9qkevmNJ0yGvGrwYb+4/Ww== X-Received: by 2002:a0d:d851:0:b0:618:95a3:70b9 with SMTP id 00721157ae682-62cd565129cmr109244957b3.36.1718060997387; Mon, 10 Jun 2024 16:09:57 -0700 (PDT) Received: from denia.c.googlers.com (123.178.145.34.bc.googleusercontent.com. [34.145.178.123]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b06519d521sm35256946d6.65.2024.06.10.16.09.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Jun 2024 16:09:56 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 10 Jun 2024 23:09:54 +0000 Subject: [PATCH v2 3/7] media: uvcvideo: Probe the PLF characteristics Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240610-billion-v2-3-38e861475f85@chromium.org> References: <20240610-billion-v2-0-38e861475f85@chromium.org> In-Reply-To: <20240610-billion-v2-0-38e861475f85@chromium.org> To: Laurent Pinchart , Mauro Carvalho Chehab Cc: Sergey Senozhatsky , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.12.4 The UVC 1.5 standard defines 4 values for the PLF control: Off, 50Hz, 60Hz and Auto. But it does not clearly define if all the values must be implemented or not. Instead of just using the UVC version to determine what the PLF control can do, probe it. Reviewed-by: Sergey Senozhatsky Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_ctrl.c | 52 ++++++++++++++++++++++++++++++++++++= ---- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index d82cfc56dfd5..5b77ac308c84 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -495,18 +495,60 @@ static const struct uvc_control_mapping uvc_ctrl_powe= r_line_mapping_uvc15 =3D { V4L2_CID_POWER_LINE_FREQUENCY_DISABLED), }; =20 -static int __uvc_ctrl_add_mapping(struct uvc_video_chain *chain, +static int __uvc_ctrl_add_mapping_to_list(struct uvc_video_chain *chain, struct uvc_control *ctrl, const struct uvc_control_mapping *mapping); =20 static int uvc_ctrl_add_plf_mapping(struct uvc_video_chain *chain, struct uvc_control *ctrl, const struct uvc_control_mapping *mapping) { + const struct uvc_control_mapping *out_mapping =3D + &uvc_ctrl_power_line_mapping_uvc11; + u8 *buf __free(kfree) =3D NULL; + u8 init_val; + int ret; + + buf =3D kmalloc(sizeof(*buf), GFP_KERNEL); + if (!buf) + return -ENOMEM; + + /* Save the default PLF value, so we can restore it. */ + ret =3D uvc_query_ctrl(chain->dev, UVC_GET_CUR, ctrl->entity->id, + chain->dev->intfnum, ctrl->info.selector, + buf, sizeof(*buf)); + /* If we cannot read the control skip it. */ + if (ret) + return ret; + init_val =3D *buf; + + /* If PLF value cannot be set to off, it is limited. */ + *buf =3D V4L2_CID_POWER_LINE_FREQUENCY_DISABLED; + ret =3D uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id, + chain->dev->intfnum, ctrl->info.selector, + buf, sizeof(*buf)); + if (ret) + return __uvc_ctrl_add_mapping_to_list(chain, ctrl, + &uvc_ctrl_power_line_mapping_limited); + + /* UVC 1.1 does not define auto, we can exit. */ if (chain->dev->uvc_version < 0x150) - return __uvc_ctrl_add_mapping(chain, ctrl, - &uvc_ctrl_power_line_mapping_uvc11); + goto end; + + /* Check if the device supports auto. */ + *buf =3D V4L2_CID_POWER_LINE_FREQUENCY_AUTO; + ret =3D uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id, + chain->dev->intfnum, ctrl->info.selector, + buf, sizeof(*buf)); + if (!ret) + out_mapping =3D &uvc_ctrl_power_line_mapping_uvc15; + +end: + /* Restore initial value and add mapping. */ + *buf =3D init_val; + uvc_query_ctrl(chain->dev, UVC_SET_CUR, ctrl->entity->id, + chain->dev->intfnum, ctrl->info.selector, + buf, sizeof(*buf)); =20 - return __uvc_ctrl_add_mapping(chain, ctrl, - &uvc_ctrl_power_line_mapping_uvc15); + return __uvc_ctrl_add_mapping_to_list(chain, ctrl, out_mapping); } =20 static const struct uvc_control_mapping uvc_ctrl_mappings[] =3D { --=20 2.45.2.505.gda0bf45e8d-goog From nobody Fri Dec 19 18:59:24 2025 Received: from mail-oo1-f53.google.com (mail-oo1-f53.google.com [209.85.161.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 847541527A7 for ; Mon, 10 Jun 2024 23:09:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718061000; cv=none; b=rGN5USy6r4e5+w9SSsV+xA6sZZxuxH+X4r8hIjdjiekWd7Uqy4VnM4JpGRV5SntKULYZOxTVCapW8XflD6JYc0cmmwJ+5io2Y2yeS6+3zXvcEgybAYrEi0+QQ5n4DcboSzDUPf74GuYtDUkRl0+SumaLCzUF0JEFTtWdOObn0iQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718061000; c=relaxed/simple; bh=iTfdC4btNMwXyVr7bat6V5XQY3nrpXEk8t37YJiWujI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RV2nE4fVt9+WmmJ8ALjt3Y0gMHzRTrKKMgoocRb5SrMT8krEtHX8QIkdDe2nQZjj+aQeh8WiCyXg4c2KhFa2RWMcaJM/ykpTESlpzjqoNYBzdWeJ11uk0EG6HkmU6Ttq2C+aaZB7NDxlLbQ3aSb6LPSEn+X9s2olj8qULRn5qPc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=N1IFK/ip; arc=none smtp.client-ip=209.85.161.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="N1IFK/ip" Received: by mail-oo1-f53.google.com with SMTP id 006d021491bc7-5b970e90ab8so228331eaf.3 for ; Mon, 10 Jun 2024 16:09:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1718060999; x=1718665799; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=KRxFROHQ2dCXosAMLsg5w59iJitkjf3IVXz7c5nb/d0=; b=N1IFK/ipZvDThxXX6hB/DDIE2Jr3cmYqpQ2DckOfWxYHhPpIVZP5uxcBUOsWFSTR89 1ND8hSMNRQiRePyCpmfcUeMzwb3FlRbk8hpZfkTIhkLyKaIqAZCN91b8m4rYlqRKqpK9 odIVzqBCcuAzUnTAWue4gRy6p+G4wLXY0hLwc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718060999; x=1718665799; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KRxFROHQ2dCXosAMLsg5w59iJitkjf3IVXz7c5nb/d0=; b=MfTNHHgiRtW51xRufIlwBrKR0Pi25dulRA4DjNhUK5OQrySH9zA8ANmn1Ov8geNCNc RwN8uVOppv1sIW0phy0OKZ9bLjHZ/76kEbOnHz3gP8I/0/CM3K290s9RkweQ+hvrysrf 06m6BioTTAwbT3X/8Kliw0jCagX7Kr2b2HwHeM8Zums/atYJl+HVYrFQbIWDhkH+a/v9 gCE9hnmoX2Ez8h6KItytQfGOwP4+7gAOF2q7rkKyYheYNTffv38I2iVss0WAwge2DrGY kYAeRSlMRE5v9RirmotpnbbpsQ6H5cg4qIaSABAgAsdBBGWjvE9QTnbXoR9aAjZMBSuU FqNQ== X-Forwarded-Encrypted: i=1; AJvYcCXFjX5POl2GJv0jCpTc6RxFe4chuBwjjagKxk7btYI2UjCcHOuOPo0atiEF7CC8xaqE/LJvuTEQaytDHIZELM+F1xmGeUOugCwUjaBj X-Gm-Message-State: AOJu0YwtnRvm0oN0X1fCaziucpoAAIpSwq/WwoqAkoDK4+p7Fhmo4ZH/ yXG/FSwUHpWrDqwWFHueZ+h7zAtTJw7AIR3IBJm5yOfX/kAqNhLCAxEeouFqHg== X-Google-Smtp-Source: AGHT+IFmlKoKWOJj2qo73Wl0NsPia9kSU0phIwncQtRQ3A99zhJAaMJL4Mw8zF7B8tzfmU8kOru5aA== X-Received: by 2002:a05:6358:5294:b0:19f:1ce8:dc0 with SMTP id e5c5f4694b2df-19f1fe13fa9mr1605477555d.12.1718060998529; Mon, 10 Jun 2024 16:09:58 -0700 (PDT) Received: from denia.c.googlers.com (123.178.145.34.bc.googleusercontent.com. [34.145.178.123]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b06519d521sm35256946d6.65.2024.06.10.16.09.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Jun 2024 16:09:57 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 10 Jun 2024 23:09:55 +0000 Subject: [PATCH v2 4/7] media: uvcvideo: Cleanup version-specific mapping Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240610-billion-v2-4-38e861475f85@chromium.org> References: <20240610-billion-v2-0-38e861475f85@chromium.org> In-Reply-To: <20240610-billion-v2-0-38e861475f85@chromium.org> To: Laurent Pinchart , Mauro Carvalho Chehab Cc: Sergey Senozhatsky , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.12.4 We do not have more version specific mappings. Let's remove this code for now. It can be easily reverted later if needed. Reviewed-by: Laurent Pinchart Reviewed-by: Sergey Senozhatsky Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 5b77ac308c84..efc46f53ac81 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -847,14 +847,6 @@ static const struct uvc_control_mapping uvc_ctrl_mappi= ngs[] =3D { }, }; =20 -static const struct uvc_control_mapping *uvc_ctrl_mappings_uvc11[] =3D { - NULL, /* Sentinel */ -}; - -static const struct uvc_control_mapping *uvc_ctrl_mappings_uvc15[] =3D { - NULL, /* Sentinel */ -}; - /* ------------------------------------------------------------------------ * Utility functions */ @@ -2656,7 +2648,6 @@ static void uvc_ctrl_prune_entity(struct uvc_device *= dev, static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain, struct uvc_control *ctrl) { - const struct uvc_control_mapping **mappings; unsigned int i; =20 /* @@ -2721,18 +2712,6 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chai= n *chain, ctrl->info.selector =3D=3D mapping->selector) __uvc_ctrl_add_mapping(chain, ctrl, mapping); } - - /* Finally process version-specific mappings. */ - mappings =3D chain->dev->uvc_version < 0x0150 - ? uvc_ctrl_mappings_uvc11 : uvc_ctrl_mappings_uvc15; - - for (i =3D 0; mappings[i]; ++i) { - const struct uvc_control_mapping *mapping =3D mappings[i]; - - if (uvc_entity_match_guid(ctrl->entity, mapping->entity) && - ctrl->info.selector =3D=3D mapping->selector) - __uvc_ctrl_add_mapping(chain, ctrl, mapping); - } } =20 /* --=20 2.45.2.505.gda0bf45e8d-goog From nobody Fri Dec 19 18:59:24 2025 Received: from mail-oo1-f42.google.com (mail-oo1-f42.google.com [209.85.161.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F0F7153580 for ; Mon, 10 Jun 2024 23:10:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718061002; cv=none; b=InWmF3wBxnxdDlY7Zi21jVg8fk6+LotR3DN4Jh3ObCaSYQ7nWiEOsH0sZ1bqn2XL6yVE9armZ7V8noNAyrJulzRxRPr6a35OjYsw09+9ciuXqdRtD2WEabOwmp3LAe/1p4aGpx2A9tqTMrmQewQNbMz7E8whtf9NIpt2MTjgl/w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718061002; c=relaxed/simple; bh=OUIAEYxW2pt7xlzXmaotUnfEstFIYjmqTiX5MYoVVRg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SrGp2RITtPphdg93t876CTP68nuDMzZ+5YU2sPos48Vf/QnnkoQhzL/ecsM3qzYZgUNnX7pejvLSJLHDfN9RqkTv8NeeRk9ebC/PM5jGThi3vVOqLyYuEZ+Oc7wqOKu9RNv5kaFK2HY8RnhTG58y0Fqqlcx/bUPyjWdqXHCTmvo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=lcxFhA/Q; arc=none smtp.client-ip=209.85.161.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="lcxFhA/Q" Received: by mail-oo1-f42.google.com with SMTP id 006d021491bc7-5bacd59e562so1629613eaf.2 for ; Mon, 10 Jun 2024 16:10:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1718061000; x=1718665800; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=hm98dOi0/zRzUBfFNpcElUy3e9wDhIJ4KCCov/nGFTQ=; b=lcxFhA/QvMiB5odiKSNsODLs2xDUqc8EUHOGLPGoQyfuWTyCCBMuNMwdptmeaugV5j KX+yec+tggkrBjmbHtWZjMpu9xUItgo2VTgg2Nw3viO/Tsv4+fXfyNCxjclVdoIDD4xU X1jwxWszNmhW4eSIp6rn71OOf3gqpXfvna6x8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718061000; x=1718665800; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hm98dOi0/zRzUBfFNpcElUy3e9wDhIJ4KCCov/nGFTQ=; b=lYIJRvGYd7vAdPuP5FKUi0FgFAVvrghyExEovRMILxHl8Tl1Whqa8NlJDUZg9dAESI ubMix4A5nK+KRawV+7pjA3fXZ5SXHlkjtJ2j7ZTeoshWSlDZuDdAx+voDZjgxi6YmgNX +VTebhVwlIhAmf8UlaT0TaPgzbAyWOyFZwKw5QbnCB1u41z8nsc2AP5E2khv1UtWobpO vkoVtsxvhkn6LJpiTblr28QKK6zgdz/O/8HD6ccjDNz6IA74F4wc+e1A8oAxjGu4DssV MTBKW29IVTdsrYlFjbarW8jm3PF/TE/0lpF7ctVY46fEgygk+EnNyN7jsFCveImihcQr 5ECw== X-Forwarded-Encrypted: i=1; AJvYcCXZ8QbD9gklrAY1GR4ndjc4rvt2q3aXpsYKUmx8Ma4kyj0oUHToFQjEPe9bUjr1M6fmaOBlKOkFVjkkQR8OuKybcyp9HnNST6b+fM4K X-Gm-Message-State: AOJu0YzdItBqFUlENZL2OiYzx3NtKf2qaHQ+ssYA9Eb2uakyxQSPHN/2 ErFg8Rfb2BdQOpILI3LszMQDShvPF3ToKDbzDN+/XY9vjbi7Z/W3AqIjQ5+zUA== X-Google-Smtp-Source: AGHT+IEceemHixBzieP2KZfovugvjCMFKfE0k8sKaMP22e3NHBGqtiLQaG5XPws0aTira0s0kS/A3g== X-Received: by 2002:a05:6358:840b:b0:19f:5b1f:91b1 with SMTP id e5c5f4694b2df-19f5b1f9254mr115528755d.14.1718061000049; Mon, 10 Jun 2024 16:10:00 -0700 (PDT) Received: from denia.c.googlers.com (123.178.145.34.bc.googleusercontent.com. [34.145.178.123]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b06519d521sm35256946d6.65.2024.06.10.16.09.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Jun 2024 16:09:58 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 10 Jun 2024 23:09:56 +0000 Subject: [PATCH v2 5/7] media: uvcvideo: Remove PLF device quirking Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240610-billion-v2-5-38e861475f85@chromium.org> References: <20240610-billion-v2-0-38e861475f85@chromium.org> In-Reply-To: <20240610-billion-v2-0-38e861475f85@chromium.org> To: Laurent Pinchart , Mauro Carvalho Chehab Cc: Sergey Senozhatsky , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.12.4 We can use heuristics to figure out the proper range of the control instead of quirking every single device. Reviewed-by: Sergey Senozhatsky Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_ctrl.c | 4 +- drivers/media/usb/uvc/uvc_driver.c | 122 ---------------------------------= ---- drivers/media/usb/uvc/uvcvideo.h | 2 - 3 files changed, 2 insertions(+), 126 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index efc46f53ac81..d74019cb27fe 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -459,7 +459,7 @@ static void uvc_ctrl_set_rel_speed(struct uvc_control_m= apping *mapping, data[first+1] =3D min_t(int, abs(value), 0xff); } =20 -const struct uvc_control_mapping uvc_ctrl_power_line_mapping_limited =3D { +static const struct uvc_control_mapping uvc_ctrl_power_line_mapping_limite= d =3D { .id =3D V4L2_CID_POWER_LINE_FREQUENCY, .entity =3D UVC_GUID_UVC_PROCESSING, .selector =3D UVC_PU_POWER_LINE_FREQUENCY_CONTROL, @@ -471,7 +471,7 @@ const struct uvc_control_mapping uvc_ctrl_power_line_ma= pping_limited =3D { V4L2_CID_POWER_LINE_FREQUENCY_50HZ), }; =20 -const struct uvc_control_mapping uvc_ctrl_power_line_mapping_uvc11 =3D { +static const struct uvc_control_mapping uvc_ctrl_power_line_mapping_uvc11 = =3D { .id =3D V4L2_CID_POWER_LINE_FREQUENCY, .entity =3D UVC_GUID_UVC_PROCESSING, .selector =3D UVC_PU_POWER_LINE_FREQUENCY_CONTROL, diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc= _driver.c index bbd90123a4e7..5f689fee60a9 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -2383,20 +2383,6 @@ MODULE_PARM_DESC(timeout, "Streaming control request= s timeout"); * Driver initialization and cleanup */ =20 -static const struct uvc_device_info uvc_ctrl_power_line_limited =3D { - .mappings =3D (const struct uvc_control_mapping *[]) { - &uvc_ctrl_power_line_mapping_limited, - NULL, /* Sentinel */ - }, -}; - -static const struct uvc_device_info uvc_ctrl_power_line_uvc11 =3D { - .mappings =3D (const struct uvc_control_mapping *[]) { - &uvc_ctrl_power_line_mapping_uvc11, - NULL, /* Sentinel */ - }, -}; - static const struct uvc_device_info uvc_quirk_probe_minmax =3D { .quirks =3D UVC_QUIRK_PROBE_MINMAX, }; @@ -2427,33 +2413,6 @@ static const struct uvc_device_info uvc_quirk_force_= y8 =3D { * though they are compliant. */ static const struct usb_device_id uvc_ids[] =3D { - /* Quanta USB2.0 HD UVC Webcam */ - { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE - | USB_DEVICE_ID_MATCH_INT_INFO, - .idVendor =3D 0x0408, - .idProduct =3D 0x3090, - .bInterfaceClass =3D USB_CLASS_VIDEO, - .bInterfaceSubClass =3D 1, - .bInterfaceProtocol =3D 0, - .driver_info =3D (kernel_ulong_t)&uvc_ctrl_power_line_limited }, - /* Quanta USB2.0 HD UVC Webcam */ - { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE - | USB_DEVICE_ID_MATCH_INT_INFO, - .idVendor =3D 0x0408, - .idProduct =3D 0x4030, - .bInterfaceClass =3D USB_CLASS_VIDEO, - .bInterfaceSubClass =3D 1, - .bInterfaceProtocol =3D 0, - .driver_info =3D (kernel_ulong_t)&uvc_ctrl_power_line_limited }, - /* Quanta USB2.0 HD UVC Webcam */ - { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE - | USB_DEVICE_ID_MATCH_INT_INFO, - .idVendor =3D 0x0408, - .idProduct =3D 0x4034, - .bInterfaceClass =3D USB_CLASS_VIDEO, - .bInterfaceSubClass =3D 1, - .bInterfaceProtocol =3D UVC_PC_PROTOCOL_15, - .driver_info =3D (kernel_ulong_t)&uvc_ctrl_power_line_limited }, /* LogiLink Wireless Webcam */ { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -2583,42 +2542,6 @@ static const struct usb_device_id uvc_ids[] =3D { .bInterfaceSubClass =3D 1, .bInterfaceProtocol =3D 0, .driver_info =3D UVC_INFO_QUIRK(UVC_QUIRK_RESTRICT_FRAME_RATE) }, - /* Chicony EasyCamera */ - { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE - | USB_DEVICE_ID_MATCH_INT_INFO, - .idVendor =3D 0x04f2, - .idProduct =3D 0xb5eb, - .bInterfaceClass =3D USB_CLASS_VIDEO, - .bInterfaceSubClass =3D 1, - .bInterfaceProtocol =3D 0, - .driver_info =3D (kernel_ulong_t)&uvc_ctrl_power_line_limited }, - /* Chicony Electronics Co., Ltd Integrated Camera */ - { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE - | USB_DEVICE_ID_MATCH_INT_INFO, - .idVendor =3D 0x04f2, - .idProduct =3D 0xb67c, - .bInterfaceClass =3D USB_CLASS_VIDEO, - .bInterfaceSubClass =3D 1, - .bInterfaceProtocol =3D UVC_PC_PROTOCOL_15, - .driver_info =3D (kernel_ulong_t)&uvc_ctrl_power_line_uvc11 }, - /* Chicony EasyCamera */ - { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE - | USB_DEVICE_ID_MATCH_INT_INFO, - .idVendor =3D 0x04f2, - .idProduct =3D 0xb6ba, - .bInterfaceClass =3D USB_CLASS_VIDEO, - .bInterfaceSubClass =3D 1, - .bInterfaceProtocol =3D 0, - .driver_info =3D (kernel_ulong_t)&uvc_ctrl_power_line_limited }, - /* Chicony EasyCamera */ - { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE - | USB_DEVICE_ID_MATCH_INT_INFO, - .idVendor =3D 0x04f2, - .idProduct =3D 0xb746, - .bInterfaceClass =3D USB_CLASS_VIDEO, - .bInterfaceSubClass =3D 1, - .bInterfaceProtocol =3D 0, - .driver_info =3D (kernel_ulong_t)&uvc_ctrl_power_line_limited }, /* Alcor Micro AU3820 (Future Boy PC USB Webcam) */ { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, @@ -3003,51 +2926,6 @@ static const struct usb_device_id uvc_ids[] =3D { .bInterfaceSubClass =3D 1, .bInterfaceProtocol =3D 0, .driver_info =3D UVC_INFO_QUIRK(UVC_QUIRK_FORCE_BPP) }, - /* SunplusIT Inc HD Camera */ - { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE - | USB_DEVICE_ID_MATCH_INT_INFO, - .idVendor =3D 0x2b7e, - .idProduct =3D 0xb752, - .bInterfaceClass =3D USB_CLASS_VIDEO, - .bInterfaceSubClass =3D 1, - .bInterfaceProtocol =3D UVC_PC_PROTOCOL_15, - .driver_info =3D (kernel_ulong_t)&uvc_ctrl_power_line_uvc11 }, - /* Lenovo Integrated Camera */ - { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE - | USB_DEVICE_ID_MATCH_INT_INFO, - .idVendor =3D 0x30c9, - .idProduct =3D 0x0093, - .bInterfaceClass =3D USB_CLASS_VIDEO, - .bInterfaceSubClass =3D 1, - .bInterfaceProtocol =3D UVC_PC_PROTOCOL_15, - .driver_info =3D (kernel_ulong_t)&uvc_ctrl_power_line_uvc11 }, - /* Sonix Technology USB 2.0 Camera */ - { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE - | USB_DEVICE_ID_MATCH_INT_INFO, - .idVendor =3D 0x3277, - .idProduct =3D 0x0072, - .bInterfaceClass =3D USB_CLASS_VIDEO, - .bInterfaceSubClass =3D 1, - .bInterfaceProtocol =3D 0, - .driver_info =3D (kernel_ulong_t)&uvc_ctrl_power_line_limited }, - /* Acer EasyCamera */ - { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE - | USB_DEVICE_ID_MATCH_INT_INFO, - .idVendor =3D 0x5986, - .idProduct =3D 0x1172, - .bInterfaceClass =3D USB_CLASS_VIDEO, - .bInterfaceSubClass =3D 1, - .bInterfaceProtocol =3D 0, - .driver_info =3D (kernel_ulong_t)&uvc_ctrl_power_line_limited }, - /* Acer EasyCamera */ - { .match_flags =3D USB_DEVICE_ID_MATCH_DEVICE - | USB_DEVICE_ID_MATCH_INT_INFO, - .idVendor =3D 0x5986, - .idProduct =3D 0x1180, - .bInterfaceClass =3D USB_CLASS_VIDEO, - .bInterfaceSubClass =3D 1, - .bInterfaceProtocol =3D 0, - .driver_info =3D (kernel_ulong_t)&uvc_ctrl_power_line_limited }, /* Intel D410/ASR depth camera */ { .match_flags =3D 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/uvcvi= deo.h index fa0396dd5b35..4df02a40c74f 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -753,8 +753,6 @@ int uvc_status_start(struct uvc_device *dev, gfp_t flag= s); void uvc_status_stop(struct uvc_device *dev); =20 /* Controls */ -extern const struct uvc_control_mapping uvc_ctrl_power_line_mapping_limite= d; -extern const struct uvc_control_mapping uvc_ctrl_power_line_mapping_uvc11; extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops; =20 int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain, --=20 2.45.2.505.gda0bf45e8d-goog From nobody Fri Dec 19 18:59:24 2025 Received: from mail-qv1-f45.google.com (mail-qv1-f45.google.com [209.85.219.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8950315444D for ; Mon, 10 Jun 2024 23:10:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718061004; cv=none; b=fC1URtbYSxVS5XzALfwkpM3hrfb3KY2ByJC5pdBXMvDUckJH4F2Pt+MqHRRhDa+YCyzq/QYkoYN94RfV/MZ+Hbg2RPEIGqmVdpf1bOez4reFPF8WUDxYji1+Y+y7Yf58OMSyBzUEkL/GKKtRsdyP19VpwK2ohXbWIycg67BPjLI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718061004; c=relaxed/simple; bh=+r2Q25v4QtfWRynLyRqPbgCpgtuh54ubGSY1KEdbNko=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bNwvloxp9pHUGRiR2piUb9XtI3+bgNaSSRf50PlONDMqDyA1E4qa+fMJVI+94L0a+rUxPsP0efh2c+MTyQIYgOtkuLe9PlZhpMu2YYMamvGxhS9RwTLKftec21lBwljvYDXfFIdVInbdOn5lulkuXKb/HWqZP3pqENNST6T+zkA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=U26le7M2; arc=none smtp.client-ip=209.85.219.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="U26le7M2" Received: by mail-qv1-f45.google.com with SMTP id 6a1803df08f44-6b08d661dbaso230326d6.0 for ; Mon, 10 Jun 2024 16:10:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1718061001; x=1718665801; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Er/qUnS8MdBJtpjo7BWYHXnD96tca0yCRfZOovxm8nw=; b=U26le7M204F4uxJv1Q80Ygo74iSqbHJkvY7VbNyuULhMZCDOZDrAa5ljLd6G1qf1ZH jn7ZzWOKsZLChSBHgCwPoaEAEt5m2f5Dl1ND6Q75ESFdcbJl8u6SrR68kbHuPb63dO7F i16m/ODeXqLKL7SGtvKpJwrhNz7K/YBkiA+hM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718061001; x=1718665801; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Er/qUnS8MdBJtpjo7BWYHXnD96tca0yCRfZOovxm8nw=; b=ClhDQR+weRTlgSzgF7rm2EwXazeRs9IdIE2+8ZMPLCk/SbKQG4CI71G5b98O9gaIbS pVsoZ46KqC+wS8uoyst+8wM+oMmKsQv0/AdkUPiTmD8T6WD3ks+y4To6YCDvoOUrjv2p NPLyof/wbAusAQPU6VqWkYvoxVjJTi+YwI129XEHHTBXIRRTprrhdMNyxvuA1105A6AT 3rgzxP4sqcUOPkufFgB5ZUqgazWgJfCMmBHEdlcL4eIYjbC/j5Rf5f4GyOQpisWQgmGX s+M0/QWX8ZH0S6WqZaClaniS4gc+AeHYS7bcJ85N5nA57pkzQ83rsQmS7HXZz2awvn/i ZQog== X-Forwarded-Encrypted: i=1; AJvYcCX4p6zOQOwi28mLAUdtJNj+/kKRhFk4mRxtaqxoYy9NZMv5z0pvkHV1QEzHexp7735cfOrcDnkYAc15adghOGX6LbJfZBi0BGe+Po0v X-Gm-Message-State: AOJu0YysYQJ3XMFDWlnoISl2zIr0Fp7ddK/5/OWHvVvOMXOD+aC48BTI n4O+QFc0jNpgCAK55jpk23WcccsZ/Xn4OSXdmqxzuAOTut0lo4j/zdj7DEPFQgiljBCXOvlJ/tz mkan9 X-Google-Smtp-Source: AGHT+IGGVcUXF3Q+TzeoBW1dpWSX4RCelVgPbdr7LwKtNneYSQiKMiE+ovxL9rBTwMEOW02U5O75Aw== X-Received: by 2002:ad4:5747:0:b0:6ab:9214:ffd3 with SMTP id 6a1803df08f44-6b089f75071mr21382306d6.25.1718061001474; Mon, 10 Jun 2024 16:10:01 -0700 (PDT) Received: from denia.c.googlers.com (123.178.145.34.bc.googleusercontent.com. [34.145.178.123]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b06519d521sm35256946d6.65.2024.06.10.16.10.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Jun 2024 16:10:00 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 10 Jun 2024 23:09:57 +0000 Subject: [PATCH v2 6/7] media: uvcvideo: Remove mappings form uvc_device_info Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240610-billion-v2-6-38e861475f85@chromium.org> References: <20240610-billion-v2-0-38e861475f85@chromium.org> In-Reply-To: <20240610-billion-v2-0-38e861475f85@chromium.org> To: Laurent Pinchart , Mauro Carvalho Chehab Cc: Sergey Senozhatsky , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.12.4 We do not have any quirk device making us of this. Remove from now. It can be easily reverted later if needed. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 27 +-------------------------- drivers/media/usb/uvc/uvcvideo.h | 1 - 2 files changed, 1 insertion(+), 27 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index d74019cb27fe..1c1710e3c486 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -2679,32 +2679,7 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chai= n *chain, if (!ctrl->initialized) return; =20 - /* - * First check if the device provides a custom mapping for this control, - * used to override standard mappings for non-conformant devices. Don't - * process standard mappings if a custom mapping is found. This - * mechanism doesn't support combining standard and custom mappings for - * a single control. - */ - if (chain->dev->info->mappings) { - bool custom =3D false; - - for (i =3D 0; chain->dev->info->mappings[i]; ++i) { - const struct uvc_control_mapping *mapping =3D - chain->dev->info->mappings[i]; - - if (uvc_entity_match_guid(ctrl->entity, mapping->entity) && - ctrl->info.selector =3D=3D mapping->selector) { - __uvc_ctrl_add_mapping(chain, ctrl, mapping); - custom =3D true; - } - } - - if (custom) - return; - } - - /* Process common mappings next. */ + /* Process common mappings. */ for (i =3D 0; i < ARRAY_SIZE(uvc_ctrl_mappings); ++i) { const struct uvc_control_mapping *mapping =3D &uvc_ctrl_mappings[i]; =20 diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 4df02a40c74f..ff9545dcf716 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -527,7 +527,6 @@ struct uvc_device_info { u32 quirks; u32 meta_format; u16 uvc_version; - const struct uvc_control_mapping **mappings; }; =20 struct uvc_status_streaming { --=20 2.45.2.505.gda0bf45e8d-goog From nobody Fri Dec 19 18:59:24 2025 Received: from mail-oo1-f41.google.com (mail-oo1-f41.google.com [209.85.161.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C09B71552ED for ; Mon, 10 Jun 2024 23:10:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718061005; cv=none; b=g9ADe7c5X705z6guvx1z5HATRT1geEmj2G89il4aCYCFy2fzIb2HplcqmeLyeGh5qmIW0WdRTpHHNVBv0vE85TomB+DlsxBhdamBm1eHZaSSQcpf07Vi4COmTnlW+EzsAz2JI3YgG9ga3inhp059yAfhZeA7dsXgrpJijxn4seE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718061005; c=relaxed/simple; bh=3YQ1MREPZcXZY8Rzdf2ucSaUl0qgCLccvMpvwcUdRxw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=USlT3NjOg2QCN6neKDc9CUXTK62dDtrdI7sz9murW7byG0+sspuL+gr+ixVBVWMN2Uumww11kOel5owxB/YqOav1B9aBQGD70oK4q7uhKn4+yYILhj8LjP2dzAEqfejipk2pZphLp5l3h24FN5QbDAOnUpPhS4/7RzgRyggjpq0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=M7dQmIL4; arc=none smtp.client-ip=209.85.161.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="M7dQmIL4" Received: by mail-oo1-f41.google.com with SMTP id 006d021491bc7-5b9776123a3so2534303eaf.0 for ; Mon, 10 Jun 2024 16:10:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1718061003; x=1718665803; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=BOfU1pocYD2Scfhf5kButvETql9ENuAv9ka+WIo4LyM=; b=M7dQmIL40ddmTKpyo9O1PINEm/XLjvqsWwa6sqa437yr1uDbzKH0502VeC1sBoKrrC 45soHcL4ZS7jAi+ZYxxejaRiFsHMBAhCPVRTBOdqrlIBOFFpg2X2rsKckfmXNlcsmSHz sUq6qvMSu9DDYg2EIfg+MNmJb1qRV7ciX1Ce0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718061003; x=1718665803; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BOfU1pocYD2Scfhf5kButvETql9ENuAv9ka+WIo4LyM=; b=fh4Tu9/Dn2w24gUdc/b8X6pA7hQNznibWdcZ6/p8Y3L+5RpQLGccTrjsBQPoSTo76P DHUmjKF6GzO9E27JdSYI40KaIwfrT2FkGYkgTuStL6stM44sX86Gyvq8ZaFqd07c4t0x n70cX7wAdi3nt76roLFPUokgWC8BoxWcdmuBpmPcLW1kFcBGwKxI2vuiof5s5VBaVkYG TZdE1ADbQTOmJNJMA03dCm5s6prs6aTz8FYoK/zKhfUjyb839+nly1HMRq7GcZDoAoe6 gRiKzwAFWBmhUYPCdsspT/RPbQ7/tl0p5xQNv6aKU6Yym4g+waDP7qnoNUJ3ShmmCn8v Mhlw== X-Forwarded-Encrypted: i=1; AJvYcCXO8cv0mOKITlkSU7SNAd+yFU7QcfYKnBijCRkAeTw+ddXdz6voeciWi1JPvihj9Oscgv9O5MRaFTo1Id+WauRtKrgDy33us+IrW0Ct X-Gm-Message-State: AOJu0YwyccPwfbyBRIj0PlEq032UB8Gtdnhnh54cmhI0R3MeHxOadatR 3d7XT+NK1fkcPSirLMnvxjYsMl0/FgVDlx/ZnCT3674TMbkrGrukfXADrCIy3g== X-Google-Smtp-Source: AGHT+IFGj2VK+72l/JFB5SBb2/B+u/t8MIDQowXQChyupB5qIsFTtEzAdZedl985d4NSC3brJeqMYQ== X-Received: by 2002:a05:6358:57a3:b0:19f:4553:5514 with SMTP id e5c5f4694b2df-19f45535aadmr801047355d.29.1718061002738; Mon, 10 Jun 2024 16:10:02 -0700 (PDT) Received: from denia.c.googlers.com (123.178.145.34.bc.googleusercontent.com. [34.145.178.123]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b06519d521sm35256946d6.65.2024.06.10.16.10.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Jun 2024 16:10:01 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 10 Jun 2024 23:09:58 +0000 Subject: [PATCH v2 7/7] media: uvcvideo: Replace get_mapping with filter_mapping Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240610-billion-v2-7-38e861475f85@chromium.org> References: <20240610-billion-v2-0-38e861475f85@chromium.org> In-Reply-To: <20240610-billion-v2-0-38e861475f85@chromium.org> To: Laurent Pinchart , Mauro Carvalho Chehab Cc: Sergey Senozhatsky , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.12.4 If the callback returns a mapping instead of adding it, the codeflow is more clean and we do not need a forward declaration of __uvc_ctrl_add_mapping_to_list(). Suggested-by: Laurent Pinchart Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 40 ++++++++++++++++++------------------= ---- drivers/media/usb/uvc/uvcvideo.h | 6 +++--- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 1c1710e3c486..4a13f2685d9e 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -495,11 +495,8 @@ static const struct uvc_control_mapping uvc_ctrl_power= _line_mapping_uvc15 =3D { V4L2_CID_POWER_LINE_FREQUENCY_DISABLED), }; =20 -static int __uvc_ctrl_add_mapping_to_list(struct uvc_video_chain *chain, - struct uvc_control *ctrl, const struct uvc_control_mapping *mapping); - -static int uvc_ctrl_add_plf_mapping(struct uvc_video_chain *chain, - struct uvc_control *ctrl, const struct uvc_control_mapping *mapping) +static const struct uvc_control_mapping *uvc_ctrl_filter_plf_mapping + (struct uvc_video_chain *chain, struct uvc_control *ctrl) { const struct uvc_control_mapping *out_mapping =3D &uvc_ctrl_power_line_mapping_uvc11; @@ -509,7 +506,7 @@ static int uvc_ctrl_add_plf_mapping(struct uvc_video_ch= ain *chain, =20 buf =3D kmalloc(sizeof(*buf), GFP_KERNEL); if (!buf) - return -ENOMEM; + return NULL; =20 /* Save the default PLF value, so we can restore it. */ ret =3D uvc_query_ctrl(chain->dev, UVC_GET_CUR, ctrl->entity->id, @@ -517,7 +514,7 @@ static int uvc_ctrl_add_plf_mapping(struct uvc_video_ch= ain *chain, buf, sizeof(*buf)); /* If we cannot read the control skip it. */ if (ret) - return ret; + return NULL; init_val =3D *buf; =20 /* If PLF value cannot be set to off, it is limited. */ @@ -526,8 +523,7 @@ static int uvc_ctrl_add_plf_mapping(struct uvc_video_ch= ain *chain, chain->dev->intfnum, ctrl->info.selector, buf, sizeof(*buf)); if (ret) - return __uvc_ctrl_add_mapping_to_list(chain, ctrl, - &uvc_ctrl_power_line_mapping_limited); + return &uvc_ctrl_power_line_mapping_limited; =20 /* UVC 1.1 does not define auto, we can exit. */ if (chain->dev->uvc_version < 0x150) @@ -548,7 +544,7 @@ static int uvc_ctrl_add_plf_mapping(struct uvc_video_ch= ain *chain, chain->dev->intfnum, ctrl->info.selector, buf, sizeof(*buf)); =20 - return __uvc_ctrl_add_mapping_to_list(chain, ctrl, out_mapping); + return out_mapping; } =20 static const struct uvc_control_mapping uvc_ctrl_mappings[] =3D { @@ -843,7 +839,7 @@ static const struct uvc_control_mapping uvc_ctrl_mappin= gs[] =3D { { .entity =3D UVC_GUID_UVC_PROCESSING, .selector =3D UVC_PU_POWER_LINE_FREQUENCY_CONTROL, - .add_mapping =3D uvc_ctrl_add_plf_mapping, + .filter_mapping =3D uvc_ctrl_filter_plf_mapping, }, }; =20 @@ -2411,8 +2407,9 @@ static int uvc_ctrl_add_info(struct uvc_device *dev, = struct uvc_control *ctrl, /* * Add a control mapping to a given control. */ -static int __uvc_ctrl_add_mapping_to_list(struct uvc_video_chain *chain, - struct uvc_control *ctrl, const struct uvc_control_mapping *mapping) +static int __uvc_ctrl_add_mapping(struct uvc_video_chain *chain, + struct uvc_control *ctrl, + const struct uvc_control_mapping *mapping) { struct uvc_control_mapping *map; unsigned int size; @@ -2485,14 +2482,6 @@ static int __uvc_ctrl_add_mapping_to_list(struct uvc= _video_chain *chain, return -ENOMEM; } =20 -static int __uvc_ctrl_add_mapping(struct uvc_video_chain *chain, - struct uvc_control *ctrl, const struct uvc_control_mapping *mapping) -{ - if (mapping && mapping->add_mapping) - return mapping->add_mapping(chain, ctrl, mapping); - return __uvc_ctrl_add_mapping_to_list(chain, ctrl, mapping); -} - int uvc_ctrl_add_mapping(struct uvc_video_chain *chain, const struct uvc_control_mapping *mapping) { @@ -2681,7 +2670,14 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chai= n *chain, =20 /* Process common mappings. */ for (i =3D 0; i < ARRAY_SIZE(uvc_ctrl_mappings); ++i) { - const struct uvc_control_mapping *mapping =3D &uvc_ctrl_mappings[i]; + const struct uvc_control_mapping *mapping =3D NULL; + + /* Try to get a custom mapping from the device. */ + if (uvc_ctrl_mappings[i].filter_mapping) + mapping =3D uvc_ctrl_mappings[i].filter_mapping(chain, + ctrl); + if (!mapping) + mapping =3D &uvc_ctrl_mappings[i]; =20 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) && ctrl->info.selector =3D=3D mapping->selector) diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index ff9545dcf716..a9547795fe22 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -125,9 +125,9 @@ struct uvc_control_mapping { s32 master_manual; u32 slave_ids[2]; =20 - int (*add_mapping)(struct uvc_video_chain *chain, - struct uvc_control *ctrl, - const struct uvc_control_mapping *mapping); + const struct uvc_control_mapping *(*filter_mapping) + (struct uvc_video_chain *chain, + struct uvc_control *ctrl); s32 (*get)(struct uvc_control_mapping *mapping, u8 query, const u8 *data); void (*set)(struct uvc_control_mapping *mapping, s32 value, --=20 2.45.2.505.gda0bf45e8d-goog