From nobody Sat Jun 13 02:56:24 2026 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D8A8A3DA5AD for ; Mon, 11 May 2026 10:42:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778496176; cv=none; b=UHth1ZgczpgHGVR+NVC1OV6gOLsiYRC+077D2bY8w6QKm3nolO/BVyMKjfYt5YhPl5n7iBTmUTDvhQZJbtxIglZusEKGNZRYh0IafvWtl5bL7+fN+I+WgogwkRmV2a1h9mkcpoe/sH8gksRtyl53ioLzSaDrh8qnUubBOZ+ecEE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778496176; 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=NeIEylks0EoEx+xIuo+ecnwWr0f7/NlZdOPHJCkdWqsf+7UP9bcU8jv4PKCD5lyNHptz2PplhU+RitvtuJCCvyUcAvNRR+SUxcYdfUYRx/ToN3zajM/XRwVYbulumroKE8DRhqbzEMIVmq0QjVD5upwBh15I7vpjiX8rwN+gTyE= 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=XvGLaGKS; arc=none smtp.client-ip=209.85.216.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XvGLaGKS" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-366139223e4so2526746a91.0 for ; Mon, 11 May 2026 03:42:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778496174; x=1779100974; 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=XvGLaGKSFPmqZENA5e666mYVr2m216rLf9TaaxaRCCh/Q1cOxaEueKSvJ3FvUyXjN3 XAEzIC9lG/TdvzLkQrzRpHV6kGlJdUttejwUVK4g5ECGnYkz+PHay07PtqIb+ldNe7nb pe+SxFAUHV+1ffTkLKUiD4p1i7LjjTE0ld2fCLt2k5xTq6LHywZzQSTdm7mvhUmGpDIJ jPnqavGyg0vBiI7DIcIX6LIlWDjMviopYO32UEqYhjOfXfQF13H6XxDO18NQmGRUSbtQ r5hdYf56mghiGYldRiQLfUnPwioEOHalit+jOLRlWdIOVRy58BXCvVNhktZFicm5esh8 Il0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778496174; x=1779100974; 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=K/W3JltBce6HNO1DH2gckc9KzvYWemJpsEnV3YFe7ociNFGOeC+yQ7k7jhbtzp+UOs SBDdSnSDQu79SDnquVwaLWD6XI0tXLSArZEYgiduczxFy26nOm3bHj3PRvJSsvFrtx88 R46tbEws5/9IfUM5lFswk6hRalHEmkYvhRj1b1B+Y6QOtbd9UsLkZoHR4LaMl1Fv8cin TLb3JlogiNhcyCjdiBezELOAQWzJpMxc/w0qI337Cm84RGsglk549CrOc38icxw4CqDV zNBDiK3c+QjCz51xBIj5oF4NnFMyqfrJD9c2YO1mQ8J7aatmwzRNqBjagpbq9GvlDNQd QCCw== X-Forwarded-Encrypted: i=1; AFNElJ8A7K933RMQq5RXNsw1JY8MaxqEBm1z7o/yX71ZOPJfUXGMcWj6WsYKVZK4rXwKnDjSJAZ3M2ck/trkmEc=@vger.kernel.org X-Gm-Message-State: AOJu0YyFgVik4ef2/hU9rUsJDDUrgnpkc5kSQ6AQcWj632pwH4wrh1hl dNqjLpPmbXqv9GJhpbLtk/omjpYSK7q5lBqeLMDjxSLqlkDtjLGUyKnO X-Gm-Gg: Acq92OHyaXo4wqIqvLqjLg5NrXia0nGMHp0OIxUHeKqs2CPQ/+ozLPh93DrDJaGtC/7 GuhOrRYZ9VWyrGJUGPoVSqNTwm9UbZxAEniYa6Qf9yzn0yLWakPnbd5J4q2oWKELOFC065a0qw3 PSIUnQURlSs1qYTKf3BppMNq6qi3f289ni5Tljzj5RHk4s3vc5c1cIyRysdze9kz7bDwJyf7hln pPAla9OXsi/Xl2EtQO5FcvnQclMlrcxGdySE0eQItv9xGmVJbcrGAONEnie2h/r7Qwp1bQYR/Ov LJVt1Zh1LusXxHHQCfe41BNbzcQQNcYe4l+5ufbZnN7teNUlQkFQ71gEve86g2uq51WvO7qcaie XyWN+WF4ljCBCW01A/Qx3LcKQIp143QHlRkBCN4ZWe8GSOmWdQh7UaXNjQ6X7tPZWpt1oGxP72u tdqNZ6SoKDW7Xu+XbBFraWqBERVnpe X-Received: by 2002:a17:90a:110f:b0:366:1c9e:99b7 with SMTP id 98e67ed59e1d1-3661c9e9b87mr11161538a91.25.1778496174159; Mon, 11 May 2026 03:42:54 -0700 (PDT) Received: from nuvole ([144.202.86.13]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-367d684009esm7533423a91.11.2026.05.11.03.42.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 03:42:53 -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 v4 1/5] media: hi846: fix hi846_write_reg_16 handling Date: Mon, 11 May 2026 18:39:23 +0800 Message-ID: <20260511103927.279550-2-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260511103927.279550-1-mitltlatltl@gmail.com> References: <20260511103927.279550-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 02:56:24 2026 Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 68C203D9DB3 for ; Mon, 11 May 2026 10:43:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778496191; cv=none; b=UPWiTShfx9A3JYJlQ7dxjve+1qlhABxQONteT90JcdmJ+78048CO/UaHI4yVpwylqapCkG4qj4f2BUrUQYOSOtRrXCMJsskopXpS+lo8TT4YU8bNL5kGt/5/kmtx8F5qvrsgqvjZVGcb/7bxTAr+K0qDq/F/jcsOb7uHteVMJlU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778496191; c=relaxed/simple; bh=86BVjg3fUi6L5l876V4g4U2aWxKi+IkwHNy/9JsGfvo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kvSJflLc/ydtbx2mvld3xObMfiP7ZnKuFmaabfEIi4LkdiLKUJTWvQegW36c8zW671fWB6HD+Uayzz2Ji9DkLqCtYsC3OQqZgVdGaHqE+hmVEs3Xfsre7UBfn787X8oVaalSUkhKkOwv61ga+RK+TleZ994FJGjMceyJ55jqvrM= 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=TkqZwRGp; arc=none smtp.client-ip=209.85.216.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TkqZwRGp" Received: by mail-pj1-f45.google.com with SMTP id 98e67ed59e1d1-368977e334eso89729a91.2 for ; Mon, 11 May 2026 03:43:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778496189; x=1779100989; 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=pvfPrv6bBoCwpgk/d8yLJl6+NN2EUVD+9grDz7Fp0E0=; b=TkqZwRGpzuq88rPxLDqRp3XI4s6s+gu11ulmTiymD8QUAn3hw85WiM9FWKAlgq6v6e KdTvHQkQYmyvW9nw7pddNtPCbvvh/Z58wVGMmCQVsc9FE1IE0odSOon2qMRqaIUXsa82 5gbxM+QK1Hm6IqX+xJkSVwQDPm+b9AQlrDgqNsp8c2GqFGh45/Zs/XtccPzrmZKjCRXH 9bSPjHztQ2ShNopMyz2LrDLy6d19oAbNwASnnn35ij0nnxp8a/l5jBbcEryTtAQx5CI/ 5e/E5AQJyhXlCa8TfG5024TOGQ1RdBlTrDSOPteqV4fygwsqI513B+a6Qs9ushnJAWQ3 y8yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778496189; x=1779100989; 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=pvfPrv6bBoCwpgk/d8yLJl6+NN2EUVD+9grDz7Fp0E0=; b=lU9nNTMe95uJsVu8vHW5t6zjbty3YI6TBXT+hYji04fwn32Eayy4/yK/zd2TAEZ+Rk 5N0kBI61ah1Df4jhr/qOgX3yaKRpoyD9OxZGNwu0ezD+tosiAHddT5rMn/x04lChNZMK kO88oT0qEY9gD7UU58jX92dWdn8DdeKb/r2sLFA3fIA+rC6RGQfI6AqPIqQjln+GNZFh rDgG03BMdsUPCM8koGsQH8BrfeerjVb/uzITb985BzMjEcY6q/ujIQOeuLYhCk7IkapR SdfBMS0VOID4VWM3PqekwC1QO09Ch8KZHVaOXnz6uaui7/ba5Elw+GN3ihOHIVBu2o4W QWRg== X-Forwarded-Encrypted: i=1; AFNElJ8+XrKrWWOeC7+Ga/80t6T/OAeBjDxLoz2WgAVgbPcrhCvgItg5mHipiFaM/XV0eO264IlA9pp64sG6y1M=@vger.kernel.org X-Gm-Message-State: AOJu0Ywun15qnFccNS7UPP6//xDivp1QR5B0W2yiazlZF7rU/id4u3ah jwuxCLnpfs16kvM8ByKpmH2BYybZxvbpXZfVo0Krhae8ZCaKPSt5852o X-Gm-Gg: Acq92OFPFbEkvvWGDcxQ3Qh4Zsz6TE4sjTpPu2vdR6AUqVvYy9Npk6M24JvTk9M3R5N 3D+p+WhXxp3KpqY0PO8UYXk+3wdurvocTY4Hka06fTTL38L0CHr7g19PCC8z380fsPBt6XIp99C F3oU5DJtVsk6ZPMGCvk6XIYgiXvl4WOhI13iuEQeNNaeVRnigXEPv8zhJN9H52XnqPt6r4TTpem ikuMnfwgBTKMiNYl3ZWpvYFk5rnIBO3vgOkp/X7RSknnqNTVjzQq9VoqReT7nQae+Ck/Xz6vL/o nstR0c5DSljv0uMVdNSiA7iRJIWIT75OnwfSbXqz5kqCkrAj4yz4kt+KTuyze4DP0Ta+2LP4ubw q84zpIeW+7sNiYxMerQRhnntJrP3HANyiWrwx2i1oHoPAV42nMT44hGFiM0fhxWwU3Tb2RcAKt6 +i3TsL3WBbufcvjtJdLA== X-Received: by 2002:a17:90a:4ca7:b0:367:c367:7e19 with SMTP id 98e67ed59e1d1-367c3678e61mr7498225a91.21.1778496188786; Mon, 11 May 2026 03:43:08 -0700 (PDT) Received: from nuvole ([144.202.86.13]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-367d684009esm7533423a91.11.2026.05.11.03.42.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 03:43:08 -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 v4 2/5] media: hi846: fix link frequency handling Date: Mon, 11 May 2026 18:39:24 +0800 Message-ID: <20260511103927.279550-3-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260511103927.279550-1-mitltlatltl@gmail.com> References: <20260511103927.279550-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_4lane to current mode, and use it with clock, lane count to calculate link frequency, we use 4-lane config as default, but we can double it easily for 2-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..61297ef66a0e 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 (hi846->nr_lanes =3D=3D 2 && 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 02:56:24 2026 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.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 26F113D9043 for ; Mon, 11 May 2026 10:43:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778496202; cv=none; b=P/dtUvUrjq80p1aUTPMp2Iz64jUIZxbrvL6Cs80SQTH1U4EvWPYXe/QXa4oDxHoQ79cojCOK5oGyHqMm8SieUDORkZKirgcW2rh7f3tHAQe/o3qiYT5bE4q3rU80bsAVoPlDv99BLYCwFxFYhfrWWy0UYX6xJQbq+zUwLXvU8jI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778496202; c=relaxed/simple; bh=Arh65FwgpuoQyK0HMQPAmmIpzCVfFvZU3gN/HmExq5k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FpDhwulw4otB8IPnNm0nSAFl0ZszuxW6jkrAoJiZyI8D1GJrwX52qzwhLPyWuFDYLXy68BlhFtPMBlRjMZ0q9bXHaHjB6wVRuRks3Us9zj342sxydmTNTdvR7FW02qK46LFGEe41ktmznRrM9WX7Q5140CIbD2Xk7BiCKaU0dYA= 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=GTribr/m; arc=none smtp.client-ip=209.85.216.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="GTribr/m" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-3653cb9c6f8so3477709a91.0 for ; Mon, 11 May 2026 03:43:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778496200; x=1779101000; 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=DRXDOC53itDbvSH3E3HyxAV1yZ2/7SesuEGqqAx3Huo=; b=GTribr/mh2Ti4TE9bjSPs5RsdDpXreue5rGGMRR1P1ZMU1ZFvxd/TC5rileFOBOlUZ kggNLzORFR0NgyhBWFZiVH+XHO79bZHPLpvNiYi59gC6jWng6hMYw/mHEWj6t1wMPTGX PROPxdSpGnqTBBgPtqWNMOgR3FKdsJG8NeqamqsI+5txPgvNxVypDQ2Y50gi9Q68qY2q HhZ4tkEbo6oIFsdwkE/F5Mbj62NNsl0Q6vn3NLaYxb+cBe68GTLtN9D8gg4AmXyS2vvi QxufEjeT7ljXeHv97ITsh+EP7yLbVdHoKcpWEOWbriPauJQos3tPyAYwQeKDl51YlDBw V62A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778496200; x=1779101000; 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=DRXDOC53itDbvSH3E3HyxAV1yZ2/7SesuEGqqAx3Huo=; b=qNTwML1npk4tRi4MuU9LubqAkp0rGumqfZFBa70gE+Xr2+SLLYotwsRPBpzOAwWrIM 2QXui2BpxQ10UYD3tw8rcHswK97/kSkiwiNR4KGYq6sfeYn07pPg6Md7yTTEzZtxqbhS DtvXhx++KKsjWT6fgIITguj+tUzSrCs/zQDSqI2CnjuJ1lkEcUjzQ+kvKM2q79JR3LFD LlSBX67yV0wKvLG/00xbYgXZVkCVJFdZcdSoGK/VWKhXjm3f993gsGt+4H295LIHy29p E73ZEsEAmeV7OlOUWE00NSlYp7i/3mueJ9JvCqi4/hT2Qwr46CX8whXy6aZF3SjK5L/Z 7EUA== X-Forwarded-Encrypted: i=1; AFNElJ8+giDrByOBywik3nUsWfoMtIzdCyfg8etnJNyq8FYuMcZgOmhvVaQCxFNnC4q1KNbiyQX8P5XXyvsxfGQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0AKch8Zr1JoSlMI8GZR3gAUCjMT2IS0JZfAfK6BgN+DrqQy+a 1yjfsm1Q5r1/TitDVg91OVudHV36F8fSoYHdF6ufujGihfyN25kbgGOg X-Gm-Gg: Acq92OHVFwxJdQ8jD2uOoZhrhpNDv/3rzb+DgWL+zEadzKjBPkL6mzFFGelHVWAR7Sh tI6l+2B2G2Jhe3gsTDs44VTgoefdVuqe6BkIXOLJjhN5R8ZR59d7Pu8bVC0u1xHoXTuxqUQXo9Y rvKa8ituIDqTDtwFoQe9eU88RPzdEIvSsG2RoH8sdIWaH6+7zpJFBpnKZTexkRtfnjnPjUF82bS 2kHpJgF2DT8R7Dp8Erhgs0C4gX3CqMvQpT0+utUrs0P0MzS1aeIxjnWsqL8c/rmNQ5/493t08rS f2Bc1gy0Ft6/0ylHptPUAATEoI+9q6OmNgoRKfG+05Q9/U/fgvmhh9TpYVCu8nswg+tBxxLfjNr Yu9vejYJbJQpvi4yHYPo6Bea+u5oVzUFXW6LUrqJm17N8TR7M7qdZRqvAZDZMhqEaugAFZU0KHC PFJ89IIrElZhJALVl56kODEkZMUDL8 X-Received: by 2002:a17:90b:3903:b0:367:f9f1:af78 with SMTP id 98e67ed59e1d1-367f9f1b66amr8598826a91.7.1778496200549; Mon, 11 May 2026 03:43:20 -0700 (PDT) Received: from nuvole ([144.202.86.13]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-367d684009esm7533423a91.11.2026.05.11.03.43.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 03:43:20 -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 v4 3/5] media: hi846: fix modes handling for different lane cases Date: Mon, 11 May 2026 18:39:25 +0800 Message-ID: <20260511103927.279550-4-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260511103927.279550-1-mitltlatltl@gmail.com> References: <20260511103927.279550-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 61297ef66a0e..c77b34a5e166 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 02:56:24 2026 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0191D3D6CDA for ; Mon, 11 May 2026 10:43:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778496215; cv=none; b=B0CSo6pBlfVhkeZYgBVzgMQ5iSTadjWTzIfMWb3sDWBnAIgffDLTqAhmx9LI+cmduInRTHk5sNVqLZWfT9byfAy01nD0bhn4bZKGL3980QrfD5axc8YZBdl6fjBCnwXsInsr2yh4XK5i6Xb9rFE/BiTzc3w6v0emcmmOnvMEcFc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778496215; c=relaxed/simple; bh=c5lr+YwyxmPJh4k5BNE+uOrKJBYoOBD+XzseEfCJKKI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hMSALIYSWj40K9PLXHNYOzEAiHRePC+YngjiX2VEhCD/jhF9d2AKk/F8ovos2xxjfVRVwYrwSmi5abi4x2KLuE/ViPOIsrAHnpsrbLS8Kx+zGNiQG4K/rUljKNwA9MxzPnD1D9nZYtD5jjpZHV7dlV65fD0p5qPLZCYrrg7Oo0c= 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=QxOCTtMf; arc=none smtp.client-ip=209.85.216.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QxOCTtMf" Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-366375c43c2so2203211a91.2 for ; Mon, 11 May 2026 03:43:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778496213; x=1779101013; 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=DqfIJWhfpQINNVwmdgP9tbjnCKPgaaqu67uO9dQrqdM=; b=QxOCTtMfkUBa8Oedr48XzqaFUpy5dX9xUjUsIYSSVx/V5jBReB0EmRxdx2QoYTBREQ M8Cl2D5wgJPIq5X9+0D62jp1pWKGh8qc6I/tv3DyfgF+Cqy1y8w2ohDYVcv89MyrFNHa hTT3oDuqnIL8uT3S7hZ3MwUAERhDz/LCj5F4ZD0MdTW/mXOLcKcEhzh5dt4ul/eoSnjx lURGd6jqgALH/9JB2fNpClAEo3IfQH2FFj8ByKaGAO8hSxXYl53DAjV5Bd2srSxynh/X gtg5WueJpAgwbtZfwg2iQJg0ddN2+tMTmYuOX4qu+0g/ZZxQVx6qEdm4f39A6EqmAmwj fobA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778496213; x=1779101013; 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=DqfIJWhfpQINNVwmdgP9tbjnCKPgaaqu67uO9dQrqdM=; b=fwOhanOwmqBxU35x96B04K5VQlJITqbHPnSEnPohT8h7eJXGOs7cdeqAJ0MCLlA2Nt bqRyF5FHl/dpVIGNMpsg4mlPX1I/8EZ1V+2jNUGwXvbi3eSgd+JlwFeLWRKGQ4nMuD/x cDY+QM2Nd/RRluClvOoAL3pRVdvfcM0SP2znus4jRQ0GHEbhuX8Z8h7M+Ue6iO9cZQw7 XI0XcCuHUC4mjMWl2ZAbjwZZParLGDlHKHP4WuqyO3fFiT1w3KtTBg2IEbXm3FRsROs5 4EHKa5jj+rkR7X6/wfQwAn4fkpCN/JPrfczQ2bm6dYQzdjdedNp2Bct0PYz/Em+vSek0 1iYQ== X-Forwarded-Encrypted: i=1; AFNElJ+6XKq5NGmurAIMY8n9yeYc49RG89IrFdBwAs7RgUBluqYfiyLKluAAF++9refwF6SuN+9JSKhzKW/j/AA=@vger.kernel.org X-Gm-Message-State: AOJu0YxeKZqhfDYdHWxDd3q6wG+vmeMN5IHC6rPtaVDcuE8Wxt890ga4 e+DOFLTVDhsBi4CAtaivXiaYo7cFod2addtoUKzd6mEilcPaAxEoLjQP X-Gm-Gg: Acq92OGedwmOZyIfNDdCAveE2+YOxzUtTsPkDx80sV9fJEzBWYuhZvbyIFGLrGwPHLu RX2o61pVhYTpk1mh1Zm4N0pJ9d8nbmbrMfETRQahosu80ojZP/ID0NBIJwLnkQSDyLiz5Ug0jLd gnOJe4YT8IF8Glr9TVfDi4iVhDE9BHkaMV4a2EJnGhmG+wYUjE1xIvbZIeL6VAxDlCxxbWsPkLk 8gNUoO00hFPtc3pjKyReVJ0QUfrr/DJh3SZqMzclriH0ZfyinLBSEx29XlRQrjfD28Kbt4OUs8q c7dGGgdjD0KNv94qmjyxbThzS2SMkR0aPLnMBQjuyLcb/LbYFTbFuaaLmyBFZ3xzwAi+mipQB85 bLEnKEB+h2E3Ja7malE7gI/gpbX45tt3N8WO6SMqJd5k0wacXXGB30QLVL1c7nVUob579jmdWrB nWxz9ZVK/MZdfOHuhwpI14ayxd66CD X-Received: by 2002:a17:90b:1347:b0:366:10f2:8eae with SMTP id 98e67ed59e1d1-3664cd2492cmr13967723a91.23.1778496213228; Mon, 11 May 2026 03:43:33 -0700 (PDT) Received: from nuvole ([144.202.86.13]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-367d684009esm7533423a91.11.2026.05.11.03.43.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 03:43: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 v4 4/5] media: hi846: Add 6MP and 8MP modes support Date: Mon, 11 May 2026 18:39:26 +0800 Message-ID: <20260511103927.279550-5-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260511103927.279550-1-mitltlatltl@gmail.com> References: <20260511103927.279550-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 c77b34a5e166..12df1dc96163 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 02:56:24 2026 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E20C53D9DC7 for ; Mon, 11 May 2026 10:43:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778496226; cv=none; b=CS+06lfl6Z0oxkiXGyEjQnDBdKTJZnfrYrXbdRRPXeb0I9M8XHvcq+YVeKqmr8u0j4PpYomMBcTYb17NoRSpwI0tu41vsInCJHkbcecuRMBvA2nXKBfhTlKWE6bFTjWcGLdKu/0kLM8mZSC5OT441X4V8Vq60pqGr1jnUAv5AEM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778496226; c=relaxed/simple; bh=iazWrLtJH0ZvfQXHNMDmWoeTvLKqPTMtY7iZ5ZxXJzU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r15kBdXyCzCKUiostpf9X+gF1et2FHRZD+y6r4nI2J/X4yxOLKI+HzZwUqQfj5n4IM206kAkQlLwVE3bvXwKQko6w2o4GYvOGoVylih/6Und82gelJAPUAhfAT4d1+yeWQeSK4SBRKz/C+hxdspncdPvvVUZSJK6KFwMLeCovsg= 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=G1YBd4ez; arc=none smtp.client-ip=209.85.216.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="G1YBd4ez" Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-362e30526f8so1956163a91.3 for ; Mon, 11 May 2026 03:43:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778496224; x=1779101024; 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=G1YBd4ez9CQtjhhETw5Njv00Z30Tw6REtL+hUEJGvTswY9Ln+ArL3qS/i4tRJ922/f PHiBA/ln6yrFXc87Xm+CCFfty1Ga8Q30lCnjFZlygxr6NF0QJ56c6YGi1IgSR0fxvTi3 TZxpr6zk1s53HG+PVBMg2txKfcwAcsReejfTPMwtbIilMER1WcOWKZE/X9Z6u7mMjn+d HvQalqXYIF3FLUggh0eyFe/c07CAcEA/bTnKeDFL11/2/nvNDdM//0Zm8JaExAa4b2SB +M6al5aITPAQBNF4JH2sgtB235L20wp0pMOdGg2Ihd1NFKCzQk9B/d14O/j8PkgFE9ZE Gr/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778496224; x=1779101024; 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=csrr8eg6V4TFnYWKk4rrO5U+mQF+bNiYD0S+j5RHBK5Adlvcu8JMcwjFCmz32On2vJ grUlzllBOxGS1jhOJKaAqgt2EN7EamltyLBqKVu+8Z3Z0FSXkcMh6nL7+iHX+ba0+Hf9 jtqABu6XopI+ZCRaRnV9TZlxQSk0OgFdy4AXumBQN3vUAr7WAhy/E8eNqCXjSKHgJVO5 yqOFIleoxGkZV7UhbTDHkf/yJtEwhTwNwiGFJsScBe4xWjsy650PgQ8misG1yIcg+3oH U9GrB2p35KqoZJkbQnqN929/YruAVIMTUov74M/VGBObkHKXeegRJR7wbn/b0Kb/L2be GJYA== X-Forwarded-Encrypted: i=1; AFNElJ8MEhS6ZHx2b5Dkj/TRtf4Eim7jBvaKLsR3kpFnajR1WeLMjFjZkCK5B8gPO56AQjwId1akVSzqZzRm//4=@vger.kernel.org X-Gm-Message-State: AOJu0YzFOsWhFLiuqxEIpCH3o30+3pCtCPqV6p1MQYfXoVbNc9Kb4uV0 nnFhKfOLb08ba/Y2AHh7lBXiC/YUeIyTcV47WsN7714t3k1YGBJznF6B X-Gm-Gg: Acq92OHnn6zv3bMrnjkMyhvMDIc9Pb3EXz/LFsQrM9vUhM0TWptURkpVeavdVuvKZ5+ YfIApZmwAL8toKoaSd9NsrXIw91gIvMfz17VN8zbVY6cVGos4aII1W/jP3rpBWqHctkYrwkBsrb Wj7hQZqr5GzNozFvxvtEJIxuepiJws2OwlgfXSkMrX0ZXoOnASmTQtYdk77G4AB9YqyDsWiOgNG cKPzkyVUc9vyEPbMEBh8JNTjz6ACJoLEnM//4KuEHf1GDRbadg5yZKLCVNBvSXpDVfRkFURvBGu XPSjQlhyjb7khYJ5PnHXTCHT3YESQNHz2h1y/Bj9zI4C+qSgfh99qqdsDyw8U5Nn0cVv2WNIESX fcden/06gqTjFIDjOyz+DwWAISkfiLr9K7w9em1b1+dLIdkfJOzg/l515Y18qj0tNORBw2dLm70 HC7meb8SocmKEcQMwWqWi9azuY+nTq1sG2f710u0U= X-Received: by 2002:a17:90b:57e5:b0:367:b9ed:665f with SMTP id 98e67ed59e1d1-367b9ed8035mr11528030a91.13.1778496224312; Mon, 11 May 2026 03:43:44 -0700 (PDT) Received: from nuvole ([144.202.86.13]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-367d684009esm7533423a91.11.2026.05.11.03.43.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 03:43:43 -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 v4 5/5] arm64: dts: imx8mq-librem5: Correct link frequency list Date: Mon, 11 May 2026 18:39:27 +0800 Message-ID: <20260511103927.279550-6-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260511103927.279550-1-mitltlatltl@gmail.com> References: <20260511103927.279550-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