From nobody Sat Jun 13 03:28:56 2026 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) (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 5AD383BAD9C for ; Mon, 11 May 2026 09:11:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778490696; cv=none; b=fCZMl9WhtpFHA4+/wxJO2qWCCucCj7kMxCZWhMzUYkQGs3dJdA2dA2B7vPv5c4CZ5Ur9y+Hgw3fR3a/a7UydtokJblgQo9MKbp77YPMdFFAj3JVFFRvus/6Ur2ELcaym3l+Z5dW4XzX8jOUXEP2IUAoEJe/krB8qrbBzAxOUzho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778490696; c=relaxed/simple; bh=2Fbe+51I+NHaqoJEm/Ia1P/RkOrsQ8sOHQ84+D4jX5M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YnIQbpJbVrcZ3VUww6kZiEYRadAvu90N+LYxy3jjKnQk2TZ/m801jbVrKo7rVABhipu5WG9PRKJWsnAvHBlLDgyy3XKWUzbn5me25Ww7tMR+eJsNRAp1MxyGTuGFslw4ZCrxSwZeroWGrGOYghV4kPeABKe8n+iyjIuwJinpphk= 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=fOXjKgBI; arc=none smtp.client-ip=209.85.210.172 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="fOXjKgBI" Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-837dfccd950so1847259b3a.0 for ; Mon, 11 May 2026 02:11:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778490693; x=1779095493; 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; bh=mrmu7Ax8Tjv7DXY7cz3wQn6QU0gYid8cSWvbdHALi/M=; b=fOXjKgBIrUxxlZjeFfSpBfmeSr06lnAC4d5lOm/VuJBSZ+DfFbQ28rGcumpRJya7Aq Ep+DOmMcJgQ201ciw8u4WJHAknq3991Ef2eH4bUeeYHI5bQ4CeyFxgoq61PzvpKeY11U OrZxA2SefhJw8MynFVzCKWYpCV/cDmjEsfdCvf9SWYXJ+UIfu0+wde4VMaw298nk/vj9 Zctmjl6kDX68Gt4RKKS/ybYK96T7sv5ElZ3wazkUfYCrwr5vFACA79BzlQnC//9pAUVs RuTNy/QyZ5dOPdB+yqJLMBNBYfYUEnnWtKiS+qZ6zvLNPRF3mKugYMLbqOlMQAVUGx+P 3a6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778490693; x=1779095493; 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; bh=mrmu7Ax8Tjv7DXY7cz3wQn6QU0gYid8cSWvbdHALi/M=; b=ApCP7QdDSUMut/97FO6VpM2ZUt3CPJS7DeCywYLcAFVyIV7ji3ClSG37HyvDwfR+jl L4TOyvU6ehBfY1NL+/TAukR1aSSnz7WE6S92l+j8HRegxVoJ9wG768f02MUNEZ8wWy5w uoqQRiZN2wK6tYS3IoHnNzX9ax2WPTiKWiRpzsRKetjwoFuxj0N2YXudyUOGkibHDO3I eWyPyBlwEmA2O0rEGn6rnPx5gQ75bp5f2BRO3PlzL0xCsPAp0ZjSnKyxTsDD47xRFprV KbDdKqknf60Gh18YPfQtEnnybxG4NRC68PpjLCMwBAyYdZaho4Qqkqty3zYgb1SpGqAA M2UA== X-Forwarded-Encrypted: i=1; AFNElJ9IQzASihEYNH+Px9ZUjQgU888ubTd5XvtVirtegxl3MPidt4aPNm1eK8ZexrNruzY9MLPtaCgLOXlwVx0=@vger.kernel.org X-Gm-Message-State: AOJu0YynlW6lxV8KotKzQNucPK2wf3Csa4EXQhvIbkPpqLYs/eLvfFza mejFXosecPhUdSm5ugH1jt2q2EcduTutRbqoDBq/12jb/HH1rsbFhpLb X-Gm-Gg: Acq92OGiPTYAUop1E8hoCDySrsvXey6gqEw8mo4iGBK0NqwQIVOZ7uCRwS5Cn9RynNB KN+4d3BOGYETi2pMLykrqRxdqtC8fXh6PBs/rpXel7EvekbwiZa2sYrteCmtnHRd7qm/cij3zQX mA7QBWmHhTShxQ17JRxUj0UjDBpOpxkkCncf07EOIwjQ5cw1f3LKJfQFdaXdSi9S4Q/rCYDIHVw IYZJNVv2sjR22VB9VulPmNvPOPkx+uuJg8bb9q2cH0oHN3A0Mh04osfPxzs/n/FQKoLsSP2Yk9c GIa/zrx2E+UVqXUEXKQUjgSvS7ULDqEh2wpU3fuUVdvxOd9edvmfzW7K4eeaC3Q5Tdd1DSJUGI1 b2fA5eJsFXtT/on0im0OlLtnrpZ/AHaQaKWg4tjxcj2N79/p4OeFsTfnQ9WJnrMrYqIuWrq2E12 CxrWZqAW9EUvEAV4opDHUDpRo= X-Received: by 2002:a05:6a20:3ca5:b0:3a1:d516:36ec with SMTP id adf61e73a8af0-3aa5ad31592mr26172526637.56.1778490692746; Mon, 11 May 2026 02:11:32 -0700 (PDT) Received: from nuvole ([2409:8a34:5f37:1974:abc5:99cd:a924:4e86]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8396563f11csm24775517b3a.3.2026.05.11.02.11.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 02:11:32 -0700 (PDT) From: Pengyu Luo To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Sakari Ailus , Martin Kepplinger-Novakovic , Mauro Carvalho Chehab , Hans Verkuil , Sebastian Krzyszkowiak Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Pengyu Luo Subject: [PATCH v3 1/5] media: hi846: fix hi846_write_reg_16 handling Date: Mon, 11 May 2026 17:09:20 +0800 Message-ID: <20260511090924.269106-2-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260511090924.269106-1-mitltlatltl@gmail.com> References: <20260511090924.269106-1-mitltlatltl@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" hi846_write_reg_16() does not clear a positive *err value on success. pm_runtime_get_if_in_use() returns a positive value when the device is already in use. When hi846_set_ctrl() passes &ret holding this positive value) to hi846_write_reg_16(), the function returns with ret as is, the positive value propagates back as a return code, which callers interpret as an error. Fix this by resetting *err to 0 only when it is positive. Fixes: 04fc06f6dc15 ("media: hi846: fix usage of pm_runtime_get_if_in_use()= ") Signed-off-by: Pengyu Luo --- drivers/media/i2c/hi846.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/media/i2c/hi846.c b/drivers/media/i2c/hi846.c index a3f77b8434ca..7f069aca0fce 100644 --- a/drivers/media/i2c/hi846.c +++ b/drivers/media/i2c/hi846.c @@ -1271,6 +1271,8 @@ static void hi846_write_reg_16(struct hi846 *hi846, u= 16 reg, u16 val, int *err) if (*err < 0) return; =20 + *err =3D 0; + put_unaligned_be16(reg, buf); put_unaligned_be16(val, buf + 2); ret =3D i2c_master_send(client, buf, sizeof(buf)); --=20 2.54.0 From nobody Sat Jun 13 03:28:56 2026 Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) (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 586063A9DA1 for ; Mon, 11 May 2026 09:11:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778490699; cv=none; b=AVShuICeQ5GtL4jE4aosF2pe0T8i3qRGXJLCx8e1d7BOhgVXDURzZOTYLWKwPmOBi4JptFkKRk6BMKCX19Khhdf52ab6pZpVvK/n/LDvjtGtfXRzjFPD8lX1bEBTbsZzIVGGQ5lnmKgbeROKVX0+MBsHOYkQwuu3NfA5QhUwWWs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778490699; c=relaxed/simple; bh=BUFAulTNzVqetHKEgSJqSyl4CEAgDPbvCblJAnM2qJ0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tHQyEINMRZLXCoxlCcMqTBtUJ7gQuEFP4PlYEnjUQPQkuM1RyIUznfZgr+3kfMxQ+SEcO/3rFY8D7brRFncGAfgdYIX9RfjAW3okuHdiDz0Iq8PfXoTdNBuLxHfXp2dECRoP3BWmqufLotrQX2o/asmnJLyF6W/UK5Cd1xmTCYM= 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=lUeS/kBO; arc=none smtp.client-ip=209.85.210.171 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="lUeS/kBO" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-82f9fdfc965so1690865b3a.1 for ; Mon, 11 May 2026 02:11:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778490698; x=1779095498; 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; bh=8Rqdip9xlvYYx7a6Z4ny2q52ApONvt288APGOybH+GI=; b=lUeS/kBOUdQFeZpy4T1cZaH1kL/nZ/caOFwps9rpkcCHr7sZrisAW66/MWxdoWfJJo GMKhkoe7WheQPhheo+ZieChXCbI3FMyBzkRpbm3g5vO5BR4F5e+nQ3sF6qCgmpWVWLu5 jzv0w+ZUJx40YtmO3X9Ae83vgaWb4Yia5GYmyRrvLIFc7UzAcRkRM8UuCYqPx9mopieE 5L/OdC71PlJSbQl/OUO8wa8sPH1rsW1JlwRrwNNkX0v8U20R1uIxc/8R6mURL/UK9GzK u3niB7NhaebQXIMW3fLyxnlAwJ6oHEG5PR4HmtsSHIChv7GFoS3t36W8XN4gTsxxjg1/ 5+Mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778490698; x=1779095498; 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; bh=8Rqdip9xlvYYx7a6Z4ny2q52ApONvt288APGOybH+GI=; b=Ne9rHxbiNz+Fb7cN7n9UWzmNcvI1mtEU13H5dVef1/Zuys3Wb9hS8A0ORnOqqf3wiU X+UT5Gk7RymyTCnCW3PprWBKA5WjIF7gWa9OGwhr8iZxMWL819vSiKede8tIndp64yrt gFL3KgyDnwnsgm1rD3+unWGcB/9DbV21kp1kTTulGHOYX2g7WHeDHkqN/Zz6RSjInDBq m/DA4q4h/RiH6bLae6hmMy2R+aLaHbq7ws8D+nRmKTYgRLPD1My8LYLsRl1g/LNBrP7U hH6DtIIJ0QOue+ZkTST9VTjqet0Fp2sSJ2wUP+2TU+IxttGnxYfb+soahxMvDE5J7Juo bhXw== X-Forwarded-Encrypted: i=1; AFNElJ9a2mwV6s+YvbnlA7tguyTroWtSNUiPnPlRPWGW4HCE6ykNmJflcKcEXvzXFrT5zqG6ZJxCz3/q3u0NsHM=@vger.kernel.org X-Gm-Message-State: AOJu0Yz3sUpQ70mx6Up/vfeFPRbFXu9XYBSoJnuUMwnHUevjHywtu5wl 0n64k2XRqeLFRYdtKXHe36Mc6c7I4VlLgwVTzncFzy5tiu2OW0pXVY7j X-Gm-Gg: Acq92OE9rFm+WYutE0T2o0wnreA1O73br4t5LIcGCnVCNnZEbsBc2eBQezGWFBF8mgk w1hPxInlqoPfy0MzN8O5EUWFSl8sW00BmLBo/feT9O/l0Ds/CDFW4KkBMoNZElifeExl4g0ifK9 rdR36fQo7kPq8+tWpEFw9keslhvshKWAEimP1PlScHE4y+NNmTyQxf5s7BUgqm+H8z19XOof5Ok oXVJmXKGM7NtP3MofuwXLa/aJK2gVQhdt/nRtqOhIqtIbv34WOBEZ/z0DKWWGM3sNfKoUrC+g7Q kvApapeE/gVRH1pO6KVqguD5HK3EHGgvF2FNN07NFxhsjdqPaPGEHfhXHxnILzRnGY3WM562tzt KID5hK+TnclKMpY2HBm9yFvfMZXyQ6IkcWZnth8DtnB3712mwrYL6KnL8VQW0coUhWnk1II4IB2 2yBZkD2zBMKvlpd8QhtBHtOZn0Dl7xHFuQ0w== X-Received: by 2002:a05:6a00:1acb:b0:82f:37e3:ae6e with SMTP id d2e1a72fcca58-83cf6a3a8a2mr13196594b3a.31.1778490697664; Mon, 11 May 2026 02:11:37 -0700 (PDT) Received: from nuvole ([2409:8a34:5f37:1974:abc5:99cd:a924:4e86]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8396563f11csm24775517b3a.3.2026.05.11.02.11.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 02:11:37 -0700 (PDT) From: Pengyu Luo To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Sakari Ailus , Martin Kepplinger-Novakovic , Mauro Carvalho Chehab , Hans Verkuil , Sebastian Krzyszkowiak Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Pengyu Luo Subject: [PATCH v3 2/5] media: hi846: fix link frequency handling Date: Mon, 11 May 2026 17:09:21 +0800 Message-ID: <20260511090924.269106-3-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260511090924.269106-1-mitltlatltl@gmail.com> References: <20260511090924.269106-1-mitltlatltl@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" link frequency is tied to PLL configuration, lane count, and external clock rate, so use runtime here instead of hardcoding for specific configuration. To implement this, this commit did 1. dropped exposed link freqs as a v4l2_ctrl, since we are runtime now, it is inconvenient and unnecessary to expose it, and hi846_set_ctrl has nothing to do with it. 2. attached pll_cfg_2lane to current mode, and use it with clock, lane count to calculate link frequency, we use 2-lane config as default, but we can halve it easily for 4-lane case. 3. dropped mclk clock rate check. Fixes: e8c0882685f9 ("media: i2c: add driver for the SK Hynix Hi-846 8M pix= el camera") Signed-off-by: Pengyu Luo --- drivers/media/i2c/hi846.c | 75 ++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/drivers/media/i2c/hi846.c b/drivers/media/i2c/hi846.c index 7f069aca0fce..befd54553df2 100644 --- a/drivers/media/i2c/hi846.c +++ b/drivers/media/i2c/hi846.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 // Copyright (c) 2021 Purism SPC =20 -#include +#include #include #include #include @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -219,8 +220,8 @@ struct hi846_mode { /* Horizontal timing size */ u32 llp; =20 - /* Link frequency needed for this resolution */ - u8 link_freq_index; + /* PLL configuration for 4-lane link at this resolution */ + u16 pll_cfg_4lane; =20 u16 fps; =20 @@ -1040,13 +1041,6 @@ static const char * const hi846_test_pattern_menu[] = =3D { "Resolution Pattern", }; =20 -#define FREQ_INDEX_640 0 -#define FREQ_INDEX_1280 1 -static const s64 hi846_link_freqs[] =3D { - [FREQ_INDEX_640] =3D 80000000, - [FREQ_INDEX_1280] =3D 200000000, -}; - static const struct hi846_reg_list hi846_init_regs_list_2lane =3D { .num_of_regs =3D ARRAY_SIZE(hi846_init_2lane), .regs =3D hi846_init_2lane, @@ -1061,7 +1055,7 @@ static const struct hi846_mode supported_modes[] =3D { { .width =3D 640, .height =3D 480, - .link_freq_index =3D FREQ_INDEX_640, + .pll_cfg_4lane =3D 0x4924, /* HI846_REG_PLL_CFG_MIPI2_H */ .fps =3D 120, .frame_len =3D 631, .llp =3D HI846_LINE_LENGTH, @@ -1086,7 +1080,7 @@ static const struct hi846_mode supported_modes[] =3D { { .width =3D 1280, .height =3D 720, - .link_freq_index =3D FREQ_INDEX_1280, + .pll_cfg_4lane =3D 0x4924, /* HI846_REG_PLL_CFG_MIPI2_H */ .fps =3D 90, .frame_len =3D 842, .llp =3D HI846_LINE_LENGTH, @@ -1112,7 +1106,7 @@ static const struct hi846_mode supported_modes[] =3D { { .width =3D 1632, .height =3D 1224, - .link_freq_index =3D FREQ_INDEX_1280, + .pll_cfg_4lane =3D 0x4924, /* HI846_REG_PLL_CFG_MIPI2_H */ .fps =3D 30, .frame_len =3D 2526, .llp =3D HI846_LINE_LENGTH, @@ -1161,7 +1155,6 @@ struct hi846 { struct v4l2_ctrl_handler ctrl_handler; u8 nr_lanes; =20 - struct v4l2_ctrl *link_freq; struct v4l2_ctrl *pixel_rate; struct v4l2_ctrl *vblank; struct v4l2_ctrl *hblank; @@ -1192,21 +1185,37 @@ static const struct hi846_datafmt *hi846_find_dataf= mt(u32 code) return NULL; } =20 -static inline u8 hi846_get_link_freq_index(struct hi846 *hi846) +static u64 +hi846_get_link_freq(struct hi846 *hi846, const struct hi846_mode *cur_mode) { - return hi846->cur_mode->link_freq_index; -} + u16 cfg =3D cur_mode->pll_cfg_4lane; + u64 mclk =3D clk_get_rate(hi846->clock); =20 -static u64 hi846_get_link_freq(struct hi846 *hi846) -{ - u8 index =3D hi846_get_link_freq_index(hi846); + /* NOTE: 6, 7 actually map to 8, 10, but this won't be that big */ + u8 post_div1 =3D 1 + FIELD_GET(GENMASK(10, 8), cfg); + u8 post_div2 =3D 1 << FIELD_GET(GENMASK(12, 11), cfg); =20 - return hi846_link_freqs[index]; + /* + * HI846_REG_PLL_CFG_MIPI1_H =3D 0x025a, it is fixed in listed modes + * [11:8]: 0x02 =3D> pre_div =3D 3 + * [7:0]: 0x5a =3D> multiplier =3D 90 + */ + u64 link_freq =3D mclk / 3 * 90 / post_div1 / post_div2; + /* + * for shared modes, since lane count is halved for 2-lane, then getting + * link_freq doubled to match the same data rate. Since 720x480 is + * 2-lane only(reg_list_4lane.num_of_regs =3D=3D 0), no pll cfg for 4-lan= e, + * the pll cfg is for 2-lane, so use the cfg as is. + */ + if (2 =3D=3D hi846->nr_lanes && cur_mode->reg_list_4lane.num_of_regs) + link_freq *=3D 2; + + return link_freq; } =20 static u64 hi846_calc_pixel_rate(struct hi846 *hi846) { - u64 link_freq =3D hi846_get_link_freq(hi846); + u64 link_freq =3D hi846_get_link_freq(hi846, hi846->cur_mode); u64 pixel_rate =3D link_freq * 2 * hi846->nr_lanes; =20 do_div(pixel_rate, HI846_RGB_DEPTH); @@ -1426,14 +1435,6 @@ static int hi846_init_controls(struct hi846 *hi846) =20 ctrl_hdlr->lock =3D &hi846->mutex; =20 - hi846->link_freq =3D - v4l2_ctrl_new_int_menu(ctrl_hdlr, &hi846_ctrl_ops, - V4L2_CID_LINK_FREQ, - ARRAY_SIZE(hi846_link_freqs) - 1, - 0, hi846_link_freqs); - if (hi846->link_freq) - hi846->link_freq->flags |=3D V4L2_CTRL_FLAG_READ_ONLY; - hi846->pixel_rate =3D v4l2_ctrl_new_std(ctrl_hdlr, &hi846_ctrl_ops, V4L2_CID_PIXEL_RATE, 0, @@ -1503,10 +1504,10 @@ static int hi846_set_video_mode(struct hi846 *hi846= , int fps) u64 frame_length; int ret =3D 0; int dummy_lines; - u64 link_freq =3D hi846_get_link_freq(hi846); + u64 link_freq =3D hi846_get_link_freq(hi846, hi846->cur_mode); =20 dev_dbg(&client->dev, "%s: link freq: %llu\n", __func__, - hi846_get_link_freq(hi846)); + link_freq); =20 do_div(link_freq, fps); frame_length =3D link_freq; @@ -1749,7 +1750,6 @@ static int hi846_set_format(struct v4l2_subdev *sd, mf->code =3D HI846_MEDIA_BUS_FORMAT; mf->field =3D V4L2_FIELD_NONE; =20 - __v4l2_ctrl_s_ctrl(hi846->link_freq, hi846_get_link_freq_index(hi846)); __v4l2_ctrl_s_ctrl_int64(hi846->pixel_rate, hi846_calc_pixel_rate(hi846)); =20 @@ -1950,16 +1950,17 @@ static int hi846_identify_module(struct hi846 *hi84= 6) static s64 hi846_check_link_freqs(struct hi846 *hi846, struct v4l2_fwnode_endpoint *ep) { - const s64 *freqs =3D hi846_link_freqs; - int freqs_count =3D ARRAY_SIZE(hi846_link_freqs); + int freqs_count =3D ARRAY_SIZE(supported_modes); + u64 link_freq; int i, j; =20 for (i =3D 0; i < freqs_count; i++) { + link_freq =3D hi846_get_link_freq(hi846, &supported_modes[i]); for (j =3D 0; j < ep->nr_of_link_frequencies; j++) - if (freqs[i] =3D=3D ep->link_frequencies[j]) + if (link_freq =3D=3D ep->link_frequencies[j]) break; if (j =3D=3D ep->nr_of_link_frequencies) - return freqs[i]; + return link_freq; } =20 return 0; --=20 2.54.0 From nobody Sat Jun 13 03:28:56 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (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 75D683BFE2A for ; Mon, 11 May 2026 09:11:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778490704; cv=none; b=MnDL3XaZCUciPI4TM/Qv4xxJtpTY1Fm+J5Mn5wB6YeV+St4UZn5QPFZERxNyBMAT9baFauEYrNSUXqAmkAgaox/ikcA0g2zF0N51CqkrJfOO7+C1M/dX1uK1zna58kTElro+PaYsf0Chf2ekCnb7D2Imr84uYeev9toGq4qNL+A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778490704; c=relaxed/simple; bh=BmKgwW+huMEmoGPoLpy+I+GMFUXpf5lF+r7mZMlbwFw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iFVT2q/mkUee6eMnL0CZ9ji8MWEnFMTaGbuWGhwDAq9js3utAw3TaTNBFfnPc5CTeMPyJ7Q77WCv8UNvRX+my55a6ELbTSDfySa3zxPrMJm0d0MG4Tm8hZBd77rli3il8sW1C9VBmqDoYHpJrhqSgGIx7PaovPZE1IW+fXxygac= 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=Gn24wuQo; arc=none smtp.client-ip=209.85.210.169 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="Gn24wuQo" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-83975e992e1so1926251b3a.2 for ; Mon, 11 May 2026 02:11:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778490703; x=1779095503; 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; bh=ozLkte7ETpH86EHwtLlaK+Q8ddy25XuHUv04YnH5k94=; b=Gn24wuQoOj8rjYSpTaMU80gbJk/X//XiQce9OPwwuc3r9v+oUHLHOFkQNe76NXB/KZ QLceuBCGd2V/PeVmmD/9Fig6TsaPTFm9WNc0X4PK4gB+EjAHNJpKF6+a8LW120JkdLpB uIOtaAFc3GFoIo6CuEn9edIJtqiCuZ1vPMq4seBasyuM96Lq0PVuxZVRH+yyMwjSylRH lalYorpN0zVsPYowSIP0edE3ydvbDdsVlgj+vIrIpdkaik+DTGmzF4YuvnXUjXLACzc9 zxHDjO4mbp/WXZJ8548ijayeJN1R89YXjCwlPc/NVWcZNzt5b9iUnKOgL7SzRIeTu+bi B39w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778490703; x=1779095503; 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; bh=ozLkte7ETpH86EHwtLlaK+Q8ddy25XuHUv04YnH5k94=; b=oi/N91sUGfNxPs1wqJ2PiiZ3mhd5oYYvQ9z9m5y0CQ33v7mSLGkC9tyMPFGiOwtgW3 OVmo824eGd0aO3ETetLjtadJEz3mRU2Yjb19z1dsA/P7c46v3gkL2SW6r9CqVqsY/VfI 6rSkpc7AblLjOcysTu/sTilqayoueatZghJU8vkIbFKvgNYlkF8+vPdyfKvDPaxty4mV qK9gM632jyjzE6TXZCl+vKYYmmQgBrDG9QskJnAgTAm8Plp3BFNFYvgV9u2IZKkfpiOk jj6eIUqgUtwyhRMhKcNjFJfBumtotimsPcSTAyC57xpNxaCo3gy25V1bCEKK15he7syv nJWw== X-Forwarded-Encrypted: i=1; AFNElJ/SW+SPstU4MV5HIkTc5/cchN+/qv4keY9DT42PpRZIZ9EXnJt33f2riHbGUHH79VjNcw4UwooFkA4fG8Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yxi7bV62EU7VBs5BIMIb+OFexRujQ5ITUXY5J5Yu+BrT7VV89SC c98ubctuYZ/sbWqv6SoOYtPfGyRMUJFASvHh5G/rMBrjYyMnj8FbYXuQ X-Gm-Gg: Acq92OGWCKhK7XNBm6QI6bwv5VL+kogmfUF0tSinlOgCUGx+oTwO+T0GXZt7nKNNVVX lwI7V1tyMiXaZoRtvTtPqpgw9IrKpRv5ShwhyC8HEoxmFEcMuOY4nmTpsgDFmpVchG1qWP0Gq44 u+U5+iVw6zCjFXl615mVW4VNZedLn9uH6wWVZ2G8RF3CZ8vt7p44ggEOUeFW1FZPU1GoUFlYZIS yrIreOwh9CEWX0XPcEhz3NQShsfnB+SQQyn5A3yP8AIOec/hTIakUNVDajvKHohN5ZYbDlx71wA YiC19JJz9rFMZ9Q2IGdOEy6NeSyJZaFIBhpOJad6QSq7nSpsyq/x81ypRjKpafR27C3hYMag8K6 P+FPy2nl7+qO25z6aIpsarlnb5PUJh15SfigyyPA+MZHgXtiVgH8GOa3hSA7Yd9kg7YglTtUGkX g1ITOzx+lQ7Jt2NsJFljcjYv6swpgsS7H5WA== X-Received: by 2002:a05:6a00:914a:b0:83e:b22f:373a with SMTP id d2e1a72fcca58-83eb22f4300mr4998591b3a.11.1778490702569; Mon, 11 May 2026 02:11:42 -0700 (PDT) Received: from nuvole ([2409:8a34:5f37:1974:abc5:99cd:a924:4e86]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8396563f11csm24775517b3a.3.2026.05.11.02.11.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 02:11:42 -0700 (PDT) From: Pengyu Luo To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Sakari Ailus , Martin Kepplinger-Novakovic , Mauro Carvalho Chehab , Hans Verkuil , Sebastian Krzyszkowiak Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Pengyu Luo Subject: [PATCH v3 3/5] media: hi846: fix modes handling for different lane cases Date: Mon, 11 May 2026 17:09:22 +0800 Message-ID: <20260511090924.269106-4-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260511090924.269106-1-mitltlatltl@gmail.com> References: <20260511090924.269106-1-mitltlatltl@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When using 4-lane, v4l2_find_nearest_size may return an unsupported mode, 640x480 mode, and it is set to the default mode. To fix it, specifying the supported modes for different lane cases, once the lane count is determined. Reported-by: Sebastian Krzyszkowiak Closes: https://lore.kernel.org/linux-media/OmTXoHZJTSGePymL9I-1Cw@puri.sm/ Fixes: e8c0882685f9 ("media: i2c: add driver for the SK Hynix Hi-846 8M pix= el camera") Signed-off-by: Pengyu Luo --- drivers/media/i2c/hi846.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/drivers/media/i2c/hi846.c b/drivers/media/i2c/hi846.c index befd54553df2..9decfda74787 100644 --- a/drivers/media/i2c/hi846.c +++ b/drivers/media/i2c/hi846.c @@ -1130,6 +1130,8 @@ static const struct hi846_mode supported_modes[] =3D { }, } }; +#define NUM_MODES_2LANE ARRAY_SIZE(supported_modes) +#define NUM_MODES_4LANE (ARRAY_SIZE(supported_modes) - 1) =20 struct hi846_datafmt { u32 code; @@ -1162,6 +1164,8 @@ struct hi846 { =20 struct mutex mutex; /* protect cur_mode, streaming and chip access */ const struct hi846_mode *cur_mode; + const struct hi846_mode *supported_modes; + int num_modes; bool streaming; }; =20 @@ -1736,8 +1740,8 @@ static int hi846_set_format(struct v4l2_subdev *sd, hi846->fmt =3D fmt; =20 hi846->cur_mode =3D - v4l2_find_nearest_size(supported_modes, - ARRAY_SIZE(supported_modes), + v4l2_find_nearest_size(hi846->supported_modes, + hi846->num_modes, width, height, mf->width, mf->height); dev_dbg(&client->dev, "%s: found mode: %dx%d\n", __func__, hi846->cur_mode->width, hi846->cur_mode->height); @@ -1821,8 +1825,11 @@ static int hi846_enum_frame_size(struct v4l2_subdev = *sd, struct v4l2_subdev_frame_size_enum *fse) { struct i2c_client *client =3D v4l2_get_subdevdata(sd); + struct hi846 *hi846 =3D to_hi846(sd); + const struct hi846_mode *supported_modes =3D hi846->supported_modes; + =20 - if (fse->pad || fse->index >=3D ARRAY_SIZE(supported_modes)) + if (fse->pad || fse->index >=3D hi846->num_modes) return -EINVAL; =20 if (fse->code !=3D HI846_MEDIA_BUS_FORMAT) { @@ -1950,12 +1957,12 @@ static int hi846_identify_module(struct hi846 *hi84= 6) static s64 hi846_check_link_freqs(struct hi846 *hi846, struct v4l2_fwnode_endpoint *ep) { - int freqs_count =3D ARRAY_SIZE(supported_modes); + int freqs_count =3D hi846->num_modes; u64 link_freq; int i, j; =20 for (i =3D 0; i < freqs_count; i++) { - link_freq =3D hi846_get_link_freq(hi846, &supported_modes[i]); + link_freq =3D hi846_get_link_freq(hi846, &hi846->supported_modes[i]); for (j =3D 0; j < ep->nr_of_link_frequencies; j++) if (link_freq =3D=3D ep->link_frequencies[j]) break; @@ -1999,6 +2006,13 @@ static int hi846_parse_dt(struct hi846 *hi846, struc= t device *dev) =20 hi846->nr_lanes =3D bus_cfg.bus.mipi_csi2.num_data_lanes; =20 + hi846->supported_modes =3D supported_modes; + hi846->num_modes =3D NUM_MODES_2LANE; + if (hi846->nr_lanes =3D=3D 4) { + hi846->supported_modes =3D supported_modes + 1; + hi846->num_modes =3D NUM_MODES_4LANE; + } + if (!bus_cfg.nr_of_link_frequencies) { dev_err(dev, "link-frequency property not found in DT\n"); ret =3D -EINVAL; @@ -2088,7 +2102,7 @@ static int hi846_probe(struct i2c_client *client) if (ret) goto err_power_off; =20 - hi846->cur_mode =3D &supported_modes[0]; + hi846->cur_mode =3D &hi846->supported_modes[0]; =20 ret =3D hi846_init_controls(hi846); if (ret) { --=20 2.54.0 From nobody Sat Jun 13 03:28:56 2026 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) (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 4E98A3C197E for ; Mon, 11 May 2026 09:11:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778490709; cv=none; b=gQuQleq2vgVQfEnegspoCbAlNj6kOhw12l2wIhNJDEpgx0LAPcL3oacI6SSMhEQhHJsrG1Gov2/maX3AMGdnJlD1g7zHAzcS7trlrmU8fmve1ORLK5Yp2c6BihWgwnfwv8ZZhAvnTbrg2+sVKAeY9xIpY8P1JPE3/WEmh4ZL1dk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778490709; c=relaxed/simple; bh=0qhvDT+Vwxn5ikuiZQZ9E4RW4aatCiSTKKq4yBlK8jU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SYxUMGIx9BQUbP7Qdoux/Xy75+a5+vS6XgfetFVNvln93iwK7JWj/MT6TE7Qf1oEycXCcKZAL7a4Fw7Nk6XGsMZ++yj9Xdte64ofm9VFu9rgNnaHQSs83Y7eqBdEZZTci5GmzlxGA7ZAr18lyMx6vyrhzBW99qvZlaE/qgXlIuc= 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=dN0qAkYG; arc=none smtp.client-ip=209.85.210.177 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="dN0qAkYG" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-83537a80ab6so2580854b3a.1 for ; Mon, 11 May 2026 02:11:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778490708; x=1779095508; 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; bh=DvqNnKoL2Rdmo5K4e7ujzJasS4PL0erGyYw5kyGQiVk=; b=dN0qAkYGwA5n+6dbmMEO+7t3b8++nMQk+Y9b9QB1eFTk8tW35U3t7BQ5D3TvGGKrFk cxHBbvAIdSkii+oEOhU/+/d1CMvTCX7YSRouD+IUKaXxjg/MOw6wJtMAIo88uqnRGDa/ PAYJ0EzHlmHyBICmO1u8LS5ISXhaQOljVKp/vbLpufnX5C3u8QK7hk3WV+TS4PU4q565 3mam6RFPifqPCbioKN4Rm+u6ayjte8es5WvQEVtnesWNV3y0WC3ktldiaXhuIy5FkaFi WiPDuOjf5xEZ9rIJZprI2o30mRzNHc9p5Y/AaOmBbTYPT3xYmVIlf0eeVSUgYjnM1E/3 4jiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778490708; x=1779095508; 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; bh=DvqNnKoL2Rdmo5K4e7ujzJasS4PL0erGyYw5kyGQiVk=; b=TUkQBh3qBNUfAz5NSSvAyQDz4/6WPGc6T2NFEyzU/FlX0Lhazfd6vdtjQ7WGQog3z2 cyUxFpiTS0JI/dFu68ePPfRZZ+ZALSbypEur16XSDa+msqUh4vtc+ZlUdehxtsSGM3jY j0rHbF0R0Lzb/BpZ30gSlI9ds+PSxK6paNMtynvzkZqjK7fa0hQPGWhHedje87XxjqM1 w/sjhQ+Lvj9v+0zB7FY93hyQSUdGdwgFLBzfsus+sBZgOM2QBhrthOISdir7OFMI4iq4 1weUQiKs+atHqzwdB9e+bZVMxrFxItaHpvvQ8ilCugd85DbkP4pKPz+VwG8OsvAoClCW V0LQ== X-Forwarded-Encrypted: i=1; AFNElJ8dZmicKa8EbHtrFMzoTylMubxC8ymkffXMLnRbc/lKnFqZU4iyA+0kyCqXi239yo8LH9J4vjTTEMOvs9k=@vger.kernel.org X-Gm-Message-State: AOJu0YxYAMYi+53PJpYRceruj4Lzj8spm6p3AP9FL57ssHUFLHmM3UPg wmBbnF5EtK2qK8SJAjxZ1ZvdHqbcsoWt6vwC4ZxKm7TL/LSUKODQqK2d X-Gm-Gg: Acq92OGMATuCFDGREuaootDZ0SBniFk1GvvmnzMUkPGstElXy8X542+P8xSTc2qeFeH XDlZi1VIU/7jEE4jy8gQokG3ZiM1a8oNe8IfPoOFJ5aYT4o3+H2v6Ia53XYwpa0cJMf6YYYRQyW ufhGqA7zU7Z+XjfXh58A7vBoSw8xnQ7e0Bj5xJx/ghn4MnpHS6it31LPXj4X4Hg1tTNer8vEx97 Iw8xXfvtsgLGb6hrCunhfgvrcsHpB3/FKmAfmVSJxRV9YIBJtaLoer+hqfmT5EBDRN7A/w6F+xI eruHfXLr5bPV3Umqthfhx9Eo4kkVMT9wFnz2BDdLaNAEval1BzBal6h1eY9aEciOoyPB4OEF6yB Z7Rk2psw+r80+GYj/Bd/2pB8at7Xqs9Hxyvg+JuLJlFpEFqx8nitcUn8S4JxT/EuAq1uL+rEmwU 7jO4DdayDbajD1MK4D7y1d04o= X-Received: by 2002:a05:6a00:4b52:b0:835:cc47:6fe7 with SMTP id d2e1a72fcca58-83e3afd76b0mr8548676b3a.30.1778490707607; Mon, 11 May 2026 02:11:47 -0700 (PDT) Received: from nuvole ([2409:8a34:5f37:1974:abc5:99cd:a924:4e86]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8396563f11csm24775517b3a.3.2026.05.11.02.11.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 02:11:47 -0700 (PDT) From: Pengyu Luo To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Sakari Ailus , Martin Kepplinger-Novakovic , Mauro Carvalho Chehab , Hans Verkuil , Sebastian Krzyszkowiak Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Pengyu Luo Subject: [PATCH v3 4/5] media: hi846: Add 6MP and 8MP modes support Date: Mon, 11 May 2026 17:09:23 +0800 Message-ID: <20260511090924.269106-5-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260511090924.269106-1-mitltlatltl@gmail.com> References: <20260511090924.269106-1-mitltlatltl@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Hi846 is an 8MP sensor, but the upstream driver has only supported 2MP mode for years. This patch adds 6MP and 8MP modes to maximize sensor utilization. Note that these modes require 4-lane MIPI CSI-2, as the downstream driver only exposes 2MP, 6MP, and 8MP configurations in 4-lane operation on the target device. The register sequences are extracted from the downstream Windows driver. Signed-off-by: Pengyu Luo --- drivers/media/i2c/hi846.c | 154 +++++++++++++++++++++++++++++++++++++- 1 file changed, 152 insertions(+), 2 deletions(-) diff --git a/drivers/media/i2c/hi846.c b/drivers/media/i2c/hi846.c index 9decfda74787..68302d0b7ca5 100644 --- a/drivers/media/i2c/hi846.c +++ b/drivers/media/i2c/hi846.c @@ -1028,6 +1028,106 @@ static const struct hi846_reg mode_1632x1224_mipi_4= lane[] =3D { {HI846_REG_TG_ENABLE, 0x0100}, }; =20 +static const struct hi846_reg mode_3264x1836_config[] =3D { + {HI846_REG_MODE_SELECT, 0x0000}, + {HI846_REG_Y_ODD_INC_FOBP, 0x1111}, + {HI846_REG_Y_ODD_INC_VACT, 0x1111}, + {HI846_REG_Y_ADDR_START_VACT_H, 0x0172}, + {HI846_REG_Y_ADDR_END_VACT_H, 0x089d}, + {HI846_REG_UNKNOWN_005C, 0x2101}, + {HI846_REG_FLL, 0x09de}, + {HI846_REG_LLP, 0x0ed8}, + {HI846_REG_BINNING_MODE, 0x0022}, + {HI846_REG_HBIN_MODE, 0x0000}, + {HI846_REG_UNKNOWN_0A24, 0x0000}, + {HI846_REG_X_START_H, 0x0000}, + {HI846_REG_X_OUTPUT_SIZE_H, 0x0cc0}, + {HI846_REG_Y_OUTPUT_SIZE_H, 0x072c}, + {HI846_REG_EXPOSURE, 0x09d8}, + + /* For OTP */ + {HI846_REG_UNKNOWN_021C, 0x0001}, + {HI846_REG_UNKNOWN_021E, 0x0235}, + + {HI846_REG_ISP_EN_H, 0x014a}, + {HI846_REG_UNKNOWN_0418, 0x023e}, + {HI846_REG_UNKNOWN_0B02, 0xe04d}, + {HI846_REG_UNKNOWN_0B10, 0x6821}, + {HI846_REG_UNKNOWN_0B12, 0x0120}, + {HI846_REG_UNKNOWN_0B14, 0x0001}, + {HI846_REG_UNKNOWN_2008, 0x38fd}, + {HI846_REG_UNKNOWN_326E, 0x0000}, +}; + +static const struct hi846_reg mode_3264x1836_mipi_4lane[] =3D { + {HI846_REG_UNKNOWN_0900, 0x0300}, + {HI846_REG_MIPI_TX_OP_MODE, 0xc319}, + {HI846_REG_UNKNOWN_0914, 0xc109}, + {HI846_REG_TCLK_PREPARE, 0x061a}, + {HI846_REG_UNKNOWN_0918, 0x0407}, + {HI846_REG_THS_ZERO, 0x0a0b}, + {HI846_REG_TCLK_POST, 0x0e08}, + {HI846_REG_UNKNOWN_091E, 0x0a00}, + {HI846_REG_UNKNOWN_090C, 0x0427}, + {HI846_REG_UNKNOWN_090E, 0x0059}, + {HI846_REG_UNKNOWN_0954, 0x0089}, + {HI846_REG_UNKNOWN_0956, 0x0000}, + {HI846_REG_UNKNOWN_0958, 0xca80}, + {HI846_REG_UNKNOWN_095A, 0x9240}, + {HI846_REG_PLL_CFG_MIPI2_H, 0x4124}, + {HI846_REG_TG_ENABLE, 0x0100}, +}; + +static const struct hi846_reg mode_3264x2448_config[] =3D { + {HI846_REG_MODE_SELECT, 0x0000}, + {HI846_REG_Y_ODD_INC_FOBP, 0x1111}, + {HI846_REG_Y_ODD_INC_VACT, 0x1111}, + {HI846_REG_Y_ADDR_START_VACT_H, 0x0040}, + {HI846_REG_Y_ADDR_END_VACT_H, 0x09cf}, + {HI846_REG_UNKNOWN_005C, 0x2101}, + {HI846_REG_FLL, 0x09de}, + {HI846_REG_LLP, 0x0ed8}, + {HI846_REG_BINNING_MODE, 0x0022}, + {HI846_REG_HBIN_MODE, 0x0000}, + {HI846_REG_UNKNOWN_0A24, 0x0000}, + {HI846_REG_X_START_H, 0x0000}, + {HI846_REG_X_OUTPUT_SIZE_H, 0x0cc0}, + {HI846_REG_Y_OUTPUT_SIZE_H, 0x0990}, + {HI846_REG_EXPOSURE, 0x09d8}, + + /* For OTP */ + {HI846_REG_UNKNOWN_021C, 0x0001}, + {HI846_REG_UNKNOWN_021E, 0x0235}, + + {HI846_REG_ISP_EN_H, 0x014a}, + {HI846_REG_UNKNOWN_0418, 0x0000}, + {HI846_REG_UNKNOWN_0B02, 0xe04d}, + {HI846_REG_UNKNOWN_0B10, 0x6821}, + {HI846_REG_UNKNOWN_0B12, 0x0120}, + {HI846_REG_UNKNOWN_0B14, 0x0001}, + {HI846_REG_UNKNOWN_2008, 0x38fd}, + {HI846_REG_UNKNOWN_326E, 0x0000}, +}; + +static const struct hi846_reg mode_3264x2448_mipi_4lane[] =3D { + {HI846_REG_UNKNOWN_0900, 0x0300}, + {HI846_REG_MIPI_TX_OP_MODE, 0xc319}, + {HI846_REG_UNKNOWN_0914, 0xc109}, + {HI846_REG_TCLK_PREPARE, 0x061a}, + {HI846_REG_UNKNOWN_0918, 0x0407}, + {HI846_REG_THS_ZERO, 0x0a0b}, + {HI846_REG_TCLK_POST, 0x0e08}, + {HI846_REG_UNKNOWN_091E, 0x0a00}, + {HI846_REG_UNKNOWN_090C, 0x0427}, + {HI846_REG_UNKNOWN_090E, 0x0059}, + {HI846_REG_UNKNOWN_0954, 0x0089}, + {HI846_REG_UNKNOWN_0956, 0x0000}, + {HI846_REG_UNKNOWN_0958, 0xca80}, + {HI846_REG_UNKNOWN_095A, 0x9240}, + {HI846_REG_PLL_CFG_MIPI2_H, 0x4124}, + {HI846_REG_TG_ENABLE, 0x0100}, +}; + static const char * const hi846_test_pattern_menu[] =3D { "Disabled", "Solid Colour", @@ -1128,9 +1228,59 @@ static const struct hi846_mode supported_modes[] =3D= { .width =3D 1632 * 2, .height =3D 1224 * 2, }, - } + }, + { + .width =3D 3264, + .height =3D 1836, + .pll_cfg_4lane =3D 0x4124, /* HI846_REG_PLL_CFG_MIPI2_H */ + .fps =3D 30, + .frame_len =3D 2526, + .llp =3D HI846_LINE_LENGTH, + .reg_list_config =3D { + .num_of_regs =3D ARRAY_SIZE(mode_3264x1836_config), + .regs =3D mode_3264x1836_config, + }, + .reg_list_2lane =3D { + .num_of_regs =3D 0, + }, + .reg_list_4lane =3D { + .num_of_regs =3D ARRAY_SIZE(mode_3264x1836_mipi_4lane), + .regs =3D mode_3264x1836_mipi_4lane, + }, + .crop =3D { + .left =3D 0x46, + .top =3D 0x172, + .width =3D 3264, + .height =3D 1836, + }, + }, + { + .width =3D 3264, + .height =3D 2448, + .pll_cfg_4lane =3D 0x4124, /* HI846_REG_PLL_CFG_MIPI2_H */ + .fps =3D 30, + .frame_len =3D 2526, + .llp =3D HI846_LINE_LENGTH, + .reg_list_config =3D { + .num_of_regs =3D ARRAY_SIZE(mode_3264x2448_config), + .regs =3D mode_3264x2448_config, + }, + .reg_list_2lane =3D { + .num_of_regs =3D 0, + }, + .reg_list_4lane =3D { + .num_of_regs =3D ARRAY_SIZE(mode_3264x2448_mipi_4lane), + .regs =3D mode_3264x2448_mipi_4lane, + }, + .crop =3D { + .left =3D 0x46, + .top =3D 0x40, + .width =3D 3264, + .height =3D 2448, + }, + }, }; -#define NUM_MODES_2LANE ARRAY_SIZE(supported_modes) +#define NUM_MODES_2LANE (ARRAY_SIZE(supported_modes) - 2) #define NUM_MODES_4LANE (ARRAY_SIZE(supported_modes) - 1) =20 struct hi846_datafmt { --=20 2.54.0 From nobody Sat Jun 13 03:28:56 2026 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) (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 210933C3453 for ; Mon, 11 May 2026 09:11:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778490715; cv=none; b=jzshViyHZMAslhdsKqltxTa2GJWu5eoXXgKANtGVYGiuyTxEll9if9yCKelktOtC/AVAWR5QpmV1EYEglFT0mdQZLEE+Fv/nvL1wpLMbL2IKGjg+8BpdGimV9TIve2Dxa2uNramrPzYEjH7zfpSJy72CWeuawlTOo+x1QYL2ixI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778490715; c=relaxed/simple; bh=iazWrLtJH0ZvfQXHNMDmWoeTvLKqPTMtY7iZ5ZxXJzU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qJWol+MePuu6vnYnL6bEgWH4uW5WOsNo0SMrKZHWg4z3d/0kcxHcgr7FQ2gqq/s+oX486m7cf3YqadoeU9iVeAtbKIPk8VQcttgiB7Ol4H5D0XhmWWGKVpWmHZKGPahL/QJ32NMBrmel7csj3QEFbrUqMnPe+1vSviKet/Ii55w= 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=cJNuZPyc; arc=none smtp.client-ip=209.85.210.178 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="cJNuZPyc" Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-8353c9f24d2so2043721b3a.3 for ; Mon, 11 May 2026 02:11:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778490712; x=1779095512; 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; bh=4EVdxV8Se2LiyuEjyoag3giBCPKNVKgEYji5bgopuUQ=; b=cJNuZPycB1GywWBSMI9WH2uRmcF0kM1NZo56HHDH2xoWTYszJy/Khtvqxn1ffca3OD WmexjKGfbNHHWDok85UbaoJzNMwS5rgufEidM2pqkLdp644nHkUlQq3SSyjW55llbmpO lF3KqNOO4DXMBB7v7JP2K/FV+Q8k2A9yeIenySJgOp8Sp8r72wzW9jSok4Fybkep3zwR aBmkJD6v5nmsEI2gEFuEoptvovixVCugacdIPp/4CVzT5Ca9Jwc+3J8P0H0pWxL50Hil U7ysu0g2KC+n0E6vjOH1XuovAlDCZ1bkhGREuYVdRLUh99pZ/jxGwIpN6w1zYPMZ1pMs dakw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778490712; x=1779095512; 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; bh=4EVdxV8Se2LiyuEjyoag3giBCPKNVKgEYji5bgopuUQ=; b=Qo1zoTacBkovc/Mx5xSZdtYZNltto6JmgrW/z/AUbS1qVVe6Cx0uFHbbp/vwkhf7sv 9DnXOcTv7I98jhCV3p9QHjr5JfL6mGSvgF7bge07GPzshk4u140sMbOE7B+kOQbkHgQu vD3WgPeX4/5b8hSUa3FWPuzlSMA+m8nPIqLQYX27RDpAchNvPSiyCGxUwtUKbDETeVUo BYFwB1EcrD0Ve9Z938BNNKOGsk2OkdEtRLev/q461zHy09xFhJ2ME6ZMrg2bPJWR5aYM nfRtHRdQ29UOoF0KW7LaHnjP2Owcptqa+VXkettYtttesx3w9Zb3JKM2EA0t9J0uJu5x E4dg== X-Forwarded-Encrypted: i=1; AFNElJ9eSmEBDTatfwZVi7rWH4aSgybi/lvxUleh9s/N3nBq9xzeVz9f9RPo4r6dj+LCuQCvgDpcA6+K6IrvZ00=@vger.kernel.org X-Gm-Message-State: AOJu0YzKweyRwL2MKV3bz0zNXDjLnSsnKd+QqOEpPPKbtVLZSEIYne4f 930F+MGNI/c4edNGFEXGe0/dgsJQ39hOK8T6qCdr1VPgGtIMbPQvhuEy X-Gm-Gg: Acq92OEegD4LQOnQfD0fHwRwoaCySUezYpNlcEWpBoQV0h3Eui828qWguSIU4qzFrkG FLA1Gwdhfnpd1h5fMuCppodmoYjZ9lA5MWCk6ceB/tJ0l5wFYu2IqsbVmuseU7EyYHkQRRO2ddq 8VIfQQ/FS7FmMdw3YMbFFUE+q0ulyEknXnnOO902HvTDyJL0KDaHlsuHa0buJi1A3PGlaj0o545 L5tg4ghwzrUOJiTRth2XFsEpKGmZjATtpWkAVGGaroCzy/D+drQSo2c7ZjQulLID58w66yWgv6W MMeZq6VGVQHg0RoyK+v0B3N+CFg3HikjTrTXDc6y5tCNpPhBzFYQhIDdMebZWVjJ0Jawn1SgmPP NMepAaJmM249AB174UhsfGLvaMjhAk9Oh4Q4I7ByvNErQ+tl/6lzimJzjj/kDdIQjkLO7NDZ2P2 uAaCr0+zGWMAGdZD2jXyjYJKw= X-Received: by 2002:a05:6a00:a93:b0:829:8cfb:df45 with SMTP id d2e1a72fcca58-83a5bec54f7mr22142513b3a.15.1778490712503; Mon, 11 May 2026 02:11:52 -0700 (PDT) Received: from nuvole ([2409:8a34:5f37:1974:abc5:99cd:a924:4e86]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8396563f11csm24775517b3a.3.2026.05.11.02.11.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 02:11:52 -0700 (PDT) From: Pengyu Luo To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Sakari Ailus , Martin Kepplinger-Novakovic , Mauro Carvalho Chehab , Hans Verkuil , Sebastian Krzyszkowiak Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Pengyu Luo Subject: [PATCH v3 5/5] arm64: dts: imx8mq-librem5: Correct link frequency list Date: Mon, 11 May 2026 17:09:24 +0800 Message-ID: <20260511090924.269106-6-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260511090924.269106-1-mitltlatltl@gmail.com> References: <20260511090924.269106-1-mitltlatltl@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" According to the hi846 datasheet and the register lists, they are mclk / prediv * multiplier / post_div1 / post_div2 =3D 25Mhz / 3 * 90 / 1 / {1,2} =3D 187.5Mhz, 375Mhz Signed-off-by: Pengyu Luo --- arch/arm64/boot/dts/freescale/imx8mq-librem5.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/freescale/imx8mq-librem5.dtsi b/arch/arm64= /boot/dts/freescale/imx8mq-librem5.dtsi index f5d529c5baf3..cc5604172192 100644 --- a/arch/arm64/boot/dts/freescale/imx8mq-librem5.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8mq-librem5.dtsi @@ -1122,7 +1122,7 @@ port { camera1_ep: endpoint { data-lanes =3D <1 2>; link-frequencies =3D /bits/ 64 - <80000000 200000000 300000000>; + <187500000 375000000>; remote-endpoint =3D <&mipi1_sensor_ep>; }; }; --=20 2.54.0