From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (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 103A336B92C for ; Mon, 31 Aug 2026 18:01:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199271; cv=none; b=ineNBteJF7UeS+ZFBBCuJkRVEcq9A1bz3UEesxMc0yIlw4xjJNPyv4N7JtRKGKKfsW7tKMdqg90R+oxE47NWQpTBSikKbeeF4AnZo67vBjaqon41VECnI1/mBIBQeOMX8caz57fQMsxuPlMYDIJqGpJRXVGKweYXotlbRzaDNYI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199271; c=relaxed/simple; bh=+c4zvKKOzyTG8jOPH9TvfJgLdF8RPSCzmK6SpoAiOic=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tGQXdXqjsSy7N6i8vyFiT7Olpi44i8ghDYp3uP9AgojNJ//iSnzbX3/ZOgY5LGsf5YC3lkO6HfPgMvoo8s72dYfAfRbOop/hI4vrtB3LwbtbYaLrXX7BW8ZgX8DpCeHtV3pYUpAlMj4bgC5mVf1MAaG11etxfAFDLTxeYGcU2hs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QhEr+vQK; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QhEr+vQK" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-482fc3327fdso7297f8f.2 for ; Mon, 31 Aug 2026 11:01:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199267; x=1788804067; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YfJBnn5eTo/6C/oJ9YXkPmfh/d+EU+7KK+XPUfp9+ec=; b=QhEr+vQKYzUzknS1SOAlXxzmOT+DCJP0qSZVRbsZ4ELdgk7yOruQioGSXkc8UZTVTt /LnkdNtoO44ywz1a2mwFCaRLHQaekBA2Gh75Ug5Ncz1WHsL77dPGa1p0buFPPIUHdSxE xlUMm3nnKGKn3oFUQutJBjLO7lSNe9nB4tPDuHazsn+y0CPYYlarztNhF5NxSRTD9owe GbIBOOvVu8ANuZ29Fpx3W+xSA7lr+Z/+Q8a2i4iJUjjiDQ6k1XiGdaXFTdy/BO4KBXNb kuqYuxlRkXkvwcqXfUXm2JGh9wQQrGpk07E+jhYXX5VfIMZ+PtjX83q+ocKUJX+bu8YV +jLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199267; x=1788804067; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=YfJBnn5eTo/6C/oJ9YXkPmfh/d+EU+7KK+XPUfp9+ec=; b=FZIpYtsXYhNkIRvSQ/qhBSEECPOMqkAkyB9qg1pGSOGLLxuMLZVKgnwgJd3CJPWGYn 6QZ17Xk34zQ0YWOrpZH8yI7FbMjv8L8fT78/WegSj7TVrOAjogsiV2IalZYHZ9zSd3YC yjck9U95gKOmnpnbLmLUNOHIhKvwwGpcfB7nOpjkp/RVTSoBoOSn+7dET7dBxg8PxRXJ zZkgwy7M6MQfuoAd1omS6U4/LLsfbIFTYasnksqONKi0qXpGaax4eZjcl92I0tW4O0N3 u8ocmvEqnWAbD3Qur/RUirxV2oppGvxlu2x5M0UejZmWOguK/0iwBHYZ+HOrSBg0Z1WA BxCQ== X-Forwarded-Encrypted: i=1; AKwUvBwOs7l/zev5dui5MEM4/BBs0YxcZSHMc6KnRO31exaGCVdAic6lbAg9kT7Phs6tL1n55sKW8sejP1jRlRE=@vger.kernel.org X-Gm-Message-State: AFuF++nfjVQ43sBro03Z9nA45fwzDCQIi+oUc2ySW3wV/JEtGz5hBwjR ZRiJjcIAxuDss7/95yU6HBtEiu/Le8RJI5lDa+JwUpoDHzh+jyd+icuV X-Gm-Gg: AYBFou3U5HNGriEnCRzJny9eAkkCjmOaR+tIdhZDC+srDYJlOBMQiZ0RWhE+YN8TQHa 3C0Wto8vN0N5AYGVpw3gtEtrQit1oXVqELCWu7jrT9bJES8VY/jBWyLxWu1TnYohnvkmmDuu+A2 DkgLVS45P7SYtkyO1HWd0S/QALYV/9xHWsH4RrAXU/iN8yaJZRBsLj4MtqtaLWsE1mxibevffYJ nunewY3a0Oowo2Wy0rRYlgbnCNR/mvp2sFfgim1piXy3JrkHPTcnYT0+T49ZoivjTNQJiO5ZzUd m6o9LI5GXDSmsJ6grVPwpEn7WgXVl4ClYDP0VgrhMo9hL0FKm9aaMGafT8hKDrlAc3wLIgzfG2Y lqQk14joZHuz7JL/4PCnag1euXSd+hEd+3h3EOCoVvJoNr67Ms3q308EyC43LgnoNN0FhWU1Ygo 1uY2bn/IHbGwNOn1mNAARun9/ifXHgFYLR4IoFRX7jEsaQcNkusgwVVs7AM4mcjiVXtPsy1KwOS eSiQosBq0kn2u4eVdlbaWTJqIlAOL6GNNwjFATeVeI= X-Received: by 2002:a05:6000:4705:b0:484:3ad2:27d3 with SMTP id ffacd0b85a97d-4843ad228f2mr17224694f8f.2.1788199267099; Mon, 31 Aug 2026 11:01:07 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:06 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 01/16] media: ov8858: Extract digital gain programming Date: Mon, 31 Aug 2026 20:00:46 +0200 Message-ID: <20260831180101.3109854-2-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the existing packed digital-gain register programming into a helper so clock-specific gain handling can be added separately. This is a pure refactoring: preserve both the register packing and the explanatory comment without changing the bytes written to the sensor. Assisted-by: LLM sparse Signed-off-by: Maurizio Casciano Reviewed-by: Andy Shevchenko --- drivers/media/i2c/ov8858.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/drivers/media/i2c/ov8858.c b/drivers/media/i2c/ov8858.c index 3f45f7fab833..d95f034de752 100644 --- a/drivers/media/i2c/ov8858.c +++ b/drivers/media/i2c/ov8858.c @@ -1523,6 +1523,23 @@ static int ov8858_enable_test_pattern(struct ov8858 = *ov8858, u32 pattern) return ov8858_write(ov8858, OV8858_REG_TEST_PATTERN, val, NULL); } =20 +static int ov8858_set_long_digital_gain(struct ov8858 *ov8858, u32 gain) +{ + u16 long_gain; + + /* + * Digital gain is assembled as: + * 0x350a[7:0] =3D dgain[13:6] + * 0x350b[5:0] =3D dgain[5:0] + * Reassemble the control value to write it in one go. + */ + long_gain =3D (gain & OV8858_LONG_DIGIGAIN_L_MASK) | + ((gain & OV8858_LONG_DIGIGAIN_H_MASK) << + OV8858_LONG_DIGIGAIN_H_SHIFT); + + return ov8858_write(ov8858, OV8858_REG_LONG_DIGIGAIN, long_gain, NULL); +} + static int ov8858_set_ctrl(struct v4l2_ctrl *ctrl) { struct ov8858 *ov8858 =3D container_of(ctrl->handler, @@ -1531,7 +1548,6 @@ static int ov8858_set_ctrl(struct v4l2_ctrl *ctrl) struct i2c_client *client =3D v4l2_get_subdevdata(&ov8858->subdev); struct v4l2_mbus_framefmt *format; struct v4l2_subdev_state *state; - u16 digi_gain; s64 max_exp; int ret; =20 @@ -1570,17 +1586,7 @@ static int ov8858_set_ctrl(struct v4l2_ctrl *ctrl) ctrl->val, NULL); break; case V4L2_CID_DIGITAL_GAIN: - /* - * Digital gain is assembled as: - * 0x350a[7:0] =3D dgain[13:6] - * 0x350b[5:0] =3D dgain[5:0] - * Reassemble the control value to write it in one go. - */ - digi_gain =3D (ctrl->val & OV8858_LONG_DIGIGAIN_L_MASK) - | ((ctrl->val & OV8858_LONG_DIGIGAIN_H_MASK) << - OV8858_LONG_DIGIGAIN_H_SHIFT); - ret =3D ov8858_write(ov8858, OV8858_REG_LONG_DIGIGAIN, - digi_gain, NULL); + ret =3D ov8858_set_long_digital_gain(ov8858, ctrl->val); break; case V4L2_CID_VBLANK: ret =3D ov8858_write(ov8858, OV8858_REG_VTS, --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.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 1939C36EAB1 for ; Mon, 31 Aug 2026 18:01:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199274; cv=none; b=g9dNNjJIIoCFFX8qTUO9P9R4CAydGNGE2cFx7QcEpOB755DVgk0lG8xyO7FjVG6z/9YRvS1ryuis/D9g+GAED0eL2hbKb6jyuEpzsLchKAEYa5MmsCNyoyNoEACeQ1W7xCO98AjIS64O/MT1s0sFom6HvKwK2RincgFb6TlwXFo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199274; c=relaxed/simple; bh=X3y0+huGeBkqz2SIeq+v7VgkzaC0sHaiJPQz2ZX1DK0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=q1mIvRnlcHyu+eRqzKF8NJn9Ob2kxf+HRPGZki9KnDxA7UvJnkAYalT25uLMS83EAdCRbtpT/xQHJppDXNql55iKApgrq+7s16EH1uaoJSnfadFDVyFM+PLq1bmhWsLqoXz55ey3sMVM81uR7sNW6Kwr8BOsX4/kAttOuau6O4Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=V7nJ1Lxx; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="V7nJ1Lxx" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-4843e9c5960so30368f8f.0 for ; Mon, 31 Aug 2026 11:01:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199270; x=1788804070; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=rYpa27SwXt8L5hkAEPMbN96uEotCPJqdNFD3yiUDF0s=; b=V7nJ1LxxPtFDS3K38kuaBTaa/ZYJilJEnP3bz0m6fnBd2d7WICwzF68LSwkv/zr1Hj s+p7O48+/QiK44QPLlbNAidIXnhgDKkMGo7zSzDuFewJ+QBvx9wBSdHa92tOKKTYnOay zSV3Ea0VnBwzvL6jlrghbl3cCq3i/jVo7B8fRVm0eT5xVTagDIZCxg233KeDiY/rqFTu DK8esgXpp37sZ8eDH3Gn+TxLt7Ed7gwX5UWblAY03xuwn1RbOQm08S/1dVH5l672hjcU k84nZArGqIWySQ6eBk5w6FDPidH7BhmmXNXe/tyqu1isv9UgkZcrV6pN+IGu5HpAWPHR cZhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199270; x=1788804070; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=rYpa27SwXt8L5hkAEPMbN96uEotCPJqdNFD3yiUDF0s=; b=j7mMGxd9nAF8wdSFLlLnLRCwgmXn5y2K2SdXD2wcf0SqU+pjwoCNHns7+Vqq/YcNgK XQebcuU9MncAyUIlSUrvrAG3RQASVQKzje4Fno6BTq6yOI/mzYqpCQ7NoovsKP9JI2M5 KsC3DDPhFxyj6Ti++DAkIWRbcDoxE/orFwg11zTvGmbypK99IcJE/OyuXYwL9D6w/Ocy 5Bi0jB2gqiYv0RAYYMV/ieN7kPaiWb0cPs7Z6A1K0kglfAq6Xr4flbFy67MmJiGD470q GC/98TjPOtYJihb/uALCINGRnvzSXdaNxmXhbd+9jrNexzAZwy1mIEb+02/6CP/esScM G0CQ== X-Forwarded-Encrypted: i=1; AKwUvByPqFsrZ7rXRFw0rUSahBmmFbuP9gB4AOZrY7a4qyCCEdup0nVUJHAt0U0R2k8B109LsaecNQ9Gqoq1jos=@vger.kernel.org X-Gm-Message-State: AFuF++lkJvm8lANykU9tEzKkfVd1WHrOpxYaHeF+oKpjaDxXy3OHBAnR OoRIG1w8r0bgEQzMU2PgRCjMr4cltO4wyn24I0orzXhe6Y9iXcNtWCG/ X-Gm-Gg: AYBFou04Mfl7CN0120YlcZiQQoSFJY0Wpjq/qwBojXCWiz40UMvX2rp+Zr6bW1SXx4e LXhzxpqAa94XlMUy3jFiMOWCVvm8kMBsJXL75pOjiy+Ou7x3N+Tcxh6NR2Gq6IKZ/6ntZXNzwP1 fWWBnSwSD2rgTaQOP+VcWX40yRJch/WSL0JdjSeaVuwzyJT+jdLTwaLPhl9WksyqYTFRKLdR/pT x3UiUK7asif0nYaPB6D6trpeJfzZFJ/WASYkIbZYEvrAXgiAQFWjdkjUkM5TlPyolCeHXbJL5vC cFFlnms4T2+mzdB94HHSA6TuW3piEyFGYhJQUiTBGs2lOW/t1YeVhTEChHC/3CN0Yb1usWzASNK 3L3uH60i4we1abWQlSmnmPiWiOOvWMPOmu7X3CfTVpSqwT1wNYBNiCtmRv7ttLO5XYkAB8ARBEf KxvjsIr7SatHinkqdYUUdZoDixL662D5HUv+7pElrIgpvs6FTTKJSGRwOwKNPQ9O1T5xaY6bEqP guz3OotfjR4hRIBmb1FcWqs346q7FziXCwKSIqaS0g= X-Received: by 2002:a05:6000:4b0c:b0:47f:d011:f644 with SMTP id ffacd0b85a97d-482f7977ad2mr44035745f8f.4.1788199269196; Mon, 31 Aug 2026 11:01:09 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:08 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 02/16] media: ov8858: support 19.2 MHz clock and CHT gain setup Date: Mon, 31 Aug 2026 20:00:47 +0200 Message-ID: <20260831180101.3109854-3-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Yoga Book drives its OV8858 from a 19.2 MHz platform clock, while the existing mode tables program the sensor PLL for 24 MHz. Reusing those settings produces incorrect internal and CSI-2 clocks. Accept both input rates and use the actual rate for the reset delay. For 19.2 MHz, apply the Cherry Trail MRD PLL and black-level settings after the generic mode table. The 19.2 MHz platform uses the per-channel manual white-balance registers for digital gain. Program registers 0x5032, 0x5034 and 0x5036 and expose their 1x-to-4x range, while retaining the existing long-exposure gain block for 24 MHz systems. The manual white-balance register definitions and programming follow the GPL-2.0 Intel OV5670 driver, so retain its 2017 Intel copyright notice in this file. No proprietary source or tuning binary is included. Tested on the Lenovo Yoga Book YB1-X91L OV8858 with full-range test bars and real 10-bit Bayer frames. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- drivers/media/i2c/ov8858.c | 130 +++++++++++++++++++++++++++++++++---- 1 file changed, 118 insertions(+), 12 deletions(-) diff --git a/drivers/media/i2c/ov8858.c b/drivers/media/i2c/ov8858.c index d95f034de752..d45659bd5dda 100644 --- a/drivers/media/i2c/ov8858.c +++ b/drivers/media/i2c/ov8858.c @@ -3,10 +3,9 @@ * Copyright (C) 2023 Jacopo Mondi * Copyright (C) 2022 Nicholas Roth * Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd. + * Copyright (c) 2017 Intel Corporation. */ =20 -#include - #include #include #include @@ -18,6 +17,8 @@ #include #include #include +#include +#include =20 #include #include @@ -28,8 +29,9 @@ #include #include =20 -#define OV8858_LINK_FREQ 360000000U -#define OV8858_XVCLK_FREQ 24000000 +#define OV8858_LINK_FREQ (360 * HZ_PER_MHZ) +#define OV8858_XVCLK_FREQ (24 * HZ_PER_MHZ) +#define OV8858_XVCLK_FREQ_19_2MHZ (192 * HZ_PER_MHZ / 10) =20 #define OV8858_REG_SIZE_SHIFT 16 #define OV8858_REG_ADDR_MASK 0xffff @@ -59,6 +61,14 @@ #define OV8858_LONG_GAIN_STEP 1 #define OV8858_LONG_GAIN_DEFAULT 0x80 =20 +#define OV8858_REG_MWB_RED_GAIN OV8858_REG_16BIT(0x5032) +#define OV8858_REG_MWB_GREEN_GAIN OV8858_REG_16BIT(0x5034) +#define OV8858_REG_MWB_BLUE_GAIN OV8858_REG_16BIT(0x5036) +#define OV8858_MWB_GAIN_MIN 0x400 +#define OV8858_MWB_GAIN_MAX 0xfff +#define OV8858_MWB_GAIN_STEP 1 +#define OV8858_MWB_GAIN_DEFAULT 0x400 + #define OV8858_REG_LONG_DIGIGAIN OV8858_REG_16BIT(0x350a) #define OV8858_LONG_DIGIGAIN_H_MASK 0x3fc0 #define OV8858_LONG_DIGIGAIN_L_MASK 0x3f @@ -93,6 +103,33 @@ struct regval_modes { const struct regval *mode_4lanes; }; =20 +struct ov8858_gain_range { + u32 min; + u32 max; + u32 step; + u32 def; +}; + +enum ov8858_xvclk_index { + OV8858_XVCLK_24MHZ, + OV8858_XVCLK_19_2MHZ, +}; + +static const struct ov8858_gain_range ov8858_digital_gain_ranges[] =3D { + [OV8858_XVCLK_24MHZ] =3D { + .min =3D OV8858_LONG_DIGIGAIN_MIN, + .max =3D OV8858_LONG_DIGIGAIN_MAX, + .step =3D OV8858_LONG_DIGIGAIN_STEP, + .def =3D OV8858_LONG_DIGIGAIN_DEFAULT, + }, + [OV8858_XVCLK_19_2MHZ] =3D { + .min =3D OV8858_MWB_GAIN_MIN, + .max =3D OV8858_MWB_GAIN_MAX, + .step =3D OV8858_MWB_GAIN_STEP, + .def =3D OV8858_MWB_GAIN_DEFAULT, + }, +}; + struct ov8858_mode { u32 width; u32 height; @@ -104,6 +141,7 @@ struct ov8858_mode { =20 struct ov8858 { struct clk *xvclk; + unsigned long xvclk_rate; struct gpio_desc *reset_gpio; struct gpio_desc *pwdn_gpio; struct regulator_bulk_data supplies[ARRAY_SIZE(ov8858_supply_names)]; @@ -121,6 +159,41 @@ struct ov8858 { unsigned int num_lanes; }; =20 +/* + * Cherry Trail MRD production settings for a 19.2 MHz input and 360 MHz + * CSI-2 link. Apply these after the otherwise reusable 24 MHz mode table. + * + * Besides the corrected sensor/MIPI PLL divisors, keep the final common + * black-level settings here. The per-mode tables retain their resolution + * dependent black-column anchors and window sizes. + */ +static const struct regval ov8858_cht_mrd_19_2mhz[] =3D { + {0x0300, 0x00}, + {0x0302, 0x27}, + {0x0303, 0x00}, + {0x0304, 0x03}, + {0x030b, 0x00}, + {0x030d, 0x27}, + {0x030e, 0x00}, + {0x030f, 0x04}, + {0x0312, 0x01}, + {0x031e, 0x0c}, + {0x3f08, 0x08}, + {0x400a, 0x01}, + {0x400d, 0x10}, + {0x4011, 0x20}, + {0x403e, 0x08}, + {0x4040, 0x07}, + {0x4041, 0xc6}, + {0x4202, 0x00}, + {0x4500, 0x58}, + {0x470b, 0x28}, + {0x4837, 0x15}, + {0x58f4, 0x32}, + {0x58f8, 0x3d}, + {REG_NULL, 0x00}, +}; + static inline struct ov8858 *sd_to_ov8858(struct v4l2_subdev *sd) { return container_of(sd, struct ov8858, subdev); @@ -1345,6 +1418,13 @@ static int ov8858_start_stream(struct ov8858 *ov8858, if (ret) return ret; =20 + /* The mode tables contain PLL settings for a 24 MHz input clock. */ + if (ov8858->xvclk_rate =3D=3D OV8858_XVCLK_FREQ_19_2MHZ) { + ret =3D ov8858_write_array(ov8858, ov8858_cht_mrd_19_2mhz); + if (ret) + return ret; + } + /* 200 usec max to let PLL stabilize. */ fsleep(200); =20 @@ -1540,6 +1620,21 @@ static int ov8858_set_long_digital_gain(struct ov885= 8 *ov8858, u32 gain) return ov8858_write(ov8858, OV8858_REG_LONG_DIGIGAIN, long_gain, NULL); } =20 +static int ov8858_set_mwb_digital_gain(struct ov8858 *ov8858, u32 gain) +{ + int ret; + + ret =3D ov8858_write(ov8858, OV8858_REG_MWB_RED_GAIN, gain, NULL); + if (ret) + return ret; + + ret =3D ov8858_write(ov8858, OV8858_REG_MWB_GREEN_GAIN, gain, NULL); + if (ret) + return ret; + + return ov8858_write(ov8858, OV8858_REG_MWB_BLUE_GAIN, gain, NULL); +} + static int ov8858_set_ctrl(struct v4l2_ctrl *ctrl) { struct ov8858 *ov8858 =3D container_of(ctrl->handler, @@ -1586,7 +1681,10 @@ static int ov8858_set_ctrl(struct v4l2_ctrl *ctrl) ctrl->val, NULL); break; case V4L2_CID_DIGITAL_GAIN: - ret =3D ov8858_set_long_digital_gain(ov8858, ctrl->val); + if (ov8858->xvclk_rate =3D=3D OV8858_XVCLK_FREQ_19_2MHZ) + ret =3D ov8858_set_mwb_digital_gain(ov8858, ctrl->val); + else + ret =3D ov8858_set_long_digital_gain(ov8858, ctrl->val); break; case V4L2_CID_VBLANK: ret =3D ov8858_write(ov8858, OV8858_REG_VTS, @@ -1622,9 +1720,6 @@ static int ov8858_power_on(struct ov8858 *ov8858) unsigned long delay_us; int ret; =20 - if (clk_get_rate(ov8858->xvclk) !=3D OV8858_XVCLK_FREQ) - dev_warn(dev, "xvclk mismatched, modes are based on 24MHz\n"); - ret =3D clk_prepare_enable(ov8858->xvclk); if (ret < 0) { dev_err(dev, "Failed to enable xvclk\n"); @@ -1643,7 +1738,7 @@ static int ov8858_power_on(struct ov8858 *ov8858) * transaction, but a double sleep between the release of gpios * helps with sporadic failures observed at probe time. */ - delay_us =3D DIV_ROUND_UP(8192, OV8858_XVCLK_FREQ / 1000 / 1000); + delay_us =3D DIV_ROUND_UP(8192, ov8858->xvclk_rate / HZ_PER_MHZ); =20 gpiod_set_value_cansleep(ov8858->reset_gpio, 0); fsleep(delay_us); @@ -1701,9 +1796,11 @@ static int ov8858_init_ctrls(struct ov8858 *ov8858) { struct i2c_client *client =3D v4l2_get_subdevdata(&ov8858->subdev); struct v4l2_ctrl_handler *handler =3D &ov8858->ctrl_handler; + const struct ov8858_gain_range *digital_gain_range; const struct ov8858_mode *mode =3D &ov8858_modes[0]; struct v4l2_fwnode_device_properties props; s64 exposure_max, vblank_def; + unsigned int xvclk_index; unsigned int pixel_rate; struct v4l2_ctrl *ctrl; u32 h_blank; @@ -1746,10 +1843,12 @@ static int ov8858_init_ctrls(struct ov8858 *ov8858) OV8858_LONG_GAIN_MIN, OV8858_LONG_GAIN_MAX, OV8858_LONG_GAIN_STEP, OV8858_LONG_GAIN_DEFAULT); =20 + xvclk_index =3D ov8858->xvclk_rate =3D=3D OV8858_XVCLK_FREQ_19_2MHZ ? + OV8858_XVCLK_19_2MHZ : OV8858_XVCLK_24MHZ; + digital_gain_range =3D &ov8858_digital_gain_ranges[xvclk_index]; v4l2_ctrl_new_std(handler, &ov8858_ctrl_ops, V4L2_CID_DIGITAL_GAIN, - OV8858_LONG_DIGIGAIN_MIN, OV8858_LONG_DIGIGAIN_MAX, - OV8858_LONG_DIGIGAIN_STEP, - OV8858_LONG_DIGIGAIN_DEFAULT); + digital_gain_range->min, digital_gain_range->max, + digital_gain_range->step, digital_gain_range->def); =20 v4l2_ctrl_new_std_menu_items(handler, &ov8858_ctrl_ops, V4L2_CID_TEST_PATTERN, @@ -1887,6 +1986,13 @@ static int ov8858_probe(struct i2c_client *client) return dev_err_probe(dev, PTR_ERR(ov8858->xvclk), "Failed to get xvclk\n"); =20 + ov8858->xvclk_rate =3D clk_get_rate(ov8858->xvclk); + if (ov8858->xvclk_rate !=3D OV8858_XVCLK_FREQ_19_2MHZ && + ov8858->xvclk_rate !=3D OV8858_XVCLK_FREQ) + return dev_err_probe(dev, -EINVAL, + "Unsupported xvclk rate %lu Hz\n", + ov8858->xvclk_rate); + ov8858->reset_gpio =3D devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); if (IS_ERR(ov8858->reset_gpio)) --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.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 4F5B336F911 for ; Mon, 31 Aug 2026 18:01:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199274; cv=none; b=TVwZucwtA/tLOO+k4aiUy/f2aT2XYHtsGK45LPVJEmdQ5xDDzAx22PDa/H3+HlXEA5NXm0Laj3G8WOmmHGHI+MgtGaDACTPIC6KPYoUbUIEDdIreHcE0M5arH+zKwCLg15zJMLIj6EdbpRwwIYQQQtRl1tEc0JamMIenXLN0bj0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199274; c=relaxed/simple; bh=dMHhEeZzc+g0IX6lqLqY4IrziqVxJJRg2znt5XQ0Rfw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SGKYX0Gg/H17zgvzbE1cs7n2vd85fzzdSaY6clC+V+KQVwzDj9Q47+5WVexqcmRGtzWxE90uW5gE8iiM17CIxMtpf4cVqNSsmlxnoCf8RjSNIMWUgMz8SI17erN+60xE/hQmdTL12lG8/vmNeA0H5ft1JEfQ87oCM1LIDF7GnLk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Hz1bYt9q; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Hz1bYt9q" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-482dd6ee390so7630f8f.3 for ; Mon, 31 Aug 2026 11:01:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199271; x=1788804071; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=7XzF2GiQLWqxybVzvZE6EZJoLEDzHgosCVIqT/75toU=; b=Hz1bYt9qegPJNuqeM3uF3vn4xBuE+VJNIQ6vhJoJwi4PMPuXG2JDwX5xXzK3Y0V+A9 67hTWWCLTfCcWE8IZN4gj8lMpXxXTgEz9wprw7tjkeld3l3nl5XsDYk5JypUsDC742J3 Q8lzg7dV4i+ayAuywwaRLHNGt59nHwimNcTdIWsjG+a5ebcBireSyvLsmhV+I50M6J2/ S367YpFv2V+tktMII5Oy335hcFZSKSPF5s7QV3AReW3W/ql/Rti+CraV+tBT3pARXq9t 5wwNglH2h4i7n9EA5sP3mhEPgwCKoK+c5VIbBmExPpD2ZV4mxWRWi2CvTT2jzrXahf8O iSrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199271; x=1788804071; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=7XzF2GiQLWqxybVzvZE6EZJoLEDzHgosCVIqT/75toU=; b=YNU6p6YhY1C/opKQR2p/VD3+/1Cae8UjIFK1ZeARn49YL6CoovnOKfQsl7X1z9QVFa S5sV29gpWOfqc4dfZPLEIvco6tyDmv2qRh9EILZJReOuKV8hcy2cLdZyxRvFmaF17x2P 4rbQ7ZgZS2DVIRfR6b87cc216frzwZOu22SOgl5vdVLqBUKRj//hA1ZdZmVfWzvQyKbI M3VFgWGwn7nn55a+w+N9ZCMb7SkKbm+u4lxC1NyQv0/F+DG3vjzlawe5gBmhD3m17dIU mWdWxzOJv+OMnT+nnE3OBY4FS/wkBS2fOsEjQTGb+7AHS/0ZC110Vi6JKIh6Htw75ILT 5KSA== X-Forwarded-Encrypted: i=1; AHgh+Rqd+1pd78wTFswbklE2kiO0SSdgAo2jhjPtZNU5On3PMz3vJZEPQ8Jg2CJdJApTFIHj5h/8kf/fFWdLd/k=@vger.kernel.org X-Gm-Message-State: AFuF++kBVBQiv6wmuk0ijn+kFHE7JcGqv1BKYjdHsKtM9gkPWH5SPkRX zB+S6RuCYYn+r8wvVLHkMnoqD7gvKKbWAE292Ib+20B7zaG7xAYgEoOm X-Gm-Gg: AR+sD13OUkvMvqL1a8Dhzdw0BvxJonJNv46TtV6840m7I5q2AHGWZ+JOcW+ZOba05hT 2DFO6F9M1BgBateXgIMOTCGCFfCDorTGfvOy0xJPUDUhDKzeZTjxG1Hhv0N4bukn6ZgJu9WrTAw 84SYLWI2pW0ak9mrZVs2SKIhlfGA+HmYeR+scLG0jzmIqXyiYgtvc+Iku91sLF+75EoZUUC/tQN oy+p6BLVC1xUu3552FebO/OeH3DijupWI4zUX5YlRRjobEJ4t3NTKFGMjV++erKhBO0lZGbMa4t c8WFDFo4Ifv6/6Uk+sR3qakTPfkcen4B/vrr6vJWRNs1E7gJLUWcipQDfOWHboDyPgIl94SuA/j hfhHavQ7G9EGguHz6bylpZ+EHwVaqIxBjOGP/xcoq2ykxxVS6Dp8Casby3d6t1hLuoafcNlkRDQ tv6ynMxWievLqaFCu2mpeQ0Lkni91fArUtfIkxY9wX7y+IS08xLSnBThq3YwrGzZT+rykdYjcu2 kz8XY2FY2gcSa2oIj0AqnUdmQinlEA7BGdxZd+em5u6eEShJrrDMw== X-Received: by 2002:a05:600c:46ca:b0:49c:db20:da13 with SMTP id 5b1f17b1804b1-49cdb20dd1bmr85500855e9.5.1788199271314; Mon, 31 Aug 2026 11:01:11 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:10 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 03/16] media: ov2740: Use C99 initializers for ACPI IDs Date: Mon, 31 Aug 2026 20:00:48 +0200 Message-ID: <20260831180101.3109854-4-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use designated initializers and the standard empty sentinel style before adding firmware IDs. Suggested-by: Andy Shevchenko Reviewed-by: Andy Shevchenko Assisted-by: LLM sparse Signed-off-by: Maurizio Casciano --- drivers/media/i2c/ov2740.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index 39003c1632ad..8f0ad5dbb245 100644 --- a/drivers/media/i2c/ov2740.c +++ b/drivers/media/i2c/ov2740.c @@ -1461,10 +1461,9 @@ static DEFINE_RUNTIME_DEV_PM_OPS(ov2740_pm_ops, ov27= 40_suspend, ov2740_resume, NULL); =20 static const struct acpi_device_id ov2740_acpi_ids[] =3D { - {"INT3474"}, - {} + { .id =3D "INT3474" }, + { } }; - MODULE_DEVICE_TABLE(acpi, ov2740_acpi_ids); =20 static struct i2c_driver ov2740_i2c_driver =3D { --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.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 52575372070 for ; Mon, 31 Aug 2026 18:01:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199277; cv=none; b=MNOssp6cigcNzLX4JWn7Pcv5eZAwMdYzgFdSxTSqzIGwNZkq9hu3RYxzHflGafnRPUXcV+UnJebbZ/Hqpa09PAggs67spuCYorN47ZfRR03UfwAtn36qqNZqM1teWFGJDlxOWDPUpxKFBrqWAauW/qawIqbDQ/I5eqIHuj4KU3Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199277; c=relaxed/simple; bh=cmLSqzifwOF8w3gy+VghqBDjtxfwKg/n6RMNTB5n+1o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=houGa8IT97n32naiwr4nZvK2jpOgvHTWN0zofZBoPEeb8HhY/jwJcQCo3gukTfDusVxCkFYqZKJaf4GPU5p3yrcz/IatdS8vdKXdlOtq4XaUGGMzcM1qcWfCYlvstZjmMxK+nfjdP95sTcUIhgGe1phxmIIBmHztgAHGcs6jl+s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NaEcGN8g; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NaEcGN8g" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-48441a2ba14so119054f8f.1 for ; Mon, 31 Aug 2026 11:01:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199273; x=1788804073; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=qlC264ZmuNC9OaSCC+Hoy8y6Tn/lQ6yUUOOH17G4Le0=; b=NaEcGN8g7rsZ7imrCNb0vXZtb2m9MDn0Ikvb4xS0NYcaTK+OLAAzXhy1OzGhPo7tqj jEll4HpOkXNE1BvWdE5to+bSNoGH1Q/DPd4J2ONc8+TamGidls/1XeIhfQ1taH+QaGoS qMO6wXHaym3ILxVfMn2kx3WrS5LDps4xZl3QIUZUClhLcHDWykibVj3e2XRjlEM08iLA lNUniNH/Xqrd+GK9cbrF8e/E0c8uZ9cTOFQDkPr/itWa7PdcFiM881rCv2myYIe9UtRU nPw+zSeAT0oNiyt5mXaoIIHgqVRjEFHBCzBDAadZI3N3AqvYwM4EQQLlAnfRIpKLYMtj CHxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199273; x=1788804073; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=qlC264ZmuNC9OaSCC+Hoy8y6Tn/lQ6yUUOOH17G4Le0=; b=FAB5KUIDq78TxWVJOtIoeRqI3AgRZTi6w3pKLFVz1DzpvSh31lulfvmmFNiQvD7Caw 5Ygz6+6S9MzynzCfEP85+yjdJ2iqHWsP3CrvnVqNqhl25tDDRZIBdwL4MYubpli//Pou p3MODRpsRSLBHFbBunEM0cn4dI2nDqAiUyqNGv7Ay6FOd2zaC3dvp4RXmhmFB8PvXmOj zTYzzzvin6VyMk10yOWXdwVflpHp/9AnfP53h+qOxvUqlLPUvHQ+dt6sKtJbPfYwXkNP jzfS+qVt8UQmJBEp18FwQj7oOA4jMRuhWXnT02S6KVOjrEMyKbME8Z2fayxBRqU8fnvc /wyg== X-Forwarded-Encrypted: i=1; AKwUvBxVwPt//DK0vN1KB2NXotTQXqT9xn37Ig9BY31XxaPlW0ixL2NcyqrMNwmqDRDbnbDQUL4y1BtS1Z6E07k=@vger.kernel.org X-Gm-Message-State: AFuF++nd+cKPojz1VC6FfwohFfxIq28jh+/ZpHqVWnwc/cS5928Jd853 mBYwLH/UUVCQACKuVbexllyX/VQuHHY6DkVcCB/Cs/TTDtgitkul8Z9f X-Gm-Gg: AYBFou2GIBrQ4UOwcLEOyN/xon5XmEFN2qZ5wksdPOXQkLfGoXj2riBVPp/8/qr1EP4 bAL6X2tbr9kpuURVvrKEkL25sVJfIlwSpJ55YD2QudfMfie3B7IlNnMY13rsO2zEymzJxQjhwg+ LPP80y5OhX6KQFMIl+kUB87WnvSnUxvsor1KsMf0M7Ua1+wp1+RIFVmKIqB7NZQy2dW+xsZdQxy tzfDqeN7iRTb26tGe7gPeCvTmRxwtU2xEBrwnefuPpknW43aNGJ3R7mBlEpdy+11/IK4N+JN0Lk Kex0ZoKaVtmckgJKecAGBQUtUuTmr2Hi7ob6SSfu/AI/R4pOvrtI1sUouWF0odUyTGNf2Q6XZN3 V5+BxBSR9Ma6nZVnBgApVzeTx61mo9pU1DYcSDLlKE8PA4fKzx/pCuWB69hTrwcuK2oFFaIrgmj yOgBhFnIB1gjKvSIg6km2oAcQV3O5/TAf/taKO4wCwt0DlVo3bmExQp3aoMyBTXcG7Z2TX5JUuN 0IrqmfYnnwrN79oi9dePW7pWK+zdyNTVc+ckCqno6c= X-Received: by 2002:a05:6000:40dd:b0:482:e4bc:51b3 with SMTP id ffacd0b85a97d-482f799da20mr41606868f8f.1.1788199273297; Mon, 31 Aug 2026 11:01:13 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:12 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 04/16] media: ov2740: Add OVTI2740 ACPI ID Date: Mon, 31 Aug 2026 20:00:49 +0200 Message-ID: <20260831180101.3109854-5-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Firmware may enumerate OV2740 image sensors using the OVTI2740 ACPI ID. Add it to the existing ACPI match table. Signed-off-by: Maurizio Casciano Reviewed-by: Andy Shevchenko --- drivers/media/i2c/ov2740.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index 8f0ad5dbb245..18bb3ac9701f 100644 --- a/drivers/media/i2c/ov2740.c +++ b/drivers/media/i2c/ov2740.c @@ -1462,6 +1462,7 @@ static DEFINE_RUNTIME_DEV_PM_OPS(ov2740_pm_ops, ov274= 0_suspend, ov2740_resume, =20 static const struct acpi_device_id ov2740_acpi_ids[] =3D { { .id =3D "INT3474" }, + { .id =3D "OVTI2740" }, { } }; MODULE_DEVICE_TABLE(acpi, ov2740_acpi_ids); --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.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 4BB60374A06 for ; Mon, 31 Aug 2026 18:01:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199279; cv=none; b=cldgxRVMU0mZ7kzhgayh2ThhcvB+EYL/1i7R2Wkw6o1YJxkpFCqHV7vFX6JIKl2Z/Tb2mI4wMkZuQlqdn8fRoAUkMdNYM/Ps8nkL89fgrhNuzlJIZzlZnO3+u1e7zUfi1cFeOn9OeLt1ZOlQw2qZBGImhwJTC/Hc84EjgE98wnU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199279; c=relaxed/simple; bh=sTTdJ+a915WjRhsMxkVa81I/Ww6U/l+JAdnO6byk8Sc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QuNIzZCqORN+X9/l9/1YylmDC5N6qL+851sgEFShvcYWNPZtUyloteHnvwvXXIsh6AelUyC5YbVV3zGByrestJCid3ZJJ4cWf1+dI6DKF5ywPHeO7i2aORjD0yeu9fV9cnQFFtSjXHhRZnV4bLJuqpeSAhsghfi29KdhG48sbXg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=d/kuU7q7; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="d/kuU7q7" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-482e5733a5aso2243536f8f.0 for ; Mon, 31 Aug 2026 11:01:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199275; x=1788804075; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=O14LPPXLUHkibdGlwfhv5IQQ+lgmVBBTlfYVPR5q/qg=; b=d/kuU7q75vrWH2t1z1IpGS1n/BfIVuCCnA1g7v1Wk2j+DLxGYQ9z+bQJjxXCNVKJnY 5Dqo8tK80c7sMOFkFl5fDR3//JDQKjNFcPSpfqXLKkc17w5ljtUPJDsISmGWMQgooOL6 YJNfQ41kLpNO7umtAwh+9GdGKqQnqXijJS43cEHC+g1vUkKdGPV4EOpk2+WsuPyudgfy QUhMtJYiPCBht424dStTKbS4LU3LdZHa5prnh8i63Fkp3JoMRdmoelJzGevY0z8kcTzS o2ByYriA8T8OFqDOb/jZExrTNVGZZFb5z5cQ24ZAx7mlIisSSWvtxamf0qI5wYjGMy4g d1Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199275; x=1788804075; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=O14LPPXLUHkibdGlwfhv5IQQ+lgmVBBTlfYVPR5q/qg=; b=s4tAThRUpJ/ji2tJSt4uViNQuBbmXcyaL39T4+0YR6+1Clye+NEp2I8j7bty8DsRlM ZNWvz0AyHwRAxEBiH/BYssQEiaoqCK79d5TcpI+qTHsVQuqVQyZPPKG0iS4vj9WXkLTE kk6BvTFEc9HiKuvuZJ7gkIVHyU38hHvj1I8epDRklfPJV+jeYHAVV66gLLmEodJ5+rJj 0/IOni8Ag/HOFE74UQ7HssBhbnh0jwcaoQTHjLtw8f/MbBvJm1855yr4cU26dE16l90L 1YkAoa9Ov9gZ56DFu73LKOCAQj1Sd5MAzb/ExNIKopktxPRgPghGWnx8NtWSn5QbT+m0 hUfA== X-Forwarded-Encrypted: i=1; AKwUvBzLqdGj3l9cMnncDshns+KtLE0jTkBuILiBCUn0K7jreuQSfNqAJVO4e5ldNsMOnf/88eqGWapIbLSSffo=@vger.kernel.org X-Gm-Message-State: AFuF++nT7UJV2o+eFHWbBQM5Pm+xak6I//XipZzwxQP65+h7bBsPPdOj 3JTSFJ/Ci4FO6W3F/NIt2DxBt13r5q+yFC6OMLDhkXuBYV1PxSzrnGrT X-Gm-Gg: AYBFou1cPumRBCIqy/CfpIZD1AbSnKu5T74As9Lhwg38+uDcEKLd1/ZTwDVVxQNEOx1 kGZibVAaTvI+vXvY5EDI0fcy0LYqvpJHL2msOn5S8MbSD6MFH3TnGBho/5JILtao7hbQv1ejYwa brjnrW3mMPnR5br1R2X0A56EOiuo0n/+OqfseJM4XJqQxzz5l6Oyg8K50nU3LeaYIZLM0I+oWM1 gVcLnrX8pSZnuEtydUZNq9/W9hlIsCbL3t/HW4tBv7c8mpRD7rP+TOcCBEAsvp1Y6tx7SGWhBV7 mRWlZs57Ktv9flvTkDfbP6McVpvx2WardugGXX0yKDE0OogzrFK5Wx3UlKTcgYEik+HtGx1ZKqp x4CaIc/C/u8PTrsC9oEuIG6qxcaPCDg2i+5yceAWGtiRlsw6F7eiFWB4SzNqwPyXNBSXhaLBJqI 7pneVvE3FZ1CMmxfknfab4hUiosVMBEhrCRyAE79jJKrayvOczbCuRuAg7nirKBpaQZVrJJCset Tw8agL/HiC4biY7SOg8p9ocWIzoe2Z85EeOjmLkmik= X-Received: by 2002:a05:6000:64a:b0:484:3310:710d with SMTP id ffacd0b85a97d-4844102ad9amr4771790f8f.25.1788199275336; Mon, 31 Aug 2026 11:01:15 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:14 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 05/16] media: ov8858: Add INT3477 ACPI ID Date: Mon, 31 Aug 2026 20:00:50 +0200 Message-ID: <20260831180101.3109854-6-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Firmware may use INT3477 as the ACPI hardware ID for an OV8858 image sensor. Add an ACPI match table for that ID. Signed-off-by: Maurizio Casciano --- drivers/media/i2c/ov8858.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/media/i2c/ov8858.c b/drivers/media/i2c/ov8858.c index d45659bd5dda..e48902d517aa 100644 --- a/drivers/media/i2c/ov8858.c +++ b/drivers/media/i2c/ov8858.c @@ -6,6 +6,7 @@ * Copyright (c) 2017 Intel Corporation. */ =20 +#include #include #include #include @@ -2087,6 +2088,12 @@ static void ov8858_remove(struct i2c_client *client) pm_runtime_set_suspended(&client->dev); } =20 +static const struct acpi_device_id ov8858_acpi_match[] =3D { + { .id =3D "INT3477" }, + { } +}; +MODULE_DEVICE_TABLE(acpi, ov8858_acpi_match); + static const struct of_device_id ov8858_of_match[] =3D { { .compatible =3D "ovti,ov8858" }, { /* sentinel */ }, @@ -2097,6 +2104,7 @@ static struct i2c_driver ov8858_i2c_driver =3D { .driver =3D { .name =3D "ov8858", .pm =3D &ov8858_pm_ops, + .acpi_match_table =3D ACPI_PTR(ov8858_acpi_match), .of_match_table =3D ov8858_of_match, }, .probe =3D ov8858_probe, --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.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 624A1376A13 for ; Mon, 31 Aug 2026 18:01:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199281; cv=none; b=E09dke0z1jdSx6Atv1fWv/E+GT8jV3uuQw/+Jw4oj4miHZbtDJsxEeZ45/BSkLD6uXET6b/K0JFFBFxsvpAvRSn8q2vj47Ts/44+E+mhHAaOkKpgLHKzUKrcaBX4b54XlHAu/ZW1pkR4jcEwrkauMvqmAkVa274a1IgJXl1pimI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199281; c=relaxed/simple; bh=WyTLm3nJrWyEPC1OlppN/k0EgaQgjfMDm7WlJrB5cQo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ILQnl/EIfbStgl0SDycSaXrjcTReAtnc/RH1A50nO4738Py3IBKuMTR3v66SuwjXjZviRHGWC09UXfZnqA2sK4xZTBPnwR+Vs+/q2hN6D2U5nXvweGUgSnkNkzcaoVyvIz46ADn9T8F32s382Rk6crzZPAmMKEc5hqwYbriaXGs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RVFOhfVy; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RVFOhfVy" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-48436216a98so981976f8f.0 for ; Mon, 31 Aug 2026 11:01:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199277; x=1788804077; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=KzgUwaQwZkakfwcRSTvIoOI/cqYjfJpPcdCsGPGI/Pg=; b=RVFOhfVyiuBLKVMcE9W869HhgXwsmvhC33RHBi9A1O8FINvXt76H1FD63nkDcoEsUm 3VcQqpJFOaIaUbqsguu4rOvLBtswj7O6uP9dXr/6l1sMZkeBYT8TgfQldtay2TpzHU1o 2Z0pvSfYWqYCLkQgX1fBsh2HD0maLmFLxInV69O8Bk09qsECnM8uBSNBuDWNHEO47c1p xC9w9JcR4TccXEGIe4JukTDzgH8JuZk3FOEfIGHxA8JawS41Xm2hlXx75+2ubIvYkTtQ eCLKYJj+KJw3zU8qsT9iBDO/7gZP54/L6FZXheVBBip8ZcFBS27qPkC7cEw4+xE+d1ev B1vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199277; x=1788804077; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=KzgUwaQwZkakfwcRSTvIoOI/cqYjfJpPcdCsGPGI/Pg=; b=DqptOb9CCdPdo9PDsh2YNUUOP/sNIsCqNpeWM6xI+qW3BUqShWHK140MgXaRsTqkMf JVq9Jq1jsDA7Xcq8SK1oBpCwssAUWr0CzQ873njpLvZCoawEUmDZnzwgAX3jG7Rp2T1X 7WO/TbPhG71qav0RRZu38PsNygmiuqh2TpDYZ299CmCgnKTpkd4BPVtgA8W6BNviisi7 YZuMiV4PJqcIL+r7iKnMCTvuA/4l6phiZmqINDW5OjzfhaCXhBcAReZSTTsBE+Js727f 5c0lCBi7bVrSKN8voD2MzU49oSEdrTHFcoCZm4Fa7P6b9VFB5s7kgKCH1Qn2ycD/yhEI 4e/Q== X-Forwarded-Encrypted: i=1; AKwUvBz5jnCOIByGu5FvZGE9PyNAYUN2zrKQzIY0tAUf/H4ld6F1UJrxZTziTkCSX/K/ttWCj0z/nQvx4Hj/+js=@vger.kernel.org X-Gm-Message-State: AFuF++nmMbkHMkcMItodITiex5iQBt0rGGnENUWAM7fx/a6LaglKuMV1 H0xyA+vSYnE1sGfy8eHveTso8q2KPFHt3eVPXOAl7Tq7qOhZAsP4Aoo5 X-Gm-Gg: AYBFou0zEjQhEVPWezckuYZzGcTfBETRW5CTJRZBgofw+PRXhBkXUTb+gFMy2I1EnVZ X1jOqHpMqn3tHYaXL6HiMu+uvsMAYjHfKknmMIj9waaeK8GWfrxOBZwAgYY2dncSiXe6vhQG/5W pje9qtwxWjrfdAUd1RRK2SIcfNvsPOIBRVRvXDtC4d7AlOf8fiEIAP2tn1m14txZmJ8vxAulHBg 89FA01H7WZnmy6EREI0P/GDpBP8dDTeRbJHqkT756lQ9orZQPCAGC1amcdLlus0j52H84rRKoTc DBR/WRHtK5DN7Hd60juItgeexa/JkcVTUwkOp+2EM+kzVI7iDRjUj1iVlXLgrGrqP7QYUOfaRAx m1uJ20ue3gLgrg4EQKGRdPsA8jBRrNuP92FE7MN3A7kv8ZQiH7+XkjQQPPGdwqYMN5Ij3fmIWy0 oh4Igup9qKNLqnV/J4Ovti5yZT6zpRhEZM5kZJJRPoAc/v+JHHrvyS4AeTAmelvNkW5KkjidFHd fiV+TJvsrjlf6Qncp5Ve8e7PB+f1XrIvqVIYNRMpdU= X-Received: by 2002:a05:6000:653:b0:482:fa3b:fab2 with SMTP id ffacd0b85a97d-482fa3bfcd5mr43581557f8f.19.1788199277291; Mon, 31 Aug 2026 11:01:17 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:16 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 06/16] media: intel: ipu-bridge: Add Yoga Book camera sensors Date: Mon, 31 Aug 2026 20:00:51 +0200 Message-ID: <20260831180101.3109854-7-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Yoga Book YB1-X91 uses INT3477 for its OV8858 rear sensor and OVTI2740 for its OV2740 front sensor. Add link frequencies consumed by the sensor drivers when the IPU bridge constructs software endpoints. This supplies endpoint data only; it does not establish that either sensor can stream on the Yoga Book hardware. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse Reviewed-by: Andy Shevchenko --- drivers/media/pci/intel/ipu-bridge.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/media/pci/intel/ipu-bridge.c b/drivers/media/pci/intel= /ipu-bridge.c index 1bb3a3e98d6b..47317c423fad 100644 --- a/drivers/media/pci/intel/ipu-bridge.c +++ b/drivers/media/pci/intel/ipu-bridge.c @@ -65,6 +65,8 @@ static const struct ipu_sensor_config ipu_supported_senso= rs[] =3D { IPU_SENSOR_CONFIG("INT33F0", 1, 384000000), /* Omnivision OV2740 */ IPU_SENSOR_CONFIG("INT3474", 1, 180000000), + /* Omnivision OV8858 */ + IPU_SENSOR_CONFIG("INT3477", 1, 360000000), /* Omnivision OV5670 */ IPU_SENSOR_CONFIG("INT3479", 1, 422400000), /* Omnivision OV8865 */ @@ -93,6 +95,8 @@ static const struct ipu_sensor_config ipu_supported_senso= rs[] =3D { IPU_SENSOR_CONFIG("OVTIDB10", 1, 560000000), /* Omnivision OV2680 */ IPU_SENSOR_CONFIG("OVTI2680", 1, 331200000), + /* Omnivision OV2740 */ + IPU_SENSOR_CONFIG("OVTI2740", 1, 360000000), /* Omnivision OV5675 */ IPU_SENSOR_CONFIG("OVTI5675", 1, 450000000), /* Omnivision OV8856 */ --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.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 6A70B37B402 for ; Mon, 31 Aug 2026 18:01:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199283; cv=none; b=Niy2ZGWxlJh6dhGp5sJyQOhNToh5hPqHlVtb3e+HbY4cIhzAxjpuIkf+kyHW6Adh/GVt6YcSOemhSi5AXu7EViqXBgJ2KpOVjtocMbZeepomzTGNDeyfoCM+9KCKkrhRIKx0YO+ytpvbnzDzC0bKbnSJuiKTm4dsMB9NCQs5IKU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199283; c=relaxed/simple; bh=dGRaBeE3nJd2FiUEsWNK0qhtWpUCzITGhWfU6u54kVY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XjAZg+nA6swX35guVY2r/xf+Drz0Dk8M9VcHwFE5a2x4W959l0qotLLFXeWOtav4YldUcEH2r/ud3wACQVww0HSt6CeUOAmgoflo1SOzKGTiGZr3lsW72w66xVXod5wpHIPOHZQ6ks+92joaQCjzw+qnJAFL6oGJ9YX3Dt4WMb0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=L5gvKpGO; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="L5gvKpGO" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-482fc3327fdso7472f8f.2 for ; Mon, 31 Aug 2026 11:01:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199279; x=1788804079; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=hGGUFeBAj4JyjV5WQU/FItRd64MCygQVYmp7iNEyrvI=; b=L5gvKpGOHqveUhi1W/Dv5WdUKA8r+M/+4EjU/jSMmA1S0dEcbewp8fMcyRnCMH6mSN FMARfgVAPpTuuho75ptnfKSVjnpyegXQ4lIFy2GtFkUrNYxK04nWymNhSdHNWXQY+m5z oYQrZLLdTsHbtkHIlVe5H07hk4sHmzBsp81YK2WMOo8Uy1yTqOokqXAQwsGi+uF34B6I tyspSLjOk84kMSNszKBXiaFRPQNdfSENurpONLS6vNJpR6Ff/BALz7kY/M6fU/eR6dgU nUuuKLjLRvluVAoiMEC1+8BBvfrDeHkvveNkdNN3ltHlflGDZxU26h7r73nhoUND0l5f m7yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199279; x=1788804079; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=hGGUFeBAj4JyjV5WQU/FItRd64MCygQVYmp7iNEyrvI=; b=JLT0adKSC2BwaDpUUfA6KSepgCDsEoVyDoZM8gMB+3RSqYJb6Xj9+FTUyCDVCAR00s xKWyRtEQkk2+48CfOYuHrUlr84V0DP+JgGXiBLUtkzcgAjPahonenHaMqMSmzpVXAwOU 72YBLo2MUVGk2jir92PHbzzjoSmlgXzhALmNNwCbcFxL73WWvGzkxrdjIKN4VuBsqJK0 TwLMUtMzb4rXFJkdHKqyygoXwHbmR9Rrk5VF24t2+8u130hMOkbnFNCOkd9/kAjq8FGE dxVqJW14M+VtcrvTWAAn1SDf8pHZ5NZCprL3rKrl8gPsKH1APVNXtoJgwM6QXXOE0ZSP Jnlg== X-Forwarded-Encrypted: i=1; AKwUvBwGcrYxtD8nsWdzIG8JcEbiU8Lw0lPtvtHiaqYKmGfoU7k0x0MUN2XC8b+zR/1Epvc+zyWDs1cBxI2y0A0=@vger.kernel.org X-Gm-Message-State: AFuF++lP9eRQBWcYxcTLpOhssLoAtbMeltd7492qLT3d3xFpayPLsCay dfHMYXrcX3tlSJsF1oReUcNrlfEiDBk2zIB7UQzGtrm5kFdGT+03wJ8F X-Gm-Gg: AYBFou3RyYwt4aRCapcmo1SaEzzcgimSRsYpHXHmqEceEcAJxNNg3JQF2jSIiJgsvJH 41DoimE6r2RAki7LREHyCh2nFcjd6CSrErUXr1XxFllo7sYkBccAt1TPNymGG+BsEgPLNLhdtXp 3SjEKCznGpdF1pM/gjDNqkG+lg7S2FlIvV7imTJOtrgC8Qcs5YWEJJxvDah1FadlVb+bWOI+CrE 60ZWePXayXXmuIEk3lX2Kz8ZZwAtMKS9TmMcESbWmxO2xN8OPkg171qleT4ptIodDlL0KoPax2R 4GJNawqNKpF7J+11qtnh3x43Yt9fGV+QLSmh4LC0vhvG8ruStKCVvdZk3SegL9zIjVtEoKmPIP5 U7sRVQKRkMHNfFVtwGweaKI+F2I9enmFyIs2JsVfCuwIBasnxg06nXWideePDu/savcj25Eh974 JXq7+MPLl403REDfNTXyVHkNX6/tShNtk/zMiCKNsGhTuKseNxOOFNlxOIz3GgazXpeGXYQaZcc Pkz/2wpa6SCtxh/yswfXIFPyt9Mld0YwxnRl/TUHFU= X-Received: by 2002:a05:6000:288c:b0:484:3bb9:25ca with SMTP id ffacd0b85a97d-4843bb92758mr14491965f8f.12.1788199279230; Mon, 31 Aug 2026 11:01:19 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:18 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 07/16] media: atomisp: Add Yoga Book camera configuration Date: Mon, 31 Aug 2026 20:00:52 +0200 Message-ID: <20260831180101.3109854-8-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Yoga Book YB1-X91 firmware lacks usable AtomISP configuration for both cameras. Rear INT3477 OV8858 uses four CSI-2 lanes and a WV517S actuator, while the front OVTI2740 firmware reports the wrong lane count. Add the rear sensor configuration and a DMI-scoped two-lane override for OVTI2740:00. Add the front sensor configuration separately once its link frequency can be supplied at the same time. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse Reviewed-by: Andy Shevchenko --- .../media/atomisp/pci/atomisp_csi2_bridge.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c b/driv= ers/staging/media/atomisp/pci/atomisp_csi2_bridge.c index cca91c6d71a5..56da454f0d9e 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c +++ b/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c @@ -74,6 +74,12 @@ static struct gmin_cfg_var lenovo_ideapad_miix_310_vars[= ] =3D { {} }; =20 +static struct gmin_cfg_var lenovo_yogabook_x91_vars[] =3D { + /* The vendor driver and sensor modes use two CSI data lanes. */ + { "OVTI2740:00", "CsiLanes", "2" }, + {} +}; + static struct gmin_cfg_var xiaomi_mipad2_vars[] =3D { /* _DSM contains the wrong CsiPort for the front facing OV5693 sensor */ { "INT33BE:00", "CsiPort", "0" }, @@ -83,6 +89,14 @@ static struct gmin_cfg_var xiaomi_mipad2_vars[] =3D { }; =20 static const struct dmi_system_id gmin_cfg_dmi_overrides[] =3D { + { + /* Lenovo Yoga Book X91L */ + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_NAME, "Lenovo YB1-X91L"), + }, + .driver_data =3D lenovo_yogabook_x91_vars, + }, { /* Lenovo Ideapad Miix 310 */ .matches =3D { @@ -359,7 +373,10 @@ static const struct acpi_device_id atomisp_sensor_conf= igs[] =3D { * the sensor fails to start streaming when instantiating * an i2c-client for the VCM, so it is disabled for now. */ - ATOMISP_SENSOR_CONFIG("INT33BE", 2, false), /* OV5693 */ + /* OV5693 */ + ATOMISP_SENSOR_CONFIG("INT33BE", 2, false), + /* OV8858 */ + ATOMISP_SENSOR_CONFIG("INT3477", 4, true), {} }; =20 --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.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 5F26737C906 for ; Mon, 31 Aug 2026 18:01:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199285; cv=none; b=g6b6EOv2qxVC6thRz8SzURrLzQ5kYsc56K/ogcLyPT+f0k86qrcv11sHKYeCe0JVf+LLlD9xzfvhW0oWrw1P0XPrnB1W2ZOfZKING/cU9Ycr2vUyzNCx4tKt2YuDioP/T/15NI5EM7remupQ6iF6b0BW9oUYEGovYq4hF+pyBYM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199285; c=relaxed/simple; bh=PlRc0R7D/QoQEzgbshE4c6VTfHtfTo0G/OsAztZl+rI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ck5dGsbP22JgR/4aro7MXQsOxiCIJRhQppHazqDjMZDR5+QlDDOzqacjy2cTAkodn8+nxvDTWdprqH/lUZE+dXUS58tu90WEpiqNepAOGqQjfmBKxE1pYqMQH4uR4uNk84eTHWWrU+aWt/exk8F7SjGb79eqFUREXQzLNhvRZzc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=c+oshu81; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="c+oshu81" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-47f633e6058so3032176f8f.0 for ; Mon, 31 Aug 2026 11:01:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199281; x=1788804081; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=6wbAJx9PRPgYl34+g7KARtAzX1UG0zVvV4TvlX4f22Y=; b=c+oshu81lHDnr2NNlYh0B6rnNUdZBhR+y5dqiFFdUVLndoQoVN5mTVc0lkGzObMMLr JaCvHw3CxZrbi6Q6NUV/pR+8sHPorGehWxp27qPBZ4DREMAszrQn/yekwCoW1IDXiB8K eTA1dTsV/8JHnSTc+ITkzzgmZKePN4EbZ3fqv0Oxa1LzdIY0k8cjwJCkT7o1MxitrhDD oKzJ1DciQiB5p675mamWhQ6ay10Jm26hMbOA3X8hLMTcCM0+VRAtTAaCpK4nFiKAICcj 89o3t9dVYxpr2flEIk6i/UII65+r46eXpbCKoR75aaYXVfP2Gbt3bF79WHj76cvwCoLq mDZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199281; x=1788804081; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=6wbAJx9PRPgYl34+g7KARtAzX1UG0zVvV4TvlX4f22Y=; b=s+LcUfrgMSaY/NZx+WA5srcC7Puk/X/nQkV9ahXaQGJRZFUWZ8Bp0CGrEZsYa4HJ8h 2Rs72vOyehG5J0jxKjkynhKo082fpIkjWbcYPAfsrlYubU16AvKRhYrijZt71o95AZa4 cR9Z7U8/MkxkD9FWcdB9Js2jae0So4IwZT6tLuhj3jzQWLxKubtm0fd0BNlbdKYr/Pa9 MeSyk6/K/7fAv2BRFJRvmarEe3j5GFY2hOWuUPPLYDEf6S7X2/0T0FlQmO73kM/7DVtD fXQ1iok9rebezahZ0K9zw5i8wMyKERaG3aGz23EKpHbmDURBbuLDPM9tdDlMsn+MrbXz JxYg== X-Forwarded-Encrypted: i=1; AKwUvBy4TsQ2ZC+w8ctWipO/hQTqDP9QJ4nJ3TzFjxDUHl1BxMKDUCTD2MGqDs9g9830ndweBdp+Lq7Xg5e2GzY=@vger.kernel.org X-Gm-Message-State: AFuF++n1dZnxZeiNfY4U4AbBqxZLweJNSVs5/KMeOrcUuslf3dLOGTaE fVGC3C4HyuT1xA2BGiOdoTV5NgOmbg2gZSK8ktwnO43j+oZ1J80xsDdU X-Gm-Gg: AYBFou1gaB+V/ARNVikVUuh0lqiLT+/nVa2jR0OrSfhG13ctkj5zKMBMe5mJ2wBpSEs tAJHEmgOWI1noESWt+aZNYdYZZjMxQdh3tkMO6bwicK+/5ZNHG5sVeyoZIgFAdaHkX8pSROda7X mldimRlvN9MGRfMayi9VAWQ9ueuh8+pyR34SSYL2QPnL2l/jeJoIn5aGmHn7m0vWWA2dM2b4SlP I1aHQtjBUG1WYGBSinBNyBl5ZXQzyzbQR6v4VDrXdiI87PSd+lKFORwBOOnZCQTPXGwN/8F6+ew wbvUPgN0/f163rgoKhJSnwum4+MBX2wQGQpFPm15ZgjF+KPRobINd7FUi8ayG2RXelHxsppSBU+ skpNSYmItt6Zi+mR1ASyLSEIgq44HfgydjlUIRTQKYhEkh9BnE9vG4oehT+/X0h+N3IvUQ/o2ms UoeacmOwhxlwNHTJYgnK/FXxaiwCvNQ4aViiZuAcrlSPX67wpUHG4gLQOncTJMrOodWjCddXewr Bks2LclHHITPlhO9GXcAWpkr9Kz4OsUjb3qz/Jhmts= X-Received: by 2002:a05:6000:648:b0:484:41dd:ff3c with SMTP id ffacd0b85a97d-48441de004cmr539586f8f.18.1788199281368; Mon, 31 Aug 2026 11:01:21 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:20 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 08/16] media: ov2740: support 288 MHz link frequency Date: Mon, 31 Aug 2026 20:00:53 +0200 Message-ID: <20260831180101.3109854-9-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Lenovo Yoga Book YB1-X91 front camera uses two CSI-2 lanes at a 288 MHz link frequency. Add the matching PLL configuration and mode timing. Reuse the existing 1932x1092 crop and mode register list so the Bayer order remains SGRBG across link frequencies. Cropping the CSI-2 receiver output to a smaller processed frame is a userspace pipeline decision. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- drivers/media/i2c/ov2740.c | 43 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index 18bb3ac9701f..f3d91c87b3d5 100644 --- a/drivers/media/i2c/ov2740.c +++ b/drivers/media/i2c/ov2740.c @@ -12,12 +12,14 @@ #include #include #include +#include #include #include #include =20 -#define OV2740_LINK_FREQ_360MHZ 360000000ULL -#define OV2740_LINK_FREQ_180MHZ 180000000ULL +#define OV2740_LINK_FREQ_360MHZ (360 * HZ_PER_MHZ) +#define OV2740_LINK_FREQ_288MHZ (288 * HZ_PER_MHZ) +#define OV2740_LINK_FREQ_180MHZ (180 * HZ_PER_MHZ) #define OV2740_SCLK 72000000LL #define OV2740_MCLK 19200000 #define OV2740_DATA_LANES 2 @@ -91,6 +93,7 @@ struct nvm_data { =20 enum { OV2740_LINK_FREQ_360MHZ_INDEX, + OV2740_LINK_FREQ_288MHZ_INDEX, OV2740_LINK_FREQ_180MHZ_INDEX, }; =20 @@ -142,6 +145,14 @@ static const struct ov2740_reg mipi_data_rate_720mbps[= ] =3D { {0x0312, 0x11}, }; =20 +static const struct ov2740_reg mipi_data_rate_576mbps[] =3D { + {0x0302, 0x1e}, + {0x0303, 0x00}, + {0x030d, 0x1e}, + {0x030e, 0x02}, + {0x0312, 0x01}, +}; + static const struct ov2740_reg mipi_data_rate_360mbps[] =3D { {0x0302, 0x4b}, {0x0303, 0x01}, @@ -468,6 +479,7 @@ static const char * const ov2740_test_pattern_menu[] = =3D { =20 static const s64 link_freq_menu_items[] =3D { OV2740_LINK_FREQ_360MHZ, + OV2740_LINK_FREQ_288MHZ, OV2740_LINK_FREQ_180MHZ, }; =20 @@ -478,6 +490,12 @@ static const struct ov2740_link_freq_config link_freq_= configs[] =3D { .regs =3D mipi_data_rate_720mbps, } }, + [OV2740_LINK_FREQ_288MHZ_INDEX] =3D { + .reg_list =3D { + .num_of_regs =3D ARRAY_SIZE(mipi_data_rate_576mbps), + .regs =3D mipi_data_rate_576mbps, + } + }, [OV2740_LINK_FREQ_180MHZ_INDEX] =3D { .reg_list =3D { .num_of_regs =3D ARRAY_SIZE(mipi_data_rate_360mbps), @@ -502,6 +520,22 @@ static const struct ov2740_mode supported_modes_360mhz= [] =3D { }, }; =20 +static const struct ov2740_mode supported_modes_288mhz[] =3D { + { + .width =3D 1932, + .height =3D 1092, + .hts =3D 2160, + .vts_min =3D 1776, + .vts_def =3D 1776, + .vts_max =3D 32767, + .reg_list =3D { + .num_of_regs =3D ARRAY_SIZE(mode_1932x1092_regs_360mhz), + .regs =3D mode_1932x1092_regs_360mhz, + }, + .link_freq_index =3D OV2740_LINK_FREQ_288MHZ_INDEX, + }, +}; + static const struct ov2740_mode supported_modes_180mhz[] =3D { { .width =3D 1932, @@ -1178,6 +1212,11 @@ static int ov2740_check_hwcfg(struct ov2740 *ov2740) ov2740->supported_modes_count =3D ARRAY_SIZE(supported_modes_360mhz); break; + case OV2740_LINK_FREQ_288MHZ_INDEX: + ov2740->supported_modes =3D supported_modes_288mhz; + ov2740->supported_modes_count =3D + ARRAY_SIZE(supported_modes_288mhz); + break; case OV2740_LINK_FREQ_180MHZ_INDEX: ov2740->supported_modes =3D supported_modes_180mhz; ov2740->supported_modes_count =3D --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.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 7E1D137DABC for ; Mon, 31 Aug 2026 18:01:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199288; cv=none; b=bga84ZoHZDSfPcYK29IyziFPRYnKKvUtr59m4QlPZjBsDJkkUknIGgf51hgWTk7oKisZfGb1JrAnZYZfCDHsBlrWPX3xyvuQkbb3oejhrlVe7YIGT4DYanNhDDslVyTwv2Jn5NrJu2nU0oMnSAoSL872SlPwmPE0Qo+QHsyBjeo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199288; c=relaxed/simple; bh=e4MUNal98QDFlUtIBqFtkylSQCrkzf7DR/AocA/eU1E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LFtbpT1DaVFOacUaNj/A5u2o51KHtmN0v3uTLq/CQoivWaX03OtYs8xHTagbq5YJk86g/Y/WGJg025LwBu9FMOyiql7mgG5SVKvyByVg0tmzQEzJMIGPa8ZrrFJ3q/xM+c4hQkODlBnJh0kWWmnrLC3Rh9k6pLCDv0wwlWuoKkg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XtXtKV7x; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XtXtKV7x" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-484392e3d33so943004f8f.2 for ; Mon, 31 Aug 2026 11:01:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199284; x=1788804084; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=5gkOWRVQG6iCB/P+zlnyDW+laFCqIIA6uzGOxBXE3Sw=; b=XtXtKV7xtlMf7uoUYCOqP/r4Khq/qj5JU7UhhqCeCxpc65WX1xwhcy2d96mHW164Jh uE01Obs8ZcxUpORCMtaoKoJ9JiNgckro70szeVPSSURrAM6xa+YOzogtfiaev1xS+OHq 6eur7Rt0ynLGdCHxjZ2RV77m3wJK3XRqjkJMUZ53gKSGTjJI1NBtBlKwjaxqjO4RfOAD bu4Zv3WcDigMfrLEMOuW4gN3Ss17byhbH8yWHZlwLPBlLqcTRgeFopzdDETi3zpJt3Gr xU/8BCFkTSrAqJVJcllwtdjO3aNNszBnN/VwzmqHjsLiqbOWCDgWey23Ytb/duxSHy+D 6dcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199284; x=1788804084; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=5gkOWRVQG6iCB/P+zlnyDW+laFCqIIA6uzGOxBXE3Sw=; b=OPMFDZqhRrzqizSLwk9ZWiE17Cwoj/ASyfZC7cEZDJaW+9jdEv/EzLh6oR3XBSYCTe LRvzHSsFUCp6hp8G1K0wVRMffY5GtpyO1u3sFILIcHMchLEgbUT0aivTe3dlDvAeO3mV XEq4JSH1cvNWiJ2GiGonSSvydUsU7GeKGDxvxa4ZP9a2s6r4a/KnSwN34eYzkWE8Dgya 4xOMm8L/3cuy7lBDzlU4x5scI9jdbsNHdLXdcKWQDsIKucydRgVLc6nvQO2jExc5SPfx lsbZ6SbL4tJnzOxeLWdf2fxHEzc9P0S+DjuGZ/f4xc7rC/RzE6ksZ9rzwVQRLk8p36vC 6kcw== X-Forwarded-Encrypted: i=1; AKwUvBw5hnHKRzn0Lk5rZfOtvT6suaG7B4PQdCwXbXHi+i8OD/U29ythF9JRIZm0x45XhocR+t3OgkXiufWnsfk=@vger.kernel.org X-Gm-Message-State: AFuF++ng1RQsnXK8RGwDKuf6SwUCI+eexW2VK0V1/1Yl6oVBzs7libNJ FL3o8XimTiLSvJ+fqRe3NboX1ndaYdsbMNoB5Dt2ZQIEg2Z8pvXIcHt2 X-Gm-Gg: AYBFou3XiGhUxSaNe3ogWhcUnCqP1niL8JwbAQyz7ANmr1jU7eAOmks3MLZm9PxH+yZ gTtg7lbR0DFT9b6qf+cw8c4JABjxwGbwuyIY1GHgk8Cl5fraFk3PPkLW1KYJGkuvVYqz0KsJpUY rngLVEiTr5Qo2RNTGQou4+WlqQ0BaXL50bITZTjTYP+mWgSrnmDerOhK+RU2DRtQeeAPRqy3YWh 1j+Gz9t8NSMbWG3vblbw1UyNuv1bzjdQT44ev4cafOCUXexfvI5VqCgqfvqkYwGsc06oA9gLgxV qDc1QM3uPkhO6PUfV+De1tEdY54XxlY0jpuKvtwTDSfRfEJpdbhe6d+KFN11jgTPU/Pw+5bfuoT 7cK2TMz38xUa/7saW16D2huVJG7EglH+h7cjK8XqFQj3ZZ9iK9daSUN5dlGaj8xNYWLSX2T+UAT m2Zt8SWPQhMh8T1wk4ChMzexqGrU/gFzJaIovffzZAjhE3w5znnzheVdm4awH3Zu6t+t48cH3qC OANto0HPnGzM811DGO785/Zv/hbK9e1wUsVme3sEuc= X-Received: by 2002:a05:6000:4211:b0:482:f530:c45b with SMTP id ffacd0b85a97d-482f798a6c1mr40756497f8f.5.1788199283678; Mon, 31 Aug 2026 11:01:23 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:22 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 09/16] media: intel: ipu-bridge: allow sensor-specific link frequencies Date: Mon, 31 Aug 2026 20:00:54 +0200 Message-ID: <20260831180101.3109854-10-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" A bridge-specific firmware parser may have more accurate link-frequency information than the generic ACPI hardware-ID table. Let it store link frequencies in the per-sensor bridge data and prefer those values when constructing the endpoint software node. Existing bridges continue to use the hardware-ID table when no sensor-specific frequencies are supplied. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse Reviewed-by: Andy Shevchenko --- drivers/media/pci/intel/ipu-bridge.c | 15 ++++++++++----- include/media/ipu-bridge.h | 3 +++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/media/pci/intel/ipu-bridge.c b/drivers/media/pci/intel= /ipu-bridge.c index 47317c423fad..5730a95767a2 100644 --- a/drivers/media/pci/intel/ipu-bridge.c +++ b/drivers/media/pci/intel/ipu-bridge.c @@ -520,11 +520,16 @@ static void ipu_bridge_create_fwnode_properties( sensor->prop_names.remote_endpoint, sensor->local_ref); =20 - if (cfg->nr_link_freqs > 0) - sensor->ep_properties[3] =3D PROPERTY_ENTRY_U64_ARRAY_LEN( - sensor->prop_names.link_frequencies, - cfg->link_freqs, - cfg->nr_link_freqs); + if (sensor->nr_link_freqs > 0) + sensor->ep_properties[3] =3D + PROPERTY_ENTRY_U64_ARRAY_LEN(names->link_frequencies, + sensor->link_freqs, + sensor->nr_link_freqs); + else if (cfg->nr_link_freqs > 0) + sensor->ep_properties[3] =3D + PROPERTY_ENTRY_U64_ARRAY_LEN(names->link_frequencies, + cfg->link_freqs, + cfg->nr_link_freqs); =20 sensor->ipu_properties[0] =3D PROPERTY_ENTRY_U32_ARRAY_LEN( sensor->prop_names.data_lanes, diff --git a/include/media/ipu-bridge.h b/include/media/ipu-bridge.h index 16fac765456e..81645a5f8709 100644 --- a/include/media/ipu-bridge.h +++ b/include/media/ipu-bridge.h @@ -133,6 +133,9 @@ struct ipu_sensor { struct software_node swnodes[SWNODE_COUNT]; struct ipu_node_names node_names; =20 + u64 link_freqs[MAX_NUM_LINK_FREQS]; + u8 nr_link_freqs; + u8 link; u8 lanes; u32 mclkspeed; --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.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 B75FB37E5E5 for ; Mon, 31 Aug 2026 18:01:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199289; cv=none; b=o+9BpxTfQfLrkVzrsGJ/SrVk+kyAEKaK5VvDNDwUsxjBl/1REnpc1HZ554GCIgrmwsCb2E28MoWrMC7Gi3VmyE1UZb4vkBYPBJHP54wkYmx1Xm+74BJ1zTSn0HTLjj9woOGAPU4CzQL3Z/V4IqWUtQ/sIv4IL1FNn/POeMfj11g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199289; c=relaxed/simple; bh=h2djYmdDBd/cXc4zcDpBPE6FucNuXDVdHsk049Ec1gw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a5jqwUx0LNa0fDAZSAG0OdHcpmklOONrPHBuqYQrl2PdZOAFVyFPulhXyDfDVseWcYOnfF2ZtKk+PzqOipO4+mn1QyPMAcBokuBpFb4JEs6c4uSSZ59EVAnUXPpHpje26q/MhpH68QBrjNWLadvuDNINy8bM3WYbtSjhlKE8TAU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RVArQX7a; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RVArQX7a" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-4843e397f74so140766f8f.1 for ; Mon, 31 Aug 2026 11:01:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199286; x=1788804086; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=knnQOguAzItYyCz3/I9QK04AlsKpIBVpLAZp0UuJLCg=; b=RVArQX7ailTpKk1SGTv5m4RxaeBf5S3SDA76x+ZvC4Z7OL8skR+390zrm41anJUl6A c1gTfiuoHXBDdg1K0vDCw9/EQGj1WJx7OJdHcScyeRpLMJMPFl5BwGs/1BBYHgFMDlQd KE5qXvpjM+2Mr2wY4rK4ntt0UGDvGRMGJk4SHSm9vZMV0t2oMTZQ+dYinn+GxEsj+fIn 7oxpf+NT54ztgo7IcErCHba82ogrotESgFHt53OHRJSUjmC40pIZmMDhmWMYY+sOi1G9 mbHNZHYeTiBYZyB7I8U0OnCv2zSvcqtv4StzRIKih2otLyco0rb9VF32RpGnTcYz5CTe LTpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199286; x=1788804086; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=knnQOguAzItYyCz3/I9QK04AlsKpIBVpLAZp0UuJLCg=; b=NSUahZYUhmCrEKncAt0qdU3bP21dMpY1Ksm43eRYYJ1H8co2kKWXRDjjP4beaLWbuP iNffBYoKud4Q4Y1W8gChqO5jIeyYJhPMue563WrpUzYPHvlsMpB3wXem11XBQQym7lbp n/o5Xc5LcZhb/hxoj39cAlxGxUyeAe0UeFiYaZ0N5n3AO78kZ0ELzOB90x3WYG92ueSd a8Co9cqj/5UIXDOnBhmYWrLXG6KUnpMjhKkvIx20Zpy14/c1UAkk24G4ZYFQk4ya43El FacCSXhja1l7mBkH10NwRleUVLkcbUllTSJioBlnublZcfq24GaiBj4biG88fxakhAeI FcOA== X-Forwarded-Encrypted: i=1; AKwUvBx10lGdZnhGSCO3jvxq4YDA93J588B4U2BfJwCODQpH6bX8EYDm7nIuB730DdnssmEAbS/nHZTDamie5P0=@vger.kernel.org X-Gm-Message-State: AFuF++nX6EQOP1HIHkSJn4GX5xEMoyQtr4urjK+3eoCDE7dPdnxDJksA JfDa/fCzN6ZzhufLVQOKtHYhIAGlCjfD9xapfpZVzD03kX/c83AX7aOV X-Gm-Gg: AYBFou09kbcd/y5jvKUoAqEysB+Ft1LuMfLDZWDamBkPadVSwf6vC0oqIM6kq/NLEW5 WmwCiNMbvptqkU4ANXmKYBCPkJ5ryWDRQu9+ielwiabe6IfA+1X8RqrkigY6Y0scsKCp+qIHqDy 2OaMhPxn0fI6fefxLnsfTA1zL9TEw0P17FSemq+HecdL6HNwS8C15oOcAGr3jHqAL+fkYRC3qfE fxzap9BHgfeJ/Zw3RoYdi1doOLgVCcpMZ6rxZ/oGZd3pnUf03kfkyOpoUpNd91LTS2sE+cPFFEl +x0Oo0nsYJg61RNWQ48wbVs9umjIxQkzKoCKXcSkgVl8wTvXCqOIaY+qVNVKPVq6sCI3gU5LGGK /RSM6njSIZ0PM4zx35jLyiroDT2H1gUFSAtmtTwcccpVt1s8ke4RUxncOWkb5o3NXLXSE+Ig29X znEE4k7X2gCOKrwFtShpFjf3rjojbmh+qNmHODk9nSeVdGS1b+hN6+A2XH/qjaR+viTfSPdIBn/ XYuwM3ySC1pLgbbgRpVwLzbSCWau0OHgb0FBBSxzsQ= X-Received: by 2002:a05:6000:4812:b0:484:3600:35a9 with SMTP id ffacd0b85a97d-48441fc0e81mr141904f8f.3.1788199285576; Mon, 31 Aug 2026 11:01:25 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:25 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 10/16] media: atomisp: derive CSI-2 timing from sensor link frequency Date: Mon, 31 Aug 2026 20:00:55 +0200 Message-ID: <20260831180101.3109854-11-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The ISP2401 CSI-2 receiver timing depends on the sensor link frequency. Query it through v4l2_get_link_freq() instead of reading a 32-bit control value directly. Keep the frequency as s64 throughout the calculation so valid link frequencies do not require an arbitrary S32_MAX limit. Fall back to the existing default timings when the frequency query fails. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse Reviewed-by: Andy Shevchenko --- .../staging/media/atomisp/pci/atomisp_csi2.c | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_csi2.c b/drivers/sta= ging/media/atomisp/pci/atomisp_csi2.c index 95b9113d75e9..5cd285fab742 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_csi2.c +++ b/drivers/staging/media/atomisp/pci/atomisp_csi2.c @@ -5,6 +5,7 @@ * Copyright (c) 2010 Intel Corporation. All Rights Reserved. */ =20 +#include #include #include #include "atomisp_cmd.h" @@ -209,7 +210,7 @@ int atomisp_mipi_csi2_register_entities(struct atomisp_= mipi_csi2_device *csi2, static const int LIMIT_SHIFT =3D 6; /* Limit numeric range into 31 bits */ =20 static int -atomisp_csi2_configure_calc(const short int coeffs[2], int mipi_freq, int = def) +atomisp_csi2_configure_calc(const short int coeffs[2], s64 mipi_freq, int = def) { /* Delay counter accuracy, 1/0.0625 for ANN/CHT, 1/0.125 for BXT */ static const int accinv =3D 16; /* 1 / COUNT_ACC */ @@ -288,18 +289,18 @@ static void atomisp_csi2_configure_isp2401(struct ato= misp_sub_device *asd) int dat_termen; int dat_settle; =20 - struct v4l2_control ctrl; struct atomisp_device *isp =3D asd->isp; - int mipi_freq =3D 0; enum atomisp_camera_port port; + struct v4l2_subdev *sensor; + s64 mipi_freq; int n; =20 port =3D isp->inputs[asd->input_curr].port; =20 - ctrl.id =3D V4L2_CID_LINK_FREQ; - if (v4l2_g_ctrl - (isp->inputs[asd->input_curr].sensor->ctrl_handler, &ctrl) =3D=3D 0) - mipi_freq =3D ctrl.value; + sensor =3D isp->inputs[asd->input_curr].sensor; + mipi_freq =3D v4l2_get_link_freq(&sensor->entity.pads[0], 0, 0); + if (mipi_freq < 0) + mipi_freq =3D 0; =20 clk_termen =3D atomisp_csi2_configure_calc(coeff_clk_termen, mipi_freq, TERMEN_DEFAULT); @@ -310,6 +311,11 @@ static void atomisp_csi2_configure_isp2401(struct atom= isp_sub_device *asd) dat_settle =3D atomisp_csi2_configure_calc(coeff_dat_settle, mipi_freq, SETTLE_DEFAULT); =20 + dev_dbg(isp->dev, + "CSI port %u link frequency %lld Hz, clk timing %d/%d, data timing %d/%d= \n", + port, mipi_freq, clk_termen, clk_settle, + dat_termen, dat_settle); + for (n =3D 0; n < csi2_port_lanes[port] + 1; n++) { hrt_address base =3D csi2_port_base[port] + csi2_lane_base[n]; =20 --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.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 8335D37F303 for ; Mon, 31 Aug 2026 18:01:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199291; cv=none; b=Ue8pJRB3bhIp8U/eOi6FJDedN27XfL0c7z6zl2s9DB0TzRd2vl8ysEx2ACyfCj+xNUsy1tbF+xGS/EatAd3+DttaeFYBA/71ghFwo5MOiakHVS6WEeYctIBLDBWhyJIVx0L4TmQORCuV2sHmGkX3XRhH0zoSNBka6Kb9pbAU94U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199291; c=relaxed/simple; bh=8zThRUQpY5dLJkLhz/VsoaCUOQSCbp2KirpHaq7e5ts=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=B7lOZj4z7v6i2xUXrDrJsyimPpwaAvMV0eQbYLIWR/FsYe4+9wx4I9DKLLanEKQ3QJMWNPQ9XxoC/1y3s9fL6l3Y/sDkHnvccYsPmTq1lxK50CRr8ZVH5hu27wwgSBkC9bI0T1W2nSs/5EaT4ccIYBsvad/6pXrqfa6xn+J/gVE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=rbfvcOU9; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="rbfvcOU9" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-47f633e6058so3032297f8f.0 for ; Mon, 31 Aug 2026 11:01:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199288; x=1788804088; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=NpJ8roXvhY23ncBXqOP9UGLUTn78a3yu4lle+mqKLYc=; b=rbfvcOU9upCsc7DyTrkfIgnfSGCYOYOuQDKBjXZtZycAlwCMb70km1620or5kfME4K t5ceWuUQoXp+QSuwNnOavttweVidouHQ5ooBwABrFlvJMsp+GecwgvverbJIumX7pkq3 nHrLCs+NrrltrTfFxChYg855vkWY/X9crg2u5idUL3eWQwWwp+TJ4IGLMrmsXgBhiyh4 Pj05ITGNtUsX2nTGfn0PADTPpeK82TNlgBleWiC83FtN2Fjz71zDcOssY9epunc5IIZg KjpHhIbVWL/X7iKxQrZikDhlz6G1hYQvpgrlRswajSQjnvh2FpmbBRp2Ymi6u6Nl48Da 2i8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199288; x=1788804088; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=NpJ8roXvhY23ncBXqOP9UGLUTn78a3yu4lle+mqKLYc=; b=EM3yx9H/ifdQb48GGS9y4vdyPf5Yqx8C3yMB+h+Qr6omO3BT5+IaplxpThNi/bVE1+ TBiDhGAr4h0vtUJZ+1fWXeWUAGlRdx9bOZcmk9gFR31eRXSdHPCjAGLKU0aKKFskdAJc nKr8f9PC01e4k1O5Z4+6gAt3e3de0af/gFtb5oOuRVAWTbPzHLCvxfIdYNycj7iSdu1Z I7uM7Wo5bZeiCL9nWSLUu/Rc8/xvj5xK/YG6Yp+MDYsVQN+lSbgZ3Kbbk5f0tKbMrQic 8kyPC+7TKt8H3mG/RGvTocaT4sr08exkz79qln2sywZIi+pbsbJ37xKn0F5qsMP90hH0 ljZg== X-Forwarded-Encrypted: i=1; AKwUvByOZhKaJx7lGrKvCMoR2+hgW4axzopYcre2fqSHySlfXvXNjyTEp+ypQ+wclLGVUHMI++C0RBfCxVu8guE=@vger.kernel.org X-Gm-Message-State: AFuF++n2F4OpkHCtGb/qu64uA/1sudK+qC5qdQIcsWHITtFa5iH8hqKX CFl+cJMf1w4P9S97xtJDo5Y3dHSX6pzBpEOi2EIBOeN+8skjHjuPTVO6 X-Gm-Gg: AYBFou1mKJ5XjUBgo3uq2f1CgaV5C/bvWO5osd7FFjMaOZt0caz764nvGxDzlNgMmof 4TnTo0X/wd/2CJFUkGzJ/muX9KMu4ROYpVOqCHdCqvvSu5va7uit9BgjckM0HuGXPEqdRisgxtj vsvxEs3tATT3eTBgjVVYmV9cHPExsTnaLzeVSJsewziu9/H1A3Vc9ZVNLW5NxXms2pMKi575zYv ifmEIQ70toped8qo9iizhok5IX2x5opN2yctkxxiZ9DGdiMx6qPi0Vk76ARjzewc74agOtRAVnE PxLfue2rRY4EMSDPGoRb78Ol1KHW/NeMc7jjGDX2QGRGGCCLGPBJZIMhc8kX6RwFMDIpU3L5m2X BzpFfTxoTMM/C9P0dVwMs49v12NtPx9kWC1DmDUGk3E2dv5CruEsvOTKmyDNB9akGz0LAc5i/z2 9+3oA64JU2SqxCmsdIzvbQWnTbgeBwNeOv0/fQX9B5tRqfsVaAPHnfuf2vUhcBmL6xTOe+rNUFB 7EXfyQc+0jpJ4TEdJGvxMjMekkFZf++aYcpnjehtv8= X-Received: by 2002:a5d:5f08:0:b0:482:f0dc:b4f7 with SMTP id ffacd0b85a97d-482f799dadcmr44755064f8f.4.1788199287659; Mon, 31 Aug 2026 11:01:27 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:27 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 11/16] media: atomisp: provide Yoga Book OV2740 link frequency Date: Mon, 31 Aug 2026 20:00:56 +0200 Message-ID: <20260831180101.3109854-12-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Lenovo Yoga Book YB1-X91 firmware does not describe the front OV2740 link frequency. Extend the AtomISP sensor configuration with an optional frequency and assign the 288 MHz Yoga Book value while adding its ACPI ID. Pass the value through the IPU bridge per-sensor endpoint data so the OV2740 driver selects its matching mode and the AtomISP CSI-2 receiver derives the correct D-PHY timing. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse Reviewed-by: Andy Shevchenko --- .../media/atomisp/pci/atomisp_csi2_bridge.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c b/driv= ers/staging/media/atomisp/pci/atomisp_csi2_bridge.c index 56da454f0d9e..226c81409848 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c +++ b/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c @@ -15,6 +15,7 @@ #include #include #include +#include =20 #include #include @@ -43,14 +44,16 @@ static const guid_t vcm_dsm_guid =3D 0x9f, 0x48, 0xa9, 0xc3, 0xb5, 0xda, 0x78, 0x9f); =20 struct atomisp_sensor_config { + u64 link_freq; int lanes; bool vcm; }; =20 -#define ATOMISP_SENSOR_CONFIG(_HID, _LANES, _VCM) \ +#define ATOMISP_SENSOR_CONFIG(_HID, _LANES, _VCM, _LINK_FREQ) \ { \ .id =3D _HID, \ .driver_data =3D (long)&((const struct atomisp_sensor_config) { \ + .link_freq =3D _LINK_FREQ, \ .lanes =3D _LANES, \ .vcm =3D _VCM, \ }) \ @@ -374,9 +377,11 @@ static const struct acpi_device_id atomisp_sensor_conf= igs[] =3D { * an i2c-client for the VCM, so it is disabled for now. */ /* OV5693 */ - ATOMISP_SENSOR_CONFIG("INT33BE", 2, false), + ATOMISP_SENSOR_CONFIG("INT33BE", 2, false, 0), /* OV8858 */ - ATOMISP_SENSOR_CONFIG("INT3477", 4, true), + ATOMISP_SENSOR_CONFIG("INT3477", 4, true, 0), + /* OV2740 */ + ATOMISP_SENSOR_CONFIG("OVTI2740", 2, false, 288 * HZ_PER_MHZ), {} }; =20 @@ -395,6 +400,10 @@ static int atomisp_csi2_parse_sensor_fwnode(struct acp= i_device *adev, =20 lanes =3D cfg->lanes; vcm =3D cfg->vcm; + if (cfg->link_freq) { + sensor->link_freqs[0] =3D cfg->link_freq; + sensor->nr_link_freqs =3D 1; + } } =20 /* --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.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 B308537FF6F for ; Mon, 31 Aug 2026 18:01:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199294; cv=none; b=DssYf3CmBY8f/LUZ+7z1EKni4pWCSmWxkbXAbsifKHpHLuoQ4/kW6JsY0NutrmD0R2ZDr6eyjUm49Pbr5VZenLMt+0LqyqwUjm1qoKDWl7Nw7OAYbi0mQH+zMUHGrw3Hz81uGhI3TzT7XCYr7q+poVI+6vR9QsL3e5QzHYRI3uI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199294; c=relaxed/simple; bh=tOG/XM6h09iKbopfG4HSH27a9d3EpUpHmIenSbpRbCY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OAKYwQmI3eKifmF+AAaS65u8gSZfPuquAUV4LUgmFqYJnez12dszwqx1+1mT4vUtyDBLLb62EaN4CR7q9HriXJ4THL7ifEeftXRmuA70WP6hKqSfvAomT94HK/DEfB1KjZxxz/2g4XwMk3qLV24SECCF+xQsFXzo51Cn9I/t7as= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ExD4FVLQ; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ExD4FVLQ" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-48436668d20so1047503f8f.3 for ; Mon, 31 Aug 2026 11:01:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199290; x=1788804090; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SB/CLgILdTURjzN6f7W6LHAoMmDLTtylLqF9+VZGOwk=; b=ExD4FVLQqYcFHp1VojDfPqruxNMaH/cHYRGMjDzAVXsWiDDTnquJhAA1wAH8At7l8P +gtk9zN/HbQ2nRw70x4hDL4UjXXsFENwMqNMd3JxSTJqy4kwvKJvlYX3Ig/wJGj7KfOn 5ngjEEgKcegyqZYogz908kvlZZ69OjF+yzFXdL2VspG0UqC3CaflDkAd/WdG2LpvfoIx 6hvq7DTFM6QBdca08ZFadUfERl5mU3HiRQZgyrbltChFGYpZgOjj8UMvJ6I68cmD/D3x g1RSicChU6oLaDMy9/rXDtLxjdbHKBMnY8uI4eQVwPqk/kxKrE1wyUA+ClKK83wZ2XZa Dg4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199290; x=1788804090; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=SB/CLgILdTURjzN6f7W6LHAoMmDLTtylLqF9+VZGOwk=; b=iZUlH0fcen8g0PaYUOzTlLH/zNfrzK61e8EKmqD4gSjgymjU/2b4Z2q8vuN+lX6QhD h5kpnNsIrTf23RIcNZjSu5CwjrlgZfM9wY2ODALt8m0pBdwoXqnd7BvntancsrHfYdM7 T4HqeJFwxhi4izHlYp+mHwPx7RSJil/lT6rgW0u0UNBBpzhS6A2BFINTI+J4oUw32dJq LrCLX49BkkR3xeAU9+68xUm6Hf9PW4CXngmcr4qtfVKCUXRPN3xPBfg6BBI8j6XQMN98 z7cFvPHNfudYhN4vvfUji8e+C8zJyiBAQZxARizrVsWNrXjSyEHv3eh++/tOaEy+Xoin Fw6w== X-Forwarded-Encrypted: i=1; AKwUvBzOEG1nPbxo5nwJPeI+lLnrRT8w38oQ50S3X3KLFIVeBD7++A/18xAr9RLKHq6fmIAbj7oMLyZTo2l9YJE=@vger.kernel.org X-Gm-Message-State: AFuF++n84PotcI9z93NFta+EaZafkdOI723lKo2HMZcHW4BDjv3g2uxR JQTT+gyy0SMHtaad0RcR3j1NfSgETzl/A0teArgngSV/m1EECZzuEAsR X-Gm-Gg: AYBFou1B0cKKB0BRxQlL2Ir70SQ8gGiNT/Jc3Oqx0oqnYUYUd2eRlaRNXaIRuglRnyt isRtsq8RN3EZvV4WuefUXoRx8BF2XJLn+HyN8pRV1lodXh+HRpS8e3dfPm327bdVImrFniYWZZg SqKHTQ+xKvp5RpaonfZSO69o6PKwuzRcdS1QXV416RzaQs1m9iF0R8aU2Gptww3797bNOwjNUPB worK8H4FrxFt4yW2mdZfOIU5OuNZkYuvZI8RsRFetLnVYWqt/cSbe3GQOTaGbpXfqQYeSw4890H P4TBfr1E6UjW9TECu/NJyecERGVmjbOCAMRamiOAvH8CoypndVh0FLtjAWkGVD+EOLHJSvea2rK JopbIKrvjgumpZWUPnkTpXIWziGa7JXHnxX5mtzU+cXzoPipYCBNjhWzuRSwWB7KuXO+/1QEb+f xTdK+cbFvXkfMr3vuQwxCHarByc+39aOasVXi5ElqJ6mF3WH57ImsjTmBaPqgxQxNDVUDm235Os baMcxdGgkk3uxh00yzTbyA9pSsLAGmEkrN+QZ8OroE= X-Received: by 2002:a5d:5f49:0:b0:483:ca4a:530c with SMTP id ffacd0b85a97d-483ca4a5654mr27868570f8f.18.1788199289663; Mon, 31 Aug 2026 11:01:29 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:29 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 12/16] media: ov2740: release group hold after gain write errors Date: Mon, 31 Aug 2026 20:00:57 +0200 Message-ID: <20260831180101.3109854-13-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Digital-gain updates start a register group before writing the red, green and blue gains. The current error paths return immediately when one of those writes fails, leaving the group open and never issuing its end and launch commands. Later control updates can then be accumulated in an unfinished group instead of taking effect. Once group hold has started, always attempt both commands needed to end and launch the group. Preserve the first gain-write error; report an end or launch error only when all gain writes succeeded. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- drivers/media/i2c/ov2740.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index f3d91c87b3d5..5f381b7972bf 100644 --- a/drivers/media/i2c/ov2740.c +++ b/drivers/media/i2c/ov2740.c @@ -696,7 +696,7 @@ static int ov2740_identify_module(struct ov2740 *ov2740) =20 static int ov2740_update_digital_gain(struct ov2740 *ov2740, u32 d_gain) { - int ret; + int end_ret, launch_ret, ret; =20 ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, OV2740_GROUP_HOLD_START); @@ -705,24 +705,21 @@ static int ov2740_update_digital_gain(struct ov2740 *= ov2740, u32 d_gain) =20 ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_R_GAIN, 2, d_gain); if (ret) - return ret; + goto release_group; =20 ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_G_GAIN, 2, d_gain); if (ret) - return ret; + goto release_group; =20 ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_B_GAIN, 2, d_gain); - if (ret) - return ret; =20 - ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, - OV2740_GROUP_HOLD_END); - if (ret) - return ret; +release_group: + end_ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, + OV2740_GROUP_HOLD_END); + launch_ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, + OV2740_GROUP_HOLD_LAUNCH); =20 - ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, - OV2740_GROUP_HOLD_LAUNCH); - return ret; + return ret ?: end_ret ?: launch_ret; } =20 static int ov2740_test_pattern(struct ov2740 *ov2740, u32 pattern) --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.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 6ECEE435515 for ; Mon, 31 Aug 2026 18:01:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199295; cv=none; b=Uw4o24ZsTd5G3ZnaMI0gb4oyPuMU0KJXNvXYtBsKLGKInaqOpBaB5aPpywM+1f12iO/86kD2JEzd09H//5/LPKFapTxR/uggiUk4dFSN5ywapdu+I+gTs3f5/2Us7ERT6d4d1Pu9g0Oo/mXwmaz4Glmti85Ys1UxNuShbzT9+lE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199295; c=relaxed/simple; bh=oLflI2lIWaedlQfh7py6if9FMg6ErqlHPns57DR1I38=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DW5qjB9WZaPGZ+vKP/8Lpvb9pWTE0kos+Tj9h8L1FR1sXnYlmJ39EIz80Jd5MxkXEVnOSVwvFzUvEeH/Rf/Ve7pl5v59Pr9vWkeX0aKV/QGIMmsCntTBD809H95j5WvI3QlJ4pek6O5kwzkJxT17ASokJQsekY06eegjwtGw9N8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UYs0nWWm; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UYs0nWWm" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-49b392ccaacso53450045e9.2 for ; Mon, 31 Aug 2026 11:01:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199292; x=1788804092; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=MemavacMmy8dnLfi03Bks7Tye/ONeVO/Ogj/0TC3Kco=; b=UYs0nWWmLnjfUE1Bz+9RZ6Wh+QDcDbsr7qHtlDqfLCON4PvJK1aKPECoITQbOvCeNd qJf7EJ6slt5WKPJOZ3c2klTwkWntLGbxfC4wYJBQXCc8MWdYu1Ti98lliDL5TZ9ux6pl KbG9/vkW2qwYkdpmmBTXik/QUuQIO9y3kFux+46ojIgtYUUMESGtavuHGnkxEGy8Cf5r wLpBJGwA0vA1VHx38iZvYCKRsKvOTtuBQD+oxNCs49HhJ7CoDdtC0tC73koDLVbMk2h8 VPbVk82eV7CK+zzgzzSK8bSXEDTDP/lG87vSnuuHWmrqAeYcMTkolU64KRHIrL2Zb9TR KSAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199292; x=1788804092; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=MemavacMmy8dnLfi03Bks7Tye/ONeVO/Ogj/0TC3Kco=; b=VW2q21t/e6TjeYRvnejZMFjBR0zEcib/pTYz0ImAGsmV5BmBgw53m/CEpv/ZIVmXhC vieywcU4eZe5AH5AvrgvBH0uY0UTsdj/2x++EGBQ4Wy/Q9Z4/IooPCvlbuE8ZU03UPuh Rxnv+jOd9oEBlg4HCzla7bYr/7GcXwe1y0f/vIei4LFO2BJEl7+4BGBDelX3RjUZpsBl sGFXi6KIQQMTqnepByG+NpODLBR81uaDYcAyrVFpMMPTHAEQ7B5BwH2zB8Eyu8ZqgLuq w9AOB6J7YXPemC7vhjF0S9WcJ2Oc+dkiox4E8CgzeNaJbS+fBYt48HyI1QvJ9a8MfysJ CCOg== X-Forwarded-Encrypted: i=1; AHgh+RpEUZREf5tOu//HlG1CAY6GnF7fsY9Hac+kSnYU0pgkoSQkBjyIfoUUcdMT4tjl+lwumjjNTTPm8iRAvAc=@vger.kernel.org X-Gm-Message-State: AFuF++lKpbMW2bGPxnxUsnluitUsfio7reL7mOrn8uxti6DjpW6Pbh5w pKPWI7qJT+9Hs8/yvPttjYp0ZZ8H+61pCgagafMENUxqasChzTIdDWL3 X-Gm-Gg: AR+sD11BddbI7GdG85O3yVLlWEC0sZmm8OGk9MsYpiVwOM9haDP7AWO8AXTmEgq53Dw bsPzZVCfhO5e2IPp0+6zkiqru5dwj+vNM4swHIhUUo0DMIM5S3WYvPPpuSumF1JdGvw2EeSjk78 +OPteYlcvYGUzjAe8dtuVzsrZeykEVhdASAlxNa68mkLF0vQQJWq6/3x9mJy35SP9AFe7R+2auX 7BYVkijTSiGeZayu9/XJySbqaLq1fd09vRd4GT4PntMzt+7TocE4eTIN82WXUyeU2+a9jXA41Ay w2HZ+d42RAregexBB9NzWr0qaiRw43okpUDG+bCT73gsy8PP/CK1ms8Dl02VhjeIxitsfjFCDOk Y0GIfyNOnB74ZH41TSijtgHb4aFArrjaAATo7bNPRLte40MRamsaSae9Qf0aqhCC4VS8yhedl6Z RzH2R43EUt/PBJ82LNGrPWcmmnU0oCLMgMtWI1MbbOyWQTqRzr9yagxZ0koyrS0U0Tw/oxAs/S2 sOrQNzq6tEZtnWX/GhRcf5BrCmnYCVWKSL8PNkUE0k= X-Received: by 2002:a05:600c:354f:b0:493:c47f:3c55 with SMTP id 5b1f17b1804b1-49b91c1ece1mr494023035e9.5.1788199291582; Mon, 31 Aug 2026 11:01:31 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:31 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 13/16] media: ov2740: add manual white balance controls Date: Mon, 31 Aug 2026 20:00:58 +0200 Message-ID: <20260831180101.3109854-14-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The sensor has separate red, green and blue manual white-balance gain registers, but the driver currently writes the same digital-gain value to all three channels. This prevents userspace from correcting the strong color cast of raw Bayer capture. Expose red- and blue-balance controls relative to the digital gain and update all three channels under group hold. Tested on the Yoga Book OV2740 with live gain changes and continuous raw capture. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- drivers/media/i2c/ov2740.c | 44 +++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index 5f381b7972bf..4600bbc90293 100644 --- a/drivers/media/i2c/ov2740.c +++ b/drivers/media/i2c/ov2740.c @@ -565,6 +565,9 @@ struct ov2740 { struct v4l2_ctrl *vblank; struct v4l2_ctrl *hblank; struct v4l2_ctrl *exposure; + struct v4l2_ctrl *digital_gain; + struct v4l2_ctrl *red_balance; + struct v4l2_ctrl *blue_balance; =20 /* GPIOs, clocks, regulators */ struct gpio_desc *reset_gpio; @@ -694,8 +697,10 @@ static int ov2740_identify_module(struct ov2740 *ov274= 0) return 0; } =20 -static int ov2740_update_digital_gain(struct ov2740 *ov2740, u32 d_gain) +static int ov2740_update_mwb_gains(struct ov2740 *ov2740) { + u32 d_gain =3D ov2740->digital_gain->val; + u32 blue_gain, red_gain; int end_ret, launch_ret, ret; =20 ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, @@ -703,7 +708,11 @@ static int ov2740_update_digital_gain(struct ov2740 *o= v2740, u32 d_gain) if (ret) return ret; =20 - ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_R_GAIN, 2, d_gain); + /* Balance controls use 1024 as unity relative to the digital gain. */ + red_gain =3D DIV_ROUND_CLOSEST(d_gain * ov2740->red_balance->val, + OV2740_DGTL_GAIN_DEFAULT); + red_gain =3D min(red_gain, OV2740_DGTL_GAIN_MAX); + ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_R_GAIN, 2, red_gain); if (ret) goto release_group; =20 @@ -711,7 +720,10 @@ static int ov2740_update_digital_gain(struct ov2740 *o= v2740, u32 d_gain) if (ret) goto release_group; =20 - ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_B_GAIN, 2, d_gain); + blue_gain =3D DIV_ROUND_CLOSEST(d_gain * ov2740->blue_balance->val, + OV2740_DGTL_GAIN_DEFAULT); + blue_gain =3D min(blue_gain, OV2740_DGTL_GAIN_MAX); + ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_B_GAIN, 2, blue_gain); =20 release_group: end_ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, @@ -760,7 +772,9 @@ static int ov2740_set_ctrl(struct v4l2_ctrl *ctrl) break; =20 case V4L2_CID_DIGITAL_GAIN: - ret =3D ov2740_update_digital_gain(ov2740, ctrl->val); + case V4L2_CID_RED_BALANCE: + case V4L2_CID_BLUE_BALANCE: + ret =3D ov2740_update_mwb_gains(ov2740); break; =20 case V4L2_CID_EXPOSURE: @@ -801,7 +815,7 @@ static int ov2740_init_controls(struct ov2740 *ov2740) int ret; =20 ctrl_hdlr =3D &ov2740->ctrl_handler; - ret =3D v4l2_ctrl_handler_init(ctrl_hdlr, 10); + ret =3D v4l2_ctrl_handler_init(ctrl_hdlr, 12); if (ret) return ret; =20 @@ -836,9 +850,23 @@ static int ov2740_init_controls(struct ov2740 *ov2740) v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops, V4L2_CID_ANALOGUE_GAIN, OV2740_ANAL_GAIN_MIN, OV2740_ANAL_GAIN_MAX, OV2740_ANAL_GAIN_STEP, OV2740_ANAL_GAIN_MIN); - v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops, V4L2_CID_DIGITAL_GAIN, - OV2740_DGTL_GAIN_MIN, OV2740_DGTL_GAIN_MAX, - OV2740_DGTL_GAIN_STEP, OV2740_DGTL_GAIN_DEFAULT); + ov2740->digital_gain =3D + v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops, + V4L2_CID_DIGITAL_GAIN, + OV2740_DGTL_GAIN_MIN, OV2740_DGTL_GAIN_MAX, + OV2740_DGTL_GAIN_STEP, + OV2740_DGTL_GAIN_DEFAULT); + ov2740->red_balance =3D + v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops, + V4L2_CID_RED_BALANCE, + 1, OV2740_DGTL_GAIN_MAX, 1, + OV2740_DGTL_GAIN_DEFAULT); + ov2740->blue_balance =3D + v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops, + V4L2_CID_BLUE_BALANCE, + 1, OV2740_DGTL_GAIN_MAX, 1, + OV2740_DGTL_GAIN_DEFAULT); + v4l2_ctrl_cluster(3, &ov2740->digital_gain); exposure_max =3D ov2740->cur_mode->vts_def - OV2740_EXPOSURE_MAX_MARGIN; ov2740->exposure =3D v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops, V4L2_CID_EXPOSURE, --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (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 70607453A26 for ; Mon, 31 Aug 2026 18:01:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199298; cv=none; b=rnUzPGMzHwgPJIZ0SFicpUHuHSfQBEq8nGh3rd6uVyKoBIVuagBxWWrYqUwUHKDD7ia4CaViHhiRCEDQoj25mHjqVwC3HKJusLsgFme9M6obQ8J7Yf7D7CBEKzzZMyVOPx7s7+1ss13AE6ZOn2yFXKapS8EejQ047sgE8ig6J+M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199298; c=relaxed/simple; bh=GV7ecQMvAtHIiN3yvOqr4q4LTDCBEQJXua361xvFxkI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PGkuVdyVugMB2E09sRiXQene7Ecq2R43brNHol07VeL36PyDTKJKzFP+IRqYvUEvIuUG6mc/ivzKKUR346Rq1ZzeMK368s+6vwXlbEuozSnnZ/yNfC9EpeYyKR4To1tdWvqpdDq2kpA8qdzKNFRvxHx0gKXZnBtMI8QP5B3ncQU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=aH2V9NZH; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aH2V9NZH" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-482e2fdf6ebso3174781f8f.1 for ; Mon, 31 Aug 2026 11:01:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199294; x=1788804094; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=0jy4jniSdFTM5OWRwaSjf11E7VXlWc1WIdO+dQpFRQA=; b=aH2V9NZHXxvFsDpNxNMGdYqWXIwPGfrGAVRAD9u4iHxoH2Gxy8Q1KQ9I/+b8GaQQZH juj12oXHXow2n6O+rlh73g7sIwQ4MlL7LcTQiiTdPRZp6BLc0xhEb2TeVHIksk4NrzVD umG/JNASzR9DDC9Nes0rqOFV0PmDC4UbPGv7KHo1xt7UiCA11UTR1pArhyGQM6WlWPRL llIZHm6ZSF+qcdRjjUrwiAj4rAXo2x6EeWNVOeWn8kJFAvHwMjtIssdMT56IAzAfjkPu oC7Zpz/GfuTtLf8f5LAc+LTCIMc15CGw1ooUyVnxlp1+0sPsJvZALpVmz7ggWruZrSnb 8ZdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199294; x=1788804094; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=0jy4jniSdFTM5OWRwaSjf11E7VXlWc1WIdO+dQpFRQA=; b=KMKC5MB4tjiEHxNpmBZq64YAHi+bUdskzqQq23unj2MF3ndUO8s3NeH8sxKbVwGgK1 7hlWebjykdx4bjcndV8eKfCL7qEPyqchyRMTK8kPtyVWinVsB6e7bTUYYnVUj+podWUH 63MloeU03/WqvV03sbaTJgBAFrwTRQT42TeFF0dpnHuGkUnAzQUDocJFCDgXun6/jv5q viIEaMYx/2XToI0EDPgjBIfdr1Y039tLQDLJKYQ3oaozyn5geKLb+ibdzZQdp/RbT5B/ hOixkVBD6z3Nn7qtleuVY1/hxXuB2jnRYyUbr1ZxgUf/9SyzNw7M4dj4FAxsfGWk5ozN 096g== X-Forwarded-Encrypted: i=1; AKwUvBxZOgv8siIyJSugJjTxVpi3o0CBoMbQ3/QQeUc8hSzn5xsW+h8LdU4ez+sKVQGAb7LR3ugK5Zv6csiBr+I=@vger.kernel.org X-Gm-Message-State: AFuF++lXTHF0L2a7HTl/AFqT3ymyTF1RF/QNmmavx6LDDzlNok7D3j5D KwgRfkX6WWKKSHFcjGhxKuz72KAYA+Zp/HvXbaNfcIGUhHi5Ca/8Qdr/ X-Gm-Gg: AYBFou1pEbHEJgZv5aYRHcLEnsxcqAilAtToXACyZRYJ6iA4wjWGLZmuQViGIXNkACY Drtmk8wwmL16dfMjJGWx6pdwdv6hFdhlRQm1SDuZI1bzFeajSXTJ/0QZbnWafLv3WN0lWq9c4cB n8QTWIisYcaEu6UBf80Wc9y+/3aN0cga9eqBCJ4nhT010etqvSfilHhTDtwX8NN4dgxrR+NAPlK MgzZbT//FPW9N07o6pGKhFqZzwZgy8fwS6k7M6Ow3iwGP/9J5Yjzp0jwGDKuzp+554sa+UhvX0X e86FqS4nmm/vc0BJ1RMpuePXDEwWX7fiSphTM88B9a//WohpdJNlOip9du+Az2YgaqEDGUhRJ+Y Og2q2K/HokeULmR0cNnsUYbgtN6+F4jBPmFaK2e0DZ6LSo9dhaj11yoY+7d9aros6ZM/FFvhJU9 ddWShZDblVdB4bi+phZCNg3+5VVumm4sMJ0aZwd/IHYh5B9QgEr2gLvBsq3jry2CsYaul36o/xi d1rn4ZGkf12vO4cF3HUg5geTCuDPQy9vQ9de5z5eRL0tbu5qLCaxw== X-Received: by 2002:a05:6000:607:b0:484:41fb:4128 with SMTP id ffacd0b85a97d-48441fb4389mr183112f8f.10.1788199293453; Mon, 31 Aug 2026 11:01:33 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:33 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 14/16] media: atomisp: Use struct v4l2_area for padding Date: Mon, 31 Aug 2026 20:00:59 +0200 Message-ID: <20260831180101.3109854-15-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The padding helper passes width and height as four separate scalar arguments even though they form two logical dimensions. Pass the requested size and returned padding as struct v4l2_area values. This makes the dimensions explicit and simplifies all three callers. Suggested-by: Andy Shevchenko Signed-off-by: Maurizio Casciano --- .../staging/media/atomisp/pci/atomisp_cmd.c | 68 +++++++++++-------- .../staging/media/atomisp/pci/atomisp_cmd.h | 6 +- .../staging/media/atomisp/pci/atomisp_ioctl.c | 15 ++-- .../media/atomisp/pci/atomisp_subdev.c | 4 +- .../media/atomisp/pci/atomisp_subdev.h | 3 +- 5 files changed, 53 insertions(+), 43 deletions(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.c b/drivers/stag= ing/media/atomisp/pci/atomisp_cmd.c index 6cd500d9fd26..759effdb2e8d 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_cmd.c +++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.c @@ -3562,9 +3562,9 @@ static void atomisp_fill_pix_format(struct v4l2_pix_f= ormat *f, f->xfer_func =3D V4L2_XFER_FUNC_709; } =20 -/* Get sensor padding values for the non padded width x height resolution = */ -void atomisp_get_padding(struct atomisp_device *isp, u32 width, u32 height, - u32 *padding_w, u32 *padding_h) +/* Get sensor padding values for the non-padded size */ +void atomisp_get_padding(struct atomisp_device *isp, struct v4l2_area size, + struct v4l2_area *pad) { struct atomisp_input_subdev *input =3D &isp->inputs[isp->asd.input_curr]; struct v4l2_rect native_rect =3D input->native_rect; @@ -3574,22 +3574,23 @@ void atomisp_get_padding(struct atomisp_device *isp= , u32 width, u32 height, struct v4l2_mbus_framefmt *sink; =20 if (!input->crop_support) { - *padding_w =3D pad_w; - *padding_h =3D pad_h; + pad->width =3D pad_w; + pad->height =3D pad_h; return; } =20 - width =3D min(width, input->active_rect.width); - height =3D min(height, input->active_rect.height); + size.width =3D min(size.width, input->active_rect.width); + size.height =3D min(size.height, input->active_rect.height); =20 - if (input->binning_support && width <=3D (input->active_rect.width / 2) && - height <=3D (input->active_rect.height / 2)) { + if (input->binning_support && + size.width <=3D (input->active_rect.width / 2) && + size.height <=3D (input->active_rect.height / 2)) { native_rect.width /=3D 2; native_rect.height /=3D 2; } =20 - *padding_w =3D min_t(u32, (native_rect.width - width) & ~1, pad_w); - *padding_h =3D min_t(u32, (native_rect.height - height) & ~1, pad_h); + pad->width =3D min_t(u32, (native_rect.width - size.width) & ~1, pad_w); + pad->height =3D min_t(u32, (native_rect.height - size.height) & ~1, pad_h= ); =20 /* The below minimum padding requirements are for BYT / ISP2400 only */ if (IS_ISP2401) @@ -3617,8 +3618,18 @@ void atomisp_get_padding(struct atomisp_device *isp,= u32 width, u32 height, min_pad_h +=3D 2; =20 apply_min_padding: - *padding_w =3D max_t(u32, *padding_w, min_pad_w); - *padding_h =3D max_t(u32, *padding_h, min_pad_h); + pad->width =3D max_t(u32, pad->width, min_pad_w); + pad->height =3D max_t(u32, pad->height, min_pad_h); +} + +static inline void +atomisp_get_pix_padding(struct atomisp_device *isp, + struct v4l2_pix_format *f, + struct v4l2_area *pad) +{ + struct v4l2_area size =3D { .width =3D f->width, .height =3D f->height }; + + atomisp_get_padding(isp, size, pad); } =20 int atomisp_s_sensor_power(struct atomisp_device *isp, unsigned int input,= bool on) @@ -3800,7 +3811,7 @@ int atomisp_try_fmt(struct atomisp_device *isp, struc= t v4l2_pix_format *f, const struct atomisp_format_bridge *fmt, *snr_fmt; struct atomisp_sub_device *asd =3D &isp->asd; struct v4l2_mbus_framefmt ffmt =3D { }; - u32 padding_w, padding_h; + struct v4l2_area padding; int ret; =20 fmt =3D atomisp_get_format_bridge(f->pixelformat); @@ -3827,10 +3838,10 @@ int atomisp_try_fmt(struct atomisp_device *isp, str= uct v4l2_pix_format *f, * resolution + padding. Add padding here and remove it again after * the set_fmt call, like atomisp_set_fmt_to_snr() does. */ - atomisp_get_padding(isp, f->width, f->height, &padding_w, &padding_h); + atomisp_get_pix_padding(isp, f, &padding); v4l2_fill_mbus_format(&ffmt, f, fmt->mbus_code); - ffmt.width +=3D padding_w; - ffmt.height +=3D padding_h; + ffmt.width +=3D padding.width; + ffmt.height +=3D padding.height; =20 dev_dbg(isp->dev, "try_mbus_fmt: try %ux%u\n", ffmt.width, ffmt.height); =20 @@ -3847,8 +3858,8 @@ int atomisp_try_fmt(struct atomisp_device *isp, struc= t v4l2_pix_format *f, return -EINVAL; } =20 - f->width =3D ffmt.width - padding_w; - f->height =3D ffmt.height - padding_h; + f->width =3D ffmt.width - padding.width; + f->height =3D ffmt.height - padding.height; =20 /* * If the format is jpeg or custom RAW, then the width and height will @@ -4268,11 +4279,12 @@ static int atomisp_set_fmt_to_snr(struct video_devi= ce *vdev, const struct v4l2_p return -EINVAL; =20 v4l2_fill_mbus_format(&ffmt, f, format->mbus_code); - ffmt.height +=3D asd->sink_pad_padding_h + dvs_env_h; - ffmt.width +=3D asd->sink_pad_padding_w + dvs_env_w; + ffmt.height +=3D asd->sink_pad_padding.height + dvs_env_h; + ffmt.width +=3D asd->sink_pad_padding.width + dvs_env_w; =20 dev_dbg(isp->dev, "s_mbus_fmt: ask %ux%u (padding %ux%u, dvs %ux%u)\n", - ffmt.width, ffmt.height, asd->sink_pad_padding_w, asd->sink_pad_padding_= h, + ffmt.width, ffmt.height, asd->sink_pad_padding.width, + asd->sink_pad_padding.height, dvs_env_w, dvs_env_h); =20 __atomisp_init_stream_info(ATOMISP_INPUT_STREAM_GENERAL, stream_info); @@ -4365,13 +4377,11 @@ int atomisp_set_fmt(struct video_device *vdev, stru= ct v4l2_format *f) V4L2_SUBDEV_FORMAT_ACTIVE, ATOMISP_SUBDEV_PAD_SOURCE, &isp_source_fmt); =20 - if (atomisp_subdev_format_conversion(asd)) { - atomisp_get_padding(isp, f->fmt.pix.width, f->fmt.pix.height, - &asd->sink_pad_padding_w, &asd->sink_pad_padding_h); - } else { - asd->sink_pad_padding_w =3D 0; - asd->sink_pad_padding_h =3D 0; - } + if (atomisp_subdev_format_conversion(asd)) + atomisp_get_pix_padding(isp, &f->fmt.pix, + &asd->sink_pad_padding); + else + asd->sink_pad_padding =3D (struct v4l2_area) { }; =20 atomisp_get_dis_envelop(asd, f->fmt.pix.width, f->fmt.pix.height, &dvs_env_w, &dvs_env_h); diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.h b/drivers/stag= ing/media/atomisp/pci/atomisp_cmd.h index d3d1f2574e77..8a84e774f4d5 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_cmd.h +++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.h @@ -225,9 +225,9 @@ int atomisp_makeup_css_parameters(struct atomisp_sub_de= vice *asd, int atomisp_compare_grid(struct atomisp_sub_device *asd, struct atomisp_grid_info *atomgrid); =20 -/* Get sensor padding values for the non padded width x height resolution = */ -void atomisp_get_padding(struct atomisp_device *isp, u32 width, u32 height, - u32 *padding_w, u32 *padding_h); +/* Get sensor padding values for the non-padded size */ +void atomisp_get_padding(struct atomisp_device *isp, struct v4l2_area size, + struct v4l2_area *pad); =20 /* Set sensor power (no-op if already on/off) */ int atomisp_s_sensor_power(struct atomisp_device *isp, unsigned int input,= bool on); diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c b/drivers/st= aging/media/atomisp/pci/atomisp_ioctl.c index 50366bf10f32..87c29a940f9b 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c +++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c @@ -457,7 +457,7 @@ static int atomisp_enum_framesizes_crop_inner(struct at= omisp_device *isp, const struct v4l2_rect *native, int *valid_sizes) { - static const struct v4l2_frmsize_discrete frame_sizes[] =3D { + static const struct v4l2_area frame_sizes[] =3D { { 1920, 1440 }, { 1920, 1200 }, { 1920, 1080 }, @@ -470,15 +470,15 @@ static int atomisp_enum_framesizes_crop_inner(struct = atomisp_device *isp, { 800, 600 }, { 640, 480 }, }; - u32 padding_w, padding_h; int i; =20 for (i =3D 0; i < ARRAY_SIZE(frame_sizes); i++) { - atomisp_get_padding(isp, frame_sizes[i].width, frame_sizes[i].height, - &padding_w, &padding_h); + struct v4l2_area padding; =20 - if ((frame_sizes[i].width + padding_w) > native->width || - (frame_sizes[i].height + padding_h) > native->height) + atomisp_get_padding(isp, frame_sizes[i], &padding); + + if ((frame_sizes[i].width + padding.width) > native->width || + (frame_sizes[i].height + padding.height) > native->height) continue; =20 /* @@ -491,7 +491,8 @@ static int atomisp_enum_framesizes_crop_inner(struct at= omisp_device *isp, =20 if (*valid_sizes =3D=3D fsize->index) { fsize->type =3D V4L2_FRMSIZE_TYPE_DISCRETE; - fsize->discrete =3D frame_sizes[i]; + fsize->discrete.width =3D frame_sizes[i].width; + fsize->discrete.height =3D frame_sizes[i].height; return 0; } =20 diff --git a/drivers/staging/media/atomisp/pci/atomisp_subdev.c b/drivers/s= taging/media/atomisp/pci/atomisp_subdev.c index 9de9cd884d99..ad97e4691d9a 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_subdev.c +++ b/drivers/staging/media/atomisp/pci/atomisp_subdev.c @@ -326,8 +326,8 @@ int atomisp_subdev_set_selection(struct v4l2_subdev *sd, =20 if (atomisp_subdev_format_conversion(isp_sd) && crop[pad]->width && crop[pad]->height) { - crop[pad]->width -=3D isp_sd->sink_pad_padding_w; - crop[pad]->height -=3D isp_sd->sink_pad_padding_h; + crop[pad]->width -=3D isp_sd->sink_pad_padding.width; + crop[pad]->height -=3D isp_sd->sink_pad_padding.height; } =20 if (isp_sd->params.video_dis_en && diff --git a/drivers/staging/media/atomisp/pci/atomisp_subdev.h b/drivers/s= taging/media/atomisp/pci/atomisp_subdev.h index b12bb65be3f2..0045f380de74 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_subdev.h +++ b/drivers/staging/media/atomisp/pci/atomisp_subdev.h @@ -214,8 +214,7 @@ struct atomisp_sub_device { struct media_pad pads[ATOMISP_SUBDEV_PADS_NUM]; struct atomisp_pad_format fmt[ATOMISP_SUBDEV_PADS_NUM]; /* Padding for currently set sink-pad fmt */ - u32 sink_pad_padding_w; - u32 sink_pad_padding_h; + struct v4l2_area sink_pad_padding; =20 unsigned int output; struct atomisp_video_pipe video_out; --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.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 473CC488D91 for ; Mon, 31 Aug 2026 18:01:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199299; cv=none; b=t4WHfJgt7De8o/nTy/ZZLWjmueEwdfHyeUvm3CoJDntGa/i89ZEzxGOUcYpKrY+1ZRANuR5q4Kib0RyZSXnMH//QAvc01NLCLrfS+Ps8g3fY1CabwoMX/gIFQaR3UkQgV9ISGkli1Vcb2Sl0vmzEokUx4EbbulPS14JBPPf2bFU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199299; c=relaxed/simple; bh=wCT9vleSDIdlrhijo0+ZTRLZDZnpWNE+2f/b/xLpYNQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=U0J4zBoTqP2ED3RPIj5ztCxRtP+pgnyPi66ABF0gSezEv4ETonN0U6XtTwiBSFGOtJXFrz569xG8j9SUbWi+qHCaPc4gN8sHmDzQmpQ+26wcIccyinjqgt/LjxCC7xnPUSGgLrWP9WBtp81jiKMKJEdNoNsfMzQMjD3Xf/Ouok4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=HgILyDUE; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HgILyDUE" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-49557167508so40371905e9.1 for ; Mon, 31 Aug 2026 11:01:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199295; x=1788804095; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=LrzKcCrBMmgNTYePdfcU19apjEXt14IF8iaoGtUHGqA=; b=HgILyDUEgT5bB/2zeRFDF+JXYqEJ3wYtViaQF3doQZY/pBh19Rb9wPpPOBVxemLtUs A10A6nNdZqnphdNk+pLoQNHDObYvd8jKqNZFABX1FhE7bc8J5H5jSHli9qYY7w/5xaqc tvIkjBjWc00670RZJJC1+HD4fE0HuGN/ZNe6CsN492eJj6EKsaWTTtXTLR3fU7eBjUbz fS1aleDJLz9j4KIIfW6CSLbwLdM0k4MLstVex4km/Ltw4e4L6U//JptCNx2K6IITmc6J dIFyHn/ZYKGcE3OUaNbAC00LeMDyIMYe5WkCVGcPxsnNWxAGipigna0a68g5LvjY/kSl FBfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199295; x=1788804095; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=LrzKcCrBMmgNTYePdfcU19apjEXt14IF8iaoGtUHGqA=; b=eQbmj5Xj10mpzt53JhSRAEGp8HAbNeXSesW1UlZwPrKIDzRIX3CnN9OBF3NhxASaZ8 QIh+hP/7+oCTuNu517ZkLFqhlumiYQIe7pXGiOXCxsoap7ROckW8qpF03wqW0tkoH/Et dMj5t0SCa3iqRbsrHXIW/kwS+2p/PARNMiYk33bgwl0iy+w5x0EP4P3eTgzrs3pU+Fw8 9GJFYsyyMkuPRolajfTcM8bLDo/rx3hXpiCuVotMrJglr7GAvZjK8mGqDKRqMjTZW/RR DOcTPJFNHhAzwjy6GJLd9NtRgx2tp+7OZ7+W+U+QEoH/ppKG94uNJgHqatrv6J7hpsOj ha0A== X-Forwarded-Encrypted: i=1; AHgh+RqbXhiXIXB2ipLjScCuT/vgjicipCAaSot/PamNB4rM0hC8YivJ8FW8/teaFSsTr/z2eKrFYRgs8ZUn3is=@vger.kernel.org X-Gm-Message-State: AFuF++kmUQp2BtWqRUyq983n4XAdVGZ5pV2FIExTWs9CWagG3RnGOMKX 1v2DZaJSTSFjFmEW++y6jXV4TGqkmBfYOyqj16rjoOzPDHXjoV08Ym7r X-Gm-Gg: AR+sD10WOy6Yq99l5sD5ME/vtA5Z56I9TTAInyTYlXadvnNPFT9nGqtUK3IBJPU6qyC SO01oWnwz7Jppifo2zVTuYu5gL8rfDbF/izFjwR/Ud6G0vYnFGTeI7aWCeDtVDj2W5AEqhWx+yo Jd7CybYpcL/PP2TaOaELcLQcE+eH9R6eydhyIb7a7DEnQBgTZIhfVwDaqP4Sbpdt2m/YiMHmAht Z8UxzUcxK70Qp1l3yQt5vQjU7yyOsf6BxVybRIAZEZv6Mixag9MY51MEeqj371bJ89mF3AUqR6Y hIB+pN3H8B5fwI5TrCT/z1cneenTRtcSHLwk0s4Cjt4THN5aXfMY6oWHIrx/753wTASpbNrs6ft 3Tx+MbO4RXvWokV72bagOg5eNVevkIYfYsvnAfMA0pvFAAjSU0wxI5GHhDZJfYRYm7sG8D4CKom 8ESD5dsR++WmZRl7oINIo/NTuzFdaPdqcgfoQluSQhpGU2/tZVHyLaEduwQAxHHzsu6odbuJ2NX kuQI3NOuIgRYC5crcetDzV09Sun1zU5iz3/LZkLxXg= X-Received: by 2002:a05:600c:3b2a:b0:49c:cee0:e7c1 with SMTP id 5b1f17b1804b1-49cdc57d1d1mr37540515e9.16.1788199295451; Mon, 31 Aug 2026 11:01:35 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:35 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 15/16] media: atomisp: allow raw Bayer capture Date: Mon, 31 Aug 2026 20:01:00 +0200 Message-ID: <20260831180101.3109854-16-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" AtomISP currently rejects all raw formats and silently substitutes YUV420. This prevents userspace camera processing stacks from obtaining unprocessed sensor frames. Enumerate only the raw format matching the sensor media-bus code and reconcile raw requests with the code selected by the sensor. Userspace opts in by selecting that raw V4L2 pixel format with VIDIOC_S_FMT. Raw formats expose the full sensor transport frame so ISP2401 can use its copy pipeline. Processed formats retain the existing global padding behavior; selecting a smaller receiver crop remains a userspace pipeline decision. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- .../staging/media/atomisp/pci/atomisp_cmd.c | 14 +++++++++++--- .../staging/media/atomisp/pci/atomisp_ioctl.c | 19 ++++++++++++++++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.c b/drivers/stag= ing/media/atomisp/pci/atomisp_cmd.c index 759effdb2e8d..99d2b73b160d 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_cmd.c +++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.c @@ -3815,8 +3815,7 @@ int atomisp_try_fmt(struct atomisp_device *isp, struc= t v4l2_pix_format *f, int ret; =20 fmt =3D atomisp_get_format_bridge(f->pixelformat); - /* Currently, raw formats are broken!!! */ - if (!fmt || fmt->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW) { + if (!fmt) { f->pixelformat =3D V4L2_PIX_FMT_YUV420; =20 fmt =3D atomisp_get_format_bridge(f->pixelformat); @@ -3838,7 +3837,10 @@ int atomisp_try_fmt(struct atomisp_device *isp, stru= ct v4l2_pix_format *f, * resolution + padding. Add padding here and remove it again after * the set_fmt call, like atomisp_set_fmt_to_snr() does. */ - atomisp_get_pix_padding(isp, f, &padding); + if (fmt->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW) + padding =3D (struct v4l2_area) { }; + else + atomisp_get_pix_padding(isp, f, &padding); v4l2_fill_mbus_format(&ffmt, f, fmt->mbus_code); ffmt.width +=3D padding.width; ffmt.height +=3D padding.height; @@ -3858,6 +3860,12 @@ int atomisp_try_fmt(struct atomisp_device *isp, stru= ct v4l2_pix_format *f, return -EINVAL; } =20 + if (fmt->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW && + fmt->mbus_code !=3D snr_fmt->mbus_code) { + fmt =3D snr_fmt; + f->pixelformat =3D fmt->pixelformat; + } + f->width =3D ffmt.width - padding.width; f->height =3D ffmt.height - padding.height; =20 diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c b/drivers/st= aging/media/atomisp/pci/atomisp_ioctl.c index 87c29a940f9b..aa6d13a4de89 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c +++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c @@ -537,12 +537,21 @@ static int atomisp_enum_framesizes(struct file *file,= void *priv, .which =3D V4L2_SUBDEV_FORMAT_ACTIVE, .code =3D input->code, }; + const struct atomisp_format_bridge *format; struct v4l2_subdev_state *act_sd_state; + struct v4l2_area padding =3D { + .width =3D pad_w, + .height =3D pad_h, + }; int ret; =20 if (!input->sensor) return -EINVAL; =20 + format =3D atomisp_get_format_bridge(fsize->pixel_format); + if (!format) + return -EINVAL; + if (input->crop_support) return atomisp_enum_framesizes_crop(isp, fsize); =20 @@ -554,9 +563,12 @@ static int atomisp_enum_framesizes(struct file *file, = void *priv, if (ret) return ret; =20 + if (format->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW) + padding =3D (struct v4l2_area) { }; + fsize->type =3D V4L2_FRMSIZE_TYPE_DISCRETE; - fsize->discrete.width =3D fse.max_width - pad_w; - fsize->discrete.height =3D fse.max_height - pad_h; + fsize->discrete.width =3D fse.max_width - padding.width; + fsize->discrete.height =3D fse.max_height - padding.height; =20 return 0; } @@ -630,7 +642,8 @@ static int atomisp_enum_fmt_cap(struct file *file, void= *fh, * * FIXME: fix the pipeline to allow sensor format too. */ - if (format->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW) + if (format->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW && + format->mbus_code !=3D code.code) continue; =20 /* Found a match. Now let's pick f->index'th one. */ --=20 With Best Regards, Maurizio Casciano From nobody Sat Sep 26 14:39:24 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (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 4159949EC7B for ; Mon, 31 Aug 2026 18:01:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199302; cv=none; b=tUcNTi01U8CPAhRDaA7cNW3GNT9/LpK6iz8Mjr4AWs+d2pI5AjJPANFAepC2uR1PiFjeXGelC04Nb//hQf66vENv+aCzRdL+QrZxpeICE2LVQm0+Kf1RuE/BevtXhlsS8HM7xRPAhYtaNiDedY6J33TagWVo17/Hgtqt+eNF26U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788199302; c=relaxed/simple; bh=QinCNKwGY1I7tL0fzCaWSPFDL965cFsGXb5YpHlaoUg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Y2dGVEgRIYUjezcOLW+dqQhh/SlZUyaKHuD1zkHZvCcavCHHEyqc4m+Q5wpUitqpwpn3pPTuEAuNboT50vevF4LVyZQaai+dPHTw8SUhXMQ8c4c4XjARAODWo5XhuRGSoMR8/ed/c4w7KGC4FBxp825m1I4M799qs2bpWb7ern4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=B0F6YUS6; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="B0F6YUS6" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-4843e9c5960so31086f8f.0 for ; Mon, 31 Aug 2026 11:01:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788199298; x=1788804098; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9PXYq+zCuR9D9cpKraz3e/8TGMLbWL+oAYDfj/kF21Q=; b=B0F6YUS6ffLZU7ImSnLVjF+9HsM3y7Ksip4wSVe1RRzvlQspuBrOugAy1+BjlEg+lu BassW/34YNU+IXt3ek9eY+N5FwHA/ZS/XwUyuTbri1XvcuhvxaEOMYS5jZsI75aRucs9 EK1NAimzbMT48Yl69ANUC9x4bq4/uWotFN9LhBW1g3IFmRexHHXbTCz4zAdk7OGwGXsD FskfYcTlReqQQhu2JKlFvFaDm3vTHvZdQcVnepTxpQ4unOIg0aLBnlu9JC8jJiVzIqkB jBygmgTGm7O9Qmnv0zpKjIlrCsiMHSD72qIHWi2Ii7IqlXfEtrVOiXpWgoO3lM9u6xae UKsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788199298; x=1788804098; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=9PXYq+zCuR9D9cpKraz3e/8TGMLbWL+oAYDfj/kF21Q=; b=rIldHcIiZQyXX/joc388ycKUHvcqpRi34aWmjqmqwa1BovdwPeeYnxu76zHV8XCELh 2NwE0fY7wJ1eGfefqqyWlLv7l92pp4kuAspSz0ZLjmXb5/hQJBkY1pKnccDhSIqIyxiM lP3rTuj1Rd9go0fNRByd8WbD8izsERj4CVjQ2pwWBwoNnoluIfRbgbRE6vCR292EZop3 Kvm4Cefk2luONdh4RCazdzcKr04lPV72SsfwOXNXpTs4VCODEXmIgAyk8nGiZSsZrUu0 e2EkZjS2CS6BheWIWFht1ZyKpOx5jQj9goy3UhOVcMo2weTX9hWjIYjzdm4nr0kKomEM QkMQ== X-Forwarded-Encrypted: i=1; AKwUvBwzIi+oAfTXS82E31jrQS7Zv6rdFJAY8BvfXf7M4NMI3Rj+GQNJQSFnGrAu4BCXV/YD+GqR4BCW0/ugNY4=@vger.kernel.org X-Gm-Message-State: AFuF++leSYA5vAnVf/kHDQyWUn6ycaN0aq2CsuaoQAThsddc54rW4b9N zFGw7QHk4zrOAOWBEhPhFK6Mu0WME+1E+Goisbddm+KEbpHndydoTExY X-Gm-Gg: AYBFou1sNfU3oeYUG1h+YLqiiHkReRIejHeto4KRiiTSIpbyHNLO6WhCb1LGe21vdQU haH9GNTDvIrOF/9vMO056X9FNeuM+73ZdMi+fWYE4iJ95AJbVu+gaDAYKftz05e3VMT1dmQW8Ow N/Th/OLNmbOvsg6OYEWct9FN8f8VgVnUz1ChIezRHCPxyvGMkr2oFixBkTWKa4bu5cnxS+815of emYoLuAF+OqbtfOoq5UqUnP6P8r9hk6vExvxt0/dcu3Hv2L5Fr06zeTH6ZDzTr4SIDZGo/+Zkq8 KbN4QfatyYIRZT9moq9D4bWskUAMhsKprF7t93jvQtMJaeW1V4h57ldwAWttN36eFfl0rzDmkat SzoLMm7PWHMhFO8M70jSn061tEJaKTl260mugFCSk05CrTIxFKB0ngbGJJuqEKTyYJPBEGsNIZj KB1AdjqfSj35DH3ftlJwbZE4L+3VNuU3+OzQw6N04kAj9iC+ENjLdmOT6a1iOmOongLVXgZ787U wmyq9jd/1x4HsY6MNvIbYJZlOGK4zAxuIPHtWuja8c= X-Received: by 2002:a05:6000:3102:b0:484:3313:fd86 with SMTP id ffacd0b85a97d-484331400b4mr23710046f8f.27.1788199298000; Mon, 31 Aug 2026 11:01:38 -0700 (PDT) Received: from 1Z10 ([78.213.92.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3fcesm22861530f8f.5.2026.08.31.11.01.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 11:01:37 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v5 16/16] media: i2c: Add WV517S lens actuator driver Date: Mon, 31 Aug 2026 20:01:01 +0200 Message-ID: <20260831180101.3109854-17-mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> References: <20260831180101.3109854-1-mauriziocasciano7@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Lenovo Yoga Book YB1-X91 rear camera contains a WV517S voice-coil actuator. Add a V4L2 lens subdevice exposing the standard 10-bit FOCUS_ABSOLUTE control and the device ringing-control mode. Use regmap for register access and tie control updates to runtime PM so the IPU bridge sensor link keeps shared power resources active. Propagate PM acquisition failures and restore the drive mode and controls after resume. The register addresses and drive-mode value are derived from Intel's GPL-2.0 WV517 driver. Retain the Intel copyright notice and document the 2026 copyright for this V4L2/regmap implementation. Link: https://github.com/jekhor/yogabook-linux-android-kernel/blob/574bae69= 2716f1b14093497bfab8a007fe8e460b/drivers/external_drivers/camera/drivers/me= dia/i2c/wv517.c Assisted-by: LLM sparse Signed-off-by: Maurizio Casciano --- MAINTAINERS | 1 + drivers/media/i2c/Kconfig | 11 ++ drivers/media/i2c/Makefile | 1 + drivers/media/i2c/wv517s.c | 206 +++++++++++++++++++++++++++++++++++++ 4 files changed, 219 insertions(+) create mode 100644 drivers/media/i2c/wv517s.c diff --git a/MAINTAINERS b/MAINTAINERS index 55b3c2d7a78a..a4380be897e9 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -28555,6 +28555,7 @@ S: Maintained F: drivers/media/i2c/ak* F: drivers/media/i2c/dw* F: drivers/media/i2c/lm* +F: drivers/media/i2c/wv517s.c =20 V4L2 CAMERA SENSOR DRIVERS M: Sakari Ailus diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 5c52007f9cbe..c5636e0cbecf 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -949,6 +949,17 @@ config VIDEO_DW9807_VCM capability. This is designed for linear control of voice coil motors, controlled via I2C serial interface. =20 +config VIDEO_WV517S + tristate "WV517S lens voice coil support" + select REGMAP_I2C + help + This is a driver for the WV517S camera lens voice coil. The driver + supports 10-bit focus control and exposes the actuator through the + standard V4L2 lens sub-device interface. + + To compile this driver as a module, choose M here: the module will be + called wv517s. + endif =20 menu "Flash devices" diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile index d04bd5724552..e480932a9540 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -173,4 +173,5 @@ obj-$(CONFIG_VIDEO_VP27SMPX) +=3D vp27smpx.o obj-$(CONFIG_VIDEO_VPX3220) +=3D vpx3220.o obj-$(CONFIG_VIDEO_WM8739) +=3D wm8739.o obj-$(CONFIG_VIDEO_WM8775) +=3D wm8775.o +obj-$(CONFIG_VIDEO_WV517S) +=3D wv517s.o obj-$(CONFIG_VIDEO_INTEL_CVS) +=3D cvs/ diff --git a/drivers/media/i2c/wv517s.c b/drivers/media/i2c/wv517s.c new file mode 100644 index 000000000000..fa6c6d7524fb --- /dev/null +++ b/drivers/media/i2c/wv517s.c @@ -0,0 +1,206 @@ +// SPDX-License-Identifier: GPL-2.0-only + +/* + * WV517S voice-coil motor driver + * + * Copyright (c) 2014 Intel Corporation. + * Copyright (C) 2026 Maurizio Casciano + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define WV517S_MAX_FOCUS_POSITION 1023 +#define WV517S_DEFAULT_FOCUS_POSITION 300 + +#define WV517S_REG_FOCUS 0x41 +#define WV517S_REG_DRIVE_MODE 0x43 +#define WV517S_DRIVE_MODE_12_6_MS 0x0211 + +struct wv517s_device { + struct v4l2_ctrl_handler ctrl_handler; + struct v4l2_subdev sd; + struct regmap *regmap; + bool resuming; +}; + +static inline struct wv517s_device *to_wv517s(struct v4l2_subdev *sd) +{ + return container_of(sd, struct wv517s_device, sd); +} + +static const struct regmap_config wv517s_regmap_config =3D { + .reg_bits =3D 8, + .val_bits =3D 16, + .max_register =3D WV517S_REG_DRIVE_MODE, + .val_format_endian =3D REGMAP_ENDIAN_BIG, +}; + +static int wv517s_set_ctrl(struct v4l2_ctrl *ctrl) +{ + struct wv517s_device *wv517s =3D + container_of(ctrl->handler, struct wv517s_device, ctrl_handler); + struct device *dev =3D wv517s->sd.dev; + int pm_ret; + int ret; + + if (ctrl->id !=3D V4L2_CID_FOCUS_ABSOLUTE) + return -EINVAL; + + /* Runtime resume restores controls while the PM state is RPM_RESUMING. */ + pm_ret =3D pm_runtime_get_if_active(dev); + if (!pm_ret && !wv517s->resuming) + return 0; + if (pm_ret < 0) + return pm_ret; + + ret =3D regmap_write(wv517s->regmap, WV517S_REG_FOCUS, ctrl->val); + + if (pm_ret > 0) + pm_runtime_put(dev); + + return ret; +} + +static const struct v4l2_ctrl_ops wv517s_ctrl_ops =3D { + .s_ctrl =3D wv517s_set_ctrl, +}; + +static int wv517s_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) +{ + return pm_runtime_resume_and_get(sd->dev); +} + +static int wv517s_close(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) +{ + pm_runtime_put(sd->dev); + + return 0; +} + +static const struct v4l2_subdev_internal_ops wv517s_internal_ops =3D { + .open =3D wv517s_open, + .close =3D wv517s_close, +}; + +static const struct v4l2_subdev_ops wv517s_subdev_ops =3D { }; + +static int wv517s_resume(struct device *dev) +{ + struct v4l2_subdev *sd =3D dev_get_drvdata(dev); + struct wv517s_device *wv517s =3D to_wv517s(sd); + int ret; + + /* Restore the vendor-recommended 12.6 ms ringing-control mode. */ + ret =3D regmap_write(wv517s->regmap, WV517S_REG_DRIVE_MODE, + WV517S_DRIVE_MODE_12_6_MS); + if (ret) + return ret; + + wv517s->resuming =3D true; + ret =3D v4l2_ctrl_handler_setup(&wv517s->ctrl_handler); + wv517s->resuming =3D false; + + return ret; +} + +static DEFINE_RUNTIME_DEV_PM_OPS(wv517s_pm_ops, NULL, wv517s_resume, NULL); + +static int wv517s_probe(struct i2c_client *client) +{ + struct device *dev =3D &client->dev; + struct wv517s_device *wv517s; + int ret; + + wv517s =3D devm_kzalloc(dev, sizeof(*wv517s), GFP_KERNEL); + if (!wv517s) + return -ENOMEM; + + wv517s->regmap =3D devm_regmap_init_i2c(client, &wv517s_regmap_config); + if (IS_ERR(wv517s->regmap)) + return dev_err_probe(dev, PTR_ERR(wv517s->regmap), + "failed to initialize regmap\n"); + + v4l2_i2c_subdev_init(&wv517s->sd, client, &wv517s_subdev_ops); + wv517s->sd.flags |=3D V4L2_SUBDEV_FL_HAS_DEVNODE; + wv517s->sd.internal_ops =3D &wv517s_internal_ops; + wv517s->sd.entity.function =3D MEDIA_ENT_F_LENS; + + v4l2_ctrl_handler_init(&wv517s->ctrl_handler, 1); + v4l2_ctrl_new_std(&wv517s->ctrl_handler, &wv517s_ctrl_ops, + V4L2_CID_FOCUS_ABSOLUTE, 0, + WV517S_MAX_FOCUS_POSITION, 1, + WV517S_DEFAULT_FOCUS_POSITION); + if (wv517s->ctrl_handler.error) { + ret =3D wv517s->ctrl_handler.error; + goto err_free_ctrl_handler; + } + wv517s->sd.ctrl_handler =3D &wv517s->ctrl_handler; + + ret =3D media_entity_pads_init(&wv517s->sd.entity, 0, NULL); + if (ret) + goto err_free_ctrl_handler; + + pm_runtime_set_active(dev); + pm_runtime_enable(dev); + + ret =3D wv517s_resume(dev); + if (ret) + goto err_disable_pm; + + ret =3D v4l2_async_register_subdev(&wv517s->sd); + if (ret) + goto err_disable_pm; + + pm_runtime_idle(dev); + + return 0; + +err_disable_pm: + pm_runtime_disable(dev); + media_entity_cleanup(&wv517s->sd.entity); +err_free_ctrl_handler: + v4l2_ctrl_handler_free(&wv517s->ctrl_handler); + + return ret; +} + +static void wv517s_remove(struct i2c_client *client) +{ + struct v4l2_subdev *sd =3D i2c_get_clientdata(client); + struct wv517s_device *wv517s =3D to_wv517s(sd); + + v4l2_async_unregister_subdev(sd); + pm_runtime_disable(&client->dev); + v4l2_ctrl_handler_free(&wv517s->ctrl_handler); + media_entity_cleanup(&sd->entity); +} + +static const struct i2c_device_id wv517s_id_table[] =3D { + { .name =3D "wv517s" }, + { } +}; +MODULE_DEVICE_TABLE(i2c, wv517s_id_table); + +static struct i2c_driver wv517s_i2c_driver =3D { + .driver =3D { + .name =3D "wv517s", + .pm =3D pm_ptr(&wv517s_pm_ops), + }, + .probe =3D wv517s_probe, + .remove =3D wv517s_remove, + .id_table =3D wv517s_id_table, +}; +module_i2c_driver(wv517s_i2c_driver); + +MODULE_AUTHOR("Maurizio Casciano "); +MODULE_DESCRIPTION("WV517S VCM driver"); +MODULE_LICENSE("GPL"); --=20 With Best Regards, Maurizio Casciano