From nobody Fri Dec 19 20:34:59 2025 Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) (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 D2C0C5F876 for ; Mon, 18 Mar 2024 23:55:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710806135; cv=none; b=WhmxKzOkz7uf4HizuQniul9v9lfBbxD8Z9m22p65SawszFD8+Oi5mmUAUflo1qxF1tuM/mB/kuGoy4HXK01Xz5iB/6TYO9azrVbaZgzfbNvF6+3QBtW1Ezn3Ey9MB1HXysuVI3POahZqldDFzQLr1gFYsWHGtZKPOB81FB5/Xtw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710806135; c=relaxed/simple; bh=rowtwgwTzTc2/qlsuivkpFe9gApODrL9SLk4LA5CMVA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=m7RGLlJ5vYhFJAmgb6A91zBR/KffRXt2M1UXPx55WnWeCMdwYAwMOp4qHLQ9sF2wpWbwxr5zxcM1l4ICDHdJYC2PDr3r8QjNeSE6GbRmsvwG+mW4Vch+GYLmDTt6S8aw9johYRUH9EeQepl34ScMB0yMEkPyzj7b7/Bs5PXRIPw= 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=eqgB+gtF; arc=none smtp.client-ip=209.85.222.182 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="eqgB+gtF" Received: by mail-qk1-f182.google.com with SMTP id af79cd13be357-78a0ab10316so83589585a.0 for ; Mon, 18 Mar 2024 16:55:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1710806132; x=1711410932; 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=jncCK9aTJnH9oQYheR4m1KC9owq0XH6MuF35O7AIQjE=; b=eqgB+gtFFx2gq3JHR2O9FZIj0vY7Mc3Km8Ef8slS7Z9afMVY5v2n10DtT5DqPiNTXn tm6oKKrA1QeDouE4ashrSGohrZXik2bnEcQi5HNDtxjV+HWTMhzsCTXyyU09uWh5Kdts 2u/JqHQ5ueWDw22hi9lWtWGJXub/fp767zq7w= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710806132; x=1711410932; 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=jncCK9aTJnH9oQYheR4m1KC9owq0XH6MuF35O7AIQjE=; b=xKMoBK88ovR3nrVD2U1HJ6gFQolnPGnYpTO7UGQLH2KaI4SASD8nVfU3NMgckewW+j 9UMcDBmkPDHSAW8FIBGW6gZBWYwYR3B45Zcj2HZwl54hgTs5MlAAYUtg25HaYkaeB1Bv SKQ3Kyt7SVKCA6XTBMYphanlculUI3Vm7wXS3Rs4jC0EHi4J5DCKWZYqOXv2eNhGv0Fn /kTFTBi9d5r1sT+zQRikUGF3twq2GIRs1AZwXXqy+PAol7FXlEo8evPYIKIOuhANR5dT mUWkSfBUNA9rHYsxusPIlSfHK5htbpiYTcs0B1BUK0x0roSRLC2XgeNO1TqyK8/8kj72 XjsA== X-Forwarded-Encrypted: i=1; AJvYcCWi/ghP7GTPzF2023f6ljv0E9CBM/Ru2qJRSWybDFN8H35/8ahwf1OQo2FTeiKcQV7AOGG6S1NnZVZ/c5mBCWMEslb3Zd3vEv1WMQDw X-Gm-Message-State: AOJu0YxfwjGLqdNRU6Mm+OEhb33DKGk13yD0b41o8K8HzR0Qe2Cqojsv vRGAJ2OA6/33kd/Hq0KYycxqjsa5hmkopuRlGiRNfrl3ahb4d00g7yYpXxNiD98Wm4qfpZ0ecm9 cXg== X-Google-Smtp-Source: AGHT+IHeJjk+X8VL/kQzFnMLRimmoKUCR3xzZLlpLovHDemxVv6glcUkJy2psvzsXL54QGoJkWlqRg== X-Received: by 2002:a05:620a:2714:b0:787:4148:f6e3 with SMTP id b20-20020a05620a271400b007874148f6e3mr1868765qkp.37.1710806132048; Mon, 18 Mar 2024 16:55:32 -0700 (PDT) Received: from denia.c.googlers.com (188.173.86.34.bc.googleusercontent.com. [34.86.173.188]) by smtp.gmail.com with ESMTPSA id h15-20020ae9ec0f000000b00787930320b6sm4991690qkg.70.2024.03.18.16.55.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 16:55:31 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 18 Mar 2024 23:55:23 +0000 Subject: [PATCH 1/5] 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: <20240318-billion-v1-1-2f7bc0ee2030@chromium.org> References: <20240318-billion-v1-0-2f7bc0ee2030@chromium.org> In-Reply-To: <20240318-billion-v1-0-2f7bc0ee2030@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. Lets create a new callback function where heuristics can be implemented to detect what is implemented and what not. Signed-off-by: Ricardo Ribalda Reviewed-by: Sergey Senozhatsky --- drivers/media/usb/uvc/uvc_ctrl.c | 15 ++++++++-- drivers/media/usb/uvc/uvcvideo.h | 59 +++++++++++++++++++++---------------= ---- 2 files changed, 43 insertions(+), 31 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index e59a463c27618..3e939b4fbaaaf 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -2434,6 +2434,14 @@ static int __uvc_ctrl_add_mapping(struct uvc_video_c= hain *chain, return -ENOMEM; } =20 +static int __uvc_ctrl_add_custom_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(chain, ctrl, mapping); +} + int uvc_ctrl_add_mapping(struct uvc_video_chain *chain, const struct uvc_control_mapping *mapping) { @@ -2637,7 +2645,8 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chain= *chain, =20 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) && ctrl->info.selector =3D=3D mapping->selector) { - __uvc_ctrl_add_mapping(chain, ctrl, mapping); + __uvc_ctrl_add_custom_mapping(chain, ctrl, + mapping); custom =3D true; } } @@ -2652,7 +2661,7 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chain= *chain, =20 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) && ctrl->info.selector =3D=3D mapping->selector) - __uvc_ctrl_add_mapping(chain, ctrl, mapping); + __uvc_ctrl_add_custom_mapping(chain, ctrl, mapping); } =20 /* Finally process version-specific mappings. */ @@ -2664,7 +2673,7 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chain= *chain, =20 if (uvc_entity_match_guid(ctrl->entity, mapping->entity) && ctrl->info.selector =3D=3D mapping->selector) - __uvc_ctrl_add_mapping(chain, ctrl, mapping); + __uvc_ctrl_add_custom_mapping(chain, ctrl, mapping); } } =20 diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 6fb0a78b1b009..611350a82c37f 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -101,34 +101,6 @@ struct uvc_control_info { u32 flags; }; =20 -struct uvc_control_mapping { - struct list_head list; - struct list_head ev_subs; - - u32 id; - char *name; - u8 entity[16]; - u8 selector; - - u8 size; - u8 offset; - enum v4l2_ctrl_type v4l2_type; - u32 data_type; - - const u32 *menu_mapping; - const char (*menu_names)[UVC_MENU_NAME_LEN]; - unsigned long menu_mask; - - u32 master_id; - s32 master_manual; - u32 slave_ids[2]; - - s32 (*get)(struct uvc_control_mapping *mapping, u8 query, - const u8 *data); - void (*set)(struct uvc_control_mapping *mapping, s32 value, - u8 *data); -}; - struct uvc_control { struct uvc_entity *entity; struct uvc_control_info info; @@ -336,6 +308,37 @@ struct uvc_video_chain { u8 ctrl_class_bitmap; /* Bitmap of valid classes */ }; =20 +struct uvc_control_mapping { + struct list_head list; + struct list_head ev_subs; + + u32 id; + char *name; + u8 entity[16]; + u8 selector; + + u8 size; + u8 offset; + enum v4l2_ctrl_type v4l2_type; + u32 data_type; + + const u32 *menu_mapping; + const char (*menu_names)[UVC_MENU_NAME_LEN]; + unsigned long menu_mask; + + u32 master_id; + s32 master_manual; + u32 slave_ids[2]; + + 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, + u8 *data); +}; + struct uvc_stats_frame { unsigned int size; /* Number of bytes captured */ unsigned int first_data; /* Index of the first non-empty packet */ --=20 2.44.0.291.gc1ea87d7ee-goog From nobody Fri Dec 19 20:34:59 2025 Received: from mail-qk1-f175.google.com (mail-qk1-f175.google.com [209.85.222.175]) (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 D4E245FB88 for ; Mon, 18 Mar 2024 23:55:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710806136; cv=none; b=Di/SKy/drqvs/So3K0sM/+4sVnCNBgRilqmfvceM1KcK0yKuOBI68slegTCkVuOfKEsry61ajpux3DbXBhLiJEUG+KU8GW3gWU7iC27M4wf0OnU4F7XDAgk+Xnp3diuGz3SqO3SfmX75FTNPJ3N96BUAGNBBzZmL7p2/CDaWFkg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710806136; c=relaxed/simple; bh=zBECVF9sz72SkafC2kf8Npmyir5v2S+2KXe7owaPEq4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JPH9PizPZMmhP1sqew2ugWfJ5uytWc42eb/VyuSWxT20lR4R7tTFig/frNmj0lyhj4bh2rjl8tEWh0MKMzn4qjmff5BVQVOAjELZs95UZ1gztuS/nKHviAgS/r7Q1YjzEJtyEkD5IOlhDdJ2ON8wjkpOYUfBeV9LoPNQ2SKTBEQ= 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=dRUlpozA; arc=none smtp.client-ip=209.85.222.175 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="dRUlpozA" Received: by mail-qk1-f175.google.com with SMTP id af79cd13be357-789e70d7c07so213203385a.1 for ; Mon, 18 Mar 2024 16:55:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1710806133; x=1711410933; 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=H7pU/Vvhg3ZPRZ+PwIWA3KmscAs2Y8vnY/vfNGY6VG8=; b=dRUlpozAU9t4TdVJVAgq5f0VYUP23f2G4umZCzBUQ7N9bGHA4ftYaYud1ssD7U2BoJ EZCGLcMfau5yBXzk2o9njOpZt5nnbjI6eK/Tf8enD1U+S6I15Z4Jzy4FPQUS2hlm5oot H0BCFJrJnHVFCF884Vn5yNWXImN7oizO8xuaQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710806133; x=1711410933; 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=H7pU/Vvhg3ZPRZ+PwIWA3KmscAs2Y8vnY/vfNGY6VG8=; b=axzpvFGLGRFnot2eG17x4PpUDqhb1I+dL0PBsBt1jvrmfu3RRI2JeZXhLOgSqRoRsj ZPcxqbSQXPR2J63BEu5Gqoou9wcXSLKYZyPfPvWbeG5ClgmYZbOrovsJxZi7S5FGdahM z0fyyFnXD7gzjpSNS4hJlbxFVzd+ByeG/ANVpwhT2QlvoTVoWmJmNboHm+GJWxmTdhdf ZqHcsjKgwGdE/Y2aBX3QMXn51nFCgaVfWqDhbSGB7ahte9NPJz2CfG4epUj+nD9j1m5j /JDilKlMVA5sblWVhbgYJhx+bsfLl0CvXUeSlJquZqtljJyhe82NWAD5PzzHMBHd3fs+ ojDQ== X-Forwarded-Encrypted: i=1; AJvYcCVXVja7fHXfPGRKF9igj6wTQquMth8n/GuMhIAsoRuq3UlzLtrukz2JFlxSQmU9wbOEAT+UymtKhjn7ikUbANlA4RgsjPb6/bjVuNZO X-Gm-Message-State: AOJu0YyjlnN5pxBSpNNF/VK5yWrDmZ40gw1r5GZaMpT3bVE9hRMBNULs 2zYV19vJwnm7ogJ0ank+nFqUl6yRtUdjBynxu/7mVEg1fymgM6MKEfIUTy70UtGgRKo1QTtNsvJ /iQ== X-Google-Smtp-Source: AGHT+IFjPCdhiePVVPLNrBIQ/vTLljDrOjwCXunGHDBXceN2AmMeQKPx2eOYrD0GrMNGPL7a3KIZ5g== X-Received: by 2002:a05:620a:47aa:b0:788:264a:73c2 with SMTP id dt42-20020a05620a47aa00b00788264a73c2mr16845115qkb.39.1710806133219; Mon, 18 Mar 2024 16:55:33 -0700 (PDT) Received: from denia.c.googlers.com (188.173.86.34.bc.googleusercontent.com. [34.86.173.188]) by smtp.gmail.com with ESMTPSA id h15-20020ae9ec0f000000b00787930320b6sm4991690qkg.70.2024.03.18.16.55.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 16:55:32 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 18 Mar 2024 23:55:24 +0000 Subject: [PATCH 2/5] 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: <20240318-billion-v1-2-2f7bc0ee2030@chromium.org> References: <20240318-billion-v1-0-2f7bc0ee2030@chromium.org> In-Reply-To: <20240318-billion-v1-0-2f7bc0ee2030@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. Signed-off-by: Ricardo Ribalda Reviewed-by: Sergey Senozhatsky --- 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 3e939b4fbaaaf..67522143c6c85 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.44.0.291.gc1ea87d7ee-goog From nobody Fri Dec 19 20:34:59 2025 Received: from mail-ot1-f47.google.com (mail-ot1-f47.google.com [209.85.210.47]) (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 863295FB98 for ; Mon, 18 Mar 2024 23:55:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710806137; cv=none; b=fhogvVv6IcxJveYAtdXxJ6OlTYboY2OnMhYntZuQlx99ZS8EmNpEmoVvcFcfk6S/XUnkNM8Ex6YMbKtzxwPqY65JHmYGoN8dH6lMKVVWQ4e5BZ9sYSQMU8y30pf8Z98NAd5Z6vX67pvQo3SGXcv6lfBt6eEFp/4IofcpSsOZCxs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710806137; c=relaxed/simple; bh=JgStlDiQfZLuPMGKv3DaZ3yiTPKdweveDZLgce6gw7s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=I8C1ApFPFgSl6Es+llj4EeDiot/UhjggsEu4+LK6Q7hud/RYfjAJXcf4LNrC7bv+C3rjGJ1L4R7vKVEtgL/O8nbo+gBS83sdJbwDJ2ZwLJzwL2jtXzdXOsbZBKhp6/qua1woDCrr4oa031qmKzh8BsILsE8hQ5UUFdRosXESDNo= 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=ev+nXVVz; arc=none smtp.client-ip=209.85.210.47 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="ev+nXVVz" Received: by mail-ot1-f47.google.com with SMTP id 46e09a7af769-6e68d358974so869367a34.3 for ; Mon, 18 Mar 2024 16:55:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1710806134; x=1711410934; 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=DDfVk65v2Kryzs73ZS+XanGLJ5n6XE9OWpKXOA8TdPw=; b=ev+nXVVzTPd/3nEetP3ZhvnCUHQAhlGmv+3MAhk9YytQjQ6+7uXzT6frrUZvjiGPak 9405pCEeFiyxOnFL05vsE1MayZUKqGw8vpUIbTtyO24LKaZLxi1nDo/xbSq/nRKH0gvo tdEgN+3WgnVGo6lpwR2dWWVtPne/bCPS2UOz4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710806134; x=1711410934; 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=DDfVk65v2Kryzs73ZS+XanGLJ5n6XE9OWpKXOA8TdPw=; b=UoVMrSaKUfaISHTqQmCpzBJEGVlrfDrwU8YtubVn88yHq+0WVlXg2GGYie5rtPlG01 WbFUmDLuPwPwqFwZ5nPkyjDqF470ck0mM1Md7FkEIthntraB7/iTcAiVQNO/IYk9hzxL ST8a/G3JB7peCUfmc3V+1MQ/bKsWt1Wpv07cE73+NOZPNr0iWxu7y7G8obVcBubPu+Cd 2CHqkMHGIuIXPTU+NveMs/8OdBpXyGnPTx9SmPssP82MwxcO/DSEjQ1UO/EOwNWNd/4f 3vl8NJZVnrWE6XSAxeSpSAyzenPUXiarxejYEi3U/cAxFjT91N3o45qRuQg8DiWpKpCK L9dw== X-Forwarded-Encrypted: i=1; AJvYcCXIYDEiw50VDRI3L7HlxIV+VHmWEiZ1h2cWADgNQQ3lpxJeSMk9sq7VeiX5lCP7mTEPGqExFtXq1bOopSR1yQAymMZdkXUwrKHbMitk X-Gm-Message-State: AOJu0Yx5r0Lbrn2CPnnrsctHv+el/Z6KPDYaIN+xabsYCtFOCmP5i6yb uenekSf75BQ3w7vhq2Qb1qZt2rUVImEcDQA6+7XC/PQZU8Tb9udwhK/U6C3O7Zrzds7yEKwsuEW SAg== X-Google-Smtp-Source: AGHT+IEqw3Om+E+WiBkhsreCuDRwhJ/oxsIj60O1ACXBKx8LGEyOak5+XpYIUJJs1nAgbFDiD6agAw== X-Received: by 2002:a9d:65d2:0:b0:6e6:7dde:d048 with SMTP id z18-20020a9d65d2000000b006e67dded048mr11309934oth.15.1710806134300; Mon, 18 Mar 2024 16:55:34 -0700 (PDT) Received: from denia.c.googlers.com (188.173.86.34.bc.googleusercontent.com. [34.86.173.188]) by smtp.gmail.com with ESMTPSA id h15-20020ae9ec0f000000b00787930320b6sm4991690qkg.70.2024.03.18.16.55.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 16:55:33 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 18 Mar 2024 23:55:25 +0000 Subject: [PATCH 3/5] 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: <20240318-billion-v1-3-2f7bc0ee2030@chromium.org> References: <20240318-billion-v1-0-2f7bc0ee2030@chromium.org> In-Reply-To: <20240318-billion-v1-0-2f7bc0ee2030@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. Signed-off-by: Ricardo Ribalda Reviewed-by: Sergey Senozhatsky --- drivers/media/usb/uvc/uvc_ctrl.c | 54 ++++++++++++++++++++++++++++++++++++= +--- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 67522143c6c85..9a0b81aca30d1 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -501,12 +501,58 @@ static int __uvc_ctrl_add_mapping(struct uvc_video_ch= ain *chain, 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 init_val; + u8 *buf; + 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) { + kfree(buf); + 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) { + out_mapping =3D &uvc_ctrl_power_line_mapping_limited; + goto end; + } + + /* 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); + kfree(buf); + return __uvc_ctrl_add_mapping(chain, ctrl, out_mapping); } =20 static const struct uvc_control_mapping uvc_ctrl_mappings[] =3D { --=20 2.44.0.291.gc1ea87d7ee-goog From nobody Fri Dec 19 20:34:59 2025 Received: from mail-ot1-f47.google.com (mail-ot1-f47.google.com [209.85.210.47]) (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 937825FBB1 for ; Mon, 18 Mar 2024 23:55:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710806138; cv=none; b=aJeFwsZCU9zn4KMIM0V6b8HHLBq8ql8iBftkA/rbtyWMHq/558n2j06gJFbcaErk3ub2UWiq62WY1X0OvCMP2WoGrdS+8iEBka9RwXWS0d6YkhG+v03Bl+Tf2hVRNHlkbHM5t4B0HPcCDx2t+Mfw7KWhxeQNWcJGQ7JgJ80J8M8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710806138; c=relaxed/simple; bh=RsdInsKRFjFPeria6YprFZPQUFBlBulfguGTv/hRZ1g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YQ58AsjHJyA7Scf8piq+T7IV5KSe6PpkqxaO5xLR5Kidhajwsm0KDCiFSjkoJWo3k5mAGm7rJCPvJ6FgnIeyHdEDxptnc1yT6ce4rTNESh5xCc6hmyWlT45Fh+wtoxykixozUl02GzkJX0+PFwrIgCxtZvmIvaU5LU+jBdPVuJ0= 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=EVd9vVLB; arc=none smtp.client-ip=209.85.210.47 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="EVd9vVLB" Received: by mail-ot1-f47.google.com with SMTP id 46e09a7af769-6e67cf739d0so2131531a34.1 for ; Mon, 18 Mar 2024 16:55:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1710806135; x=1711410935; 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=zp7PBpqLGtiHuxscR4MF6KkBApKCYsHGzqcNSer1N74=; b=EVd9vVLB2cENY3Pesh2lL4O+CK66/vBx6go/d5Zr+120DXmGAxj4lfBqbntQlZo7QE hh31GXxK99TCPMk5H9nAL9ZP2wETMSlsHbjlFcxu+tK+sLPSSDIm6t7dLweaJ6V2i9i9 2tjDbb1JroiyuAOu+afR0h8ZwTf7ujH3YU+7Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710806135; x=1711410935; 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=zp7PBpqLGtiHuxscR4MF6KkBApKCYsHGzqcNSer1N74=; b=pM8B5IRHhch3BENuKVcU1Pu+PAr+7l8RExrLui3J2CfH5oVGkKdqBpBZdR57y72SbH CfVB3DxT/px+lB3fFlFyK6XpO5shkaSbbVfIPSiDBCA7/1KIv2UG1BJ4jO0WM2gjOk0Y CglkJtw0PFV6UCiBI5GEU7+k5Uy5w1UrPK//1COjwzlqXkfT9xU3814xw2dssoAuPiKt x8e7/IgUCxgEyaB7IUFYaKSb8qmCw3j+VgvKkor9R/g9gPxg1Ft+Bq4tz36y3o8tDsO2 j199Lm4dFU8N6gX/9fJq4fYXZXZjuFhlnslzVVHzc1L8nwrew9+XCViUk05kIN5bKyKh K2aw== X-Forwarded-Encrypted: i=1; AJvYcCUxANlRA2BbUlaltCKUNpG3S4/BnaJkmAPe71F9VXAmvMMUyvz87vvvvEEPqzfkN4i+n+0CCx3uYiaQdVP1xv1eSYYWYVYoSpxbw9Lk X-Gm-Message-State: AOJu0YxiS9qM/IZaAEu5EYl+t+758W7cYASLMxkHd5u9hMVNq1QuwCf7 D6oX7qgZ0zwujB3LeFXTN0glJvjPnd9KwgAgCRQ4zqDAg3j8nSG2+kJW9ATlQx8yH4Ejsv8UpU7 6vg== X-Google-Smtp-Source: AGHT+IGrUiFb9DP1hUk66/tEb1lXZjM4msiRZHH9Q61RHuQ1IhIkA3/IUKJ/6Fgiej0iK+12KRDq3w== X-Received: by 2002:a9d:68c7:0:b0:6e6:7b62:3028 with SMTP id i7-20020a9d68c7000000b006e67b623028mr10352580oto.36.1710806135001; Mon, 18 Mar 2024 16:55:35 -0700 (PDT) Received: from denia.c.googlers.com (188.173.86.34.bc.googleusercontent.com. [34.86.173.188]) by smtp.gmail.com with ESMTPSA id h15-20020ae9ec0f000000b00787930320b6sm4991690qkg.70.2024.03.18.16.55.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 16:55:34 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 18 Mar 2024 23:55:26 +0000 Subject: [PATCH 4/5] 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: <20240318-billion-v1-4-2f7bc0ee2030@chromium.org> References: <20240318-billion-v1-0-2f7bc0ee2030@chromium.org> In-Reply-To: <20240318-billion-v1-0-2f7bc0ee2030@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. Signed-off-by: Ricardo Ribalda Reviewed-by: Laurent Pinchart Reviewed-by: Sergey Senozhatsky --- 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 9a0b81aca30d1..41578ded1174e 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -851,14 +851,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 */ @@ -2660,7 +2652,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 /* @@ -2726,18 +2717,6 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chai= n *chain, ctrl->info.selector =3D=3D mapping->selector) __uvc_ctrl_add_custom_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_custom_mapping(chain, ctrl, mapping); - } } =20 /* --=20 2.44.0.291.gc1ea87d7ee-goog From nobody Fri Dec 19 20:34:59 2025 Received: from mail-vs1-f45.google.com (mail-vs1-f45.google.com [209.85.217.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 9AC3C5FDC9 for ; Mon, 18 Mar 2024 23:55:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710806139; cv=none; b=nhJpFGNGbdjEtk913O9gKag6yYxSSwWiQektzhPSYl3QSndNI6J7i090cIlZwj1YlCNDFOPDuuCMCkcx2v/U0fAGpUp7v2oosHYCGzwG6W7WID3QduXpDJKx5eq8Ja1HRhx7GdWmUVAiKIDVd4Abz/QJ/Em43wNGV9u9M4ciTxU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710806139; c=relaxed/simple; bh=GiL+LY/p8pfW4zfMJcj2rtwh2jcG/Fnaf75jG+Q9ISo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BYF3NGfn+wlf1xOIpBqv+qM+QxSwegNyLPiwMTF7JAtdWLPyJM+GnqMKOndsZDjbAWNfDwsssfev8faWxPDPGlC/9hplD5x8zT1U0bvYjY74rVQcfxmO56mrcFEQfHF/jFUIoGfP6kIBB1AJIyYamXSbybSAZj89hdT0APRep5o= 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=JC9Dt8oD; arc=none smtp.client-ip=209.85.217.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="JC9Dt8oD" Received: by mail-vs1-f45.google.com with SMTP id ada2fe7eead31-4766e56ccccso1484161137.0 for ; Mon, 18 Mar 2024 16:55:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1710806136; x=1711410936; 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=Z6pBQRCTkt0thzPciZm+J+ubbehmNUxiTZuEht3ecr8=; b=JC9Dt8oDuQ5DGfl9SBDV4syZLlNwld2gHA7HGlhJS1cCPCPWOSmv9MOE4cY5iBbWS9 5j0/lfeiK7ZhtcvsBXfX65upehxIQ68524wyLxzzOD+PwsfXb9nVTS80pwVjqAoVjoGa hY58oiVUy5BrjqSK0WB9w9nFR1+FOnl3fM0fk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710806136; x=1711410936; 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=Z6pBQRCTkt0thzPciZm+J+ubbehmNUxiTZuEht3ecr8=; b=jmlPJMBc+mx07DMuHl9qy017DrN4AXxMNNJ1Jq01lc8kXvo+5srLQ2Pfunh+cr1ri/ LWVyAskhFQHbgUaaxmux8JZUgOab70eXGErgnnWcZrhTWcjj3TW+JU/+JQlEQ/xHgr3M GJR+gvWTFc3/vHLqhPpKIUQ2WUVGrNEORG1cfzo66TrccsXbu8Z8Td19cQv9Ycnn0nmB O5xtL0wWxIZkfs3PKMzzZSyea2Zfq95WhehdJphM+PiQIxq3MFe++GqHUCOa5c49DaUx +lYfWNQnOlwykbmH/6tdFrjXEGiJBSDPgTuMUeJvf68/1sa0I90rADux7TvLd0BIwTx5 IMrw== X-Forwarded-Encrypted: i=1; AJvYcCVPUhOItk54wtnkbp2txEh4RXrvxVBvkDUuFI+kNvo0N2FpWCLeDxeRpOHUh2Y+Wv6VF1lRh7Qc/+Do46wzp11EyTtUfVE0GwRZ0rT8 X-Gm-Message-State: AOJu0YxwYqQAKcaDaEQFKMz5bFwJfgqskur4NEqnv+hyPrhavJcYE+sd SuReUT+r7NH+HtygpmO7CUVTtgsEsLuBqcMKwr6XweZTrUwDivY6+VHqgBGn4khnhS2ZU6t31Gv kJQ== X-Google-Smtp-Source: AGHT+IFBabBj+6xRu60riOc9EQF1MmElf0xBgwYMRJnZti1Q2kw6Mf8MiniTK/5OOo99/XzpC649HQ== X-Received: by 2002:a05:6102:34ef:b0:474:cb60:cf3d with SMTP id bi15-20020a05610234ef00b00474cb60cf3dmr844617vsb.9.1710806136048; Mon, 18 Mar 2024 16:55:36 -0700 (PDT) Received: from denia.c.googlers.com (188.173.86.34.bc.googleusercontent.com. [34.86.173.188]) by smtp.gmail.com with ESMTPSA id h15-20020ae9ec0f000000b00787930320b6sm4991690qkg.70.2024.03.18.16.55.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 16:55:35 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 18 Mar 2024 23:55:27 +0000 Subject: [PATCH 5/5] 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: <20240318-billion-v1-5-2f7bc0ee2030@chromium.org> References: <20240318-billion-v1-0-2f7bc0ee2030@chromium.org> In-Reply-To: <20240318-billion-v1-0-2f7bc0ee2030@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. Signed-off-by: Ricardo Ribalda Reviewed-by: Sergey Senozhatsky --- 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 41578ded1174e..11ba1e8ee25b8 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 bbd90123a4e76..5f689fee60a9e 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 611350a82c37f..896bb7362fa27 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -751,8 +751,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.44.0.291.gc1ea87d7ee-goog