From nobody Sat Sep 26 23:31:07 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B016380FE5 for ; Fri, 28 Aug 2026 16:15:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933707; cv=none; b=ZeAOBYxh5vtckEuiRzph5hD8htYdJbJc4GvmbFwzLS4izr9b/ai+q8b8XwuH4yErKHzZMldsWDqEoyLwz9W4uv+OpCGT5Fh7X0KVTGGYeoyZStZyvRglMJdSCQCi5Jn3CEtiIA3IdFcrlz+qnbPf49ubvyeNrtc0VFFtoRButnM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933707; c=relaxed/simple; bh=xhrDm+Mv7c74PMtacFvusD+88J1ycuEMG7fJpBlsDjE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=o3D+rpA3tMmuCyMTbb9uTizZBYA7OplaWUHWYhrjq9fp9AE7JxNeylVvWbb0+BdqQNQ72maPLJ7U3GQaN9lcV9OiCisIsVtv6ZFC2O9c+HB+ZxCYt7PoCL9cH5xrhsY1jx/cMIj/EnWipvzqTt32fLcR4ZfMgVd1hWNlPKufkBo= 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=QQyPFXz2; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QQyPFXz2" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-498028b3d5eso12060655e9.1 for ; Fri, 28 Aug 2026 09:15:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933703; x=1788538503; 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=KZWFTR8cjCr40UFMGvLuRrF9M/oaIFX/lTih1P5E7Kk=; b=QQyPFXz2NVslEW+QnLZWvKzzqn/btq9Msxr/KYCrFh/24L6BvjJw/5bk1Q4EQBt6GJ gRIWqRKFgMOoUlh8ClCd+bDFqSGzNIH3cN/x78g/K7SWq+10tuJ1mzdeThsU15HKyu1Q +d05E26zQsBAMNWAn8kV9OrrSaaaVdg0dVN36MF5iiBVuPcb/FRQkiwRnOXk7I0sBUF6 ErTcWkg2ekyU97FbgdT+575tZx/QlGLJwgOPH2MnmrdMq7uVaY8oOiharCgobxlrXj1+ z+8aDNkFgCfJe9ZpKaFnKHU3//G2+ywXw4qsRwRjL4F3sOhdehck/skrxvFKoU15CJ2S QlLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933703; x=1788538503; 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=KZWFTR8cjCr40UFMGvLuRrF9M/oaIFX/lTih1P5E7Kk=; b=LVl0qn7Fox9wp84x2jlVl3iOWT2S21sfuwBwvkh2nSDt/6Q9Rb6K0r/tn6cj4iTf3N dSonLiC0V7Rj2/9Goe3EAptjZJpy6bJXmPvCCQbo7p/fK0vuWXZyBcZ3krarm3qeNLnb 7cUF3u1/kwARyFj+PKt5Tp2+0O4P4Xxei7pIpcI7rVcy/5bAdIdwvYI+MYfeJR8E56E4 1/M7xhKCgNahLY9/u8yO0fLt6h8va5YNih/ggnugjX9v3r7H/0exP9kVjGTS/CsB9JeP C+ZMZOPxsvNbN6oFAtMeHeEdEUdhXoLKtshTHm2uWNg93aUXH95w0c8EQ/SWWWQB/61N QD5g== X-Forwarded-Encrypted: i=1; AHgh+RoVgja1ntm7N+5eUFnN09Yn17CAVZMQvjNHIV8RN37BR/FIWgt21iFI0b9w6+VIZIAZKMwHM0O6ANdOwJ0=@vger.kernel.org X-Gm-Message-State: AFuF++mLIUR2ma/c9JHhCNzfBz3KdA32IYkUvIVFsQmnQ7jvZd1gPQqx ci+Eb/LQGYt45I0tshjuRQw3UvouxkbZlWillt8s6CkMikk9q9hE5jWX/Nas/DYO X-Gm-Gg: AR+sD13aHQPB/VkK/br+GiETAzsq7hXaMznCLE8AGJKJXe92U21IaGpjszd8dc7+mbj ZC+X9K1OyzXp5SrssyvpSd2cJGA1+uIMOHvchohm9i9M86iRBTaKyK8mbts/hy/XJzdwms3YvWo mR1iP816Aks/tHMh/H/lfjeeggzIVlziybS6Ssx+VDGKkHxwxwxCujZ1ke+DgTtl4UjJ+RqSDXU q81rarttV1rfHwztCyhSuQ+U2bStIwnRsKO48rQSZlnut5rTuQrcEkKJTseG6Nmm1j6OdxOhbGF +cicURek8heKbyrlo+iDY161VvooVHHIa5TrWjtMDQgrdwDVEx87C1+z4wuRh5YLJEn4aWqBJt/ idig94PD27RE36ZypWww0OXR/e7JQMhlLshF8GTO9Pgv/9seRKJ5cjRtCA83UJc53KrdZrVIGjw JLG2brV8gZaxbm3JKlrKnl8Q+Aam6X6IMMN9UrH/bv3z1A+lkAA7LknqDJUkhTUqGGLDAH4Pnqc 3M4r0lZ+PV54OJI0bE6BXeDeQ09g38dNg1wquvWsw== X-Received: by 2002:a05:600c:354f:b0:493:c47f:3c55 with SMTP id 5b1f17b1804b1-49b91c1ece1mr134990155e9.5.1787933703419; Fri, 28 Aug 2026 09:15:03 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:03 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 01/15] media: ov8858: Extract digital gain programming Date: Fri, 28 Aug 2026 18:14:43 +0200 Message-ID: <1a7c8fba6835b2191b71ae1d903734621626e1f6.1787933456.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" Move the existing packed digital-gain register programming into a helper so clock-specific gain handling can be added separately. Assisted-by: Codex:gpt-5.6-sol sparse Signed-off-by: Maurizio Casciano --- 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 23:31:07 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 DBE6F385D7F for ; Fri, 28 Aug 2026 16:15:07 +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=1787933709; cv=none; b=IAWaGRqVw7urymG7pwrU8YZbwqusCSS9qBnxXWs0FFi6El69XyfWTD+qbmZta1hpcXnGxO+6hinU+dOSPcLVlHqJQEFeIe7GcuwgguKKoGCGNAEHzwz/vr7r4MnvWP2iNImyDSu3OAS6dBoUEIHMPHfOb+txvMVOUDiZe9VYb9U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933709; c=relaxed/simple; bh=vQSykYWKjwyy3GpEXKnyMhG1dxWdIduVo3u0cWZYNew=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=egBrWnzqKdP5YvUiMZUbcgYTEVs90de2h+B8M6lA4kM6+aoAXhWRNs7SHVIiQrgejmn9dWxv3HGPIfhGxtPe3kl65jSF9eXFs4KOGiFwAtW4Wc/VhSKorlQxS6CHxmBN2KsrzEM9hJljIhyPLPfKS0l1lQQZDnKV+qCMcgFYr6Y= 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=J8zF/F+a; 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="J8zF/F+a" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-49b8e527d63so10223605e9.2 for ; Fri, 28 Aug 2026 09:15:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933706; x=1788538506; 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=RUfAoBg4/XBI4pqtt0b3wPDxb0rk1uC5WDFTikKcDuc=; b=J8zF/F+aAtX8eqSUzLMXGyf3pDQ54S7MYdrDhMs9slyaIut6SYPOpMz1GLSS9j9kqy mvsfV6cRC/pDLu2z/sijzE60INZaJQclwNQ20J3J5VFMnL4UVe78s6ChiHP+dZuctY+x et7+hnAqv0NWRfIMp/RorXWCdPYYzpcgbhpwh5FKpZ7xmmH+MSvzUzEKyGhGliJIH5iJ JDRNbjEWcSh9yfE2UA4Chl+SvBvo1MSVEnkvJe/DYZLwd/47SWemplEcXSFwF4zyN6oM YT+SzP22bpQ2LmKWryB5WpirC5CJrNA2+t0HHaa9SuuVXOfZyNXI44u94RycU7z5/Ybw XKHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933706; x=1788538506; 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=RUfAoBg4/XBI4pqtt0b3wPDxb0rk1uC5WDFTikKcDuc=; b=AM72Ad0eHpuvRfLT67H9DwmPGtuhljVAhJq/MmxPTnBJidjP63vPZHgX46iH77ndXB IRTiqvB3Y0FGqbU1IziM6FwPJ0EamE6BLzGu8BIzwpBXTc9ZUtI1QfEE7TSsdk6uzzWE J/IkvuF7IXQVJyK0NsGN13A8JDL09Qsd/EEnWHwPTQNnzjobJLhiVQ1HHVHJWnkjCKAE RYySnxTVZesYDhzllczJugAHjPZs7l1S8q2C1ZAWv0csoNFgZzBh4PbdPPLWjCk0vRVT zErDxlpAiLq2tCd4O4/+m6KqrljOL2FcXpTGvLH8aSqa1FPxQj31lE3WmuTqk4/5zoo2 kjew== X-Forwarded-Encrypted: i=1; AHgh+RoA/QpqVJKGQ8OYWaqgmGymXFugD3lZpkFqGR5kbba2DYGfPEEUva8IskRUcKYAtG1qU+R4f5HO5L98/sE=@vger.kernel.org X-Gm-Message-State: AFuF++lGuiZB1UF+W9xWvYWiOxJOsue9rqc66WKBpFy5tdLD+ZN2IOH4 UEvc5fUU4Xlcnzzqnn9MPUZFlNkWYwzJKoi+30Zk/x07FJquvVw3G+gK X-Gm-Gg: AR+sD11tjnr59/E7qAA4e1fBOsI5vTW/6a3QSMVuc4T+R3/YwCEPFfU/bjABP+hjGlH U0dSNuGFUC249JpgFmK9CoLuTT+EqA8hUFmKusu55JAo2IW10CvnUMUgWF5EP9R9AmYlJTHoydG qEDXZTuJ1td/kEbNG7pprGbxUnN52JlirqH/iy7q1YbLY8skRpyMmh0HlAM6KNuDtKKg+Y2rgwq O4dqD2XuODu3u3Jo/reiKuTo8THnt9QkvH+KPfgniy5uroCjD+COZvbNEIAmxmaBBVY05XPHCvc UXx2Q4QaZcSmJAACSxJHZVR1n9IFnL+230oiGyiKCJWz3QMg7BoXvL8M6LVQhe8QjtSA7BURRpM TiI7HOWxaGzpO8AHPyjVfK7mGBFwv9uWqvczZDP+o1z4xYjrWTCaOs7tWIOG+wzyifmGNTEYq9R oyaljPRAS+6V3uC7ieaFnR8wMqhnYWXkxEqJvPwYtNWqAPAdutUwpXawBENU9KzcDKL9q5HVMY8 /7MVV8A//SZBscHMJuoyNhDyRiBUAyNFxgvw8Jr1w== X-Received: by 2002:a05:600c:4585:b0:499:b402:6c0 with SMTP id 5b1f17b1804b1-49b91c265d7mr117004985e9.3.1787933706082; Fri, 28 Aug 2026 09:15:06 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:05 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 02/15] media: ov8858: support 19.2 MHz clock and CHT gain setup Date: Fri, 28 Aug 2026 18:14:44 +0200 Message-ID: <017d1719d7fe132273f818cf7e20d93ce3e2c9c9.1787933456.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 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: Codex:gpt-5.6-sol sparse --- drivers/media/i2c/ov8858.c | 133 +++++++++++++++++++++++++++++++++---- 1 file changed, 120 insertions(+), 13 deletions(-) diff --git a/drivers/media/i2c/ov8858.c b/drivers/media/i2c/ov8858.c index d95f034de752..9b3e6eaca665 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_19_2MHZ (192 * HZ_PER_MHZ / 10) +#define OV8858_XVCLK_FREQ_24MHZ (24 * HZ_PER_MHZ) =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 @@ -1537,7 +1617,23 @@ static int ov8858_set_long_digital_gain(struct ov885= 8 *ov8858, u32 gain) ((gain & OV8858_LONG_DIGIGAIN_H_MASK) << OV8858_LONG_DIGIGAIN_H_SHIFT); =20 - return ov8858_write(ov8858, OV8858_REG_LONG_DIGIGAIN, long_gain, NULL); + return ov8858_write(ov8858, OV8858_REG_LONG_DIGIGAIN, + long_gain, NULL); +} + +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); } =20 static int ov8858_set_ctrl(struct v4l2_ctrl *ctrl) @@ -1586,7 +1682,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 +1721,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 +1739,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 +1797,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 +1844,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 +1987,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 23:31:07 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2DA0C38B148 for ; Fri, 28 Aug 2026 16:15:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933711; cv=none; b=uQuIqQSH4YRYvwd4n41KJT7Ok93NGtUgRN9YnKFxJBVkvDWZPOdg3+Opho0asFDneudH5X4K+MwUVC1HgmlZWJYRJhGfKDfc5udX7R41/AcMFJFkEZ7MKSR3RdspV5TFuSCoRPel+5+9U5wC/f9kIEIDneZTVbpx+t2yAO8WsvY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933711; c=relaxed/simple; bh=P2vAhkjwfZLpGHwPw59L73KMSOIBIbwxnRr5PopVIrE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GflOaSU3rdjm3nnuFT24UwoMq5HRNRTPr6TWUJUOthfIi765ZLkIF/C3T7dYjmUZ+x4Nn0lRcMeAfSxhTTki0NfjokJbGxfYpP65VQ3ioa0/K9cmMdJxMTyD639/nz8olE6MZQ0ZZFKSyzz4emy62WtAoOqb75K6SsLfdSMZFmk= 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=r21O2EBG; arc=none smtp.client-ip=209.85.221.47 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="r21O2EBG" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-480001972b8so619036f8f.2 for ; Fri, 28 Aug 2026 09:15:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933708; x=1788538508; 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=2/Z0cnaeaBdqm8px1bR7dodj1ScgQOWcRfeLIXj+wSQ=; b=r21O2EBGZjHGNgjqx4UYfUg3GnrXV9mUa01fpFTRdXhOCRKyV/Y7BOtnKDkoRGwGGl zBJNVHg9lFA8gjAoFKXiWikdPMV7Va4ePZRzwZIRJfwxH9pLbuw4mSzx6zakZhHiIEkU pAs/MJw4eS/HbnmaXXYEbat/U950U37VK8tNGfEOKwQkA5r65r6T0riA4YOgvH4KUWM6 mDQyUnhZPTwSJb+T+5WW8hwOCTTve7rcuEvMp2xm6g5My+FLCkKufHV+RUI8gnUAvm64 +F4IPoQxJ7y23GQBOkI11DxWJ5hp7f3pR4YosqEQFcCXlts3ApGaU+ko8qHXGmRPFOOh APDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933708; x=1788538508; 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=2/Z0cnaeaBdqm8px1bR7dodj1ScgQOWcRfeLIXj+wSQ=; b=JpUsjFlhvheV1jS2IOhn97APAkTQQdUiMUPzRA2FBFOXfHqDxlDBEkEJS7zEGj0Tfa pnMUm0yTYsNwxPU+q37BV7/TwBOKIdWpd5AWUK3bXvF6vsOk4djgmGe980uj4Sot6WKx L3ECXpXUFbh5a2rp0cJTXvQYTukelZJfoPJ07j+tApWf0vb5AxnDO4/GBZM+RisKLbqf NsDoTWvX2iJBDxsmzR3HZFerIjR3FGWyoVvy2AlelOpMeYa+UQeYjvZKyjjnO3BXkVdW m4mBoHMDYkzZ24PeqI1p8mXVSycPbaF6mEte0T3T+9pqN8WzBgqb8su6dUolR94OcdT2 Us8A== X-Forwarded-Encrypted: i=1; AHgh+RrvGIP7y7BBAtTTlUG7vK30c+Un4/ISM++ccFtU9d/O9F3lAi9LqwK7nkv7epFXiZoavM4qqbdWuNqYr0A=@vger.kernel.org X-Gm-Message-State: AFuF++lJWcscE9VY/K6KpWRNaCtGUkbqUzTfVf0uDj/BZiSLcz47hx3v CKviKZqX77KD7HstgC15rr3gO5Z+NhBP1dsDyUnXV3dsKJnBm6jkFYQF X-Gm-Gg: AR+sD11eF2WtTMDifbk/SnUc3x8FaJTVftM8miwBWHclG6mh/R1+Ib7u7gH1kamwt4/ LHDNhcAIZYvpM8RPNnInjGJsVbaOft45iIMuSZqZzOYXqrI+obhD+ySGA7mcPOD2cZZnXC1hdfK UT713MjN3wU3vDSwuadpKp7sDhMZiOwtV9m+wp0WU1YkA5f78KLJ3O2C/ISESGPDM1UDMwnv2y8 tUBZyKqyt6FtDID6zZtH++ciYiM29Fj8XZImT+Wafvoh2QmcgK6WrY73Yp8OKRe28MdYtefUWic PXevrbAddMPt6iG/nnKneY6LbxT9ZWfe7aI13UMdFnj66kuyIRlKxUYLUTwVR4mMl67rkdPr3I4 sQuTe32drLr4Y87QTcDs0L2VaEbuKvoGz3Z2MItVkp6TPotxZxLbqrI57k4GEa23FmabPQOCTR8 hXOvMcGE8wp+HkklnSjFgCsxos4b/8gLGm0N5C2HK8gOnluPrf7nkKxAbivrf1+jEx8g6knDUHe 0kfHV31tjYVCuWLxqhgPW6vxmIxoS1oBbbmkGvk7w== X-Received: by 2002:a05:6000:41d1:b0:47f:b51d:f0ec with SMTP id ffacd0b85a97d-482f79cd0d2mr14102631f8f.15.1787933708396; Fri, 28 Aug 2026 09:15:08 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:07 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 03/15] media: ov2740: Use C99 initializers for ACPI IDs Date: Fri, 28 Aug 2026 18:14:45 +0200 Message-ID: <938b7c91985b4bf4b20dc9722453c44a4917a31f.1787933456.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: Codex:gpt-5.6-sol 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 23:31:07 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C83F737F002 for ; Fri, 28 Aug 2026 16:15:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933714; cv=none; b=c3oN/WVX7KOFaBARXQJ7SEDFgw8boC1GOGR2yzROLFViwjwgPQJVDZvLzviRM7U4Y5XY1XNdj2EC9mapVqB0IJLLrZVjmqoXnZOWRQXwuxUsaegeQWLVWA/dabCE59cMEpPyz9CJnRvbiFNZvR99lK8CBetq9BafIEewvtlMnJo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933714; c=relaxed/simple; bh=GY/0GwAYKkdGCB2mGjNb9iNJ3uZoj4B7s9rKLLBlD0s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tMCzn5fAnLlufk35OL0iew5FjRMB+gSXAKBa/BUNb6GjFiHkzQzCnJbyfE3zAaumb1SntPgme3Yidmxq4FF6mlwfWfcCN3zifsFN3/uA3axSrZqQpszVPp854nlVgiRZLOzgFUc1Vsh+/wYczsn7DBexnpjAqpvj2YrNKMRt8bI= 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=Ap5BUqPz; arc=none smtp.client-ip=209.85.128.47 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="Ap5BUqPz" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-499ac87c92bso10289125e9.1 for ; Fri, 28 Aug 2026 09:15:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933711; x=1788538511; 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=Ap5BUqPz5lPNAQb916MwW5jA/j979IHnJu5nQ24b77gmDBrQPXNo2CXoz8A2b7z0aM /PJW40/wK6Gzt7hcRFJA+D65KZh3LDM0a3gA/VNKgwRvK/+IOOVgxql6e4Ftd5eorTZL Qf6+y/dDMNJBHy9PwfVxD8xK3WwjNWaiCxWTJgzTyRHAbSmIwmKn54J8RqgVC2ux0sD+ B01ZX4kZJa9YuSUwUr94i6UeovbmGt13FqyZDaFLixH8Qq9L7oGb/BvKsBduknbxYsjf 0mmNK3eIbkGWAQEsYh47e6nupSQHKB6kruq+fJUdFBTBv0bt+URrPZJKVbjEP04ac1yv HDNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933711; x=1788538511; 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=sX67E8l2+LHBOSXYZAcKabL3ul8Y16lvarUW9XRpuE9x2Yin/Bt7Ei+1cdSpQv6ufJ L5JwndKsx4eofhjtak/v8MNvO6H6yyaz6lA/IezTYnYh7OxKbdek8+62sv98B6YPd0un O9KQCoUKUFMcyZe8oz0CL8PC1Sp/eU6H5R4nn4bzr0sEhMgqfqaSqagHYnBalZxOxzoO NJ45GjOsPmlWC5yOcwSiBBvEWL6DTc8KwfEZacBQBzsFPZUD1+VjwWOWYuSvLTSkvx2o gKEX2f8MLa7hptdcxqdKEXlLon+YBtHb3tVmG1F1693FzGGn7+NdvK0LU75eGyLP8azE 5WeQ== X-Forwarded-Encrypted: i=1; AHgh+RqYqPKa9gEuI6pQbTpP9JD3ryxD249ti7oqGAI8Ye2kSqVwAli62ZYhLtEfpC3nIHpWKWh7u9IRMrvssww=@vger.kernel.org X-Gm-Message-State: AFuF++kCMaHgqhv+jTH3/5dkBiwd/JqLfhOr5YpS7Ey6vHdFDRGPojqf HSzdLR1Whr9Jse+w+mlNeocowSES14H9nlpzHakqy3EOp3bsYa9OzY8G X-Gm-Gg: AR+sD12PwKa6BpCh3AQcgU+4Nb1Yw0esQ5I8N5PnfE0GdXizUeRA40hkvv0zRYnh3CP 7Yc/SoilKYTDaCpm0sNvNd2pF2Ro7i5gjeFVvTMsxwZKgFIbYPttP9RTYau6ZoFy5uR7MD4EgWU Yrq2JCjSOpcKJ+Fc4N5nWWfO9WKxZvQbEjBJ9af+nQuizVumkPARpPZRMqxacPfN/ZYYbrdUQ+5 +LHppOAFROkAXCwJExen/msPMUcjd/FNt5C4bJB5XXFL6didazKajSaL3PJUyVzPD6NBGi/3SYc OojIIaYxBwvugJbkO3AvmXM8pp6fa1ehaw00ey9ZoKHCHjarkSsF0MCaO7gGKWYj6lUHbYUnT0Z 6Dr+ZciPGf56rR9mI55rrk14RgqmGBYJN0DiublKIz3WjmsgFn0F7VfVjePKF7toKreRC90ZofH xLM2IK19e4I/5ckYpQ1ApZXK3iXlPX04SJL4iyyN2ws7Bp7NN8gfywqJ8MslIwrN2gd+1Q4su69 sJraQXUP76NpQ8LgQ5Et1to8X3o8siWB9+oG/N6Sw== X-Received: by 2002:a05:600c:1c0d:b0:499:a5fc:207e with SMTP id 5b1f17b1804b1-49b91c338dcmr143772225e9.8.1787933710585; Fri, 28 Aug 2026 09:15:10 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:10 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 04/15] media: ov2740: Add OVTI2740 ACPI ID Date: Fri, 28 Aug 2026 18:14:46 +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" 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 23:31:07 2026 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.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 9E8313947B5 for ; Fri, 28 Aug 2026 16:15:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933716; cv=none; b=Mu904G1f/fDlBgIpLVM1vpX3WtpAY5WT/jOks32yS6rRzNY2+qyt0FnzRYL7K5EHtFB+YJGti7UlEnHtAG8XNAi3lxyfdsJw72FpHV0o0tV2OKxa2TzkRHRu2oXeHhxQ8wKTtuZ/2TK53lBWbItztNlTLbipbFfW4ohheEbQivA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933716; c=relaxed/simple; bh=v7juixLQwrF7KDdp/S9iL2tx/5gjSGtziv38EJOHhcs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r5CQaZb4Cwx5LK8pvo5un4YSsxtJYcOdbEWXAuBjvgr8hFmGwADD5Er/FK8YaPwLpgmhpcOWAsXJEQiaZ15+zhohA06+31+mCNKFi/5qXc3RpLfeE7otk3pE3s0h7Q4+WdzWiPUzyHG8FLuGo14GHXb/Fntz3UTyUTaeMTfhNzU= 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=kh4lteBR; arc=none smtp.client-ip=209.85.221.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="kh4lteBR" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-482e2904915so841064f8f.0 for ; Fri, 28 Aug 2026 09:15:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933713; x=1788538513; 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=BvPJGHIKC1eJmheE+blqXkJ54XPQu26+LTbYDPnFGgY=; b=kh4lteBREe8TiVBZg9osq9XwkvOppEuuvp+sSag0gGON81Who3qbmkqJ/OWJo0vubv hX3Ioe2VZdlPGj1u0VNMz3uD3nUvIrP5aPRZ/hGAyAtUExXkeexVuNUJ72xd/B1jYZ2l I1j+JNsNCa/khUH7lJWUPs+DQUnHOjuO+7OmpMHCDbQQyzm4BwTMmnENeKXYD++mPmj1 zQqIXq2EG0sysQvCVXmVKQS2T/TEwexY0Ye2/Jwjpj0N2uzGb5F5dmJJuPz1uzXIOjIo B5NQGNwStbDiJRGVj310K3nFcdhQwMJ+h+JizVKuQkk7dPajMqNXMLuOD/O4RXoLr8zK t1bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933713; x=1788538513; 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=BvPJGHIKC1eJmheE+blqXkJ54XPQu26+LTbYDPnFGgY=; b=bVD7383v3ttRKxe/7k+PGjt4bwIB5wFGDBmPHSao0S3rzA+kT8YvSMYAjlWO0n4xCC UfvbQ498vLS2HFNf07mwtMMbTP43m9FLO9wHS3eIvYE+qSiNKCu7b99l4LHhVTI4wrZq ILep53uO2kDeY9e2Fyx88bDjaXIpHznJQEBYnKfmYhHKA9tqq7pWVzU6yifV2MvloWAi k880iw4ndlmDQ5DiR/a/if6DmBZfCSpG51MORhOra3czYN+spDUz/TTBWIjPI1Do+DbC ELSXD6atqhw5HQ9KByTBqWUdZ/YDpPDvPiWxgomnVZsdLggVOR4nPMtH6eImI9dhnFwC wfHw== X-Forwarded-Encrypted: i=1; AHgh+RrKe6TQ4m3mqS21lhzLCPIjdZCTb7J2do3ZyKSdA0En8/Eq5TTIyeAfpnvf2D0BK/F81N2owPIDNm1pSdk=@vger.kernel.org X-Gm-Message-State: AFuF++kZZuWJNTNYYrKm28pdk986TD5b4bEREh/JOpVwy7C00g9PMZNT ZqwXHJhH6ex5KEnHcbSHgvEdRmucSMhnS6dkd3NW9c1uoM2qNry3VCd1 X-Gm-Gg: AR+sD12QDh0D6StdAb3ZC5EuvwqXXJOBIbLiYZX9duROoM3B1glgW8W8+4t6goGr9zG HM8NmlNZE+gq6zXD4gFZCUydgo4REQ9yWBxVJ+8x3P9ZTjrYw/ggEMs+3dStS5AW0E7iHrsY8q5 Fmz2vAMvZNYWidhMDbEsP0ZwtSF54psv1xYt43F2Q6p3hNiuOEKOzCi455X9h2bwOys1A9GIaxH vbk4JxA9gxiUIUkR4NpYYHykAljPNlX9qacbzdzGwvmRc/IygSx9W0hGICe/nAP7swdQYbxV/AG XgbFUPSbCREXadl1LvtJObdaPMTzJdBGMSV1KJ9zO9ErvvH3ZMObfsXcTf9DtjowZu0OGJQfQCM dQrqYBcAwe6cogxYcJQm85SJhD1S3YTIk7hEHLCHSGr53N9jiirbH7/QCZnxk6VUG45D9xexp2z BnGI2BPlR8ZFH2aB8e4GxWsPOlLeQLr50Mg94Hxb18HASo3FjtQjba8KcMjITw54CdjznbqT1IO X46b7dqks4KruO4L6BY9/f9CoEZfDEaNsA2Gs5LHqcU6sBfbB04JA== X-Received: by 2002:a05:6000:18a1:b0:482:bf78:300a with SMTP id ffacd0b85a97d-482f79c78abmr14393256f8f.17.1787933712863; Fri, 28 Aug 2026 09:15:12 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:12 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 05/15] media: ov8858: Add INT3477 ACPI ID Date: Fri, 28 Aug 2026 18:14:47 +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" 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 9b3e6eaca665..332625e19142 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 @@ -2088,6 +2089,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 */ }, @@ -2098,6 +2105,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 23:31:07 2026 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B701D395AFA for ; Fri, 28 Aug 2026 16:15:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933718; cv=none; b=TX3chuHdI1J56lv5GcrzDNBAbu4n0vkwQ7ao7wsALgkqk8fASnDRcgFSC/9IxEdsdfKMmNSsWsc+ORF/c9tIMsD3ExEAvnSx3wCM8Q4zuGVnO10qNUSUZLrqa2QRB+Wnv/xrZ1yxy7oqf7OGlwIJS8b0i/L79pg1fTE0VVC2AjQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933718; c=relaxed/simple; bh=s55Ii6QEsvGG1AvHe17eNCXjO9Ihg5gS51wo2byNVTg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XvMBryYXWPZ0/DzzzOndOYhISVioCJmfaKEUZaLbli4vNLKXhfXkZNP0+rfogO5iDzdIyu7BaExEMN6ehZMKCFW+8QsiZxtj3I7/2da6EbI+jDHB9+0JXdQ4SifmA3A4sCX/TPBxJzyMESE+Oh5dsWcF85oLKAxyL66lq0or0r8= 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=aedxISqV; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aedxISqV" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-47fd4531020so659804f8f.3 for ; Fri, 28 Aug 2026 09:15:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933715; x=1788538515; 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=+2BPxcfXD6mUVU6jhTybUN7wv/xdZ8rSO2UHVcgmlHg=; b=aedxISqVpS+pC57LZB7dmiXtGX/IIah4W7huwcelL0msHfNLgoNCXtDYNavgfXVROc WdsL+nhgifb2CMafViZ4SUc71ijtj+iY1yXrvXtephnTKpnF+D92Ahm3UujYXtVb3STT HUrDMl/JmG2kUCImbscT9j/mBIzngTNlR4xyCpNknAlTX2LviGlIfNHDdiwPy7lwBRZV F1Nz1Y7KbTjpbrGXWDeo0eREs2I32FrX8EaugW8KR2GDKua5/YITzCLQacwivgjwqy89 5GaCVsQYgBfrCKS95jClpQJX4dCCNQnCOHooWZZ5BgA2TlklV6qGXN5Oymt93FvomdGs iEBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933715; x=1788538515; 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=+2BPxcfXD6mUVU6jhTybUN7wv/xdZ8rSO2UHVcgmlHg=; b=P18Z8wtfkQN2Z9vDwKCi2i4l82TYt2tnGJeIeKZkhD4drMkdqHxoWN7OC19nSS9TfC e+7sabfrghfZ+7Iubhf8S0ToacuCWNNc1LChugTq/qQxHLh9+vGlmNSVdxXDwPj/63ki JJW+3Bd94U4ArU1BFDWwt7M4fFnbht3vsOxP6QXdGTd8YJA7cWl5usclPCb4rXLrwnY5 yB0ELJskxmCzmuhdar8mtU60fnjyLNtKdIBOMpYSlOhbQ8z7cvNKm6RTsdxXHgAyr74l +1BBwepD/wY201D+K9ZBKT+zMAIuahuDh/PQ6b96bKFXG5prcHqsE0VWc7LdMG+p1zZH fC/Q== X-Forwarded-Encrypted: i=1; AHgh+RpjoiX56WxX3MGuaGp1PYdbjlVyjWm1KCA1tbDMiG20gF2SxhBYGboqRuxp3JNN9ZS5YaApDBCs6Np0niw=@vger.kernel.org X-Gm-Message-State: AFuF++nlVwaxqhjNiOdNcWW/jQdv3S/U84kWMiSurDeUgaUgcQtUX0b1 ZyrcuCtCUIHsjyVjzXue/o9oPe9iP9hKZ9E8lctdeNpVyAOdwZZWkmWi X-Gm-Gg: AR+sD10Q+rFWdTUgsq+OMv6/nLtu4jr91YzrnDLbQvs/BpJDTHPi6vgw6SJ/kcIkj+g w7SUHlXKTYoVYtrAATjxU5IsKpUWZ19uK15owKdGFfYkNJWQoFBzK9VUn6Of3jr/OYwaJqJp00l gli+eKjnAjKC4M6cqQobRsEOSGO+rskVLDiK3vfrt4g5Gh3E/W7+A8anU5pIZ1u8gxC1lVqj2fx gP/44LrhfOicuEZlJUODjrAHdoBEgjJypCWoaV9mNiyMwsnAaFeGiV3sVHx9uTsEcnWk2yO7biu ksDH24qlpn5X4yedbMsJmEPPRB5w7s0Z6ivplmS5FxrOaYdGSyHLvCc0WAG8wCmN+TeuRigmOSm DvKryaW1sTAmv75JEcyn84sm0DvokW4eGOSZT0RrQ3zZhNwZJ9E9ej+5xhHQdqH2vjEWh0o4P+p 3t57B/tkxNYSChpIFFcaREOF3iu1F9dd7Fos4WlfJgSCXg7c0zK1Hzy5G23Xrf+QEjd2WCjGd6B KDpFlXrlktXbfhs+GjUSnDZOzp2zerwmE8q4JJPRQ== X-Received: by 2002:a05:6000:653:b0:482:eadd:174a with SMTP id ffacd0b85a97d-482f79c941cmr12152664f8f.17.1787933714909; Fri, 28 Aug 2026 09:15:14 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:14 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 06/15] media: intel: ipu-bridge: Add Yoga Book camera sensors Date: Fri, 28 Aug 2026 18:14:48 +0200 Message-ID: <9b618d8076337f8129e235313cce90d86f95fc4c.1787933456.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 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: Codex:gpt-5.6-sol 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 23:31:07 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 270563A9D95 for ; Fri, 28 Aug 2026 16:15:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933720; cv=none; b=oQK5zglG/88TCcO1tZM6eBFgNmRMYacAAbti1d0XkUGwcudSQlQfRB/6RvhKxuNDiRmxmkzfxMKUGkNuwHT0B1XSU+8I41/T23y9BNYcgeTFCKagih9FANa34Ghvy4noPnOYn7c8vdMeNju8lDL1DL7tVuStknHYCXr5pmsC8Jw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933720; c=relaxed/simple; bh=Wq5pAafYhnlX+730hO8eGZFTr6gc1skehnTfelhN2Oo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Bhsvm3t/8h8/UR5F5jvgw7Bs7W+XYFXDVVDBp+WVUzdtv6JHudYhM7UxN6VMc0pMljb+s+PZ11e5V3MSu3nU+NPPH1tp7K8KEQhbi0WflF/2FDQXBsiMTCEINC0AOXryPqJEZ5yuxGn6Yb+LRjGh6g1y/xd9c+BNLZPwNL9m7k8= 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=cWNRe75G; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cWNRe75G" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-47fecbb7000so421481f8f.2 for ; Fri, 28 Aug 2026 09:15:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933717; x=1788538517; 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=cnTmJHQexdV5oBlAiHI8qAl8iNKOtPsWh1YaKqj289g=; b=cWNRe75GS3g5sUM8VERlRuPX4pv7UhB5gMHKNtui5a+oKkAri+2fYKehGASZKIlz5S xTFjUyv/KUUaucjpszT1NdC4oFuhfUFhzVaQ0jaNJhBeRt3PFrU5jGQsHI00wluzWsaJ icFa5Nohsh9fN1c3xXY6jcCX7AbW4ire8bNGPYbovyJupR4ajgL7OvKm+oW4FI1a65wf rpJpNAyXewUtMMJdY3RqmxzHKpzgCYMriMiqBuPqzQQEXSbIZ71L8WpqxCQV1VmJ8aJe 20wwojEWug7NpWJjY29iBmMgIo37kX1eCtKefsmZtJGhPhFVsV59NqoM5JZaL8hSlIjp cHig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933717; x=1788538517; 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=cnTmJHQexdV5oBlAiHI8qAl8iNKOtPsWh1YaKqj289g=; b=e3yR9tydMAuczT3/YfyGn3iYc8ORcYEEuL5E/48zLAZg5IxEUQcrZc+MrDZu/IAZqy sbXIltey9D8aa7RRH8xLlk7eG5bNy/7eYjlen9chsR4t5qgh4xBmVA8cU0AOVDlod4AU yfkbwqbiK1kRHtLozcpmDKA0Tx1u2UUNE40oE6MTZ+7/IrMPHpg2syrMeqOJYhyD3Vq1 H3V0PwpdAcpugcrsmT2+ATNzXEnTrM7SjyEHF6mwdwUqlXHRI/AvjSGBYrRDNc9k2gTW VyMN2DUXYogl9Au40FL3DSa9rJy/Swy0vQcd1FB4p6RStmzZ6S+m3lAacVDJIchKO5PY xlYA== X-Forwarded-Encrypted: i=1; AHgh+Rqm/ll4M7xjt0hje7sIv1bzAY/uEfjxb8ljRa3WMxsXLFukNCtZThHWDa0ga2qt/j1cMZkfza5OUUijuRc=@vger.kernel.org X-Gm-Message-State: AFuF++nD1SeNQ6aoMGiTwDiJmbglqinXIiT+5vCGaEjjAVo9bUeuGpe0 D690DCNYS0/8tcBeUbd6eLbt7/e3pPgxER4SiGOS5Y0Ww3K9jNJs9BRd X-Gm-Gg: AR+sD13/Pz9lR1Acc1N/JztqvJ0lmk+iJQLB36tUAEW2jpAN4SELFNW6miroCMiERZH 3td/wBxsfClArrbNWoc49hZCs0l6ns0qMT1GxW3ROYx8ngfLndMpkKnjZCxxeOKwnM5y0bYWuKg nd11wEQTJGM9Aeg/gGD4jmDZxgQgD2skCaohMZ621J8dBgeTeEr/mzRL5ro3Khapsr/dGlwX1M5 KapIq7E378pynJCzOfKO4uRkjklxEdD2d8sfmdBxa3jlBfCUoGvPKS5ucByl3R0NIOuRJ/pKY41 Ea3koFvF+MJuhP4YbqC/ZAYDEvBwYqcVYKZKos0c4xd4Cufxo2HyaBqWgmjyL1uLbxFAxbg/9Hx BEjJYDgjMrEzfL1QvqPRhkdfR7iK/iF+tkHXomXaYtL4E3LM27yt66r5QrQnnVfvQA1GaTfAjnL Wn4wpIqOT8mZUSr+tBpFRxDaDVjRUt4xOCUYjwGdFNrGCHLa3tzrI1PXbcWqcMvtpQqCOnxSDGo jFxIFDDiDCa+7Ct7dTMWPuj9ApntUoIoCVtauNGCw== X-Received: by 2002:a05:6000:653:b0:482:fa3b:fab2 with SMTP id ffacd0b85a97d-482fa3bfcd5mr10965461f8f.19.1787933717144; Fri, 28 Aug 2026 09:15:17 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:16 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 07/15] media: atomisp: Add Yoga Book camera configuration Date: Fri, 28 Aug 2026 18:14:49 +0200 Message-ID: <445158bc6dd99ea11806d68b6d1873a2d0bfdd92.1787933456.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. Link: https://lore.kernel.org/linux-media/apFzAc5XfV9gQpXS@kekkonen.localdo= main/ Signed-off-by: Maurizio Casciano Assisted-by: Codex:gpt-5.6-sol 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 23:31:07 2026 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.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 1BA4D3ACA43 for ; Fri, 28 Aug 2026 16:15:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933722; cv=none; b=gK2PcXX/v/1Ze0M9ZKiPuDlsVSH24ywLu3T+SqKBM9Yr/+C35J4F9hvZumdIytFNKeTS9uAjMbYHQR9Gl1snK+4ODAvBYAliV6kQEMQ94pG/9KIpefbEZbBiwd2sT3cVXjLWyHlaC3/G/o4L0g9xWUtBnxu1GNdkf1JKQyqjAh8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933722; c=relaxed/simple; bh=iCYX+cUaCtQ4bN3ALteiERNIDMz9F+FipYW2g2utSpA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oPeBw8rzX7zTr1OP20cGuDTeEkpwbpIj/xaAhIlKIUDCVKy8cIP+5OB8pOlRTWDJ0lOipEphTP9UCcGg2dmm9gnQEZB20jj+6jwj9R8R/yRonb4ItW84MnMqXPxSNNkVK77+TliF2yO05BPhVfujiR5nO6SHMg8ZQPJJtQ2qgZs= 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=WPr2uaLi; arc=none smtp.client-ip=209.85.221.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="WPr2uaLi" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-47fd4531020so659851f8f.3 for ; Fri, 28 Aug 2026 09:15:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933719; x=1788538519; 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=VQLeqh8HcDgzW1atthmYStR7xCvFnxlRC6GnRW5zm60=; b=WPr2uaLi3pn4JgxjWSiMEbSe8RYEQG0v28uw7QFwWS+G88dUsD6sZI0iN8sqjKEWFP sU7zKKNjWY7jxI3ZpkuD/h/I/YUnd+zxJTDPobPh9EcgOinYyKaDGpeKWs57WY+/49fJ dUUoGUkUZdBReeJwVPQRW+L4IESYOJpEflxUC28Pux1SJ7y0Ag2jHyXEfbGEShzWgqj8 ZRfxSFCubigdxAcUv8XAD6H4SvN3qmZRs6avEwb3rXHmcH8t4qeWrNc3+Vy3d2HXE/kh oVFPm+uSN5siihg3WzOldQOzaOQ5VZq+rg5Oh7ONZXwlRsEHJ764o/+CMaF6VD/9W/By g2wQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933719; x=1788538519; 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=VQLeqh8HcDgzW1atthmYStR7xCvFnxlRC6GnRW5zm60=; b=GTqHMYaaCTKvmzPO2VCzHYthzYokqWkXU1qdW+eaXTHxiCamWUkdaqWb8nEuUDbCjb Yd6MG3uGRrf/6lK70QXSFaEJJAbxQ3u2Y93bB6i/HHgDHR7jS8DFLS+HGB8TlRk5H4N3 D3Z/8T7b92xRFcFdoo0KA4fvkrG4ogzumvi6hc1oFCdQiJIcLwoCU8jEwuGMVkLfVLeL Dv0wKORf6lSiHEzxMM52i4zGXwUDzr3jAcIRarKAx/XTFqqvfylMSByawZuubBwYBglN CPmjpiX1gcLLOyYLHqkeBPmPv338Flfh0Z+C+887/cnI2dGy1cTehsP77wMz7wMZeNM1 Xz+A== X-Forwarded-Encrypted: i=1; AHgh+RpYVgd4dhQstle2hzyoCH1aOLfOnHv1DXm7dcV9PuVr2oUq/Z2uTq5l6BJhsNq9/9zb4gRATYHzS6rk9dc=@vger.kernel.org X-Gm-Message-State: AFuF++mpLJdHfakxrr6MEEk43oq2cUkjTDKQJGKNyYxgyS1E2m8A31Th VO+sJbgY0/gEDBLk8AQ2OEboASIgTXooTuOEOTIwXBjrB0R1QZcjPbElres0wqHu X-Gm-Gg: AR+sD12ntPF7TzXLmaZBiKCypjp94tFbRVkwITzJdeD/3h4PIn+JaVRKZg9b9i4G1jk mpzX1teptn4vUQIft2fQLRxG8TxoOE9EKihtcAQIacBnwd3vMPTyC823DQyzusm1cLjK5tSzOYM T05dczH/dtXSKifLPhmpDvNfWLcNki8Av3Av6EYBjx0cFt2Si83uQ4G58/DHo6HygmG7QyLzocW aeoFGo1jmU5jJUXUMy8LAQFUFzyQvCA33v4uW/8jWc5THlgfxZr5VMT8dMStgUpCGH3rwJ9gQZe wfK2Du0DHl0V9EF/6ltbCGocxLIYKPSlZTHheh0WOOSVLd4hVLK/w72pRVRhyQS+oV8nCklaEaV nDqRB4IJIPvDG6Wik+Mw6GSd7ZR5f6Wd2sccw5I0CkxDIAs18s37qDMNrsIyr9iBFlHmTMq1NL5 zfXCz1CoqQKQtxM8yDyKYPOukdEqHGGLv7Zaiu1HKUqDh6ezkFovewQPCghlPSWP+qgG9+n9Ta2 3XOpKetXxEW0+0uQaO8amSjSzQ11EN0RFmRYG6IXQ== X-Received: by 2002:a05:6000:481a:b0:47f:f43e:f0cd with SMTP id ffacd0b85a97d-482f7977a45mr13716275f8f.4.1787933719359; Fri, 28 Aug 2026 09:15:19 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:19 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 08/15] media: ov2740: support 288 MHz link frequency Date: Fri, 28 Aug 2026 18:14:50 +0200 Message-ID: <8ad0d4958d140486e69c05e55865df49e55cd5b9.1787933456.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 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. Link: https://lore.kernel.org/linux-media/apFzAc5XfV9gQpXS@kekkonen.localdo= main/ Link: https://lore.kernel.org/linux-media/apF0Cds9fnqQ7XRg@kekkonen.localdo= main/ Signed-off-by: Maurizio Casciano Assisted-by: Codex:gpt-5.6-sol sparse --- drivers/media/i2c/ov2740.c | 45 +++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index 18bb3ac9701f..c67fcbad5bdb 100644 --- a/drivers/media/i2c/ov2740.c +++ b/drivers/media/i2c/ov2740.c @@ -12,14 +12,16 @@ #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_MCLK (192 * HZ_PER_MHZ / 10) #define OV2740_DATA_LANES 2 #define OV2740_RGB_DEPTH 10 =20 @@ -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 23:31:07 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A2D683890F6 for ; Fri, 28 Aug 2026 16:15:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933725; cv=none; b=HqMciIl4/Km1qNWOpYi8UpBsLV2jGSXbcBTZkOv7rblO6vSe+ebwWawqHKEMU2SUNA2eVhPqpHEfzyxOSFEauDDZtd4072TPOOeKZuvYRKl/4YbQHA1LQeplOLo6B1W3x94Wv7v70/iQHrWVZqITGgwUk0TBMoHF8yCxt2D3RKs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933725; c=relaxed/simple; bh=lqjQ+w4LmrSC2rxWGQiBGYQWVk3GIrLSHHgwOec02E4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oY9/RBPn9qblwgMhjBdXkvQWN9hUAiGWrl1VyrCIxB17g7ikmT5XEUYg78yL8v4FP+RTDXr4V0zfZYBwABEIkXeU9O4xVzAqh8ClQSCRjjWm9FSzDVVvHdZ+Jl/QsLbb19FTUtD/zs7vgbCQrQ4GRMB1hhTWf03lL/C8ABeoUdk= 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=Hn/rbiGr; arc=none smtp.client-ip=209.85.221.47 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="Hn/rbiGr" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-47f633e6058so751678f8f.0 for ; Fri, 28 Aug 2026 09:15:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933722; x=1788538522; 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=vflBT2anqt8KmrCKKgDiK1zs1+RPR9HYzjd6nQjWsXE=; b=Hn/rbiGrvxscMTiAIc+bRI8lQia1v10ozZyY6Td89t7TEPDN+g8YkGlwHRFS2w7G3k eD/HUJCY0OuMrk8+hYuVSTH7bnCWnvR5p+3huIb8o5EVHJAju9BwVP6vBz3jNdK3eyFz fOc/2FqXYB7XQFRNsf7ydG+t91Z7BpEBMkLXRknib7fdYKiXspksIMghg+wOG6eQdQjO /HlWMuWjTUG1x+TfBHF70V7ufLU/qHwo9/mTiPHGCDjQ3Qmx2E7XIwDoTWSBRXKHHdUF mSdsyxKz/f74galT4eBNUfCM9n5hBdzovXu7bZeF2NENibtJJG41IjGyL6cW6SjNa479 BgIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933722; x=1788538522; 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=vflBT2anqt8KmrCKKgDiK1zs1+RPR9HYzjd6nQjWsXE=; b=nPSy5CXzkMDofB6icjWQpeR1+0hIjOxHB27e7+aKcs0cF+QTQJd2vE7XBD20HAkEPl sFadePa5Mw5id/BXQiAy40GQiZlELvwbGi0tebD4uCJfqmSOuwSCz9d9pml3J+xOybkr G56zoXnn2f/pL+MYIBZOB8jwcc2sE+HnGypb8ww/ii4/t9e3wF3qq7RszsSfAkXmYIqu xgMjbS5EmaeCZyEeGSzsdD8YTBqSeJLh5jUj5+JSiCzUQL4SjhBShAqyUCpEtQV8UUEg JJIIYeYOS4iJcOIhieZNxXG3aQ8sVNmNmdJqYQX1UEhuyzX7lflSAidZNZ5AzXlZ1b9d /i3w== X-Forwarded-Encrypted: i=1; AHgh+Rr7I4oWZWC+uzJBtid7QGobC9dV19yJyQziBnsCA75aaT52JyK7KY3wRDWZ/IVkZI4yOd9+7cO4nKdO46Y=@vger.kernel.org X-Gm-Message-State: AFuF++lGRWHCqkKOFtKdBlRcjBDb2aC0TrO0oOVxHuuJIXDWXoVJf5m+ AxMu8un12I9PMQZxt7m+sFwxMPLVeG2PDKYKLsNdovndJTD1NGD+yaMU X-Gm-Gg: AR+sD101AtxSHQ5QiDo47r0NObJ+3jBHwEPAW+3m0w4eFyMFhroLs2lcX9MlGl93ubz hwn2A9H9Um04oP+Oi6EJVL7rfuJLCp7yi8kmvwDCaepLQlRq258MBFduZ/PKz5SovTCAeKw3972 EmEdtB6SNESZLbWpr+pJQBE9x/9VI3FDo1AZPq9LKM8b643ECsH8HdDZ7iS1cY9rzKQYCgXisPt ca4jJYKt0UK+V2debDHUeiWs3eDWPIGh5QT3nBZvtFbnyeQXuZyUJ/p8ccIVRZgdv8SOedWPMC+ 4t4Nn/SxlWkv1/3KHMMF6BSGGFRgjSVIBuvYCPrG2WYB/dfsB6CUMRCzhWbQxWDEq1DE/XK5WgJ sB72Q4tzZ54cbQvC1vcsake6YypvgMrjCFSkHldn8SpWfqXqXSURLo8LqQKWG8uadxX8WC9IMZJ QiCMkIw8CZK8KAuW69/gcsj5KjF1xfhpaCcJHJDc2GvfKZRw6dQRXFqPyvOMudb83NYhVH9OmzG oWdEdaqWbnI/NqmnvUINwtQ3w2UxVwT0JwQPgoik6dm6OJK22zB X-Received: by 2002:a05:6000:2589:b0:47d:eedb:ee62 with SMTP id ffacd0b85a97d-482f79e0b63mr14136116f8f.14.1787933721654; Fri, 28 Aug 2026 09:15:21 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:21 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 09/15] media: intel: ipu-bridge: allow sensor-specific link frequencies Date: Fri, 28 Aug 2026 18:14:51 +0200 Message-ID: <2c2803b500ed244e59a98506c97eccc4f422cf7f.1787933456.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. Link: https://lore.kernel.org/linux-media/apFzAc5XfV9gQpXS@kekkonen.localdo= main/ Signed-off-by: Maurizio Casciano Assisted-by: Codex:gpt-5.6-sol sparse --- drivers/media/pci/intel/ipu-bridge.c | 15 ++++++++++----- include/media/ipu-bridge.h | 2 ++ 2 files changed, 12 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..2290a92361fe 100644 --- a/include/media/ipu-bridge.h +++ b/include/media/ipu-bridge.h @@ -135,10 +135,12 @@ struct ipu_sensor { =20 u8 link; u8 lanes; + u8 nr_link_freqs; u32 mclkspeed; u32 rotation; enum v4l2_fwnode_orientation orientation; const char *vcm_type; + u64 link_freqs[MAX_NUM_LINK_FREQS]; =20 struct ipu_property_names prop_names; struct property_entry ep_properties[5]; --=20 2.53.0 From nobody Sat Sep 26 23:31:07 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 06F5B379EE4 for ; Fri, 28 Aug 2026 16:15:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933727; cv=none; b=RxMkY45RkRTLnZOAL3WvR25yEgcQLPAknl8+6LSGbfKBBvOs4AdV/lXV2jEbQBv7NlNsnFMVudod7AeU0jsa5kywYhYC8J4CfBULlEyx3C3SfmC8KJcw1Mk49wrcEZKGLFHZZ1/a67cCK+PhZ0Gc1HeUS8oDLMzkdGGQk+UHJGI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933727; c=relaxed/simple; bh=C+ZAgqnl2tYmvrqVSgafzVk+7+RkB37GOiNqep4MzBY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=crcdY22I9e4Lxj/fEoHyH5m4itoYyLcppSfIMG/iQP3qzPTkjlAyRNf1skIHiB1BHpg7nlxR8Hhj/HqvZxgTYsauA3iatkOYDAHwmpol4jEGICbzD4XoefX6fqxUTnRBCXzUqlqMHo/3R+K/gT65fVxSEcV+YKslY6++2PSQ3iQ= 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=XE4Yfjkq; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XE4Yfjkq" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-47f93b2fe4cso552636f8f.0 for ; Fri, 28 Aug 2026 09:15:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933724; x=1788538524; 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=Y9MrXzKpC71U/GHMh7M3eLoSDCO6PB2t5OzTKrblmzs=; b=XE4YfjkqWRjiyC2lvjFB5H57si8qwzq/ToOFy9wshYvnYkRPoE87o0npiUcVyFa0vg GzUdufQ2JvplCCE/7ijVzhaMHFystQrLRrmInGVSwBbaa94NhUHI06gNfAqh2lxKcJ8R c2f3HGNZRFsIIMTdqM++LKmjlR8vvoTD1+ziC7EMs8VqfQdsly7Z83ymySVX6kA0eB1T kQ4NE9djOKSgDewc8SZ/v1rMxPPTT4nAjRjE+Kjn/a0dRaZ3WzVlRlWqZMfKoe/U4dMU giquhQ5exfGZ2iRVRPXKmO8NGZ6E4ReFYbhbs6rMnUS1P0LPU+Ln1Co/suBWrNgTpHFR Sm2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933724; x=1788538524; 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=Y9MrXzKpC71U/GHMh7M3eLoSDCO6PB2t5OzTKrblmzs=; b=gViuGi9K8qekqPZq89ET7Fopg+1heorcFVcfc849IeSXWPB73CiZOV+BaMA+NH/4JL 9CjjUMMZ9Ve2APxGpIvCBcTUN2DVjG9lBW6HbTw7j4RL7BgmewNR9ex4lQIBsEJUGuVA 7wpnmr1qQjnFghEuyUJ1ttbNIwG7d9moTLKeHNia6E8rzLtkm4r2jpQemnmJC4waFnYm Rca6oRuoPkeovtAG7zHvJYUoQCf67IhLGl8HRY/+zfNzNlgk2/nr+Tn3Mqstv6IrYXv9 O6yc96hV3WOnM2QXCEN7KV8ME+W0McQBV74ga84Wm/rLR90YhGlY3USl8oVO1arzLhp/ x10w== X-Forwarded-Encrypted: i=1; AHgh+RriZoYamK5kHV2h/xcRYXR0zAc/KpDIpwYCz15jLcoD4SSPLZ5WE+BSeEtPlYHleNPAU/3AHCYZfQfjAHE=@vger.kernel.org X-Gm-Message-State: AFuF++ld1Ug0sI3GCVUTtnLS0LpT9efLJZrUmt4K4UvRPz5HblpYXCPS hZkYye4ybEjO6ZcZZp0BmtGoNzjVM3TLAePuz02IURZnoP7RUv7DyXBQ X-Gm-Gg: AR+sD10qSypKWH5n03oQfOvviVHs+c9wQIbk+W8DwS3+IDd0pGB3tqEdQp2wCn2F6LO cRn5MIR6SYVta5fw6CcEzaHXPM9D7m9W0AY4GpdyC8nlC8nFOrf9MgKj+1uaZVsNhCE/rMFepon QSyOP4DGHTWI6DuaRgAsIdh+DPrRaOOpyX70zaDciDim/CNk//dxoE82ZcNFIVUIXlwb/1qqrED dM9bT9wkjb50IZs3rBbB5oLN1dZYxmnxwn+u7SPBndRkxtqWRH6I6x7QfdwYpb43yu5iTXnn/OJ qFdwiVeTssUpKcC2C7NnXaePP0097sWkbGJgcEWNbpqRXZQoU9RM1ANxA4WXc+4OwGGX7GscQq3 n5eqUq0KW3Sue/ps1ceDgKwaYXygV7YSIScbLI+nSWObgQAnlD/vid7WdO89OCqiScU3ZFyyZUi mM0nqpDBuRawMIxWAEU1bpPvfvjv7BYmzoN3DHjSPbeXWEm3a/74H/J68ChcdGPFPGH7a/lQCtK yq8ybdlqhOHM3tXk1vAziAHej5U/wNfNYTc6lBnVQ== X-Received: by 2002:a05:6000:18af:b0:482:9dc6:16c4 with SMTP id ffacd0b85a97d-482f798ba02mr14832982f8f.1.1787933724077; Fri, 28 Aug 2026 09:15:24 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:23 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 10/15] media: atomisp: derive CSI-2 timing from sensor link frequency Date: Fri, 28 Aug 2026 18:14:52 +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 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. Link: https://lore.kernel.org/linux-media/apFzAc5XfV9gQpXS@kekkonen.localdo= main/ Signed-off-by: Maurizio Casciano Assisted-by: Codex:gpt-5.6-sol 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..6c17b37350f6 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; + struct v4l2_subdev *sensor; + s64 mipi_freq; enum atomisp_camera_port port; 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 23:31:07 2026 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2507143CE6D for ; Fri, 28 Aug 2026 16:15:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933729; cv=none; b=ZO1+rj1NNKa+EnfXIDln1QQBdd3KYbQLVfurIBLHg5ibRClUKhRPcf5aahY81alxmuZtUjxXjpZ0DfQDe4WckJdKZodypfIg5PuprWX7dE0gsSYlEpzU3Kol+rURRyST1LWI1FXGfUNBlauIua0fVoYmKis5GxJzclljwxjmdX8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933729; c=relaxed/simple; bh=usTXO+ZWlW2Te+ZHWe9NdViYSu6Lko1pNutdv/H6/Z0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nPtojKReTnNGPHqMFo8w8pa9hlln8uK88BzxrqdT3P5sEuCUXX1JAVriI/89UG6SXOPOTE3J3v0BtqOFHJRinsg0HPPhCA518U0SDQixpuQeERUjgsdVP2M91HzMPXtvzC2NHeat9XfYnGjnEiJV8yfvPHE/tGgpF/aYeB7+d0I= 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=PofSWGOP; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PofSWGOP" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-47f93b2fe4cso552655f8f.0 for ; Fri, 28 Aug 2026 09:15:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933726; x=1788538526; 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=xCuY6gGTBuVO+96rY+P61STsvhiDiQP17uO+QOQgni4=; b=PofSWGOPYIP03OdVYpVlzvWAKHxsXWHUxZGpuJ9vbh9jhhyR6bMHmEkbSHoHWnTfCg c5XMhL2Yv9BxFr/02gydkzlQI+NHL6RNHO8dUZeNqtu31IwscxbP8NeILCIBl3rRzJLO iFo+r2gKLe80vTLmsiaZbDS/LXismpM+kblXjPUHtVx5TjozdhKaA3hOSHYAAhYOGdzO 4DLXnSD9P984NoRRrgOZiqoEcNNgfDd0nhB3oYNGI9hNbBriDtusQFGRhFUG+7RzMIgx q8+x2l9PIUNvsvggOmdioHWfmEadrmvXbtERUylT3qWHXGXtj1ctHuJVtTnqLm/eyiFt Rwdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933726; x=1788538526; 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=xCuY6gGTBuVO+96rY+P61STsvhiDiQP17uO+QOQgni4=; b=DLehznXXGdXmfxf0ZWG00en89W6VebBvZjDi903Q/P8jagFj+l4C5iSNrqi8T0SzxB XWBe8iPLFgoaX+C2UOT4C1t93lkEvMpbM8pokwfsSNbvw8Twz3HVcgNsCwJKVRjP/VD1 kihr91Phrpi79LbNxuc9tT91KnBnXFaXZXgYb3cYsL/iczJaR3iEr9Sa/U4WdbffVWEj 2zk7PN3bro6tddsjzisqDJltK5FWv3fp3rOwKFfGnaE5BlF9eX+es6kazzoZdS6BJML6 VtwQ5YFjQ/yqO/pwrrHQYAJRlrI+o845OAzz17A3qfkai3uHsgGPITgULoymtHO5CTv4 J+pA== X-Forwarded-Encrypted: i=1; AHgh+RqixZKjyIBRztj+1MT2V6pwn03AeQXbJAQ3tewu1XX2ZPNIGKmHfAehyDKu59vBXfb9BZ/y8sl6V1IqNOY=@vger.kernel.org X-Gm-Message-State: AFuF++myOPHlE3+w+cFrhhNCrE4bxWybjCpDzW755RWsn0wF9ryQlhnI DDNQUOp0KfL9ItkVGZjln3gOZwxHEsqJLpotF5Dv+NpdD6EWGeuoKTwXxnSwF/KG X-Gm-Gg: AR+sD13HcDiAQR/Q/0HZMlw22h2Hn9HCIcMgQ4d8v4fJcZu+ShpkPokTk5AMs9Ib7mF jagURCLEp8bDuoTyeeyQ04MOcIwVOgla/w2icYUoa6mak1jxutYGxHt2rHyXzi0SfReLEUIeSLu kYdQxF71LxXOZl4ZLD+q1ngpStSANKm8sar+iB+/LiY/rBIZk41DZcY78svSL5qZkFjfx4jTnjQ 9Q2qjJ5+J/fQiWUpQCOLuoDD0ceKoNhIb1UCeAbFH1f7PhTHsrtMiQj2bI6KdyGR5NpWKoHR3LK MZQ+gH38wUasH7Exp1x+6gliL86wF0ku2hd/zyW+xkBTHErlVXVRbOtJocAhlSzUCXVBnJ3xnCU KLWJZj4dBMO8OOu8HQK/NkKkJXXI6UJQBGqaw49jXL9w2dPU7LEC8z8WQBzyKpy9SZ8rQWtLRFP UyY0o2mgo26ZMfawJZP+S1ePGpjRnVhHTo1lbXZIJQjxUAP+Jjwumr29Lq/zCbq+mxdNKEhdlpj 3tn7ahYv/NlX05jgScV1BYyEANe1IIC5s9kCaop/Q== X-Received: by 2002:a05:6000:2c12:b0:47f:80d1:be0a with SMTP id ffacd0b85a97d-482f79c7697mr12240100f8f.14.1787933726470; Fri, 28 Aug 2026 09:15:26 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:26 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 11/15] media: atomisp: provide Yoga Book OV2740 link frequency Date: Fri, 28 Aug 2026 18:14:53 +0200 Message-ID: <286ec3ad5ea72a769b5a30a086a4ca8b35268700.1787933456.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. Link: https://lore.kernel.org/linux-media/apFzAc5XfV9gQpXS@kekkonen.localdo= main/ Signed-off-by: Maurizio Casciano Assisted-by: Codex:gpt-5.6-sol 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 23:31:07 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 795A94534A7 for ; Fri, 28 Aug 2026 16:15:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933733; cv=none; b=afRR69qqpq674XWeEWnw27c7zZfkc6f1JaAH1q2/KdIHM1jWd4z5MFGWrjd+bW2O/AQheyq6kj84jCABP4eWHOX0JOG7UU44ABZt8YFwxkUyGv+JKJo0Sz2iOUu+EIAkgrc9qcJED7/DFR0r6yynqPDDblsj3IvwDhJRLCB8BV0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933733; c=relaxed/simple; bh=BODxtu22bMbCeaCPm4r8rZD3W2Qadd/rUd5ROI9uEaY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cip086BPI/I8QtmG854Z5w+6vVLp0Ak6C7JVDyk2fC1U3C8b7do/TosipSP4dp7PrAm2LLVF/57sEAFQ574LxnaNaHtIG2hXP64YTd1wxz/tasaSHAJjVM/IN/9xlyxDiENTF0FF32/B7Z8FRjOmZ7hyX3wk3OyzVVxkGp/HgZg= 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=NwJZcSsm; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NwJZcSsm" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-4815bce4652so905991f8f.1 for ; Fri, 28 Aug 2026 09:15:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933729; x=1788538529; 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=pCkwaqt6mT/Mgi3LcK6pYptNejEWdk/2Ric0vWmObaI=; b=NwJZcSsmuLytFiukC6ddgOt+GaEainfG9kfrdthYL635duk1+oOy9bCaTO3u/MAc+v vCe+BBeqM45lsFPPhbx1jf1UbByeH4bGkMs8s1srDUzJALEPLjFXnBBdYDZb2do/FuH3 EzpXhlBgU5LeJzBJU5cOOFzRt3kH5lCeu2ZpSa3Bmqr37h2e99yiP5QL835ILDeP/EIa RjRJXuZgOl+WcLQyseFiaQS4klKQ+m1TS6/4xglbf+vkr0LWCz3Sk0IKQmyBEAuTAeMB 7L+wSO8QV75jVNzFtAzJN7BYaCkCi0K7paRMhpczQqba+a1113Mf9zt+9cCeRh0mRZTb 8u9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933729; x=1788538529; 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=pCkwaqt6mT/Mgi3LcK6pYptNejEWdk/2Ric0vWmObaI=; b=l06C7lU10MZisQdb+0LoWa6O+1pOqraG/GcKz+B9X5K7rq3Ljb3JxlJ+LdSEk/bBQI QRWvODKikqmHmMy8SiQ1jFmwaHs9/+cl+CeFLFadjUCQMYQVShm0V0r4cwa//r2JHtSO j6wyLC/XaPti4AyIswTA8VEwSKbJIvfVgtJu5uIbDEzMfLQ4sir/a399EhzExdZosaXs LBvFjOZQ9Lvm9gmAmNWM0ZeFD2Dli01dbPk8iM4CV53l1bAMTrttoeW4dt8M/fVxmo3M rDnLKg4pCGEFPznJdU8mrCyhuQH+c2V8tJjv3ieSW4bbtzr+0bPmN8vzZ7Ai2gGVcBjV pEWA== X-Forwarded-Encrypted: i=1; AHgh+Rok5VQZ0Dat0Pz5Zd+wX+adMwOG9VF+k47GaWCvBwgnAGNw1owGzPvlZ/GPO4jfuP/cBfiy1H1W9wG+LpM=@vger.kernel.org X-Gm-Message-State: AFuF++kQ42eGv8bFjdi3zGQnLKc88xwX4alLNsdI2iiRYbPBjmq6t54h eOkYFXYW2yS8hCjzPWlCoFPaZ2w35gcWqeZiWqJhAQdjEEKJbx8wOV6t X-Gm-Gg: AR+sD11cha/tlnZVdmAJTsUoHBmRjCfYhH1sA77CGtXMMWeOS8mU62M05wcuPw0hciI HwhsF5Q9NGIasCuH0gMZ9p9FcdRAzwXUhCFipQ5pqzgaw1xUPL6Ho1/n19k5Av5C1ZYjfAe5Py0 uXkiPi7nfLMPkFmvpS489CJHgX+R/UH4gw34wID/MTEFgzs+EsL3O1D+4INMtkkC9WhxmlZx+Q1 TBSJ9FUOI4foiR8hazoaBaKH/iyT3YiwWslR078BFs4D+z68c+vy177yBygZQa5qzQyr6WwWbrC +pO4M/9jAMctQYQcwAkEHDpI7JfHAS9eaaq6jLRB015oOGTvDEl8yQFFp0nHMmduHkrf5oa1CF8 II9W68bpmL+dWi31AAagVQZPv3gJyROdN5AZuRu1GFSU3xEJ3G0e9Ti1Hz974BfE3HUsDdt74yO fIroHPIftM0fDREF2qh3Il/yy1CB3mDzJYi8PiOBA9RiHTOEePEmhGgxvuYUTipZV7R5mycUm7r pc57L7+DMa7R+jDfgN+n817dyPNusvcOZqG/rua7g== X-Received: by 2002:a5d:5d05:0:b0:482:e6ec:4ee9 with SMTP id ffacd0b85a97d-482f79947cfmr13628325f8f.7.1787933728667; Fri, 28 Aug 2026 09:15:28 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:28 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 12/15] media: ov2740: add manual white balance controls Date: Fri, 28 Aug 2026 18:14:54 +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 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, update all three channels under group hold, and always release and launch the group even when a channel write fails. Tested on the Yoga Book OV2740 with live gain changes and continuous raw capture. Signed-off-by: Maurizio Casciano Assisted-by: Codex:gpt-5.6-sol sparse --- drivers/media/i2c/ov2740.c | 65 ++++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index c67fcbad5bdb..c7f85c47bbd7 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,35 +697,41 @@ static int ov2740_identify_module(struct ov2740 *ov27= 40) return 0; } =20 -static int ov2740_update_digital_gain(struct ov2740 *ov2740, u32 d_gain) +static int ov2740_update_mwb_gains(struct ov2740 *ov2740) { - int ret; + 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, OV2740_GROUP_HOLD_START); 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) - 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; + 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 - 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) @@ -763,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: @@ -804,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 @@ -839,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 23:31:07 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E0A4045C709 for ; Fri, 28 Aug 2026 16:15:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933734; cv=none; b=psNoSPZh6kM2BY0CZmDYyy1ER2CQPD6GPEX+r4bedyrK+BzVdmfeJm+l038p4p0utgQm2y94RkwGAN3j9SZvvE5E8PinP3OzXd1X42iTzfeLTjXkG1XO2NplM2NaOHLq3eZ8NZjzqrurN1NxKiuCstvMSTaH3Vb615ok5XfqSxI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933734; c=relaxed/simple; bh=l6qatP/1SS7be0G2miVwTO4xWFBkzQQs/ILAgIcLmkE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nNbRZ8ho/9Pq8aYwdm09pwTtMoSv+Xb3Q1rB9pg+uWwzYXElhGL4agbNA7rLPW2PEUgc6aF+NVugkB3psDHGx3svDB3g9S+L8xJkwd4YreQJ4w1+Invfr4r3em3B2aLnqA2HFjQjZwuImVNxFiGs09S8XqCzha5aBDKxt6KMhp4= 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=CZ5Jetrp; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CZ5Jetrp" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-482e067e908so754480f8f.2 for ; Fri, 28 Aug 2026 09:15:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933731; x=1788538531; 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=zCLWLdSI658UBVRaCX9PmNUq6TQMDtUFjTpgX36dYDg=; b=CZ5JetrpiCC1xdIvIEK3mLQ5OPFyP40KROF/2EZHHaV8uN65No0m9IGD0t4k84Bu+i gBcc4cr2ECbELQszpp33Avtqz9EfcRmBvBuGK45wCxYSj6ZG7g5gS7vpgSGzvKELv5wd sISGjhQEdlaDDq1zmsfna/DsYVNHdzs7AEUdu56wkORjCGMwtfDvGXGaZ8O7ul7vD+bA 7s71ABMX40/6KOS9OuEXYvW5R3rgxFCPuYXiDWd1LrRVrSsmrmhTjvUCekzeRONa2J3k YfGgnpXGZBFgAwaJ4POcesFBhZ97HGJYigLcE8N3ExLaJ9tgJFCQvjNr3GFhjfeJSVu/ QNPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933731; x=1788538531; 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=zCLWLdSI658UBVRaCX9PmNUq6TQMDtUFjTpgX36dYDg=; b=Q7pZ4iIivsFBlFVrS5aP69Xa/+VgMx68kid6edNi/fCpDZiTHqYudM/ae2ajbxwHwi K/ykKGAD1MxT3WD5/h/EIZzky8IwNoUbeIJygljjtZxiTg/JiHxzKA8U7oaJuTDvH1Cn CHRAVIplvcUywAbSf+37NmDbicWWmhVmcCZCLVfvNVKhuKE2q1RUaHN72hkX0UuHUfEl YgSs6KzyrzffIWS03d/HMZVVjHN8jIMofL3Muy7VPnK51sa9isr+q8nhXqHMwShftfeH X7yFVbdHkAtE9EF7r4m8AIo1w1j9m83uFzChiIxY7MW2BGTMqUlWW2KNjYj0ncwSRuRO xt6w== X-Forwarded-Encrypted: i=1; AHgh+Rokineb0MFuUvBH8n8pu3/dqp4+/JpXN6XfnYhPJ2CaB61EpxNIyiQXZApduCGm7nzLyftEyuokc8wDdp8=@vger.kernel.org X-Gm-Message-State: AFuF++nHHt2E8dz65vGkpcNzK2Xh9xNHBJQkPrBPsEpDRwI1NbR6s50a /g4fABvtw3h6Fvi0QsnF6+EFhhSKecJpBeROSC1y7nlom9E3ey7piru9 X-Gm-Gg: AR+sD12LmMdRHKlELSkARmTZ6/XWa/3IVRPSkvhQSQuKXoekmC9AMrfLFf57tpTYnzX wV3zS9DMR6SGIKI4k3Mxm+YoptG/EZrVnOqpfxXJFd8T7+f6+TKu9M10PKybdahSab+u+pakoNf REdheMC4fGXeiqxXRk42bGC9YTcA+MFpXyyv8Agpaih+OuEudBhQpmz/gjvlkY2e9WSx9DaHokt CjDUZP14pBRd5sOcQGoSUeHOH/HrTs6GX8dKrdnXJ8HEjgaVr3OeY1dAacs/EPlo+Lzfr5aumyI XkEYIO3O7ljjCvRQqQJBpOvL6UUpKT/t09rRxzL9uKkQhw4lcJxMVQrDyW9dcPzmdAwTqEwRbpq MDShafCwzQgTqecqbPft2o4gx7Um5qfDyZTGzFg6Cn51UanALFogXIjn9FEPbgpWOxbjA6k4OoP UQlbFji84yASsSuwfzlqooH4Nj7LewnVFsah8c8fIXyppvMDSV3kmLHNzDTQX8ul8pd7CfuzvlX elhu3EWCxE2YrPJgMWov1MAkyDA3cCDDRwfzfteag== X-Received: by 2002:a05:6000:2904:b0:482:e963:22bc with SMTP id ffacd0b85a97d-482f79a7548mr14687981f8f.6.1787933730940; Fri, 28 Aug 2026 09:15:30 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:30 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 13/15] media: atomisp: Use struct v4l2_area for padding Date: Fri, 28 Aug 2026 18:14:55 +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 Link: https://lore.kernel.org/linux-media/apCc_pt5dDxGJrei@ashevche-desk.lo= cal/ Signed-off-by: Maurizio Casciano --- .../staging/media/atomisp/pci/atomisp_cmd.c | 51 +++++++++++-------- .../staging/media/atomisp/pci/atomisp_cmd.h | 6 +-- .../staging/media/atomisp/pci/atomisp_ioctl.c | 14 +++-- 3 files changed, 42 insertions(+), 29 deletions(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.c b/drivers/stag= ing/media/atomisp/pci/atomisp_cmd.c index 6cd500d9fd26..51dd59d98b3b 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,8 @@ 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); } =20 int atomisp_s_sensor_power(struct atomisp_device *isp, unsigned int input,= bool on) @@ -3800,7 +3801,8 @@ 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; + struct v4l2_area size; int ret; =20 fmt =3D atomisp_get_format_bridge(f->pixelformat); @@ -3827,10 +3829,12 @@ 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); + size.width =3D f->width; + size.height =3D f->height; + atomisp_get_padding(isp, size, &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 +3851,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 @@ -4334,6 +4338,8 @@ int atomisp_set_fmt(struct video_device *vdev, struct= v4l2_format *f) const struct atomisp_format_bridge *format_bridge; const struct atomisp_format_bridge *snr_format_bridge; struct ia_css_frame_info output_info; + struct v4l2_area padding; + struct v4l2_area size; unsigned int dvs_env_w =3D 0, dvs_env_h =3D 0; struct v4l2_mbus_framefmt isp_source_fmt =3D {0}; struct v4l2_rect isp_sink_crop; @@ -4366,8 +4372,11 @@ int atomisp_set_fmt(struct video_device *vdev, struc= t v4l2_format *f) 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); + size.width =3D f->fmt.pix.width; + size.height =3D f->fmt.pix.height; + atomisp_get_padding(isp, size, &padding); + asd->sink_pad_padding_w =3D padding.width; + asd->sink_pad_padding_h =3D padding.height; } else { asd->sink_pad_padding_w =3D 0; asd->sink_pad_padding_h =3D 0; 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..43bca68d1e6d 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c +++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c @@ -470,15 +470,19 @@ 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 size =3D { + .width =3D frame_sizes[i].width, + .height =3D frame_sizes[i].height, + }; + 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, size, &padding); + + if ((frame_sizes[i].width + padding.width) > native->width || + (frame_sizes[i].height + padding.height) > native->height) continue; =20 /* --=20 2.53.0 From nobody Sat Sep 26 23:31:07 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0BD9D4570CF for ; Fri, 28 Aug 2026 16:15:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933736; cv=none; b=O4p0kz3VCDI22AGZvVd/aMrgqb2D/EXTJIcDPwAsoSJXCM+fO025ZLzkFBcbsVnIqJk+7ACQC19G51c8D5GNevdIr4p+kKvhWetwRTBite9HPN8d+Vek7WRq6jw6Odc8oQ9DAmDgljsf3pKxsAD+PEHt2nF9Wl20tY7i1FQfSOc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933736; c=relaxed/simple; bh=EzKK3tOLcx+Z292EqgevpR0MpmThx27fQAv8PINqaz8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QBcUvelTqTXm0ESCCfTuOua/VDvXqdqn5tICTDFN5gPXiwhWppkYN9/ra6B/d1C3G1H+wpD5B+njjOxLxKOpgiIoBMpa475xugj8+aFkXFrHr7Jo66fvISjDpbBcNsLqaivlqkty0Ns8ZyLQocgfCA08NMTRcjWSgCVB2yariPI= 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=GmZj4h4q; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GmZj4h4q" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-480001972b8so619215f8f.2 for ; Fri, 28 Aug 2026 09:15:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933733; x=1788538533; 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=SzHIdUXnLs0yhCnufi5W3K5DJwH27kuPBjXq3qx9ifk=; b=GmZj4h4qpC7eUURLofjv75hN3L/I+NnjG9Z9QmAASGyApHiQz/Mdmg8axv0gwPmwi0 r3iOq0iMDXVzoNud0eC3IPWwhW9julpcHbQIjo62nqTVeTD5cGjphd+unBX6yfMbTmwL mJ0IDWMINQBOej+qf7gnGinWus1nYzzfoXQyu+BmYhGqB6XliXBn8IFHD5GM8CuNb79V vuZyjXtBmi4YPaMz3zKIco2QhA3+E1fKL4sO2cWJI6t2wHoPuOJZQvEbt+qE+2PYs/7e yNIZ+oVGkJEfT9X3BD6/gVX+KaiTscDeYe4vBLkLdZR+J3v54lKt0hW0v5U05/NHeJja 7AGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933733; x=1788538533; 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=SzHIdUXnLs0yhCnufi5W3K5DJwH27kuPBjXq3qx9ifk=; b=sQ3IB7lDbp0ZEjTlg4Ci5Ur4r7L8rLMnBoqpmPQ95ITZ9GeDB6YEpPjBq9eznvGiln fBWgQY2o0fwSAYVaN3SZKJkPAqnFH6cl4C7Juif0RRV2YqlQ7SNjudEhxGCcJDFfo9iw LPEkj4MPoXL6ZyKDuEqIHz9IXv5/3+Ny5SmnPQK+NFNevmTNMtRrhPTQ8/Awy3PTd9B6 /TCVtW7CkaAwD2rzD/vegfu10HOd00QAoVCWKtgzs/abnI01WxEsu3MbCZBz4gGmVBV6 tSzOzc1tcH5BuRJZ+4mkJkpYQLAWrBMmAtJT91m6Loa+uYxm5YlBg783Z6DA6NzNzRQS ZlGQ== X-Forwarded-Encrypted: i=1; AHgh+RqUYTDIyzG8t6114OSL7ItsMv9AgyRXL+nnJ/h21p8wuUp5pQjIJ/45nrQLb22C0F5B7ys+n5+iC+Vpjcw=@vger.kernel.org X-Gm-Message-State: AFuF++mkHS80WOSvBTKaee/EpGH6VwvGKfGVR3ISxac5D49uaC+xI9M0 P2pjpYTtyFW77Ys+z7qpCpKwOY2O8zkq7a+6hzUva7s0lGyNB9HUxPPT X-Gm-Gg: AR+sD116MzuKdpWQNdTLa7th0iWLPrEA1baCT+SGws67s55e8h5kbme1mhxgJ19CdFa 0UmihZD1/dhiHgxTQLTibCTxROSRUSJKAFKqSxLoqVyY+A5xAyh3Ypw4haVgfZ37kV469LUxQoy oivx6Mo1z/YdJLtxmXW/NXRGZCUxkfdrhZX5Rz15KXRq/zIQ+80wdCS81fGBLPjn6v3E3uNmBpw u/BJ9pYq+sO7GdNahmf9ML9p5EbXe7o/MP+Lm7rVOsMyyhC4Tvdgf7Goufvm7Hud1NDNrp7HT0o 8CuDq7DL8qx9m3HwnD/zrEInRcO7ItXN/VLxV8cFsS0zWbLLNDDSsG8BQLa1kcd36PVThaPuZXl i99Ds7eW089xdnPAMGQyO57o8wF3ok2x0C+tvfXH7IulOBO+n8eM7kLrpMkWJBtMuDKQskyKHRl HI+EQbRKJ9BaMwst69QuG2OUOJTXTBMU11/5yv0y8kNWo627ibbpKkDMbtFSNAMwegXi7Yg/awl oWIxOrtmB1DX6n0F6oJFsg906Bz/uHF9emTEnEZ9Q== X-Received: by 2002:a05:6000:24c6:b0:47f:4919:d5b2 with SMTP id ffacd0b85a97d-482f79870bemr11310698f8f.1.1787933733291; Fri, 28 Aug 2026 09:15:33 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:32 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 14/15] media: atomisp: allow raw Bayer capture Date: Fri, 28 Aug 2026 18:14:56 +0200 Message-ID: <749f33adb08c4b311aec241c0bdcc455fcdc0a3c.1787933456.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. Link: https://lore.kernel.org/linux-media/apCc_pt5dDxGJrei@ashevche-desk.lo= cal/ Link: https://lore.kernel.org/linux-media/apF0Cds9fnqQ7XRg@kekkonen.localdo= main/ Signed-off-by: Maurizio Casciano Assisted-by: Codex:gpt-5.6-sol sparse --- .../staging/media/atomisp/pci/atomisp_cmd.c | 19 +++++++++++++------ .../staging/media/atomisp/pci/atomisp_ioctl.c | 19 ++++++++++++++++--- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.c b/drivers/stag= ing/media/atomisp/pci/atomisp_cmd.c index 51dd59d98b3b..3d62cb948e31 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_cmd.c +++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.c @@ -3572,7 +3572,6 @@ void atomisp_get_padding(struct atomisp_device *isp, = struct v4l2_area size, u32 min_pad_w =3D ISP2400_MIN_PAD_W; u32 min_pad_h =3D ISP2400_MIN_PAD_H; struct v4l2_mbus_framefmt *sink; - if (!input->crop_support) { pad->width =3D pad_w; pad->height =3D pad_h; @@ -3806,8 +3805,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); @@ -3829,9 +3827,13 @@ 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. */ - size.width =3D f->width; - size.height =3D f->height; - atomisp_get_padding(isp, size, &padding); + if (fmt->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW) { + padding =3D (struct v4l2_area) { }; + } else { + size.width =3D f->width; + size.height =3D f->height; + atomisp_get_padding(isp, size, &padding); + } v4l2_fill_mbus_format(&ffmt, f, fmt->mbus_code); ffmt.width +=3D padding.width; ffmt.height +=3D padding.height; @@ -3850,6 +3852,11 @@ int atomisp_try_fmt(struct atomisp_device *isp, stru= ct v4l2_pix_format *f, ffmt.code); return -EINVAL; } + 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; + } =20 f->width =3D ffmt.width - padding.width; f->height =3D ffmt.height - padding.height; diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c b/drivers/st= aging/media/atomisp/pci/atomisp_ioctl.c index 43bca68d1e6d..edad38809fc9 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c +++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c @@ -540,12 +540,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 @@ -557,9 +566,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; } @@ -633,7 +645,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 23:31:07 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E22A46EF9E for ; Fri, 28 Aug 2026 16:15:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933739; cv=none; b=C7CQK+ENPZHZWNsmhgBrSyZ+kwh+lmJA9goK/+mXdeBqkgk+nlrxxrcjhjWkRgbRz/jm9sZ+gJxlf9jmJRjIcM3gc0VoeDsKNQapRmHlXeM/rXRIoUsQJOa/zbcIDTCETvxqMZ5OixIliHD3L5346qLDZ9dsEfEYOKvlKI6vqfE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787933739; c=relaxed/simple; bh=KL/KrKPv/CwkOu/hDT8WvQPP4w2GF0et/e0jlzVc5sQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Mj5bmVNRKWwTjT34VUTHBOZ5p/b/cTCQbItxF0Kkly7G97v8rp8h+6ggwnNziGjgwzW6bfS+eIkbprLaxAjy935xfqi7ayvZxlxmhSpPmXFcNsqctH9860XjCWzxFsrBYVt63SK63NenB/ojlpNocGHNqCqXaXI70tAS6d/dmxc= 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=oHSon8NU; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="oHSon8NU" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-482fc3327fdso445499f8f.2 for ; Fri, 28 Aug 2026 09:15:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787933736; x=1788538536; 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=G4CRs1pCaiygjhdGFap4Gmf6j66aGIB4LLnvtR7XBso=; b=oHSon8NUkrHJL7lwrTpIZjNt4OssuIOGGZNi/FtNGyL7XtVF1SKjslUh47XDgN5IWD Irz3McDvjTKVLLq+TyuUKihdztg9VQFKbitNuLqIFZstqC6VXv9oTXCxyTk0Mx46ZC0d 4pWWVvUAD9M/i3iWnWUvniKlZPpeN7qIk8pPjyGlaJj0CTe0I0PkLUw06BNQOkUptAVr +0juFxXcbL6oUB9YbuHkSSL4n322mwstRXMAte8KqSEBTIu7TkT2Hg/AtXYd+6fgFXFQ kVD5ZxLwvxCsjb5J+MS46DVIVme07m60tL9aEwS/8KdQOoewgBJeWCoJJdga0P/r5rF7 FtCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787933736; x=1788538536; 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=G4CRs1pCaiygjhdGFap4Gmf6j66aGIB4LLnvtR7XBso=; b=FhrCULK7XKHGBB+2XmRfA4/QH7E8MwMBK3tJpghYu7PFwRLUJ/mCM4jvkQ8fST+8oD kH64qwO4ckr/VUL74Wt07Qk6jIuuT4oKJcfRPJyC5BYCEZw/mL/c/yGoYAqyMSCcWS8m G0XF6CaQuDhhDEajPmWQY2l1nSsxnbAdYapF93JvdvfILrp/FUpGeV4/+DTk5SESCHq9 Vc2S5kxbWBO48GkpZHZiKo0U+c6uDCw1HXNHNHzdDwtKuie9AlorTst16xZ0O3WtiuF6 mXNWxJVFmTb7R0SuVinLU2EUQJXUKllk4Kfj6InboGUWN2x28hMCYZBocaX8NNWwPZPA mLTQ== X-Forwarded-Encrypted: i=1; AHgh+Rqpomou/AEXtU5choDi1MrkEPEzIV7D4Bsyl7/xQ9adVMWi2ISuyPpGvsUv9w6krfxe3mB3X0KgsCsk6X0=@vger.kernel.org X-Gm-Message-State: AFuF++ms0bzG+Wg1bYsSKKEN8x1qpV4jZNRFU7oiuoDI2rz/7iSLxAut rjjaDA1z5mttl3lHWlnUHS5+wagXJcy6Mihvz17lJHf+vT9HfCRXCsOr X-Gm-Gg: AR+sD12DI9zra1tsVtSsK6PUDkhenxiJwabkPf3Cu729qetbQjwZbtDh+/jV2UJ1RDZ 3XAzGFW7T4OGq8vA/Dv9BLBwqyJ/Y1tBNccyYX4c2y5CuqJJkLde6D6pW7kh+mZ4HIDEeW7D5yh 1GvbbpYWMKAl8Ltg5/J8ZI7EKupra675VJQ9uA5sUESRPI2pPS/ctqZ1i+ULyOTBeqwYFz4KaW1 XivPOIB/UcLipl64Wx/pPFvQ5RrEgJLzrzvMz2lGOtKBca86XFX400xTek0xZ2bZBit2pt0eDBg 7BcldDTqdUou2OKafRtde4G315yAjMdCHfc2vrEAu4i/xgRFfUvxkg3wgb3MFTS4lPyFE6+ffEV dY9Q2yeRF7MpfYUIfzM+VrDpDJlPJo4I7/Ptx2qWZ/xbCGQha2KVFpJxtj7aOg/HoXjuKDsh2pH Y5hOgz4KmWdw16KeA95Cj6A7k1Ht9kdb9aNy4Q9CfwWDYJa2wVfS9TjGsxNhrMeMyqBoUF5mwoB vRR0/HTmxY6hBu/QviU+Hkr5Lffw5tYj8Lfn1wB7A== X-Received: by 2002:a5d:64c5:0:b0:47f:8b24:ef01 with SMTP id ffacd0b85a97d-482f7977aabmr12331731f8f.1.1787933735699; Fri, 28 Aug 2026 09:15:35 -0700 (PDT) Received: from 1Z10 ([78.213.5.213]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbab3f45sm7629739f8f.7.2026.08.28.09.15.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:15:35 -0700 (PDT) From: Maurizio Casciano To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Sakari Ailus , Bingbu Cao , Jacopo Mondi , Nicholas Roth , Andy Shevchenko , Andy Shevchenko , Hans de Goede , Greg Kroah-Hartman , Jose Maria Martin , Uwe Kleine-Koenig , linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Maurizio Casciano Subject: [PATCH v4 15/15] media: i2c: Add WV517S lens actuator driver Date: Fri, 28 Aug 2026 18:14:57 +0200 Message-ID: <6691a58a47623af130d7217d0cedab4563691b4b.1787933456.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: Codex:gpt-5.6-sol 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