From nobody Sat Sep 26 10:01:29 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 9C61E4A485B for ; Wed, 2 Sep 2026 14:53:52 +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=1788360834; cv=none; b=c8cu3OvZK4jT80fMtkXTE0yvvZpf2SdplNA4qkKAxW3Sg6KWWqiRF654+0Ilsu+jvo2tcr1JWrlExDrWjHZZEj4wKcss4rXP1CVcppgXMbZFK0dHf8eaXVqhxIGiaXv9HGFsANIoJmypVTwkNhMpHGNWucBQHlG/76xlL+5sxCg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360834; c=relaxed/simple; bh=IJTIjXefCtpyzFz642pELl2c8LGlNjVMmQXZPOjQ1EU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fgD4b/TPzwxjfV8kI7q/oZvCsSn1ORqNpjhvyWT2kW/X/4tVu385pFlPrSKwY6FmzGiblMoYAEVDsNqMQsKp1gHpNQgViPjKn70HWF6tueYSEE3Bh/lDxAZnm4aQITUWdF/OzPPyLwKS1FE5fom2yXmWoTnulD5Ems/K58Cynlo= 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=Kjn15Bj2; 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="Kjn15Bj2" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-482fc3327fdso794003f8f.2 for ; Wed, 02 Sep 2026 07:53:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360831; x=1788965631; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=1kEYOKwOKleJni/53+3Zevf6XMaih8vPEj3mTYB7Fxs=; b=Kjn15Bj2yjumPTs6N6HCBlkrhqdHV9BZ01hLSpsgGL9jYTnT9PpSm5+ny3IBhlTUYs qzZNEZSM5Q45LaORuu2RXT4Tl8bbhpo2VyICKDkA7jBcyd8395qQ+p96OnBw3ydGFn5t iYxyaFMK1+iI0Me6RDQFLevTqOvqhmxEpC44GWgV78v5/MP423st+76P+0Q+lSDdhDVb Lkn87VMdzMuMvDaZYm5mJd57kJ6V6loBUU/vNfzTNfQf2T9pV0x/xYj8wzSsZe3EEEzA 4mCfPZY48UbCzA4jZm5uCBowpHwPOdcehROpK68lyLcsDLRc4xs861awD+zMJORr70/8 H/VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360831; x=1788965631; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=1kEYOKwOKleJni/53+3Zevf6XMaih8vPEj3mTYB7Fxs=; b=FX96s28+rcNCsnNLzL4ctC+RPa54Tcoo0erIt8dKcxmHN8WBM4YETfntD5asXx7klj DSrhWqGW66q0xCc7ZI+7KwK+059GkCrzzpgukVuSrDk7dQGSqVeg9dXN8Hc8aZh5KOZY mpZyyBl5y30ZcTsxBh7sG5z1iUvly5FYJ6wbh/sMBS0LblSFZ26ZwrinQVEJrHIt0W0N amy3AN8DPkLoxcWHSapDKdy2j3ueITEbpFGjORm4m5DHAvVPYqHndlOTQCYaT9m2i7VN FWNjjFNFFXaRmBGTKyS7FGLtkMhOhKznbCk1jtw8eNAO+0sXkwPm+skb2PT/GKxVMP4e Lt1g== X-Forwarded-Encrypted: i=1; AKwUvBxqVVfNdwvL0ghoq4NTcXyyXuW+/Oew7yKK/Y2JSaNU83iqGeYlaP2nst9Vb7GBif07naC0+yU0u+NbUmU=@vger.kernel.org X-Gm-Message-State: AFuF++mpbwzJ0FUr87ERtEDL5Sn7+CrBLDBjhPv2Hz/m7zEGtO6E2jYc LsLoIetebHniKTg+KDld1T0O/ejh8bV/mSN4z+svx9hhTpbNkKOpGaQJ X-Gm-Gg: AYBFou0Ym8e9vNyRqyhJqa072X/TbeMt4zUocgg9S7DRLtJnrzp6r6wbT8pmlA2vTtY Ew55DvNA42Lr6j9RMRyhpdoGsxANkcdi7iJdv9f7Vgodn6KB1GgnAbqzjJ7zzNYgqQ50EVeuoRn u3c5RmGDALpKdtt8rJknHh1vkhtL4yymu+oo4VrFjCZ33mg5vEf03yzerMunoKbZV8dyPN4yNPE lTXaU5G0t4UPvn/4CZlmY7ujT+JvRizW4dhMe1b8u/hqlcbvKb68vnzeTF6NotpWNDMBDpUhzkY ipHzmbgcxtVI93eFNVUXyDybHaz+ccyFdWcTWo8yPh3jzTnrU8GGr37/EQwu4vUiNOGi9jyHEmT 5t7Kz6f+663Kxkiu8n0Rfqo8H5ynCInxiz5Evd3R2s+XxBKNi1wfDm01QjTyb8Mg1uGZnhNEExh Kp3LXv2rOMS8Bl0VGXcxIuGq67WWYoH6SojSTJG3311IGPr3vvfqpA11OdI9voobITaxA9Xqukk WRWU/unKeyx0hslHN2bU9zTU+KW1uyF4f/e7sned4bd X-Received: by 2002:a05:6000:2211:b0:484:3c87:dc91 with SMTP id ffacd0b85a97d-484913c33bdmr9871534f8f.19.1788360830513; Wed, 02 Sep 2026 07:53:50 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.53.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:53:50 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 01/16] media: ov8858: Extract digital gain programming Date: Wed, 2 Sep 2026 16:53:30 +0200 Message-ID: <517c4f11075debaaa3eebc4e8bed574ac832565c.1788360629.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. This is a pure refactoring: preserve both the register packing and the explanatory comment without changing the bytes written to the sensor. Assisted-by: LLM sparse Signed-off-by: Maurizio Casciano --- 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 10:01:29 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 BE6034A49AA for ; Wed, 2 Sep 2026 14:53:54 +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=1788360837; cv=none; b=rMZ3BY/Me60O8BjU63ewsIcBye/C6h0Sh3F3iHt1rR4P/iakxQ5+FwJMYHa2ka4BWmJ9rBxmKF+VYfTspEvWtZkSif4Q6PH+uedTUwJuuuiIiEFlYFEMtYgqSI52CgF4xN93hjrB5kItxd3G72ktmMTzqKv0Cll0kNFe8TXQ4IA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360837; c=relaxed/simple; bh=Ouc/wVhe1kx+d2EXVFit3VKGVbls5oMRIX/O7GKCAPQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ASl0w4vDRBsQmOpnKiFHj+QGYf4L0pqSieEE6+TB9qyhg59dKSdRl7qFE3srzUSL/MVBxFFW/43btqq39G5LzGtkzLc5uogkEk18Up5KnOvY/Z76klpelL9IxRvvHhe1yh6y/hPhNpf9arrHrCbzcV6WUyX2UqR/Ja3xA3bjf9s= 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=kcdJPpwP; 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="kcdJPpwP" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-47f96c5b722so862854f8f.0 for ; Wed, 02 Sep 2026 07:53:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360833; x=1788965633; 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=XrkNOriJX9DgyhiRvmYfIW8aEH5T9O16KOXwGHDt2mY=; b=kcdJPpwPW7s/JKKQ9thPtVIp6KR5YBRYR7HSKw6kDtxY5SwXasuKk2lUHQc7eRYql2 M7uGRP95grfvPN2qwbgUTejAzg3Zaze7CbpT80V99d6nXPMXKCm7QHoKE0IGeZ0FgPgo yE/xy7Z+bInrwqQJB9XRbzoF5mIt8p5UZSIX98iGFF9NwEHT6kQc/e/aY0om8vn6CMha vLPFFZc+0a+pFL9IdTWuzJKzJKshuoxBCfPYyW37Qjc6zitf4wry8XBjJ/YiGL9c4IPj 1h/KUmJ6+qiw7dUxMTZ56Qsg9akEtVVStC5U+x3oIuCHjDK6cMRKjGttGuKP1kJ7+7Xq wbOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360833; x=1788965633; 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=XrkNOriJX9DgyhiRvmYfIW8aEH5T9O16KOXwGHDt2mY=; b=XFU8Q2KICO5l7jI5XK0FgnwhvwIQKHAYw5TnvCBSA1ixfgYY1UkWuagVYuw+t0YqpX Muy1zGuVl2BRKyaepfoMceH2HEANzsRgqvvCLqNScTQQKKaIvNUL6FfbRo96HU+i5iXk 1KwKBCK0i7d5nQNngZnZRYAyjbSYrvIv4QSOStrfo8HycWkdygvm1cLRhtP7293xfZF8 qgGXtKcCbmuF8hUiWVh7MTDv5SW0PoIQA+INqYLAe5XfZdJKAil5VakHLo7Jsm8jbSkU S6bY1asr9roYpHd8PdcGM9XbPAcCFfthB8SqN6cKIoq15P9dzpmDh7HK/wih6IkGRJE8 CRJQ== X-Forwarded-Encrypted: i=1; AKwUvBxC9yGUEnfWEusw/NIo3o0HS9DaSrRyXq/7atws0tj0ygWS1f4Ar+qVK2GyWwjeDE26mpkLOMOL5WEhcmI=@vger.kernel.org X-Gm-Message-State: AFuF++mfx6Edm8jwsCIDqc/Ic6yZQ/bDvddGMqW7zJUNh5l65aCbqM+P 1jtgg/zUf8rhzJPSR3d/mzLOqhjUW1LzFfslk3BhJxdjmxyj9YCzff/s X-Gm-Gg: AYBFou2Kbx+ROlAxQtybJCaM0QUbVRhuWxJVcGufXPl3Rxu968XMfwVlYrPkGHGPRFl oH6scUKJIcDZk6HobgX0I6P5BJJ9TrTNcAv/Ltjr4miDMD1CrSIPKv7DEBtXWEnLCcrg0TxqxKl xRvQK3bvpylGpSqPUu3F+spkYCYeTCQn8Zw2fHjsZJNaqg9QGJYK4Hv8kQ3HAQumwnBwNtmR5l5 W6L1Z9NWNON0+fYUpLhvlaW6wgp+FDh/x2DU6lF6trHXkoohhIIuAvQx0bWPD5uomYa47NjPbp5 GYCxYHdM0hUcqAQ0h5ukHhmtVTCiVD1UDxwDdOGaolpz5MKg/okRi/y+krtlEs1DR4kBd209/yw MBVMAtwYnA8YJIOvaFCrZAgZr5mnBMeztJPLZtxO3kBx06AQRRY4oXGwDkt/KyFw2Mko5tGGVpx afBV5GXpZCrjmwT7MDcUhBSeQ7jn1dfmIbNHNMaG4aR8v2/xugWggLA0WV4493bOfAiBcaM7oUe NItkqRzsZdW6WY/f0uM4y6y3hk0d75ahk5AqIkEXhQA X-Received: by 2002:a05:6000:4a0a:b0:484:39b4:5bc9 with SMTP id ffacd0b85a97d-484914cba9amr10008560f8f.26.1788360832533; Wed, 02 Sep 2026 07:53:52 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.53.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:53:52 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 02/16] media: ov8858: support 19.2 MHz clock and CHT gain setup Date: Wed, 2 Sep 2026 16:53:31 +0200 Message-ID: <628adb1cabec866554ca26a2da5af860b04d6cb1.1788360629.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. Move the 24 MHz PLL and global timing registers out of the common mode tables, provide revision- and lane-specific arrays, and select the matching clock programming explicitly when starting the stream. Keep the existing long digital-gain control independent of the input clock. Expose the per-channel manual white-balance registers as separate red and blue balance controls, keep green at unity, and accumulate write errors while programming the three channels. The manual white-balance register definitions and programming follow Intel's GPL-2.0 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 three complete 10-bit raw Bayer frames, independent red, blue and digital gain updates during active streaming, and front and rear camera capture in Cheese. Link: https://lore.kernel.org/linux-media/apf7cJOoXrl_wZfr@kekkonen.localdo= main/ Signed-off-by: Maurizio Casciano Assisted-by: LLM [Codex] [Sparse] --- drivers/media/i2c/ov8858.c | 182 +++++++++++++++++++++++++++++-------- 1 file changed, 146 insertions(+), 36 deletions(-) diff --git a/drivers/media/i2c/ov8858.c b/drivers/media/i2c/ov8858.c index d95f034de752..e040c1fa0a94 100644 --- a/drivers/media/i2c/ov8858.c +++ b/drivers/media/i2c/ov8858.c @@ -3,10 +3,9 @@ * Copyright (C) 2023 Jacopo Mondi * Copyright (C) 2022 Nicholas Roth * Copyright (C) 2017 Fuzhou Rockchip Electronics Co., Ltd. + * Copyright (c) 2017 Intel Corporation. */ =20 -#include - #include #include #include @@ -18,6 +17,8 @@ #include #include #include +#include +#include =20 #include #include @@ -28,8 +29,9 @@ #include #include =20 -#define OV8858_LINK_FREQ 360000000U -#define OV8858_XVCLK_FREQ 24000000 +#define OV8858_LINK_FREQ (360 * HZ_PER_MHZ) +#define OV8858_XVCLK_FREQ_24MHZ 24000000 +#define OV8858_XVCLK_FREQ_19_2MHZ 19200000 =20 #define OV8858_REG_SIZE_SHIFT 16 #define OV8858_REG_ADDR_MASK 0xffff @@ -59,6 +61,14 @@ #define OV8858_LONG_GAIN_STEP 1 #define OV8858_LONG_GAIN_DEFAULT 0x80 =20 +#define OV8858_REG_MWB_RED_GAIN OV8858_REG_16BIT(0x5032) +#define OV8858_REG_MWB_GREEN_GAIN OV8858_REG_16BIT(0x5034) +#define OV8858_REG_MWB_BLUE_GAIN OV8858_REG_16BIT(0x5036) +#define OV8858_MWB_GAIN_MIN 0x400 +#define OV8858_MWB_GAIN_MAX 0xfff +#define OV8858_MWB_GAIN_STEP 1 +#define OV8858_MWB_GAIN_DEFAULT 0x400 + #define OV8858_REG_LONG_DIGIGAIN OV8858_REG_16BIT(0x350a) #define OV8858_LONG_DIGIGAIN_H_MASK 0x3fc0 #define OV8858_LONG_DIGIGAIN_L_MASK 0x3f @@ -104,6 +114,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)]; @@ -115,12 +126,87 @@ struct ov8858 { struct v4l2_ctrl *exposure; struct v4l2_ctrl *hblank; struct v4l2_ctrl *vblank; + struct v4l2_ctrl *red_balance; + struct v4l2_ctrl *blue_balance; =20 const struct regval *global_regs; + const struct regval *xvclk_regs; =20 unsigned int num_lanes; }; =20 +/* Keep input-clock programming separate from the common sensor setup. */ +static const struct regval ov8858_24mhz_r1a_2lane[] =3D { + {0x0302, 0x1e}, + {0x0303, 0x00}, + {0x0304, 0x03}, + {0x030e, 0x00}, + {0x030f, 0x09}, + {0x0312, 0x01}, + {0x031e, 0x0c}, + {0x4837, 0x16}, + {REG_NULL, 0x00}, +}; + +static const struct regval ov8858_24mhz_r2a_2lane[] =3D { + {0x0302, 0x1e}, + {0x0303, 0x00}, + {0x0304, 0x03}, + {0x030e, 0x02}, + {0x030f, 0x04}, + {0x0312, 0x03}, + {0x031e, 0x0c}, + {0x4837, 0x16}, + {REG_NULL, 0x00}, +}; + +static const struct regval ov8858_24mhz_r2a_4lane[] =3D { + {0x0302, 0x1e}, + {0x0303, 0x00}, + {0x0304, 0x03}, + {0x030e, 0x00}, + {0x030f, 0x04}, + {0x0312, 0x01}, + {0x031e, 0x0c}, + {0x4837, 0x16}, + {REG_NULL, 0x00}, +}; + +/* + * Cherry Trail MRD production settings for a 19.2 MHz input and 360 MHz + * CSI-2 link. + * + * 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); @@ -131,13 +217,6 @@ static const struct regval ov8858_global_regs_r1a[] = =3D { {0x0100, 0x00}, {0x0100, 0x00}, {0x0100, 0x00}, - {0x0302, 0x1e}, - {0x0303, 0x00}, - {0x0304, 0x03}, - {0x030e, 0x00}, - {0x030f, 0x09}, - {0x0312, 0x01}, - {0x031e, 0x0c}, {0x3600, 0x00}, {0x3601, 0x00}, {0x3602, 0x00}, @@ -370,7 +449,6 @@ static const struct regval ov8858_global_regs_r1a[] =3D= { {0x4600, 0x00}, {0x4601, 0xcb}, {0x481f, 0x32}, - {0x4837, 0x16}, {0x4850, 0x10}, {0x4851, 0x32}, {0x4b00, 0x2a}, @@ -405,13 +483,6 @@ static const struct regval ov8858_global_regs_r2a_2lan= e[] =3D { */ {0x0103, 0x01}, /* software reset */ {0x0100, 0x00}, /* software standby */ - {0x0302, 0x1e}, /* pll1_multi */ - {0x0303, 0x00}, /* pll1_divm */ - {0x0304, 0x03}, /* pll1_div_mipi */ - {0x030e, 0x02}, /* pll2_rdiv */ - {0x030f, 0x04}, /* pll2_divsp */ - {0x0312, 0x03}, /* pll2_pre_div0, pll2_r_divdac */ - {0x031e, 0x0c}, /* pll1_no_lat */ {0x3600, 0x00}, {0x3601, 0x00}, {0x3602, 0x00}, @@ -648,7 +719,6 @@ static const struct regval ov8858_global_regs_r2a_2lane= [] =3D { {0x4600, 0x00}, {0x4601, 0xcb}, {0x481f, 0x32}, /* clk prepare min */ - {0x4837, 0x16}, /* global timing */ {0x4850, 0x10}, /* lane 1 =3D 1, lane 0 =3D 0 */ {0x4851, 0x32}, /* lane 3 =3D 3, lane 2 =3D 2 */ {0x4b00, 0x2a}, @@ -810,13 +880,6 @@ static const struct regval ov8858_global_regs_r2a_4lan= e[] =3D { {0x0103, 0x01}, /* software reset for OVTATool only */ {0x0103, 0x01}, /* software reset */ {0x0100, 0x00}, /* software standby */ - {0x0302, 0x1e}, /* pll1_multi */ - {0x0303, 0x00}, /* pll1_divm */ - {0x0304, 0x03}, /* pll1_div_mipi */ - {0x030e, 0x00}, /* pll2_rdiv */ - {0x030f, 0x04}, /* pll2_divsp */ - {0x0312, 0x01}, /* pll2_pre_div0, pll2_r_divdac */ - {0x031e, 0x0c}, /* pll1_no_lat */ {0x3600, 0x00}, {0x3601, 0x00}, {0x3602, 0x00}, @@ -1053,7 +1116,6 @@ static const struct regval ov8858_global_regs_r2a_4la= ne[] =3D { {0x4600, 0x00}, {0x4601, 0xcb}, {0x481f, 0x32}, /* clk prepare min */ - {0x4837, 0x16}, /* global timing */ {0x4850, 0x10}, /* lane 1 =3D 1, lane 0 =3D 0 */ {0x4851, 0x32}, /* lane 3 =3D 3, lane 2 =3D 2 */ {0x4b00, 0x2a}, @@ -1345,6 +1407,10 @@ static int ov8858_start_stream(struct ov8858 *ov8858, if (ret) return ret; =20 + ret =3D ov8858_write_array(ov8858, ov8858->xvclk_regs); + if (ret) + return ret; + /* 200 usec max to let PLL stabilize. */ fsleep(200); =20 @@ -1540,6 +1606,21 @@ static int ov8858_set_long_digital_gain(struct ov885= 8 *ov8858, u32 gain) return ov8858_write(ov8858, OV8858_REG_LONG_DIGIGAIN, long_gain, NULL); } =20 +static int ov8858_set_mwb_gains(struct ov8858 *ov8858) +{ + int ret =3D 0; + + ov8858_write(ov8858, OV8858_REG_MWB_RED_GAIN, + ov8858->red_balance->val, &ret); + /* Green is the unity reference for the red and blue balance controls. */ + ov8858_write(ov8858, OV8858_REG_MWB_GREEN_GAIN, + OV8858_MWB_GAIN_DEFAULT, &ret); + ov8858_write(ov8858, OV8858_REG_MWB_BLUE_GAIN, + ov8858->blue_balance->val, &ret); + + return ret; +} + static int ov8858_set_ctrl(struct v4l2_ctrl *ctrl) { struct ov8858 *ov8858 =3D container_of(ctrl->handler, @@ -1588,6 +1669,10 @@ static int ov8858_set_ctrl(struct v4l2_ctrl *ctrl) case V4L2_CID_DIGITAL_GAIN: ret =3D ov8858_set_long_digital_gain(ov8858, ctrl->val); break; + case V4L2_CID_RED_BALANCE: + case V4L2_CID_BLUE_BALANCE: + ret =3D ov8858_set_mwb_gains(ov8858); + break; case V4L2_CID_VBLANK: ret =3D ov8858_write(ov8858, OV8858_REG_VTS, ctrl->val + format->height, NULL); @@ -1622,9 +1707,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 +1725,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); @@ -1709,7 +1791,7 @@ static int ov8858_init_ctrls(struct ov8858 *ov8858) u32 h_blank; int ret; =20 - ret =3D v4l2_ctrl_handler_init(handler, 10); + ret =3D v4l2_ctrl_handler_init(handler, 12); if (ret) return ret; =20 @@ -1751,6 +1833,19 @@ static int ov8858_init_ctrls(struct ov8858 *ov8858) OV8858_LONG_DIGIGAIN_STEP, OV8858_LONG_DIGIGAIN_DEFAULT); =20 + ov8858->red_balance =3D + v4l2_ctrl_new_std(handler, &ov8858_ctrl_ops, + V4L2_CID_RED_BALANCE, + OV8858_MWB_GAIN_MIN, OV8858_MWB_GAIN_MAX, + OV8858_MWB_GAIN_STEP, + OV8858_MWB_GAIN_DEFAULT); + ov8858->blue_balance =3D + v4l2_ctrl_new_std(handler, &ov8858_ctrl_ops, + V4L2_CID_BLUE_BALANCE, + OV8858_MWB_GAIN_MIN, OV8858_MWB_GAIN_MAX, + OV8858_MWB_GAIN_STEP, + OV8858_MWB_GAIN_DEFAULT); + v4l2_ctrl_new_std_menu_items(handler, &ov8858_ctrl_ops, V4L2_CID_TEST_PATTERN, ARRAY_SIZE(ov8858_test_pattern_menu) - 1, @@ -1804,15 +1899,20 @@ static int ov8858_check_sensor_id(struct ov8858 *ov= 8858) =20 if (id =3D=3D OV8858_R2A) { /* R2A supports 2 and 4 lanes modes. */ - ov8858->global_regs =3D ov8858->num_lanes =3D=3D 4 - ? ov8858_global_regs_r2a_4lane - : ov8858_global_regs_r2a_2lane; + if (ov8858->num_lanes =3D=3D 4) { + ov8858->global_regs =3D ov8858_global_regs_r2a_4lane; + ov8858->xvclk_regs =3D ov8858_24mhz_r2a_4lane; + } else { + ov8858->global_regs =3D ov8858_global_regs_r2a_2lane; + ov8858->xvclk_regs =3D ov8858_24mhz_r2a_2lane; + } } else if (ov8858->num_lanes =3D=3D 2) { /* * R1A only supports 2 lanes mode and it's only partially * supported. */ ov8858->global_regs =3D ov8858_global_regs_r1a; + ov8858->xvclk_regs =3D ov8858_24mhz_r1a_2lane; dev_warn(&client->dev, "R1A may not work well!\n"); } else { dev_err(&client->dev, @@ -1820,6 +1920,9 @@ static int ov8858_check_sensor_id(struct ov8858 *ov88= 58) return -EINVAL; } =20 + if (ov8858->xvclk_rate =3D=3D OV8858_XVCLK_FREQ_19_2MHZ) + ov8858->xvclk_regs =3D ov8858_cht_mrd_19_2mhz; + return 0; } =20 @@ -1887,6 +1990,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 10:01:29 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 064334A49A5 for ; Wed, 2 Sep 2026 14:53:56 +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=1788360838; cv=none; b=AOA4k4jCoJgm63wt5vSPJBZsCiCBGCB1NFoKqYlUHBo6PYO5CivVsn6AjqANILajEkEVylOka2imYD4oZCY1mSOXXP2LBgYVQL5GCjd9c4t7D6vhWl1bzVis6Ax1136kUQttq1UGa0mKum79JcpeXiwGAELGCf5wnGhO+5VZDFs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360838; c=relaxed/simple; bh=a4oCgSJxVT+Yvyj6OvJRra4F7RQTRxH4QG/o8/Ybv3s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H76eBxECDI306E61Ikow2q1eAqn/M6+e6V469G9bXQb6oUf22hDB++mJaL1sKseR/BhAEY0WN52ZIO0LKKzxdmzEXBn30ZHzZZa9xtb+OGIdqESUelv/4jYmJhTWyf0Ag93UdkdQR40r1Zd2Vxp0plKOXDkHyFMGTZlaA5lMxWU= 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=RETan9et; 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="RETan9et" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-49cdc81f40eso8041935e9.2 for ; Wed, 02 Sep 2026 07:53:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360835; x=1788965635; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=mENIAbZRTvAZLCBtejhgUDs7AYKS8queXWQS6mtdC+Q=; b=RETan9etukiUAIj8oQ0/+UVVbKtEKLI/QbHJZO7EzWH0xr8SJigi81Dyf+5fJ2Qtta sP19buAMDxPyuQqnobJ7IHI7wVxAZeZQXIB07wA8Yc3zMiOCslSS6BFEfzPCPEbNKeHq TCcEOO6RlhW8tbgEDTrx3APLgAC9HikaCMHGxMYvuRrIfMFGpj1AqBj0DBjdxb9xKbzE 7nXmBPW0dGhakAwta0GS7KVRFhwZnPVOFgbaLiOKdE2CA4iGHd5sZn1F+OW3odr3AIQ9 9FQ7nwS6IWteFZGo6T/CezqkqFjU33rcii/IAfsW4hlAqovAHdZymr75luD7uIKHA5fQ ykDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360835; x=1788965635; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=mENIAbZRTvAZLCBtejhgUDs7AYKS8queXWQS6mtdC+Q=; b=ihf3LR1wcRImKfVF1Hvgukw3JLN1aWAZuQVGEY3C3HyKxDmnT3TdnllL3xcJiuSIKr coPqw6m7urEabddRLqT/gUoREwnhvptRMxTW+T7TxFLzj66TCzRULieiHNTa0WolcKT/ ayQ7YFDqkD7myVnXxxD9kKT/BOM0HO0KCyLA2nuH1L5BAFu76OwNcQo5/njcUfYbYDR7 ntJQFhEu8M0M/ZxmPdiewPnPkquAmXz7zZJ3WfxFveFy+G7ZFI26tkrRoB1tfLFtSFG5 VEC1JydgAUJsbLJ65GDk/CgWNwVEaWGgdA1UiFAdSZmjFR6Zf8C2iAT4g31MkdTKJR1J GomA== X-Forwarded-Encrypted: i=1; AKwUvBwBlYQJFBFBGtS3fAe1p26Yv1nDmHu6NJRhG+MztMiZUr85XgTj5IGfCQftzejtHo5LtiCtcKv3bptfmMQ=@vger.kernel.org X-Gm-Message-State: AFuF++mPb5QNh8FY4FqCbmxm/mhmifrvxY+gGfc+zJb5bGu+V9G7Y7ZH JESC3VS4QZfTVgdK6yFZp25TqvKd+q5dYtyfYYpOlncqO1rRm7d8Oj8O X-Gm-Gg: AYBFou2cP1SVPBhWbL4SuiK3sKTEO2SiLu+6j2eFhQiDHDbuFvnKMZdyGzcrHFd5SoB sewPYdMhOYvcv9peNKo9f5qwI4LQ0V7buduS0D9VxMCSpDuMVFo/62hYk4Ory9301j8YqOpIDNC p6hhjptLZQju3PcOKMM/i1MvMJRXr6OnTcgn2PMvlVmHOG1jYkjB71MN9vydbEFzyVQMlaBp+Mz vcE7UfZudBbBc07NiatJrRke+lvFiJfoyBtiiDUQ7XPlFbaE6WOplPfLzhagpJ+txW2wy/X3kGV L/izTfc9MTesmTlxyvYnqEIVBKG7fvA9bMqyQXPVKmXi9uY+4UhaVfJ8hQcOb390Pmu1aCz8yiv JRoDAwGrk3fdPT8VRxD0WdYFzWBy3A5pO1dMjw1dYyzCn+Mtbb3sWTWdjv8S015di0xxb6vJaDv X0J4WFSiqQ7wHpkv2a8wuEb1AcxP8m9YIn2Hasg2juKmI6f7B88oGVe/X/MVY2UnaX4v63K2Ki6 qhrwpPBZMRk5cVkk/3OlFQ5g+VRFX+hsq0XOMdZPWfj X-Received: by 2002:a05:6000:184e:b0:484:3312:f127 with SMTP id ffacd0b85a97d-484913c020amr9110505f8f.27.1788360834456; Wed, 02 Sep 2026 07:53:54 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.53.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:53:54 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 03/16] media: ov2740: Use C99 initializers for ACPI IDs Date: Wed, 2 Sep 2026 16:53:32 +0200 Message-ID: <12033326593d98fb9bd5902820c1ab29df00c94c.1788360629.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use designated initializers and the standard empty sentinel style before adding firmware IDs. Suggested-by: Andy Shevchenko Reviewed-by: Andy Shevchenko Assisted-by: LLM sparse Signed-off-by: Maurizio Casciano --- drivers/media/i2c/ov2740.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index 39003c1632ad..8f0ad5dbb245 100644 --- a/drivers/media/i2c/ov2740.c +++ b/drivers/media/i2c/ov2740.c @@ -1461,10 +1461,9 @@ static DEFINE_RUNTIME_DEV_PM_OPS(ov2740_pm_ops, ov27= 40_suspend, ov2740_resume, NULL); =20 static const struct acpi_device_id ov2740_acpi_ids[] =3D { - {"INT3474"}, - {} + { .id =3D "INT3474" }, + { } }; - MODULE_DEVICE_TABLE(acpi, ov2740_acpi_ids); =20 static struct i2c_driver ov2740_i2c_driver =3D { --=20 2.53.0 From nobody Sat Sep 26 10:01:29 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5010E4A5C32 for ; Wed, 2 Sep 2026 14:53:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360839; cv=none; b=pd/8uuVeXcuQlnNBXbwNljVazepBkRV6VXnxmechIMozxxC+Xgnd5KhmYpRxn/UcUooZXYa1p2ySb6tuyxjWVs5SdpzsBtcgImN/wuG45WTaOn0ut6hqgm8CNvMw7f+hRwb5MxKDN9pJlbOswHZbXX2+CKNl/ES/K3JLegFz+IU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360839; c=relaxed/simple; bh=GY/0GwAYKkdGCB2mGjNb9iNJ3uZoj4B7s9rKLLBlD0s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=O4nj35ghrozpcQvN03H135uyKrrZ5G5aGlbXOM4h7YAtagOFlR1sMDQV8goCmOMH1ENtHFevsmeHOVUh9AWm5BbIkRPIGEcbx2rUuRtwi7RZ7A78uh1YYzVVjmVnpZ2RdzBV1YdrKh3yewOFwL+DlMk0CUzYEnlvtXuGAoie0bk= 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=FBITmk4X; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FBITmk4X" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-484415c8bf2so922732f8f.0 for ; Wed, 02 Sep 2026 07:53:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360836; x=1788965636; 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=FBITmk4XJwvz1iq5MNEQZGf5rXRo9FWZ96L2epS7U34syeRfHXFyaP4hdZ8f7PpOn4 7RYdUyzbA04vhKZfRE6p5kug1BBK7cQhtmDetb9ke82QKh4eNbJI5k52VFoqJwiH1+wX 7khUeEbm71ZvrxhrYqpn3ok5v38T2+bZ1iRZdjy4ZCa1Hz5yMpOKNJczwEnn+CTEaknV Ong7FXZLpgyI4XbQkHxcHt2jlFK+kCu1dUMTRaS2l2REJagMtVnwBQJAOdpXuFXuUZWE Sr6g+w4RSiC/WD3HWthezaq5aBysj/FAsdpYfgyqTHqwfPs4lQ48qn138fg6fn8TLCQx 9lYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360836; x=1788965636; 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=hkR3NHL+s5nkyrbe0cXj/JJVzuSPzVkgc+R+RTd2U7AZYplgFsD36YRR2ZcdXDBDog ipjXpL9M1nig9erSyesBGZE7+SSvE7QRL2CYVBw9iojAP/S/epcDmfBcO39O0S81UUQF TI12nSwkJrPxHIcp/mde2DA/DqsWWm1D49CtIA/kYxfSAhd/MhDxTMg1IpCNbICkHhto oJMbl0MpyL5yjorS28iLXLVS/MXRDtmrQUvAduZGazh2LkRSgEiB8OpEcUMn80ZbtXoO BRjkaigCBUn7xo5vpekW5WscmHhm0ojPe2Bbch5NOsgl88R2NpD4IV+aJ9jbF7mCU3U8 ly1g== X-Forwarded-Encrypted: i=1; AKwUvByXKb7Sur2HIQwHAOOibBgwYRTmD03VkdruvS9tRIqr3AFuheD9cXE11BE4yB5t6mQqp2yu4Axe6tt4yBc=@vger.kernel.org X-Gm-Message-State: AFuF++nilLO5NHZXz2Nm+32jrGPMR7IijlCDLck9bDkL98D7+VyCz8hx +ZzrZDrY7+38+yc7+LAMbP4g+TLndNdMjmTRTfNZgE4EcPpvAP3WKDHM X-Gm-Gg: AYBFou2td7rTEwJpwYJn9UUSpsl6SCZApZOzn6oYkdkLT+/BSBNJmdbDKqmmecNdWP1 FUSIQyMRSJltevA9RzIJTdjqxCJnBufEpV93b9NNx1ZqzXval9eq51EVCFpbOHek38s0/XGBhhm 82ZbI20eJuSpupkeIL/yAr41WvmOuaZ7HUY2oaMUvemlYmBHfnIgiFC4RmclYu4rqribVd/+y33 oc+32jhkvbDp1b+dXvF1oHzdsEGgdsv1wrRzbjq9N++2uG00gxYGH6e8YmPtvT1Sr5gmqzfaSs6 eDVnbOTGqZSlUD0GCbTONA1+qtyFVE9c3hLTByo/OX0Tj1amcgCHMz9IPcUJskMF43Bw0ECx7WF hFpPDn/nsiNxwm+EBbzKpG1xUHhwQtzOqeOQFb+whWr6JcwGScK7v8fjYMMFoILrKHkosrPaDJw 9YSHyFnRHYPBedG2Utgh5TzwO7m8nOvcBUQX7jeoyy9qGrRdiiQOJ//YZI4MA5uWrwQgxy7SfK0 33aurKOhbcSDvqxlaEMwMnvqnTO21bCQ6P0I4ZOtRKd X-Received: by 2002:a05:6000:40cc:b0:484:4880:449d with SMTP id ffacd0b85a97d-48488dee57bmr8598775f8f.3.1788360836348; Wed, 02 Sep 2026 07:53:56 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.53.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:53:55 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 04/16] media: ov2740: Add OVTI2740 ACPI ID Date: Wed, 2 Sep 2026 16:53:33 +0200 Message-ID: <38149ff00ebb24aca8089ca2e3aed3fb8bf8a06e.1788360629.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Firmware may enumerate OV2740 image sensors using the OVTI2740 ACPI ID. Add it to the existing ACPI match table. Signed-off-by: Maurizio Casciano --- 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 10:01:29 2026 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 941054A5EA3 for ; Wed, 2 Sep 2026 14:54:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360843; cv=none; b=JbmDC4soSRMeFdbzS+fb7JBRh7FL7av41cYF/wB79sqSgfL4oOXUTMZ4lDXBcIlFXgnD+coVPBVzCNrrQ+EdxSXoF1gzEI40JDjM95UyCEOXwKDUaoNmyXSM2CSlDFpcdZXnTkHewM7Lh65SnWbCVSQHWTD2vhH6GUl9yfh8gHI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360843; c=relaxed/simple; bh=TXh1grcukppVIGRq/jtRuAjsCenqoiHsQqtjG9cBjkQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rQH3VEeq5CDNo0GkRNGwKK+ZQqkn2he5Mvgb6u896EW7ijHWIEer+8MtnKmuGru05owltr4+ykHGFYdF0IAASQfpL3uvrfNGNAlB4tGmGSjkMhOQ3X7nvPQVHW9njLyET94N/9wV5tkgVMAi8K/P7UpVjEUgHNrP3MZEbu/z9F8= 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=K4elF1GU; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="K4elF1GU" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-482e257a23aso874664f8f.0 for ; Wed, 02 Sep 2026 07:54:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360838; x=1788965638; 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=2f+YxbIheZwHZGTF63Z6dyP3lfK44zOBXHl5f5gYzlI=; b=K4elF1GU4qjkw5SwWRXZTUqmwpMvZn0PDgxNLuLA8oGShzP9kBwK2sTmVAJd8o1ira uqXnzs1hme/RvaWuObqjIP65X+ieK1cTR5ORw7hy+P17F9mS2I/OW6QBK3zxJaju3x0v dV5qRK3ebPQpGgUWm+6jBEkw1jdPiEJzvAYvtLPL8zgKBLJ0b0p+phXJ7LJ0uQUBNlH4 ++V/KkxLHpzthAQYrDIYuWzSFBdJ6JJJt8vRKKvXbvOP11OTlFr6cQqNG4eZrDs8ngiY y/pgYMYtuM11AaQ+yGllFMdYXzz1uMAd3atNoCkGFQSrCpRKb0huuz6pCB3RGUrHPUvr eyog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360838; x=1788965638; 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=2f+YxbIheZwHZGTF63Z6dyP3lfK44zOBXHl5f5gYzlI=; b=fJj8u/lVYeI4hUlqLgPIkILDNAKzln/5fGZTmlx040PoY0PC+AQL9ojRcQ6gWFEEYm bsCs82J4uFrh3g2g3yzAPnUA0w2PZUXQEcP5d/BmLKjT/KIB8I8C8DavHGNN1L11Vgav tnHL3zA5kS/la/cLa/luNkbd2qf3ucLCjGKDs2ZPvh9CnR1sEohDkrr8g4eT0tzsc6UO b6pY8HN8IMGje+N2Ik8XT08JNhLhg2V4qi6s+1xpAUl7Qe79sw78lEcwCFm1GQi6ZQeZ 5wnabqWR7UhJ6tnVlj8PV5nW1hfesqRHXGG1g4zy7KFTUzFDFrEGrXJFFeTL+RjhH4pO PTew== X-Forwarded-Encrypted: i=1; AKwUvBx++0K/RuMwcd+wlcOLT9K+/GC4AmoRc7sADWWgKVP0yy8tKHzXLrCn7mNdfWSZCuwBBFnP4N7i15scJoU=@vger.kernel.org X-Gm-Message-State: AFuF++mbpLe9n6O2Nf/eA8rh2jv77VU6ZC2kKIvqAOJoiCGfzO5jAse7 UaqncGZ5X1KeRrZ2A2Vm3SgNVCGK1LXQm9XshWbdUbrHxaYGkkF/MJjt X-Gm-Gg: AYBFou36gIKipTL9wop7qTjatyyek+7bIjdUfkpXOVXpDos1Ngs3CExkKbRnPVgeehj nae27WsURwkGNWs1lWQfbLRAizpu1uOjgadGuUvCZcO2Pz0MrqlGkOiFM7a2ClIusVjNmRyc28R l/PSWHB0zq0kp7ray1F0J0qxCBGQCd70txhnxQesZMxvJ6PflC8XCQA9DqdaDQTmQ8IuWEFK6kV SmGPGMtyf7NqEr+BkFVyzbtkUrk1JN3uaJSf2rTJ3pjQsYl0kqhu/zxeKKHI/IyKHIQgCtoycTu FmDU/idV1we/1/XGYsPTh9IT0xbw/iollA69abwzJr0QA+iq5CgWRjWNC+zHyygEDUaFaiD9ent sQIg2fYELyfYeW5RiRustgr3RQgzr0TOtsiIOyitwbu6ESFwYGZ+27dy2dudtwjf7424lefxs8L yLxF7aA7IX2JoxNWtcQ4TgkZSe/Wl6cdUoza8tQBoV3El8z1YBgYqyYrYRo8qlTh9ctbHgvSEHs NlS2quDIAsSYpslBZtIJmMXBp1yMH2tW25ka44ByrFg X-Received: by 2002:a05:6000:288b:b0:482:f09f:b262 with SMTP id ffacd0b85a97d-484913b88a9mr8501885f8f.20.1788360838300; Wed, 02 Sep 2026 07:53:58 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.53.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:53:57 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 05/16] media: ov8858: Add INT3477 ACPI ID Date: Wed, 2 Sep 2026 16:53:34 +0200 Message-ID: <3cd0749fa48afa1aa89781867bef49d3e6dd4e30.1788360629.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Firmware may use INT3477 as the ACPI hardware ID for an OV8858 image sensor. Add an ACPI match table for that ID. Signed-off-by: Maurizio Casciano --- drivers/media/i2c/ov8858.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/media/i2c/ov8858.c b/drivers/media/i2c/ov8858.c index e040c1fa0a94..f639d2664d81 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 @@ -2091,6 +2092,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 */ }, @@ -2101,6 +2108,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 10:01:29 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 51DAB4A5EC0 for ; Wed, 2 Sep 2026 14:54:02 +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=1788360846; cv=none; b=nlnMgQxw5fygivlOuZhate+8ZyD8GR2HKNCnQyCEAXC4QOfwRuUbYI+dNdEQpeUwKsOgTcrtWYkv8DHpIylizi8/Hh8i6BxPMMOENMujggh3dd/lBpdf1z1lJK605KTiS1hNxgx3/Gt9wq9OFJmMOANlfEilNton3AN2oRFaRyU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360846; c=relaxed/simple; bh=fnLuAuk4DdEaA7jml3VwGJrscDjqw5zgrKIhfNOResY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JQwGHIhP3ijKFPy4ftT1C10cTYrPOVYuq9iekPrappQfC8hGLucv+xQNmggMNMDnyeJY01oVKkKEsxCheIP7NSq4Ye8NpFCuOGm53rupuxqiD7BMNYiSwYN1jfXi45AyXxkbiY+ua4TEvNApg0amRLd8ruSqHxPFZwJ+lnpVjAk= 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=j0uc2rXA; 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="j0uc2rXA" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-47de0093c42so1270930f8f.3 for ; Wed, 02 Sep 2026 07:54:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360840; x=1788965640; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=KqTr/x5yNF9r4lu6CVzssQgLLUaZ7eL+KNzZNSw0R0g=; b=j0uc2rXAFpFb0VhCOi/yS0YHdIlhYhHeFZdH0QSUcsBjNGzfk/zfSxd9JP9Yd/W6Mi GFwAmuQRGvxdXtAf+j8V3vSjjX4ToXx8SrP6Sd5NKTjkkkkZek6H/rTYj0ccg1JjLv87 3FJf92Wg6GhWlCkr49w/c9vilq53MDXCPmEXkVpDiS2JKyWtmJJFIbQwAFhFOrrhClXo dccKVrVofhuS+zBbnQGAMeeXl63WElEnJSGzWu8YjaL9seui62U+jYw85E5pVpHeH2eg y0jXilkPuoow0cQHAmqQxjohK6LuEq4OekH9a5TvHhhzILu5G0/+t3VDtmqy6slGAqDz TpFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360840; x=1788965640; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=KqTr/x5yNF9r4lu6CVzssQgLLUaZ7eL+KNzZNSw0R0g=; b=DN1woHxTY1iryobqD7IZTnhMrj+CRvY2JU0OHW194+dqeep5pa3gpc7qIMc0dzqnmh uP7pW9zYy1sEBkLPjUieND/i1Sbhp1w5wFJrMMpF6U/1iWWtcQrQuj95pCzSvzGryZ7o WVadpButIJYjI1IgN4V29/jsveDc8G0RRGCZzh9PPxi8WzZ92h5o3aeDtg9nhBs+H1b1 Boj44Uo1OO3FlA1mazqOd6hhg+eOMeYt0Zq7iriuDvydrKafPcdRpUw8MlpC8faVs32g KycsD3TXAOWqCYh8iKaJYQFO1Rsu5A20t9R3DVKgFW284S3vwwYdNC12ARbnF7gfcMiq Ag+g== X-Forwarded-Encrypted: i=1; AKwUvBxtE5BStAz6tXVL2a43PrW5ZTgYUE3giGeKC6scyqg2NEBJoULqtxHnZeSqPy9cxwy7rpxnI93tfCLPdF4=@vger.kernel.org X-Gm-Message-State: AFuF++lNOtCh+RTPTh6EnXhvSMnN/M9xFaY87tWPek1C6B23P4O5bEIx d0qGl2hYjCUZiAPMUsbGE3Vb+7+clgm45QpAzQ9i25WBK4KOeHk+1kct X-Gm-Gg: AYBFou1YS/yYMPrNecQYNrRTLPGwt6yLveEGRgtzkwa084LfRloJQ3zIMIHazgvKxWQ 2gOwnKyVIDSKdC5tr6fd1eKogDOEcLlQSt5ntrfSDeuY/R/mozJt6exdVrcWlYyQ9C+LT5TYXad XE7T84TWZKCLNiTsfV0iRZLhcs3A04V0DfjkYi9Kdk1P8mC0CLhtoq9qZ1LSyyQNvdbiHb3NNNb qMiGieYi33FyjjcrXDZZ2FRKIlFr+s04kL5O7yIAQeUVJgcpfAiuidj8HA3mnM5yNKwwrFDOeZw WdejIYB/TQwWXxRabrTxQGfz6cpLaA1aUOVhUV8LEDqokeS/ZUfPTxh4vY+i2268Ypo+k/LGzhd 37uyYefP2501ZsLpwdodrZkMJmVvm0xYOc9Wr/iR9YksK3Kxt/bHfQ7Xjcasq/RJ24o/GQZuykM LYBeRIAGEsIGVPtbmwuW5EMVARD0gozMwVj65Gkvu1MOeVNb2m0I6HJ0AdRBgZdyEPs28gyICu2 0xrABG1XK8bNSf2fgMXH2vy2AZDVK8PJAW68tqm+YEN X-Received: by 2002:a05:6000:4014:b0:482:fb97:2ae0 with SMTP id ffacd0b85a97d-484913b85a0mr10022359f8f.14.1788360840251; Wed, 02 Sep 2026 07:54:00 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.53.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:53:59 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 06/16] media: intel: ipu-bridge: Add Yoga Book camera sensors Date: Wed, 2 Sep 2026 16:53:35 +0200 Message-ID: <4ccc1be17658cdf9ff1267d66db6c2b5a65d6e18.1788360629.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: LLM sparse Reviewed-by: Andy Shevchenko --- drivers/media/pci/intel/ipu-bridge.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/media/pci/intel/ipu-bridge.c b/drivers/media/pci/intel= /ipu-bridge.c index 1bb3a3e98d6b..47317c423fad 100644 --- a/drivers/media/pci/intel/ipu-bridge.c +++ b/drivers/media/pci/intel/ipu-bridge.c @@ -65,6 +65,8 @@ static const struct ipu_sensor_config ipu_supported_senso= rs[] =3D { IPU_SENSOR_CONFIG("INT33F0", 1, 384000000), /* Omnivision OV2740 */ IPU_SENSOR_CONFIG("INT3474", 1, 180000000), + /* Omnivision OV8858 */ + IPU_SENSOR_CONFIG("INT3477", 1, 360000000), /* Omnivision OV5670 */ IPU_SENSOR_CONFIG("INT3479", 1, 422400000), /* Omnivision OV8865 */ @@ -93,6 +95,8 @@ static const struct ipu_sensor_config ipu_supported_senso= rs[] =3D { IPU_SENSOR_CONFIG("OVTIDB10", 1, 560000000), /* Omnivision OV2680 */ IPU_SENSOR_CONFIG("OVTI2680", 1, 331200000), + /* Omnivision OV2740 */ + IPU_SENSOR_CONFIG("OVTI2740", 1, 360000000), /* Omnivision OV5675 */ IPU_SENSOR_CONFIG("OVTI5675", 1, 450000000), /* Omnivision OV8856 */ --=20 2.53.0 From nobody Sat Sep 26 10:01:29 2026 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7DAEF4A5C3D for ; Wed, 2 Sep 2026 14:54:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360848; cv=none; b=WkYmv4QKZkzgY3b86WwrGAba2J5lL+UfGpDhbl2J5LxmuM1HT8955383W78Nc/Ls+nl9Iyf/hhnPW0HRQsdnmLVkPB6Zj8nLyx6Z8zi8QxM2CAy1ekNG7TsElZIk8xq1CMF70NCkf5L+K7DM24BbToFUP/EROjL8wrNFgMSdwb8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360848; c=relaxed/simple; bh=zMz6YudLMNRyvt1tJOUeINHtau4Y9OLX8SPtgDvi43k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rrFysXBOKxq7kfb0G6/oQXP+2JsP9BwvAHR3gsIKcSyITDMFTrfC3WNjKwV7j0iwM7mdRS3Pp3lWPr72WKBqnyqlTj6Y1juxFohP6dSjlqZRtMWxjOSY4cqgS796s3qdTc0ZePHu6PuVRiEpKOC+BwnvMUU3wUSHnKRF02WZAto= 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=W+K4zmnP; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="W+K4zmnP" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-482f2ee53e7so745661f8f.1 for ; Wed, 02 Sep 2026 07:54:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360842; x=1788965642; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=DBHgyyi12Pg5PI+CSb0AvNcQMuxkHJiS6M4/J+uLYMc=; b=W+K4zmnPc3dOJnxrKmMJ2Uj696MymC1q+s/G9dvtenar2TqQ8SLdeQ8cI3a9R/PC+1 U3UPh/IJhFX0DDxwyHZ1Ez8WQNW3kxicdFm6RVuevwNFVQFM1G/zlXYO2z1FR15Iyjfj pDm4Sl9bH+DMaIGZYnkbR3mcqSOAuz2iJZbJMtKYhMroLT5e5kWcMUBvgwlUX9oDPqRd Imvof7vT0W4L0JeHvVD2xHkK8gFOb247c0yzAKPkrzbLrFJ9Gx5ibGUlPkRLkt/ugT82 b/1FBtaDJDJbDy6b4SJO6J5QJCYzmCYYDeGB9Yuxtuej0hAPHUic4y956XKIG9ykaWU2 s4gA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360842; x=1788965642; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=DBHgyyi12Pg5PI+CSb0AvNcQMuxkHJiS6M4/J+uLYMc=; b=p6emu5XzAHI82+QdzqOaF2tV5iCu5ZtoZfnre4Raq/ZBRH0fc9BUihdHhv4tYy66UD cZi+bSLr8cOka9VBvEXumtfeOUT1YzqzCm3ri6ZUT3MIWb/jX3SjpghGLUMl3dNNWKHa p6uAnO8uhhmQUvjGgkmDQ/6JA62OWoQ5LLfsVdq0PVQ/B5N/rvHzB8gBZfEDqN9DAaUq oDxtZg/VwRG2V8TWHh4oyps6dy0aknsOEV9Whf54bFguS39S4Wfuzc7DQVDKm44/uSMe bwnGJJqf2CjmTsTtp5mS0OYmaKaBybof1pMqb4EaTuG0ZkWbLgWCzv1qHBQ2n5Cp/yDM B+uw== X-Forwarded-Encrypted: i=1; AKwUvBwCX0d5GMcPRM30Oz0Nu/vwGsZ1asDwJySkDFXNH5fQUk2fv/CLMx+Lo8XqowCnlERyUHHhENPVH6XHWPM=@vger.kernel.org X-Gm-Message-State: AFuF++nhZqcFh4bzDzjUFgd4BpBPYTjhuZ86LDvHVBk28OKMBd2trtZb CVJznKnbW8NL1/H7j9ubB+UeTrkOxA4GOblU1noMdVroIMV/H5khXlh9 X-Gm-Gg: AYBFou2D/T8fpDq2Ze1NLSaYZJWObiJl3vjJCVMS+0nS3y6iDNCtZDEWcFcPhU8uwMV oHj4fkdYd5Sa/QkgKjCIhiiXWe/7k1JPgzFMQjbSebBVqhxQksww8ul7vtBbaGfxhqWEfVwzmFm hL6UoLDxr/zWmZFbiFQIFIWfM/7UKJUpqcmaxrCvvxkVh1fFKSLhJmMvNBXK7V+3mn0ZsP4W9qN KfSAnaqfgz8Xl3gZ33DQ0MagWhNtRQ5VSgd+YR8S8GUIIfPsR9zvJ0Am7Xw5tf3deY5DyMRROnm UUVzuPb0oWg/3aKM/OzbzGoUQGz4mYwvK4J/wneQACWCORxEQ7L0uA+ucJSkCpgVrmoXzJbF0aJ ieBd/D4AvbR6aWvOAvZggeFS5XMUB7krGcqHRNlJ/xxBIEDZE/Ge/DmqM/fjYklh+U4cK0+33i5 uThjgw37IPZ7uLmv+gqPaL6rNjnnRFFWKvHQvZms+ajcjQSnIK4mXdXkZCoaVGNU3hcM2+LYWuf x5hVf/IyjbMIZbBQLpcsb+earN4Ds38Si8TrefcujqMfyeRDhZvY4Y= X-Received: by 2002:a05:6000:4819:b0:484:4537:95ed with SMTP id ffacd0b85a97d-48488efe633mr10448603f8f.5.1788360842124; Wed, 02 Sep 2026 07:54:02 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.54.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:54:01 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 07/16] media: atomisp: Add Yoga Book camera configuration Date: Wed, 2 Sep 2026 16:53:36 +0200 Message-ID: <3aa1bfa59816f3fab70801434659bdc2885ba4a1.1788360629.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Yoga Book YB1-X91 firmware lacks usable AtomISP configuration for both cameras. Rear INT3477 OV8858 uses four CSI-2 lanes and a WV517S actuator, while the front OVTI2740 firmware reports the wrong lane count. Add the rear sensor configuration and a DMI-scoped two-lane override for OVTI2740:00. Add the front sensor configuration separately once its link frequency can be supplied at the same time. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse Reviewed-by: Andy Shevchenko --- .../media/atomisp/pci/atomisp_csi2_bridge.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c b/driv= ers/staging/media/atomisp/pci/atomisp_csi2_bridge.c index cca91c6d71a5..56da454f0d9e 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c +++ b/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c @@ -74,6 +74,12 @@ static struct gmin_cfg_var lenovo_ideapad_miix_310_vars[= ] =3D { {} }; =20 +static struct gmin_cfg_var lenovo_yogabook_x91_vars[] =3D { + /* The vendor driver and sensor modes use two CSI data lanes. */ + { "OVTI2740:00", "CsiLanes", "2" }, + {} +}; + static struct gmin_cfg_var xiaomi_mipad2_vars[] =3D { /* _DSM contains the wrong CsiPort for the front facing OV5693 sensor */ { "INT33BE:00", "CsiPort", "0" }, @@ -83,6 +89,14 @@ static struct gmin_cfg_var xiaomi_mipad2_vars[] =3D { }; =20 static const struct dmi_system_id gmin_cfg_dmi_overrides[] =3D { + { + /* Lenovo Yoga Book X91L */ + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_NAME, "Lenovo YB1-X91L"), + }, + .driver_data =3D lenovo_yogabook_x91_vars, + }, { /* Lenovo Ideapad Miix 310 */ .matches =3D { @@ -359,7 +373,10 @@ static const struct acpi_device_id atomisp_sensor_conf= igs[] =3D { * the sensor fails to start streaming when instantiating * an i2c-client for the VCM, so it is disabled for now. */ - ATOMISP_SENSOR_CONFIG("INT33BE", 2, false), /* OV5693 */ + /* OV5693 */ + ATOMISP_SENSOR_CONFIG("INT33BE", 2, false), + /* OV8858 */ + ATOMISP_SENSOR_CONFIG("INT3477", 4, true), {} }; =20 --=20 2.53.0 From nobody Sat Sep 26 10:01:29 2026 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B0A174A5C55 for ; Wed, 2 Sep 2026 14:54:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360849; cv=none; b=kXEg75EHLEWvkYY3j1UtCciCcE2ClU9m91vWfh2zSOY51Tc3ModMztDnRWnJEEKfwdB2eQIqPZtTfiaZjMOToa0lFLa32eQhOYnrtoJUpP6qoC187PzdoY7idnq5ksAtbvHRtQjUPKYheJiFXCUxdV8uqeiIc2XjQOaXrrsBfIc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360849; c=relaxed/simple; bh=4JjOP6xA1fWJTzg0nGLviFM/abTCFakLq0J+yMqID+Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nnEQ9smefd0eMMK6NlC/SlhFS7uuuiUdVngLgrIq0BrE6axehAdaKrbpQV7HE08gDaUN8aW++7hRpCoCxodDzESxNWkuiJVcLFzlCdAqAuXjD2pa8ZjK1ydYupscWgOHBL2WN7mt+JVUwFabu0PP2x0W0OboJ0HUWU0DOtvCfCo= 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=Bkmlr74p; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Bkmlr74p" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-482dd6ee390so1164054f8f.3 for ; Wed, 02 Sep 2026 07:54:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360844; x=1788965644; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=brlxyZ2t63L8fQignAF7hkZpVD232LlJffHWx51Zan4=; b=Bkmlr74pF9BV96kDstPUPzeMqUcJzUMl4FDP740XVLZHDQYIWJiRRRXmeGDhLc5k1I hg/bVgD7Y/034NFFH+98nYXsPlOs5qkOb2UQi2wRAeAsx1RvRRkRRFXi3P/A/T39UGmC pJpe5mOwic7isM0lEOBDEu5OmFVl5sQtWveWTbSxPllZbIw0Wyo4eqseDa9lIseig6wK xKHPgjP12E5Xodm+SQpQtX7B/rQdKiYdlYwNaIOR2OMfyCRhJxvDOlk4gJiilKHGTX4l ZwOOBvjdWiFZmrrYpxT7ZongYZxrU9PjFYMqxQ2DjVPSBfKXRmN111Srw92IUU1v2/au v4Cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360844; x=1788965644; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=brlxyZ2t63L8fQignAF7hkZpVD232LlJffHWx51Zan4=; b=UcNyLxusJmWbZzjDu75EaqHkwWh5+onZk/DWLxDrEItrhUiB/8+kr8oUsK1PxtA+f1 m06VCIZHTapB6GsVYgl7jEePmnVmC7z4SKzmIq5vOiQrHthZ58XWcZSKA7hTRYMtc9PK 46gUooB9Wl2bx+n7YCmcUfn96GLHHv/fCjZ9ES+Izmz3cSNx9BvJtvvAQdkMyrnfWgxy Ec/Mcjouu+2pPbxd0Nhu/rxriPSr8+vrpelMAaRgl/h2TLW+pKIgUvcwLgqs4CPtUKjC vpCPxVLw9bJbd9aG7lQHpxpCOTiT6L81GDoy6RkGdBnnAmQtKEzjk5BQHuZi8nlrYzK2 STWg== X-Forwarded-Encrypted: i=1; AKwUvBxObr+13jp0IpcUf/p/COjbBW+avyudl/0XUiBw7CDfWV4ArkHAYLe2CRUM6exItfPHmKoDBupVELy6pDc=@vger.kernel.org X-Gm-Message-State: AFuF++mwr0L/qCdQs96IDq1J9MIkYevnq6rRzo9c9ptoNHahLrM20g3E cNU8SXhq0adInM5Iz6i4AVAXaO7GcuPKK+tcQcDJ3ZFvrCVUMDxV4oJx X-Gm-Gg: AYBFou3WABK/y3i3fvVYwXiyBotlWL4Ix4lkaPUOTKcukfSOFdBu4exTO3SbkoQ5nGt KNcgWNiJK8MV6xj0k7cBmd65fJgTgy3fVXP/l7RTzrzCT1/X4DYfYFREvq5l1BvXlYZvQAp3psf Qsl3XOvgYaitde+YqbFEWghlO3IvvpV6p6IpcxYY5Cnooc7+AsvWQG7mcMcUZCISpHsSoKUVLWu 1bReRkYMKWNy9Gg+yvNEm+2QgJkBFOCTnCRdlpRRvsMoMYFgeKzY9zwoBDhU9Y+vATSOvwBxP3t rliQjCkBqOPpvnOA+Wm/tOw1c7kcVKmWUwTiUVbvVxu26QNvWsW5ViDhuOaA/to/lfjY6V+rW5o xVMIxyszb44HtO2pl1SLV2DG1AYHTNnljinJu0yWIoufkypqhSR6pUR0CHaPZ8vSV/J2ukNrzNz 2D/Op9wKBwj/eD6+K1FI2/VAzK0H7Iy7+aZ8zdVdIoy65QedXu7l7dShZw09qm9mZMGq0mQkv+r H5+fAO2QGXUqmyX/U69sAEdK5I7esQW4zN2oIWM2WGWEBbayrBZfOY= X-Received: by 2002:a05:6000:1847:b0:484:3931:c698 with SMTP id ffacd0b85a97d-48488dee004mr9537119f8f.5.1788360843914; Wed, 02 Sep 2026 07:54:03 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.54.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:54:03 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 08/16] media: ov2740: support 288 MHz link frequency Date: Wed, 2 Sep 2026 16:53:37 +0200 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Lenovo Yoga Book YB1-X91 front camera uses two CSI-2 lanes at a 288 MHz link frequency. Add the matching PLL configuration and mode timing. Reuse the existing 1932x1092 crop and mode register list so the Bayer order remains SGRBG across link frequencies. Cropping the CSI-2 receiver output to a smaller processed frame is a userspace pipeline decision. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- drivers/media/i2c/ov2740.c | 43 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index 18bb3ac9701f..f3d91c87b3d5 100644 --- a/drivers/media/i2c/ov2740.c +++ b/drivers/media/i2c/ov2740.c @@ -12,12 +12,14 @@ #include #include #include +#include #include #include #include =20 -#define OV2740_LINK_FREQ_360MHZ 360000000ULL -#define OV2740_LINK_FREQ_180MHZ 180000000ULL +#define OV2740_LINK_FREQ_360MHZ (360 * HZ_PER_MHZ) +#define OV2740_LINK_FREQ_288MHZ (288 * HZ_PER_MHZ) +#define OV2740_LINK_FREQ_180MHZ (180 * HZ_PER_MHZ) #define OV2740_SCLK 72000000LL #define OV2740_MCLK 19200000 #define OV2740_DATA_LANES 2 @@ -91,6 +93,7 @@ struct nvm_data { =20 enum { OV2740_LINK_FREQ_360MHZ_INDEX, + OV2740_LINK_FREQ_288MHZ_INDEX, OV2740_LINK_FREQ_180MHZ_INDEX, }; =20 @@ -142,6 +145,14 @@ static const struct ov2740_reg mipi_data_rate_720mbps[= ] =3D { {0x0312, 0x11}, }; =20 +static const struct ov2740_reg mipi_data_rate_576mbps[] =3D { + {0x0302, 0x1e}, + {0x0303, 0x00}, + {0x030d, 0x1e}, + {0x030e, 0x02}, + {0x0312, 0x01}, +}; + static const struct ov2740_reg mipi_data_rate_360mbps[] =3D { {0x0302, 0x4b}, {0x0303, 0x01}, @@ -468,6 +479,7 @@ static const char * const ov2740_test_pattern_menu[] = =3D { =20 static const s64 link_freq_menu_items[] =3D { OV2740_LINK_FREQ_360MHZ, + OV2740_LINK_FREQ_288MHZ, OV2740_LINK_FREQ_180MHZ, }; =20 @@ -478,6 +490,12 @@ static const struct ov2740_link_freq_config link_freq_= configs[] =3D { .regs =3D mipi_data_rate_720mbps, } }, + [OV2740_LINK_FREQ_288MHZ_INDEX] =3D { + .reg_list =3D { + .num_of_regs =3D ARRAY_SIZE(mipi_data_rate_576mbps), + .regs =3D mipi_data_rate_576mbps, + } + }, [OV2740_LINK_FREQ_180MHZ_INDEX] =3D { .reg_list =3D { .num_of_regs =3D ARRAY_SIZE(mipi_data_rate_360mbps), @@ -502,6 +520,22 @@ static const struct ov2740_mode supported_modes_360mhz= [] =3D { }, }; =20 +static const struct ov2740_mode supported_modes_288mhz[] =3D { + { + .width =3D 1932, + .height =3D 1092, + .hts =3D 2160, + .vts_min =3D 1776, + .vts_def =3D 1776, + .vts_max =3D 32767, + .reg_list =3D { + .num_of_regs =3D ARRAY_SIZE(mode_1932x1092_regs_360mhz), + .regs =3D mode_1932x1092_regs_360mhz, + }, + .link_freq_index =3D OV2740_LINK_FREQ_288MHZ_INDEX, + }, +}; + static const struct ov2740_mode supported_modes_180mhz[] =3D { { .width =3D 1932, @@ -1178,6 +1212,11 @@ static int ov2740_check_hwcfg(struct ov2740 *ov2740) ov2740->supported_modes_count =3D ARRAY_SIZE(supported_modes_360mhz); break; + case OV2740_LINK_FREQ_288MHZ_INDEX: + ov2740->supported_modes =3D supported_modes_288mhz; + ov2740->supported_modes_count =3D + ARRAY_SIZE(supported_modes_288mhz); + break; case OV2740_LINK_FREQ_180MHZ_INDEX: ov2740->supported_modes =3D supported_modes_180mhz; ov2740->supported_modes_count =3D --=20 2.53.0 From nobody Sat Sep 26 10:01:29 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B01B54A5EB8 for ; Wed, 2 Sep 2026 14:54:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360851; cv=none; b=Z4HvNiB8HkVR8ZWNbcJTedYW31Dx9C69e2bA7l80fezyNzZ5FGOCR6z+ES3c4dGOm/fk6LC9aNoJPzKpL1/nw67WbOtQ+8XSCPrl5GkhLDnu92vK6xE73MdLoqI1SEZct8MxNkKptd51hMIHMnAHkP7kQYgVvu9NUVvyBISzaWs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360851; c=relaxed/simple; bh=Bc5RyoPyL8jsNo0TXqrSYlmk5vjAHujKpDa9NlkLa3Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZkjvNCz9EUpXFmJ6dkcgfVVvDgXnmdMeRV3aoGKod0vnPOgLXPxvzIXiDBiXjDoSg5x4V7deTT1yFwPs/siQ8mCdhPmty0Yn7HVs23ndxsBTx8BEZe8rC6zp5TaNR/MWadB37xLwumbyKHnpm1b+uLhMtulggF2qTyUyWK+Djdc= 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=mU5k1Z4g; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mU5k1Z4g" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-48436216a98so766874f8f.0 for ; Wed, 02 Sep 2026 07:54:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360846; x=1788965646; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Z6E5NgofUMoTlxAp6O0bNxVMULKG1XOVZoONL4mrJbw=; b=mU5k1Z4gPFf4rcRZW5Y1qZjCOiV/bVBFWVgO/IRoZKZ7X8FNdXMcnfq2xWh6RzcDzv 2CUk7qu/zQj+fBvz7ikbjXemufTBObRpVvgfM3NcOIIzU+j4kt5scHR384S98Jyme9Zv c4yIcrRBN+QndF+Wsjtd4ijrH9HlmwhEz/Bv/TvluS2wg9WeLNmGotR05j2a7YTnFPMC 51r1lgZOAuNVYLboMPG3rIeqPl1jP2C/GvF9ZIh7hRAnb0miztb6lnTYPVfa3o780J0s smh5OtsSjFZgfpjoIaXzPZ9nCqdj7ZHsgXTXtaQ4mKp6kGS40tre+DJxI1SgYtPCZoKT /W9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360846; x=1788965646; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Z6E5NgofUMoTlxAp6O0bNxVMULKG1XOVZoONL4mrJbw=; b=hQHnMz6b2q5LG7IUZ/ROs+dtHwzq0Quv+QR71VHXO6NCb7/86FJ74SUAZZfC2Yoo+8 pNN+hk0jbqGkLCvNdA8wdRV0j95hrr9zCt66EtTWn5r2dAJvAJHSIbS+InctJnCHwAlP J/cackiHAWMDRHKxDyObVLwlXJjNapRkYamBBTKSVkn2cKWHtHSLHbo2Ql4t4ha6DJ2H 2okCuv3sECz7JC3L9mgHPvCPgge01yR5Cc1XXOjNEMyzD5jTlBjIZm07p/5XKnd3CkEq Tdee+NpihPlcVwddXVsJy2caDYqLlXTmDwnb58ECYfl/foZFu8kVFLX2WNz5xhtoOL8z esiQ== X-Forwarded-Encrypted: i=1; AKwUvBwTKaNKIE2z90pdWtOSKOz61khRdT53LUW/C9cWf/mbxkrz1uE3PWkEh562Tjtkgyoeifo6qH+T+YGe2uI=@vger.kernel.org X-Gm-Message-State: AFuF++m984W5laa1ytWxAKyN9Takr293N4jYbAPefNVvXyK7wwMZNFba QHbmPACK2ZdVqEdE/MYOUs8abfmSQSQRgk+ZHklkyUUphA12O7w9jl02 X-Gm-Gg: AYBFou3CYsD9nZdv2GF3Hg+lHAL8maXaVI16pp/pZx0gYeYI/g0smhva9FwYo3a2fPW WAUDQAIcuAKXH9FDQ4L9gDi6YjPrJ5icq644Dh12cz4i6U51wCrydiqW+CBBT9sDcdc10uBc7oE sAScIfwd2v2lfk5Jz7HkSc5t76PIJnREZ1NPHP8opla03t/oBA9yubg5E/71tyHHiJ1iWbnmy8G vjRtVdPG5fWyMRoqXElwETrxwN8KbcyMO/fprDoetM0E9J9ZVBkNJNMf/4JcK/JLiCN3fY3rz41 p3T4LkCI8uhrm85kHQ7QjmI4TxeSuK/YQJm5Jjx7mpMn/mTqPFm6Sr2h3u1iRkWAg4Fk4yYWeff Gt0h38UuCL2FGWdCBjANfmE8iba2a331r8GvwiXq+t0MZO9JzN0N8B+3tV1qzMjyuPRIUwupyi/ NNaKXWFjIs4mFRleBUnss/idzKIuCrDsnujWLJDAYBXzE32tmW+VPER4Ws8IS6/VnIs4VZ/uJ7w IX+rx2SXCGCaDsH2yNGTYJWSP/NBwD0ncyBxJYM2zHlcVPGqi7sDvA= X-Received: by 2002:a5d:591b:0:b0:47f:8d71:210a with SMTP id ffacd0b85a97d-484913b978amr7666724f8f.15.1788360845742; Wed, 02 Sep 2026 07:54:05 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.54.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:54:05 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 09/16] media: intel: ipu-bridge: allow sensor-specific link frequencies Date: Wed, 2 Sep 2026 16:53:38 +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" A bridge-specific firmware parser may have more accurate link-frequency information than the generic ACPI hardware-ID table. Let it store link frequencies in the per-sensor bridge data and prefer those values when constructing the endpoint software node. Existing bridges continue to use the hardware-ID table when no sensor-specific frequencies are supplied. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- drivers/media/pci/intel/ipu-bridge.c | 15 ++++++++++----- include/media/ipu-bridge.h | 3 +++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/media/pci/intel/ipu-bridge.c b/drivers/media/pci/intel= /ipu-bridge.c index 47317c423fad..5730a95767a2 100644 --- a/drivers/media/pci/intel/ipu-bridge.c +++ b/drivers/media/pci/intel/ipu-bridge.c @@ -520,11 +520,16 @@ static void ipu_bridge_create_fwnode_properties( sensor->prop_names.remote_endpoint, sensor->local_ref); =20 - if (cfg->nr_link_freqs > 0) - sensor->ep_properties[3] =3D PROPERTY_ENTRY_U64_ARRAY_LEN( - sensor->prop_names.link_frequencies, - cfg->link_freqs, - cfg->nr_link_freqs); + if (sensor->nr_link_freqs > 0) + sensor->ep_properties[3] =3D + PROPERTY_ENTRY_U64_ARRAY_LEN(names->link_frequencies, + sensor->link_freqs, + sensor->nr_link_freqs); + else if (cfg->nr_link_freqs > 0) + sensor->ep_properties[3] =3D + PROPERTY_ENTRY_U64_ARRAY_LEN(names->link_frequencies, + cfg->link_freqs, + cfg->nr_link_freqs); =20 sensor->ipu_properties[0] =3D PROPERTY_ENTRY_U32_ARRAY_LEN( sensor->prop_names.data_lanes, diff --git a/include/media/ipu-bridge.h b/include/media/ipu-bridge.h index 16fac765456e..81645a5f8709 100644 --- a/include/media/ipu-bridge.h +++ b/include/media/ipu-bridge.h @@ -133,6 +133,9 @@ struct ipu_sensor { struct software_node swnodes[SWNODE_COUNT]; struct ipu_node_names node_names; =20 + u64 link_freqs[MAX_NUM_LINK_FREQS]; + u8 nr_link_freqs; + u8 link; u8 lanes; u32 mclkspeed; --=20 2.53.0 From nobody Sat Sep 26 10:01:29 2026 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CD0F94A64DA for ; Wed, 2 Sep 2026 14:54:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360852; cv=none; b=cM4KLox9zQhxAFBTdkr/EAG71L2vePEFszZiip0ZptyuIa6Q3Uv/EMo3Sp2z1hqvW9l/8XKALdv9wcEDt4xm3bYUiwRc++E1xoI1ekXZC0kin5+aW3sabEnJ3tijJKtjKPvh6hcGKe0JrO3++ejN/W+YWjurN9V+D/7VtoE9WZk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360852; c=relaxed/simple; bh=nDjXt+isRGGooTXCaWuWnqb5pe5EC5+ZCK79Vbzm3eg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YGHXJAtyFm4thUoKEHmb3dmh2rpXleo3947Hh6u7lBmqP+WdyWHbKJVMnzSW0BJQeg158WYtIwS0dW28SQEIcZAm2nYLuY/nEsbGBIkWz0hzvzBgTshQXvSHmGCiIOJaedAa55z+8GoUtQxzBrppcm4WvZaGeI9IOoP62j6OI/U= 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=VwvPWDmp; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VwvPWDmp" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-47fe89fb333so752009f8f.3 for ; Wed, 02 Sep 2026 07:54:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360848; x=1788965648; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=FYj9gMNKBj9PIheDoD5f1AO5Yajaqc9NTnFS3lh/Ezo=; b=VwvPWDmp54OzPSKtXMA/1iOeAea4K15FkwikpDy3WrF8kn0Lw2Q3e8yRJIcSlYn2Tj ZRnKPU1neUBo0KLV4T1ZgjO2OycQ3PwrSnyZeHr1JoZWvZ5ZrTb1qtX0DZUgttwLyhBH Wj7ZHGzTPQgZbU5CC5mAR3SfOVG3m4VlUEEAx4daUoDooQwxkJtWYCRSl04I3e3BNf22 fWozuGis7uHJ5iJ9wYMjw/9DXu9zpEXYePMR1/afYByLGHhG79ARDPlc5QCSiQDATD2O eyrEYWx7BLM7T1/a1DIsyB8iz30vSUOvprd2G2Hgd4iFZDFka10+tTKP3/d3Ln/i94AH 52Rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360848; x=1788965648; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=FYj9gMNKBj9PIheDoD5f1AO5Yajaqc9NTnFS3lh/Ezo=; b=D4fZa03lNF9f+m5n4oxGtjx8oDlWt5lha53WufWrZU/mXIgWGsOXojPLUYxmaJDXaV E7y01yTeBo7xYOUPJevwqJAbY/SQ3yFG4hI5mIaPNEyFbuwXZFwykchAkaPL9nGbXi7a hkX19fKbuGAzl+Fg76tw1P1983V/tQnCsdla2ZLnCAJDUg0CXIPLpvFmflhhnNWC+UdK OOLYxlJLe8dLv78xfzCxfgciFiQCCzkyQJKz2emboFZf+6OBvY04SI/JlVf00kifs6mM 9iEOq1W6k8EHP0z4ZcsHqMBng2zpaY6/g4O9KTBFxt+t3w2yIGfzeDPjM5KFxY3oE8qM ReiA== X-Forwarded-Encrypted: i=1; AKwUvBwF9lcNEyyv3RRovEa46CliTNT3YAbOJrlMh54sOYX4hBG/TgJejZqkouXM8ate/vindFgzZF1lfjLRMLw=@vger.kernel.org X-Gm-Message-State: AFuF++mZApMs6QUt2DTZjxo+5osW21LgnrTeu38QHoYJKK9fnFRC2+Dt 2VcXpTA6zMUm8t6hppjTWZaadTM183XmX/vZDy9umWIZdTUGEyAufdGR X-Gm-Gg: AYBFou1dRdNYvant8Ymt6mZ4JucxbWR7u0Az/DLqbxcs7/c+RgHGFAqMkT2Cw3MKvjI 2o7Xyq+wRBTGXznZVVSrAQGAuVex8uqcpKYvw3xdkwCoCD/eA4X/dtghdIoY+41+ZrytIVquYNu DxN7m/PiUIK/Y5lhDXcT4Tcpd73QJ5T8CqiEZcCfydh8gnQf1l7yCWbD7RpGgkxDVLvCLgNtp2A /nE7hRYyDCoI9p9mTpj7vpZyewybxNCebOH32w6bcXyv+emGnTcWD6HKf/IZ8S+LS51SLpzqCCX t/Q6w+Tp02beDHwWY+rLY/Yfw2yvBGe5Pu3VZ53u63BhWEkQ813uJPZoYSVZjhU9jpYp8Vf9sl4 cAWEawhet+1Midi4B1XVwWF1vjVoAkACvBhM8+aDIH7qmlxqtEyG+DCZEEG1nrhDF3Kn/yPQZH6 l72P7yiSYDk3eZkSMKD1K4KjOi8szAyceWnc6RWHWYXHli/T5fr6lTYVrT6G7yXaMzy66Yp/+wa haSuC0Khmjf2ZjsTUUMxJXz9yJ8pg8pTPf05Nm37uuD X-Received: by 2002:a05:6000:4b19:b0:482:e4bc:51a8 with SMTP id ffacd0b85a97d-48488f07a87mr9665454f8f.7.1788360847525; Wed, 02 Sep 2026 07:54:07 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.54.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:54:07 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 10/16] media: atomisp: derive CSI-2 timing from sensor link frequency Date: Wed, 2 Sep 2026 16:53:39 +0200 Message-ID: <2fab63a3719391b1a37a8937d5a37d9150c64819.1788360629.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The ISP2401 CSI-2 receiver timing depends on the sensor link frequency. Query it through v4l2_get_link_freq() instead of reading a 32-bit control value directly. Keep the frequency as s64 throughout the calculation so valid link frequencies do not require an arbitrary S32_MAX limit. Fall back to the existing default timings when the frequency query fails. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse Reviewed-by: Andy Shevchenko --- .../staging/media/atomisp/pci/atomisp_csi2.c | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_csi2.c b/drivers/sta= ging/media/atomisp/pci/atomisp_csi2.c index 95b9113d75e9..5cd285fab742 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_csi2.c +++ b/drivers/staging/media/atomisp/pci/atomisp_csi2.c @@ -5,6 +5,7 @@ * Copyright (c) 2010 Intel Corporation. All Rights Reserved. */ =20 +#include #include #include #include "atomisp_cmd.h" @@ -209,7 +210,7 @@ int atomisp_mipi_csi2_register_entities(struct atomisp_= mipi_csi2_device *csi2, static const int LIMIT_SHIFT =3D 6; /* Limit numeric range into 31 bits */ =20 static int -atomisp_csi2_configure_calc(const short int coeffs[2], int mipi_freq, int = def) +atomisp_csi2_configure_calc(const short int coeffs[2], s64 mipi_freq, int = def) { /* Delay counter accuracy, 1/0.0625 for ANN/CHT, 1/0.125 for BXT */ static const int accinv =3D 16; /* 1 / COUNT_ACC */ @@ -288,18 +289,18 @@ static void atomisp_csi2_configure_isp2401(struct ato= misp_sub_device *asd) int dat_termen; int dat_settle; =20 - struct v4l2_control ctrl; struct atomisp_device *isp =3D asd->isp; - int mipi_freq =3D 0; enum atomisp_camera_port port; + struct v4l2_subdev *sensor; + s64 mipi_freq; int n; =20 port =3D isp->inputs[asd->input_curr].port; =20 - ctrl.id =3D V4L2_CID_LINK_FREQ; - if (v4l2_g_ctrl - (isp->inputs[asd->input_curr].sensor->ctrl_handler, &ctrl) =3D=3D 0) - mipi_freq =3D ctrl.value; + sensor =3D isp->inputs[asd->input_curr].sensor; + mipi_freq =3D v4l2_get_link_freq(&sensor->entity.pads[0], 0, 0); + if (mipi_freq < 0) + mipi_freq =3D 0; =20 clk_termen =3D atomisp_csi2_configure_calc(coeff_clk_termen, mipi_freq, TERMEN_DEFAULT); @@ -310,6 +311,11 @@ static void atomisp_csi2_configure_isp2401(struct atom= isp_sub_device *asd) dat_settle =3D atomisp_csi2_configure_calc(coeff_dat_settle, mipi_freq, SETTLE_DEFAULT); =20 + dev_dbg(isp->dev, + "CSI port %u link frequency %lld Hz, clk timing %d/%d, data timing %d/%d= \n", + port, mipi_freq, clk_termen, clk_settle, + dat_termen, dat_settle); + for (n =3D 0; n < csi2_port_lanes[port] + 1; n++) { hrt_address base =3D csi2_port_base[port] + csi2_lane_base[n]; =20 --=20 2.53.0 From nobody Sat Sep 26 10:01:29 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8D8DF4A6CC5 for ; Wed, 2 Sep 2026 14:54:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360854; cv=none; b=uudA6na2BvbFhYivsTEvOPAipSM0tm2rBX78dPrP3844xOp6Nxf04SlMyrz67oEkOTAL3N+yRpFnAEPBWBb3rFjxiPqmTGz0PvDa+aHMKyXAwBjp6cg1qGTWc8b0RZ3Ow3I01tiMS0/pQTWO0ZgHYgIaBosNl+J8b6elhYsmESE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360854; c=relaxed/simple; bh=O8+H77ig95xx3D9xkOkxR8/Uxxs4zMr9rHlkTdeo084=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sfTsQ5f3DkT/jaUHHhMOP0n7+1safiMgHSZ2nQn0AY0isBGahgpJs2ca3fBRiDOcqX4padJqqIVOoU8CUe+PFgEvXePetfQK3VNZ9O0pJB/t8VQDqJONvzCW+cJRz5zaCZC9j+nB68SyNUKFtk8wsxxjFODkfO47nwGDxuunsBg= 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=YSsQY9V1; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YSsQY9V1" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-49556f97a9dso8845835e9.1 for ; Wed, 02 Sep 2026 07:54:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360850; x=1788965650; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=yex/OilwSnogp/tXDfdHCJ3GmknddcQsqQcXRNs/Vaw=; b=YSsQY9V1QkEpK5YjEjc8t+Jhg6BW+OvzQdeq1jPLp3+rwplzP1/sZIDtXSfNJriWal lc89iSgkP/aFCpGqfq/TraaBG7F7fgEURy04sPOnhKtRpU1n5bdQyncEw03hSsTd53TP vwiv9iWlXNigTmP3a98i6VE7t+NLqOEgFeNr/JXeMRam3vheUAskYylsPGugA4e8DVnM U3UF47tR74db7Wkhz07aboolevSSmucAQ+7sFs3XptGuPHw7fcvp/8hN3Fj/LTdf3rD9 3vCg9/7eYD7beNCPGeor4uk3ovPELMCdhzw45YXR3a8efEss9GNVvv9JeaRv6pEZ+TSy +47g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360850; x=1788965650; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=yex/OilwSnogp/tXDfdHCJ3GmknddcQsqQcXRNs/Vaw=; b=Iaga38LL35XIWE8oxq9Rf3s785PsiVuLRPL6fe/zr4iDXeR5sJp4QxmJv4UNddwbH7 +t2suwJvPEqcBIxMfBEgYeGeJN89uEYtDZfZArLsmhEKVuLaC37qBlwk82uk/rHUEC+U vTg6lJzWDs3FqlN9iXKwvlTEJL09gOov85uIt/E9B1sug4+vWjpypVaeoGJZLzWrciQt mg4bV2GzbfkdLwbmfls1VKNAxYeSn1ULfmizogKgFy5mnoOx3OtVsw+MIApbAIdB6DXD tV+YetqItLbv86nXfrq1hSpJDdt2fkrJrnihhK7KWuB2zLI8NRkMVKCqW6viyCZIh+GS tykA== X-Forwarded-Encrypted: i=1; AHgh+RpXSX4mEaWIgT7X1wj9VkHqX8ByEQKcsqSXTiUSbAMO2DcTDvZTzVmNP1oj1lNOXqKMW0anBo7YWck+pbQ=@vger.kernel.org X-Gm-Message-State: AFuF++lqQyEwU+zRQs01N1PYnA2Jj968KI4Vb0KwZgR7Og0eyKQlTDI1 c9wOiuCIeFtB7eIOBjIDFmtEI9DD2YtjG+Jf7ulU38y/wW/QOwWQhPbC X-Gm-Gg: AR+sD13jwpJjQDwCdvlBB/xO44etBsebUEtxRdJMoiIq7cpgtuAIG1UiyYpXz/DLrKJ QCesQRhdBv35ugQEW8ib0imM40q+BY/aJN9HTWjHNZP0xutH0wlKhgo6L+v1AzooLKGDXlS4/c2 GmGsOeixODk6ZtwojAQWiYwrEpiSFag/MNpBgbyrs8ncLivJBZPuNvftaXU4ulEIq+j68x8dmt9 PARAB8JmKueX+R5visHKEsuFU76jdlhS9fzjFrjyXExbwTgtOfTqc3VMNv5RJvt6Oykp7Hu6aB9 qeUWk3QI2Mg159p47RdsVZAac7ytxlLKTrb1+cw/V2/zU+RIm67Hej9yPLA/dFVlQ0Q/Mcw3Z/i OIlUX6WlNJXB3S71HmXIwW6R9hr4y1a2+WcRJQLtIdIoxJ8hOXJeMKN+YV67HOqyvZEptex974K d2n+A82QdGIpGHel3bcbYNo5Gj4WLI67TrCj1eZ/RB/VblX7CSexJUAYHLpU/uYnRD2s0QLhP9Z rq5pK4nDJ4I3ORb+M9jfTdOnv8wHg4DtWDmnoj7lrU1 X-Received: by 2002:a05:600c:4e8f:b0:499:bf0e:95c8 with SMTP id 5b1f17b1804b1-49ce57f5647mr83604445e9.1.1788360849699; Wed, 02 Sep 2026 07:54:09 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.54.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:54:09 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 11/16] media: atomisp: provide Yoga Book OV2740 link frequency Date: Wed, 2 Sep 2026 16:53:40 +0200 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Lenovo Yoga Book YB1-X91 firmware does not describe the front OV2740 link frequency. Extend the AtomISP sensor configuration with an optional frequency and assign the 288 MHz Yoga Book value while adding its ACPI ID. Pass the value through the IPU bridge per-sensor endpoint data so the OV2740 driver selects its matching mode and the AtomISP CSI-2 receiver derives the correct D-PHY timing. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse Reviewed-by: Andy Shevchenko --- .../media/atomisp/pci/atomisp_csi2_bridge.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c b/driv= ers/staging/media/atomisp/pci/atomisp_csi2_bridge.c index 56da454f0d9e..226c81409848 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c +++ b/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c @@ -15,6 +15,7 @@ #include #include #include +#include =20 #include #include @@ -43,14 +44,16 @@ static const guid_t vcm_dsm_guid =3D 0x9f, 0x48, 0xa9, 0xc3, 0xb5, 0xda, 0x78, 0x9f); =20 struct atomisp_sensor_config { + u64 link_freq; int lanes; bool vcm; }; =20 -#define ATOMISP_SENSOR_CONFIG(_HID, _LANES, _VCM) \ +#define ATOMISP_SENSOR_CONFIG(_HID, _LANES, _VCM, _LINK_FREQ) \ { \ .id =3D _HID, \ .driver_data =3D (long)&((const struct atomisp_sensor_config) { \ + .link_freq =3D _LINK_FREQ, \ .lanes =3D _LANES, \ .vcm =3D _VCM, \ }) \ @@ -374,9 +377,11 @@ static const struct acpi_device_id atomisp_sensor_conf= igs[] =3D { * an i2c-client for the VCM, so it is disabled for now. */ /* OV5693 */ - ATOMISP_SENSOR_CONFIG("INT33BE", 2, false), + ATOMISP_SENSOR_CONFIG("INT33BE", 2, false, 0), /* OV8858 */ - ATOMISP_SENSOR_CONFIG("INT3477", 4, true), + ATOMISP_SENSOR_CONFIG("INT3477", 4, true, 0), + /* OV2740 */ + ATOMISP_SENSOR_CONFIG("OVTI2740", 2, false, 288 * HZ_PER_MHZ), {} }; =20 @@ -395,6 +400,10 @@ static int atomisp_csi2_parse_sensor_fwnode(struct acp= i_device *adev, =20 lanes =3D cfg->lanes; vcm =3D cfg->vcm; + if (cfg->link_freq) { + sensor->link_freqs[0] =3D cfg->link_freq; + sensor->nr_link_freqs =3D 1; + } } =20 /* --=20 2.53.0 From nobody Sat Sep 26 10:01:29 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 DD99D4A49A1 for ; Wed, 2 Sep 2026 14:54:13 +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=1788360856; cv=none; b=WymxN5J+J7SCrEPTYuw7BJ+k9ObjHR4UtQgUz1eeb6DGySptCvaFmR71OKGeobC3CrpiXh+Hpa6AKP9UvSaw/9cISrdK+3bumYZrn+MsCwNKxrVnKTIzsSgi/eMxsEWPanHpz6PVDJFkPBs/Y138IK5hUa3dBKP3Vc/nfOP/eis= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360856; c=relaxed/simple; bh=oSQRJqNxqEh6/B1/z4WZhyY4jL7gQ546XKgY1JR+lhE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XxFAQicP5WKnJw0zMn9PSy+bGMg2y96A/MMwmzQ4uo8pAV2oaAe7MYIQ0FdXrvUxpRv+NCUSjd9xb6yNl03HOcNqmGrnLEKCuQgfV6ONasoZklVclnH7LeT0GXPFvwbg59jf+mZ0uymnRKOwJrd7+hdnT/aC4sGj+oF+/V0VGEo= 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=q++xMmdF; 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="q++xMmdF" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-4843efcbdb2so786680f8f.2 for ; Wed, 02 Sep 2026 07:54:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360852; x=1788965652; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Tu8WUi9HrdMM4KGqsLHa/qCPtrxMlvMbqE6rwLVKFtU=; b=q++xMmdFALF3nZuD/m6gSa1/2igIaPshzRVFmQi9cdzdB5cX+Jo5gFkVMaRVjkyEzW 87SB/PK2LHJvXM9PSWMmX3k0JhURpNctQWejIO12b0yZDwTqf2jz9vzW1Ydt7NEAXwUZ cb3jZ69I4udjjKd7muxE1J5BWPPaCU43c1zQhzxpp9ANp1ESX/Gjiid5P9LiX6jCU8wT TQpciQAKYqJEf4YtYT954e4Gr28ZFdMpLO730N5rev/aZGImf4xBFtXuJwWIOdA8h9U8 wJLzUWZdFpRdH4ReKRWXmWdG8FuNj6HO1Yly+ZEsmYy1t3TGgB25zINiZu0Iv1A+A22N 6esg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360852; x=1788965652; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Tu8WUi9HrdMM4KGqsLHa/qCPtrxMlvMbqE6rwLVKFtU=; b=Y/08/g1Xmj0SgDA21oEcTyXsz6fxHp8w81CjEBU9bWJQUbufvG2qfAQo2BhCCwXADH A9TLpPguwtQQTFAuGZDU5dbpAtmkYJFVjz4mpV9ryCAu3pN+A1jumJ6nypwKzz77ihvs DZ8dd0oZnNkE16s3wMRpU5B4KoJjJR83ZHMjsezfZDf9KLbrXz1QpFLLPs1U3m+sl2oG LF0sAx8oLvwKjsS8BNzKW+wbXzhG2sgobswAlVJuyrmO3DBXV7CT3BqNW1TvMBaiMIo3 P6XQaL7/pMs83O6EnPZdZNojcVGUU8PqL6zNFjSrJSO6zvnQ+xD51k3hW5Bz1lYsqk6N F70g== X-Forwarded-Encrypted: i=1; AKwUvBxSn3e8F10aiKluAE/Ki6WhLes5vmrBECyZS65dgFWDLqrZJBs4h+NG4dHhvQoqx/PU931dui7EZ92M74Q=@vger.kernel.org X-Gm-Message-State: AFuF++nYDw38JPRC6rGNlU4FYYWnCc6NC7EzoDgThwGpcZAoZpmaXpTo YMZ/MDWYMCiZVMc1dfH9HEMAV/cnAo5nguPVkk9PPRrqcl5M7U/okGhJL5MKKmVlO1zMtQ== X-Gm-Gg: AYBFou3+k64+/8qn9Tj6K23pwoVMUcHW+QRuDRaOeXIE4hNUtIQW/Mi808pya0wx+BK HEA6mdqmhK8XxhHhrTE5dgVzEOCTWssmEAoIdnWvfh3CmGu8gOZXzRTNMV+qn15wIhO2G3sEceW PFphBPrT2tJVPlBucgfJ2iukqCAFu8OR6QukqiDfkBGGBNMsi0O7tyV+gRyFSYzseeqD3/mC4im Yp0LAX5s1g5VEMG9aSYj/r4ORsu0BahxzM36VJgUvMMQyxX8JEQ7b2xQDOsRkcZRqXK6EsCtY2w PZz5Jxm0iDxOUiE0HeT5XIs2mSlO+9GXBgJfxsExe9HCSHp6SRXfXoqLMK20zEgzYlsWpGy2Tvc H2W14lm4PHrk9h1HSu96gvXM67c1EBDVsIu4luisNnLxnSrCUbNf3I7p9WJNGOze0UDLZ7apdOr Lgt9mY6nE8I2jynWIFiiJGeGrnWBVBVVyZeMi2ly5mrWX8VbGzTJPmdw/VUdwmb0r6oArTf8hb2 c7YSKMQVrHE36DxJSYyKAPEpOCf8Si+0ekiV50bWgzA X-Received: by 2002:a5d:5850:0:b0:484:3f03:82b3 with SMTP id ffacd0b85a97d-48488f0dfcamr4124411f8f.11.1788360851696; Wed, 02 Sep 2026 07:54:11 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.54.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:54:11 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 12/16] media: ov2740: release group hold after gain write errors Date: Wed, 2 Sep 2026 16:53:41 +0200 Message-ID: <34f5f77ec2ddc7ff7a000603b120380c80bb73d4.1788360629.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Digital-gain updates start a register group before writing the red, green and blue gains. The current error paths return immediately when one of those writes fails, leaving the group open and never issuing its end and launch commands. Later control updates can then be accumulated in an unfinished group instead of taking effect. Once group hold has started, always attempt both commands needed to end and launch the group. Preserve the first gain-write error; report an end or launch error only when all gain writes succeeded. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- drivers/media/i2c/ov2740.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index f3d91c87b3d5..5f381b7972bf 100644 --- a/drivers/media/i2c/ov2740.c +++ b/drivers/media/i2c/ov2740.c @@ -696,7 +696,7 @@ static int ov2740_identify_module(struct ov2740 *ov2740) =20 static int ov2740_update_digital_gain(struct ov2740 *ov2740, u32 d_gain) { - int ret; + int end_ret, launch_ret, ret; =20 ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, OV2740_GROUP_HOLD_START); @@ -705,24 +705,21 @@ static int ov2740_update_digital_gain(struct ov2740 *= ov2740, u32 d_gain) =20 ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_R_GAIN, 2, d_gain); if (ret) - return ret; + goto release_group; =20 ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_G_GAIN, 2, d_gain); if (ret) - return ret; + goto release_group; =20 ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_B_GAIN, 2, d_gain); - if (ret) - return ret; =20 - ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, - OV2740_GROUP_HOLD_END); - if (ret) - return ret; +release_group: + end_ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, + OV2740_GROUP_HOLD_END); + launch_ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, + OV2740_GROUP_HOLD_LAUNCH); =20 - ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, - OV2740_GROUP_HOLD_LAUNCH); - return ret; + return ret ?: end_ret ?: launch_ret; } =20 static int ov2740_test_pattern(struct ov2740 *ov2740, u32 pattern) --=20 2.53.0 From nobody Sat Sep 26 10:01:29 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 BA2FE4A6CE7 for ; Wed, 2 Sep 2026 14:54:15 +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=1788360858; cv=none; b=er2YKB6aKInGQaMEDLujUyhqOI8cOIjucgZnMEL1OWyvjlSzweMzLIyBJTuK0MLW+dVUPc5pAVH7A0AbYtMZ2/XBuKlJgXfPxdVBXhBixg/DCxJ+61Wx1ZSFnPl+umItNFeBgytOyQlwTx9ybyToVT8+CnZI4SDhCJMDyy+Ldzo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360858; c=relaxed/simple; bh=yy7NqzFTCZj46zAWpwdiPyZCalfwq4poxZvjcHNMIH0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iTX0U8I57UQaLLyTimpA73vkugXatO/U95dcf5ObHjeW7Tc4Tc9dF9j+nie/8jjS5j1n/a4tEK3fcetwuOIIqUxDrMMP7vrh6TgjE9/RN+yd1ewAVx+KeYmGswuXe+2Lu/rG9q5jLbvINH6WKgJeKxbj7BPkvPqORh5E4Guc12I= 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=dwzJjDim; 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="dwzJjDim" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-4843e397f74so1369466f8f.1 for ; Wed, 02 Sep 2026 07:54:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360853; x=1788965653; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=lm5sUM7FjiWcwv7SFl7EV+zS0klFRC7hu81VsxS1+dg=; b=dwzJjDimp4xFPafy4nLSrm/9JVSmVzPXkmLkiZo8aA7ThIXWNFXN2MOwT3cfv58NMl HRpfhyz4ZII3NZBHPUOrFOWxmBBRQUv/gAdP3ImeAx+zfVhcxQKLKNMybRe2eI8l8f6U t9yUOHEmqKmKtKpeLnucYgU7On9yA+7uAFRmgwY5LDJ+mcLY/chekasQEbVuZFD8gm1i SWF14LxSTrBjXydpNsmv3nRC1y9PxVxTERCzQH85k+N/X6cgdVXQJE/8EDF8IpbXXTY5 OPc/T+uJ8bMtJEcONVzZbvmqN9kE+8cX1VUPLepSh4Cn4GJUgVYvvQNp7HWnF4HVl3gp mRkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360853; x=1788965653; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=lm5sUM7FjiWcwv7SFl7EV+zS0klFRC7hu81VsxS1+dg=; b=LyG04AXX5KmgkExAdAPjkqAgGYTERy6EoHr8G1miTEX8GT/0cjChlZHlsb9/0oPnuv Ru4F4GsS/HwghBQZdMbRBDmfoDdVKQPi+VAEqGwy0qZ71ARModVpz3OjTN9hHheIOrY5 cu6KAStYmKxNav5TCr7mhM7YfwZjjAYG914/OZiDraDzjwmiS3y6PqRhdxudtQO2S93I jN98yXrmAMwtjdmc10a+WFT3XNnTEZQNCiBgo6LTCDPojGyHHLJ/bJWzT+OD4g/4irWV wluQrQtlR70L48UbEYTRYUiIPvKRCG3ESTe0hGzgFHvVwBL4u0ZQyecT6uYf2+q/Och7 OhFA== X-Forwarded-Encrypted: i=1; AKwUvBxXRS3zXYoaPKMY2ndWdo2H6F3fawS07xnsbSmNfI3WHsZm5x8XrhU5vTE7pzGHl+p3xT4JGh2qctnqTDs=@vger.kernel.org X-Gm-Message-State: AFuF++m+47JaNengZ3aZekhcIdgUteb3VetqgdJk63XRGaKUJ+H5kvjt CPywcu9dCJzaAK91XzMrP4gQXd/qfoieIDLWdu5+yxsk2Anbv0GFPXdL X-Gm-Gg: AYBFou0upFbXECVeX6hIhNqoAASxG7rgI7HXcLirqREXblrP6uSPP0pi76cW+lg5ZNP +PcmaVDF6N9ifFV5BV7dracRJ9sBVpzzJ4xajho7CalYEEbsj/gP9RQfNLfZRcCJ3HGx4LohJUU vrn4xhMctXSj2ZDgsKayEZUW8JfE6PKreH6EgzZw/Qbzuz5RsP4VYDyofBWf10KEzvl9iEEBlmX huDOGcBxh9ElJim1j/m8wka+urDs5b6g78o4kblpZIYiBy/7FmAJn9EpolGq2y84mA+0efR3q6z ofHLtltuYb/gXWo9gghEeImhQaM9Dy8ZOQF0gIhBZRn4Kmkll819KHoyC4VYxi4VRbd+Oe079nU UKgc0d78sFBcPm3Flgej5EXk+a40V4zQfN/xYIAHrpEU69K//qX6RhGCJ2wCMG+n3N9B1vchUOF q+lESXuABgCVA98dv6LSSNsRPLWw7sUMiZmPyW0Vp4AKN6f6whHDvE+KN/kVSjGxYGQ84ysf7iD 7F7nPnwgAs+zeLxZDBU8bsPGQekBXnocCKG7/AfMu6M X-Received: by 2002:a5d:5f8b:0:b0:484:361a:1c7b with SMTP id ffacd0b85a97d-485781f5357mr7781856f8f.7.1788360853430; Wed, 02 Sep 2026 07:54:13 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.54.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:54:13 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 13/16] media: ov2740: add manual white balance controls Date: Wed, 2 Sep 2026 16:53:42 +0200 Message-ID: <3cc40ef9fd6aec21cfbb13f238d547b9852a2bae.1788360629.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The sensor has separate red, green and blue manual white-balance gain registers, but the driver currently writes the same digital-gain value to all three channels. This prevents userspace from correcting the strong color cast of raw Bayer capture. Expose red- and blue-balance controls relative to the digital gain and update all three channels under group hold. Tested on the Yoga Book OV2740 with live gain changes and continuous raw capture. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- drivers/media/i2c/ov2740.c | 44 +++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index 5f381b7972bf..4600bbc90293 100644 --- a/drivers/media/i2c/ov2740.c +++ b/drivers/media/i2c/ov2740.c @@ -565,6 +565,9 @@ struct ov2740 { struct v4l2_ctrl *vblank; struct v4l2_ctrl *hblank; struct v4l2_ctrl *exposure; + struct v4l2_ctrl *digital_gain; + struct v4l2_ctrl *red_balance; + struct v4l2_ctrl *blue_balance; =20 /* GPIOs, clocks, regulators */ struct gpio_desc *reset_gpio; @@ -694,8 +697,10 @@ static int ov2740_identify_module(struct ov2740 *ov274= 0) return 0; } =20 -static int ov2740_update_digital_gain(struct ov2740 *ov2740, u32 d_gain) +static int ov2740_update_mwb_gains(struct ov2740 *ov2740) { + u32 d_gain =3D ov2740->digital_gain->val; + u32 blue_gain, red_gain; int end_ret, launch_ret, ret; =20 ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, @@ -703,7 +708,11 @@ static int ov2740_update_digital_gain(struct ov2740 *o= v2740, u32 d_gain) if (ret) return ret; =20 - ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_R_GAIN, 2, d_gain); + /* Balance controls use 1024 as unity relative to the digital gain. */ + red_gain =3D DIV_ROUND_CLOSEST(d_gain * ov2740->red_balance->val, + OV2740_DGTL_GAIN_DEFAULT); + red_gain =3D min(red_gain, OV2740_DGTL_GAIN_MAX); + ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_R_GAIN, 2, red_gain); if (ret) goto release_group; =20 @@ -711,7 +720,10 @@ static int ov2740_update_digital_gain(struct ov2740 *o= v2740, u32 d_gain) if (ret) goto release_group; =20 - ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_B_GAIN, 2, d_gain); + blue_gain =3D DIV_ROUND_CLOSEST(d_gain * ov2740->blue_balance->val, + OV2740_DGTL_GAIN_DEFAULT); + blue_gain =3D min(blue_gain, OV2740_DGTL_GAIN_MAX); + ret =3D ov2740_write_reg(ov2740, OV2740_REG_MWB_B_GAIN, 2, blue_gain); =20 release_group: end_ret =3D ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1, @@ -760,7 +772,9 @@ static int ov2740_set_ctrl(struct v4l2_ctrl *ctrl) break; =20 case V4L2_CID_DIGITAL_GAIN: - ret =3D ov2740_update_digital_gain(ov2740, ctrl->val); + case V4L2_CID_RED_BALANCE: + case V4L2_CID_BLUE_BALANCE: + ret =3D ov2740_update_mwb_gains(ov2740); break; =20 case V4L2_CID_EXPOSURE: @@ -801,7 +815,7 @@ static int ov2740_init_controls(struct ov2740 *ov2740) int ret; =20 ctrl_hdlr =3D &ov2740->ctrl_handler; - ret =3D v4l2_ctrl_handler_init(ctrl_hdlr, 10); + ret =3D v4l2_ctrl_handler_init(ctrl_hdlr, 12); if (ret) return ret; =20 @@ -836,9 +850,23 @@ static int ov2740_init_controls(struct ov2740 *ov2740) v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops, V4L2_CID_ANALOGUE_GAIN, OV2740_ANAL_GAIN_MIN, OV2740_ANAL_GAIN_MAX, OV2740_ANAL_GAIN_STEP, OV2740_ANAL_GAIN_MIN); - v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops, V4L2_CID_DIGITAL_GAIN, - OV2740_DGTL_GAIN_MIN, OV2740_DGTL_GAIN_MAX, - OV2740_DGTL_GAIN_STEP, OV2740_DGTL_GAIN_DEFAULT); + ov2740->digital_gain =3D + v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops, + V4L2_CID_DIGITAL_GAIN, + OV2740_DGTL_GAIN_MIN, OV2740_DGTL_GAIN_MAX, + OV2740_DGTL_GAIN_STEP, + OV2740_DGTL_GAIN_DEFAULT); + ov2740->red_balance =3D + v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops, + V4L2_CID_RED_BALANCE, + 1, OV2740_DGTL_GAIN_MAX, 1, + OV2740_DGTL_GAIN_DEFAULT); + ov2740->blue_balance =3D + v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops, + V4L2_CID_BLUE_BALANCE, + 1, OV2740_DGTL_GAIN_MAX, 1, + OV2740_DGTL_GAIN_DEFAULT); + v4l2_ctrl_cluster(3, &ov2740->digital_gain); exposure_max =3D ov2740->cur_mode->vts_def - OV2740_EXPOSURE_MAX_MARGIN; ov2740->exposure =3D v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops, V4L2_CID_EXPOSURE, --=20 2.53.0 From nobody Sat Sep 26 10:01:29 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 E750B4A843A for ; Wed, 2 Sep 2026 14:54:17 +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=1788360860; cv=none; b=ubi9Na4KPqRQZzChr6tw9ZCW4ztN8z4AePIcNobgMDjiYtPfAwBzb9bcHHyNYPPIZFTTg/PENwKWhILOgA9G7alB7IjJS6ybio1yy1NS/ttuKNd75JCCRCGTm4WAFdmjC9rNGFKUC1Ff6hPQHc+JqV3sWrDx96ugcnkztVePMfc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360860; c=relaxed/simple; bh=CGqSku8s6I9xNM49fj0vJ+QHoL2Fr7Pt+BZAaxIjnVY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C+CCDcLAAte60Er7R7tNwJIUV/ahiHpluviye1GCaJtQ8jdy/s6OFF3FJFI+9L2l9WdjkuRbcT3O3B+3bPrc6ZyfdDQ3dLG6ZU9203dHHk8pqumC4hBEbgc3ca+cAsstLzoTHfiVoci/snA3M0qptNY6mezbexvDpeZ06dP1nmo= 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=gzkhUU1/; 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="gzkhUU1/" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-48441a2ba14so1103812f8f.1 for ; Wed, 02 Sep 2026 07:54:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360855; x=1788965655; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ZxYVuNTHZtvBWJm7YqYSyMDBs6saulAawUQpfC7rrKY=; b=gzkhUU1/eGK0zzpmbOB0cya3g3/Vn6HojCm2Se9n0dusDoiv/ixj9OAmSV37rne/i1 psl0wkvOf1b5iCYbNW2UmjePdtAb0wvY5E6dLmcZeZQ2+qN6WvkN5UxBQiySDNKpzwNF LcSCF4RUVEDHiT0AsnJ30pPuSo99nqB4Qo/ns9XNrOIVgV2MQj4LXlDixXH/UliQEHfV lJWblHf5PySTjk4QQaDf0lsrqSr8tIDtKbDh0ULcWeFUlmuvIsUpcQpN772lG1ASu0AB Y1qvY/Va1YV+mSuC4YZv8HP5E97YQYglfEnLTtc7n7IBOJHZ76HuM1hvzwoF/m/KqHBW JW0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360855; x=1788965655; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ZxYVuNTHZtvBWJm7YqYSyMDBs6saulAawUQpfC7rrKY=; b=foE15IRrjCNuRlYUOudAkQtthdSI+xR/BAuQiBSG1/O69S+RMuIn2KgW7Py4vAyC+z tVrhx5gj+Yu4SXJpxslJ6SASK03EimUk8v3nDajtVn2euRiNrze2SZzQGuCuXwF8JHCd aTIvzt75MQR72ekdMwX1z2UKABtghABhbqMu0SXR4MICAotB991dBdNujtGnz3EK+QIN heO9BJwTSOvf3u1cCB73+hJbvKgq2yEZSOiKzmLsbPPx0hb85J5s/DlwgQZN2OaqaylF O3ug45MrBEhdg+FIXEwkci7DIXo7OY+m44QVbyscroggyrQQVtf4HyleJTskCDw2SrfK lbUw== X-Forwarded-Encrypted: i=1; AKwUvBy+Nj9l/83/JYTvWyjqp60z026oAxv5n/WTiAIWWE9N6T/qjOTiPkzdDgrmFZyH0sqv1waDqd121vmHVeQ=@vger.kernel.org X-Gm-Message-State: AFuF++kqeOMdqoyRj0GkAqFWuO0nOgvOfBG45tMpuJDtjcbGCLHJZFFe 4wm766qoZl9ldJ7nEho4wwQkl5JA/O/SC45b+gdAErYYhEXgK2HsHSxJ X-Gm-Gg: AYBFou2LkgmUQ56Y1t4Y8xmnasW4yvOmo2gxVW1s4SU0borkhCEQoABCp/JSy9jOB5j DBga9jsYZySmzj7dNJFtCDWV93K8xrJAyInyIfokJSu7OjU9WrK+tO+vAZ6m4nvdSxx623rjmn8 9cH75A2xTvkF4XhGxGruBoBQ/TEkNUkr5M3LWdVmMdujEtdAhsG6AsKErDwvmIoJLGYqx7Lh+C+ cRcNMd3hMqMBOey2rrLhFhZ6T3Td7qwrTAL4DX+j2PpqkWOtYo9m4af4jkY/Cmu1NDkqyXht2f1 KrpAkWYV1H0guJYWrCSDL51BGCNZg5GpXDESClMcaxHPMrxlOLghRp4IKTeGdjpu8BOwlqNiPnJ MwMAJtZ4QfIn3T6g8xUkZpy8lKCmfgTdaqV/jia8adHbS5PDbjEt7HpEPlr15MmxElGv3omPWL9 rkmieGTc6ZeBeXXjNMzfGS6vZZJMQ4TofnqQj0t+65rS4KsyOHICCbe0r1vFG+7aOZXSB8SOg5g 0cNuDgqsqulZ27ONkt3qpUDWSP8JTeo10Uq6UwrMnNx X-Received: by 2002:a05:6000:27db:10b0:484:f26c:b9f3 with SMTP id ffacd0b85a97d-484f26cbc06mr7426061f8f.28.1788360855325; Wed, 02 Sep 2026 07:54:15 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.54.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:54:14 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 14/16] media: atomisp: Use struct v4l2_area for padding Date: Wed, 2 Sep 2026 16:53:43 +0200 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The padding helper passes width and height as four separate scalar arguments even though they form two logical dimensions. Pass the requested size and returned padding as struct v4l2_area values. This makes the dimensions explicit and simplifies all three callers. Suggested-by: Andy Shevchenko Signed-off-by: Maurizio Casciano --- .../staging/media/atomisp/pci/atomisp_cmd.c | 68 +++++++++++-------- .../staging/media/atomisp/pci/atomisp_cmd.h | 6 +- .../staging/media/atomisp/pci/atomisp_ioctl.c | 15 ++-- .../media/atomisp/pci/atomisp_subdev.c | 4 +- .../media/atomisp/pci/atomisp_subdev.h | 3 +- 5 files changed, 53 insertions(+), 43 deletions(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.c b/drivers/stag= ing/media/atomisp/pci/atomisp_cmd.c index 6cd500d9fd26..759effdb2e8d 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_cmd.c +++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.c @@ -3562,9 +3562,9 @@ static void atomisp_fill_pix_format(struct v4l2_pix_f= ormat *f, f->xfer_func =3D V4L2_XFER_FUNC_709; } =20 -/* Get sensor padding values for the non padded width x height resolution = */ -void atomisp_get_padding(struct atomisp_device *isp, u32 width, u32 height, - u32 *padding_w, u32 *padding_h) +/* Get sensor padding values for the non-padded size */ +void atomisp_get_padding(struct atomisp_device *isp, struct v4l2_area size, + struct v4l2_area *pad) { struct atomisp_input_subdev *input =3D &isp->inputs[isp->asd.input_curr]; struct v4l2_rect native_rect =3D input->native_rect; @@ -3574,22 +3574,23 @@ void atomisp_get_padding(struct atomisp_device *isp= , u32 width, u32 height, struct v4l2_mbus_framefmt *sink; =20 if (!input->crop_support) { - *padding_w =3D pad_w; - *padding_h =3D pad_h; + pad->width =3D pad_w; + pad->height =3D pad_h; return; } =20 - width =3D min(width, input->active_rect.width); - height =3D min(height, input->active_rect.height); + size.width =3D min(size.width, input->active_rect.width); + size.height =3D min(size.height, input->active_rect.height); =20 - if (input->binning_support && width <=3D (input->active_rect.width / 2) && - height <=3D (input->active_rect.height / 2)) { + if (input->binning_support && + size.width <=3D (input->active_rect.width / 2) && + size.height <=3D (input->active_rect.height / 2)) { native_rect.width /=3D 2; native_rect.height /=3D 2; } =20 - *padding_w =3D min_t(u32, (native_rect.width - width) & ~1, pad_w); - *padding_h =3D min_t(u32, (native_rect.height - height) & ~1, pad_h); + pad->width =3D min_t(u32, (native_rect.width - size.width) & ~1, pad_w); + pad->height =3D min_t(u32, (native_rect.height - size.height) & ~1, pad_h= ); =20 /* The below minimum padding requirements are for BYT / ISP2400 only */ if (IS_ISP2401) @@ -3617,8 +3618,18 @@ void atomisp_get_padding(struct atomisp_device *isp,= u32 width, u32 height, min_pad_h +=3D 2; =20 apply_min_padding: - *padding_w =3D max_t(u32, *padding_w, min_pad_w); - *padding_h =3D max_t(u32, *padding_h, min_pad_h); + pad->width =3D max_t(u32, pad->width, min_pad_w); + pad->height =3D max_t(u32, pad->height, min_pad_h); +} + +static inline void +atomisp_get_pix_padding(struct atomisp_device *isp, + struct v4l2_pix_format *f, + struct v4l2_area *pad) +{ + struct v4l2_area size =3D { .width =3D f->width, .height =3D f->height }; + + atomisp_get_padding(isp, size, pad); } =20 int atomisp_s_sensor_power(struct atomisp_device *isp, unsigned int input,= bool on) @@ -3800,7 +3811,7 @@ int atomisp_try_fmt(struct atomisp_device *isp, struc= t v4l2_pix_format *f, const struct atomisp_format_bridge *fmt, *snr_fmt; struct atomisp_sub_device *asd =3D &isp->asd; struct v4l2_mbus_framefmt ffmt =3D { }; - u32 padding_w, padding_h; + struct v4l2_area padding; int ret; =20 fmt =3D atomisp_get_format_bridge(f->pixelformat); @@ -3827,10 +3838,10 @@ int atomisp_try_fmt(struct atomisp_device *isp, str= uct v4l2_pix_format *f, * resolution + padding. Add padding here and remove it again after * the set_fmt call, like atomisp_set_fmt_to_snr() does. */ - atomisp_get_padding(isp, f->width, f->height, &padding_w, &padding_h); + atomisp_get_pix_padding(isp, f, &padding); v4l2_fill_mbus_format(&ffmt, f, fmt->mbus_code); - ffmt.width +=3D padding_w; - ffmt.height +=3D padding_h; + ffmt.width +=3D padding.width; + ffmt.height +=3D padding.height; =20 dev_dbg(isp->dev, "try_mbus_fmt: try %ux%u\n", ffmt.width, ffmt.height); =20 @@ -3847,8 +3858,8 @@ int atomisp_try_fmt(struct atomisp_device *isp, struc= t v4l2_pix_format *f, return -EINVAL; } =20 - f->width =3D ffmt.width - padding_w; - f->height =3D ffmt.height - padding_h; + f->width =3D ffmt.width - padding.width; + f->height =3D ffmt.height - padding.height; =20 /* * If the format is jpeg or custom RAW, then the width and height will @@ -4268,11 +4279,12 @@ static int atomisp_set_fmt_to_snr(struct video_devi= ce *vdev, const struct v4l2_p return -EINVAL; =20 v4l2_fill_mbus_format(&ffmt, f, format->mbus_code); - ffmt.height +=3D asd->sink_pad_padding_h + dvs_env_h; - ffmt.width +=3D asd->sink_pad_padding_w + dvs_env_w; + ffmt.height +=3D asd->sink_pad_padding.height + dvs_env_h; + ffmt.width +=3D asd->sink_pad_padding.width + dvs_env_w; =20 dev_dbg(isp->dev, "s_mbus_fmt: ask %ux%u (padding %ux%u, dvs %ux%u)\n", - ffmt.width, ffmt.height, asd->sink_pad_padding_w, asd->sink_pad_padding_= h, + ffmt.width, ffmt.height, asd->sink_pad_padding.width, + asd->sink_pad_padding.height, dvs_env_w, dvs_env_h); =20 __atomisp_init_stream_info(ATOMISP_INPUT_STREAM_GENERAL, stream_info); @@ -4365,13 +4377,11 @@ int atomisp_set_fmt(struct video_device *vdev, stru= ct v4l2_format *f) V4L2_SUBDEV_FORMAT_ACTIVE, ATOMISP_SUBDEV_PAD_SOURCE, &isp_source_fmt); =20 - if (atomisp_subdev_format_conversion(asd)) { - atomisp_get_padding(isp, f->fmt.pix.width, f->fmt.pix.height, - &asd->sink_pad_padding_w, &asd->sink_pad_padding_h); - } else { - asd->sink_pad_padding_w =3D 0; - asd->sink_pad_padding_h =3D 0; - } + if (atomisp_subdev_format_conversion(asd)) + atomisp_get_pix_padding(isp, &f->fmt.pix, + &asd->sink_pad_padding); + else + asd->sink_pad_padding =3D (struct v4l2_area) { }; =20 atomisp_get_dis_envelop(asd, f->fmt.pix.width, f->fmt.pix.height, &dvs_env_w, &dvs_env_h); diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.h b/drivers/stag= ing/media/atomisp/pci/atomisp_cmd.h index d3d1f2574e77..8a84e774f4d5 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_cmd.h +++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.h @@ -225,9 +225,9 @@ int atomisp_makeup_css_parameters(struct atomisp_sub_de= vice *asd, int atomisp_compare_grid(struct atomisp_sub_device *asd, struct atomisp_grid_info *atomgrid); =20 -/* Get sensor padding values for the non padded width x height resolution = */ -void atomisp_get_padding(struct atomisp_device *isp, u32 width, u32 height, - u32 *padding_w, u32 *padding_h); +/* Get sensor padding values for the non-padded size */ +void atomisp_get_padding(struct atomisp_device *isp, struct v4l2_area size, + struct v4l2_area *pad); =20 /* Set sensor power (no-op if already on/off) */ int atomisp_s_sensor_power(struct atomisp_device *isp, unsigned int input,= bool on); diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c b/drivers/st= aging/media/atomisp/pci/atomisp_ioctl.c index 50366bf10f32..87c29a940f9b 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c +++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c @@ -457,7 +457,7 @@ static int atomisp_enum_framesizes_crop_inner(struct at= omisp_device *isp, const struct v4l2_rect *native, int *valid_sizes) { - static const struct v4l2_frmsize_discrete frame_sizes[] =3D { + static const struct v4l2_area frame_sizes[] =3D { { 1920, 1440 }, { 1920, 1200 }, { 1920, 1080 }, @@ -470,15 +470,15 @@ static int atomisp_enum_framesizes_crop_inner(struct = atomisp_device *isp, { 800, 600 }, { 640, 480 }, }; - u32 padding_w, padding_h; int i; =20 for (i =3D 0; i < ARRAY_SIZE(frame_sizes); i++) { - atomisp_get_padding(isp, frame_sizes[i].width, frame_sizes[i].height, - &padding_w, &padding_h); + struct v4l2_area padding; =20 - if ((frame_sizes[i].width + padding_w) > native->width || - (frame_sizes[i].height + padding_h) > native->height) + atomisp_get_padding(isp, frame_sizes[i], &padding); + + if ((frame_sizes[i].width + padding.width) > native->width || + (frame_sizes[i].height + padding.height) > native->height) continue; =20 /* @@ -491,7 +491,8 @@ static int atomisp_enum_framesizes_crop_inner(struct at= omisp_device *isp, =20 if (*valid_sizes =3D=3D fsize->index) { fsize->type =3D V4L2_FRMSIZE_TYPE_DISCRETE; - fsize->discrete =3D frame_sizes[i]; + fsize->discrete.width =3D frame_sizes[i].width; + fsize->discrete.height =3D frame_sizes[i].height; return 0; } =20 diff --git a/drivers/staging/media/atomisp/pci/atomisp_subdev.c b/drivers/s= taging/media/atomisp/pci/atomisp_subdev.c index 9de9cd884d99..ad97e4691d9a 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_subdev.c +++ b/drivers/staging/media/atomisp/pci/atomisp_subdev.c @@ -326,8 +326,8 @@ int atomisp_subdev_set_selection(struct v4l2_subdev *sd, =20 if (atomisp_subdev_format_conversion(isp_sd) && crop[pad]->width && crop[pad]->height) { - crop[pad]->width -=3D isp_sd->sink_pad_padding_w; - crop[pad]->height -=3D isp_sd->sink_pad_padding_h; + crop[pad]->width -=3D isp_sd->sink_pad_padding.width; + crop[pad]->height -=3D isp_sd->sink_pad_padding.height; } =20 if (isp_sd->params.video_dis_en && diff --git a/drivers/staging/media/atomisp/pci/atomisp_subdev.h b/drivers/s= taging/media/atomisp/pci/atomisp_subdev.h index b12bb65be3f2..0045f380de74 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_subdev.h +++ b/drivers/staging/media/atomisp/pci/atomisp_subdev.h @@ -214,8 +214,7 @@ struct atomisp_sub_device { struct media_pad pads[ATOMISP_SUBDEV_PADS_NUM]; struct atomisp_pad_format fmt[ATOMISP_SUBDEV_PADS_NUM]; /* Padding for currently set sink-pad fmt */ - u32 sink_pad_padding_w; - u32 sink_pad_padding_h; + struct v4l2_area sink_pad_padding; =20 unsigned int output; struct atomisp_video_pipe video_out; --=20 2.53.0 From nobody Sat Sep 26 10:01:29 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6FB5A4A8A10 for ; Wed, 2 Sep 2026 14:54:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360861; cv=none; b=C4N6xhz3EEo6hBsujPtyr5xuomWQcZ7v3FTgub5QVZva13g+2E5ZaqQotC+kTjV+2OHxs/Z3OvowLclcKFYTQhwo7vQsl05AOplb0A5RUBrd8XluYmlM69gJpiyRgSOpfzrv3mnKAQxRlLgSk2QZDGBoNBbAIkxXo60LnXP709s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360861; c=relaxed/simple; bh=//jCPP+eb8u5m4CIItyod+pODqByyo2ifauCpaFZfQo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dX9gORCvpvZ5BQmSPZBEDLZFv167OsMVr3WebOT+urGocKdneaxuUy2cFLmlDJdfOVsrQPUWOHLYQNsXADH8DPJt9NYAa8XfJWSaaV5OoP94Kp2uGXfZW8hvWZCcGQBcBtMQH01S/C4Bgo2CyFzQJAJybbQr5OSSScKO0NQclNY= 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=PTf3ZsKu; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PTf3ZsKu" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-49b0dbfbf7bso8054955e9.2 for ; Wed, 02 Sep 2026 07:54:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360857; x=1788965657; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ch1L0Y83sVLilf517YsasLyC766SqlDIh2xPLCeCC2Y=; b=PTf3ZsKu43DNemKwCtOCKTd4+2FDPV7poHONylNZ6fe9T/2+9kF7zjhATVHDngMSAN grjUWOmskKbZ3hQVLukDxqQE50cSyjcEImB0eq+X0YOn0T9RfW7c4MD5aVXQ8qhGgbnz grz7P81JFrH1LPxDe/cP8M54KqAj86PFOG/A3b5t5U4kcwuCie9iraS23JT8xioYvDeY 4SqyqGbKuSTsPy/gCvQQTVKjoSloZ2sjtVoVgW5ibQfs0OupSlP4Zw8kn2oiP4tmGHJv Ol0s7S0b8+bkalnrizYXLn872P8E1pLIHplNl2Y2EWSWjG74wWJXHgZd+KyCY96Ga3qV DX/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360857; x=1788965657; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ch1L0Y83sVLilf517YsasLyC766SqlDIh2xPLCeCC2Y=; b=ax+mxnuYiEKy99JLle/GYkH52jE6ZwveLYAFl0jueSihG8uCxoaG3GsKV3/pYyehde AToSBaioY7GOgeykYuUwUeAFLwMuf9NGi2YBgk9p5cJ2vlJ0Hup3IQMfrieTc8bQTx10 dXvkBrkA+JQOWYdPQOAE8MOLr3fZendAMXg9UC4Wo21vCqeH7iXn9vGJRfMaW17NPybF PS0KshhxmAsLm4ZSwst8wWBzF889FNUwPI/LZAXHdHFXDpjq6Cf1w8Wzh61w9wQrI7Lm 1hb3a+gsVB/SzvBspj6txxgxCQ4IoON/MDwcSP2IFgcKXLBIBjyA1LPvlodlsib64ZYO fJlw== X-Forwarded-Encrypted: i=1; AHgh+Rpy7Ueniu4GgH+t4i+nuK/DlLyjLKwlEtkVkwjDpndU079t2TuPIHZFwgw/6d4tRi70pTCBQ04j8GxDEEs=@vger.kernel.org X-Gm-Message-State: AFuF++k2Mf/O+s/X2sKmUW2PD6GE3b802UjyXQpIGXWIkEEi9vx82IF6 /IkxZ4AsK3NERuAEGe3HVlw6950UscUYx+M6ceIAT/sd1ptmyyAW4EAN X-Gm-Gg: AR+sD10YZRhBxEcHZGGgQjsJg7n9TH0xXen0traBOdxR14s8dDG3eeLy/v3tJBrd3t5 YxKapr1gYY+GDTVCtelrduHhslQ4sUiO0u6axlIWqyFfzQwYgBOC3VFHjGzrJ1WVP/TctWWwNMK omw9iXr2lmVO9YeZaNs1ticlXouKiIGO8DjnWqUqsHlQvwv+uha0/xbrUql2dPb0Zqq/5Vw1sG1 gvEwc7AZFnNBEbO6upQ+X11Hwwm/U1BsW9LKlLZMfVlVAVivDCFTqQFyZgs5hv0gln87WWRoYbL hT93168i6dd9ToC7NsebEXg5naB+HIcb2soRx0gD3fSrYEQfwFLjTxUNEFJk5/dXPUyXBLffBVF qoZYmOe0y4UryqlKMovDBNDPWY2TgghH5XIJOkEcEGDHNHzj4ImYdBQZJuIh54dxRpHyHRBHoeH 6x9IwmtPvL7DDgW7xP417oHixxnglQWb6jugOW4H90zWa0LjjOJP+1hvVxJeyZiyOVudKGWTJG7 yZZqDkSvx7bKIrAY0J4YCUgLPXHq88xYcA5lEpKPFoi X-Received: by 2002:a05:600c:8411:b0:49b:9105:cdaf with SMTP id 5b1f17b1804b1-49ce58204a0mr95925455e9.8.1788360857170; Wed, 02 Sep 2026 07:54:17 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.54.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:54:16 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 15/16] media: atomisp: allow raw Bayer capture Date: Wed, 2 Sep 2026 16:53:44 +0200 Message-ID: <5a163a69a3cb3b139f2c7ba5eee5b32bac575d27.1788360629.git.mauriziocasciano7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" AtomISP currently rejects all raw formats and silently substitutes YUV420. This prevents userspace camera processing stacks from obtaining unprocessed sensor frames. Enumerate only the raw format matching the sensor media-bus code and reconcile raw requests with the code selected by the sensor. Userspace opts in by selecting that raw V4L2 pixel format with VIDIOC_S_FMT. Raw formats expose the full sensor transport frame so ISP2401 can use its copy pipeline. Processed formats retain the existing global padding behavior; selecting a smaller receiver crop remains a userspace pipeline decision. Signed-off-by: Maurizio Casciano Assisted-by: LLM sparse --- .../staging/media/atomisp/pci/atomisp_cmd.c | 14 +++++++++++--- .../staging/media/atomisp/pci/atomisp_ioctl.c | 19 ++++++++++++++++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.c b/drivers/stag= ing/media/atomisp/pci/atomisp_cmd.c index 759effdb2e8d..99d2b73b160d 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_cmd.c +++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.c @@ -3815,8 +3815,7 @@ int atomisp_try_fmt(struct atomisp_device *isp, struc= t v4l2_pix_format *f, int ret; =20 fmt =3D atomisp_get_format_bridge(f->pixelformat); - /* Currently, raw formats are broken!!! */ - if (!fmt || fmt->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW) { + if (!fmt) { f->pixelformat =3D V4L2_PIX_FMT_YUV420; =20 fmt =3D atomisp_get_format_bridge(f->pixelformat); @@ -3838,7 +3837,10 @@ int atomisp_try_fmt(struct atomisp_device *isp, stru= ct v4l2_pix_format *f, * resolution + padding. Add padding here and remove it again after * the set_fmt call, like atomisp_set_fmt_to_snr() does. */ - atomisp_get_pix_padding(isp, f, &padding); + if (fmt->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW) + padding =3D (struct v4l2_area) { }; + else + atomisp_get_pix_padding(isp, f, &padding); v4l2_fill_mbus_format(&ffmt, f, fmt->mbus_code); ffmt.width +=3D padding.width; ffmt.height +=3D padding.height; @@ -3858,6 +3860,12 @@ int atomisp_try_fmt(struct atomisp_device *isp, stru= ct v4l2_pix_format *f, return -EINVAL; } =20 + if (fmt->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW && + fmt->mbus_code !=3D snr_fmt->mbus_code) { + fmt =3D snr_fmt; + f->pixelformat =3D fmt->pixelformat; + } + f->width =3D ffmt.width - padding.width; f->height =3D ffmt.height - padding.height; =20 diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c b/drivers/st= aging/media/atomisp/pci/atomisp_ioctl.c index 87c29a940f9b..aa6d13a4de89 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c +++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c @@ -537,12 +537,21 @@ static int atomisp_enum_framesizes(struct file *file,= void *priv, .which =3D V4L2_SUBDEV_FORMAT_ACTIVE, .code =3D input->code, }; + const struct atomisp_format_bridge *format; struct v4l2_subdev_state *act_sd_state; + struct v4l2_area padding =3D { + .width =3D pad_w, + .height =3D pad_h, + }; int ret; =20 if (!input->sensor) return -EINVAL; =20 + format =3D atomisp_get_format_bridge(fsize->pixel_format); + if (!format) + return -EINVAL; + if (input->crop_support) return atomisp_enum_framesizes_crop(isp, fsize); =20 @@ -554,9 +563,12 @@ static int atomisp_enum_framesizes(struct file *file, = void *priv, if (ret) return ret; =20 + if (format->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW) + padding =3D (struct v4l2_area) { }; + fsize->type =3D V4L2_FRMSIZE_TYPE_DISCRETE; - fsize->discrete.width =3D fse.max_width - pad_w; - fsize->discrete.height =3D fse.max_height - pad_h; + fsize->discrete.width =3D fse.max_width - padding.width; + fsize->discrete.height =3D fse.max_height - padding.height; =20 return 0; } @@ -630,7 +642,8 @@ static int atomisp_enum_fmt_cap(struct file *file, void= *fh, * * FIXME: fix the pipeline to allow sensor format too. */ - if (format->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW) + if (format->sh_fmt =3D=3D IA_CSS_FRAME_FORMAT_RAW && + format->mbus_code !=3D code.code) continue; =20 /* Found a match. Now let's pick f->index'th one. */ --=20 2.53.0 From nobody Sat Sep 26 10:01:29 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 8329A4A8A25 for ; Wed, 2 Sep 2026 14:54:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360864; cv=none; b=P3loNbkL9L/FDGWaKsfUZCI57TtJ4A4UzwIfPwxYFYYvsPOdMfR92hEjcjgWP7Sj4Lj6IFf4YqgFK08Iy7O8CHEIfPP2EKJ+vOM/9Ez+LpXxutcN8aZLoRN2KoiFykNjKd/lQ+njA/ZAtqf+FZ/ttdU3lWUxIvEdYCyQxIiE0uc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788360864; c=relaxed/simple; bh=7TpNIuEmLp+G5e+2SpK8ix5wNiH93X57SXsd3KUQO5E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PiZaP5MD5qSaC8PjyhQ7mYhGygEOSyuVcRMdleZD+HMn7T39lRk++kYsUsKCEMrENLRJ4QOCHTcpzVEB04fs0EOhx37CfJrvtQP1D/GUw8f/Qd9VyIU6onzfXxtDdxoagYc8iLQCsyMzV+XylmwlG8f/nSYNJ6201n5VYS2YJEg= 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=K/CHgd8W; 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="K/CHgd8W" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-48442ea8f59so1457434f8f.1 for ; Wed, 02 Sep 2026 07:54:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788360859; x=1788965659; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=06nDeaXmBzbafN8AxJnH0KVNHErvgEdljVUYQQyITT8=; b=K/CHgd8WGNVP+AZvy+jsju32aosI4Vezl7Rp74E7nu3MGdsOdOdpAiCxpMzFweN59J Ryhbk199UeF81N8SFc8gVkNY/h2BJUB4Wc5NdURlejhIPKfsVRuRsAF19GikLdtvuM43 qdFJbTNCz4es+0tBbyc+EeO+UAZz6yLvzOekNieHlNX7asFDPIo01xB4dtwURIHQMw2d P8AXplmEUOHXkpESKYmIR+rw6i0GfvvnenJSd5hin4iW2qQvpxbQIuVPVtcCowoQPbo3 0B7dAAK6o5MTFCgieUuSnvz7jfRw6TnzkuBtOYZEiBaik3qgFnbjq48Bn09LCTR0pDrd UsHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788360859; x=1788965659; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=06nDeaXmBzbafN8AxJnH0KVNHErvgEdljVUYQQyITT8=; b=YS+K1JZ7DtpocBW2UkICxeebrYaFPK/tgHCOpuP9lPfwcGckqUi3teQmlosAKXIJyF LQAxrUZUVy1cjrce7Ihpz5vAK64RjwLgNbuI3Fq6i85fmCYRuRwnATpPA6vHtQq3myqO Qho55MAdpaeHPcfvEZtpr+VWt8CoxdYDGhQ2USEUmqA+UB1xd8BHu0465eA+P7qUqaPd U9eMIebcQlb4K+lfxEY1FwKKEoQpOvr279CGMMA9CBBrHvB2Uh9qfJGHYd+VzwaubKKn 8ih/o2uMAmieDwIN2CnDjc4DG7CVZMjyPvigkYMUq3DFIab0sixfd+p1eNVJypHeiY94 1y/A== X-Forwarded-Encrypted: i=1; AKwUvBzuuocpbfgO1BiqN/0ygciHCUw9p89EZJ1E0toZawV+lmtGpo6iy8PaAWSlJuFxC4BJesvpXRSka/uyt/4=@vger.kernel.org X-Gm-Message-State: AFuF++k4ortYKcLzJloMXp1/efaXoDR6ye3t3oWFqylo6Qq0/+ocqodi oeQ9UJvSzr1cdM/mjxamWENSrPVBYyRVPlK8AXWA+/phMSsDLi+Leth7 X-Gm-Gg: AYBFou3T8arItumZQiiZuHKh7v4mIFs6MO9+WjNlay7DIdI1iVf8IJKzZmzPoHvzUKd eTGUMSNcR7tSrZ6OF+Puzge8KZ2lJp6qiTDkgi8CkVv9imfEndLWrp/DH2bErVcDYT2OrZsQnTd oZRJX/qVCJ7qxbaYkhYBaasxUle5deyvtuz3k3eG9sJQTbQE1FctGoor0vVPlQmjzuDPvvhYaSL DrrJPNCj12O5o7xFqT+J5PBLCBzG5qJjE2tNux35WAu9j8l1vrKj1REgYGt7z7TyNwTeUkUyUjW yLnyPWJb2Run6VE7A9eAqS3YtYbC6JwJvOyDXJz/PjBGtgCeIZJ8w6luzX5AJJanPaaOdU7P/yh sNnbLp0BBD7ER8rsm2e8aa9koryvrYM6ntUJZAvEYhRhU0YFFbKvfYbVT8Z1s3TfOL8ElYIi9dT JM0kguOGAXN/7V0UiK9etBYSa37uq5YzfhycaXjfhjMZQBD2L93FzVBiKjgVdzNQ6s3b2d5UoJ1 r0R6WjhssGwLoWN26vgzRAJAvn4MpuJ3fAnW8RYPkVp X-Received: by 2002:a05:6000:4a03:b0:484:482d:dce4 with SMTP id ffacd0b85a97d-4856f8254d5mr7668524f8f.0.1788360859416; Wed, 02 Sep 2026 07:54:19 -0700 (PDT) Received: from 1Z10 ([37.163.216.116]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448e81718sm6942012f8f.16.2026.09.02.07.54.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Sep 2026 07:54:19 -0700 (PDT) From: Maurizio Casciano To: mchehab@kernel.org, linux-media@vger.kernel.org Cc: Maurizio Casciano , sakari.ailus@linux.intel.com, bingbu.cao@amd.com, jacopo.mondi@ideasonboard.com, nicholas@rothemail.net, andy@kernel.org, andriy.shevchenko@intel.com, hansg@kernel.org, gregkh@linuxfoundation.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v7 16/16] media: i2c: Add WV517S lens actuator driver Date: Wed, 2 Sep 2026 16:53:45 +0200 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Lenovo Yoga Book YB1-X91 rear camera contains a WV517S voice-coil actuator. Add a V4L2 lens subdevice exposing the standard 10-bit FOCUS_ABSOLUTE control and the device ringing-control mode. Use regmap for register access and tie control updates to runtime PM so the IPU bridge sensor link keeps shared power resources active. Propagate PM acquisition failures and restore the drive mode and controls after resume. The register addresses and drive-mode value are derived from Intel's GPL-2.0 WV517 driver. Retain the Intel copyright notice and document the 2026 copyright for this V4L2/regmap implementation. Link: https://github.com/jekhor/yogabook-linux-android-kernel/blob/574bae69= 2716f1b14093497bfab8a007fe8e460b/drivers/external_drivers/camera/drivers/me= dia/i2c/wv517.c Assisted-by: LLM sparse Signed-off-by: Maurizio Casciano --- MAINTAINERS | 1 + drivers/media/i2c/Kconfig | 11 ++ drivers/media/i2c/Makefile | 1 + drivers/media/i2c/wv517s.c | 206 +++++++++++++++++++++++++++++++++++++ 4 files changed, 219 insertions(+) create mode 100644 drivers/media/i2c/wv517s.c diff --git a/MAINTAINERS b/MAINTAINERS index 55b3c2d7a78a..a4380be897e9 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -28555,6 +28555,7 @@ S: Maintained F: drivers/media/i2c/ak* F: drivers/media/i2c/dw* F: drivers/media/i2c/lm* +F: drivers/media/i2c/wv517s.c =20 V4L2 CAMERA SENSOR DRIVERS M: Sakari Ailus diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 5c52007f9cbe..c5636e0cbecf 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -949,6 +949,17 @@ config VIDEO_DW9807_VCM capability. This is designed for linear control of voice coil motors, controlled via I2C serial interface. =20 +config VIDEO_WV517S + tristate "WV517S lens voice coil support" + select REGMAP_I2C + help + This is a driver for the WV517S camera lens voice coil. The driver + supports 10-bit focus control and exposes the actuator through the + standard V4L2 lens sub-device interface. + + To compile this driver as a module, choose M here: the module will be + called wv517s. + endif =20 menu "Flash devices" diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile index d04bd5724552..e480932a9540 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -173,4 +173,5 @@ obj-$(CONFIG_VIDEO_VP27SMPX) +=3D vp27smpx.o obj-$(CONFIG_VIDEO_VPX3220) +=3D vpx3220.o obj-$(CONFIG_VIDEO_WM8739) +=3D wm8739.o obj-$(CONFIG_VIDEO_WM8775) +=3D wm8775.o +obj-$(CONFIG_VIDEO_WV517S) +=3D wv517s.o obj-$(CONFIG_VIDEO_INTEL_CVS) +=3D cvs/ diff --git a/drivers/media/i2c/wv517s.c b/drivers/media/i2c/wv517s.c new file mode 100644 index 000000000000..fa6c6d7524fb --- /dev/null +++ b/drivers/media/i2c/wv517s.c @@ -0,0 +1,206 @@ +// SPDX-License-Identifier: GPL-2.0-only + +/* + * WV517S voice-coil motor driver + * + * Copyright (c) 2014 Intel Corporation. + * Copyright (C) 2026 Maurizio Casciano + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define WV517S_MAX_FOCUS_POSITION 1023 +#define WV517S_DEFAULT_FOCUS_POSITION 300 + +#define WV517S_REG_FOCUS 0x41 +#define WV517S_REG_DRIVE_MODE 0x43 +#define WV517S_DRIVE_MODE_12_6_MS 0x0211 + +struct wv517s_device { + struct v4l2_ctrl_handler ctrl_handler; + struct v4l2_subdev sd; + struct regmap *regmap; + bool resuming; +}; + +static inline struct wv517s_device *to_wv517s(struct v4l2_subdev *sd) +{ + return container_of(sd, struct wv517s_device, sd); +} + +static const struct regmap_config wv517s_regmap_config =3D { + .reg_bits =3D 8, + .val_bits =3D 16, + .max_register =3D WV517S_REG_DRIVE_MODE, + .val_format_endian =3D REGMAP_ENDIAN_BIG, +}; + +static int wv517s_set_ctrl(struct v4l2_ctrl *ctrl) +{ + struct wv517s_device *wv517s =3D + container_of(ctrl->handler, struct wv517s_device, ctrl_handler); + struct device *dev =3D wv517s->sd.dev; + int pm_ret; + int ret; + + if (ctrl->id !=3D V4L2_CID_FOCUS_ABSOLUTE) + return -EINVAL; + + /* Runtime resume restores controls while the PM state is RPM_RESUMING. */ + pm_ret =3D pm_runtime_get_if_active(dev); + if (!pm_ret && !wv517s->resuming) + return 0; + if (pm_ret < 0) + return pm_ret; + + ret =3D regmap_write(wv517s->regmap, WV517S_REG_FOCUS, ctrl->val); + + if (pm_ret > 0) + pm_runtime_put(dev); + + return ret; +} + +static const struct v4l2_ctrl_ops wv517s_ctrl_ops =3D { + .s_ctrl =3D wv517s_set_ctrl, +}; + +static int wv517s_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) +{ + return pm_runtime_resume_and_get(sd->dev); +} + +static int wv517s_close(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) +{ + pm_runtime_put(sd->dev); + + return 0; +} + +static const struct v4l2_subdev_internal_ops wv517s_internal_ops =3D { + .open =3D wv517s_open, + .close =3D wv517s_close, +}; + +static const struct v4l2_subdev_ops wv517s_subdev_ops =3D { }; + +static int wv517s_resume(struct device *dev) +{ + struct v4l2_subdev *sd =3D dev_get_drvdata(dev); + struct wv517s_device *wv517s =3D to_wv517s(sd); + int ret; + + /* Restore the vendor-recommended 12.6 ms ringing-control mode. */ + ret =3D regmap_write(wv517s->regmap, WV517S_REG_DRIVE_MODE, + WV517S_DRIVE_MODE_12_6_MS); + if (ret) + return ret; + + wv517s->resuming =3D true; + ret =3D v4l2_ctrl_handler_setup(&wv517s->ctrl_handler); + wv517s->resuming =3D false; + + return ret; +} + +static DEFINE_RUNTIME_DEV_PM_OPS(wv517s_pm_ops, NULL, wv517s_resume, NULL); + +static int wv517s_probe(struct i2c_client *client) +{ + struct device *dev =3D &client->dev; + struct wv517s_device *wv517s; + int ret; + + wv517s =3D devm_kzalloc(dev, sizeof(*wv517s), GFP_KERNEL); + if (!wv517s) + return -ENOMEM; + + wv517s->regmap =3D devm_regmap_init_i2c(client, &wv517s_regmap_config); + if (IS_ERR(wv517s->regmap)) + return dev_err_probe(dev, PTR_ERR(wv517s->regmap), + "failed to initialize regmap\n"); + + v4l2_i2c_subdev_init(&wv517s->sd, client, &wv517s_subdev_ops); + wv517s->sd.flags |=3D V4L2_SUBDEV_FL_HAS_DEVNODE; + wv517s->sd.internal_ops =3D &wv517s_internal_ops; + wv517s->sd.entity.function =3D MEDIA_ENT_F_LENS; + + v4l2_ctrl_handler_init(&wv517s->ctrl_handler, 1); + v4l2_ctrl_new_std(&wv517s->ctrl_handler, &wv517s_ctrl_ops, + V4L2_CID_FOCUS_ABSOLUTE, 0, + WV517S_MAX_FOCUS_POSITION, 1, + WV517S_DEFAULT_FOCUS_POSITION); + if (wv517s->ctrl_handler.error) { + ret =3D wv517s->ctrl_handler.error; + goto err_free_ctrl_handler; + } + wv517s->sd.ctrl_handler =3D &wv517s->ctrl_handler; + + ret =3D media_entity_pads_init(&wv517s->sd.entity, 0, NULL); + if (ret) + goto err_free_ctrl_handler; + + pm_runtime_set_active(dev); + pm_runtime_enable(dev); + + ret =3D wv517s_resume(dev); + if (ret) + goto err_disable_pm; + + ret =3D v4l2_async_register_subdev(&wv517s->sd); + if (ret) + goto err_disable_pm; + + pm_runtime_idle(dev); + + return 0; + +err_disable_pm: + pm_runtime_disable(dev); + media_entity_cleanup(&wv517s->sd.entity); +err_free_ctrl_handler: + v4l2_ctrl_handler_free(&wv517s->ctrl_handler); + + return ret; +} + +static void wv517s_remove(struct i2c_client *client) +{ + struct v4l2_subdev *sd =3D i2c_get_clientdata(client); + struct wv517s_device *wv517s =3D to_wv517s(sd); + + v4l2_async_unregister_subdev(sd); + pm_runtime_disable(&client->dev); + v4l2_ctrl_handler_free(&wv517s->ctrl_handler); + media_entity_cleanup(&sd->entity); +} + +static const struct i2c_device_id wv517s_id_table[] =3D { + { .name =3D "wv517s" }, + { } +}; +MODULE_DEVICE_TABLE(i2c, wv517s_id_table); + +static struct i2c_driver wv517s_i2c_driver =3D { + .driver =3D { + .name =3D "wv517s", + .pm =3D pm_ptr(&wv517s_pm_ops), + }, + .probe =3D wv517s_probe, + .remove =3D wv517s_remove, + .id_table =3D wv517s_id_table, +}; +module_i2c_driver(wv517s_i2c_driver); + +MODULE_AUTHOR("Maurizio Casciano "); +MODULE_DESCRIPTION("WV517S VCM driver"); +MODULE_LICENSE("GPL"); --=20 2.53.0