From nobody Wed Oct 1 22:26:30 2025 Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com [209.85.167.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 2BA382F5A3E for ; Fri, 26 Sep 2025 13:11:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892295; cv=none; b=AzyruEHf1yMTf7tsT5a9XsOmvKuJV1lzL7tUI9bRuzbDuxWvAR75CEJbB0lBdX91fEt0kkIVrRhhTrl3mpxXOpJCV+1SeN2Ag+AcazE6zvHPg44vLX+Ka/kS6SBrznFbeuNStyITHOOBhrLdtXnbunSzgJIeZGHMcKTUBGbzUfM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892295; c=relaxed/simple; bh=fN1yQSZa9dGNYApiBN9DJ0yzGqYY3io2zaEeifTv+AY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NsLt8+1qVmptgBUhQDUYKlPNjplwAvgYdui+N9Suvy4P6PI7VanYpkPkAgpcSVSKLU56M1KsAR7iaRU3ZrOUPaBzvhaJry0DcA5DR3JWCsDCd6HDSr/eKfsxq4cD+ruk/2mL/CQ9aX9GgGNx4IcrWFk9e88QQiR0KLU464/vLmk= 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=fbfy3VJj; arc=none smtp.client-ip=209.85.167.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="fbfy3VJj" Received: by mail-lf1-f45.google.com with SMTP id 2adb3069b0e04-57f0aa38aadso2716014e87.2 for ; Fri, 26 Sep 2025 06:11:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1758892290; x=1759497090; 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=nuHd6eGYommvO3UskpqEqtJdP8+N3udV7UPBSp5lsjc=; b=fbfy3VJjC1yaYytPKZzTYRVoy+OCnUkOEtEIUZ3x3cYqigUyyXha5Va4UzDiOILmAI z/9bf24ITk1PxUsoK1WCTsDg7wY0GXAeUPCKIViGPcEP9BCiaDJ+LwEYvb6cDV8LIwkb D5w2rHp5jiXapkSCe1hEBuefH3fRV5/UiEHiY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758892290; x=1759497090; 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=nuHd6eGYommvO3UskpqEqtJdP8+N3udV7UPBSp5lsjc=; b=HtpQbs28CMM+7+uVDTRv6yWmVGMmj5PGZydFmwqCd9MlDgfOduvWDJl8b35obr4a16 WYO8PVNVSSILWI3GmDDfUJyz0yT0F+RfiFRY9130LnkPVhaOFQAk1aTLTaXzjhQkxozX s/9cZfxC36WnUw1G3rrDI44a3yYJpM/3o95vKkRZ1FaUs5P4Mg0FPzbDLqHYD7IuC50d fiTfRC+hVRSUKvkcOoRDN5bgJeU8WR38nvyiQdgGsC0D+MtFX2rDFNkZCjyOjyCq4f2a w/7mWd1ysgQFRejDPUnvAS/2rkLMcM6bUYkBjHv7LTU7dA6In6sjQK/jWAOXbPtR5UHo 7E1g== X-Forwarded-Encrypted: i=1; AJvYcCV+9gEIDOnC46ju3cNbY3AdMntAK1z5x9k4ls5UzAhB4toQuX60Cemg8/c+rTn2Cf/MqJRDnXmHhOqcT00=@vger.kernel.org X-Gm-Message-State: AOJu0YxYZmItkgdJGmxLB6pmBdxj8mMIKnli6YEAXaLC3/qhPcmUgjY5 v9JVo4NK23OQaOv7TVpwULyeMl/+Yxr/ucDSU8vuWfpr3PWpoM2yEeWCE4+kiRy+qQ== X-Gm-Gg: ASbGncupFPm6mQgHCgfiRIvNFq/hzgaEHrPL3FeWoJ5Su/vQZ+SaxHpJ5kh8I1Czrze oYvj88qnMUSGVTK9ys6fj21kI71fQmtE2uFBEvFVJUer1jFKWd817ZJdp83k4Sagn/R1YYo/6U0 b1qp38ji03T+NR1jK4AWeoU3aaNyyw4fDALd/fgimnhdJW+mbAq7DDPGlMffbxCE7B2T4wq4O5W lbLo6OtfdZp9uRSXa5mUnxoecN5/dANbxwDRkhQ1aY7oD+0Gcs1PF9EY1sjZj9fdOfgFotBYE/T FBkRig5Z7DJDQj7W0kiLgKnLJMW+FXR2CrYfaIFm3XrfBVJ0uq9Y15QuNZCMRNLD6C39UGVYABu opWZvXmNNqv1qoPWOD0sgHclgNAQor+fn1099lgIVUMhdrSQpJ7y9HyxnWo0S8iBn7pECVSkpv5 uTwEOUeBjbO5JASyUbkrz+cJs= X-Google-Smtp-Source: AGHT+IGBibbMbWnp4wsYYpcAZc4iOvKmHvOhd0/KxBOtu8sk83ypjF+oQ0w3P1LE9KQVYZ/8hnbPDg== X-Received: by 2002:a05:6512:61b1:b0:57c:2474:3743 with SMTP id 2adb3069b0e04-582d2f24dbfmr2344139e87.32.1758892290146; Fri, 26 Sep 2025 06:11:30 -0700 (PDT) Received: from ribalda.c.googlers.com (64.153.228.35.bc.googleusercontent.com. [35.228.153.64]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-58527c6b014sm123872e87.43.2025.09.26.06.11.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Sep 2025 06:11:29 -0700 (PDT) From: Ricardo Ribalda Date: Fri, 26 Sep 2025 13:11:25 +0000 Subject: [PATCH v3 01/12] media: uvcvideo: Always set default_value 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: <20250926-uvc-orientation-v3-1-6dc2fa5b4220@chromium.org> References: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> In-Reply-To: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> To: Hans de Goede , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Bartosz Golaszewski , "Rafael J. Wysocki" , Len Brown , Robert Moore , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Ricardo Ribalda , stable@vger.kernel.org X-Mailer: b4 0.14.2 If the control does not support GET_DEF, the field default_value will be left uninitialized during queryctrl. Fixes: c0efd232929c ("V4L/DVB (8145a): USB Video Class driver") Cc: stable@vger.kernel.org Reviewed-by: Laurent Pinchart Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 2905505c240c060e5034ea12d33b59d5702f2e1f..a869257e9b7c07eaa7d725d107b= d1cb57d3c7377 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -1542,10 +1542,11 @@ static int __uvc_queryctrl_boundaries(struct uvc_vi= deo_chain *chain, return ret; } =20 - if (ctrl->info.flags & UVC_CTRL_FLAG_GET_DEF) { + if (ctrl->info.flags & UVC_CTRL_FLAG_GET_DEF) v4l2_ctrl->default_value =3D uvc_mapping_get_s32(mapping, UVC_GET_DEF, uvc_ctrl_data(ctrl, UVC_CTRL_DATA_DEF)); - } + else + v4l2_ctrl->default_value =3D 0; =20 switch (mapping->v4l2_type) { case V4L2_CTRL_TYPE_MENU: --=20 2.51.0.536.g15c5d4f767-goog From nobody Wed Oct 1 22:26:30 2025 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (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 11AE62F616B for ; Fri, 26 Sep 2025 13:11:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892296; cv=none; b=qqHVVcyyQk8TjpFHzxBG14JLtxhb3L5tXN6EFPDg1q5JPy6+JbwjXbhp2vsMUCcrYrbeqYaI4lLHE3Dge9g7AqOILkcaxdIYO2oy8voMUEBLGd84fhsix/bsBQy9xqkVk276M36hX+Sph1WWxfuKL7sQbJUuqDiOR0nCzSUDGv0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892296; c=relaxed/simple; bh=HOaXKeMMBeof7Hx+tzoNDTO3vGlaHvg7CjV+p573b/E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kwI3//DT07wTtKTZpf9zi3TdjEh94vbmUX9FlPSEBLmPapttFpjHlgGs4sqHX9TQtljQUgWs+S8OGlPCiriGDRSTSnxyaLPhkRbRGdT1eN1SDuhYbzH1nOjeGbLpslX0t9guk9wO0OjL0dMl02PKLa55nmPd/ZYfuJkQxBwseuo= 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=W3fnMtY7; arc=none smtp.client-ip=209.85.167.50 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="W3fnMtY7" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-57b8fc6097fso2744406e87.1 for ; Fri, 26 Sep 2025 06:11:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1758892291; x=1759497091; 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=zavqbvAJpl+vVyZ8ZvtBFYz19hBaBOc/P6wczkVBqDY=; b=W3fnMtY7RjqTLLDo7fzH9PJwwFjlLgWOiWVpSz3GM1AcM9VAqRpDxKfOEdmKVo4S2I XBdaLHBPk4EAGufl1mBMbGd292pNFTULimhrWJkJMQQgXTCgMozzhgjL+Qz66suCxhmd lahvQdfpNYueP2CVJHkP2abV3KmqPkBb2i+VY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758892291; x=1759497091; 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=zavqbvAJpl+vVyZ8ZvtBFYz19hBaBOc/P6wczkVBqDY=; b=X4DEG6Q80XO3Ig+kLPtAYo49KfY1clrpGZBFWppW30udHH5IdOa9zhsoK5am+ZNVTv hLzPiLP1IcNzzd2zgX150Hj9wrAluKJ4Arxm0DBkLV1P02ayPNXPYAkjjTOgFp1ODcwf BszxhXXYluaX1Ayxuym+wiGUpwVdhztBKb4Qh3/TqAF9jS2eoHZIMUQurPGppoV9W3ZZ JcpUUyTmv33Kqu8emU7DjwR1mV0k7yFpUAUOQOhrSIbSHgBAPDpGNLQEDnvGOVtncEY2 APiQgjuJbHgWZLZjiRut66B0p2KDiUBeXKxRfA+wHd1VY/x9K8LGY2ZKodcW73j1wiCE idxg== X-Forwarded-Encrypted: i=1; AJvYcCUwZraed29tL4MdrXWb/awV09fzysPVSa+v7sYkh7zgC/dJWbabCb5MAlHIi4Fy+m0ZyhUC3+ASiEDIynA=@vger.kernel.org X-Gm-Message-State: AOJu0Yw25o+v0nRrYXLtoyi7KFHvDj+55/6Eg6QYDU09awxTA2ycT+jb vn/bIDo3nWl2EUjkHMV3RItKkmr+EcATgXTYkdeFuvzLcO3t2fyJGHOfxksIXG3wxg== X-Gm-Gg: ASbGncszA8ZkJzORVQ6TYKeOhdzEf8XsaZsPGG4DJx1DjVQMFnlTpTDjzZWJzrII7W0 2/3LuxL9UQVh8gVHsGYMW5r9mmBP1MLVEUQ/glXJY1TWiweOeeNQEhEIGPMXvXFbJqX1umIPzFa u2AnqjAANEJHEl8PYn3busZVXpystBPg+4uN/qC3eZZ0QY2Njq/0RPrm9cQHU3NXJmm/aWChWIY olNxbjgkVUeOtBxdqvnaTwfkFODwcD+muEdLCQ46u8fWgQO/aq9CnmPIIFv0ojmCseR0oI+TRCu j01HxUuBhhd1vv4xwaB63wtbp9iGCfCBvEIJa8EfFlRBXB2rmwq7Ab3ZtVnhH1JpucSzaTcWSLZ DkC9tMPfr0i8gXdK+lWamzzRjlFG8qqZxxJ0dlit90gIlrwhiBnGQJt8Gn4A//LWSKCMtqPTUry VyraLRlGZyqjHk X-Google-Smtp-Source: AGHT+IGYNymib7YkYpDINQtE5FTKayVP9W8HaNUBBncx14Dot8LXrbwZoz7D11yG6qpiPKpfo0xmbQ== X-Received: by 2002:a05:6512:b27:b0:55f:435e:36bd with SMTP id 2adb3069b0e04-582cd97cc3dmr2187251e87.0.1758892290687; Fri, 26 Sep 2025 06:11:30 -0700 (PDT) Received: from ribalda.c.googlers.com (64.153.228.35.bc.googleusercontent.com. [35.228.153.64]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-58527c6b014sm123872e87.43.2025.09.26.06.11.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Sep 2025 06:11:30 -0700 (PDT) From: Ricardo Ribalda Date: Fri, 26 Sep 2025 13:11:26 +0000 Subject: [PATCH v3 02/12] media: uvcvideo: Set a function for UVC_EXT_GPIO_UNIT 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: <20250926-uvc-orientation-v3-2-6dc2fa5b4220@chromium.org> References: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> In-Reply-To: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> To: Hans de Goede , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Bartosz Golaszewski , "Rafael J. Wysocki" , Len Brown , Robert Moore , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Ricardo Ribalda , stable@vger.kernel.org X-Mailer: b4 0.14.2 All media entities need a proper function. Otherwise a warning is shown in dmesg: uvcvideo 1-1:1.0: Entity type for entity GPIO was not initialized! Please note that changes in virtual entities will not be considered a uAPI change. Cc: stable@vger.kernel.org Fixes: 2886477ff987 ("media: uvcvideo: Implement UVC_EXT_GPIO_UNIT") Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_entity.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc= _entity.c index 3823ac9c8045b3ad8530372fd38983aaafbd775d..ee1007add243036f68b7014ca62= 1813e461fa73d 100644 --- a/drivers/media/usb/uvc/uvc_entity.c +++ b/drivers/media/usb/uvc/uvc_entity.c @@ -85,6 +85,7 @@ static int uvc_mc_init_entity(struct uvc_video_chain *cha= in, break; case UVC_VC_PROCESSING_UNIT: case UVC_VC_EXTENSION_UNIT: + case UVC_EXT_GPIO_UNIT: /* For lack of a better option. */ function =3D MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER; break; @@ -105,7 +106,6 @@ static int uvc_mc_init_entity(struct uvc_video_chain *c= hain, case UVC_OTT_DISPLAY: case UVC_OTT_MEDIA_TRANSPORT_OUTPUT: case UVC_EXTERNAL_VENDOR_SPECIFIC: - case UVC_EXT_GPIO_UNIT: default: function =3D MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN; break; --=20 2.51.0.536.g15c5d4f767-goog From nobody Wed Oct 1 22:26:30 2025 Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) (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 276EE2F616D for ; Fri, 26 Sep 2025 13:11:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892297; cv=none; b=KeYRpLy4zMzbEgy0EYHsM5vuKpGYsE6Qll35p37WwPPDLsgLiEhPIOyuqEeBDT0Sc2vt5ZdxbKX/TdY6EBvzNxrypc1CJIlpOdmT9Rtdq1TMYsVUYRYInRDrDvdBTflMo1CRHPLs5v0A93OzeRcIz4/j8qu90e3sFQmpyYd1/6o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892297; c=relaxed/simple; bh=80G8sSF8+f0UAG0XdkLdvNrCi6HOOZflBRDxb6bYpC4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cB/QtPixRjS1d1+tS7aBaPE9TteXmbJmWVJnpkDjXlcoOXjA/HFzv8cvVedZ1MZJdLfcgFJJk9mTq42nnTOixFxgqO3CN1lNJBGZ3vF9gM9M9MnH1N7yT8dqcoLc+12FPr0tgEQP+xUQlA7+L5jxb2HWpVD1nP/4EPhwQEz3XqY= 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=Ek5B5R6n; arc=none smtp.client-ip=209.85.167.46 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="Ek5B5R6n" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-57edfeaa05aso2333740e87.0 for ; Fri, 26 Sep 2025 06:11:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1758892292; x=1759497092; 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=LO+ZRHeTAK51LRbge1abR5CWq6P2opiI+XHVYGi/IpE=; b=Ek5B5R6n55TSnFKW0GuBypFweQw8X4sOVkixEjA4uyqhsvIn6ccW6DzZmT/t1ZxIpq KV4V0Le5Yd95VxYU1TIFCUhpW5v7iogHPO1YvW182Iee7j/QfExD7vmseSG/CWTsRX+7 g6EV2uP4aswmFDEfn316QTgEvYGOIMVCsu7bg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758892292; x=1759497092; 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=LO+ZRHeTAK51LRbge1abR5CWq6P2opiI+XHVYGi/IpE=; b=tPUGKZNZ0tmIWnZTRvdjL61OqAvs97SK+pybqvZwIASzyso8LRawMmJ9e+LNK2D74I XhXfC6aSOYYFc4ny3xTYS55h912IWmwLuMegZKnkbdDl/ivRgWQqLKAK3bCTswbgjz2z YePLrjb6S7kxRHaNORJiJeFfKUs/0wzChULRMNuE5w5uQJhP/9bx8tLlHli21TSsHy/E GzJRUoBFY/PVbVWoSPqp7xUD2lLw4fpM0HSZgxJNX6HeqVeaZr6trIKk+7+rb4f+3u8P k0yTtTj8RBAOhKFZ04xQRHQ8oaUQvjnw73Wpcvxw/gP6WvpZbpsg3TTvho6LckrmS/s1 eykA== X-Forwarded-Encrypted: i=1; AJvYcCUELlnqc3sChyLe3om1qrLN3gXULbL/xWw1IaSg5vjmnlWAorEP+EDZ38qf9FQ7TryeC3tyW9/ta5Xv1jc=@vger.kernel.org X-Gm-Message-State: AOJu0Yz6GlCa9avD4CNhXmOXDEOIVTRsBx58rTrnMU0rp8F0dBUa6Q4b OnAi3+a7eWgChBGA0YYz/gWM13E+SCSN043FoUHi/X2t+uHYgyY8YwdXpD9d+KpRwV8dcJzY0r9 o2JGdFw== X-Gm-Gg: ASbGncukpbb+9ZKIFmsDa/Gq0X7GVKqNotvwkGxs4rJIR1FzQWVqvy9Mf8ReoOvqUoX XNNxBmDMPDYSiK+QJUkT6OF5lVdKC8Nx7nQiZBDGpBpK1jWvRSlGQ/OcqB3lmDMt1t8obEbkKBU PVqyjis+Tmw4UJoFwL6C9xIZnOePwoCbJevA07uL0ImolFgm49ym4LyCKd/qgqLC+45oTFl9/JE c9FdK46CDbdkK7I2NCl+agFFow1FHewdfzZBioFNASIheaGHH9u0xze1VbAM4baqq+HuzQE2f5+ EtrPOYYwjKwrNoZ71GD+atca+sRqtVnZkEN77U1XQJyNjL5AOeRS7SxjMdoEv9OIeqQ8MM3snXI SEXW33xJjI85BPYqloEfbyyvfsegRe6FoXiBT/JMO8LQdoP0m5iOplmDdH30WhZ/pQdYE3iFN1D NyGg== X-Google-Smtp-Source: AGHT+IEKOz9hLF8FHkWrsyP0/Z6mTRW5uekYu6y0CaJ96qJRiudQJlAsNVVlhQMiizZElwgvlCzXEQ== X-Received: by 2002:a05:6512:b12:b0:57a:310:66a8 with SMTP id 2adb3069b0e04-582d35df2d7mr2404401e87.55.1758892291516; Fri, 26 Sep 2025 06:11:31 -0700 (PDT) Received: from ribalda.c.googlers.com (64.153.228.35.bc.googleusercontent.com. [35.228.153.64]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-58527c6b014sm123872e87.43.2025.09.26.06.11.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Sep 2025 06:11:30 -0700 (PDT) From: Ricardo Ribalda Date: Fri, 26 Sep 2025 13:11:27 +0000 Subject: [PATCH v3 03/12] media: v4l: fwnode: Support ACPI's _PLD for v4l2_fwnode_device_parse 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: <20250926-uvc-orientation-v3-3-6dc2fa5b4220@chromium.org> References: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> In-Reply-To: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> To: Hans de Goede , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Bartosz Golaszewski , "Rafael J. Wysocki" , Len Brown , Robert Moore , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Ricardo Ribalda X-Mailer: b4 0.14.2 Currently v4l2_fwnode_device_parse() obtains the orientation and rotation via fwnode properties. Extend the function to support as well ACPI devices with _PLD info. We give a higher priority to fwnode, because it might contain quirks injected via swnodes. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- drivers/media/v4l2-core/v4l2-fwnode.c | 84 +++++++++++++++++++++++++++++++= +--- 1 file changed, 78 insertions(+), 6 deletions(-) diff --git a/drivers/media/v4l2-core/v4l2-fwnode.c b/drivers/media/v4l2-cor= e/v4l2-fwnode.c index cb153ce42c45d69600a3ec4e59a5584d7e791a2a..4110f64d3277e652473f991fb58= d191862f98eb0 100644 --- a/drivers/media/v4l2-core/v4l2-fwnode.c +++ b/drivers/media/v4l2-core/v4l2-fwnode.c @@ -15,6 +15,7 @@ * Author: Guennadi Liakhovetski */ #include +#include #include #include #include @@ -807,16 +808,69 @@ int v4l2_fwnode_connector_add_link(struct fwnode_hand= le *fwnode, } EXPORT_SYMBOL_GPL(v4l2_fwnode_connector_add_link); =20 -int v4l2_fwnode_device_parse(struct device *dev, - struct v4l2_fwnode_device_properties *props) +static int v4l2_fwnode_device_parse_acpi(struct device *dev, + struct v4l2_fwnode_device_properties *props) +{ + struct acpi_pld_info *pld; + int ret =3D 0; + + if (!is_acpi_device_node(dev_fwnode(dev))) + return 0; + + if (!acpi_get_physical_device_location(ACPI_HANDLE(dev), &pld)) { + acpi_handle_debug(ACPI_HANDLE(dev), "cannot obtain _PLD\n"); + return 0; + } + + if (props->orientation =3D=3D V4L2_FWNODE_PROPERTY_UNSET) { + switch (pld->panel) { + case ACPI_PLD_PANEL_FRONT: + props->orientation =3D V4L2_FWNODE_ORIENTATION_FRONT; + break; + case ACPI_PLD_PANEL_BACK: + props->orientation =3D V4L2_FWNODE_ORIENTATION_BACK; + break; + case ACPI_PLD_PANEL_TOP: + case ACPI_PLD_PANEL_LEFT: + case ACPI_PLD_PANEL_RIGHT: + case ACPI_PLD_PANEL_UNKNOWN: + props->orientation =3D V4L2_FWNODE_ORIENTATION_EXTERNAL; + break; + default: + acpi_handle_warn(ACPI_HANDLE(dev), + "invalid panel %u in _PLD\n", + pld->panel); + ret =3D -EINVAL; + goto done; + } + } + + if (props->rotation =3D=3D V4L2_FWNODE_PROPERTY_UNSET) { + switch (pld->rotation) { + case 0 ... 7: + props->rotation =3D pld->rotation * 45; + break; + default: + acpi_handle_warn(ACPI_HANDLE(dev), + "invalid rotation %u in _PLD\n", + pld->rotation); + ret =3D -EINVAL; + goto done; + } + } + +done: + ACPI_FREE(pld); + return ret; +} + +static int v4l2_fwnode_device_parse_of(struct device *dev, + struct v4l2_fwnode_device_properties *props) { struct fwnode_handle *fwnode =3D dev_fwnode(dev); u32 val; int ret; =20 - memset(props, 0, sizeof(*props)); - - props->orientation =3D V4L2_FWNODE_PROPERTY_UNSET; ret =3D fwnode_property_read_u32(fwnode, "orientation", &val); if (!ret) { switch (val) { @@ -833,7 +887,6 @@ int v4l2_fwnode_device_parse(struct device *dev, dev_dbg(dev, "device orientation: %u\n", val); } =20 - props->rotation =3D V4L2_FWNODE_PROPERTY_UNSET; ret =3D fwnode_property_read_u32(fwnode, "rotation", &val); if (!ret) { if (val >=3D 360) { @@ -847,6 +900,25 @@ int v4l2_fwnode_device_parse(struct device *dev, =20 return 0; } + +int v4l2_fwnode_device_parse(struct device *dev, + struct v4l2_fwnode_device_properties *props) +{ + int ret; + + memset(props, 0, sizeof(*props)); + + props->orientation =3D V4L2_FWNODE_PROPERTY_UNSET; + props->rotation =3D V4L2_FWNODE_PROPERTY_UNSET; + + /* Start by looking into swnodes and DT. */ + ret =3D v4l2_fwnode_device_parse_of(dev, props); + if (ret) + return ret; + + /* Let's check the ACPI table. */ + return v4l2_fwnode_device_parse_acpi(dev, props); +} EXPORT_SYMBOL_GPL(v4l2_fwnode_device_parse); =20 /* --=20 2.51.0.536.g15c5d4f767-goog From nobody Wed Oct 1 22:26:30 2025 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.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 B29EF2F6198 for ; Fri, 26 Sep 2025 13:11:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892298; cv=none; b=qgUkRHg1M/uzHVyV2YpbPXwMcoAK5uEP9STCdIDVk6DdXZ6t+K450MdDbSvCQ0tF1no6lt9v1ZG+Rr/YMDgyX7MbGJKa+aG/HvyEMRWNnhYzXe9gqgTjXAdRm4oLsVySGyr8jzl2S8eDQqjnYPNllGPpBdEjTTI0DvmBhkiz/8k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892298; c=relaxed/simple; bh=8QXukFFdhrRn2peTuBfsWRiyR8y/J2hEQydiLTT8V2I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JgAhD+ZTqjrAL02g0VBHonj+XfH6yHiHhaR42pVoz0GGlxm7h6ozMNI6IfIieAPQyUl0x9S2LmD1fNCZBxyk0J8toCja5VhU6ILDadg5zYqWJviYIuIUqw/Lmu4nNRYlc0cXskq/QRV4GeBG1xc9PNDnB6Sif0FVBWFza46kuZ0= 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=CpOVhZG3; arc=none smtp.client-ip=209.85.167.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="CpOVhZG3" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-579363a4602so2338075e87.0 for ; Fri, 26 Sep 2025 06:11:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1758892292; x=1759497092; 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=+IULFJYV86S6ZpfwTIK6NKFvLB7brLHHTAANiqsCeGE=; b=CpOVhZG3vaxV2fboQSsRh23NrW90eUjXQS6O48r81fKWyQ1M9GO2uGrcKf4PxEg4gX 3I3U4y+P23YYueW78VE2BfMvSvXu39119YNbwseVb2awkxTYYHXQa/kSMzK5NKg5BtXz /mOmJlsI9jEAHUkIPEXIueXJNLkCDwTnc0SG0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758892292; x=1759497092; 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=+IULFJYV86S6ZpfwTIK6NKFvLB7brLHHTAANiqsCeGE=; b=HpAJ7ioZPVEbLbCBLnrfz69cVOeqCyRHXwuzUj6q3JunBHkdrds88AVRkmE61Gi8Yy 9Lx+k6/yWEonD72FzAQalm1O7NOG6dNMILkLNOG+Ns4LuhTjfr2pRkGw5VjRl0A34lkb 3/UBPUT9T/1d54uC1fo4e1KFuMuD5AUpcnpZ+vHDNLigrwn24wK4Oi+DroP6wnQyCuhv YPtuevzoU6xn4XiE923BF7ELYUBxbG8hrLYPMhmeRho8j+C2wh7zBrBM78OFFjs3oO7j OEu8C0J7P3WImaDfiZH2ahIfbIhU7G5iJHVOsH/vSB8gwebNWULttrL1UQxphJWDdAYg M+bw== X-Forwarded-Encrypted: i=1; AJvYcCWlOKCPM4lFi3IC1fvUmRh0IueZdvTgDQVC2WGaysw3JwS2jZCcE+nRy1vZnxja/f9UtLsqwW9DwawInJo=@vger.kernel.org X-Gm-Message-State: AOJu0YwuxqhNhdcThbeULGxwdgq1yWJOacBrZhnsV+xClUTClA3jjj5n faaxTpoYD6t++gTvE9sap2yU8FHgH6tTP925MsoxWW2mlTnsyg6K/xI0eNbDE4M6PQ== X-Gm-Gg: ASbGncsHESz6f168sTjs+oD6VGzJA606XD8B07he3aIwiGeFjBa37dOM+t3zQLsthmt E23EBmQ+oRBoGtTX/StK6bB3QmDPzej5KeHM5rIuaiJ3bFDD2Wywyvh/BsZwEQ8N1vVIlQvcJ68 OWd/RY6AW1hJh+FiP3dEv6bkaG3SO5HUAnEYyTyTa8cEYMJk4di5qnyQt+r7Tq98GKLWAvWmf88 rALfvWQnTbAIRrNthEujbx4BBC8pQdVSyOZ5mo6g8CZZUtZhqqxvyosAMRbQ9zfkYZekFZxkMG2 hEpPuPsj5/4D+HX+eNsVoRuxR0O0+wAlGaQ+LVPnkLT/XCU85qy957XaXflpYSZBx2VRnbnrW9c b2zIOt7vGAXEWv5nDX7BwwrexMzx97UgDmYrN5WMxNNtd/NFoxEAAAnfnBWp1WNgX51Vr8X5Ery UVVK2YIBaLS6qU X-Google-Smtp-Source: AGHT+IE/r2pIJwf7kAuauI+jC65tbRl8WC4I4+SdoNtU43PxQUMr/4vfCOnHocv1AyDV3BygK1ERFA== X-Received: by 2002:a05:6512:2201:b0:570:e55e:47fc with SMTP id 2adb3069b0e04-582d3c9674cmr2179748e87.54.1758892292030; Fri, 26 Sep 2025 06:11:32 -0700 (PDT) Received: from ribalda.c.googlers.com (64.153.228.35.bc.googleusercontent.com. [35.228.153.64]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-58527c6b014sm123872e87.43.2025.09.26.06.11.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Sep 2025 06:11:31 -0700 (PDT) From: Ricardo Ribalda Date: Fri, 26 Sep 2025 13:11:28 +0000 Subject: [PATCH v3 04/12] ACPI: mipi-disco-img: Do not duplicate rotation info into swnodes 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: <20250926-uvc-orientation-v3-4-6dc2fa5b4220@chromium.org> References: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> In-Reply-To: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> To: Hans de Goede , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Bartosz Golaszewski , "Rafael J. Wysocki" , Len Brown , Robert Moore , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Ricardo Ribalda X-Mailer: b4 0.14.2 The function v4l2_fwnode_device_parse() is now capable of parsing the _PLD method, there is no need to duplicate the rotation information in a swnode. Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda Acked-by: Rafael J. Wysocki (Intel) --- drivers/acpi/mipi-disco-img.c | 15 --------------- include/acpi/acpi_bus.h | 1 - 2 files changed, 16 deletions(-) diff --git a/drivers/acpi/mipi-disco-img.c b/drivers/acpi/mipi-disco-img.c index 5b85989f96beeb726f59ac9e12e965a215fb38f6..b58b5ba22a47a4afc5212998074= d322f0b7586dc 100644 --- a/drivers/acpi/mipi-disco-img.c +++ b/drivers/acpi/mipi-disco-img.c @@ -617,21 +617,6 @@ static void init_crs_csi2_swnodes(struct crs_csi2 *csi= 2) =20 adev_fwnode =3D acpi_fwnode_handle(adev); =20 - /* - * If the "rotation" property is not present, but _PLD is there, - * evaluate it to get the "rotation" value. - */ - if (!fwnode_property_present(adev_fwnode, "rotation")) { - struct acpi_pld_info *pld; - - if (acpi_get_physical_device_location(handle, &pld)) { - swnodes->dev_props[NEXT_PROPERTY(prop_index, DEV_ROTATION)] =3D - PROPERTY_ENTRY_U32("rotation", - pld->rotation * 45U); - kfree(pld); - } - } - if (!fwnode_property_read_u32(adev_fwnode, "mipi-img-clock-frequency", &v= al)) swnodes->dev_props[NEXT_PROPERTY(prop_index, DEV_CLOCK_FREQUENCY)] =3D PROPERTY_ENTRY_U32("clock-frequency", val); diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index aad1a95e6863d443a45985ba7ec7be4acf8664fe..296716875a3e7977abb7b7dfa89= f78664aebd61c 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h @@ -389,7 +389,6 @@ struct acpi_gpio_mapping; #define ACPI_DEVICE_SWNODE_PORT_NAME_LENGTH 8 =20 enum acpi_device_swnode_dev_props { - ACPI_DEVICE_SWNODE_DEV_ROTATION, ACPI_DEVICE_SWNODE_DEV_CLOCK_FREQUENCY, ACPI_DEVICE_SWNODE_DEV_LED_MAX_MICROAMP, ACPI_DEVICE_SWNODE_DEV_FLASH_MAX_MICROAMP, --=20 2.51.0.536.g15c5d4f767-goog From nobody Wed Oct 1 22:26:30 2025 Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) (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 14EA12F6590 for ; Fri, 26 Sep 2025 13:11:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892301; cv=none; b=j3vlckvZ0BuMk/CeA7bNVOSyHFtyTj1d/gYf1SzV94fxTBLHTanOPKag6oMDo686bIR6EXeAsAYfWPq3HLY6hRuSh6ox4MyUENpXnKcA0ZMW0iYyJHthwEO1Vl6HrkW+LNx4CKzci8AtIheDtyT1KsZemUwRSr8XGv/necrKPAE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892301; c=relaxed/simple; bh=uQKx1xhIU5eIYcqCEj+wgLYNzIbICgNjQdDV8Jtr5o0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TfulOl1rZzkRjGQWJr/VIAqvF91TlfeF6aFVOOv36RgBtR/Tzomw+x3eK+Jjz3fpXxaMLicrVerhczfHm6y+AOoX0PYzx9YGSsTneFmx+m9GHx8qYOdWFHu7CsBkUmCIqVRZrTwUmDBFYSkuRwFl35/qDuvEMRcb6qJ706gugW4= 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=WIUId/8i; arc=none smtp.client-ip=209.85.167.46 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="WIUId/8i" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-57a604fecb4so2646058e87.1 for ; Fri, 26 Sep 2025 06:11:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1758892293; x=1759497093; 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=LZ2xc23cnAfVOxiaEtcKmtjDZaiDvCUR7nAT9mLWhLU=; b=WIUId/8iT+6SwyIGvX3TRYP4VupuoS0vQG83UY55JuPAK4lj/4jhPJMhCIp7cHPIwh s+ru4i3wDIGi/NSn+UJ7TJF0Rw23gsui1BQL9MqgyJk2o1FPGQQrEgKR8dWyYzzr4JGf bn+VDC1rE7OFfTOIIzoMOZLZeGqSNlDIaX6SY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758892293; x=1759497093; 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=LZ2xc23cnAfVOxiaEtcKmtjDZaiDvCUR7nAT9mLWhLU=; b=tzyq6Gc1MoYe1mq1FaIIi9qZoX+yZq7ru45IzsU1tEZHrP1N9MXMRBJmebWuGORCTu iDvTZ5WZywMrzQJ2eloPtWgs7wrCMlv8mJjlEQSE00plu8KqZK6wshXLfQDjqPin3O51 h8iSbHKxHZky3F25FUmognXvzRmhbEYTI48+ggCfMqNTd8ha8Ag1PIAb5arXynpkBCEw YLv5lDy46IOHLZ09t9OxiKKCAzQEz6Abu66frTWlmUbkA6RBndFwvEwzBfzXBhKRVm6B bnPPE84sVtif4B/D1jH8u5NYs8W+ThdX8ed8N3w5i8HkpHnX9r3PR6MoW6N7G+tPE2hv /bvQ== X-Forwarded-Encrypted: i=1; AJvYcCVD9cTVcwSYuYZUTifn2k8fN1lNpXtPldG87vj1tMzOy/Q58MgN6YF1WV0+LFiYB9eqhPkxB9luMVp3tCU=@vger.kernel.org X-Gm-Message-State: AOJu0YzlbwGDqn6N7ZhM9sp5bDx8/qA6z1MTIxO+9lPzjaTfP0KbFyQs pNTLMW5I7TBZ91Rop9v9FAAtK1SPeeRX5f8S+PH7SS6YEMWqNU9M3cwr7WAPxU6lQQ== X-Gm-Gg: ASbGncuk9w2+RFuk1EFvoi75bHgukFeWwIzzEa8zetURaNgEseSSPPQr8cWgoboNQcY G0IS4Wkl9daC0gcu3gLe4XfhG046ioO1zSB8rIt5R+VHqm6LnIl+SR2fzaDkNErvYbv+INWslIV owq4JoVTsDwCL+5zu1AEftgsRr4Ms8R4ZjoEXKYXq47EcobKQd/yrkUTRC4UUC778AVgCFexV3m WRccvbIUGOapzwErCJCnn/Z8QHAdhAfReoU7kTP8Y6D2iNxcqwpSzTTNBPHWhL1ItRK9/qLCc87 tmsAVybguEqk38S5DEc+srDDQSLM8kB9WUIGFDbS4cL0uinc+qgdToJ/5uB7gIO70nGRZ+eUoRh vfpsvWK3dKUQWu8eD3tFlFglnYfXTNAQNWNEKPBWe8ho1zUodtcrLP2PE+uqlz65VPhOCLwxQkM iMk+gWi9UtwNtH+7CXBDN4jA8= X-Google-Smtp-Source: AGHT+IEc/rDB1XIEkZ7T9M5CIKlYJn+bt+sf74IR95Ks98OS/SI0N6MNxqx7nWfz1ihO3nPV6De8mw== X-Received: by 2002:ac2:4183:0:b0:584:2ad8:7ce3 with SMTP id 2adb3069b0e04-5842ad87e22mr755887e87.22.1758892292551; Fri, 26 Sep 2025 06:11:32 -0700 (PDT) Received: from ribalda.c.googlers.com (64.153.228.35.bc.googleusercontent.com. [35.228.153.64]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-58527c6b014sm123872e87.43.2025.09.26.06.11.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Sep 2025 06:11:32 -0700 (PDT) From: Ricardo Ribalda Date: Fri, 26 Sep 2025 13:11:29 +0000 Subject: [PATCH v3 05/12] media: ipu-bridge: Use v4l2_fwnode_device_parse helper 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: <20250926-uvc-orientation-v3-5-6dc2fa5b4220@chromium.org> References: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> In-Reply-To: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> To: Hans de Goede , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Bartosz Golaszewski , "Rafael J. Wysocki" , Len Brown , Robert Moore , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Ricardo Ribalda X-Mailer: b4 0.14.2 v4l2_fwnode_device_parse now supports ACPI devices as well. Use the helper instead of re-implement the logic. Signed-off-by: Ricardo Ribalda --- drivers/media/pci/intel/Kconfig | 1 + drivers/media/pci/intel/ipu-bridge.c | 42 +++++++++++---------------------= ---- 2 files changed, 14 insertions(+), 29 deletions(-) diff --git a/drivers/media/pci/intel/Kconfig b/drivers/media/pci/intel/Kcon= fig index d9fcddce028bf736557e2c6c289d4f8056d80756..69e3108ba02c4f0bc56b0e26ddc= e9f86775099f6 100644 --- a/drivers/media/pci/intel/Kconfig +++ b/drivers/media/pci/intel/Kconfig @@ -8,6 +8,7 @@ config IPU_BRIDGE tristate "Intel IPU Bridge" depends on ACPI || COMPILE_TEST depends on I2C + select V4L2_FWNODE help The IPU bridge is a helper library for Intel IPU drivers to function on systems shipped with Windows. diff --git a/drivers/media/pci/intel/ipu-bridge.c b/drivers/media/pci/intel= /ipu-bridge.c index 4e579352ab2c0be656576fa223429432940747d8..441d1a5979fe94bee4738da68e1= 85a44dbd411d4 100644 --- a/drivers/media/pci/intel/ipu-bridge.c +++ b/drivers/media/pci/intel/ipu-bridge.c @@ -257,42 +257,22 @@ static u32 ipu_bridge_parse_rotation(struct acpi_devi= ce *adev, } } =20 -static enum v4l2_fwnode_orientation ipu_bridge_parse_orientation(struct ac= pi_device *adev) +static enum v4l2_fwnode_orientation +ipu_bridge_parse_orientation(struct acpi_device *adev, + struct v4l2_fwnode_device_properties *props) { - enum v4l2_fwnode_orientation orientation; - struct acpi_pld_info *pld =3D NULL; - - if (!acpi_get_physical_device_location(ACPI_PTR(adev->handle), &pld)) { - dev_warn(ADEV_DEV(adev), "_PLD call failed, using default orientation\n"= ); + if (props->orientation =3D=3D V4L2_FWNODE_PROPERTY_UNSET) { + acpi_handle_warn(acpi_device_handle(adev), + "Using default orientation\n"); return V4L2_FWNODE_ORIENTATION_EXTERNAL; } =20 - switch (pld->panel) { - case ACPI_PLD_PANEL_FRONT: - orientation =3D V4L2_FWNODE_ORIENTATION_FRONT; - break; - case ACPI_PLD_PANEL_BACK: - orientation =3D V4L2_FWNODE_ORIENTATION_BACK; - break; - case ACPI_PLD_PANEL_TOP: - case ACPI_PLD_PANEL_LEFT: - case ACPI_PLD_PANEL_RIGHT: - case ACPI_PLD_PANEL_UNKNOWN: - orientation =3D V4L2_FWNODE_ORIENTATION_EXTERNAL; - break; - default: - dev_warn(ADEV_DEV(adev), "Unknown _PLD panel val %d\n", - pld->panel); - orientation =3D V4L2_FWNODE_ORIENTATION_EXTERNAL; - break; - } - - ACPI_FREE(pld); - return orientation; + return props->orientation; } =20 int ipu_bridge_parse_ssdb(struct acpi_device *adev, struct ipu_sensor *sen= sor) { + struct v4l2_fwnode_device_properties props; struct ipu_sensor_ssdb ssdb =3D {}; int ret; =20 @@ -300,6 +280,10 @@ int ipu_bridge_parse_ssdb(struct acpi_device *adev, st= ruct ipu_sensor *sensor) if (ret) return ret; =20 + ret =3D v4l2_fwnode_device_parse(ADEV_DEV(adev), &props); + if (ret) + return ret; + if (ssdb.vcmtype > ARRAY_SIZE(ipu_vcm_types)) { dev_warn(ADEV_DEV(adev), "Unknown VCM type %d\n", ssdb.vcmtype); ssdb.vcmtype =3D 0; @@ -314,7 +298,7 @@ int ipu_bridge_parse_ssdb(struct acpi_device *adev, str= uct ipu_sensor *sensor) sensor->lanes =3D ssdb.lanes; sensor->mclkspeed =3D ssdb.mclkspeed; sensor->rotation =3D ipu_bridge_parse_rotation(adev, &ssdb); - sensor->orientation =3D ipu_bridge_parse_orientation(adev); + sensor->orientation =3D ipu_bridge_parse_orientation(adev, &props); =20 if (ssdb.vcmtype) sensor->vcm_type =3D ipu_vcm_types[ssdb.vcmtype - 1]; --=20 2.51.0.536.g15c5d4f767-goog From nobody Wed Oct 1 22:26: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 4B7AB2F8BD0 for ; Fri, 26 Sep 2025 13:11:36 +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=1758892304; cv=none; b=mN90fwjbZir+krFPvqoZJFo/ii3cqZW2RHfloE+c+eGFAxyYwH+8yEm+xrEI8rpwqBLdsMP7ffIOit+crzaZpfa0PwO0G+fALYFaRYMB1SH2b1jaK3F+5g/LesaRFAfMKbattNEm6LW1iKDXG9crfnuUHirjFVrOHNS3MLtes5M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892304; c=relaxed/simple; bh=747DSL3/0b26gMfctw9GAJQ4wcs8qWL90knTYpPv+GE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e7RrjVwWQqNbwBJyAiZBZN59u7FB4HKEDbIWodpmZaxLIQt36YOqTJ5wJ+wdoVvMDuE/OXWqogzfRWIPvmUcjvIk308HHJDJzTcGyHeWW0idBMYS+cSsul92dyEuYsJ4EqrRFqaNQw5NXFmjX1iAV99BZ+38mnyMaPWIstmewqY= 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=MEdFAQ1S; 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="MEdFAQ1S" Received: by mail-lf1-f41.google.com with SMTP id 2adb3069b0e04-57a604fecb4so2646070e87.1 for ; Fri, 26 Sep 2025 06:11:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1758892293; x=1759497093; 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=PEFN0lLdAUAhxOrw8NBMU68FYdHDfoPQjtv/CBRcNWg=; b=MEdFAQ1S/grHZMhcCO6tE2MJcK4ibjWaeuhsoYyuBn71UUcnUC/shY5ocmLp/qu7WP 7okYhCuXdM2bbt6BvNRcorf2eaEw8bYT5GfWfnogq8O28zLjMWCbeVbc5r+A5z91fMDr LpswgYv+M4HDBm0DOXhHwb1oqtph27Tu0Jodw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758892293; x=1759497093; 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=PEFN0lLdAUAhxOrw8NBMU68FYdHDfoPQjtv/CBRcNWg=; b=YLrpmP7Vi31ECWqGpi63bVKJluPSU3gqz7rw2pwL3u6TmkoB3hI7hQd8vrnh/o+Lfn 0EeNJBFnKjZSTe6qA3vB7pwNEeqFp1ijZHeDdKk+jMiQ0DusqgpoOlcsHpgQQrqDnN5C ZnSeu9O0gBax1X6fOnNPoCeQqRs2XdHcRLPx3SJ6G0ftO62Cds8W99rBCPBav86RLqOb kvtbKI/CsWxIOuQc2w87s8+qqXCdpgOmIAZqml6hq0NkyobAMTj14BgMT7BUpkkV1uKj qqxyJQwrauA+WfD6ngK8gmR3FQHYKbJjIGvyyCEb+/BoVDMuqpJdJJjTjWXhXB8xxSl+ U/dQ== X-Forwarded-Encrypted: i=1; AJvYcCV/pHtVIDQOb99XngGNDTvBkGvDf7oM6X6rSZT4q+HKYT2hcJPy1FVspoqd5wBoVrFc4sAiu0JPIQSiySY=@vger.kernel.org X-Gm-Message-State: AOJu0YwUqMBEpFoED4uJkkqq2tfYfeXZWHU9Oqh0dMnuF6Ah4ptDUVYW PuWQWbe0puyLuV2sRjWn1JAyCGftdrMLHsrE813n1BRpKBhZcrTcQpgTfb9ex4KShA== X-Gm-Gg: ASbGncuzt8VgGso1ZBdfl5p4/sr6caPHg4rSKqie0mLrLLJ3Hplun7N27QDC3/1fEA0 ONCtFuGziuZ0wP9ZaVHl3VwmRtoExLuDyM6Qj85KkPzffKIWIAtyTEWJF31s7/pJlC5VPQzSS3K 8UaA+WnXpe3NNBISFcxRdC+wAWPLQMBwoLs/Ax9eKnV7/ppXKR/xH3L60Li3pAg/BbSeL+ppstb XKiV4Y2mKr1+ujwLF+V1TyB40fLNDbXwvgV3dYDnv/qco7vtp3qwCVoHJbvMQDqeeptbfCyEL/6 IOwSLPUaCM21C67ymE6gL2mQOEOLkJ7q++cKTcYviRzwWAj5faOw+lDgyQH/L1TxVwxAVoYjk7S fbfWSTZphvXS6Hw0fDosaePi5Zol3raZlc0+swLEbfe68F+3vZgmKwfDX6J30SnnB/jdcKVxHOW 5dgQ== X-Google-Smtp-Source: AGHT+IHoXncX6KzHuffRNxD1bdNRByMLtGFUXJU+Vx+pJpeCHx/eyFalgZtv/Aq9A8oN/XwwQ6kRbA== X-Received: by 2002:a05:6512:e9e:b0:563:d896:2d14 with SMTP id 2adb3069b0e04-582d2b4cb9amr2443275e87.36.1758892293127; Fri, 26 Sep 2025 06:11:33 -0700 (PDT) Received: from ribalda.c.googlers.com (64.153.228.35.bc.googleusercontent.com. [35.228.153.64]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-58527c6b014sm123872e87.43.2025.09.26.06.11.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Sep 2025 06:11:32 -0700 (PDT) From: Ricardo Ribalda Date: Fri, 26 Sep 2025 13:11:30 +0000 Subject: [PATCH v3 06/12] media: ipu-bridge: Use v4l2_fwnode for unknown rotations 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: <20250926-uvc-orientation-v3-6-6dc2fa5b4220@chromium.org> References: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> In-Reply-To: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> To: Hans de Goede , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Bartosz Golaszewski , "Rafael J. Wysocki" , Len Brown , Robert Moore , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Ricardo Ribalda X-Mailer: b4 0.14.2 The v4l2_fwnode_device_properties contains information about the rotation. Use it if the ssdb data is inconclusive. Signed-off-by: Ricardo Ribalda --- drivers/media/pci/intel/ipu-bridge.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/media/pci/intel/ipu-bridge.c b/drivers/media/pci/intel= /ipu-bridge.c index 441d1a5979fe94bee4738da68e185a44dbd411d4..6155046ef4fc6b5d074194d1b81= 13212304136bc 100644 --- a/drivers/media/pci/intel/ipu-bridge.c +++ b/drivers/media/pci/intel/ipu-bridge.c @@ -242,19 +242,23 @@ static int ipu_bridge_read_acpi_buffer(struct acpi_de= vice *adev, char *id, } =20 static u32 ipu_bridge_parse_rotation(struct acpi_device *adev, - struct ipu_sensor_ssdb *ssdb) + struct ipu_sensor_ssdb *ssdb, + struct v4l2_fwnode_device_properties *props) { + if (props->rotation !=3D V4L2_FWNODE_PROPERTY_UNSET) + return props->rotation; + switch (ssdb->degree) { case IPU_SENSOR_ROTATION_NORMAL: return 0; case IPU_SENSOR_ROTATION_INVERTED: return 180; - default: - dev_warn(ADEV_DEV(adev), + } + + acpi_handle_warn(acpi_device_handle(adev), "Unknown rotation %d. Assume 0 degree rotation\n", ssdb->degree); - return 0; - } + return 0; } =20 static enum v4l2_fwnode_orientation @@ -297,7 +301,7 @@ int ipu_bridge_parse_ssdb(struct acpi_device *adev, str= uct ipu_sensor *sensor) sensor->link =3D ssdb.link; sensor->lanes =3D ssdb.lanes; sensor->mclkspeed =3D ssdb.mclkspeed; - sensor->rotation =3D ipu_bridge_parse_rotation(adev, &ssdb); + sensor->rotation =3D ipu_bridge_parse_rotation(adev, &ssdb, &props); sensor->orientation =3D ipu_bridge_parse_orientation(adev, &props); =20 if (ssdb.vcmtype) --=20 2.51.0.536.g15c5d4f767-goog From nobody Wed Oct 1 22:26: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 4641A2F999F for ; Fri, 26 Sep 2025 13:11:37 +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=1758892307; cv=none; b=EYdd65S8+neGLI5MV/gd3HKaBPHEHH5m6pC3NLIAaHoXcQTaqFrgYKSuT1KxFxoZkqG/ke1IdYR5FaQNet4GfguKg5RQsy0qxaKNHSOIeWId+kaT3WcTVxLE2ULYEVxtPX4C1GC6eFXxGXZmCXvGioL06/d10oXSgO6NcDVGJfQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892307; c=relaxed/simple; bh=7+uj94r/7LeT/xAkBfTGJ8aSRCSPNzAL0fCA+D8DD2o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gEA4Rlp6L2wHKw/lzDyuy57td7XlK1Dqw7KhZbijYMH3ar6Ku7KSp9T6y36xpWISSCUUInceuMUHNaq/dM2ksn8vQwgNPSqWwBZw/ZWP4+yEbmoH+gnS2tJDJE4LCvpQEJ0yVlpLrp6EGCQkxnp+5iF0msfHIqWO3xto2j4cL2Y= 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=BmGX5Z0P; 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="BmGX5Z0P" Received: by mail-lf1-f53.google.com with SMTP id 2adb3069b0e04-57bf912cbf6so2406237e87.3 for ; Fri, 26 Sep 2025 06:11:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1758892294; x=1759497094; 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=aCy6Bk8e0KycgUL3e8TXrZ2btc+fiyl+rPdd78IS8Is=; b=BmGX5Z0PvX78ztmXsmk/MgO7YHO5kshdUTFo6L3WtxQhR3b37olVG9YSfVpI3QmYAI EhK0fDcsUSUO3HgE8vLcFK4A664M8X+Bzz0LHtyT64tXMPIS3PsEW6oAJDGLJiSNZl7E dXCAQzyq95/E8D537XqgOO3WqhOEOUoH1rkh8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758892294; x=1759497094; 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=aCy6Bk8e0KycgUL3e8TXrZ2btc+fiyl+rPdd78IS8Is=; b=AGoOJkhWFlitBVdDPnvIOycCMl0plwRXNHY+r3pH9whc38cC7aCruByopG9a9eVRzJ DgtBYkYgxRqZp0vr6Kwf6q1SVanI049JgN3TS84QsO959o2T9dXKnl5CRCJ/zRt0A+By 8Aggl62iLRKOpu2Lh4jhA3QVhsy90JubZLRQdgxMpDexipHWbz6hykeBrc4YGmSTas0O aVQUC7ZZAYJsNp2WPxtaRH970mpmP6P4n4Ox2bgP5hhNhTIXu0Acual7JB98Y7BafVkD rE0Uq/fBCWRqEbGQgQmCwocW2l5HqQYri0Vn+UZpZ7PvLmOsf/SBjiQHPzdMbw2mLSCq Vgig== X-Forwarded-Encrypted: i=1; AJvYcCVFgKofj69lhp8JXSgqLn4HDdLK+zl/pYHi0TCgZVEd7Ku2In4XrL4ECM7EvIcQCF1Vs6R+ynXuovtm0VU=@vger.kernel.org X-Gm-Message-State: AOJu0Yya9TVPt+EpraRJE+WQLp6triZCJre02Ozju2GFkRga5hWJsllM dXQQVW4y84/O/uck1XgII8GM5FCZZQr5MJTMSjcl6sTrGgIMGwc7hv3Z7aE7CItTzA== X-Gm-Gg: ASbGncsMBf7F25ops9HK1SM6jQI16scqc0HzpXfMjv8Qq3G8J2QGOb3OGNmhFVYMUk1 IJNyINxfo+xNoVQT5iK38Wv1V5h0vrZXRnIr7nBfOMqT8fRT4KX0ZBMcfOgRm93Y4sADT/qhOmJ qbj2ktkJIBtZXr8OI06fHvONQ9lp2TNfyXmw6KbQ4MzS9ZL0N2ASC2wVM+Clv5A/4koHK63Kwb+ ce8PF1FF6LKk4cozr8chqurB8NRyWvdj5612WtOWzuO/EKkOK+4q6b9FSjENri5fOhJmM/BTyk8 BJVKNkSnzAl44AbhvPs5T8CQbhXYaZGLBN/7/61YvU2a4q8wkytzlzy2EutNxeb7MQart1Y/Lve 8gHErnzOV3jdc91ULqq2Q1807GPtYO+LMnC8+UK5+68AZKiqMqpSfmVdTIql/0TdzD0hMK3wPhI adEg== X-Google-Smtp-Source: AGHT+IFSULi7NpOrywI1NGNOQUbBJbkaKZRrtRNyEnHKO4o1kB5FT5TGBNkhNPYRfI8ePxwjL+x0fg== X-Received: by 2002:a05:6512:15a9:b0:57a:2be1:d773 with SMTP id 2adb3069b0e04-582d406b8a4mr1982976e87.53.1758892293940; Fri, 26 Sep 2025 06:11:33 -0700 (PDT) Received: from ribalda.c.googlers.com (64.153.228.35.bc.googleusercontent.com. [35.228.153.64]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-58527c6b014sm123872e87.43.2025.09.26.06.11.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Sep 2025 06:11:33 -0700 (PDT) From: Ricardo Ribalda Date: Fri, 26 Sep 2025 13:11:31 +0000 Subject: [PATCH v3 07/12] dt-bindings: media: Add usb-camera-module 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: <20250926-uvc-orientation-v3-7-6dc2fa5b4220@chromium.org> References: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> In-Reply-To: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> To: Hans de Goede , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Bartosz Golaszewski , "Rafael J. Wysocki" , Len Brown , Robert Moore , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Ricardo Ribalda X-Mailer: b4 0.14.2 For fixed cameras modules the OS needs to know where they are mounted. This information is used to determine if images need to be rotated or not. ACPI has a property for this purpose, which is parsed by acpi_get_physical_device_location(): https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/06_Device_Configuration/Devic= e_Configuration.html#pld-physical-location-of-device In DT we have similar properties for video-interface-devices called orientation and rotation: Documentation/devicetree/bindings/media/video-interface-devices.yaml Add a new schema that combines usb/usb-device.yaml and media/video-interface-devices.yaml Signed-off-by: Ricardo Ribalda --- .../bindings/media/usb-camera-module.yaml | 46 ++++++++++++++++++= ++++ MAINTAINERS | 1 + 2 files changed, 47 insertions(+) diff --git a/Documentation/devicetree/bindings/media/usb-camera-module.yaml= b/Documentation/devicetree/bindings/media/usb-camera-module.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e4ad6f557b9151751522e49b72a= e6584deb0c7ba --- /dev/null +++ b/Documentation/devicetree/bindings/media/usb-camera-module.yaml @@ -0,0 +1,46 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/media/usb-camera-module.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: USB Camera Module + +maintainers: + - Ricardo Ribalda + +description: | + This schema allows for annotating auxiliary information for fixed camera + modules. This information enables the system to determine if incoming fr= ames + require rotation, mirroring, or other transformations. It also describes= the + module's relationship with other hardware elements, such as flash LEDs or + Voice Coil Motors (VCMs). + +allOf: + - $ref: /schemas/usb/usb-device.yaml# + - $ref: /schemas/media/video-interface-devices.yaml# + +properties: + reg: + maxItems: 1 + +required: + - reg + +additionalProperties: true + +examples: + - | + usb@11270000 { + reg =3D <0x11270000 0x1000>; + interrupts =3D <0x0 0x4e 0x0>; + #address-cells =3D <1>; + #size-cells =3D <0>; + + device@1 { + compatible =3D "usb123,4567"; + reg =3D <2>; + orientation =3D <0>; + rotation =3D <90>; + }; + }; diff --git a/MAINTAINERS b/MAINTAINERS index ee8cb2db483f6a5e96b62b6f2edd05b1427b69f5..1503502a3aed2625e8ff488456c= cd7305cc74ba7 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -26258,6 +26258,7 @@ L: linux-media@vger.kernel.org S: Maintained W: http://www.ideasonboard.org/uvc/ T: git git://linuxtv.org/media.git +F: Documentation/devicetree/bindings/media/usb-camera-module.yaml F: Documentation/userspace-api/media/drivers/uvcvideo.rst F: Documentation/userspace-api/media/v4l/metafmt-uvc-msxu-1-5.rst F: Documentation/userspace-api/media/v4l/metafmt-uvc.rst --=20 2.51.0.536.g15c5d4f767-goog From nobody Wed Oct 1 22:26:30 2025 Received: from mail-lf1-f44.google.com (mail-lf1-f44.google.com [209.85.167.44]) (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 E8F8C2F7AB8 for ; Fri, 26 Sep 2025 13:11:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892306; cv=none; b=dZuekbqhTvwC1zcmFUWwGlVxnPp1Vt6YFpQhgtayYekm/ZgfhKzG+NBvLZEfp0+PcdsUAcs169vHq60vuDTNqiMQ0sJAiR2KwqTLWONuLvASJmsoCz46f62nPJv4ssHIEaMH9xE4wTyvm8p8hO32nqi2YE5tRs0tPXQ3eA2FCQ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892306; c=relaxed/simple; bh=0RIh4sUDiZBXgZTKOmEK1Orq2YrtKqmiRHFViDVMTyY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C+fdjZy2Zl7Ta7vRbSgpt0fGk+MkFOEz6ilKZQ19ZtNxubcx+73Og3rwYUK1IbJ4uwJqFL17XP1v+WecIVotPJvOgAzcPHq1YZIRLWILc1lUkV625f6G/AEtx9mc7jYLdjz+0zvXAaYZPHzTkvyCGrLSTrQ23+ofCSxzEBpCZ9k= 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=Jp31ks4m; arc=none smtp.client-ip=209.85.167.44 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="Jp31ks4m" Received: by mail-lf1-f44.google.com with SMTP id 2adb3069b0e04-57f1b88354eso2214477e87.1 for ; Fri, 26 Sep 2025 06:11:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1758892295; x=1759497095; 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=pYyVOOG6RRM8nz0iAqyuD1/OPjUMPsAlYF5n8yOgLvk=; b=Jp31ks4mL7Ki0Npp/5ZfQsr+IueaUcOc309+knHt8jGeIvlcRAdwUedGXvAsVfDL7j LPreeYzbSYHna3R0SRcMw8ywRZGlKh/Ipie0kesevaWw9zmntZF0O0qa43fHBPsTho7m ExqS+8xGgE/63cwWiGX9yGnVN9V7cBtqTm1Ck= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758892295; x=1759497095; 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=pYyVOOG6RRM8nz0iAqyuD1/OPjUMPsAlYF5n8yOgLvk=; b=t4OU3DhxrpbTIzemsig9LCpwzo1nbM3+vLXp+dGhAdL+AaKBq/gVhWsiquLCjOhCcE GiRHKmKFQAPntN3y3G6IBqQmnRt7pTbKTLDNhQiaDXKxIjChZS6yL8ORkXwSCTBoYgr2 VOkbPfHfU0ZrThTGlk2aDUAe19HzO/zexPUp9B2mGpgdpyy3neWgRtmrBa9U29bOKuCR PmC5giwt4lVEnAlX+5fU77ofkuIn3oxA54tIpjRUkOIFwleED5biNx3Yhkteea19EeR1 L5OaftRMHMel/ipPXEJxZ8sbMN3WWYzSIkrHZOSAcyXnsJBMJJqhAfvHst74zyka1Bb8 J8vw== X-Forwarded-Encrypted: i=1; AJvYcCWadyb36VWwR9fjVi/jZXUlQy7uSVZiGEaQywVFyVugeZ6ehhH7LNIpkBy7UOBVwFqQGW2AYupPyBJWS/c=@vger.kernel.org X-Gm-Message-State: AOJu0Yz6T/5AFBKfvABFoDo7I8rIFHQ5qzgu+vDKyFkXA1SGlVNe8QSo WUHpe6kgpweDHKzo531zDjnlPFCtiXKJtXszhe6OWuJpZQRNuL2SIEkuhNeMBwClqA== X-Gm-Gg: ASbGncvBhoL7madsFmpmv9RtFC0jDD0edq33wjzTwj/LVZegpPwOFUE2P2iY4z5+gRE lLNTzo2itT2TMWFbk0oIfgbFHL90URCVmcUCmK8En2J8etkrcu+jK+osuKaDgprBWs5TvA1Rc4I aF+r9iBRBCg/2CAtiIZ2HSc29MWk0GY6ZitqVgLZ3HyAMW0U1EkGJKtEvrQV8mUfogDJ7kSQs3n mjFdWxNyzFmQYw+F1kSDkJns+8RJj7roYQ+TKHi4F++8WVgotidvCwtvcyDmBkCFuPOH5WrYQvj F2Lu+dakluAs4pBJpDVtk96LPH7M9ZialYdo2ClrGiJ9V5PVfMpAunTl3iPw6w2hALeT6WJv2AQ 3mr9x45M3fC+ksjfEIQAq0j1IDLAQCBl0h5/FQX7umzfCCEPFlG4a3+tlad4ayyJPLZVzl2IB+s rxEQ== X-Google-Smtp-Source: AGHT+IGpDWvtokITIA2zTptMNOmw/ZYaGZaFcnmGwqV7Ib3ziWjeQpXNcwBL/nnOmUeOfVGug4KhQg== X-Received: by 2002:a05:6512:220d:b0:577:494e:ca63 with SMTP id 2adb3069b0e04-582d0740473mr2291049e87.12.1758892294482; Fri, 26 Sep 2025 06:11:34 -0700 (PDT) Received: from ribalda.c.googlers.com (64.153.228.35.bc.googleusercontent.com. [35.228.153.64]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-58527c6b014sm123872e87.43.2025.09.26.06.11.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Sep 2025 06:11:34 -0700 (PDT) From: Ricardo Ribalda Date: Fri, 26 Sep 2025 13:11:32 +0000 Subject: [PATCH v3 08/12] media: uvcvideo: Add support for V4L2_CID_CAMERA_ORIENTATION 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: <20250926-uvc-orientation-v3-8-6dc2fa5b4220@chromium.org> References: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> In-Reply-To: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> To: Hans de Goede , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Bartosz Golaszewski , "Rafael J. Wysocki" , Len Brown , Robert Moore , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Ricardo Ribalda X-Mailer: b4 0.14.2 Fetch the orientation from the fwnode and map it into a control. The uvc driver does not use the media controller, so we need to create a software entity, like we previously did with the external gpio. We do not re-purpose the external gpio entity because its is planned to remove it. We need to make uvc_alloc_entity non static. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/Kconfig | 1 + drivers/media/usb/uvc/Makefile | 3 +- drivers/media/usb/uvc/uvc_ctrl.c | 21 ++++++++++ drivers/media/usb/uvc/uvc_driver.c | 22 +++++++---- drivers/media/usb/uvc/uvc_entity.c | 1 + drivers/media/usb/uvc/uvc_swentity.c | 76 ++++++++++++++++++++++++++++++++= ++++ drivers/media/usb/uvc/uvcvideo.h | 17 ++++++++ include/linux/usb/uvc.h | 3 ++ 8 files changed, 135 insertions(+), 9 deletions(-) diff --git a/drivers/media/usb/uvc/Kconfig b/drivers/media/usb/uvc/Kconfig index 579532272fd6d7a8ef65c1a3a892b723f40e584e..65f9cf81c8f434c50910db0ae94= 788af182eb4c4 100644 --- a/drivers/media/usb/uvc/Kconfig +++ b/drivers/media/usb/uvc/Kconfig @@ -4,6 +4,7 @@ config USB_VIDEO_CLASS depends on VIDEO_DEV select VIDEOBUF2_VMALLOC select UVC_COMMON + select V4L2_FWNODE help Support for the USB Video Class (UVC). Currently only video input devices, such as webcams, are supported. diff --git a/drivers/media/usb/uvc/Makefile b/drivers/media/usb/uvc/Makefile index 4f9eee4f81ab6436a8b90324a688a149b2c3bcd1..b4398177c4bb0a9bd49dfd4ca7f= 2e933b4a1d7df 100644 --- a/drivers/media/usb/uvc/Makefile +++ b/drivers/media/usb/uvc/Makefile @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 uvcvideo-objs :=3D uvc_driver.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_ct= rl.o \ - uvc_status.o uvc_isight.o uvc_debugfs.o uvc_metadata.o + uvc_status.o uvc_isight.o uvc_debugfs.o uvc_metadata.o \ + uvc_swentity.o ifeq ($(CONFIG_MEDIA_CONTROLLER),y) uvcvideo-objs +=3D uvc_entity.o endif diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index a869257e9b7c07eaa7d725d107bd1cb57d3c7377..aa9de84de9236540c46ee78fb84= 58873d503786e 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -385,6 +385,13 @@ static const struct uvc_control_info uvc_ctrls[] =3D { | UVC_CTRL_FLAG_GET_RANGE | UVC_CTRL_FLAG_RESTORE, }, + { + .entity =3D UVC_GUID_SWENTITY, + .selector =3D 0, + .index =3D 0, + .size =3D 1, + .flags =3D UVC_CTRL_FLAG_GET_CUR, + }, }; =20 static const u32 uvc_control_classes[] =3D { @@ -1009,6 +1016,17 @@ static const struct uvc_control_mapping uvc_ctrl_map= pings[] =3D { .menu_mask =3D BIT(V4L2_COLORFX_VIVID) | BIT(V4L2_COLORFX_NONE), }, + { + .id =3D V4L2_CID_CAMERA_ORIENTATION, + .entity =3D UVC_GUID_SWENTITY, + .selector =3D 0, + .size =3D 8, + .offset =3D 0, + .v4l2_type =3D V4L2_CTRL_TYPE_MENU, + .data_type =3D UVC_CTRL_DATA_TYPE_ENUM, + .menu_mask =3D GENMASK(V4L2_CAMERA_ORIENTATION_EXTERNAL, + V4L2_CAMERA_ORIENTATION_FRONT), + }, }; =20 /* ------------------------------------------------------------------------ @@ -3281,6 +3299,9 @@ static int uvc_ctrl_init_chain(struct uvc_video_chain= *chain) } else if (UVC_ENTITY_TYPE(entity) =3D=3D UVC_EXT_GPIO_UNIT) { bmControls =3D entity->gpio.bmControls; bControlSize =3D entity->gpio.bControlSize; + } else if (UVC_ENTITY_TYPE(entity) =3D=3D UVC_SWENTITY_UNIT) { + bmControls =3D entity->swentity.bmControls; + bControlSize =3D entity->swentity.bControlSize; } =20 /* Remove bogus/blacklisted controls */ diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc= _driver.c index fa61f1d0ea2c3d52c560b2f0834e52ca75c4227e..91edc7703b1987d8dfd552999ed= bdbf1b4653f3f 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -794,9 +794,9 @@ static const u8 uvc_media_transport_input_guid[16] =3D UVC_GUID_UVC_MEDIA_TRANSPORT_INPUT; static const u8 uvc_processing_guid[16] =3D UVC_GUID_UVC_PROCESSING; =20 -static struct uvc_entity *uvc_alloc_new_entity(struct uvc_device *dev, u16= type, - u16 id, unsigned int num_pads, - unsigned int extra_size) +struct uvc_entity *uvc_alloc_new_entity(struct uvc_device *dev, u16 type, + u16 id, unsigned int num_pads, + unsigned int extra_size) { struct uvc_entity *entity; unsigned int num_inputs; @@ -1887,12 +1887,14 @@ static int uvc_scan_device(struct uvc_device *dev) return -ENODEV; } =20 - /* Add GPIO entity to the first chain. */ - if (dev->gpio_unit) { - chain =3D list_first_entry(&dev->chains, - struct uvc_video_chain, list); + /* Add virtual entities to the first chain. */ + chain =3D list_first_entry(&dev->chains, struct uvc_video_chain, list); + + if (dev->gpio_unit) list_add_tail(&dev->gpio_unit->chain, &chain->entities); - } + + if (dev->swentity_unit) + list_add_tail(&dev->swentity_unit->chain, &chain->entities); =20 return 0; } @@ -2244,6 +2246,10 @@ static int uvc_probe(struct usb_interface *intf, if (ret < 0) goto error; =20 + ret =3D uvc_swentity_init(dev); + if (ret < 0) + goto error; + dev_info(&dev->intf->dev, "Found UVC %u.%02x device %s (%04x:%04x)\n", dev->uvc_version >> 8, dev->uvc_version & 0xff, udev->product ? udev->product : "", diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc= _entity.c index ee1007add243036f68b7014ca621813e461fa73d..d5125fdd829a7e11f7083762531= f811069e0e43f 100644 --- a/drivers/media/usb/uvc/uvc_entity.c +++ b/drivers/media/usb/uvc/uvc_entity.c @@ -86,6 +86,7 @@ static int uvc_mc_init_entity(struct uvc_video_chain *cha= in, case UVC_VC_PROCESSING_UNIT: case UVC_VC_EXTENSION_UNIT: case UVC_EXT_GPIO_UNIT: + case UVC_SWENTITY_UNIT: /* For lack of a better option. */ function =3D MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER; break; diff --git a/drivers/media/usb/uvc/uvc_swentity.c b/drivers/media/usb/uvc/u= vc_swentity.c new file mode 100644 index 0000000000000000000000000000000000000000..eefc5d08e370515181f74590f2f= 38189770b01b2 --- /dev/null +++ b/drivers/media/usb/uvc/uvc_swentity.c @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * uvc_swentity.c -- USB Video Class driver + * + * Copyright 2025 Google LLC + */ + +#include +#include + +#include + +#include "uvcvideo.h" + +static int uvc_swentity_get_cur(struct uvc_device *dev, struct uvc_entity = *entity, + u8 cs, void *data, u16 size) +{ + if (size < 1) + return -EINVAL; + + switch (entity->swentity.props.orientation) { + case V4L2_FWNODE_ORIENTATION_FRONT: + *(u8 *)data =3D V4L2_CAMERA_ORIENTATION_FRONT; + break; + case V4L2_FWNODE_ORIENTATION_BACK: + *(u8 *)data =3D V4L2_CAMERA_ORIENTATION_BACK; + break; + default: + *(u8 *)data =3D V4L2_CAMERA_ORIENTATION_EXTERNAL; + } + + return 0; +} + +static int uvc_swentity_get_info(struct uvc_device *dev, + struct uvc_entity *entity, u8 cs, u8 *caps) +{ + *caps =3D UVC_CONTROL_CAP_GET; + return 0; +} + +int uvc_swentity_init(struct uvc_device *dev) +{ + static const u8 uvc_swentity_guid[] =3D UVC_GUID_SWENTITY; + struct v4l2_fwnode_device_properties props; + struct uvc_entity *unit; + int ret; + + ret =3D v4l2_fwnode_device_parse(&dev->udev->dev, &props); + if (ret) + return dev_err_probe(&dev->intf->dev, ret, + "Can't parse fwnode\n"); + + if (props.orientation =3D=3D V4L2_FWNODE_PROPERTY_UNSET) + return 0; + + unit =3D uvc_alloc_new_entity(dev, UVC_SWENTITY_UNIT, + UVC_SWENTITY_UNIT_ID, 0, 1); + if (!unit) + return -ENOMEM; + + memcpy(unit->guid, uvc_swentity_guid, sizeof(unit->guid)); + unit->swentity.props =3D props; + unit->swentity.bControlSize =3D 1; + unit->swentity.bmControls =3D (u8 *)unit + sizeof(*unit); + unit->swentity.bmControls[0] =3D 1; + unit->get_cur =3D uvc_swentity_get_cur; + unit->get_info =3D uvc_swentity_get_info; + strscpy(unit->name, "SWENTITY", sizeof(unit->name)); + + list_add_tail(&unit->list, &dev->entities); + + dev->swentity_unit =3D unit; + + return 0; +} diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 24292efbe47d3cd440252afb85ecbc826e2eedc1..04ca5dcce11d902dbfdf32f2a96= 2159ba7940a39 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -18,6 +18,7 @@ #include #include #include +#include #include =20 /* -----------------------------------------------------------------------= --- @@ -38,6 +39,9 @@ (UVC_ENTITY_IS_TERM(entity) && \ ((entity)->type & 0x8000) =3D=3D UVC_TERM_OUTPUT) =20 +#define UVC_SWENTITY_UNIT 0x7ffd +#define UVC_SWENTITY_UNIT_ID 0x101 + #define UVC_EXT_GPIO_UNIT 0x7ffe #define UVC_EXT_GPIO_UNIT_ID 0x100 =20 @@ -247,6 +251,12 @@ struct uvc_entity { int irq; bool initialized; } gpio; + + struct { + u8 bControlSize; + u8 *bmControls; + struct v4l2_fwnode_device_properties props; + } swentity; }; =20 u8 bNrInPins; @@ -623,6 +633,7 @@ struct uvc_device { } async_ctrl; =20 struct uvc_entity *gpio_unit; + struct uvc_entity *swentity_unit; }; =20 struct uvc_fh { @@ -688,6 +699,9 @@ do { \ */ =20 struct uvc_entity *uvc_entity_by_id(struct uvc_device *dev, int id); +struct uvc_entity *uvc_alloc_new_entity(struct uvc_device *dev, u16 type, + u16 id, unsigned int num_pads, + unsigned int extra_size); =20 /* Video buffers queue management. */ int uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type); @@ -813,4 +827,7 @@ void uvc_debugfs_cleanup_stream(struct uvc_streaming *s= tream); size_t uvc_video_stats_dump(struct uvc_streaming *stream, char *buf, size_t size); =20 +/* swentity */ +int uvc_swentity_init(struct uvc_device *dev); + #endif diff --git a/include/linux/usb/uvc.h b/include/linux/usb/uvc.h index 22e0dab0809e296e089940620ae0e8838e109701..654182c2d22cdd9c72709247c1c= 8cabf9f5b19ee 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_SWENTITY \ + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04} #define UVC_GUID_CHROMEOS_XU \ {0x24, 0xe9, 0xd7, 0x74, 0xc9, 0x49, 0x45, 0x4a, \ 0x98, 0xa3, 0xc8, 0x07, 0x7e, 0x05, 0x1c, 0xa3} --=20 2.51.0.536.g15c5d4f767-goog From nobody Wed Oct 1 22:26:30 2025 Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) (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 8AFF72F9D91 for ; Fri, 26 Sep 2025 13:11:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892306; cv=none; b=tjwwse3mcq66y075JbNFFcL7G3noMyKD5M62nMhvywRda0b3NUTfKFmYdyEToaghFjC9HPORSrQkgL30kV+Df7tH2t7grAxzTo8vqZVK2qmWMwXouuoX7SV7UiKBn5IBHXBCj8a6Ltrb/MRU/wvcRRaYX5D9265umfSvInfn2h0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892306; c=relaxed/simple; bh=K3KdMz7C2S+sjjhpcJ2VrrH58ALa5ic8heuJ7M4ymXs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=n/uGYJYGJpAK1YsTlz6iGc0j1VgSYWKFfuU3JnxMxOeS/VNU9ngXFLvnH53rS0OxnBEFox7glIxEYWfSTVPZnraZMuglX3TI2Sl1T/teVkq5xeT4eu0KAX5qbFw74g2CawPDE16b2R7JYos8tA8OQq/PbEgca173DNPecdIWGI0= 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=mSIAMbl3; arc=none smtp.client-ip=209.85.167.46 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="mSIAMbl3" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-57d8ff3944dso2221608e87.3 for ; Fri, 26 Sep 2025 06:11:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1758892295; x=1759497095; 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=yK5cgdjGWBYF8FS7tGEMMwrGVxWyiTSoe6v1uuSmXRU=; b=mSIAMbl3eTr+7VxRl3P0MNZWVUQCXmyAjlkt5xOkpMbeNLAm9uAl2J4pO453MmOiyC eR5BMfA+XUNGxAiTsSzXwXqHSZzFU9i+OYryqN1Jl1ZL6RtN9qcT+nxc2ooHY/hse2s3 ulTqMpeG3GcGMWldTAcmsbyQxrV4t+Q/9ig48= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758892295; x=1759497095; 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=yK5cgdjGWBYF8FS7tGEMMwrGVxWyiTSoe6v1uuSmXRU=; b=k08a8tfJ1xYrRgmTpDJBmnZtQ2OW/ExBfmdvDv2D/w8+lVpz0R59gi1OZhZsir3xh7 jSV0Iz6rtcU69jbyDvfy1vQVKD3FS0aCaW1Entglnix4n/Y0Gt62jfrSQGRVTj15Uv4+ dn82/0Bd4tGeL8i5EEvc/r7CCvayfNtzlvCuSJDJ/N7lLts6MByXEg8fFYoej01rMnwa qAKc29WikdB/NZQwJZc8lNBX/hZ7C3nBb3Tu1v682GqM+GH+gv5AgpcwstuXotk44Hjj +6DeKU2PVrK5u+oDYsDtTwFmBW+sl/64PMR3ryffBH1eQpfygs4PWTmB2/aaLI5pxbax erUg== X-Forwarded-Encrypted: i=1; AJvYcCUGWzdxilIvLRNjecM+1p+G6mOnSwYQlwJjaD+4tEE3zYHdySGtDz57OElF8KpukPhthfRa4AX/W86+abo=@vger.kernel.org X-Gm-Message-State: AOJu0YykkwE6tHJL38bvjRcCdzDEtp+/GH+GrfOLssN3l6YCh+YHgMDU Q9xbuKYfpTISVvr+B89+hzv8QM8vOzVTxfMmmuMzzuxNPSsmyRLzsJh4zGeynf4OoA== X-Gm-Gg: ASbGnctMJk2Q25QWrIwihdb7EKhKykhfDJ21X40lvGGUd1czCgNPyZMXlIwONjwGcWo ZQn20VhEfnl+SvDBA+NpWKYBElyEVvczFSLtf6zk1/BQwasBHTyRzBsLCf1vOBJWCoRTeceeV37 iZMjZhI2cbyiB/oz+oju/DKt2DnAciuxJ2PklMXO1cHDJhVpQo6f1DcXZMo1k+LZLg1JEQqBpmx rjwYbzgm4l5h8ldcf4L0wL3WG7imgi81FI4OeiNZSHY8Ln5kS2xZQelkTJ7QgDt+tbJ226SFcX4 yr9Fd0a40yn2I28h1+U1jyRmykh+HjHMKbVXzb5l/GlAMFA7PbjVudvDIIarcNT20J4Z2YKV04e T2kNTkkEUvzm9OkQ/v/rTT6aCaWS0SF1QzyYyf476jPy4LTS6x5DlMqH8BiUYn+Jh65Zb32Zqap 1RqoNZCZYkYN+e X-Google-Smtp-Source: AGHT+IGFsjXQDMDVCJ1rn/evMz3fd3PTtDOlV/BZM7pcfvKWARbqj04ku2ig/REcBSICwb5/1B/aQQ== X-Received: by 2002:a05:6512:23a8:b0:57b:3600:8b4b with SMTP id 2adb3069b0e04-582d092964emr2268576e87.7.1758892295046; Fri, 26 Sep 2025 06:11:35 -0700 (PDT) Received: from ribalda.c.googlers.com (64.153.228.35.bc.googleusercontent.com. [35.228.153.64]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-58527c6b014sm123872e87.43.2025.09.26.06.11.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Sep 2025 06:11:34 -0700 (PDT) From: Ricardo Ribalda Date: Fri, 26 Sep 2025 13:11:33 +0000 Subject: [PATCH v3 09/12] media: uvcvideo: Fill ctrl->info.selector earlier 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: <20250926-uvc-orientation-v3-9-6dc2fa5b4220@chromium.org> References: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> In-Reply-To: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> To: Hans de Goede , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Bartosz Golaszewski , "Rafael J. Wysocki" , Len Brown , Robert Moore , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Ricardo Ribalda X-Mailer: b4 0.14.2 This is a preparation patch. A future helper will remove the selector argument and use the information embedded in the uvc_control structure. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index aa9de84de9236540c46ee78fb8458873d503786e..98e454fcdeb2ee36d334068fd75= 0e6203931699d 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -2720,7 +2720,8 @@ static void uvc_ctrl_fixup_xu_info(struct uvc_device = *dev, * Query control information (size and flags) for XU controls. */ static int uvc_ctrl_fill_xu_info(struct uvc_device *dev, - const struct uvc_control *ctrl, struct uvc_control_info *info) + struct uvc_control *ctrl, + struct uvc_control_info *info) { u8 *data; int ret; @@ -2733,6 +2734,9 @@ static int uvc_ctrl_fill_xu_info(struct uvc_device *d= ev, info->index =3D ctrl->index; info->selector =3D ctrl->index + 1; =20 + /* We need to fill info.selector to get the flags and the length. */ + ctrl->info.selector =3D info->selector; + /* Query and verify the control length (GET_LEN) */ ret =3D uvc_query_ctrl(dev, UVC_GET_LEN, ctrl->entity->id, dev->intfnum, info->selector, data, 2); --=20 2.51.0.536.g15c5d4f767-goog From nobody Wed Oct 1 22:26:30 2025 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (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 825252FAC1D for ; Fri, 26 Sep 2025 13:11:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892306; cv=none; b=LE6RCAh6KfjhqqNNOCFof5ErNBXiSvQfPqKu6dl/5qxVvWLj6VLUB0mW9RpWneoFZGPxbTLVgjy1oJuCWNuh82iL0MTFN9Yt6kun6enCGp24KtxNTNNIWX4qgdYv3BqmgKkXo2LOafq+icjE7VfSf+jWp5Ism3M8nzlCwc0pwUU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892306; c=relaxed/simple; bh=tSZ4e7bBWYDXs+64s5deuA0eU78Hb20V1QttJt4YMDI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lvLbnVdxayhLaadSR4Bjk407OPHW5s6Iu/bJYEyeoPi2XD/gJVsChQVAaVcYoPe1zKl4YS2xS9YsZtsdw2qkV5JeW3AlZPgsX4ufQerXtlzyePDme5dBYwODnhsGz5cTZLF3kUw2WOyeobmlh80szCpcSP84bmzX8yRAFoLyqag= 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=jSjP4sHf; arc=none smtp.client-ip=209.85.167.50 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="jSjP4sHf" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-57dfd0b6cd7so2580095e87.0 for ; Fri, 26 Sep 2025 06:11:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1758892296; x=1759497096; 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=bphRunTYPw61AUvJ/YpfJ9I70eYp7wtD0WzfXD7gDd4=; b=jSjP4sHfuhbwLdbt121hI4bjomddVP4C91PLouwDoTn8W45OpvxY9oHbOMYkHXP/Lw c8Hfr/ASTHKxOx1wsdrwLvmuqe5lqMghcXhTd5wC7u8ovPA3zUJyM0m7q3FGh00hLZ+2 Smal8XpgJIgcjIV4ePaxghrnTsSwe6osmGAO8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758892296; x=1759497096; 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=bphRunTYPw61AUvJ/YpfJ9I70eYp7wtD0WzfXD7gDd4=; b=QLiVlfpNw15zQUNNuvsnJUtsma6yLkYpV1EJU1NSd71l+i7dDGP8TWnp8OJn14Gvx0 P/9mQJKJGxsOkCQ4zYKBI7oYuKb4W7z/0sMH/+jfZvUbRZJ1GYKJ4ayQxr7aQ6P5qZnT 1afXkVtzmgtbkAtEKqq2D3OwXPpire6JSFDxcgBv+oKfiJdTwnZf2Kpjy58RaUE8iATO 93P3ypxuJR9PIBdXg6HsKzCkEnw/5+KE6vduLssRnITDhD78yCPyw76eSDYDVRqdmsh9 Ev1wXz7pWOauv8e6jwfdrXEJA+On8zv+gAyuLDL+mDIg4hnjNaeyyp2dsypLmKNfERWB dyxg== X-Forwarded-Encrypted: i=1; AJvYcCUarTpw5H+YrErkK/CFDtXHPWlUv79+fwt0sNbXH9TOqC+wy7kW9pGK4uWeszgSk0d0nXBguWmrMWmK288=@vger.kernel.org X-Gm-Message-State: AOJu0YyvA3zbkJku8WuebCqxnKlhioM6NPISZ9NCkJtdune8TLQtXIGz Ucq+o1Ixvn8dcZZ/osDm93uIFnEAOFcbcBvQxWHgo5nf10WfU2r3L2u+/UghbcW9AA== X-Gm-Gg: ASbGnct9PimYkaO7uOdZ++h0nOOwlPwGmpyvNpXTg7VQIfRl2bv7ik9HjzWvLAKhQxR NeynF55dj945SuJSOULb6GRuGNa2vzjdzgy1Hay1IKxvTNclhtFu2ASLyDmNZyjNYvsNUXhcpYQ UOXuo79AMoO/G+jMzJ6pW+rP6g7C2YnMmNyDOAuilfuO6sJAxCJwvFwRD63BR5FxCds28xAcCTw kur6psGbKsvJ/gpQB3lDy+k1nY1UuQJdlTJ4gr7vq2rPeU1dtZ201b7tcI/Y0jknA5gAZvbFXa+ ShOhY31Ze5UGdsqmYCna2fehWhDyAJzgzDS5AoopWkXaN0FcnpWecIfYcj4kPR3jO8W20SCC08I OnwPZh22jeJQBhZja4gqfiH9JsFEDbSnOEOPT4pXLwhMKvYbcUnBpXSxQpijAyFXp1pKFZKzoGn fKJzSJPxQ8WYdR X-Google-Smtp-Source: AGHT+IEv9MbC6V8zP0dxYjK1OB4iFK32py7NZfWALirf9hP7Mf6Qwl9MxHAyd3yZAKgRpXN6nv2Waw== X-Received: by 2002:a05:6512:3f1b:b0:571:86bc:423b with SMTP id 2adb3069b0e04-582d3f76d9fmr2145509e87.44.1758892295887; Fri, 26 Sep 2025 06:11:35 -0700 (PDT) Received: from ribalda.c.googlers.com (64.153.228.35.bc.googleusercontent.com. [35.228.153.64]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-58527c6b014sm123872e87.43.2025.09.26.06.11.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Sep 2025 06:11:35 -0700 (PDT) From: Ricardo Ribalda Date: Fri, 26 Sep 2025 13:11:34 +0000 Subject: [PATCH v3 10/12] media: uvcvideo: Add uvc_ctrl_query_entity helper 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: <20250926-uvc-orientation-v3-10-6dc2fa5b4220@chromium.org> References: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> In-Reply-To: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> To: Hans de Goede , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Bartosz Golaszewski , "Rafael J. Wysocki" , Len Brown , Robert Moore , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Ricardo Ribalda X-Mailer: b4 0.14.2 Create a helper function to query a control. The new function reduces the number of arguments, calculates the length of the operation and redirects the operation to the hardware or to the entity private functions. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 83 +++++++++++++++++++++---------------= ---- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 98e454fcdeb2ee36d334068fd750e6203931699d..017165a5c94459f1befd4c08f85= a2017c58d61e6 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -598,6 +598,36 @@ static const struct uvc_control_mapping uvc_ctrl_power= _line_mapping_uvc15 =3D { V4L2_CID_POWER_LINE_FREQUENCY_DISABLED), }; =20 +static int uvc_ctrl_query_entity(struct uvc_device *dev, + const struct uvc_control *ctrl, u8 query, + void *data) +{ + u16 len; + + switch (query) { + case UVC_GET_INFO: + len =3D 1; + break; + case UVC_GET_LEN: + len =3D 2; + break; + default: + len =3D ctrl->info.size; + break; + } + + if (query =3D=3D UVC_GET_CUR && ctrl->entity->get_cur) + return ctrl->entity->get_cur(dev, ctrl->entity, + ctrl->info.selector, data, len); + else if (query =3D=3D UVC_GET_INFO && ctrl->entity->get_info) + return ctrl->entity->get_info(dev, ctrl->entity, + ctrl->info.selector, data); + else + return uvc_query_ctrl(dev, query, ctrl->entity->id, + dev->intfnum, ctrl->info.selector, data, + len); +} + static const struct uvc_control_mapping *uvc_ctrl_filter_plf_mapping( struct uvc_video_chain *chain, struct uvc_control *ctrl) { @@ -1256,35 +1286,27 @@ static int uvc_ctrl_populate_cache(struct uvc_video= _chain *chain, int ret; =20 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_DEF) { - ret =3D uvc_query_ctrl(chain->dev, UVC_GET_DEF, ctrl->entity->id, - chain->dev->intfnum, ctrl->info.selector, - uvc_ctrl_data(ctrl, UVC_CTRL_DATA_DEF), - ctrl->info.size); + ret =3D uvc_ctrl_query_entity(chain->dev, ctrl, UVC_GET_DEF, + uvc_ctrl_data(ctrl, UVC_CTRL_DATA_DEF)); if (ret < 0) return ret; } =20 if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MIN) { - ret =3D uvc_query_ctrl(chain->dev, UVC_GET_MIN, ctrl->entity->id, - chain->dev->intfnum, ctrl->info.selector, - uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN), - ctrl->info.size); + ret =3D uvc_ctrl_query_entity(chain->dev, ctrl, UVC_GET_MIN, + uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN)); if (ret < 0) return ret; } if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX) { - ret =3D uvc_query_ctrl(chain->dev, UVC_GET_MAX, ctrl->entity->id, - chain->dev->intfnum, ctrl->info.selector, - uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX), - ctrl->info.size); + ret =3D uvc_ctrl_query_entity(chain->dev, ctrl, UVC_GET_MAX, + uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX)); if (ret < 0) return ret; } if (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES) { - ret =3D uvc_query_ctrl(chain->dev, UVC_GET_RES, ctrl->entity->id, - chain->dev->intfnum, ctrl->info.selector, - uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES), - ctrl->info.size); + ret =3D uvc_ctrl_query_entity(chain->dev, ctrl, UVC_GET_RES, + uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES)); if (ret < 0) { if (UVC_ENTITY_TYPE(ctrl->entity) !=3D UVC_VC_EXTENSION_UNIT) @@ -1325,16 +1347,7 @@ static int __uvc_ctrl_load_cur(struct uvc_video_chai= n *chain, return 0; } =20 - if (ctrl->entity->get_cur) - ret =3D ctrl->entity->get_cur(chain->dev, ctrl->entity, - ctrl->info.selector, data, - ctrl->info.size); - else - ret =3D uvc_query_ctrl(chain->dev, UVC_GET_CUR, - ctrl->entity->id, chain->dev->intfnum, - ctrl->info.selector, data, - ctrl->info.size); - + ret =3D uvc_ctrl_query_entity(chain->dev, ctrl, UVC_GET_CUR, data); if (ret < 0) return ret; =20 @@ -2244,11 +2257,8 @@ static int uvc_ctrl_commit_entity(struct uvc_device = *dev, continue; =20 if (!rollback) - ret =3D uvc_query_ctrl(dev, UVC_SET_CUR, ctrl->entity->id, - dev->intfnum, ctrl->info.selector, - uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT), - ctrl->info.size); - + ret =3D uvc_ctrl_query_entity(dev, ctrl, UVC_SET_CUR, + uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT)); if (!ret) processed_ctrls++; =20 @@ -2650,13 +2660,7 @@ static int uvc_ctrl_get_flags(struct uvc_device *dev, if (data =3D=3D NULL) return -ENOMEM; =20 - if (ctrl->entity->get_info) - ret =3D ctrl->entity->get_info(dev, ctrl->entity, - ctrl->info.selector, data); - else - ret =3D uvc_query_ctrl(dev, UVC_GET_INFO, ctrl->entity->id, - dev->intfnum, info->selector, data, 1); - + ret =3D uvc_ctrl_query_entity(dev, ctrl, UVC_GET_INFO, data); if (!ret) { info->flags &=3D ~(UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_SET_CUR | @@ -2738,8 +2742,7 @@ static int uvc_ctrl_fill_xu_info(struct uvc_device *d= ev, ctrl->info.selector =3D info->selector; =20 /* Query and verify the control length (GET_LEN) */ - ret =3D uvc_query_ctrl(dev, UVC_GET_LEN, ctrl->entity->id, dev->intfnum, - info->selector, data, 2); + ret =3D uvc_ctrl_query_entity(dev, ctrl, UVC_GET_LEN, data); if (ret < 0) { uvc_dbg(dev, CONTROL, "GET_LEN failed on control %pUl/%u (%d)\n", --=20 2.51.0.536.g15c5d4f767-goog From nobody Wed Oct 1 22:26:30 2025 Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) (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 CBAEB2F60DA for ; Fri, 26 Sep 2025 13:11:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892304; cv=none; b=NhYSJI9ueY20N5JGFMCgraDh3KRggM6ld/JlNo3LVb+C8pPSgg99rzRTJNO43RoHavwbY++PuhbQNcQ4d00pYr8YBEbWOpOrfXfcpsWuPhe9SOjO1gfIISOiPImTMwXaULKfyTQQHrCKEFj3lGIDcmbmj7o4BNYgs4uUSGhd5gE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892304; c=relaxed/simple; bh=yNrpERf5BIoxndB/IrDgg7F9IXcRYdRqRLfZtrmT8XA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dgcTji7bGjqgRtcOq+hb3z5LKqoZ93XjO+ZDVENzRT4C7/0VI2eaVEd6llWBpwN9Nt3tEWFGYV6AISLMtnsPltGoio8K/1/2qDoUJrUcadc5hhMYjSRdAF1mQRdcfyJ+lFhI3w7/Gn6c9Onycw0+YIVs6E7Tyx9wL1QFkEEqyG8= 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=FS/SKx5K; arc=none smtp.client-ip=209.85.167.48 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="FS/SKx5K" Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-57da66e0dc9so2162452e87.0 for ; Fri, 26 Sep 2025 06:11:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1758892296; x=1759497096; 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=cjB3MTX3Joa1/7HOctJXxE5CXor1VUYeSlxA+suqIgI=; b=FS/SKx5KlPs+jWLyH4wmJlgYY2EAyt5dORj4RnuYMdbpynQ/AkDgAZJjXC9Ylt/RLC AosBVdJq9E1M/RmODFDre9MaRmNiRBDpP/njUiRMqbitzjlgXMrrhjUd9AbC5rsTZ4lO +nYyunniXwcWawYBCOPp955C6FmII0OMEjbD0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758892296; x=1759497096; 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=cjB3MTX3Joa1/7HOctJXxE5CXor1VUYeSlxA+suqIgI=; b=wpIv1apTH/oChZyKMJNdR9KWu9p+G0+ONHREs+BTaGHs9wkQiaUibRctwhQzITjgeA XRUJPIz+HrVLW/vxJqEGxOM/CZAz3zWvYIF/7FCqS4z9Kx9emFhY1tMLqGhf3VT/JW8I k+WCEM5FdDr+MwTdhZgxwcL2OE4oUI4zI0/jyaJbZj2mW1OEWPvVQuHHHgs9EI4jT+x1 V9v6YEEyzYQ227x9+HN/J3GrAOYDVmvGdwoPkaqrzNaYPByK7TiiQZAntGQxPaJICLnx fQa+wN01jtyWgNYy/eMWL8lKwtdKpbtWySvAZi6fuQfhGu7lyC3np4Yuxp4tc7EoqLd9 TJ7w== X-Forwarded-Encrypted: i=1; AJvYcCXxo5jYyS3c7PmAxWYkAZlkIJ6/1ltoy9ZuT457SVu+/qq/bw28bTuhsiqY4gxOktycJ588X1GD1jUWmwE=@vger.kernel.org X-Gm-Message-State: AOJu0YwCnqkfxYVFdsu4uenpFYu5rXUf5B5GiqY/6JUUKFQ3td06mEZt INN4c9g71O/YcO6Ta/4xw6XxI5wJOOvmOeeZBiahE1msXzEfmY0oiem8lgOAwP50dQ== X-Gm-Gg: ASbGnctHIwkA8aINkR5meUxZ+8a/y+XpuI+fWnKkiydTI2/zbRbrmQkFDM92qbFyp4j YuIs8kahnzxaNNGc7rRF1Hw3N7TgwxITkFw2T0TkKvQ6T4A0l5LlSQ/Z7Irz0xYPx7qF1HOGjCz DSHmLNlYDAmU5zQCmDivLAShCbS9SJQYhXADtiDKXRGzBxVrEeuKfHOOCNvzy1D7LaDJJOynNzl jxIsoq+0QWlBpwEruWNQkep0xv6AHWGbt5OpP45Ea8+ug8zP2CN6xknn9pXRM/rHjkmvGjtlRn6 5hnhXr+du2otmlCsXT6XbxFHh8tqEkIz2iKoBc+VH8M+Fi21scv6V142ao8G78QjdRG5nF8m1l4 JSHlfwetw31jLDdyUDpB+Zg65SmqWZ/vWi6M6OQ3PONK10KzIGiacZWPpKiirjcjQd5I2aHzgSV /hplk6OpGsYMIm X-Google-Smtp-Source: AGHT+IHWNSHIhM8+wxqoK25vYQcpiuX3y8F3tCAqdPjxFUiAxRPF90tmVAHpAHEn0gJRDF4m3ruBAg== X-Received: by 2002:a05:6512:234f:b0:57b:7c83:d33b with SMTP id 2adb3069b0e04-582d34eab93mr2494739e87.47.1758892296391; Fri, 26 Sep 2025 06:11:36 -0700 (PDT) Received: from ribalda.c.googlers.com (64.153.228.35.bc.googleusercontent.com. [35.228.153.64]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-58527c6b014sm123872e87.43.2025.09.26.06.11.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Sep 2025 06:11:36 -0700 (PDT) From: Ricardo Ribalda Date: Fri, 26 Sep 2025 13:11:35 +0000 Subject: [PATCH v3 11/12] media: uvcvideo: Use current_value for read-only 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: <20250926-uvc-orientation-v3-11-6dc2fa5b4220@chromium.org> References: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> In-Reply-To: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> To: Hans de Goede , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Bartosz Golaszewski , "Rafael J. Wysocki" , Len Brown , Robert Moore , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Ricardo Ribalda X-Mailer: b4 0.14.2 For read-only controls that do not support GET_MIN, GET_DEF, GET_MAX or GET_RES use the current value of the control or a constant number if the current value is not available. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 76 +++++++++++++++++++++++++++++-------= ---- 1 file changed, 56 insertions(+), 20 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index 017165a5c94459f1befd4c08f85a2017c58d61e6..e99fdf4bafbea662556798fe345= a48b9ffd8467b 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -1548,6 +1548,50 @@ static u32 uvc_get_ctrl_bitmap(struct uvc_control *c= trl, return ~0; } =20 +static s64 uvc_queryctrl_single_boundary(struct uvc_video_chain *chain, + struct uvc_control *ctrl, + struct uvc_control_mapping *mapping, + u8 op) +{ + static const u32 query_types[][3] =3D { + {UVC_CTRL_FLAG_GET_DEF, UVC_GET_DEF, UVC_CTRL_DATA_DEF}, + {UVC_CTRL_FLAG_GET_MIN, UVC_GET_MIN, UVC_CTRL_DATA_MIN}, + {UVC_CTRL_FLAG_GET_MAX, UVC_GET_MAX, UVC_CTRL_DATA_MAX}, + {UVC_CTRL_FLAG_GET_RES, UVC_GET_RES, UVC_CTRL_DATA_RES}, + }; + int idx =3D -1; + + for (unsigned int i =3D 0; i < ARRAY_SIZE(query_types); i++) { + if (op =3D=3D query_types[i][1]) { + idx =3D i; + break; + } + } + if (WARN_ON(idx =3D=3D -1)) + return 0; + + if (ctrl->info.flags & query_types[idx][0]) { + return uvc_mapping_get_s32(mapping, query_types[idx][1], + uvc_ctrl_data(ctrl, + query_types[idx][2])); + } + + /* Use 1 as the default step value. */ + if (op =3D=3D UVC_GET_RES) + return 1; + + /* Read-only controls can use GET_CUR as min, max and def. */ + if (!(ctrl->info.flags & UVC_CTRL_FLAG_SET_CUR) && + (ctrl->info.flags & UVC_CTRL_FLAG_GET_CUR) && + __uvc_ctrl_load_cur(chain, ctrl) =3D=3D 0) { + return uvc_mapping_get_s32(mapping, UVC_GET_CUR, + uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT)); + } + + /* Otherwise, use 0 as last resource. */ + return 0; +} + /* * Maximum retry count to avoid spurious errors with controls. Increasing = this * value does no seem to produce better results in the tested hardware. @@ -1573,11 +1617,9 @@ static int __uvc_queryctrl_boundaries(struct uvc_vid= eo_chain *chain, return ret; } =20 - if (ctrl->info.flags & UVC_CTRL_FLAG_GET_DEF) - v4l2_ctrl->default_value =3D uvc_mapping_get_s32(mapping, - UVC_GET_DEF, uvc_ctrl_data(ctrl, UVC_CTRL_DATA_DEF)); - else - v4l2_ctrl->default_value =3D 0; + v4l2_ctrl->default_value =3D + uvc_queryctrl_single_boundary(chain, ctrl, mapping, + UVC_GET_DEF); =20 switch (mapping->v4l2_type) { case V4L2_CTRL_TYPE_MENU: @@ -1608,23 +1650,17 @@ static int __uvc_queryctrl_boundaries(struct uvc_vi= deo_chain *chain, break; } =20 - if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MIN) - v4l2_ctrl->minimum =3D uvc_mapping_get_s32(mapping, UVC_GET_MIN, - uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MIN)); - else - v4l2_ctrl->minimum =3D 0; + v4l2_ctrl->minimum =3D + uvc_queryctrl_single_boundary(chain, ctrl, mapping, + UVC_GET_MIN); =20 - if (ctrl->info.flags & UVC_CTRL_FLAG_GET_MAX) - v4l2_ctrl->maximum =3D uvc_mapping_get_s32(mapping, UVC_GET_MAX, - uvc_ctrl_data(ctrl, UVC_CTRL_DATA_MAX)); - else - v4l2_ctrl->maximum =3D 0; + v4l2_ctrl->maximum =3D + uvc_queryctrl_single_boundary(chain, ctrl, mapping, + UVC_GET_MAX); =20 - if (ctrl->info.flags & UVC_CTRL_FLAG_GET_RES) - v4l2_ctrl->step =3D uvc_mapping_get_s32(mapping, UVC_GET_RES, - uvc_ctrl_data(ctrl, UVC_CTRL_DATA_RES)); - else - v4l2_ctrl->step =3D 0; + v4l2_ctrl->step =3D + uvc_queryctrl_single_boundary(chain, ctrl, mapping, + UVC_GET_RES); =20 return 0; } --=20 2.51.0.536.g15c5d4f767-goog From nobody Wed Oct 1 22:26:30 2025 Received: from mail-lf1-f49.google.com (mail-lf1-f49.google.com [209.85.167.49]) (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 BB4D72F6573 for ; Fri, 26 Sep 2025 13:11:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892305; cv=none; b=IOFZEp/bp8PPvwVPXuxYQqXDqDD2Xq3vqvDeHy/nYFNdx0xxnJwR5t0Tm+tnzAibD+iLLdJCIOqkm3U3zEACUix26A7j4XX6BVGn1R79jGx7ETYZSgCOv34nrCbte6qqk/Kmdq9Jg7+BRkAlTy+qXJ6k1agv4LNhIooqFw8IcZc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758892305; c=relaxed/simple; bh=U08jW+ROLINfuVWgmwe8cpKgwKy+8J4DAE40SSartDs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OckCFNGLpQqFPqo/Q9p/gj4a6Z3xZJxHMeFNdSqjo5Apem/3/eMVq2OGASDGF9rXcJ0n197Q3WLjpsFyZFkUzrBRVF2sAA65YGBhXPR+x7exzSrY6pgVzl3a4/D/vcpWe/NMj5bKbWx7YeQWRcIf9j4rAF606Kzrh6FxlrvtLjU= 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=ND6vetiw; arc=none smtp.client-ip=209.85.167.49 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="ND6vetiw" Received: by mail-lf1-f49.google.com with SMTP id 2adb3069b0e04-57edfeaa05aso2333879e87.0 for ; Fri, 26 Sep 2025 06:11:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1758892297; x=1759497097; 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=APb3UWCYeewnPsuy/XgWoHvego/0/pU0ggvZnaK9xZ8=; b=ND6vetiwvc8HvV+F8PpwSZeponpTkVOf5zU0YmtnnUUCP8C66nPIBYxDAYak2CQeVm cl48LslOyRdc1AONC6xSc3VxuztWKnr8TSXJ+sjOj02XNsqa9dgtaQ26E3xdR79Sx5Vt VpGuRohS9CbTcMn6aNlChnvA4ez7OdXXhTo4Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758892297; x=1759497097; 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=APb3UWCYeewnPsuy/XgWoHvego/0/pU0ggvZnaK9xZ8=; b=Bw2c7no1jPehQ8fKcnxmbEI0cOmwCYRQeOxCaN2+c64RwML16GgKs5zq9ENNcec4gI VjJyaHyE3Iw6HF8OtY4GQ5k+I8+nmvcrcCd0WgJrOgNV3jRbMcg/yu/0jTOfJGIGRU6Y nx9aGx51swE2XqTi/SCBqiCeYHBGYUBLH+FWymHc31lKYZjmIqLTrh1nfeYt7seO7Avh iGYomM7uRQb4crRm4zJ1aktaxifMYH7rmOHxhi2CpTBCT0NwLnHCCg075lfbUpBo15zE tFYbQZTvqju6vw8HO/HDNg2/71xEh41gHItZhA724V6OVmkMq5/JCzr5SvDo33TkSqvI rLbw== X-Forwarded-Encrypted: i=1; AJvYcCVhJf5uVc6fjyB2CTvSMOaQa0CCHWtwLLs/O4HOuFJzu7xUlls0IP15acRQ1nVaMQs2zbxBPeOkh17idGw=@vger.kernel.org X-Gm-Message-State: AOJu0YzqO3NmRLJFbcayFWPkM/cCUunO8BSN6bG/VKY3ys9/n5noeqsj KQ3dt6D6xoF0zrMfFouEMMtIe9jcs+U9kpthU8oxpPG5xmlIOerxCT1VRXn+QL3w0A== X-Gm-Gg: ASbGncvUjVrsg9tMzGB4YCeg15nSQOU3UiyKc3VkzE6Y8+V+l1PqThhNR9xjt6hEcA0 YOPXKYALHdakKQWiUl0T0Rgdw3bNNNXHlyhqo26/zgrB5bz6cb+ySneq//ZZj56eukZ//aqBm/v 7mob78e3B+5sqEjDiT3fOv01E7LsouvG89+sl9XxADZKAHpwD1z6PKYAylpAJbOBd8DvOrQyEbP 0oNlxn/q1bs/WOoBmmgj8ta9vIJKKblOQviCM8X7td+U3BeZDt3bNhP3bkAnY53JA5lUZve2UmY 75GU+ZePXMF8ydPbZ5dyVLq6Im2Xmm4Xde9eL8qn/z0Hq2uT3o44TLBMXaP/lFUGo+lqpkd7vJz 2nkQRIhhsbroDbGrnLZTUC4A7OrAn3SK4Qd7u94xSTaifUxp1MjZawYYWaHGn/YOFrb+eSJBnpC hdqw== X-Google-Smtp-Source: AGHT+IG13LZH3qyc8t2QDs0MQunt54awluMMidrJtB7qriVpX4diWPLucIbGRhyJDMPwZ0BJ1XUdKg== X-Received: by 2002:a05:6512:3b20:b0:57a:8738:4d80 with SMTP id 2adb3069b0e04-582d0c2a62fmr2064511e87.21.1758892296980; Fri, 26 Sep 2025 06:11:36 -0700 (PDT) Received: from ribalda.c.googlers.com (64.153.228.35.bc.googleusercontent.com. [35.228.153.64]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-58527c6b014sm123872e87.43.2025.09.26.06.11.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Sep 2025 06:11:36 -0700 (PDT) From: Ricardo Ribalda Date: Fri, 26 Sep 2025 13:11:36 +0000 Subject: [PATCH v3 12/12] media: uvcvideo: Add support for V4L2_CID_CAMERA_ROTATION 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: <20250926-uvc-orientation-v3-12-6dc2fa5b4220@chromium.org> References: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> In-Reply-To: <20250926-uvc-orientation-v3-0-6dc2fa5b4220@chromium.org> To: Hans de Goede , Laurent Pinchart , Mauro Carvalho Chehab , Sakari Ailus , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , Bartosz Golaszewski , "Rafael J. Wysocki" , Len Brown , Robert Moore , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev, Ricardo Ribalda X-Mailer: b4 0.14.2 Fetch the rotation from the fwnode and map it into a control. Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_ctrl.c | 22 ++++++++++++++++--- drivers/media/usb/uvc/uvc_swentity.c | 41 +++++++++++++++++++++++++++++++-= ---- drivers/media/usb/uvc/uvcvideo.h | 5 +++++ 3 files changed, 60 insertions(+), 8 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_c= trl.c index e99fdf4bafbea662556798fe345a48b9ffd8467b..99bae519ded8910a37ad2f2112f= bcbfdcac671af 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -387,11 +387,18 @@ static const struct uvc_control_info uvc_ctrls[] =3D { }, { .entity =3D UVC_GUID_SWENTITY, - .selector =3D 0, - .index =3D 0, + .selector =3D UVC_SWENTITY_ORIENTATION, + .index =3D UVC_SWENTITY_ORIENTATION, .size =3D 1, .flags =3D UVC_CTRL_FLAG_GET_CUR, }, + { + .entity =3D UVC_GUID_SWENTITY, + .selector =3D UVC_SWENTITY_ROTATION, + .index =3D UVC_SWENTITY_ROTATION, + .size =3D 2, + .flags =3D UVC_CTRL_FLAG_GET_CUR, + }, }; =20 static const u32 uvc_control_classes[] =3D { @@ -1049,7 +1056,7 @@ static const struct uvc_control_mapping uvc_ctrl_mapp= ings[] =3D { { .id =3D V4L2_CID_CAMERA_ORIENTATION, .entity =3D UVC_GUID_SWENTITY, - .selector =3D 0, + .selector =3D UVC_SWENTITY_ORIENTATION, .size =3D 8, .offset =3D 0, .v4l2_type =3D V4L2_CTRL_TYPE_MENU, @@ -1057,6 +1064,15 @@ static const struct uvc_control_mapping uvc_ctrl_map= pings[] =3D { .menu_mask =3D GENMASK(V4L2_CAMERA_ORIENTATION_EXTERNAL, V4L2_CAMERA_ORIENTATION_FRONT), }, + { + .id =3D V4L2_CID_CAMERA_SENSOR_ROTATION, + .entity =3D UVC_GUID_SWENTITY, + .selector =3D UVC_SWENTITY_ROTATION, + .size =3D 16, + .offset =3D 0, + .v4l2_type =3D V4L2_CTRL_TYPE_INTEGER, + .data_type =3D UVC_CTRL_DATA_TYPE_UNSIGNED, + }, }; =20 /* ------------------------------------------------------------------------ diff --git a/drivers/media/usb/uvc/uvc_swentity.c b/drivers/media/usb/uvc/u= vc_swentity.c index eefc5d08e370515181f74590f2f38189770b01b2..e180568efa802fb348dbf165da6= 2417631ff16fd 100644 --- a/drivers/media/usb/uvc/uvc_swentity.c +++ b/drivers/media/usb/uvc/uvc_swentity.c @@ -12,10 +12,11 @@ =20 #include "uvcvideo.h" =20 -static int uvc_swentity_get_cur(struct uvc_device *dev, struct uvc_entity = *entity, - u8 cs, void *data, u16 size) +static int uvc_swentity_get_orientation(struct uvc_device *dev, + struct uvc_entity *entity, u8 cs, + void *data, u16 size) { - if (size < 1) + if (cs !=3D UVC_SWENTITY_ORIENTATION || size !=3D 1) return -EINVAL; =20 switch (entity->swentity.props.orientation) { @@ -32,6 +33,31 @@ static int uvc_swentity_get_cur(struct uvc_device *dev, = struct uvc_entity *entit return 0; } =20 +static int uvc_swentity_get_rotation(struct uvc_device *dev, + struct uvc_entity *entity, u8 cs, void *data, + u16 size) +{ + if (cs !=3D UVC_SWENTITY_ROTATION || size !=3D 2) + return -EINVAL; + + ((u8 *)data)[0] =3D entity->swentity.props.rotation; + ((u8 *)data)[1] =3D entity->swentity.props.rotation >> 8; + + return 0; +} + +static int uvc_swentity_get_cur(struct uvc_device *dev, struct uvc_entity = *entity, + u8 cs, void *data, u16 size) +{ + switch (cs) { + case UVC_SWENTITY_ORIENTATION: + return uvc_swentity_get_orientation(dev, entity, cs, data, size); + case UVC_SWENTITY_ROTATION: + return uvc_swentity_get_rotation(dev, entity, cs, data, size); + } + return -EINVAL; +} + static int uvc_swentity_get_info(struct uvc_device *dev, struct uvc_entity *entity, u8 cs, u8 *caps) { @@ -44,6 +70,7 @@ int uvc_swentity_init(struct uvc_device *dev) static const u8 uvc_swentity_guid[] =3D UVC_GUID_SWENTITY; struct v4l2_fwnode_device_properties props; struct uvc_entity *unit; + u8 controls =3D 0; int ret; =20 ret =3D v4l2_fwnode_device_parse(&dev->udev->dev, &props); @@ -51,7 +78,11 @@ int uvc_swentity_init(struct uvc_device *dev) return dev_err_probe(&dev->intf->dev, ret, "Can't parse fwnode\n"); =20 - if (props.orientation =3D=3D V4L2_FWNODE_PROPERTY_UNSET) + if (props.orientation !=3D V4L2_FWNODE_PROPERTY_UNSET) + controls |=3D BIT(UVC_SWENTITY_ORIENTATION); + if (props.rotation !=3D V4L2_FWNODE_PROPERTY_UNSET) + controls |=3D BIT(UVC_SWENTITY_ROTATION); + if (!controls) return 0; =20 unit =3D uvc_alloc_new_entity(dev, UVC_SWENTITY_UNIT, @@ -63,7 +94,7 @@ int uvc_swentity_init(struct uvc_device *dev) unit->swentity.props =3D props; unit->swentity.bControlSize =3D 1; unit->swentity.bmControls =3D (u8 *)unit + sizeof(*unit); - unit->swentity.bmControls[0] =3D 1; + unit->swentity.bmControls[0] =3D controls; unit->get_cur =3D uvc_swentity_get_cur; unit->get_info =3D uvc_swentity_get_info; strscpy(unit->name, "SWENTITY", sizeof(unit->name)); diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 04ca5dcce11d902dbfdf32f2a962159ba7940a39..64c9a597cc533ebf3a305060294= c7045e32f72b0 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -47,6 +47,11 @@ =20 #define UVC_INVALID_ENTITY_ID 0xffff =20 +enum { + UVC_SWENTITY_ORIENTATION, + UVC_SWENTITY_ROTATION +}; + /* ------------------------------------------------------------------------ * Driver specific constants. */ --=20 2.51.0.536.g15c5d4f767-goog