From nobody Sat Oct 4 09:32:23 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