From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.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 F32684A014B for ; Tue, 1 Sep 2026 19:04:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289486; cv=none; b=TXTKfTNitpbfN9jvSkwQogDE3ZNd4FAvN22vHKjllNWkgjWRDLk2RRMozWsueLXBAtCIjfPlDD5diaBOBnIwi63ImZs5TC4uB7MX5d6Coi/AFZMjssy0C/B9LZN6uPJlAHVeDS52tm4dl0n8J0l6dRVPsuBrQgwmEabc7vCr+qk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289486; c=relaxed/simple; bh=IJTIjXefCtpyzFz642pELl2c8LGlNjVMmQXZPOjQ1EU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jx93M/H1upav9CLrhq3xCDTp85p6mDPZifKbje0HUq+RZ5Os81z+J0zWtZfPFMGYwCz+mMxjfVGwoDho0AAW1vkNoaIi8IJ0aOn/+UYPFNCsiqyvFhGs6k/4uxeZL+hRjpLPW/+hoQ4r/lEQMOEOSrvpv2tJ+bHbrCJT01WWZWk= 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=OG878jRD; arc=none smtp.client-ip=209.85.128.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="OG878jRD" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-49b9320423cso1663015e9.0 for ; Tue, 01 Sep 2026 12:04:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289483; x=1788894283; 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=1kEYOKwOKleJni/53+3Zevf6XMaih8vPEj3mTYB7Fxs=; b=OG878jRD8BojDaN0KLvEHSS60LOlyaX0Fy5GpZu+YhMRNLyUNroiShPOYvuA2/a7Ps grFgHRtZPbV6X8H0CYCZAfGNGYby7HsHFllcY7JlhKNRdBXIIXwGh06h0BQjUqUzLdqF f0odyZh7q/PiUDdP0mGhVYju6XIsvE9IVntaLdmpHnDt+3rJKRXUYf14CxTT5VF2TMbo aK5REjjvtcBoP5cuz2qiB1RZtAcB5xhOJjOf6K8WyBkICuoxckuWZ8eJox+i2IUUwIg1 6V0T7LYE1Iw+04vtykqlJd2isGsiVCagoxF51UHFF8FxB2hxHoJZU0BPU83+RWdq+mYl 8IwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289483; x=1788894283; 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=1kEYOKwOKleJni/53+3Zevf6XMaih8vPEj3mTYB7Fxs=; b=TNdAFur6adIoPTbObzrsAZoEgaAUGsfkq7QwtPqmQBFn6U+PlxTXuYNJq0kf1to5VK 5OWjGi7N2ysP47p/t83xKQGsCv38L+JQmBBKKJ8yyVQlZLb5nTUaRfzYszxPRa3cu/Yj 8bf7cl35+BczgmlWkS6EBwplHIDTkGstzbysuMNBjAcWea176X9LNO335Ct/jYY59EH7 eFVd1janZCFbSiMmo2XD9gt7q35j6Js2YAQdb7mZYgzIparGxNJk3jhHwlvT4WVjLWvm nPU9VtnvW/i2s07XeHZEA3BxWyg7lyN6Hrh1jOdv/LTw7d9mcsj7bSrrvQnRXsDSSzmU sMbQ== X-Forwarded-Encrypted: i=1; AHgh+RoV7DyPvz3Vp8fV4xZYRpwAI7aXLbsJXCZzK71cPHI+Nzjlrcu4UKvfJOGpgA0EG/ntwvdZvDJBoQE8kv8=@vger.kernel.org X-Gm-Message-State: AFuF++mGLLGDeo8oC2+JtU3z9lUnwx6rbXIICUVlgIQ4gswzWU9/CgIA /tVoc6WwuIjP0sJtkZheKXrDiB7oWmoLhXWXy10HsAh0NDVTQMRX2mUW X-Gm-Gg: AR+sD13pmNNetUj5PmK26kGn3UuXSYuorGkDsBgCndwicdt5zURHM+Pxcj0dmQlHFuv vhr/7CxDRf9/O07HV2MUYE01KrqB+pnz1qNeDLRPDwO+zGRohI6JVD81fY75AmRhyKLMH6E4u1r kDFRY468b+MbXPNC6zDJOcnTMD6kRfZbBIpekg/EJYTb9ej2mNx7jFfQbVVkpJtp6OUFFVgCdBi oY8LHnhZv/Fy/paMW7C2d+9fcQ0sGw1qW0FhJKq+ZwH7Vk6bJCUnVBSh0r7weXnQ12olmZBW+EZ aTwitdcGMP/pzmP+GVmH9jVaVdnZf5aag9CLtMp7KltdLiuEHSFMcPUqeYr7ZBgTQa8Gon39xkq Ut60MYjBz2AQGXlv1M3+8cZrLJV2INqaIv3KS7UckqtNHNIVCi5qZKeDdCLbJlNo8mT2dC7Pyq2 lJz9IvlYUlQEIUvTHV+JrUPLDkfmrfgnKH/bf237/ZFPs9i8nfjCNtcAzaj+4b30L7SCIpe8hGC 0KeqpSHUWvF3N0qn696RHRx0b++2bYYx8b/fCR1Xw== X-Received: by 2002:a05:600d:6402:20b0:499:a277:e8b5 with SMTP id 5b1f17b1804b1-49cdc42f449mr19066685e9.3.1788289482804; Tue, 01 Sep 2026 12:04:42 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.04.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:04:42 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 01/16] media: ov8858: Extract digital gain programming Date: Tue, 1 Sep 2026 21:04:23 +0200 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.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 7ABBA4A015D for ; Tue, 1 Sep 2026 19:04:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289489; cv=none; b=Y6572Ikbx7BrTjoAKodzZrhf7tqLI4LOD6dAB24p+Vc1r4x+O7lvWpDC+8mR7r0RoXDMb8os8aHDxaXc3zjWOOoRTZEqf53Hq70V3cSjCitumNqVwB0xSXtT7fWdSqb1Fhpy3GopLHJbN6DFx/3yT0MlcACzg4AjwrsDOSTnJM4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289489; c=relaxed/simple; bh=DUuUJMa3yyKrrOtsgfYnRwbO7tX9qRYwesjVaJLdInI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=luforV6woMgi+KTwnw4JDM9zy/O09/aEInSa8qIWC+IvYLC5+cSEaz5jaYuzTnk7LSPX0zq0VMhNuStOB8rAMmLXU5PyZKW7I10hbjFIrsMLKmVV64QzeISAsF7DkN7gKp2BpOP+FhOaycJiqSlbT8w+lCcWbFIU2wE3NCaF7tg= 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=IKAjcwL+; arc=none smtp.client-ip=209.85.128.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="IKAjcwL+" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-49b0dd3c9a0so893235e9.1 for ; Tue, 01 Sep 2026 12:04:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289485; x=1788894285; 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=6dHo1fpZBEgH1+4X904HRQ0OthAziuQvRZWXEFyYffY=; b=IKAjcwL+jqn/edIlfKfXWchCejuKr8apIZN5R0oVJI2PM2bMuXTcTv6ltECA0Y6O4V Qi9/7YjF8uCG7GxlT4ae50qjhFrE3/0U/u3D96Fk6GHF/ESJ/edAWdY323ZAsPfPke0/ VPyEySGjmS7cyDUsr56alC1m4gn4nuDjv6mrsZyfC/QJxzKEw9kkjZ38+8rvmUj5lXkk aDoMt52i0ucyc5wiCogLylkkQ4qf+VEPCzeWXR0dGK25PhmNUhOHsmimDUaC8LLQMaCV UU2s9JrOk5RwtMYHtHlIMRiBgb4UMjvi/vHQuNEENxAN37YaHNSxXA9U6MKsumO1HguX gSXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289485; x=1788894285; 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=6dHo1fpZBEgH1+4X904HRQ0OthAziuQvRZWXEFyYffY=; b=Oot/AUDV37JJU/1dN49fDlOxex3FYFeh3aMA9OFmSL5YDqnvUO0JGfajHDzK8OTs53 Nadryo1osn+OX/g3q01SrHfmdoQ+d0rZ2RBsLWVgBw170TxTgPVBuk8omXIuoF3oAPyp zBzwu/vdpaj4Whru0ceTXhK7cmyekr4NfmPaUlXLTjHMXTSDOxmb3BpWPxbmdCakwwCD 9wYTdaUnjFqZAmGFaEPXCOdWJz0m91jSWdeHfbPQbq+6676+fc4WSgVKrYuyJS9iyzrn yhXuUCobuhz4vJwqeBUZIhHqpVR4DVDjrn1CYM5hei6Ldzx6uddxGCbenkFUHaMV+lYp 0hxQ== X-Forwarded-Encrypted: i=1; AHgh+RqRQfS44c8PiPJhW8h5vHOlgTJPRuCOIsye0Sy4AiMaxwBUmpfg9cZrcJyoXKfoNy4GqLHwpX0ws3I1D+M=@vger.kernel.org X-Gm-Message-State: AFuF++lHDkSUjKel6LR48cIx+c3R+ygKS55jjywmgS6eVAjYmXx7dPPh cHafyo/sBEjXMsiysnntcAay+1/4uU3wb4cTTLDNfdVKOA9q6a2BA9CA X-Gm-Gg: AR+sD12py0fcxS3VPgFqh5gUx5cKnJCo0QcC6+8bls3qy/j0BoFkmGJML0NiiHjAf84 DmcMvWMvwFykVYCdlbEOQZmWcIljdqn6UzulZnQDgYDZxlaoo6N+A4nXB7GnrtEM4tl9NvPZQiT 9YMlLbUBWqBpJj+fefFxnzp7v57yLCxf+cT0KWTrXXVduBY0Z3lmDFQHhQsf5iF0RXMIwaJ5+wq XLrt5EiDeMsCVbRdfxbwoSVgowveQ5IkkWbFOaZp1lXb3mQ1S5fYoCctqYBmcdfKmLk+R4q6gR5 bxka6+sYv5M5lSEuRji9hPGk8/jC4h8QNyvCgnBJ/dnl7B4fVYWBoRIguAH8S6XPLYGMj66a6VX u0mmzs6jDXJspKClV5q3ISPjs4QzjBbR3F+4CJwQFF8pt/Xfg3TRkQQwODPrHnFaYz2YD5ql+nF xKKfKJSM7kaSaZVM5yKWgyLLnZsIPrPh1NiOIeLNaoBdkNxD//1D8MsZ6RNO6Tu3JL1xYjzpKdN Vg1vZzdq1SjAkzbJ6dkNj1bouE/tVvg42/3ozB+cxAjByEE0cxGRQ== X-Received: by 2002:a05:600c:3492:b0:49b:909e:922e with SMTP id 5b1f17b1804b1-49cdc4523d5mr216139765e9.10.1788289484609; Tue, 01 Sep 2026 12:04:44 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.04.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:04:44 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 02/16] media: ov8858: support 19.2 MHz clock and CHT gain setup Date: Tue, 1 Sep 2026 21:04:24 +0200 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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..8d697b8d11c6 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_24MHZ 24000000 +#define OV8858_XVCLK_FREQ_19_2MHZ 19200000 =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_24MHZ) + 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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.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 821B84A0145 for ; Tue, 1 Sep 2026 19:04:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289490; cv=none; b=WCxPccM41wzC/GVM+YVoNFudhbDDIkgXa/igFVSPprWViqgt+h7FDqD3+fdKbHU9OHz2Z+98NQzbexuqdPErSle2E4KLrXyXHGt1ZQNL+nQSMxldDeGRWzCFCRj8U/UOj+O/hGq4AyiijTu5Fa+pPgfAYfYjmpcnAcHOl9vvSyI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289490; c=relaxed/simple; bh=a4oCgSJxVT+Yvyj6OvJRra4F7RQTRxH4QG/o8/Ybv3s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gn4qLp0Svc0pB3h6fe11St4/paDzAnm9nwrmKLHudz8jPpR5CsV0+RCuvYuALs/p9ouRB5Th/2HaUAJ6/pWGdN7Zp7A812+ph8+3XG+DQPPTZXSqZJKOiHID55EyZUUmRQs6/od/unXyA+L+V7CR67zF2j2wENewV3KniZs7yK0= 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=g8p6HHou; arc=none smtp.client-ip=209.85.128.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="g8p6HHou" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-4921eed3fa2so1860205e9.0 for ; Tue, 01 Sep 2026 12:04:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289487; x=1788894287; 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=mENIAbZRTvAZLCBtejhgUDs7AYKS8queXWQS6mtdC+Q=; b=g8p6HHouPjaphtlHw/gjwdNyM7g5uTt79pk3k3hanvH615n5QvMLdYpzJ5qRIvFZ/2 l6CMwV3T2lo5mRWRfn5YW7EbwDZTx4mDwm/qEVgva3RGobrPa40nhFgQTSpvi1dIdMl7 JraPKRWNdp26wMraNdUwjz4wRkYx0+P/LwNK+o8f+rN6lVzgUUspyz5e2K4tSia+ugYz a4QuYmx32fIRh0JOD5LGR2c5fTMnLEoj5STJkm2Mmz6QgM9f9CVVckrnMal9fLnr4zkb PWr3pKlbsJfXVflEB+AlphVZUVsanxu7ao+2D/0wR+Znx0/2UGpvklWC7+SkUeGsYGXT 8KDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289487; x=1788894287; 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=mENIAbZRTvAZLCBtejhgUDs7AYKS8queXWQS6mtdC+Q=; b=Sf/bzYXhX7wZgXjDeYQdGeWzmsVfTGHcE8+d2hZqUM77Woi8tuxHfm0Giajs34Xhu1 Xs3T6RE7ymLl6o8ey7rMwmK3agLssHbSws9T8rVW3E+03CS8PVwNFgsm/t/OuSbSeNUW O7Smgbc+sdVUSF3/sNItetB5Cw3IwBCgZYG9b5BKZn3IqK2EtqMFPjfykUz7hizSMKKx CEfsgSkz8znC+WHpgvXQ+rIcDlPxI0uwzjZ0sWPoDircuM8uO1nVBi68+drVhsf1+Tdt u/aQIfOxBZYFgZpDFfVZMtp2V6nPFKhDGdZE0oxFFrdff01v5rtcIY7MsjKTxN4oBFTD juuw== X-Forwarded-Encrypted: i=1; AHgh+Ro9ADpgbJHL852OQp122fKyzfP/BR3KB6oIcbMPIKp83gV2m4iGNpPddk031Zmm5SH3DAmLSfMRf82Lm98=@vger.kernel.org X-Gm-Message-State: AFuF++lMJdvOdVLD2wn8sdX8/agmxIwynmHGlWQd485cPxPTyDxg/B4Y 3VsqbLKaHZxszjpJlsE7nhXJYA6+MshuZ1ywKPHNvm1lKRUGCyQS207M X-Gm-Gg: AR+sD13QOeBt4arlQaDSbMYETjVE68sF4xNhTf8QxIbo4xbV8ufdvWuiakkdj4bRfrL Il+0jRV1ZXyF8XIv3kBrhZGGuGjYVK1rLXXUhvGS3CyfVvheHG+XtD/ZquTNLigBK2gJIsadOJa y0zddwamzGy0DdLMAO2fSUAmvEKrTOXGK0JN1LIUKbFYwYgj/WEkF5k0ZYo9dcPiIjFPEQMtTbM J+oqWpwlEqysNMAOA2DdnnFwStjk3+Cc+FbxYjVA9OetDkzaSrZqTP1z5m67DwPASuYL2IOpcH/ ADg5k0217qXF0leE7zOrzasf2X2Sks8vykZ3CkPZjsTe12xTcSgLRLqkSlnHlbx22/bB8IKhzcV vzFAwmykXqnmptpEF8xzg+z1LeOXOZa4hNIIUn5vs3r329yT/en6iFRR24OkzPpchRLLsSZ4qrZ gvIha4dwNLxRo2u/FEoc2y20VNtACWGSBgqAV9FJEIkvXpVtRDurfoJwhMpMbE46wcCXr/8WX+D Kuhd9IldBORCezkY8r6T69lXS2y+GvaaLPO6Se+pA== X-Received: by 2002:a05:600c:870e:b0:495:6e68:5df2 with SMTP id 5b1f17b1804b1-49cdc43f461mr233470195e9.12.1788289486489; Tue, 01 Sep 2026 12:04:46 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.04.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:04:45 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 03/16] media: ov2740: Use C99 initializers for ACPI IDs Date: Tue, 1 Sep 2026 21:04:25 +0200 Message-ID: <3071a34e3cfde59e408390b6056dd551d5639162.1788286339.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0 From nobody Sat Sep 26 11:46:50 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 734044A0F0E for ; Tue, 1 Sep 2026 19:04:50 +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=1788289492; cv=none; b=mib/JmCTdc1DB0LH98YqGvXIbDsuSCiVLFsQ4f/FuC9DirOL1jql7o9Ej0yOBb1j7zNCkyeAPdo7vk29Ri161j4pnut1LfAtwBGPn/zzoc/7cnAKg0pXraxThRPVEU4S6wJN9rRnaNA2klACUaY+hvh8UjqLvjnxFXWsjZMDI2w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289492; c=relaxed/simple; bh=GY/0GwAYKkdGCB2mGjNb9iNJ3uZoj4B7s9rKLLBlD0s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Np2ECd8zAQQ7TSE2rSFAYWuNeg/rHRtHVmCLbJN5+AKqFwo1CBjMOSUas/msgE10yAHM+268Oy1A7LXhPOLNzv3o4hWybsFumSPflgeDpGSQ3Hox+1ak+XqWJxFMPXGUDEiWsu3kRoX8rrLAGevNzLuEKU/5+JFCrb/VPvvQMOU= 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=XA2Qxap8; 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="XA2Qxap8" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-49557167508so1407095e9.1 for ; Tue, 01 Sep 2026 12:04:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289488; x=1788894288; 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=DOqePx/fvAb2uUxt/VBHwZXtTfO5bd6bJUnU0qX6xfA=; b=XA2Qxap8lp9eMLlFDXMHRYbohfJwxvynQ9UuW+5EI5uSTdu6hg0rZ+yNA/b9b5PVIY 2FqsEFS3ynWifjtN0dOO7BbtAe1j5+guT5iUkOlKnXASFElpMbYDu65XMnT9co0Vnh2s qSHsQKV6UIP6MGPyAfeZw48Du4CfMdM98y0kTl5SLqEUUz5rl4o0tB9UNYFNgJumeKjQ /BdYGL8Hgd1f82RQIbmnk446n2t4MPc70fvl691g1bqEraYpAXmKgopHez3bQcmjzYjI 1W7EsOAlBIMYofxKjV9A7IJHsrX3k8XY6YAfX8TR2HWox99IJJNsZxrbODXPbl4O+1Qb cqSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289488; x=1788894288; 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=DOqePx/fvAb2uUxt/VBHwZXtTfO5bd6bJUnU0qX6xfA=; b=dAvfBiJmCx0VbiPY3/bw4qQPURj4hRedC70ef6igSEFNpAC0WpcPRVSco4dGreVJ4i DKszRBGG4XbAsJtzpBF1lE7z+jlh0SeV2kL4/fb3GVD8bJzeLscdErvBwCxDiGRnJjaU m3ptayWhr2RTyH/BrWEw57DOeJxv/E6+3pZumzDh0awSLfGPzi2AJ809hR+Fs+bjNjWS ndSDX6RQxMgwuI+WuEK3R7IkAGkUD2XE25X2tXYIGhVgQY1b8udXnGCpanPj+rCosIJi iBMs7DThVVQLexxY7ljPyqvCXPodMm5RNahVYBhjz7QXvqKJz4cJ5hdbjRo8b1bRjPbq WGeQ== X-Forwarded-Encrypted: i=1; AHgh+RrXb0eyUZhed9Gr0ebKOolv/zCkw9h/2pGZBZelZzbYQix7XKBQ/7raJtx1Jc9d7xr9aYs6UNe7fNXMn3M=@vger.kernel.org X-Gm-Message-State: AFuF++licFE3d1u9saKzA5DCGFrnBubHUy/vYmWFw53FNwy6DZnWHero 8qEjDzL5rmdHe1O2Sz1GGMBw3zKS+qBz6d3oIEzuIPL0ym5jsybHthXZ X-Gm-Gg: AR+sD10a7rlhSb/FBz8442vYDmS/yaIc8vxw0eYOJYu5Hc4n7/FNLqYiFSJpe06SBQm kG/aquXIxPKewOZ3kd5Jmj7zAnQ/Dkke04NmSF8blharLC6Agz1g1/5WzehvGZeZiDM8XPV6DXF 0UCO77nwhQPQTpumgWa00HY2++pWVnVxhU88Sg4QjpGQcRniNZwi0sbrq2/0ahUSRKBiYQHo2aU ruULa0NQ+IPLHNweY8spN/vAj9jpJERQB4sYHhwJn2wW+zYfqrQR5CF/mOtIJDMVVpUCttiy2Ag hC8n4bbE85LrYDBQ0XxJa0vvPfd+eXCuJvQFWhh4JawPo2jgysuiDKLrufuCqEY5Y2WLweoN+Wn NQvSiZgi+1Poj77ndpKqFLxqmmjfN0tv0ik6bU7/Vi1I/J+8oKM6Owd0Gtq6bNwJF0ShNbPsiMZ HFYzUvldmtyMUbnpqmYIKt2QuJgG8FHxZzFRYJsSUeG70Wacz+e5d9jejvr+bPkYNyFXpNmu+4n 6mpeUCUSBcM8RHsCwW5oNtH1m3vNnLpV0HDykWc6g== X-Received: by 2002:a05:600c:4747:b0:499:dbba:9859 with SMTP id 5b1f17b1804b1-49cdc57bf3emr158663635e9.5.1788289488556; Tue, 01 Sep 2026 12:04:48 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.04.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:04:48 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 04/16] media: ov2740: Add OVTI2740 ACPI ID Date: Tue, 1 Sep 2026 21:04:26 +0200 Message-ID: <848348bb4f153d165e8c47673c62464133fdaf99.1788286339.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.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 104394A1DE5 for ; Tue, 1 Sep 2026 19:04:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289493; cv=none; b=O/ALGkYEwII7VDGRaezITQebcJZV3kpMkF+9e3N/bGxu7CYTYTV55+LeZSs8TAc+mcrfb/JnGDb+/iAvhdfGBp+MKSpVSqS8/t4Z8wEGhZsSepSkIfwBw/jE14/61G7VwE0PLIgb8FUYRGTlHu18iYX3Z5szAzp5XhZvsp/TeSA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289493; c=relaxed/simple; bh=EXysUx/Mi2yYPLl4+sT6qBbUBxeUlVBGr4WTyCR2voY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NnDZkZorfK4OlNC/LWTcxLkIC06sK/eNGyd9EfJPZVv3nUZ8ro+GljkQIngXetDKAS+Q5UvPsAAKOWTkpNP18TZkbZV580OyGNHUOm2eawuGb+2VM098HSt0ZuoMBiz7ADyIgaa22SFRXm4VsnyNU48AEm9SOdaIXgRg3XQii/k= 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=KdKLqWs+; arc=none smtp.client-ip=209.85.128.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="KdKLqWs+" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-49b392ccaacso1996745e9.2 for ; Tue, 01 Sep 2026 12:04:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289490; x=1788894290; 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=3ognZlCZdfi4SFVd7C7og5EeWiW2/+2tCLUN3iR2p3A=; b=KdKLqWs+ZVgJ3nRwGRimUfcIM2L/nzPSMgmz9eM0iu89Y9RX0gqQQDjr+mZj9ZSZeC jQZYd86GJEvbO/rAl9xSNk57g6H2l/zX9po+b33rwqzMWgZUp6gpqKgtcMul1LJWMkjk sE2nJRG5IWi278UV08TVJj0prvj3kApn7KDlBCh8eGC0JidU7XEtZeQPpYswegAF5HL8 tBhfx6KqeakPPgHaL5Tt3L2cCDbAEl32seNHQ6MdzWgYnGeXFt03iMP6Xx6yQhYKFWpX 2vSY0HHAo1Vmwe1HMskFuy8vj0LTL7qKatEmQt2uOfDd66yRi3W+prPudRSfVontDxzt vENQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289490; x=1788894290; 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=3ognZlCZdfi4SFVd7C7og5EeWiW2/+2tCLUN3iR2p3A=; b=HV5dMAbB5tkWiSueuvgxliJ2+Slnc32S89RPXWR9vAco3ECdS1p7o7fE/FpTRLp2QY komyp8tCkdf+laWBiT/KD2l+CAOp1XpOa0lNqm8bsf45OQLjN/aexsthHUUL887Gq4AB khuYm8YdHwf/p7S2LU9Rrgi3t0lpq4mFMG1/8OvBlcVl1iOPPoxPBP16ExfXGtjg40Zy o2d4GoiyAEGGfVgclElDDrAssCvQRt9yK35HiWyhIWtAP3e5G6g/kN5Mwdk8V6UompEp t7pWQnnd0mMMOVkBXlgBn69NJtv/a+tThcHuIGryDiiX7NKZF7Nsy9zYKALsd56OF3b3 xnug== X-Forwarded-Encrypted: i=1; AHgh+Rq5Lj4+jWPOojL6eT38o8DcO/DhfyYpt2NbrAtNXRBmjWYcaWYDCKxCCgUspC7ZYNfOY/LKyIMX+8X1w4E=@vger.kernel.org X-Gm-Message-State: AFuF++nVpZ1MDCjquJOIXulHlGZHTX6k3WSKzpyiObv9cLuprDW17DMj x+CNltG4VH1NrYAfj8rJ1ena/91hNjyC5y3g8+Y8FgnjroSaDxQfVW+W X-Gm-Gg: AR+sD11Bl41qiWptoropZ01bXWwHu4ogJwfumjjklgFsh26VW9SrtNigCKLBaV4LSQi EX8SyMfnQwnFat9fenR6AwS66m7XdpMCNzsFb3pN/lS+QVkGEtIFUf/Tt2GkwgCK5U30Yi3kqPD TMFqhAl8lVAh9jas3tzriMf38ojZMfOZ28U0xPtZkzlIyyAc3lo7PrlYm6+9fjjqywtgC0aeN1l WdPKgs2H7hmvxPIXfjkZ7aSynhI5fTvo1RKFBwwt8WLSKBpZIHVRgZ9R/SsajH9OFHuws2y3o1k 5+WD2XXDqMwUAfiIRBjw06vWq2xBWGv3HZZtVQl9k4e9WcTOanmxbHMZW/k2WS1crXdcg65iluw ESFfsgha016q1FOI0puSzP8tkn8t2pwAlXM26iObnftlHQUuQ7eEB8XcROb7QGSA1WF+Pq8OdBx T7A7nHpZFhEt2dsD0kGWdtEuiHTyWlS7KehGvDOONq0RqmZfvV398m8AvjCTi1XdEpiuo8X5gip FR3dsN9WXY11H+Q7RS9deFGEo+I7ypR4ctcCPJcrJg= X-Received: by 2002:a05:600c:19ca:b0:49c:cee0:f383 with SMTP id 5b1f17b1804b1-49ccee0f3cdmr367033135e9.16.1788289490263; Tue, 01 Sep 2026 12:04:50 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.04.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:04:49 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 05/16] media: ov8858: Add INT3477 ACPI ID Date: Tue, 1 Sep 2026 21:04:27 +0200 Message-ID: <1c2ae26f61ce9bd9e6689c58df7b17e9980fdcf3.1788286339.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 8d697b8d11c6..76769da94f80 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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.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 089514A1E14 for ; Tue, 1 Sep 2026 19:04:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289496; cv=none; b=uKtL7qdUcOsU4IbKXM8a6iDYKfv/aJRJIMFrf4jBHVBrD5nX6uvezj7lUc/nsL3LcMiRvISsALqMKjelmoVe/Sc4hwgq1B9aPwd0RH8WS+OM7aCslFQ9Rwnab4pO/9yvzohKmgfWiMAA/PXbMagwy3DH6hU56i4olToyS6I8CK0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289496; c=relaxed/simple; bh=fnLuAuk4DdEaA7jml3VwGJrscDjqw5zgrKIhfNOResY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WvjfPZlfbK1+9FFHlmgW0VVrWHc4AtVZxMQtoUqZEcMjCdPEgpqXYDzLEiWPHVtSnOpFhoid73gkWwBbXBy3Vk2R0aCLldchJWvgUWfxLIdRNy3AXFT0fBRQHjw8jfauyaLeTHyAZh+HAnmjWs8U5wFsQFoxqKwGkelVMVxHmK4= 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=jj7A7mQa; arc=none smtp.client-ip=209.85.128.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="jj7A7mQa" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-4956869750eso873465e9.2 for ; Tue, 01 Sep 2026 12:04:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289492; x=1788894292; 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=KqTr/x5yNF9r4lu6CVzssQgLLUaZ7eL+KNzZNSw0R0g=; b=jj7A7mQaB8H+YSOvaFUtGiPW7JAM5dj6NWzgy3avgUzGJxjE25DyBDYfAhWwIWlYJu /bLroceMB3Fp93qXeLSYa6MyyBwdVw7yZ7BfPS3MrIUAAHCamsA5pczQ+HfWSaolnQpd Sad2T8BiZZP39gZ3G6R4jhMb+ZdBooYdg6GfvnzZ9+Ddx94ddJMPNKlxKw0p838g9rus dGuBAHTQWSITPfgfxH+vnBhz/1eaiqo2mRyHTO6PNGXFT3ivKmhvdChOgKXCM+iE28/3 QQpRfQFJe1AKSGpUpFtoKh7Ph2yKkK4oAWMYWki9A5ZZbtqavEl5jrUkhcQhr39QoyAL Oqbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289492; x=1788894292; 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=KqTr/x5yNF9r4lu6CVzssQgLLUaZ7eL+KNzZNSw0R0g=; b=M6C4X6qmtfJ6xz7GFub1CzD9Y125m2ZeW380GXm5qllwDS/GwwbRCC+fEwK+GDsvNn 4YFzIigN8nnSN9/8844wuR5j/a4l36oainmaGqOv38A6kt2ZxiScXKASDQfwl+3QswY1 qmPRwsxBZA4Cfpq5sdLYgX8L+OmbdAFxhbvRMVwdVV4BogJUXu4fnCngtu9yyYDzP/1W BlPyzT3S8rfa8UHLG4y4EnpVmAnPJpkGXg+AWiClxwXRr0jA54m+e31X/8asrgmVxL6L UUpnNOJl2e07w7J2Ic04yGFPMdWJtygEMoXxue3Nfy9jZ6SRJGGh7UGkf2pgizn+xM17 8x/w== X-Forwarded-Encrypted: i=1; AHgh+RrbG7G8QDyqf5fkfhnYLwGxZ4jUa8O0XnlJ9QRjePD9obxWLtfRxiC2gFXRpRHgb9K4UVaqR2bTQOVEWBo=@vger.kernel.org X-Gm-Message-State: AFuF++kMHseqwedkYhenpHoj/LCg+o9+jIHOZVB1Z8r+2fPSiLfoUFVT UlwQNDyENIet/KJUwDw/bdPsrHKyM6LrlDpkXFVvexHMWGfv941i0Isv X-Gm-Gg: AR+sD12AyogktwxjoJxBPetBGOvqELXXsQxkx3VjjjADC8cBmXQEpHck0Rk33SN8wL/ 1xRoupHo8CcYvS+ntIyFQ9X4wxe9TRTmYFoTt6sRorAEvac9pnM4R2bkfGRcVnBcvJwDlJ3QcWM tKoB5LxSrltIQUew8b8yTyebqbV4xN6tc2A++jJ78P0yATfhSpnTHCrGe1+n6gapC+j2PRV4DwD IaI1m2B44r3+7Mi/MPoP1nA8+woa43f9/1ouCKJ2+Bv6otLnRKcmXE1quLuW5Rpn7DMLcCEZqhl be/PtUnwdsqon3vf8yOHhBsT5sHvN49MroyzhnEI77awl+dibHi7KIoSrpwkrPAeS7NuqJmYxFw lzxs2SkrIFPyRZGEhK9259GqOVJdN4lYSRbE7iMc7R0h0ZGWvLb9zIOGd3fRnRRo6c/SXaHtuw+ d/lf+zL5i7M2KsTHIbloOYIZnr0rbm8xWItK4GX/aZRMCFsluDIoE8fntezUQ6Bd2rEMDmYM5f4 WrbyhEA3mw+SXU0KoFax2wGP3wnRctuNzLYBtGZBg== X-Received: by 2002:a05:600c:4f92:b0:49b:90cc:3c87 with SMTP id 5b1f17b1804b1-49b91c487b2mr573053315e9.13.1788289491923; Tue, 01 Sep 2026 12:04:51 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.04.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:04:51 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 06/16] media: intel: ipu-bridge: Add Yoga Book camera sensors Date: Tue, 1 Sep 2026 21:04:28 +0200 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 05F914A1E08 for ; Tue, 1 Sep 2026 19:04:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289497; cv=none; b=VyIJSQg6D+RfgRvZZ20U2iaThtXXDIYcE2LKQfw452kJV2bzHp9FXsTMrgSeAOPlUb5XlhwigNOSslg/Ziuf5OtKx4IcOohqtTkB4rmfriL8Tgz59DAIDH3TemMcOXR7UwVfkDjh56k9i5EB/kojlNodpY09newCM8pXMIBcjiQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289497; c=relaxed/simple; bh=zMz6YudLMNRyvt1tJOUeINHtau4Y9OLX8SPtgDvi43k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uSvVl6yb8Vbzqyq7VTVXFQqRzFjmPr+Tus2MxxY0Z6srtX0TMcGdP+gJxxDYDuo6lgtFTUGFSaGsQx0Fwjb4vbXQ+y9mwYtwawfg/ZSvNPO1fYXXeU+e14FSzLnCRbRm09BDlaj1DnYJCLHohuT9znqDN9j43TDr0Nz0N55AUjE= 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=SxkdZhLG; arc=none smtp.client-ip=209.85.128.43 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="SxkdZhLG" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-49b965570d7so1220545e9.0 for ; Tue, 01 Sep 2026 12:04:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289494; x=1788894294; 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=DBHgyyi12Pg5PI+CSb0AvNcQMuxkHJiS6M4/J+uLYMc=; b=SxkdZhLGVck/Bx0DRPBmvuFQJjuYlTQq+KYxQwnfK9OmCTcbcOPjKQEzwwUYfsZR+k BWrFtT4WL990SzjASECoV5ifwiMva8j0BWfLaYhCmeinKURF2URTKZn2CTw1NM9gWby9 KiA0wnhA7fTSEEIA3zHcITXArZ85Fx00ejpmu4DSAX0jOykdJ72YU3sVYPDcHxw+RsUq JpxoDe+2c+9Q94S9xrfO40fcNgo9FayRKZ+8yVs9cLxv5dDA77jU2aQifz8h/t48muPN hb9wNmZmxD8dwh8Y/Jsru4tdB9ps6yp/j64zoohTHkEU0bBYHeSBtRYXq1tSxi0q1gdG cr8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289494; x=1788894294; 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=DBHgyyi12Pg5PI+CSb0AvNcQMuxkHJiS6M4/J+uLYMc=; b=JZlKX5/fRz6Tgtd243/hqDqVaCzzF8J4LJZy89AlTnGM/B42Z7HsBSyS4hCGFI8Wlx mqeLrOK+Ownl9Gf49tdsueEIsdN/ZnfYaDlXiOejtUVaZlF1KA4idflUH0oLojE3GUST b0mci4Nc+fWRyfKIr+RggrGF+/B6XuAgjhDkuRmlOhfU5JuQSbFV+erBUMsr1U2wYpin +6DR2D6UdhGj/DltIrauPTuEeN684cMmW7Z1rGok9Lmn4bH74GfFWmYFwq9ze4G5SJUI zfNQotalYWNZ8z6x1rKZdz0DuEQGzqpemCZteNY1Zc51GoOucQ0LlCuz0Y+z39BdhyIt O/WA== X-Forwarded-Encrypted: i=1; AHgh+RqYf56NXSbpjfFxxYYVKm4ZbKgp4e5Qkc7Eg6soy5vm8+XbbxD/5c0H0JYhdVYHWh/FYySjsd0kW2gjeDE=@vger.kernel.org X-Gm-Message-State: AFuF++nsMD+uKE7P/M1lQCsHJ303BS9LOvkns4ueWB9fkRVluGU8yhRW 17y6TIwR7cBvdbvqssBaqkgvaI6K7ZR6puibyt0cPHJFpi4sLsm3j94R X-Gm-Gg: AR+sD13yUIUlVmEoikf+oXHyA64ejiuRblXwdkFvfgdv3KPkt9n+P4idhUj5gmhj78t EnmON+ULgPpAwc82Rza0syyP71eCiYktTLkl8VBHtRNsMK7LeCkBXhQ3AS2MhMrao3oShQZlawV 95wspZoQHX2WvZ8A1vaEhQZdqNY7SqkxvJYzTsowxbhuk66btLQa3niiYpjR5GRivyjHvXZj+NX l50sRlf/Y2TN2imV5QSSYphilpML1wcDo5NfJCEVzA0oCI4dQd2q/M7D4waHb/tHT1V5L1aIFu1 gzTexyKjb40fIMZJo5uFwiSQnAEjzgjSrl4hoNjrDPSIJO8dsF/JWW3PgYbHe1GDxK/O3cZa2nW Kk02qJ2dK/B/N+PAhOEjZnlqKEd03A4XPkgYhjI+LgXWk8tAQIxxFiHEMq80o4bVbF/S3HyrZtK tBoEIpuRbG4cEIcX+40kbg3uGIUSkqHY4IAi/hIfmHyUPWRDW7uPuCblVtDZKxuUOuc9PoFZlmW I/ofbLZLnazWDscOPOR0tGSW1nIhESHJv5eSuFa3g== X-Received: by 2002:a05:600c:6096:b0:49c:cfad:90c1 with SMTP id 5b1f17b1804b1-49ccfad9180mr442961605e9.14.1788289493664; Tue, 01 Sep 2026 12:04:53 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.04.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:04:53 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 07/16] media: atomisp: Add Yoga Book camera configuration Date: Tue, 1 Sep 2026 21:04:29 +0200 Message-ID: <00930098d6083229724d95fbd14275ad36b75f5e.1788286339.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.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 84B7D47CC71 for ; Tue, 1 Sep 2026 19:04:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289500; cv=none; b=eFBt4vPOvv9xN2I8rjSlMfA237AN0EjhlnIz1zouL5KtharLXXEqpI3E9+sT1vGIi8XJ7enWX009gady4436q7ulzDkg6yS+LERXe7LbOEp6UEmfaN0kZ77zRHPhI85LFaek33a+j3wXKsTKMvDXUzP0Pr0LV260pWlKH2FrtHE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289500; c=relaxed/simple; bh=4JjOP6xA1fWJTzg0nGLviFM/abTCFakLq0J+yMqID+Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FEGISkYyL/4UI0kTXjetv/XrnsaNhV7HjIE0dmaZZ7YAgdw0jPyRPfiDoZ/td+1DcImlsHxNxrpJvtVboia1uc8Epj+dnYBV12E3PtxZPGnkwkFkEN0pOFg3CBCcHYpA6+55rk2+HUD0cFCB8h/PKyhWgqz8BLzYCc/0Unqq6dY= 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=RHSI2Cpi; arc=none smtp.client-ip=209.85.128.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="RHSI2Cpi" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-49ccfae359fso966285e9.3 for ; Tue, 01 Sep 2026 12:04:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289496; x=1788894296; 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=brlxyZ2t63L8fQignAF7hkZpVD232LlJffHWx51Zan4=; b=RHSI2Cpi1XL4uLINq56yaIGDPYD+PVFNIMEbQLR0tdDF8mzJUG34kl9Lo+T1Yl7iur fyl6GbdUd/AuvYiD4IXbJnwcNTqHpzAUHU5qtH3Em+iG17wOezkKj1NNGNPE2AwJiH6o JsnsBjG5QEN1lpmiYg++5sZEMAsVpF9H+65MH4yVabChuKv3EAO6kPNHjKreCvY8Mz+/ zs92NGFRTETY9AZ/UIKfBOceDR8FC3v8I5hUwnAtv8UT5yIJSXD4jXAozPgjmuUOHMgn yZLfh63wzlTZ8K5UlYPRSGgnURwOcWXeUr16c5Sk0S47dSXX5XUqnfTvokv4AGHFa52n hrBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289496; x=1788894296; 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=brlxyZ2t63L8fQignAF7hkZpVD232LlJffHWx51Zan4=; b=NUF/x8DQ7V21d16E+giU3/FTyTn5h1OBQD/Qs4ky/BnRrTg+fh+8+N87ZK9ENKX+S+ Zjk5PTgqbPfTa0NSK3K/N+jmqOLGYCUQPloKJyF1mA94yJd+uIzlBvVfb0f5rc4IU7e3 xMpEVYn2eI8dAF1bokm6ZKo564hpKneCsj2rkZ9dlYcbyO5dP0oTccamklo5Rna7jr7s d8wwQAyjM1AyRIHMUJhlY8cBbkBsYXkTOQOck629nJ/uTyxPBIgm+m0isRC+ohtAoAQO VzoOw9I5duifk6leVfmJFTxTdzUjU4TFxS07nQ8ooxlZP4IHd7yHsZS5yA/na2vmFKsW 2+CQ== X-Forwarded-Encrypted: i=1; AHgh+RqdVTDPUj3qqTL9YGV/6KXbFtQYePU7Ry+HYztVBDZioiWyClSA+vsQs+GDz8S8tkUiW8DxjKMq1f9s7Yk=@vger.kernel.org X-Gm-Message-State: AFuF++lSsX34YMbuTWQFrbJJ8TZDbug6KmVO2hkJLZ8/CMuBcFR5lu5F Fqsk5EUFUGTDbnLokMgqNt0TPYy55/mfJ+p2x8iXiZhUKDUK4QbhgsxQ X-Gm-Gg: AR+sD13zp0CSnaVxaFwsP0jFSSb0w2JrM3n60lsIR+v7ju+gVm5J4zptRXMrqBTdUmS TXBMGl4as4u7DDyLDTtL95GVrUIj8CBiAY1cYzqEyMAz3aX6pFw3rr5dTT6mxncxx1XClmPKdeo x3Zb68PDM6WHmMxUPXd0Mm7xM3KMe+jfURCJGequYsuUCdaynhCZZoyyygxZAPNPDE6J2CSMFW1 kKTqV9XiUFkE9oaOAbTboDVi4tvq0EkOXmg9nN4qbh8MyM7aWQLITUS2aA8IxwOtxBlpBdign1D QFkLmw05+6G13BBPla+DhPdPhWegfvIfyKbq9M2p30APIWosVMYesGetLjxwRsCNGUswPbVkfCy XNral6ywAOc9MTJMlJhofLPB+o59ckcZ6lsnwfEor5blUTxS3GnatFtgpVyuoZ8Wt2Xr0jKCv++ 1C5ofm2R0RBSoUpjjiLcRlFq1WM/lbTToz5kkyNcLNST0HccJubI8RVBkWXe6+HvZPaYWWbqdNl IVX1p5+aMujvIKPUGnx3eSzH6pR419zFiKmy/Q0Bg== X-Received: by 2002:a05:600c:3b20:b0:499:8704:242c with SMTP id 5b1f17b1804b1-49b91bd78cdmr481597865e9.0.1788289496316; Tue, 01 Sep 2026 12:04:56 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.04.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:04:55 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 08/16] media: ov2740: support 288 MHz link frequency Date: Tue, 1 Sep 2026 21:04:30 +0200 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.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 23B314A2609 for ; Tue, 1 Sep 2026 19:05:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289502; cv=none; b=H+agdyjRwIBbgQXxOQM3RblXRn80jjRzXqmkbJKyDmzxvVfqFyCD8Ccz13O8SgGBrNiMMa/2diYJU/+Q+HsMnxJR6y8X24DoXHyYScG0ano4AXcHLKc/eLC/H6PmnsnV+7NCrxK1Knq+8zsRqB2osWRu35KLA6JdN7DKLkaPEyo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289502; c=relaxed/simple; bh=Bc5RyoPyL8jsNo0TXqrSYlmk5vjAHujKpDa9NlkLa3Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ILjWgC7UcW6QCQdk5Mg+TpoKZlYREAS7Cx3//Ru3EVvJNs9nP3055O4wy/xRnCrs0J9xznd6JRV7mOd+FIklLVjzzZi5UWMTvpO+eo2eRxkxpREAEl/hazJRr3OPS6ztH5lasZgE+tcQChSDr54C6Ijt8w0RcF6LLhLEd3oj/5U= 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=CSeOPCi3; arc=none smtp.client-ip=209.85.128.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="CSeOPCi3" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-49b0d78a801so1243035e9.2 for ; Tue, 01 Sep 2026 12:04:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289498; x=1788894298; 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=Z6E5NgofUMoTlxAp6O0bNxVMULKG1XOVZoONL4mrJbw=; b=CSeOPCi3HR96S6riTmDHrdrX7clNBFLPpk4o2HIxvSOKDnmUJgrY6CY4ISjqzHlyil 8rY5cy48Tfl1bgCeNo+n2/yPNptDmZVJHPk3DDwwm2bDvb8hjeRFrXtwIpGZJ+ZeSC4Q dN/6pP8IJKmklDZzVPrt7Z60ZjLMan7Ox0YjiXao0fxB8jcPwVUNgOjS+Yy7MPyKl1fF AC2Z8Z0/1R3hx+jxW9k56ia+a+9k2xn7r/zsMkrVosOit3MeHg5xpvMttsZ21NU2jugO CvRzm+0Bk6HJDb4FaRfEQv/+wI/cVX9G8g10PpV4KY4yZRTqcTINv24MXpgCKPQ/FwBY 2TCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289498; x=1788894298; 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=Z6E5NgofUMoTlxAp6O0bNxVMULKG1XOVZoONL4mrJbw=; b=Bd2axpSMTMNxwHOpNzGcxl2FRcwIqEoC0kR40sQags7OtMJpKTY7j00HAWCNtyF4WM h22wrCc1bOzjuNhzv/2Nv7/LOqNYdbDH8/cvIgLWQW2Is4hMTay/QQkM+ac4Dt/SDPZD Uy4Bt3F6c1MUyVZD9USE4cAI+rsv6592hqwWY8uwRphm22MmSRhEJT0ZjX5Bp/WG39/o 04i7/Uc2RSKkMdYqxPHdUavToeqVy2xvymy9eUWQ2MULAhIP715/1gsGyg1OB4MavV3E ZZRfqpQ0AuPp4rgNz4AxZx6RKjbudPcN0yNOuD9x+TGCQKod0W9lCjPV8F1NPBRjyakP BpLQ== X-Forwarded-Encrypted: i=1; AHgh+RojUAabkU0gSEYJkAGtb5IP1jy2TTAzW3cVwHnqqoS9Pk5/Zzvi4nez9dssAbkXn5bVF4vHa/QtlnNI38E=@vger.kernel.org X-Gm-Message-State: AFuF++no1ZwYSePektfkCfjfYoCpKdZEuFzxlzkaOpFKBRlwup0qJCHo 1vjWRuWq3Od0toT/BTHxS0YyBjOcu0cw79FBTooPd6XQ9zMlJtwkbDU1 X-Gm-Gg: AR+sD12W2nN7ahSDwXJGQ8sA9kcrwXS4D/GPlYQxO6iglqIrpe7Yj61UbzGLDCBI2gY WEOKW66XQNx75p759VF81JWyKoUc4nKTFj/TqR/wE4zfJCXCP6yC9+fJlBUBNZwbtR5tx/jpi8S bkgzj5sxDVGxwfZeBK3DkyQYsNxhFcCcm/ORpZli1huw5Ab44i8Cd5RHrrK7GnFH3KJ8AiSPZR8 wsmfLDg7c4CUk3xkb4cr2CsIqAJX4TpqKEIAkGPnuWW5dSkS/c9GxgbZEdC/MwAKpR+Rfwv41ZH iI3QG1SC6wR1ayg+JICwsfSuaUSme0QmuOOMDx2JShyyxRbVzvDGlHuaH7LiPNGDK+cj5kmEqxE GINQecWeQCsWxQihdN0ah1hsFIBTXm71a2fnQdD6LyYH7//CfCpNdOEI9eByntWPeMlBOMRJvLD 7fUspH3ZOrPZGP0ALnCig6FofiqiGNy/okP7WcyZy4NbUwOY+P8UIym1SdvgawgXTOLYix6QAPk mMGxCbOlWHzmQp5EZWryfYoJGngz+uNeUbTvhH/JoM= X-Received: by 2002:a05:600c:3155:b0:49b:910c:7703 with SMTP id 5b1f17b1804b1-49b91c3dcb4mr544509945e9.9.1788289498025; Tue, 01 Sep 2026 12:04:58 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.04.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:04:57 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 09/16] media: intel: ipu-bridge: allow sensor-specific link frequencies Date: Tue, 1 Sep 2026 21:04:31 +0200 Message-ID: <932eafc6726b4e5d062a0166dc4b5e1594025fd1.1788286339.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6A4184A2617 for ; Tue, 1 Sep 2026 19:05:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289507; cv=none; b=HuyGu8kkH3QPoq5/lgOyacuUZTHKcvKLq9izPvWS8PUwvoZjSxAoHkvoxfNQurkl0cDkJsHoBHuPT9nb5K6TkKjq0otDoJTr4yGDG1aSVoW+UWxaf6IQytNl2sTX5S3RRQPVvHd03i1wUZF9pTAAgWbMdAkGlUrvfii5RlyZZNo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289507; c=relaxed/simple; bh=nDjXt+isRGGooTXCaWuWnqb5pe5EC5+ZCK79Vbzm3eg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nk2uvk4pvBQLoHP0BGgv8swtX4Etm/vaF4dCH/RexqI0Qt8MriiPSfZNVVDCKTUp57w/qHOdu3WItAMfuPcNsMmuKHLNa4xvXmq3ZhLn5Nwah41hSvdqBl35PjZ7X+8eIJq5w6iIGHwEX2rv5RLsfCBl8yjo6/UGJCPhu/74t1A= 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=VAPAKvoO; arc=none smtp.client-ip=209.85.128.45 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="VAPAKvoO" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4980fe6b3beso11339255e9.0 for ; Tue, 01 Sep 2026 12:05:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289501; x=1788894301; 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=FYj9gMNKBj9PIheDoD5f1AO5Yajaqc9NTnFS3lh/Ezo=; b=VAPAKvoO/35OJ6n8acq4ug0stbVi6OU9nMKmG7D6AhbTApYIVnn+BscTgcnRFXl+Bp lsOLHSe5ZGxYAyM1EQ+q5fHQOcA4v/jDkiwDosqiPysfuarteUUxlk8i2sHvPg+FlISe c2MrEydCC3zoKcQ7kGQVjA2CxgmVF4TmOekYi//rM9PTSNtdGAAUiPTVSieaoTO0BRlQ qj1wlJwAMgIZkyGI+wd198Q6MPEHoSdGcD16EtmdldbkbBgYWHvR3t1WJzSxH59NWDjQ svdGy1t3pPfO8S9ny1NcLV/SYGEgdeFrGbtiK1ukmuQ0N7QarwjsrepyFNIdqu6rtR0u TsgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289501; x=1788894301; 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=FYj9gMNKBj9PIheDoD5f1AO5Yajaqc9NTnFS3lh/Ezo=; b=Tuc4RXxC0TvHPym4gIKSSODEsGSqCynq6vSntF05t4wmQHo01raIvgX5UHHi3IGfPI 5Qk9k26VxBuP4LjzmwG+io+g9o7KHOASSwoaP8n5jexPgxiUtg/WDU3caFnXC4LQUl/t 361YTsBj8vPq5CiZj8KanVn4mpP8o/6SpH/KI8rv6Lur5DkerpqD808JhseCITY7x+C2 YMzo37TvAUQxPbOsYXpLpDJtK+ENfLN0Y1NP3a5k65WceoHrWjzqPgYJHwOOkDSyNqJg PSBuTccMRG7ZeqAc8FwDZLgv71Ln4AAwChfJhiC0eaxFF3NI585UQMobkry1J1S2MWPV DqiQ== X-Forwarded-Encrypted: i=1; AHgh+RoujZhWTaRf6qfXvga4mYNxL/tbc3Z6FL/QuAjC0CIjZPVb480NVAqenVeWwPyFQiDNyMp4lXfLXUTQ43s=@vger.kernel.org X-Gm-Message-State: AFuF++m1AdUblTyFqNOZieDE04R7uVSzUoApQKnyeMva/IiBtGPLjYG0 dignZryv46agKJqG4sCe2PjPzQblyLLFYglYBRoCiV/fqbHZ8eq8wl7F X-Gm-Gg: AR+sD11pg9F2sKaIRd9Vt9S69tanmprVFFxuZPi4HIGkmqXKt0/YHRLJj0ab8KOsZOf 4dOfnWasPof+4LH6Vr/Ked0jwipQOwV1ibzTz71R8jX6L3M1mUfPAqhzFE4xKuX7mcDq0AcPdl1 wGwg+PLcuMSAQhhDYNcD8X4sukuBs7r+FziHpzrFr87hQ+U0pdNzW6L8Yb6w/kFc80m1imo18YS uqw9ETl4SbcBSR8OFIjlJJQRHPN3kZ6uwZPltlU60zbVUq3jKyeXfv62Z+OJN83Nfn7bm+pSpcv qczFKuCNFF1Iepp4I6JgvfGbaOQ8NFlRHFVNc4Fk6At15pHN+mFqZk7/Qyimas7jQCdTv8RO1EM j9Pwv7UWzH8OmOeCfBjAqs+iIfFgfEZLc8+Kf8h/AubNmXR4QTe7Ypq+T2VJ1PiVjXl2WXrni62 8IF16MPh4QX9XjM1+4kCSSP/1rKtlbXkSoQ6nMKpOghijgLx7ScYBqQz7YC8LBvvOkNHYYsTgPA kGIGRigv5J3XYUt/mbFIIPqS25wFEWvZCRmmTpHcd8WnQsEQzRc X-Received: by 2002:a05:600c:468d:b0:49b:4eb6:6ffd with SMTP id 5b1f17b1804b1-49cdd418c7cmr99313195e9.5.1788289500861; Tue, 01 Sep 2026 12:05:00 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.04.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:05:00 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 10/16] media: atomisp: derive CSI-2 timing from sensor link frequency Date: Tue, 1 Sep 2026 21:04:32 +0200 Message-ID: <11cf61a4fbbed4307800cf8a89632b2efff88ce8.1788286339.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.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 0469E4A2A44 for ; Tue, 1 Sep 2026 19:05:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289508; cv=none; b=Uo3gs+oyjSUe+AicPtQYGT76sCbAH+8MqrRT0KBmr9ECb5S4q9M7f2E7+tOgYixZK7JrLxuROurpSBXXBB91/hB9DKY1GhYez2XX7kglTpBI7Ky3DVkooes+CJvgCA+HtSJ4s9FaO61v0/82QfgS+PehEakOB/Ge3C34VGHEN94= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289508; c=relaxed/simple; bh=O8+H77ig95xx3D9xkOkxR8/Uxxs4zMr9rHlkTdeo084=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JbRkxAceVRMdYKOJiC0UpiD8rcwOF1zSYvQG0zWgI2wzFD/NevgBa6lyG/w5838IPZR2KAaDDeXzpNwueWB6+9WFdiLnXF47G34ui/e9o2VKUfEVldE8pDZ3uQCOW5CVWmM52eeUpP9rBS7KPyjVkL8FM9hI1nLgwseFp4nlkGU= 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=becZRBY6; arc=none smtp.client-ip=209.85.128.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="becZRBY6" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-49b965570d7so1221795e9.0 for ; Tue, 01 Sep 2026 12:05:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289504; x=1788894304; 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=yex/OilwSnogp/tXDfdHCJ3GmknddcQsqQcXRNs/Vaw=; b=becZRBY6dtkAMoyFuLeLT3F+E0XbsvgWczRQmwqc4MjgLGDyNdm7DnJVQXie0pmFVp Zmf5JYdxV1x97MYQqVOqFMLM2uFRxcRNH7jZr9dqhismx+KaxX1yXuyHUcY/98psp5Kp k33U+2B0vmtLFROSW+dDoVpS7ooBBm905XFUs7R4iVujHvSQSZqlhZtExSS4QJwJDMYb WcJwzzgpu44lQTQ6l2OlIyvPcRRHCMbRLoXNzmXrhXZtY8+ad5RioZ/x3ACV1jJ09OOK Vqj63g4CXJA1RFyGmwyV6lZuo5cSeLmft/xqM7wxd/nC/qfMGYWCgX1Bjdv7uyzODFqN vOwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289504; x=1788894304; 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=yex/OilwSnogp/tXDfdHCJ3GmknddcQsqQcXRNs/Vaw=; b=XR9oMI2EMZVMI1usJTNPT/0DVgzilegmxCNsrPNGj9cp+I8SSUmO2k1hP4dc2Kw7T5 tvrQ8/9CKP15k8OulhGd3Wd+/OSOpUTQZrsACGeh2Nrvvo3vvzOMNfIm+3pWS+K0D75f cCAG9sY7hXxmb89wuauWPkHCxxYySgPMgPdFn3Z8s65uBeCG6s39sYszvaPIwMMLJgxe 1hke6UZuxywHNJAsNAAPuhRkqCjWXlJgBJkAGR1P5P1mHPt7kDFOTHICJlk2vFmt2cKm tfLMyIdlgxYJwSW0p98kMNoBLlM/yF38LkQlz9JWR0zjnrtt/mote3vvQNXeyW9TTjBc 5vVw== X-Forwarded-Encrypted: i=1; AHgh+Roi9/I2hy4WYyLHrlSPOEnp+bzlovVGVMqdNN18ZsHAjh18/PFPcCbNFLFYpptkKiv33Otoe2qP10SXyt4=@vger.kernel.org X-Gm-Message-State: AFuF++mA3/9uZcdJsrXm19xhD2vXkaAfYPf8K8cykF1FZerTjTQ5WqI1 6qWBHkzB1TYROto4L5qyUIXRlK3Ixtoh4oIT+bNldD/ftjqIEIMy4+Se X-Gm-Gg: AR+sD11DKV4gIM4+ECIzq95/1Rs+NOzlQaxyNlCiy/kCPVztWGQlVao3apWmyr5dHcw Aq68NO0ymas7iwo2u9xEqU85Q7gsdb5LAf8STYGShiWp4zTFnxtTvxRpAkXuW4nbgS4TrXZWeNj WvvrkRbRiwC/DO3dn4o2tLirCmgRaEA9fz5dEG1g7OImhQh319V8hwnthpB/Z2Eyf5Gs/YTPV9Q Rekn954ib33pp5MIxCxKz1uxFsuxvBHTtVKaeCBF2SlclTZntDw9rmh3KBsIdPQYriFAIS60vaE bPLxsSNMXVHIqMxxrFMlUmz2nhs9bmoV4YL8Kc4DwOTv9y+6eOX7knH66knZ+/gBzT5X3ERgtac bdvVMbHNnPm4k3iz8jlZCXxfCwCTAC++RSMMUbv1GshjB7ToBZgujxgJPOnE3r53N27dJ1iR2Mt ohSv9xvTfCSE8s1s9ibKQQE1GXs4eP4e3dfC9kk45gSCYppgn/yEjyTPVvvB9cNdK9rp5Jkz1vQ DsbDdK/Lt1Pf0RGpvWKcnoEN8Muwn2FHad5T12TvR4CZ0pC/2lL X-Received: by 2002:a05:600c:4688:b0:499:78b3:7b36 with SMTP id 5b1f17b1804b1-49b91c4fa79mr486809935e9.11.1788289503687; Tue, 01 Sep 2026 12:05:03 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.05.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:05:03 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 11/16] media: atomisp: provide Yoga Book OV2740 link frequency Date: Tue, 1 Sep 2026 21:04:33 +0200 Message-ID: <3c061a86251dd0a7210d67d4f1a254c2b8308d36.1788286339.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.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 2F0444A2A49 for ; Tue, 1 Sep 2026 19:05:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289513; cv=none; b=k3nTn1XKhVzzrUrxq8RxGQL/OYyOim1Y6XGDrQquqI+7gG7ZJ4N5nL0x5/bvoYnym/HnphlIsbyBnvdwCG3a1hBt0PAvdUQrmKe6bLwVu/np9SbStqt/udJpCEM+YB7Yh/d/oNB6RsrSenGNZimRKpj4T2lMs2m9NvBmSZ537DE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289513; c=relaxed/simple; bh=oSQRJqNxqEh6/B1/z4WZhyY4jL7gQ546XKgY1JR+lhE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UDbzSCePdDEsTWAh4Y9GgigvFNz8UbeGgED4UjL/5BEed3yZ7yYDRuAlGR0nGgLRyscYcRkAKLDwZvSYQdHuXSL3gy0spsIR8Q7zk4cfYNWPelLNrjok3TJXpM6Zbr2b4O9lZYEBawr1hEORhpqopnoPOUeVzwQHtUiTqeHDDIQ= 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=XaeuSaF9; arc=none smtp.client-ip=209.85.128.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="XaeuSaF9" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-49b8f86c6deso1073685e9.0 for ; Tue, 01 Sep 2026 12:05:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289505; x=1788894305; 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=Tu8WUi9HrdMM4KGqsLHa/qCPtrxMlvMbqE6rwLVKFtU=; b=XaeuSaF9xoCUPt3YZhF/YlQipiPTIPLiNEIkDFZrWtnotHduJtO63F3A/W2IlJjqG1 FFBL1Iscu6QvqInpm6WcHRMrEdl5TsG1h94ZDoC4nS6TjiTAe3xyam1PMQWNKCDK4U1z OcvdbMEKo2Ppig1XEpKLqYot7OWUpyXcAstuuqEQslVNJ8Y2FoCGeiYF2ZkrB8EKzGIY 0r6MZnq2lYK8sZ2W0elLTdYvezjmu+ZZ+FrDgyrEM7ltLBXQFlzv7FBSGHaCvAC2YNHB Q6NZ4piliQKWbIoY7yWPkBkRH06SfesDHBc2iOgwHcvfNz2EAgpoFMhfQpprkx3ef+vV Vuiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289505; x=1788894305; 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=Tu8WUi9HrdMM4KGqsLHa/qCPtrxMlvMbqE6rwLVKFtU=; b=XOBj+I7pDUWx314Lw/EPqzd1ssNTM/fdeNA4F6/t5VkkeGhfRoYMQzP/yqJ9A35677 6tt20RShuycypoqaXpI21bCiF2K1AvJXgEtmRD8B/lMnixJDfq30Gv+Z/Gnmx/UJJIWa 8mJnPw+HxUI5Lo/PX+cYIpm5aMHr9NATqNQCM4UaUkO6hcoaFB52v7Ql9cKSREIMGI2t TFWX+sb2cwOJHxw7a3CASBD7cT6716xF5ouE44qjiq/AoQJwBWA0UIkCEyKNt6IEOmIP 0Z82QzDik72RraaXdLR5Oey9QDWNaJqyoiptQVGfmB+Us8HdkA1MZNtTcUcBpsC+eSuH V2Sg== X-Forwarded-Encrypted: i=1; AHgh+RqJ5x0b8swsaJqlJ8u5WsL2WULJuYrAX4gBOTiSNmJzmxw0WitciIgkQ3xC3HAIZSi3g4Mv6DWtXWJKCrI=@vger.kernel.org X-Gm-Message-State: AFuF++mrHxtshaGuNNaDMsso/7lBd0RJ+FR3i/Omj5joXNa3ZRSmVlDE TWL/sE/vNMbgXj3BvvHfy/gjibAYz+vF7Hq9YmVZHs6iZV3tEOGhXp+o X-Gm-Gg: AR+sD10jYzPvA6lWg7VAFt3R4wSoyHtwGaLPyZgEihcamyHSBL4cZF2v7gzlN5uEwKG 7Mc79heGIM9Zqx6VIKO5S5/wsrNOl/612dW6qD1CEnx2OZ5vftVu/34He4279pTMW13xjkjsFcC 3ScXaEDXfxNAEXsEJMoaPUw91rQacoFGb04A/W8Xbsx6go5lCVKWUyzewWy9+jttlPrCmA3B2vT Z60fF46ouNdMLYZwqX3mPrX4R4KCTwyLBs6FdRROIGZBOU8HtT3jpIxfRiPq2yn5EwiW0oZn4Ad Sx5D1ZTs4OicBuGrX1ymoK4HUJUoErw+ux+9CMO6TLnI7y7OOZArnFrFpDy4Qyp6llBymGr2POr JZ/hD/7I8Oe9oKZiS9vUIA7WAjSX7RCgsz7S1C9ywVh7ChcIO3QSM38NTFfSKNXzt/eNBbE+J2m Cu8hNgGdYZNQCXVEd0W3dpKqbbLPSc9vA+PMC5PDXMPpPvbzFiZhBc2n7bB6MtstHBFvco3DZ9N wlfMTpsqLB9rwRfSJBiKUJ6ekjImlba+Wt/ubp0sQ== X-Received: by 2002:a05:600c:3584:b0:49c:dada:30b7 with SMTP id 5b1f17b1804b1-49cdada30e1mr187530855e9.2.1788289505444; Tue, 01 Sep 2026 12:05:05 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.05.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:05:05 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 12/16] media: ov2740: release group hold after gain write errors Date: Tue, 1 Sep 2026 21:04:34 +0200 Message-ID: <21c199748bf5b5b0c9eabfbe9bdd17ee665b39a7.1788286339.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA7624A205D for ; Tue, 1 Sep 2026 19:05:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289513; cv=none; b=M5vbQ4N6FjZ4T/DbxHGwMtJ0RLtPdxSu21GXE+FY+qsr5oYw3vufh0X3mFyWUkZ6lCX6YtW4VSj5MeUGuBa+Z0LDXaGG0iuq8gkoBx8/7G1c2QJZX8BG/ipBQfOHKt1Q/D+Arsl03HjXviZO+P56dm70aVxfzck/a90e8cClk8E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289513; c=relaxed/simple; bh=yy7NqzFTCZj46zAWpwdiPyZCalfwq4poxZvjcHNMIH0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VbnuXZ8sOZy6JuD5kFKZ7J415NESS4xQXaWrYPIijL2QMsJ6x89JYnbIP2m/b6CAtptBiy7Ju8Wd1/t1JIMiStVOVcnLES6tiPd/jdizfaetNdPt0oFKjwtno8+TOvmyau7LTD7b0pADjQjXov8pAQzWMjm2LNEKUOtIkGpZ0r0= 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=JEr97gUD; arc=none smtp.client-ip=209.85.221.42 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="JEr97gUD" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-47fe89fb333so152396f8f.3 for ; Tue, 01 Sep 2026 12:05:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289507; x=1788894307; 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=lm5sUM7FjiWcwv7SFl7EV+zS0klFRC7hu81VsxS1+dg=; b=JEr97gUDqQhXhh0nhoNt5HVitgZfqLVNxKHOvKRci2AudMnH9wW7whed8fAIWzXeAJ 8GfqLdjQNsuHVFOvh+LsP4i4JIjUU16Yab+MgbI1OOvcogRcE99k5MSb3Stnzc1Xt4i6 +7bXnyWV4XkEK4Rdi5qmxz4MUzsHY3lFZf5seTcj9BkJ3s7PIlgxKlqDuKCRogotglZL tKbYJVR1nGVPWKIopIGEdh+swGBCkiyCjpFpkYV2pFrtWNY15xM0QWo61Vjn256mfUXJ S7lj2TUc35aoiTNMaT6bGR0QCVM9HBtvYpXKw1NLwhiUfzgmgvaQEBc6E05YJfsgnUWI RdCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289507; x=1788894307; 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=lm5sUM7FjiWcwv7SFl7EV+zS0klFRC7hu81VsxS1+dg=; b=FZWU41/uyd5BmZ3NCRt0HNa7epY2Fivnf22nuutQ6bMQE+21d1MTVWt3bSESFryEYD j8JlCCUX7XCfzEKyi7wb2N1JNCdgrrxVfvGth/tk7TMtbp14LHHyB7+Jxuhz7JAz//93 kvJ8K93b0dpOLrhmEMm4T3ko3iCkulhz53KVZrqQi6RXAYqV4zwQEISOq+FgfPdFwu9f tpSfetejbWE/gKWWRIwFuaXDezAWjB9Y5jK7aCtYF6N/qhgUCK/+4Amk5IPa+cBkLaU0 qniBl7nlxwFt2Q+S2H+iQfE3J4j/qekTRR//3ZB/U6eGqcc085fO4h5tt5IVDZQhYnKZ k7Xg== X-Forwarded-Encrypted: i=1; AHgh+RrsheM8HwxX7zCUG/DIbfM6opwxutqRNjkEYwYaKf9aybZrmb4JGjlw9svKt1UOjr91Dv6GB2c1i5iIvBI=@vger.kernel.org X-Gm-Message-State: AFuF++nN/bXiUjtg8iIhN442xT33sXiTQoZdU41ylUzGGqHFFybIjmTj vcSRS5tUKdxyWhPej9Q6MIcEe+jzxecVXKaX2yYX5+zV/8okitDTDvnG X-Gm-Gg: AR+sD10sciCrKAw6Qsi/0ty+9yLN0ejYZlc3aLUGIiyBoGn+TxXFv+hqdqDDExfGIc1 xqfok4N8ZcRP5tsBzOpn33C3ZuYVojQWxPXWPa2lqa8h5LYc3KcDlONxBL7V2yVRJqFa8gCwjtZ CaQXY5Ggvmqg5OAjLCaKouFmscYpUvH5Q6GK+M5J9vxBXhGRcInIAGNasYQ34cA9r+q4U59evFn KN9N+3iV68md1p1Str66rUU506+0vfaAWUTDjSohsImTW26bq2NN0/M4hlDyy4NDs2QHfcqVmvA QqNKcxD/owTwaR9MmpqnyxICTdzJ8BJzBTdAUkOfSullgHj6IBGTqPZpJ+oMB5qG6QJo6BHJ0oH EcE5g8RerVEMY7elQY9h85zZOD8jkSiBEwPUzSnjbB13A3Y454Z3gG7wDYnyXz8gi1uNIg8tqN5 6Hi3LawLdoeL9HukSbzqcwk6glGQmOi5zFzR6luMKOsxoubPb8yaqvrJH6nsKYy11f0CTGsTkvP uhUr0HK0k66MrkdfaK5b3+ipz4Gr0PiWIxnqXlG8w== X-Received: by 2002:a05:600c:870e:b0:495:6e68:5df2 with SMTP id 5b1f17b1804b1-49cdc43f461mr233533705e9.12.1788289507179; Tue, 01 Sep 2026 12:05:07 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.05.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:05:06 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 13/16] media: ov2740: add manual white balance controls Date: Tue, 1 Sep 2026 21:04:35 +0200 Message-ID: <10f597f1911de1d3cc43b5aa7a4b3a13aff4e63b.1788286339.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0 From nobody Sat Sep 26 11:46:50 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 8BB8D4A2A59 for ; Tue, 1 Sep 2026 19:05:11 +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=1788289517; cv=none; b=AK1fQvmuZUng4CFZ9pglbL1gP7ZspukQ/NkaJhow9xOuND11qJ3WIgc4NGuN+1VeBTw+CfPh8SCgIODvm4abdHP4EXq3ogq2FXzGIiVD0dw/frRx2P/EvH21oR8oSC1DIpwL+crEHxlR6aJi16ekxEAL6KH19xjpWxazcllLcA4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289517; c=relaxed/simple; bh=CGqSku8s6I9xNM49fj0vJ+QHoL2Fr7Pt+BZAaxIjnVY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WnNkCuGuqY48KVccZ9JOBxDmtg9+8RlUxrsEGafi5pf6Xbl7mAtXCVCximRzP9fn8deNq+yNvpCIE0cPUsoQm91S2kLT7UxCi39bmrJJ8lqKSlx0RLOl8ws6QSWSo8VyTlzrQ8ZRpBtLl5KQeszdTUGvzS4z0w+/PxNORbUqR9E= 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=n6w0qPIb; 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="n6w0qPIb" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-4980fe6b3beso11340325e9.0 for ; Tue, 01 Sep 2026 12:05:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289509; x=1788894309; 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=ZxYVuNTHZtvBWJm7YqYSyMDBs6saulAawUQpfC7rrKY=; b=n6w0qPIbxAUjjw4b6D3O/eugWpQ8+pHTPkR0k8cE/WCTa1+Sxp9OBSXlViX8uBlD+L idiKZomBHP6PQtn6spHbMcLHtY0aXwWOBmt4gsmufFwqhBsYn5ieoR7eQshkQyyvLR86 LTJnoBo6a6/sm5XPbkEEy6gvo9Cy2u3givh99amIGSjoeubyzyaZV9OUz3/UnE1hIg/B woZFATmU+ulLHucBaktwLElLdmxtKXH5TVbc46EG5PiAeTGWJ7qq6HxFGTvk3E68oVzO LzM4JMK65TSmhCsuwY/2LqLVzo6CezHXGcfD8tOyMWyL85LSmiSo32bUPlLDwimmOZJp xQEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289509; x=1788894309; 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=ZxYVuNTHZtvBWJm7YqYSyMDBs6saulAawUQpfC7rrKY=; b=Q7S+W58BuC7kY7iSKpx2Lw7Fol+neYgj5rQdYCVR++w/XznNn0ZhzPt7rMNsnWgtBN +E6vwryufcxqSvEAO+w7xrOEOyrm+fOQwkR+Uqawmvr1ltjdTeYsg3MXyaImhB/69MbI i6fFTPz1unmgz9zmfCeJatL4+nLwQyVbj0xxko/3rA8KiwYVwp19e+sBWtRMFhB4XwNC a6rqzoskz/vbZ5zMEDOqCMnwtE4TzMv7EsoE0+CJDIGo+TSS07c6ys9iL6DBvVfRe5JF eTvTGDR0VRyoBQ8PBsktZ9ydmGmoxCyt63xDkCPAO41ZomAnkb73W8rl59KIUWy+IcTW J1UQ== X-Forwarded-Encrypted: i=1; AHgh+RoxywPp5O5OVMRrd/S24NQ/l2ZwMIR+FA34MRuq/TuXASc1UMRi9nl4M7B3KbQ/StPVvCxHe8JVWV6YV/g=@vger.kernel.org X-Gm-Message-State: AFuF++nEYLVBSd+pXL8niT3HFd/HlD20UvSuqKhZEWzzngG508Ta1f1h NLr3AJzZw0Wz7/OtZZwwZAhXoHvZSx03D4Yaib6wc4ni186bIKEGtZD9 X-Gm-Gg: AR+sD13Wkc/MOWIKgX0k+nLFngQQpcuXoj5YjJHN9cBKOecYyJFuRRpzY8LIg+A2rKd VFQeSb7ewD0WoG8ga5MMYbiZ1Da6cCj0AI6gHV1+LrfNSR8ncfhAUkcQ8Fd0S1jgC+6WPfTWy5u na2w64ZVMLB41O32/Be14iVK12q+9Vc03O7pqyfklO/pwuOyWKhu4RdBwRnS5PEfpwEfJyZNCC3 z8NDiluHNfARL07HpWQZp5nlSRapzKx0IgmZ5ck2VFhOR0cpN8kKcyLdHTmB+RQaGqq3f4ONRtY TIDR8TAIz9NNdgxDnGlm+CAJUdYLiDOk5N3t13oDmfRgyBi5IxxFH2uGhKIFmUWy5ZEBDGNwK3v iF8EnZ4qmLvN09nJOVs/5yI2CjCiYIemw0gS4Lh04pz5942YahiFfJfQXWEOyvxSwnzT14wifdf JGRwOAIygx1W3ScFmTXAiKE3ECUn0eTe/L4BUI2HQ0ONpRDMggCw0AT+kz6ZedYZXZn7iYqgNJF Fpz8pBpQVVTVuhlO+XtIY4HhvbaLeJZMk42Zl0m8g== X-Received: by 2002:a05:600c:530e:b0:49c:dd27:14b4 with SMTP id 5b1f17b1804b1-49cdd4200bamr136408575e9.7.1788289508839; Tue, 01 Sep 2026 12:05:08 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.05.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:05:08 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 14/16] media: atomisp: Use struct v4l2_area for padding Date: Tue, 1 Sep 2026 21:04:36 +0200 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 Reviewed-by: Andy Shevchenko --- .../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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.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 CAFBB4A0F0D for ; Tue, 1 Sep 2026 19:05:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289521; cv=none; b=HWUmhXqo0Hx74XFGiXEQv1GQjwD3xA1h4UgKlg9GuzkditmwApIKzUIJYxc6pA+b72rufRQXsaN54b36xAh8nIVGU+aSB1plOndjg7ZRrLlbmrFZHV8cWhFSQRcFc6CTbhAIuEkYP7c67LyNfc8dvYHCkIgmP6/eUHw2MrRIOoQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289521; c=relaxed/simple; bh=//jCPP+eb8u5m4CIItyod+pODqByyo2ifauCpaFZfQo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OnUfGlPQr7BJPwx7ZlukCP7KWDqH5WgUSoYtYnWvCI3ACA4j8gbx4etPMTcApS2RRebkjDJY8bQ/3x2cj200ccdLNAKsYFRCp8kRiZuotVI5Ozg81Z3vBu2bhiwXX2qxVOTIaml2mz90TvEknWesgPXfBctQXHOW6I40k6uX88U= 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=kBOO31QQ; arc=none smtp.client-ip=209.85.128.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="kBOO31QQ" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-49cca4ffdcfso1144175e9.0 for ; Tue, 01 Sep 2026 12:05:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289511; x=1788894311; 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=ch1L0Y83sVLilf517YsasLyC766SqlDIh2xPLCeCC2Y=; b=kBOO31QQyFzkZBf3o+UBOXQlcDUEc4nC8sjxp0CsmHOI2yV+rtQ0HSVXw7O21htUPU q5SQhMP69fzizKBhAIcEQ6er5zg3DNLZRq9wyg7xaLRE6Vjx2OF9UUXgoG5HLKDv18rZ GcdTuzCSHeKOu592VfiPs/dUE6Q7H3rwTiRUCZDC8WqfX7STdnQ7bVxwYWELaGv31aQc 0MoHYjOzrlZadItpKYvWzSfaB9IKxm5J4G4UL/5Y80h8ZirNOOwEfOBnJyLYEAX5z8ga eSQo/Yi+DGIDv5cscGRtlRLf3uXrIqxE4EbW+Hq3Yo4NlVs9352L+F7y0I60Qajb71eW IDQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289511; x=1788894311; 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=ch1L0Y83sVLilf517YsasLyC766SqlDIh2xPLCeCC2Y=; b=DpBXEgSwu19ZQx6pBGaaFnvztWvJIbTtbCGx+WikMwcLmL1D7r4IGB6Nw0xVKWRwCO Um9FSueOlflbwCjJw+moEMa2HK73aJF9DBq43iC3ZZ9h/G8z+4fg8Ai2IJPgLIFKtmuA tC3Ts7E1E6LE7RYIvddNZgGaTGWDxStHdThaQXgFDF7rHodCzBtHxqDK3kwxg6jm9ieN yKZ5sTQPFYSVeX5j9OUM4KQEGSBq69kPuGxjzZBPrbppFoaR4d7UYu92i/W8q859K6LZ JqxfRFeMk2BmGQQSRN35bTSWif0NnS20XtbQm8+e478xbA31lG+8fqkZeJC3rGW0Ouuq KGqQ== X-Forwarded-Encrypted: i=1; AHgh+RoJB0YcrPQJwB4TouIvFQW0THHruUd4rK0YmPVDVzBtMMGucrGLrKGacz/08EgE8o5Ucfrrpw37Ee/w+ns=@vger.kernel.org X-Gm-Message-State: AFuF++lUlnFYpUnoOmQIRFx4svvMaJfmIp+7771BZ/4mjY3fnzaTXXI3 DQrSn1WgVU/iuci+Z75VE8v+nPT1NufXY1+GZVxcdAVewi5UOWKokr8qL6tUW6iVZJPQQA== X-Gm-Gg: AR+sD102zCjWtLIsIypg7j3yKZ2213fpPJnbxEBkyrf+mHu2oT224kSkbpn3hDgfmFO BA4bJLYl68CpsgKDtOMBbLbFFGqE/HtFbl/qcewQ82Lnxhx/Wwqdf32/4t78z2Sjf9Lhj32ism/ Hd8almjoIyNxhel+WYE07/8yAie7lsVLW80BWgDcVCHX6tToG/2WE3n1NX+oXioUiZWvveesGz3 DDJ0ytGP39uDQN6JtPmY2JmzNtv+UpDs/zMvyEt02rtvoFkRm5+gYTgmzYKR7V0vPaPIscAZsi6 YiEvapVLpNOccUsyuqg+STFiqOFohKEz/34SBtItz3EtICyeeyN1p01ennfrrj3I40AkE7f6qic T47Oyrg8UXyORyNqy6LnrG+fk8zYaqeqJAoNGknHwN9N0fWsCKs2UeIcAVd27kPuhePqEvVzibK zuqip+fh9kZPkM/EBE1nhpKOspQX6ImCBQ41FlLWPYHQu3Et+9IMP5+gSSLnDOhHiqtkkqViUVG PmVps73rzKChOSjsLZabkNTn56/IO2o+cKMT5BQtw== X-Received: by 2002:a05:600d:8449:b0:49b:96a0:5c00 with SMTP id 5b1f17b1804b1-49b96a05caemr527810025e9.13.1788289511378; Tue, 01 Sep 2026 12:05:11 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.05.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:05:10 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 15/16] media: atomisp: allow raw Bayer capture Date: Tue, 1 Sep 2026 21:04:37 +0200 Message-ID: <7ff456265a838f201118adb178107bc7fa72a7d1.1788286339.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0 From nobody Sat Sep 26 11:46:50 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 565E54A2E32 for ; Tue, 1 Sep 2026 19:05:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289527; cv=none; b=kxxIbdlUuh/gKFoBEM/LO94lgEflJHerL7H3xNBVDbmTx0sVdGF3YjfrHsPvQMhdlfSzucM54JCF4OvCkpNWmkxIjQW6Os8jUL6/052RnEd7UVTowu0ivcZ5JeUvq4dwHLX/fYVp/UJMOE1yXLrOtKGwsvwuRM1UzfjMO7QEfRM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788289527; c=relaxed/simple; bh=7TpNIuEmLp+G5e+2SpK8ix5wNiH93X57SXsd3KUQO5E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XnbjgMEluO9l/WeFijgsldJHr90H4kd22EyUb82uqIToCss2TtJy3rfIwytbOUuEWwxQ5ViLO1rQ0QGvXTb6BeY9DskeIUDuI9EZ7uiDoQcco6Zbi3674FFGwUtQvJGKXLuDUp6fSVCEODTrYAH3StGMTDRsooOQj7YLVJPQRpU= 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=FeITimoK; arc=none smtp.client-ip=209.85.128.50 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="FeITimoK" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-49ccfae359fso969005e9.3 for ; Tue, 01 Sep 2026 12:05:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788289513; x=1788894313; 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=06nDeaXmBzbafN8AxJnH0KVNHErvgEdljVUYQQyITT8=; b=FeITimoKWL1WHBNlZrhZiGz2hF8ds1sRkkpj6JfBmKkWyhrqzFmuXwM2DULb35XM3C JAgh6/zL0tWMCxGmLBBg6ufNZFpdppcijspf0mzds3YitDEIA1qxIf5vpHBXZyXW5sc6 89aa+oiuiC0w2l0F+4hj2vmLkG5d6gwv8PzhA2oQLTqWH5ujvj0QPHBG6ehau5RCaSRk zfp7i7tc/w9qnBVmmupXDjPLCmmg+hWgvKoU8W2RAFP+UAiE2o7qkf4ck5lXrI915Xfl /wQk+JDbXjjFyql2fTQEAGAMnL/+uV4OUeCGk+zdCE1Z/k2RrsBwFfI2NCdEn/6EafMW /EXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788289513; x=1788894313; 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=06nDeaXmBzbafN8AxJnH0KVNHErvgEdljVUYQQyITT8=; b=akw5qzq7+lMilwoSf2kNHeBcZD63pOTtVlu5551rDlQ0kOrBbMZ9GVlr8WCy/sLDS3 X4t157kc/b2BATEkQ3N6uMk9tb4faWyFtHFzWUBuyKlhGf6qjIrdDnvH8vmYUKbWSics CTdGWtWvsZ7312EQMmGwyL3iz+dvYQmF6RG+EPWI4tEZM3oJRdpIkILi8Zpdir0GenJl AK53HladU+yZgysm/Gd9J+Mx9rsEV52nEls7/JLYV1RGRda8oSMDVFsNVP3gF9XzWdDF kmYg5ygg30JnlW8HOySLIrezG6HIEmapnkeBsNdebVaI0OzPB/IcMpqE0uvXzYeugMcT Uvgg== X-Forwarded-Encrypted: i=1; AHgh+RrFG9ClV755e9hWh+sYhu/2eL8gOrxE7czLVSZ1ecLeF+4RqeDi3lKmW8MqeILWJkM7Pd0OkOuZItQiqI8=@vger.kernel.org X-Gm-Message-State: AFuF++mPOLx79QTekFLoY7zjWpsALsoW3aNEqtxMAwDtt34vGmbpDKcs p08hK9VpcxNgrn/JXT70Uroz770WYaAcQiUQwwWVwS1jCr+wCNfsP2Og X-Gm-Gg: AR+sD11RvGWGegrXtFQiU2ChmiuvWh0OyOpuTTMRPfV36DPvJrb8ZLlokDhVr/BNLAx qwGqm30Iz1OpC8MKuxmqbp2XhNZHdCRYMzfnyb8lWWPbxI9eid33fNVKt3bgX10gOUal94WEucu 3SDLfmMWxmFHmUYprpiS8vMqp7G2C7klO+Z7H7MkmqdI7dcQl4T6rby/BX2fXuItNwlHdEDuahl gKcLvljimA0SGWtRTWHTogJ3GWN1ARlLWX8eCWXUX1au+ZNMpl5c/R5owONioPZx0y08jVzJzmz 5ZThZNlEA9CjNvuU4xwUJIYSgLs9XcSL+dCxXwaA6hSpMjPGvjUnZj0LpFNx0ry1FjgfinyPAOE /2PVoa+rtVSy1CXIL7wfatBBvo0KiqrMDyXKnn+WeX/EkpJ1HWVGzwaj+Bc2ZLCBjTwy7BFr0Sk 8803Ji8Fsx1ZoCIRrWje8QAN6nDps15mhMqE+gRrzJCfTE25B8agY9EuXBLq2ZyeJnZm9LpfdiZ KroME3uKEpjKa9dgNzfZZSJqb5PWwvDZEP7Vq0OfA== X-Received: by 2002:a05:600c:529a:b0:49c:cedc:3c36 with SMTP id 5b1f17b1804b1-49ccedc3cafmr423438715e9.16.1788289513210; Tue, 01 Sep 2026 12:05:13 -0700 (PDT) Received: from 1Z10 ([78.213.73.56]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49cdce10148sm85481985e9.5.2026.09.01.12.05.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:05:12 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v6 16/16] media: i2c: Add WV517S lens actuator driver Date: Tue, 1 Sep 2026 21:04:38 +0200 Message-ID: <844ce35b357721e258c0b8d83e6caf9b06366385.1788286339.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: 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 2.53.0