From nobody Sat Oct 4 08:03:30 2025 Received: from mail-lf1-f47.google.com (mail-lf1-f47.google.com [209.85.167.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 87B931FF1B5 for ; Mon, 18 Aug 2025 20:15:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755548143; cv=none; b=i8BjJ6i2Th4znWXY8dplEjhA4wCV750HHB2rWP1/i63vvkwA840IlawD45TDB9uanReiX2DAroXCvI5M2Lq6ZnM7t2pCjqjbzgQgGxmrSm8zOSssqqXGgnwmr1tE+5o40OSQXOtBAUc4fQA/AuCsZn5fwCsn+1MrqFixFm+KX8c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755548143; c=relaxed/simple; bh=CaUrB4UP/dAbYK1r25EfF08W4CEvtMBYfIS5kCBy6PI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s/I0b+T4LxbCLaTgoTH71M+H9gqJ9oZceGDNuhntsDweHaMq+Pk6ggFfWm+TMLpA7aFlR6qyj0Boa23EQL/dKfIscFMYue5JQI3HUSHynDY5Ug+E3A7fadnEgxColxd+GSV/poueIp5xnaYDYQ63+MDSY5s5QcRkhgx6YMAqrmM= 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=S9zSFeoo; arc=none smtp.client-ip=209.85.167.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="S9zSFeoo" Received: by mail-lf1-f47.google.com with SMTP id 2adb3069b0e04-55ce521e3f4so4838233e87.1 for ; Mon, 18 Aug 2025 13:15:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1755548140; x=1756152940; 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=q7ecUUREqZxH3NQXkzrG8AHXGf+HApsHSTGrw6/8F50=; b=S9zSFeoogljdQWelQcjANXDsyyY+48RiE+TLPqFb6qREMI9JHz/jkC29faZnEaVmVI KmSk5e8eJWxNfYtI7Cn2T3AzKLvRSO3G/d1Yb2kVkeQ3XdlCBc7yFvto6n0W8qeYRVwl e1BaZeQCT3zPFPGPFa5n+p3FMbOyWgj2lL8Bs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755548140; x=1756152940; 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=q7ecUUREqZxH3NQXkzrG8AHXGf+HApsHSTGrw6/8F50=; b=mkXk+00PXK8J7gxSvz5uvZMClgHXVQUhK5hn5icqDmw9D6GXDZxl3Jmf3/Eyeg7O5K ZIlf+z6Wsr0r6fhLFzvRtID/8u0PwSvePaddr8UqcDyy5zvwFWStaf2n/TH24qF63Ja2 69pppEs5ITPAg6G3MO2cn+ak9+bNwd36tzPuKK6t7KlJtRTVPylOSymL3iDq9z2w7UVt XN/da19D0CJslkbaNxaFeNHmfqs54NdFJ26ZvKiG8egYTHdfZm1ou5JCINqyIQKLj2Zq e1Qex8JXkjmwG8A53cSfEwEyc++lZInrf60247/DMPEMY9RCYd4kFBTyWtJ8s/z+BAg4 4i3Q== X-Forwarded-Encrypted: i=1; AJvYcCWyozydTyWjcTgZ+ZYoMgHlhTSXe7zpzsnLtbl0rKMMaaoIhoVTkPrdszpCiU8m5NCmHJyOTo20Ku3KQI8=@vger.kernel.org X-Gm-Message-State: AOJu0YynFnVbmxpVPCZnJG3nDCbGyixVlK3zptp3aSIKZiFby+JMNWlh Xgh9VXWg3ONaLdgVDzcQrnylBwmADFMXbUEuYYAyezzGfQLv3nJWM/hRhiZdJqIy4w== X-Gm-Gg: ASbGncsiU6yuInbEV90jB6xfBvfITS5uVzM1azhi0oe+aNZbWUfDsdxhXGhjha/R18y 6hxtyqCxLL0nDH7vvMQ6bA4pVGld/a7g7IU81Anwf5wYgHY6uQxGPfGeDRLThPOi0jEtzviYIVb 7fuCYSPA09BTx7NQVC0hfIi1QtY6/CaGDq04lKqtiCiec5GTzcNXIUAfqh3FMH4NGjFjoVjoNDf bazPx/iJ1BA5WeeEe8S6KtnrRgmr02k82+4ED1XHVdZlfMBKv/nUt1NRXBMAalWZYg2RiV9dunL D2kCS9pBtv+UYlNzeRIaclJtGTnJznwgXIaob1ib/0gRjB7J7NtJl83OcIUqqcBqUoQMNICl14L uzDVOFbtAm9deCtZEWq+t4vjfcq/MbYF3Y0BWu5jc7+vwzu/m6n4HGzR5xq/7z/ZCyeYNfVZ8vg s= X-Google-Smtp-Source: AGHT+IFb9FqH/R1wchdlDtJrBvhxMgTs/qFlhYR9eOTJJ/bU3X+4wqPPopUwbCGpty45TkWd2J9jvQ== X-Received: by 2002:a05:6512:3b13:b0:55b:9045:ec5e with SMTP id 2adb3069b0e04-55e007651f0mr50179e87.18.1755548139615; Mon, 18 Aug 2025 13:15:39 -0700 (PDT) Received: from ribalda.c.googlers.com (237.65.88.34.bc.googleusercontent.com. [34.88.65.237]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55cef3f3476sm1789268e87.107.2025.08.18.13.15.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 13:15:39 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 18 Aug 2025 20:15:36 +0000 Subject: [PATCH 1/4] media: uvcvideo: Fix comments in uvc_meta_detect_msxu 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: <20250818-uvc-iq-switch-v1-1-f7ea5e740ddd@chromium.org> References: <20250818-uvc-iq-switch-v1-0-f7ea5e740ddd@chromium.org> In-Reply-To: <20250818-uvc-iq-switch-v1-0-f7ea5e740ddd@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil , Greg Kroah-Hartman Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.2 The comments can be more precise. Let's fix them. Fixes: 6cb786f040ad ("media: uvcvideo: Auto-set UVC_QUIRK_MSXU_META") Reviewed-by: Laurent Pinchart Signed-off-by: Ricardo Ribalda Link: https://lore.kernel.org/r/20250716-uvc-meta-followup-v2-1-d3c2b995af3= d@chromium.org Signed-off-by: Hans de Goede --- drivers/media/usb/uvc/uvc_metadata.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_metadata.c b/drivers/media/usb/uvc/u= vc_metadata.c index 3b0b392895119bb6ac300fc40b89a7ea00e56b40..b0960f0553cfcb30b0036d2ad88= 77fafa225c6a4 100644 --- a/drivers/media/usb/uvc/uvc_metadata.c +++ b/drivers/media/usb/uvc/uvc_metadata.c @@ -196,7 +196,10 @@ static int uvc_meta_detect_msxu(struct uvc_device *dev) if (!data) return -ENOMEM; =20 - /* Check if the metadata is already enabled. */ + /* + * Check if the metadata is already enabled, or if the device always + * returns metadata. + */ ret =3D uvc_query_ctrl(dev, UVC_GET_CUR, entity->id, dev->intfnum, MSXU_CONTROL_METADATA, data, sizeof(*data)); if (ret) @@ -208,9 +211,11 @@ static int uvc_meta_detect_msxu(struct uvc_device *dev) } =20 /* - * We have seen devices that require 1 to enable the metadata, others - * requiring a value !=3D 1 and others requiring a value >1. Luckily for - * us, the value from GET_MAX seems to work all the time. + * Set the value of MSXU_CONTROL_METADATA to the value reported by + * GET_MAX to enable production of MSXU metadata. The GET_MAX request + * reports the maximum size of the metadata, if its value is 0 then MSXU + * metadata is not supported. For more information, see + * https://learn.microsoft.com/en-us/windows-hardware/drivers/stream/uvc-= extensions-1-5#2229-metadata-control */ ret =3D uvc_query_ctrl(dev, UVC_GET_MAX, entity->id, dev->intfnum, MSXU_CONTROL_METADATA, data, sizeof(*data)); --=20 2.51.0.rc1.167.g924127e9c0-goog From nobody Sat Oct 4 08:03:30 2025 Received: from mail-lf1-f53.google.com (mail-lf1-f53.google.com [209.85.167.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 2A1D221770D for ; Mon, 18 Aug 2025 20:15:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755548144; cv=none; b=I0VGRz/NrEeJCZXUenVwAqGzr4jWEaG0jZ3YzEKqq/OvNKGhx2MXvgl5lfgDfjyIQn6R9hLAqHJsVNm8qGtf2FVW6vG8SRCFTRit+K8ISmbsidH2kzQMKqW88tWm4UE43+FDi2w4OqD6Tz+WJ/OJFtPR7KJK86TL80+Z0bjBtV4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755548144; c=relaxed/simple; bh=BG4bOUpG8gLPwpQbJcFoqWGcn1/tpQAAUR2UbxXlbNY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GLCVPM+JatBR6LiJvyiw6dz/GNorcIZ41pH6PoOEe5gSjJFkFzOvry+ECEmZMzlGx0VLmMSZw3xlwpgyVCJ/tWag6lT+ciXXsnNeDfwz4BRtIb99PfOtnSruxCPPFEUWcasd6PnTOj0yVaPWdZtI5eb9nyuYYL6bYiBqQ61fYpI= 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=fYX/YZUX; arc=none smtp.client-ip=209.85.167.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="fYX/YZUX" Received: by mail-lf1-f53.google.com with SMTP id 2adb3069b0e04-55ce5247da6so4773168e87.2 for ; Mon, 18 Aug 2025 13:15:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1755548140; x=1756152940; 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=WdEqVKxcLF8F+IFb9/yiQOVN8uHAV1kAAEVi6ehVyak=; b=fYX/YZUXOLVxmjFj4ViRFHWkwSUcVPV4CMQdUfxcnQtPnDjGLePzb4HIE5b62P2wFQ LwxtQguhK6XGKYuK9MNqEmf55IA1nFToLSZDobweFhEYfOlUWdcu/QXYRQ5VWTM2YmSD YAn3gA7G56lcSoCfLegKvr/6VmgPwexrJfUks= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755548140; x=1756152940; 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=WdEqVKxcLF8F+IFb9/yiQOVN8uHAV1kAAEVi6ehVyak=; b=vp2AJc/oka3iiKaDUVUbdksL5vzVvh+GJ7PQErWQXE2HO8DEY8R4isSmt15NYOYmx+ wlt7Nusvp+Xd0eVRCOosJFWlul14ds9QqCAeg8uvelP1PGj6Q4EWdswRpXeLLu7qvh3a tdjWwhrWg76ucByEG2aJTijvKHkpUp3iGRHXp6jpH3Yb/8khUqN0PxuDpJd8AIHu+H39 McQrLG0sseZoS2odJJd4bhWmAuIjmsElxOnAyZTsqSIJaTzD/0qpPfLPECaYtwxag8Ul dFupdzzFlwci6OyYe8vTAV7EQkOLSZ9HAIMb9ZaLwvVEtak/9NyNKNLppp5zqZoVSAOq jiCw== X-Forwarded-Encrypted: i=1; AJvYcCVUvfqjd7/VFyjKFc1o7XBGmc+BLVqUuy1FXQXAw2Lobj70AQg4C5bwUHSVyJQ+V/JP+GliJVqXr7haMzg=@vger.kernel.org X-Gm-Message-State: AOJu0YylmAgzXS3An8IwthSNZ7Z5694RBfnK3fY9dk6mYuB+fo95v5Jr tY6cjeXRPZ59BYJEuCiTWBffEhiiAs1JZ5X9axlAcsuRJTxaQv1XgVl2IY5prHNOYQ== X-Gm-Gg: ASbGncsWPkUvTDRBPOCGktj1OnfvZScBfjlB+1Y12iv+73k7xWvXUARIj/c8ejwH93k p07beM44NteZpqUfU2mp5HIQrLFtMKgWoVHWKtE5/1bJJbbRCfGPOPi6x3rdmBVj+5hjdHW60w+ vFk+XbMnsqeTJAHHWASRJLr6i+C99qe01dslcOwPBfhFMHxr09kPFffyN8VWSWBXEZ8t+xn+ysm uCIa+6L8b3krRSK52zTmH0EB/5tKOWUJ0KfCg9/A6A2oHLo2bR/lOD6FvVZA3/3hzd8nbJCK7GQ P6A8n3H2O3rKU/1vruioVt9Liz3Mzsuyy1FovTc7HTVD/BlfhMfcWcg4HN92g0ZUDL8rDfyxmFu 56bDZADPpdUhzXmkp2qfMQn9x6BPiGV3B7uBFhP5v+ERsv8oypcfG0nyzVToSzqY6mK/qC+xAya c= X-Google-Smtp-Source: AGHT+IHy8+Y7Ap5ZzFAyk0R8uEtaSIJbXsSxVSKDxBIrzcILSsx9hn4pIhtvwy63QftL0DTLIuFMBg== X-Received: by 2002:a05:6512:304d:b0:55b:5863:6297 with SMTP id 2adb3069b0e04-55e007a4de2mr40728e87.28.1755548140179; Mon, 18 Aug 2025 13:15:40 -0700 (PDT) Received: from ribalda.c.googlers.com (237.65.88.34.bc.googleusercontent.com. [34.88.65.237]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55cef3f3476sm1789268e87.107.2025.08.18.13.15.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 13:15:39 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 18 Aug 2025 20:15:37 +0000 Subject: [PATCH 2/4] media: uvcvideo: Move MSXU_CONTROL_METADATA definition to header 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: <20250818-uvc-iq-switch-v1-2-f7ea5e740ddd@chromium.org> References: <20250818-uvc-iq-switch-v1-0-f7ea5e740ddd@chromium.org> In-Reply-To: <20250818-uvc-iq-switch-v1-0-f7ea5e740ddd@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil , Greg Kroah-Hartman Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.2 From: Laurent Pinchart Move the MSXU_CONTROL_METADATA control definitino to the include/linux/usb/uvc.h header, alongside the corresponding XU GUID. Add a UVC_ prefix to avoid namespace clashes. While at it, add the definition for the other controls for that extension unit, as defined in https://learn.microsoft.com/en-us/windows-hardware/drivers/stream/uvc-exten= sions-1-5#222-extension-unit-controls. Signed-off-by: Laurent Pinchart Reviewed-by: Ricardo Ribalda Reviewed-by: Hans de Goede Link: https://lore.kernel.org/r/20250715185254.6592-4-laurent.pinchart@idea= sonboard.com Signed-off-by: Hans de Goede --- drivers/media/usb/uvc/uvc_metadata.c | 11 +++++------ include/linux/usb/uvc.h | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_metadata.c b/drivers/media/usb/uvc/u= vc_metadata.c index b0960f0553cfcb30b0036d2ad8877fafa225c6a4..2d4998bd098f3ac7f51421535cc= aa9e20a71f8e9 100644 --- a/drivers/media/usb/uvc/uvc_metadata.c +++ b/drivers/media/usb/uvc/uvc_metadata.c @@ -177,7 +177,6 @@ static struct uvc_entity *uvc_meta_find_msxu(struct uvc= _device *dev) return NULL; } =20 -#define MSXU_CONTROL_METADATA 0x9 static int uvc_meta_detect_msxu(struct uvc_device *dev) { u32 *data __free(kfree) =3D NULL; @@ -201,7 +200,7 @@ static int uvc_meta_detect_msxu(struct uvc_device *dev) * returns metadata. */ ret =3D uvc_query_ctrl(dev, UVC_GET_CUR, entity->id, dev->intfnum, - MSXU_CONTROL_METADATA, data, sizeof(*data)); + UVC_MSXU_CONTROL_METADATA, data, sizeof(*data)); if (ret) return 0; =20 @@ -211,23 +210,23 @@ static int uvc_meta_detect_msxu(struct uvc_device *de= v) } =20 /* - * Set the value of MSXU_CONTROL_METADATA to the value reported by + * Set the value of UVC_MSXU_CONTROL_METADATA to the value reported by * GET_MAX to enable production of MSXU metadata. The GET_MAX request * reports the maximum size of the metadata, if its value is 0 then MSXU * metadata is not supported. For more information, see * https://learn.microsoft.com/en-us/windows-hardware/drivers/stream/uvc-= extensions-1-5#2229-metadata-control */ ret =3D uvc_query_ctrl(dev, UVC_GET_MAX, entity->id, dev->intfnum, - MSXU_CONTROL_METADATA, data, sizeof(*data)); + UVC_MSXU_CONTROL_METADATA, data, sizeof(*data)); if (ret || !*data) return 0; =20 /* - * If we can set MSXU_CONTROL_METADATA, the device will report + * If we can set UVC_MSXU_CONTROL_METADATA, the device will report * metadata. */ ret =3D uvc_query_ctrl(dev, UVC_SET_CUR, entity->id, dev->intfnum, - MSXU_CONTROL_METADATA, data, sizeof(*data)); + UVC_MSXU_CONTROL_METADATA, data, sizeof(*data)); if (!ret) dev->quirks |=3D UVC_QUIRK_MSXU_META; =20 diff --git a/include/linux/usb/uvc.h b/include/linux/usb/uvc.h index ee19e9f915b8370c333c426dc1ee4202c7b75c5b..12a57e1d34674a3a264ed7f88be= d43926661fcd4 100644 --- a/include/linux/usb/uvc.h +++ b/include/linux/usb/uvc.h @@ -33,6 +33,23 @@ {0xdc, 0x95, 0x3f, 0x0f, 0x32, 0x26, 0x4e, 0x4c, \ 0x92, 0xc9, 0xa0, 0x47, 0x82, 0xf4, 0x3b, 0xc8} =20 +/* https://learn.microsoft.com/en-us/windows-hardware/drivers/stream/uvc-e= xtensions-1-5#222-extension-unit-controls */ +#define UVC_MSXU_CONTROL_FOCUS 0x01 +#define UVC_MSXU_CONTROL_EXPOSURE 0x02 +#define UVC_MSXU_CONTROL_EVCOMPENSATION 0x03 +#define UVC_MSXU_CONTROL_WHITEBALANCE 0x04 +#define UVC_MSXU_CONTROL_FACE_AUTHENTICATION 0x06 +#define UVC_MSXU_CONTROL_CAMERA_EXTRINSICS 0x07 +#define UVC_MSXU_CONTROL_CAMERA_INTRINSICS 0x08 +#define UVC_MSXU_CONTROL_METADATA 0x09 +#define UVC_MSXU_CONTROL_IR_TORCH 0x0a +#define UVC_MSXU_CONTROL_DIGITALWINDOW 0x0b +#define UVC_MSXU_CONTROL_DIGITALWINDOW_CONFIG 0x0c +#define UVC_MSXU_CONTROL_VIDEO_HDR 0x0d +#define UVC_MSXU_CONTROL_FRAMERATE_THROTTLE 0x0e +#define UVC_MSXU_CONTROL_FIELDOFVIEW2_CONFIG 0x0f +#define UVC_MSXU_CONTROL_FIELDOFVIEW2 0x10 + #define UVC_GUID_FORMAT_MJPEG \ { 'M', 'J', 'P', 'G', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} --=20 2.51.0.rc1.167.g924127e9c0-goog From nobody Sat Oct 4 08:03:30 2025 Received: from mail-lf1-f43.google.com (mail-lf1-f43.google.com [209.85.167.43]) (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 F37D422370A for ; Mon, 18 Aug 2025 20:15:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755548144; cv=none; b=nQZzULMljUiTWVwGSCq82snjRA/ndNfGa1NleysTn+1iZ8fYPAJ8Olp2nRm7d/yEkidjuHCwLHPCSkQ3HOggYmK7XHSGzkV8PeKvduUkPlIzMw441sJ3k285/7boVhbj6Nvr6ETEe42+FJWcqAn0GodlJCLSs0BCVApklps1lpA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755548144; c=relaxed/simple; bh=2p2FtkZ4Lnr9IlWB9wAFHpMJBW9ofPI2RfNGv3X02BE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XMtKJ9NGSHNr9vjaCeWYAH+pIbRoOEpITBikH6rh/Q5soLxgX1usEHzJWEMT9wjgLAIFWjtXgDjlsIprsYBF2mDwil0VdkViwib+vOxRep3M35Lc9YsH85pFBiUb4osbDHfp1qbKRbvdrtcu3AW6ty0n7XdbZ7aAVYlbDrdChTI= 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=MJwKW3nC; arc=none smtp.client-ip=209.85.167.43 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="MJwKW3nC" Received: by mail-lf1-f43.google.com with SMTP id 2adb3069b0e04-55ce528a0f5so4591995e87.3 for ; Mon, 18 Aug 2025 13:15:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1755548141; x=1756152941; 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=DLzqZRdyOLv8EDpzaUnt0Q4MFdVvX6ZyIG6yl0VPoqc=; b=MJwKW3nC5WAQCeoA87IfFmIEnX1LOg7Un3ZpZuJ/K49fBFHJGf8S5DChYqONTSOnlY hDJTmPwfUpw3ACmF0ztuB+ExZ/RpWxj5bwrELwNwuar3O2awYAYPCQ0LI8lVOl3fHJf5 5mQAQRdX1uo+hbCNP0mJa0FCeRSbxo8TaVoCU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755548141; x=1756152941; 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=DLzqZRdyOLv8EDpzaUnt0Q4MFdVvX6ZyIG6yl0VPoqc=; b=h/YIDj355BDaLWhN+dm/cCjCr7gsxOppXRxo35twxbvSY6pes9PllHzIBSZxp4V/KD r7xYX6hn4XMjrUiUl6igPsX0EJSGnUGy0ZNCRF4zWs/T+ppItWUNgRK0+EXNHIE+BYNY mR9tH2kAFlyUefFFcEpfXOiWMpINvAWjURj2ggSSjSxHloiM8L0VI7YQA13gQf87CFlN N1J+PDecUCv5BIfxuDdJm2T56a2Q8tRHj+dSeHNvL4g6Q5GUGqNEcwtj7Ndx0uTRzm+w DAF9BYN1UKmc33bCjLRMVpx7MJsdlVFF5xsCoRXKDN4IxJsQcCMmlHpV5uk7+MB0cgb2 MigA== X-Forwarded-Encrypted: i=1; AJvYcCULajzMImNs7c8A/0BHaajr8VL0rLxgNpNHLXXSIYmLkR1yylzlVOssbFh/+N51tE7GxCbLzr6RMTzKo/Y=@vger.kernel.org X-Gm-Message-State: AOJu0YwES7+8GXq7ENU5Enu7l+MTbgvUFVpQrjjW3sq3z8ATLnNddDU1 cQhUVIHatIOpoV9QBePRsoqxQ/EgVqEAREozvtsEzzz4Rux8+E7InP+mjpitxJXTbQ== X-Gm-Gg: ASbGnctrIfQk9/q4u/+fBgjzO+Ip9HaI4cWTxp3HuHsoIo+Y3VpWeXFHEhkbyQ1jjxM NF9eZOniCSN36clsDqvPlhTyqyA7EUBjXoxciwKCWipgwTHqJLI0HiWa2Iwq06oq6g/5QiNreKK rgPWQcqjieSLO+if61gvhuCP8+gNHjg/JnT6uturw/Nl9bWHpv7ceS1MOJ5DpTqPm02M/woWSdy RuS2B/DKzgLnM5WF9qIIbpvKOdl1jMjh35+ZiRlVbNfr2OIHf3OCxcOfnJSRrFmYmd0Gih2q6Bd pkLatHaNe7mhPW7lq0CIhO5e1cx+WawEDZOHu79cn88b4oQNAKwWXMh4gaDcb34i6Bd+WYowl6P DSgk9SpBOV4fpgRHoFZD5AhZWfv80yj1UxEkDVluaPFkZbHZ5rBpevpacVyvM6zyJ/LZOOpzGnw w= X-Google-Smtp-Source: AGHT+IHomcZrlLRv3tAqMDJkW/VO0hvBuw4jaQNof58elMwk6nl++cYJMU4IoI47742CxSR4XiYzsg== X-Received: by 2002:a05:6512:2348:b0:55c:e752:e9c5 with SMTP id 2adb3069b0e04-55e007512d8mr55584e87.7.1755548141083; Mon, 18 Aug 2025 13:15:41 -0700 (PDT) Received: from ribalda.c.googlers.com (237.65.88.34.bc.googleusercontent.com. [34.88.65.237]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55cef3f3476sm1789268e87.107.2025.08.18.13.15.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 13:15:40 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 18 Aug 2025 20:15:38 +0000 Subject: [PATCH 3/4] media: uvcvideo: Run uvc_ctrl_init_ctrl for all controls 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: <20250818-uvc-iq-switch-v1-3-f7ea5e740ddd@chromium.org> References: <20250818-uvc-iq-switch-v1-0-f7ea5e740ddd@chromium.org> In-Reply-To: <20250818-uvc-iq-switch-v1-0-f7ea5e740ddd@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil , Greg Kroah-Hartman Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.2 The function uvc_ctrl_init_ctrl() is called for every control for every entity, but it exits early if the entity is a extension unit. The comment claims that this is done to avoid querying XU controls during probe. We only query a control if its entity GUIDs and index matches the uvc_ctrls list. There are only controls for the following GUIDs: UVC_GUID_UVC_PROCESSING, UVC_GUID_UVC_CAMERA and UVC_GUID_EXT_GPIO_CONTROLLER. In other words, XU controls will not be queried even without this condition. In future patches we want to add ChromeOS XU controls that need to the initialized. We will make sure that all cameras with ChromeOS XU can be queried at probe time. Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_ctrl.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index efe609d7087752cb2ef516eef0fce12acd13e747..ff975f96e1325532e2299047c07= de5d1b9cf09db 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -3181,15 +3181,6 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chai= n *chain, { unsigned int i; =20 - /* - * XU controls initialization requires querying the device for control - * information. As some buggy UVC devices will crash when queried - * repeatedly in a tight loop, delay XU controls initialization until - * first use. - */ - if (UVC_ENTITY_TYPE(ctrl->entity) =3D=3D UVC_VC_EXTENSION_UNIT) - return; - for (i =3D 0; i < ARRAY_SIZE(uvc_ctrls); ++i) { const struct uvc_control_info *info =3D &uvc_ctrls[i]; =20 --=20 2.51.0.rc1.167.g924127e9c0-goog From nobody Sat Oct 4 08:03:30 2025 Received: from mail-lf1-f41.google.com (mail-lf1-f41.google.com [209.85.167.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 9E8DA22D7A5 for ; Mon, 18 Aug 2025 20:15:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755548145; cv=none; b=Gg1p/HbHopepnVvNlksAWPG2vlUqzlG39RcjcOPwZsF4Bv9S9uyMmsBVT813zxb2c9CvClJSIPn05Ser/TWfnUwrQmWH55jANn7hJCGHeBWo1LTpS8oby3urpzPsAMDyju5OM0m+fPusW43NawC/wjSU140OcNAXwwSaOylND6k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755548145; c=relaxed/simple; bh=tFoInIAvGowRuxA5IgYJwn3ZqXOXAj0ZwAR5l80sflk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f9jS+P6x/kB2DDgFUgf4xp70hPP52ozPwDnC5gzf3+Sr9qrLKfEAznePlW7TYi7TrHtmMhW1FJfy8OwZLhSajylxOS482+e/AdEsuPGRDgKd5/k0tSJVWdvgfqSVuxGdacWIzfBxBwg6lM66Gu/7eUnxorqVI3vPA02M1Fyp9c8= 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=XlJhJ9a8; arc=none smtp.client-ip=209.85.167.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="XlJhJ9a8" Received: by mail-lf1-f41.google.com with SMTP id 2adb3069b0e04-55ce527ffbfso4053012e87.3 for ; Mon, 18 Aug 2025 13:15:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1755548142; x=1756152942; 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=dEpJBKB+qWy+9B0fWWzvqhUsl5wcxZoDtzLEu16z0Dw=; b=XlJhJ9a8kaQ/JBClQW53Y8r7tWR3vj7pYmb7BvZXSxo3nXqd7YEM2I2/Fx931xpuj0 L8lDzMvHjyzKAkrGJW1xLrtcEO5Va1kQ0oe30ZXoCnUknlVepwnABww+nao+Y06/J7/O w349MXU9ofixjUHFjbH6l9kJ1G6/lJuvpcMVo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755548142; x=1756152942; 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=dEpJBKB+qWy+9B0fWWzvqhUsl5wcxZoDtzLEu16z0Dw=; b=DlHLoOOnvQNoESkRmYqFoKxTOY09p83gWcHSkuUiRbSFbWxU7Ucu70m8ETa2f/ka0H jT9cRfVgJ/HC6gfd7lWRk3xI/N7H9Et6VFD4/7pkTFgec2dVtbDZUuIqqOZwUFcvRmsI XXtD6yjxq4Bia3TPFyhrw1fl8ggk4pYudbjghd0HPpDWaUalbMdUcG6+2VjjcPkKXDNh buxDFlAXMYcQrFnBGv9tbCUV06UYq7HU3E4J2WywIRPdCr7Ass7fW8B+euANziyRG/Nw qUnJFMIbV+Wm4z6So7PYvMBkiMh/Aw2+icB3iOGD0ekJVJNrCiC9ujp97tCBXFR5d9JK 62qA== X-Forwarded-Encrypted: i=1; AJvYcCX7aOOTST+VdcQtCh0Pa151boBW402ldHa6L18hEn2Q0EwKnH2TZMWuIZWc944dqkxePQLa/afvca2NQZo=@vger.kernel.org X-Gm-Message-State: AOJu0YyKKIu+GhQFmhca8k2PMJHvqSAMdHQVmKzTqZPKjuF20iFjuRp1 h030YptL5natZUt+uvEVMVrp1DN0fXDFic0S5JWzolaZ3yzIFZ6b2Q+VwEeawtacMw== X-Gm-Gg: ASbGncvnHDhe/nmORc+CNxUeQ0yip6MPC60VDB184D2ZwiBDw+uGwv4+6VieaIis0kC ++9LjsM9LyEbk+P9lNGtUTZX8rS1SjwFjgo4Y/Hoq1wv7B1vjfXijG8GbP4GZStrKIOxQ+c5zZJ NfaKkCyj0RPYEEqhCi8vhBfNFvbXqY9Qxubs9Vd+R8ljucWS1CmxdimbsjyYzChlA4d5tNCBCBn o/UEN4Cw7zdW0m/mtGS+YPAOMFByobBOtnoxwpghW9HQS+h27WIUw2wF6yqlK5LmqM7JHjzk0M3 ZpgdJUVPDBRNgM+WpzaGG4ji1G9Iot0Cu3jNsjnpCEZHzucA2ssI+J94FQmpAl8ajLs4MyFkuR3 pJg9aeuJ4fYq8/EbHz5rURjEhpgvvcBq2ouYJlinAs5hkaD4asciaT4ARvUHawQ2sByt5u440rW A= X-Google-Smtp-Source: AGHT+IE0mjNwJY/EwDnV+q6jH14CZm8UZca+WUBq2p3wQXYyERXzxqjD4/n+WbcQCdVvPQYFzgQcjA== X-Received: by 2002:a05:6512:10ca:b0:55b:886e:d50a with SMTP id 2adb3069b0e04-55e007a774emr46019e87.13.1755548141670; Mon, 18 Aug 2025 13:15:41 -0700 (PDT) Received: from ribalda.c.googlers.com (237.65.88.34.bc.googleusercontent.com. [34.88.65.237]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-55cef3f3476sm1789268e87.107.2025.08.18.13.15.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 13:15:41 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 18 Aug 2025 20:15:39 +0000 Subject: [PATCH 4/4] media: uvcvideo: Support UVC_CROSXU_CONTROL_IQ_PROFILE 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: <20250818-uvc-iq-switch-v1-4-f7ea5e740ddd@chromium.org> References: <20250818-uvc-iq-switch-v1-0-f7ea5e740ddd@chromium.org> In-Reply-To: <20250818-uvc-iq-switch-v1-0-f7ea5e740ddd@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Hans Verkuil , Greg Kroah-Hartman Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.2 The ChromeOS XU provides a control to change the IQ profile for a camera. It can be switched from VIVID (a.k.a. standard) to NONE (a.k.a. natural). Wire it up to the standard v4l2 control. Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede Reviewed-by: Laurent Pinchart --- drivers/media/usb/uvc/uvc_ctrl.c | 32 ++++++++++++++++++++++++++++++++ include/linux/usb/uvc.h | 5 +++++ 2 files changed, 37 insertions(+) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index ff975f96e1325532e2299047c07de5d1b9cf09db..8766a441ad1d8554c0daaed3f87= 758321684246b 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -376,6 +376,15 @@ static const struct uvc_control_info uvc_ctrls[] =3D { | UVC_CTRL_FLAG_GET_DEF | UVC_CTRL_FLAG_AUTO_UPDATE, }, + { + .entity =3D UVC_GUID_CHROMEOS_XU, + .selector =3D UVC_CROSXU_CONTROL_IQ_PROFILE, + .index =3D 3, + .size =3D 1, + .flags =3D UVC_CTRL_FLAG_SET_CUR + | UVC_CTRL_FLAG_GET_RANGE + | UVC_CTRL_FLAG_RESTORE, + }, }; =20 static const u32 uvc_control_classes[] =3D { @@ -384,6 +393,17 @@ static const u32 uvc_control_classes[] =3D { }; =20 static const int exposure_auto_mapping[] =3D { 2, 1, 4, 8 }; +static const int cros_colorfx_mapping[] =3D { 1, // V4L2_COLORFX_NONE + -1, // V4L2_COLORFX_BW + -1, // V4L2_COLORFX_SEPIA + -1, // V4L2_COLORFX_NEGATIVE + -1, // V4L2_COLORFX_EMBOSS + -1, // V4L2_COLORFX_SKETCH + -1, // V4L2_COLORFX_SKY_BLUE + -1, // V4L2_COLORFX_GRASS_GREEN + -1, // V4L2_COLORFX_SKIN_WHITEN + 0}; // V4L2_COLORFX_VIVID}; + =20 static bool uvc_ctrl_mapping_is_compound(struct uvc_control_mapping *mappi= ng) { @@ -975,6 +995,18 @@ static const struct uvc_control_mapping uvc_ctrl_mappi= ngs[] =3D { .data_type =3D UVC_CTRL_DATA_TYPE_BITMASK, .name =3D "Region of Interest Auto Ctrls", }, + { + .id =3D V4L2_CID_COLORFX, + .entity =3D UVC_GUID_CHROMEOS_XU, + .selector =3D UVC_CROSXU_CONTROL_IQ_PROFILE, + .size =3D 8, + .offset =3D 0, + .v4l2_type =3D V4L2_CTRL_TYPE_MENU, + .data_type =3D UVC_CTRL_DATA_TYPE_ENUM, + .menu_mapping =3D cros_colorfx_mapping, + .menu_mask =3D BIT(V4L2_COLORFX_VIVID) | + BIT(V4L2_COLORFX_NONE), + }, }; =20 /* ------------------------------------------------------------------------ diff --git a/include/linux/usb/uvc.h b/include/linux/usb/uvc.h index 12a57e1d34674a3a264ed7f88bed43926661fcd4..22e0dab0809e296e089940620ae= 0e8838e109701 100644 --- a/include/linux/usb/uvc.h +++ b/include/linux/usb/uvc.h @@ -29,6 +29,9 @@ #define UVC_GUID_EXT_GPIO_CONTROLLER \ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03} +#define UVC_GUID_CHROMEOS_XU \ + {0x24, 0xe9, 0xd7, 0x74, 0xc9, 0x49, 0x45, 0x4a, \ + 0x98, 0xa3, 0xc8, 0x07, 0x7e, 0x05, 0x1c, 0xa3} #define UVC_GUID_MSXU_1_5 \ {0xdc, 0x95, 0x3f, 0x0f, 0x32, 0x26, 0x4e, 0x4c, \ 0x92, 0xc9, 0xa0, 0x47, 0x82, 0xf4, 0x3b, 0xc8} @@ -50,6 +53,8 @@ #define UVC_MSXU_CONTROL_FIELDOFVIEW2_CONFIG 0x0f #define UVC_MSXU_CONTROL_FIELDOFVIEW2 0x10 =20 +#define UVC_CROSXU_CONTROL_IQ_PROFILE 0x04 + #define UVC_GUID_FORMAT_MJPEG \ { 'M', 'J', 'P', 'G', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71} --=20 2.51.0.rc1.167.g924127e9c0-goog