From nobody Thu Apr 9 14:27:04 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 97EE376026; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; cv=none; b=ro8IhR08xzI4qRv5UGLbENrSB04/WAzZkAiLIzI0VqVl/bQe7ZjHrGnWRfZbd3VPpfaep2aFMvduE8J5VXqqRIVNa15+N17/rHGCrhMC7bMn02PJ1q9Cg9SDX/A4NDjH6TEp0K6StD1NT/Jp8exeWxOYcA6EgcAGb0sNbzFikys= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; c=relaxed/simple; bh=j2gLoXXt9hZztDsLFyfrf5Sqyggp90svuyVYO7gSSHo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FUfOt4MDgNiF29eAISLM/SkYQyPM6/B4RhQvu2KSIw5ddIqW4JrjaSNCxDekC8lcxPuKbtq1oOiBzUBmT2ULknE6+ef414E51gyXMb/SUTfqjgQOGarn8r7yVx3xbh8ld9A3SKZaJxS1lcI6VJ2b8PBDSNARSqHYjiXoyp4y4J0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=S6oAewxH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="S6oAewxH" Received: by smtp.kernel.org (Postfix) with ESMTPS id 46956C19425; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772326283; bh=j2gLoXXt9hZztDsLFyfrf5Sqyggp90svuyVYO7gSSHo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=S6oAewxHR7sizza3/KZ0Q+JukbnqzZbPsQXALxsByWVyXHClIB0kW4imiJC8u09aP zrLIYK7xFp0mXuIWz1tyYuS1s/yp9OcYfy0JV8cxAyItQygYsW5PJKWodHKbUa8Fgy Mc4gbqakeKekWaIvqBUEGtyQrfdtWP0MReIQyKOc+diBj86eoq3ETbyJP/kKVDm1WM PDTChrP6iyLGKY7sxTPHcSIinZ3xEcUknm4RwpZ/sV0aye5hnSHEHXHXE2ZGumWr9J j9472kHjRMPEoTZzAHNwomGAlJL0kpZrQ5rAzvDleeCYvqmEftpk2IjqBTkRB9aZ9Q mfMWbjXVREWTw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3530AFD0048; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 01:51:20 +0100 Subject: [PATCH WIP v4 1/9] media: qcom: camss: csiphy: Introduce PHY configuration Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-qcom-cphy-v4-1-e53316d2cc65@ixit.cz> References: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> In-Reply-To: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Luca Weiss , Petr Hodina , Casey Connolly , "Dr. Git" Cc: Konrad Dybcio , Joel Selvaraj , Kieran Bingham , Sakari Ailus , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2436; i=david@ixit.cz; h=from:subject:message-id; bh=fhIzjHIhntdawDvw/VMdM6pBEENvqjYRoy0HoF3mVWw=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpo42I6Y/aJq6dhwi6AWhqxIqqSSAg9MDiUQ6Z7 w2eVnWyC4WJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaONiAAKCRBgAj/E00kg chmmD/9EXYIok2Wx8kEYQRiyPR6DvpnA3q42iNGQ6YoEFAQQ1ldoIDM2xlig9HGdFHYzOScGn5w qatBjeQhr4T76qFgHq5CJ5VeoNNbkNZFt26uc3CyD1kO2KP41BhtJtJneRywbZ8ixUUQaozy93k KyN+cZejjcLPwCyfIZKHx8Echcv1SxGo5S0+klqUXg8DIqKzyqrPSWEkrreKGuQOUE1j7VyKScT IGcWzYN6TieHngJEdseApXKzkubAT1ukVNSZr/VHAqxfcrvHMKiVLdZcN548h6y+UPcD+rFN0Yh wkc86PfSC9Vx2vqa0RkIfNIGON2SjtSeyGG5ak0kuc9ihsOc/E93DH0EajeuXGf2/7AKiDsGPQ+ h9RTLHpAHeeUa7dNerApyz6U6d55rtDBRmW3MWQ2pLKp12+V2buNxp0QBKjQJ1zZxG24ZTtOiNe BKcCJuh47oSutsQwxUpjcuVD2ViICIaSVtyoh6F9e/9GfhIp4tsu7WPxUZhqfPufJam3ULxnhms s+6li9EqNO2mrWWtfJNvsKEvSGPx2zSk9zaI8FRFBjGP6EKEzqHS5l7yQ84sRLLUYI0qx1POTac 1OKmo7mc8x8wr7QThN41s0CMXxUmxBhTytO6HbD1QHWthyTBU6wVtEm5ibNm8aM25OF8+tcL+jf AhlHcNSA/jx88dw== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Read PHY configuration from the device-tree bus-type and save it into the csiphy structure for later use. For C-PHY, skip clock line configuration, as there is none. Signed-off-by: David Heidelberg --- drivers/media/platform/qcom/camss/camss-csiphy.h | 2 ++ drivers/media/platform/qcom/camss/camss.c | 18 +++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.h b/drivers/med= ia/platform/qcom/camss/camss-csiphy.h index 2d5054819df7f..d198171700e73 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy.h +++ b/drivers/media/platform/qcom/camss/camss-csiphy.h @@ -28,11 +28,13 @@ struct csiphy_lane { =20 /** * struct csiphy_lanes_cfg - CSIPHY lanes configuration + * @phy_cfg: interface selection (C-PHY or D-PHY) * @num_data: number of data lanes * @data: data lanes configuration * @clk: clock lane configuration (only for D-PHY) */ struct csiphy_lanes_cfg { + enum v4l2_mbus_type phy_cfg; int num_data; struct csiphy_lane *data; struct csiphy_lane clk; diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/plat= form/qcom/camss/camss.c index 00b87fd9afbd8..ea0c8cf3cd806 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -4411,11 +4411,11 @@ static int camss_parse_endpoint_node(struct device = *dev, if (ret) return ret; =20 - /* - * Most SoCs support both D-PHY and C-PHY standards, but currently only - * D-PHY is supported in the driver. - */ - if (vep.bus_type !=3D V4L2_MBUS_CSI2_DPHY) { + switch (vep.bus_type) { + case V4L2_MBUS_CSI2_CPHY: + case V4L2_MBUS_CSI2_DPHY: + break; + default: dev_err(dev, "Unsupported bus type %d\n", vep.bus_type); return -EINVAL; } @@ -4423,9 +4423,13 @@ static int camss_parse_endpoint_node(struct device *= dev, csd->interface.csiphy_id =3D vep.base.port; =20 mipi_csi2 =3D &vep.bus.mipi_csi2; - lncfg->clk.pos =3D mipi_csi2->clock_lane; - lncfg->clk.pol =3D mipi_csi2->lane_polarities[0]; lncfg->num_data =3D mipi_csi2->num_data_lanes; + lncfg->phy_cfg =3D vep.bus_type; + + if (lncfg->phy_cfg !=3D V4L2_MBUS_CSI2_CPHY) { + lncfg->clk.pos =3D mipi_csi2->clock_lane; + lncfg->clk.pol =3D mipi_csi2->lane_polarities[0]; + } =20 lncfg->data =3D devm_kcalloc(dev, lncfg->num_data, sizeof(*lncfg->data), --=20 2.51.0 From nobody Thu Apr 9 14:27:04 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 97EAA3C465; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; cv=none; b=eSHsr7p/4UtchXj6NRhB6uTGg5V5HBJXO02uHZNu9P1euv+r4IVn/cu+WyCZco4Blv6+I62oRxRvAv/z7DJFxYXwz7MDefBGoKBMSUUzgIJur5vrepWkhbzFYpoKMqlQKvvpa9wNoSbDgBsR9RjK3LVlE5529Haism1lYZ85S88= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; c=relaxed/simple; bh=Uz6QZP7yrFfNujd7Te8dRhcRZJAQIGe3Dv8OgOy8FUo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UVvZmz49yhROOw1jfRjqnhFnC7w7mbdIe6/ipw0e/5dobjxrFdm47EImLhE9hmpXdp1M4k7ZTk7UuXuzkLBondA/ZgdZO9hEFFI0mwgAa+bbqU+QuFTMWc7MnSbeqeLeqoyUxQL9Voeg55e9KICrRP703RTcgwltZ8c6RE8wmY4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=u6M9lW+z; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="u6M9lW+z" Received: by smtp.kernel.org (Postfix) with ESMTPS id 53477C2BC86; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772326283; bh=Uz6QZP7yrFfNujd7Te8dRhcRZJAQIGe3Dv8OgOy8FUo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=u6M9lW+z0FR4CJhJ34Gzt4XAUz6+FLeViVzQVcqFjsklvtXY6gcOxVq9iqDoeWXzN nuqVUMO8PzocbYfbvKF1egsE70y3X+XIw7whJHtSzmaEl7cX1/gtgefy35dyGvZsoq Y9KgqG0gpUs/ehucHC9NuYBxy2ah/RmqDI+egFodU6AYTuUChRGIvdz7bJaoCzUfxj vw+IqYrN53bWJ9eU33rxGl4hw6I6jPmntz4jf/V4Gc0Hj7ki24+PNbOkw+r4RdsrWC uY+qo0MwIC0gffNeZ6aRRpIJJj5vBMANY5Cwqdh+cREJpAhHd60ZogNhz167vrGxC6 Ryew3pDPnNQYA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 45EFBFD0040; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 01:51:21 +0100 Subject: [PATCH WIP v4 2/9] media: qcom: camss: csiphy-3ph: Use odd bits for configuring C-PHY lanes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-qcom-cphy-v4-2-e53316d2cc65@ixit.cz> References: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> In-Reply-To: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Luca Weiss , Petr Hodina , Casey Connolly , "Dr. Git" Cc: Konrad Dybcio , Joel Selvaraj , Kieran Bingham , Sakari Ailus , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6462; i=david@ixit.cz; h=from:subject:message-id; bh=rTZ6J47ECLprwfYBbP1bL6C5zsfu9IOrZXbtNtbAtRE=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpo42Ia0lUzfipazsv1Oav0fS036ikiRXyb0U8Y a45SqFWpZqJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaONiAAKCRBgAj/E00kg cnKyD/kBcPvEkQr9EKloaXvPwIsl0uMcHp6YzzE1Ck34Q0csuq02ujan3aNTR8YbK7ArMz2wE2k 80IBOAHRwejUoGfEiYxDRMhR+Wmxs3t96mDYkxcD1CSr0cKA4SZPdceK5Ik0fXqhGHdWmsFjvtM 04Fq5A5+Oam7oV7lgmejAwf6MhStkZ2leBAWdFa81BBlIulej/cBNwqCoPf+T64QSrkF237rXJx yj1Fi1j6qcaThqd/6uj5W0WNdFemRueiHPUkRs3Iaf+H6nBQIlSJB02CjIXkCjIMnhw5ekt57lN 1TRnCa+Vl84ZMfzHysDdDnTL6nSmG2IiYwbdQ025LmjW48PYty9XNBcDAOHudB9MausQ6QiuJ6K i5WUstgD/Zrgx/kR2lh8PYu8VsyKELuaBcvTditWk50JqTXZ7oZVhS/KYxMvUJ9LQnLw00hBeGn EwVnH+U321xcHj1ZtY2M1dY5IOYlamruykDRkJIuruptTACYeQTyk6gLVyN3wcqycTOWkpCU/IN sXhX+aKKP3B/+N5Z22A1szFhcJZNuek0nkECTuB/TjBEXV1lRwPCN2MnvpLCTbTOIuSkEWiTCfX l4HAEOqOIRhX29PkL5F9j1zZcuftrd6YV4ATfrbn14lVyXAowSJ6qKaY52RO33lh+FY5KGrLoXx xmRrXZRfIzK74Ug== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg So far, only D-PHY mode was supported, which uses even bits when enabling or masking lanes. For C-PHY configuration, the hardware instead requires using the odd bits. Since there can be unrecognized configuration allow returning failure. Signed-off-by: David Heidelberg Reviewed-by: Bryan O'Donoghue --- .../platform/qcom/camss/camss-csiphy-2ph-1-0.c | 8 ++-- .../platform/qcom/camss/camss-csiphy-3ph-1-0.c | 49 +++++++++++++++++-= ---- drivers/media/platform/qcom/camss/camss-csiphy.c | 5 +-- drivers/media/platform/qcom/camss/camss-csiphy.h | 6 +-- 4 files changed, 48 insertions(+), 20 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-2ph-1-0.c b/dri= vers/media/platform/qcom/camss/camss-csiphy-2ph-1-0.c index 9d67e7fa6366a..bb4b91f69616b 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy-2ph-1-0.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy-2ph-1-0.c @@ -94,9 +94,9 @@ static u8 csiphy_settle_cnt_calc(s64 link_freq, u32 timer= _clk_rate) return settle_cnt; } =20 -static void csiphy_lanes_enable(struct csiphy_device *csiphy, - struct csiphy_config *cfg, - s64 link_freq, u8 lane_mask) +static int csiphy_lanes_enable(struct csiphy_device *csiphy, + struct csiphy_config *cfg, + s64 link_freq, u8 lane_mask) { struct csiphy_lanes_cfg *c =3D &cfg->csi2->lane_cfg; u8 settle_cnt; @@ -132,6 +132,8 @@ static void csiphy_lanes_enable(struct csiphy_device *c= siphy, writel_relaxed(0x3f, csiphy->base + CAMSS_CSI_PHY_INTERRUPT_CLEARn(l)); } + + return 0; } =20 static void csiphy_lanes_disable(struct csiphy_device *csiphy, diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/dri= vers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c index 4154832745525..cf83c9e062b81 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c @@ -14,6 +14,7 @@ #include #include #include +#include =20 #define CSIPHY_3PH_LNn_CFG1(n) (0x000 + 0x100 * (n)) #define CSIPHY_3PH_LNn_CFG1_SWI_REC_DLY_PRG (BIT(7) | BIT(6)) @@ -993,13 +994,22 @@ static void csiphy_gen2_config_lanes(struct csiphy_de= vice *csiphy, =20 static u8 csiphy_get_lane_mask(struct csiphy_lanes_cfg *lane_cfg) { - u8 lane_mask; - int i; + u8 lane_mask =3D 0; =20 - lane_mask =3D CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE; + switch (lane_cfg->phy_cfg) { + case V4L2_MBUS_CSI2_CPHY: + for (int i =3D 0; i < lane_cfg->num_data; i++) + lane_mask |=3D BIT(lane_cfg->data[i].pos + 1); + break; + case V4L2_MBUS_CSI2_DPHY: + lane_mask =3D CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE; =20 - for (i =3D 0; i < lane_cfg->num_data; i++) - lane_mask |=3D 1 << lane_cfg->data[i].pos; + for (int i =3D 0; i < lane_cfg->num_data; i++) + lane_mask |=3D BIT(lane_cfg->data[i].pos); + break; + default: + break; + } =20 return lane_mask; } @@ -1027,10 +1037,11 @@ static bool csiphy_is_gen2(u32 version) return ret; } =20 -static void csiphy_lanes_enable(struct csiphy_device *csiphy, - struct csiphy_config *cfg, - s64 link_freq, u8 lane_mask) +static int csiphy_lanes_enable(struct csiphy_device *csiphy, + struct csiphy_config *cfg, + s64 link_freq, u8 lane_mask) { + struct device *dev =3D csiphy->camss->dev; struct csiphy_lanes_cfg *c =3D &cfg->csi2->lane_cfg; struct csiphy_device_regs *regs =3D csiphy->regs; u8 settle_cnt; @@ -1039,9 +1050,23 @@ static void csiphy_lanes_enable(struct csiphy_device= *csiphy, =20 settle_cnt =3D csiphy_settle_cnt_calc(link_freq, csiphy->timer_clk_rate); =20 - val =3D CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE; - for (i =3D 0; i < c->num_data; i++) - val |=3D BIT(c->data[i].pos * 2); + val =3D 0; + + switch (c->phy_cfg) { + case V4L2_MBUS_CSI2_CPHY: + for (i =3D 0; i < c->num_data; i++) + val |=3D BIT((c->data[i].pos * 2) + 1); + break; + case V4L2_MBUS_CSI2_DPHY: + val =3D CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE; + + for (i =3D 0; i < c->num_data; i++) + val |=3D BIT(c->data[i].pos * 2); + break; + default: + dev_err(dev, "Unsupported bus type %d\n", c->phy_cfg); + return -EINVAL; + } =20 writel_relaxed(val, csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(regs->offset, 5)); @@ -1068,6 +1093,8 @@ static void csiphy_lanes_enable(struct csiphy_device = *csiphy, writel_relaxed(0, csiphy->base + CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(regs->offset, i)); } + + return 0; } =20 static void csiphy_lanes_disable(struct csiphy_device *csiphy, diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/med= ia/platform/qcom/camss/camss-csiphy.c index 62623393f4144..938600f3defe1 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c @@ -265,6 +265,7 @@ static int csiphy_set_power(struct v4l2_subdev *sd, int= on) static int csiphy_stream_on(struct csiphy_device *csiphy) { struct csiphy_config *cfg =3D &csiphy->cfg; + const struct csiphy_hw_ops *ops =3D csiphy->res->hw_ops; s64 link_freq; u8 lane_mask =3D csiphy->res->hw_ops->get_lane_mask(&cfg->csi2->lane_cfg); u8 bpp =3D csiphy_get_bpp(csiphy->res->formats->formats, csiphy->res->for= mats->nformats, @@ -295,9 +296,7 @@ static int csiphy_stream_on(struct csiphy_device *csiph= y) wmb(); } =20 - csiphy->res->hw_ops->lanes_enable(csiphy, cfg, link_freq, lane_mask); - - return 0; + return ops->lanes_enable(csiphy, cfg, link_freq, lane_mask); } =20 /* diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.h b/drivers/med= ia/platform/qcom/camss/camss-csiphy.h index d198171700e73..21cf2ce931c1d 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy.h +++ b/drivers/media/platform/qcom/camss/camss-csiphy.h @@ -73,9 +73,9 @@ struct csiphy_hw_ops { void (*hw_version_read)(struct csiphy_device *csiphy, struct device *dev); void (*reset)(struct csiphy_device *csiphy); - void (*lanes_enable)(struct csiphy_device *csiphy, - struct csiphy_config *cfg, - s64 link_freq, u8 lane_mask); + int (*lanes_enable)(struct csiphy_device *csiphy, + struct csiphy_config *cfg, + s64 link_freq, u8 lane_mask); void (*lanes_disable)(struct csiphy_device *csiphy, struct csiphy_config *cfg); irqreturn_t (*isr)(int irq, void *dev); --=20 2.51.0 From nobody Thu Apr 9 14:27:04 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9B0431482E8; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; cv=none; b=ew6C6cOjTFqo+eLGOJLvHTyEjpnZZcfaXYxY0w7enDGXeU0EL6e/MMJhiMgbsXiCrF2idmszhbPJ6YmOvBfRenVTusLl/afGpfH8AqDRI+h8XOWUMg7gyA4Hb1BioAnu5fQXIPdCjEL1CQ7PKGQsP9tk//SZGDxWz7GH2GUO17g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; c=relaxed/simple; bh=V/kaEQX6C9SzR/d+NfS8UjTNWsrCLCWH8jNuXnCCVxk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mwbvTV8EUVzP/jD+SHQYYaEYewTEJk5D64licceWCC9P5naAtqlbHgX56y414o5Fu2v8yIbXQtV55UvmEa1a9UTOwJI9lqKMK9+dQzdYEKCA4sVFZF6GgIQI346D5n0zApBn31PsW8VmUfxoaU+1RNshKqij79ckJT1+V/zwuCQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nLvh1uVZ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nLvh1uVZ" Received: by smtp.kernel.org (Postfix) with ESMTPS id 5FE4DC2BCB0; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772326283; bh=V/kaEQX6C9SzR/d+NfS8UjTNWsrCLCWH8jNuXnCCVxk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=nLvh1uVZM1UXpIXjvmOZ8eqW19b0Pbzatg9VAfWrreeKLIHZzAX92D9wnA/JB0zp+ MgDNBY/RqWN3GAtgLaeRcdscB67JaUFl7PANRNzXnxUFggXv4QNweIyLtxgVYf+/XE UnJvfjtcXBYMc6cguKUP/2lYCH+20WJ41CNIIORcrofNL4dpiwooj9sFgUt2r4a1JT w8gtDEmawfHNrRP6qLAsdxyfm/SS5XlA9JDp/OvhGDP3mpie3OK3wo0fTylXNxfyo1 Q95qY9r2h8pOR3ywDOjd4kTp9MKqtFWOD/NHdggiBRa12k8YRjGI8x2x96XudxU2wq WF4I/GkpVnCng== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5819AFD004B; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 01:51:22 +0100 Subject: [PATCH WIP v4 3/9] media: qcom: camss: Prepare CSID for C-PHY support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-qcom-cphy-v4-3-e53316d2cc65@ixit.cz> References: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> In-Reply-To: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Luca Weiss , Petr Hodina , Casey Connolly , "Dr. Git" Cc: Konrad Dybcio , Joel Selvaraj , Kieran Bingham , Sakari Ailus , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2138; i=david@ixit.cz; h=from:subject:message-id; bh=VE5OUEM0X//rg3dmLrS4SJXKFfJ1U9PcL8DiivLtXg0=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpo42I49cCzgz9a1iEZzYEzT800pShZjkIyRzT8 9ClYGl3pyeJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaONiAAKCRBgAj/E00kg cp9uD/9t4vqsgoKkGQC54Qqxi9WS+6D9RT4VTCOiO1cKBCcARAmg75XqmFtZ+Le6RsdZwA0JgzX xRfnpM791q0ktfoQkuCWV+HHrToLx9GH0qa6l/vE6twum06ypp+Q9QSfRKOBHE78o1eQ1hRmVAy KUxBCsjmuU9oVZUsEXrHWsIeiIiT0lJCRSTA5G0TsmizpzhV7fFmBd5AqpnH8Ecw+2ZznzqXtE8 iWlrA3Lx283fTilleNYC9KbBu/gC1nL/w+XXXVEKTEZ/YpasNc1I30Ibw1TwrRo5GN/DbHr68uP IeSGkDTg7sJsq1LlWcBhLssChBFMbfGHXyl+mBeZjutobRkgIIzt+tXhe9XwLrAUGf9+dsMYlZY vWgvDLJa1pufeMR9ej8zEe5wRXFbED9+79tyo3jhLjdhxpGjT9ZV9If42W79qJbMRFhBbVJlJ4s sXDMCKxY6cZU2+7ELksLXNexpQM6QZ35UEDLr9VyN8rEXNUAfDxaH9Yp4xG8FkrMsNBe4rpJaVX BsfVuRI+8h294p/NRIPr+cfZbsSHt0Uccg9i4xV23EHckSuBbABJuXPrFy8SFd8JelUSiUwlLI1 C6Dsp5/NK2Z16aBqKHTBOEeS5ffZNN29PUu/ROwVWPMmN78fCvJ6YPv3j2t4rbTGhL0oxsedpKL 0nXgdjA9earRARA== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Inherit C-PHY information from CSIPHY, so we can configure CSID properly. CSI2_RX_CFG0_PHY_TYPE_SEL must be set to 1, when C-PHY mode is used. Signed-off-by: David Heidelberg --- drivers/media/platform/qcom/camss/camss-csid-gen2.c | 1 + drivers/media/platform/qcom/camss/camss-csid.c | 1 + drivers/media/platform/qcom/camss/camss-csid.h | 1 + 3 files changed, 3 insertions(+) diff --git a/drivers/media/platform/qcom/camss/camss-csid-gen2.c b/drivers/= media/platform/qcom/camss/camss-csid-gen2.c index 2a1746dcc1c5b..033036ae28a4f 100644 --- a/drivers/media/platform/qcom/camss/camss-csid-gen2.c +++ b/drivers/media/platform/qcom/camss/camss-csid-gen2.c @@ -183,6 +183,7 @@ static void __csid_configure_rx(struct csid_device *csi= d, val =3D (lane_cnt - 1) << CSI2_RX_CFG0_NUM_ACTIVE_LANES; val |=3D phy->lane_assign << CSI2_RX_CFG0_DL0_INPUT_SEL; val |=3D phy->csiphy_id << CSI2_RX_CFG0_PHY_NUM_SEL; + val |=3D csid->phy.cphy << CSI2_RX_CFG0_PHY_TYPE_SEL; writel_relaxed(val, csid->base + CSID_CSI2_RX_CFG0); =20 val =3D 1 << CSI2_RX_CFG1_PACKET_ECC_CORRECTION_EN; diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media= /platform/qcom/camss/camss-csid.c index ed1820488c987..b50b0cfe280c1 100644 --- a/drivers/media/platform/qcom/camss/camss-csid.c +++ b/drivers/media/platform/qcom/camss/camss-csid.c @@ -1275,6 +1275,7 @@ static int csid_link_setup(struct media_entity *entit= y, csid->phy.csiphy_id =3D csiphy->id; =20 lane_cfg =3D &csiphy->cfg.csi2->lane_cfg; + csid->phy.cphy =3D (lane_cfg->phy_cfg =3D=3D V4L2_MBUS_CSI2_CPHY); csid->phy.lane_cnt =3D lane_cfg->num_data; csid->phy.lane_assign =3D csid_get_lane_assign(lane_cfg); } diff --git a/drivers/media/platform/qcom/camss/camss-csid.h b/drivers/media= /platform/qcom/camss/camss-csid.h index aedc96ed84b2f..a82db31bd2335 100644 --- a/drivers/media/platform/qcom/camss/camss-csid.h +++ b/drivers/media/platform/qcom/camss/camss-csid.h @@ -70,6 +70,7 @@ struct csid_phy_config { u32 lane_assign; u32 en_vc; u8 need_vc_update; + bool cphy; }; =20 struct csid_device; --=20 2.51.0 From nobody Thu Apr 9 14:27:04 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A6E2C15539A; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; cv=none; b=rTk0AM8C8ZT73kb6QriyEGo109ZjGFhHZFz7O+46oJtIBrjR1nmo+MBwmz3ebo6eFS1SXu+g1pnL/S6T2WVM/ZgXwIo4c/+RkQykmGoM5w+blFfEcdEn7zITeAggmjVrDRbjHLCfu04g+KakRRA9+VI8P1QuQcaIdxfJvHoBGzQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; c=relaxed/simple; bh=fegcXTqMjiIV206X2z+HxUY2Ah8PqoEDD+xs2idN8pw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=B6AMh1SIXhN8UBqsE9jRcboMuvx0FUbunuwkdkpNUyi22ARIGx9rIpAkvwEBP+jgBHM++RyfMyOkWY99UXCnYP4yWKWag+Jn0Yg84vYVIeU/p7MXAeO7oweW6atZ2eo2iY6/eBZdR28S9hZRJrj3i/jH2Rk6cSlXDzZgtbk/7Qo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pTr/hWS1; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pTr/hWS1" Received: by smtp.kernel.org (Postfix) with ESMTPS id 76D7AC2BCB2; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772326283; bh=fegcXTqMjiIV206X2z+HxUY2Ah8PqoEDD+xs2idN8pw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=pTr/hWS1hYZQr+rVY4dv0x56mYnsmxj3P6uADyZ0g6nXfkjFH8wWxxRHzthYXB8jy /OUxN01UItLcIbNoR4+A9xAHPl2zUWBc1R8VJef5lYpXIsA6zZxvZbE9un1q/AjAQ/ fMBiqK3jQ+DS+zhyI+F7iwYYAcYm7u+BiioeEyqCEGLtGCOc9OcbLhnqWSSE6nVCIk KlHn+zo3eJC8JUB0rFIylSIxkmt/hiESHyuVJ0kMcjDHNsUxHQTUAHdKG/Wc23dTBq 8wu70v2NueUZe5nlPCbiNRLiq7i0kxlWbOuACBzzkbmxHQMXGUqB/QJrvDQ2Pngvk+ QE0DxQlbPk0cQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 69030FD004A; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 01:51:23 +0100 Subject: [PATCH WIP v4 4/9] media: qcom: camss: Initialize lanes after lane configuration is available Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-qcom-cphy-v4-4-e53316d2cc65@ixit.cz> References: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> In-Reply-To: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Luca Weiss , Petr Hodina , Casey Connolly , "Dr. Git" Cc: Konrad Dybcio , Joel Selvaraj , Kieran Bingham , Sakari Ailus , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3845; i=david@ixit.cz; h=from:subject:message-id; bh=POblRjXDkh18ym7OpzBorCGs1kZvG0b381or0ZV6l/s=; b=kA0DAAgBYAI/xNNJIHIByyZiAGmjjYig5aDT7OYPjWMZPx9Az51jCHsFYOQU3Ep85A3kPuij2 okCMwQAAQgAHRYhBNd6Cc/u3Cu9U6cEdGACP8TTSSByBQJpo42IAAoJEGACP8TTSSBylZcP/11N xDps7Ztfm/Cxri/RxCzyQ3rkhcHTZjnWYm5dWSztfHEHWnPcE2WjlqGr1SOrt5aDcfCwa63XEwH QwlC24fs7silhmNbm1rEXWZV66/89QcJi7JncZY+ZxcP1tXjWgIFvbdF62y3YGYNasZ7KQMjp3/ G6A7M0CacaWFXEHIVWCIH7KhLxsOHzKYaRxSFk3tO1KJz0z0OuZNTzls2gOYRTN+i1pip37qgk/ zxtq/Pv1uCLsiVa9DHuktSD6JuTM3ZItUzkJsNXszZ70Ph8epeMSoaW6qBeg2BleqYOyM/sGlQf CY7Ox4LVPiytahyaASG31BfmBuAiCJe6CDYvBo+7IuwoV1b0fz/HaMZui6KD7dQb1w6tZq4QYvB 0K7lNVWhbMHLjTAKDzIUhTtX2L8oyqkUdKfwwTeY52MAk9aQv1umhrxFkVNxEbRiY635P2ATgRZ 3IoOa2iat7OroWbT/A1CFpCa9erjHc7k8ZdIGy0HoedyrLtAEBMPj2sO5ovw1lCBUJH1owE7xy7 vSzJzYxhXELw5pNOC2rSTX3azgnBUMlch6PcJ/TypdrBD9y/HHxAMVbcubrZR7hPkKdSlQln3Hd /y/zjeWeJYh9R0yR4J8ew8qYIxsn/WpFEgmngi5DuXFAtVyTrw2RYydjSvZColpluU6JYxbHxvJ vFC7i X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Petr Hodina The lanes must not be initialized before the driver has access to the lane configuration, as it depends on whether D-PHY or C-PHY mode is in use. Move the lane initialization to a later stage where the configuration structures are available. Signed-off-by: Petr Hodina Signed-off-by: David Heidelberg Reviewed-by: Bryan O'Donoghue --- .../platform/qcom/camss/camss-csiphy-3ph-1-0.c | 91 ++++++++++++++----= ---- 1 file changed, 57 insertions(+), 34 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/dri= vers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c index cf83c9e062b81..9748208107222 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c @@ -1048,6 +1048,62 @@ static int csiphy_lanes_enable(struct csiphy_device = *csiphy, u8 val; int i; =20 + switch (csiphy->camss->res->version) { + case CAMSS_845: + { + regs->lane_regs =3D &lane_regs_sdm845[0]; + regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sdm845); + } + break; + case CAMSS_2290: + case CAMSS_6150: + { + regs->lane_regs =3D &lane_regs_qcm2290[0]; + regs->lane_array_size =3D ARRAY_SIZE(lane_regs_qcm2290); + } + break; + case CAMSS_7280: + case CAMSS_8250: + { + regs->lane_regs =3D &lane_regs_sm8250[0]; + regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sm8250); + } + break; + case CAMSS_8280XP: + { + regs->lane_regs =3D &lane_regs_sc8280xp[0]; + regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sc8280xp); + } + break; + case CAMSS_X1E80100: + { + regs->lane_regs =3D &lane_regs_x1e80100[0]; + regs->lane_array_size =3D ARRAY_SIZE(lane_regs_x1e80100); + } + break; + case CAMSS_8550: + { + regs->lane_regs =3D &lane_regs_sm8550[0]; + regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sm8550); + } + break; + case CAMSS_8650: + { + regs->lane_regs =3D &lane_regs_sm8650[0]; + regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sm8650); + } + break; + case CAMSS_8300: + case CAMSS_8775P: + { + regs->lane_regs =3D &lane_regs_sa8775p[0]; + regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sa8775p); + } + break; + default: + break; + } + settle_cnt =3D csiphy_settle_cnt_calc(link_freq, csiphy->timer_clk_rate); =20 val =3D 0; @@ -1119,49 +1175,16 @@ static int csiphy_init(struct csiphy_device *csiphy) return -ENOMEM; =20 csiphy->regs =3D regs; - regs->offset =3D 0x800; regs->common_status_offset =3D 0xb0; =20 switch (csiphy->camss->res->version) { - case CAMSS_845: - regs->lane_regs =3D &lane_regs_sdm845[0]; - regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sdm845); - break; - case CAMSS_2290: - case CAMSS_6150: - regs->lane_regs =3D &lane_regs_qcm2290[0]; - regs->lane_array_size =3D ARRAY_SIZE(lane_regs_qcm2290); - break; - case CAMSS_7280: - case CAMSS_8250: - regs->lane_regs =3D &lane_regs_sm8250[0]; - regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sm8250); - break; - case CAMSS_8280XP: - regs->lane_regs =3D &lane_regs_sc8280xp[0]; - regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sc8280xp); - break; case CAMSS_X1E80100: - regs->lane_regs =3D &lane_regs_x1e80100[0]; - regs->lane_array_size =3D ARRAY_SIZE(lane_regs_x1e80100); - regs->offset =3D 0x1000; - break; case CAMSS_8550: - regs->lane_regs =3D &lane_regs_sm8550[0]; - regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sm8550); - regs->offset =3D 0x1000; - break; case CAMSS_8650: - regs->lane_regs =3D &lane_regs_sm8650[0]; - regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sm8650); regs->offset =3D 0x1000; break; - case CAMSS_8300: - case CAMSS_8775P: - regs->lane_regs =3D &lane_regs_sa8775p[0]; - regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sa8775p); - break; default: + regs->offset =3D 0x800; break; } =20 --=20 2.51.0 From nobody Thu Apr 9 14:27:04 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C847A1FC101; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; cv=none; b=ua8UKQCDlZ5URAlJ0BpKumnmdhhQhqBiPL+xUoin9tNDNK8kIrdV6QkHpSJ4y6keDWmHruvKmSSe/YJ+WZmsbaSZatVMi7RZCK1cdPlMFfhPTggEVrOGl609+sthn5S/OXFew5k7JqBambDlUiQLH8neeV4HF37JvwiNsvSWk0k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; c=relaxed/simple; bh=GIAUjbq9PiCelPqfa+JCpuOravGxjjBAbE3pFshSze4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Jiy+ct8HrkC5EgpG+MeSzMEkIfI/bTi4NuvaJKH06bj/+uvUOqCE69mohMJC8PuJhPpJ8aSYYXj7ngF0REvGAKiCL+muiNyILdhbuNWxVuBHFlCXZzbzMl7vWYMKmtHxKAeGRHpiFjnxXGwYWk9aY+IbWve3C6EdpAtg6ynnNsI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tKAzhGzu; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="tKAzhGzu" Received: by smtp.kernel.org (Postfix) with ESMTPS id 887A0C2BCB1; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772326283; bh=GIAUjbq9PiCelPqfa+JCpuOravGxjjBAbE3pFshSze4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=tKAzhGzuQ39T89220eO4Rsvxr6FFUAwTWvUuPNr3G/xrOb3vUAyQUYkuNskHKzV/V yrTFKYYZn8fFaWfLJZ3HAJyI4JIIZkQsnxVQ5e8pynWGDjxNC1p+ik7RwUSN+zDrE5 8csDBY78QOXR1IkMmMJ+hWPzKfYgo1i061lfQqKpVaVX8RW2e9bggmQZ5JGc2SbaCs yYWNceoEM80sjnzABc3QMd5y1RkbO+kCBG8AhoIiuoh2Z3mzYLdNYam+GgPl++cogC K6s0eAcF7GRPeM9IJK7t9eqc2R7JDlB8fLEtiJloXpfiX9p5QvDbra/FVQDMt+bBGd E5U3432Gx5Bqg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7EBBCFD0049; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 01:51:24 +0100 Subject: [PATCH WIP v4 5/9] media: qcom: camss: csiphy-3ph: Add Gen2 v1.1 MIPI CSI-2 CPHY init Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-qcom-cphy-v4-5-e53316d2cc65@ixit.cz> References: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> In-Reply-To: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Luca Weiss , Petr Hodina , Casey Connolly , "Dr. Git" Cc: Konrad Dybcio , Joel Selvaraj , Kieran Bingham , Sakari Ailus , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4775; i=david@ixit.cz; h=from:subject:message-id; bh=B1E9kx91YD51I9W2PKm9POghBayKJYyFPNrgNOQt3hU=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpo42IDCXijuslERtph+rHkWK9nDjcjyjVMsYAA lgNDnh7QreJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaONiAAKCRBgAj/E00kg clkMD/471+PnP5TpNyauBg7ZKBeZd8ue2c14C2VnIMYlu+vz4bdAAoEwIeZrhWmZdnC0IlUKoj+ fnYZYTAcXPfhnaOddUyWFj9xpQqrb6riA9Z6rJmpN8uL6ZcBs2+HF7l4NzO71dw5aFLfvAnAb6/ e54PL5UYAeCZkmbeKjoCkEDgfHUEEQM3NwIAD1H60OJ3NPrdA0xJQxUw+O0i1OeBKV1kY0Oupdo 7Lr56FbT4Yd/wVdpWzDhVNnRRKNirwCD183oZP7w39IMeKBlScUxCZ5T0FQ9K9fe3UrUlOgMP+g SjiL7oTcnSeQYUUNYgsBXNxSKCbVDcssnh5mrQV08g9wHuaJzAgdE3y4THgqGVZetam+AnS3r8A tdq4kR8Qg0jrFZOetZ5NncNEJkPBFPhSyy3ms81caDDdhO6+uBu1toDlIy9agaLe71loF2SC34K 4pwvMtqkbkblwfwGo+/M27cBmE25RfkihuMfeGZriyuD9JiX0ubC4gsOL4+08NwA5peE8PKOy24 z4rPlBiKULK9lR3wte2gXozOsKQG+JO/2iwrnLOKshh4ruxxq9yw51KKY/0TxmUsv7/k86NGfcm FHNILCu3QW7DREoBgM8sgxsSptk/Pn9yTRGYRiH0XW5TzRSxU6CC3DSeg9enS5NRIS9t9hQQBZi g+gTq6jNGVHgKRA== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Casey Connolly Add a PHY configuration sequence for the sdm845 which uses a Qualcomm Gen 2 version 1.1 CSI-2 PHY. The PHY can be configured as two phase or three phase in C-PHY or D-PHY mode. This configuration supports three-phase C-PHY mode. Signed-off-by: Casey Connolly Reviewed-by: Vladimir Zapolskiy Reviewed-by: Bryan O'Donoghue Co-developed-by: David Heidelberg Signed-off-by: David Heidelberg --- .../platform/qcom/camss/camss-csiphy-3ph-1-0.c | 72 ++++++++++++++++++= +++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/dri= vers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c index 9748208107222..5482fb5163e17 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c @@ -146,6 +146,7 @@ csiphy_lane_regs lane_regs_sa8775p[] =3D { }; =20 /* GEN2 1.0 2PH */ +/* 5 entries: clock + 4 lanes */ static const struct csiphy_lane_regs lane_regs_sdm845[] =3D { {0x0004, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS}, @@ -220,6 +221,71 @@ csiphy_lane_regs lane_regs_sdm845[] =3D { {0x0664, 0x7F, 0x00, CSIPHY_DEFAULT_PARAMS}, }; =20 +/* GEN2 1.0 3PH */ +/* 3 entries: 3 lanes (C-PHY) */ +static const struct +csiphy_lane_regs lane_regs_sdm845_3ph[] =3D { + {0x015c, 0x43, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0168, 0xa0, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x016c, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0104, 0x06, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x010c, 0x12, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE}, + {0x0108, 0x00, 0x00, CSIPHY_SETTLE_CNT_HIGHER_BYTE}, + {0x0114, 0x20, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0150, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0118, 0x3e, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x011c, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0120, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0124, 0x7f, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0128, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x012c, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0144, 0x12, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0160, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x01cc, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0164, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x01dc, 0x51, 0x00, CSIPHY_DEFAULT_PARAMS}, + + {0x035c, 0x43, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0368, 0xa0, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x036c, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0304, 0x06, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x030c, 0x12, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE}, + {0x0308, 0x00, 0x00, CSIPHY_SETTLE_CNT_HIGHER_BYTE}, + {0x0314, 0x20, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0350, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0318, 0x3e, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x031c, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0320, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0324, 0x7f, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0328, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x032c, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0344, 0x12, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0360, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x03cc, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0364, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x03dc, 0x51, 0x00, CSIPHY_DEFAULT_PARAMS}, + + {0x055c, 0x43, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0568, 0xa0, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x056c, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0504, 0x06, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x050c, 0x12, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE}, + {0x0508, 0x00, 0x00, CSIPHY_SETTLE_CNT_HIGHER_BYTE}, + {0x0514, 0x20, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0550, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0518, 0x3e, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x051c, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0520, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0524, 0x7f, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0528, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x052c, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0544, 0x12, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0560, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x05cc, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0564, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x05dc, 0x51, 0x00, CSIPHY_DEFAULT_PARAMS}, +}; + /* GEN2 1.1 2PH */ static const struct csiphy_lane_regs lane_regs_sc8280xp[] =3D { @@ -1050,7 +1116,11 @@ static int csiphy_lanes_enable(struct csiphy_device = *csiphy, =20 switch (csiphy->camss->res->version) { case CAMSS_845: - { + if (c->phy_cfg =3D=3D V4L2_MBUS_CSI2_CPHY) { + regs->lane_regs =3D &lane_regs_sdm845_3ph[0]; + regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sdm845_3ph); + + } else { regs->lane_regs =3D &lane_regs_sdm845[0]; regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sdm845); } --=20 2.51.0 From nobody Thu Apr 9 14:27:04 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C64B31FC110; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; cv=none; b=iZRj8CPGCQq6uTQ0ANcLiOF4vzf48ZJgJuh7Y5Ys2CTswhBGf7dlAkF+ZaT40o546iKyXShiAk3abporBtA/wlGFHubw1JcJ613JX4L8fFefVk+CCqzlLMnQqMnix5MJs17hLQSZSUtQt954PtuDuoXDBw6c7Is7v+eFbrZKvQw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; c=relaxed/simple; bh=Pr/N5Ge+6Q3nSvDWEB5DNNn7RCAsTf3v9Z+E4iXhcUs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=g76lntqYrtnIhvyhWxFF9FAg+yVQHSjGKtjZYBRPztvhUjgLhEAPO/J9NLibSxbwBRZ1r/dKG+B/HFHI1d0X4v9gSnJAF4JelwADqzocg9UCmk04cTMLBU0YbdKH+Ug1trlwOszP8qXUCfEkEKD/fhlaUlCxSmwX4KDOwANQmBs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=vBjuyc6z; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="vBjuyc6z" Received: by smtp.kernel.org (Postfix) with ESMTPS id 9A8DFC2BC87; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772326283; bh=Pr/N5Ge+6Q3nSvDWEB5DNNn7RCAsTf3v9Z+E4iXhcUs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=vBjuyc6zCyhtIXgCCkXbn4LG0CpBEZq1aVynmXmtv6qQGh64e2UlHlaS67xd6iECG meWgPFOsMYiOKivk5t7j9bBXiJ3ZYY2zQtbiqw8ImfhLIyzgjOXOymDla8hYNQuX8K tahUt5KbUPymFXRVo43FlDXR5IuAdr/Tc8UDopiIszy2CPHgUBxZq4PLd+RpBP850a pSFyRbmrpknwR4/QNV6gpTVajBsE9/lCAkC5r4cddJB1X9cdvvHG0zAhvLPeM2oK+7 EXGf8AsTk2+RTanlP6Mwg9IggE3Dcj5kQAleO60LGsOeLWe5NX91Iq3QYjW0kXl/Sf lSioVAs1kv6fg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8F14BFD0040; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 01:51:25 +0100 Subject: [PATCH WIP v4 6/9] media: qcom: camss: csiphy-3ph: Update Gen2 v1.1 MIPI CSI-2 CPHY init Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-qcom-cphy-v4-6-e53316d2cc65@ixit.cz> References: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> In-Reply-To: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Luca Weiss , Petr Hodina , Casey Connolly , "Dr. Git" Cc: Konrad Dybcio , Joel Selvaraj , Kieran Bingham , Sakari Ailus , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2425; i=david@ixit.cz; h=from:subject:message-id; bh=L+ePL0W59bohGVuAyXyN3A8pdfQMeFCc6aBkc+w6klo=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpo42JddaQgNU/8hWg3u46NZcGPb+f0jmBLnMtv OA4qQbONCaJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaONiQAKCRBgAj/E00kg cjw2D/4n6b3wsxCe/FrsaPnJlrR7iTc83xSoM2wKxpg8wYKQiiDlvmRLc10zrqGgs+9Pga3Z5zg /KR/P90l3cg0WP56VC+zMvalcmiBYMtRjPtQVrgejO8rjJH5U+MeBJe/AoijPj0hKL3eTcKqJgk FvCw9TCd5/OVj/HISpHaTJWRpPmguGklzaWxpykjjTjv9J8P4c/+b5CJivGTfsvMxWleOUxgURF tsgD2NOcUN8QpTQH1eLqXt5MUgSWqr48R9V1A1uOCYf6pSmMABrP7BuG8odiZxIdHoYQUhvXrbf Lot2fLlRBUw9OOElcrQhvBwboalJ4A5TptRPBCOpdwWCiU6D0Ux9zTv7Qc0PEN+8SGah1qE8x7E 7GxKkW9rmEggB2sdHC984H9786cwiOlBR3uwPUt/gJz+nNqW5aKlm2wudCAeKGOk9ANChP5NepS HX08MtOZrooVZa+0VIVkJR9BABfQ1K+eBWUIGgLhhJCKN3wNaSGUR57AETVL2XfOHG4/BNAKHHW ZuIEPyQwwc6tdffuUMtDTxS8jOzmky6pdeOx7O9BA0Euz6PeATOfLCc1VLZYWtVHBXHPZDDEcBU BQP1QmHywEvRijjJew5cmRqS15Aps7UrLaRyMJrrwCrZWIX++DQArWUuW+U0VGbKfrrPhRRQ26b tuSyv18qPoU4OKA== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg These values should improve C-PHY behaviour. Should match most recent Qualcomm code. Signed-off-by: David Heidelberg Suggested-by, perhaps --- .../media/platform/qcom/camss/camss-csiphy-3ph-1-0.c | 18 +++++++++-----= ---- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/dri= vers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c index 5482fb5163e17..c612192ee727a 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c @@ -225,9 +225,9 @@ csiphy_lane_regs lane_regs_sdm845[] =3D { /* 3 entries: 3 lanes (C-PHY) */ static const struct csiphy_lane_regs lane_regs_sdm845_3ph[] =3D { - {0x015c, 0x43, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x0168, 0xa0, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x016c, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x015c, 0x63, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0168, 0xac, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x016c, 0xa5, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0104, 0x06, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x010c, 0x12, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE}, {0x0108, 0x00, 0x00, CSIPHY_SETTLE_CNT_HIGHER_BYTE}, @@ -245,9 +245,9 @@ csiphy_lane_regs lane_regs_sdm845_3ph[] =3D { {0x0164, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x01dc, 0x51, 0x00, CSIPHY_DEFAULT_PARAMS}, =20 - {0x035c, 0x43, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x0368, 0xa0, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x036c, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x035c, 0x63, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0368, 0xac, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x036c, 0xa5, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0304, 0x06, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x030c, 0x12, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE}, {0x0308, 0x00, 0x00, CSIPHY_SETTLE_CNT_HIGHER_BYTE}, @@ -265,9 +265,9 @@ csiphy_lane_regs lane_regs_sdm845_3ph[] =3D { {0x0364, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x03dc, 0x51, 0x00, CSIPHY_DEFAULT_PARAMS}, =20 - {0x055c, 0x43, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x0568, 0xa0, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x056c, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x055c, 0x63, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0568, 0xac, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x056c, 0xa5, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0504, 0x06, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x050c, 0x12, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE}, {0x0508, 0x00, 0x00, CSIPHY_SETTLE_CNT_HIGHER_BYTE}, --=20 2.51.0 From nobody Thu Apr 9 14:27:04 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB5A420D4FF; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; cv=none; b=qa1bXa9CUuGEZeDjTMKoJ2MzIXzs8Xrl5/W7xTnqP/0bGBmTSMr8lycxUH3YCIG3tjr6M8iOkFJg/MR2NNv87WZEPOXNfrcaNKtAqoF/L2Q0m2dZFMNnzq5jv8vHjYBjhcKOs4YAvnPVMKt2nZ/c6CaNrCiw5OXJ3KyPzLwLEyY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326283; c=relaxed/simple; bh=t7RXWQxIH1M4bHDMh5sixTpeOPx6JthKngEYWiNexuM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YpG/tg9uFZvq7q1CYyPPqZc7KcK5091sWncco0W2WvZPWgCNvLQa/C1YFQvVt8Ch+bhKSeEt2BaFCyiIFQURqEtAJ1mICXICUc9EyMXvDdH7q0ske6f61bVssHQ8N1P0HnGkSKrkwoiLC6qyFqyr2kTHec8PBkw1y2cAIyNlnXg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EK9VwGMj; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="EK9VwGMj" Received: by smtp.kernel.org (Postfix) with ESMTPS id AA64AC2BCB3; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772326283; bh=t7RXWQxIH1M4bHDMh5sixTpeOPx6JthKngEYWiNexuM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=EK9VwGMjHiPXoVRlUPT97i8xP8hjsejNMLuQo+nxeRWNfwMqZ1QR09DokpM8Vaj3z AQ4yAGimf2jnnfrHzzv6NCR13taGRyP02YyNZr2Tq/yofqMfw842i80oweVzJ0emA0 DcuC+Gsvad2Dr8Rc6g/4luyNpSwGd2XFdP19XM9HiQ5lzhajkRxhaR6ENEoU32ufA5 N+99rfO7pue1fTjklI+WZet9WKKiV4UbKjPcNKvjkGmM4HOEMGVK4Cze/yGdBoHrK/ trAsKaNTz3unageU/uXPaTAR5jsm57kIBtjiKu87urhFQetIHK0Pk2GEWSxknmym+9 E1S2oWIteJmbA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id A24B9FD0048; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 01:51:26 +0100 Subject: [PATCH WIP v4 7/9] media: qcom: camss: csiphy-3ph: Add Gen2 v1.2.1 MIPI CSI-2 C-PHY init Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-qcom-cphy-v4-7-e53316d2cc65@ixit.cz> References: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> In-Reply-To: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Luca Weiss , Petr Hodina , Casey Connolly , "Dr. Git" Cc: Konrad Dybcio , Joel Selvaraj , Kieran Bingham , Sakari Ailus , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6434; i=david@ixit.cz; h=from:subject:message-id; bh=F68FYZ/9PYHBEJYRHtnB6O4AcY4Jp6F2NvaXkH1GcAU=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpo42JaLghH4/F0XNWTLQaL4YwTEhrfOBEeLIC0 IBZN5KLnqKJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaONiQAKCRBgAj/E00kg ck68EACGeZcrAv/Jo98t7Ja1QBAVIjjMgWL7PEYMiCNopE1kvQxklzrbKdjgG3P94y3KmNF/MDv 2Zfsh5hlYmO40TzUr8K++xJluXomWx7djS7hrJxeZ0DC/J5T0AHtiyvjEYX0X2SsaDfJmc0K/EV nXj/KtelFi/jTKJC7y9yyhRUyD3pE+mxmUhgFpZPmlurgOH/W8KrLV/xhQDpRm02VmRPG6Vn+Tp DrA3Nz03Ywy67mrX1VInWZ0R6+PXcqAx6o8eVj+mzUsDrGNWCh3xON8lxohsb66TGLfz6jfjGe8 fCBbGhJUP0Fr7Tkhn1y2jlncptihV9KVjRVx+0Ne1eeuWy6Vp2i0YNPEYrej/7cwp7mpcyE4h8C 5xuu3nQaoRiz6fjA8Noh4CaOkazUxRr8vKCeHU1/lVzMnucOGA75rCemsupLf0+FhK20AxGKMSc s/cMnMWCm8ggJRMcJjhF4jcDBUgRnrtv05EwwPWJqbOmpCkXhjNXSOQA+xkKF0PQfcxsvRufhIK dxBUhyjwTwaxn1yQHyCw5N6EmfnrximDhaLHJ55JVJk8yLRDXQub7jiTZRREo5UnOr+DArz/KXL HmQHyZrN/2Erhof6bbdp7AfvIqd7l2uUfskCu0QecqlH/B/KUqh2hszt8M/gDJPKsmqFQLgrrq5 CwbJVMfdJlG6A0A== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Luca Weiss Add a PHY configuration sequence for the sm8250 which uses a Qualcomm Gen 2 version 1.2.1 CSI-2 PHY. The PHY can be configured as two phase or three phase in C-PHY or D-PHY mode. This configuration supports three-phase C-PHY mode. Signed-off-by: Luca Weiss Reviewed-by: Konrad Dybcio Signed-off-by: David Heidelberg Reviewed-by: Bryan O'Donoghue --- .../platform/qcom/camss/camss-csiphy-3ph-1-0.c | 112 +++++++++++++++++= +++- 1 file changed, 111 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/dri= vers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c index c612192ee727a..e48f5c1290173 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c @@ -550,6 +550,113 @@ csiphy_lane_regs lane_regs_qcm2290[] =3D { {0x0664, 0x3f, 0x00, CSIPHY_DEFAULT_PARAMS}, }; =20 +/* GEN2 1.2.1 3PH */ +/* 3 entries: 3 lanes (C-PHY) */ +static const struct +csiphy_lane_regs lane_regs_sm8250_3ph[] =3D { + {0x0990, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0994, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0998, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0990, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0994, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0998, 0x1a, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x098c, 0xaf, 0x01, CSIPHY_DEFAULT_PARAMS}, + {0x015c, 0x46, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0168, 0xa0, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0104, 0x06, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x010c, 0x12, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE}, + {0x0108, 0x00, 0x00, CSIPHY_SETTLE_CNT_HIGHER_BYTE}, + {0x0114, 0x20, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0150, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0188, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x018c, 0x7f, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0190, 0x7f, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0118, 0x3e, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x011c, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0120, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0124, 0x7f, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0128, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x012c, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0160, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x01cc, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x01dc, 0x50, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0984, 0x20, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0988, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0980, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x09ac, 0x35, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x09b0, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0800, 0x0e, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0884, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS}, + + {0x0a90, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0a94, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0a98, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0a90, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0a94, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0a98, 0x1a, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0a8c, 0xaf, 0x01, CSIPHY_DEFAULT_PARAMS}, + {0x035c, 0x46, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0368, 0xa0, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0304, 0x06, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x030c, 0x12, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE}, + {0x0308, 0x00, 0x00, CSIPHY_SETTLE_CNT_HIGHER_BYTE}, + {0x0314, 0x20, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0350, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0388, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x038c, 0x7f, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0390, 0x7f, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0318, 0x3e, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x031c, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0320, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0324, 0x7f, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0328, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x032c, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0360, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x03cc, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x03dc, 0x50, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0a84, 0x20, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0a88, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0a80, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0aac, 0x35, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0ab0, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0800, 0x0e, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0884, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS}, + + {0x0b90, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0b94, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0b98, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0b90, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0b94, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0b98, 0x1a, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0b8c, 0xaf, 0x01, CSIPHY_DEFAULT_PARAMS}, + {0x055c, 0x46, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0568, 0xa0, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0504, 0x06, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x050c, 0x12, 0x00, CSIPHY_SETTLE_CNT_LOWER_BYTE}, + {0x0508, 0x00, 0x00, CSIPHY_SETTLE_CNT_HIGHER_BYTE}, + {0x0514, 0x20, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0550, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0588, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x058c, 0x7f, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0590, 0x7f, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0518, 0x3e, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x051c, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0520, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0524, 0x7f, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0528, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x052c, 0x00, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0560, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x05cc, 0x41, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x05dc, 0x50, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0b84, 0x20, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0b88, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0b80, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0bac, 0x35, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0bb0, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0800, 0x0e, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0884, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS}, +}; + /* GEN2 2.1.2 2PH DPHY mode */ static const struct csiphy_lane_regs lane_regs_sm8550[] =3D { @@ -1134,7 +1241,10 @@ static int csiphy_lanes_enable(struct csiphy_device = *csiphy, break; case CAMSS_7280: case CAMSS_8250: - { + if (c->phy_cfg =3D=3D V4L2_MBUS_CSI2_CPHY) { + regs->lane_regs =3D &lane_regs_sm8250_3ph[0]; + regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sm8250_3ph); + } else { regs->lane_regs =3D &lane_regs_sm8250[0]; regs->lane_array_size =3D ARRAY_SIZE(lane_regs_sm8250); } --=20 2.51.0 From nobody Thu Apr 9 14:27:04 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E96E321B191; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326284; cv=none; b=TTuCfZ9nZwwB3bKC+/hAPZutXCejyDUx3LmdOzfVUfTKHfFD8bdQZPovnu7xdP91hl32oeoP/ciMrAC0cK7VAtfeQ9ZpaDHgMdN2U0ljFimd44uSUVn+Cc/wZYrhodkLJ+yg1k035q0oNo8IqX6IF+mrL7rzf//hkLJbBBHI4KI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326284; c=relaxed/simple; bh=rhGfNydoUOkdRXybUMyg+yWuVRmt64y1v5Ezv+TIJqk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QeULTK3SMI6vQ7Oh7e/dOrkayHbo0H83AhOdtC7yg7wwzvJ8Ff6W56JQZHfrSj8EUVj4Tbx1gMkRX5J0zv/y8OyNMFZA2zxhEDMZJKG8yIO1ihMWQeENg2wHB5CY2pyfaCgkVGds4+Isppc7IUyPvsACCJftJZrBKaPhVNPcPWc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=k8wUC1hE; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="k8wUC1hE" Received: by smtp.kernel.org (Postfix) with ESMTPS id BE441C19421; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772326283; bh=rhGfNydoUOkdRXybUMyg+yWuVRmt64y1v5Ezv+TIJqk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=k8wUC1hE2CGt/6iET7MjaHg6hFW+IRGpA4oDadJ19QwcpkzdX0FzewRamQVEIFHS+ 4vIlqbS7cbNQWRi8+J1CdMtWDGGDWufNTsuWhowEVg5f3WhX+7VSZmfu+/5QZD7D9m BwfKGa9kTfMFEu46vOeK4Pm34rabLT4+PW/d4+f7unJ3ABEEzkDT0VrhmrCPPzkVi+ VgLNuTce6E+goXsUxUyyBfHx4RQ7H4fak8uHE9qhkglMYWZ3/HF3XdFR8BR5p6RNIL NcueZTUwc784E3xWMlIp6hNahJ4X3ks699uj+eWuD2VnjUscmZXdNkOcv39Zbp8/Hd zeq5p9WuBVrqA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id B3B2DFD004A; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 01:51:27 +0100 Subject: [PATCH WIP v4 8/9] media: qcom: camss: csiphy-3ph: C-PHY needs own lane configuration Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-qcom-cphy-v4-8-e53316d2cc65@ixit.cz> References: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> In-Reply-To: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Luca Weiss , Petr Hodina , Casey Connolly , "Dr. Git" Cc: Konrad Dybcio , Joel Selvaraj , Kieran Bingham , Sakari Ailus , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1623; i=david@ixit.cz; h=from:subject:message-id; bh=xJUXUtwBIhekrOdLKRvTP/J2Ey1JhDpeic7sPTFnqSI=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpo42JBwEFoFHmRtNt2RnACQuIFO0B25Bk1KcHL LCMYuudgouJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaONiQAKCRBgAj/E00kg ckb2D/9QD2HGudr+0YjoFLjEVf53a3ZwgZGfpLQBVrLFg4AdFWKoLg8EjGd2FpVxlSPdyQ+ObPz 2Uj/1Xz5yUgtRSuBQYjcgNkOSr6ZPQvDTSxLIQ7Wicu18wZRl3aWb3QlH7IfOpFnpLTKU78z5MO CB+zs7PcSfmQFwc8zdru/6n7xSjlptL1QjSLb5Jcy9lbel4vnM64Jv8sOJLK0pYJdGZbyxvzbIN IOj0sBQ7Ll2H3l1nwC6+wBNKf7ySLyaN5t1lS1A074AlKfvvtpTLXw6Vf4RQpefdX9raTB4ujD3 9BlGZQzqwgr4c7+Xaab1xhkYOTq43qoIlbohsSi1DKlIHvU8kGhBflQiDlZnNNzsLiX27BwuqGB S1mVgkcWXF2D0h4PBY2cPjkEPDXE3d3M7pqpMZzNnhZI1woevOOl6R5FVpHEwMGxueN+USnptPa ygHA17qun12HUtZfptjtyY59Vm6AztwRPc1fHUMlytTTkaaabkDIdvQmkG4aMR/AcccZG1RUcd+ A35YulDU26Tz/DHrQN6Y1bIdHDxGN5btZCmHLJXesPpuMIQIaYaVNKFTYeafjCNFnnpVOocbsA3 FdgaaSclrd0bQBWJBHOm7u9q7cmX82vkZ85V5eVN3XL9R0UoS5h+k47EvaRWe4NtUHp4d2oFReb czcWyDXMz2zV6zA== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Catch when C-PHY configuration gets used on SoC with CAMSS missing C-PHY configuration lane registers. Hopefully this check will disappear as these lane regs gets populated. -- @bod Proliferating special cases in switch statements on a per-SoC basis is verboten. Please find another way to do this, you already have a bool to indicate cphy in struct csid_phy_config {} so at some level CAMSS already has a bool to indicate what to do. Please make that logic accessible to logical consumers throughout, in this case the CPHY code. -- Signed-off-by: David Heidelberg --- drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c | 16 ++++++++++++= ++++ 1 file changed, 16 insertions(+) diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/dri= vers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c index e48f5c1290173..2164647211c8d 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c @@ -1221,6 +1221,22 @@ static int csiphy_lanes_enable(struct csiphy_device = *csiphy, u8 val; int i; =20 + if (c->phy_cfg =3D=3D V4L2_MBUS_CSI2_CPHY) { + switch (csiphy->camss->res->version) { + case CAMSS_2290: + case CAMSS_8280XP: + case CAMSS_X1E80100: + case CAMSS_8550: + case CAMSS_8650: + case CAMSS_8300: + case CAMSS_8775P: + dev_err(dev, "Missing lane_regs definition for C-PHY\n"); + return -EINVAL; + default: + break; + } + } + switch (csiphy->camss->res->version) { case CAMSS_845: if (c->phy_cfg =3D=3D V4L2_MBUS_CSI2_CPHY) { --=20 2.51.0 From nobody Thu Apr 9 14:27:04 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF06821D3D2; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326284; cv=none; b=isgfbyVXUnA021pd0aaFvQvaxqudAwrT+hscPVFyB/Rxo+g8NNDN7OijcbB1TI2R2Z0kyQuekwfz/KBXvKg1XzaWdRAUZz9YxRtXC/lf+CwtdEQKQU9TqkK9dcsEEkIMlg86luo9tjSrFkkb+I/eLhMM/XTmn6DcD1cxzkKOYGQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772326284; c=relaxed/simple; bh=eAVdcXaV6oSYqlsY5bs9aHZfvkb/ZO5oPVUjvOjHD7g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QKDVhZkyZCOaIoE/Jl26pjuNvQDipfVTNbvg61BZABHVqvUv/jbwnmnRDrPLQzvQ60TxBibw4iccrVxTFFBGw4sd+dfuJO0+ej7vRZFq8Z45qQ6GH3tmPPM7F3yYU2alagQs3CNsruvFYoD3FhxebJMvLVBodmOQMpM6VP6rNrk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=h6xgcssm; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="h6xgcssm" Received: by smtp.kernel.org (Postfix) with ESMTPS id CCE7AC19424; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772326283; bh=eAVdcXaV6oSYqlsY5bs9aHZfvkb/ZO5oPVUjvOjHD7g=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=h6xgcssmcNeI3nZGNDPnpokHk1asFvREFDr/VUUzz/9HUafR7ZRg5lBAVGJ/RHxyx LFZAINdZbOvn2f6z0dV2LKguy2CFDAoG6JphQZWoguckqDZVrLFZsWCkcK63EhZVwg 6jOeODNihpWnDVhMA2tHt4kyS76KBk/a0eO+9bQx4cImCPHijQ0ZfUtf4ddT+qcTTO 7XPNgjp6ZLPMeUucQIlGxEkdOJgQkY7MJAT7OVT3fhusAG5lD4aDFIohYHatfYqmbJ nwtryaq29JDfabv1OiLhwQ+bRYtX0HUzgBGYigNo+dkK/QJ9t+RZ4ZFy4hsfCjIZHP Jn4iI9ZPS1QWA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id C5807FD0049; Sun, 1 Mar 2026 00:51:23 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 01:51:28 +0100 Subject: [PATCH WIP v4 9/9] media: qcom: camss: Account for C-PHY when calculating link frequency Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-qcom-cphy-v4-9-e53316d2cc65@ixit.cz> References: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> In-Reply-To: <20260301-qcom-cphy-v4-0-e53316d2cc65@ixit.cz> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Luca Weiss , Petr Hodina , Casey Connolly , "Dr. Git" Cc: Konrad Dybcio , Joel Selvaraj , Kieran Bingham , Sakari Ailus , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6125; i=david@ixit.cz; h=from:subject:message-id; bh=Cjh/ZCc+QxiGxE0P3pin9rU82Q1mGW8XbN3n2VAfbWs=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBpo42JiWMCDeyS6nMb0DJdISneQyIuieGWA7N6t mYYFQY5OOeJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaONiQAKCRBgAj/E00kg cslrD/wPuUhKj65xd6W8NpE9LwqpaN2hXZGJRjBidegodg/nYCj+4Hz/Bw4idpLc/piu2N6Lh3s urukhvNP7ick7mXQciySdDUgQf9pEbe4WUX8HYm/+OxRkGTOlpt0rq6onGlLEKeIYXt6iK8CtJX zFXsGZuJpGLaGWJeCPO/5tkBXwl5rLeq+ipNKfJbeDWxC3P2r4q4K7R0QJycYqnT1OI2qrgee/3 FyUIKocC+BgGedGKSK6F4PehKz5pSRXXH/0A0dbrDwutRnAbYDLw6aEnK5OVDvn2EiW2Ufk1AP0 1NRWnZFmSo0MvxiDN73n4DuJo41yBmx2vcAYd07S2r4ed2s/IsBz4slXgRo6bE8PReqmrZShPwo 5R9eqdqVvVSpT5rodLlxiAOQZBJgsNrYyWd+jzK6VOtvS44A/TYgNv8Kd46+HDsjkcRTF+jXozm gwWCmDRMIt7toZHvJrVO8JM0LL+3LPJ13HtIp4mOdWpKnXa6szklZcghCL6i9D0Jq0N1/yxp+px S1dFnx4TDDGHrw0+6jQPK/lsKDzAIKwXoGECKNOZ5yuhwFzrMCoPIGda49aj0vAKfyzINqjlRHM kLI9TcTynzGM4Ee92zGuYhvmxd5HoGS7MpbA3IeKBiDwngLYpQc/0dQ4QocjYAlIi75rk6Ta/2S KAx7UQ0Yx+JRJCw== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Ensure that the link frequency divider correctly accounts for C-PHY operation. The divider differs between D-PHY and C-PHY, as described in the MIPI CSI-2 specification. For more details, see: https://docs.kernel.org/driver-api/media/tx-rx.html#pixel-rate Suggested-by: Sakari Ailus Signed-off-by: David Heidelberg Reviewed-by: Bryan O'Donoghue Tested-by: Cory Keitz --- drivers/media/platform/qcom/camss/camss-csid.c | 11 +++++++---- drivers/media/platform/qcom/camss/camss-csiphy.c | 6 ++---- drivers/media/platform/qcom/camss/camss.c | 18 +++++++++++++++--- drivers/media/platform/qcom/camss/camss.h | 2 +- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media= /platform/qcom/camss/camss-csid.c index b50b0cfe280c1..2fc17c6a15e2e 100644 --- a/drivers/media/platform/qcom/camss/camss-csid.c +++ b/drivers/media/platform/qcom/camss/camss-csid.c @@ -534,18 +534,21 @@ const struct csid_format_info *csid_get_fmt_entry(con= st struct csid_format_info * csid_set_clock_rates - Calculate and set clock rates on CSID module * @csiphy: CSID device */ -static int csid_set_clock_rates(struct csid_device *csid) +static int csid_set_clock_rates(struct v4l2_subdev *sd, struct csid_device= *csid) { struct device *dev =3D csid->camss->dev; + struct csiphy_device *csiphy =3D v4l2_get_subdevdata(sd); + struct csiphy_lanes_cfg *lane_cfg =3D &csiphy->cfg.csi2->lane_cfg; const struct csid_format_info *fmt; + s64 link_freq; int i, j; int ret; =20 fmt =3D csid_get_fmt_entry(csid->res->formats->formats, csid->res->format= s->nformats, csid->fmt[MSM_CSIPHY_PAD_SINK].code); - link_freq =3D camss_get_link_freq(&csid->subdev.entity, fmt->bpp, - csid->phy.lane_cnt); + + link_freq =3D camss_get_link_freq(&csid->subdev.entity, fmt->bpp, lane_cf= g); if (link_freq < 0) link_freq =3D 0; =20 @@ -703,7 +706,7 @@ static int csid_set_power(struct v4l2_subdev *sd, int o= n) return ret; } =20 - ret =3D csid_set_clock_rates(csid); + ret =3D csid_set_clock_rates(sd, csid); if (ret < 0) { regulator_bulk_disable(csid->num_supplies, csid->supplies); diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/med= ia/platform/qcom/camss/camss-csiphy.c index 938600f3defe1..ea9dd2cd2e740 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c @@ -143,9 +143,8 @@ static int csiphy_set_clock_rates(struct csiphy_device = *csiphy) =20 u8 bpp =3D csiphy_get_bpp(csiphy->res->formats->formats, csiphy->res->for= mats->nformats, csiphy->fmt[MSM_CSIPHY_PAD_SINK].code); - u8 num_lanes =3D csiphy->cfg.csi2->lane_cfg.num_data; =20 - link_freq =3D camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes); + link_freq =3D camss_get_link_freq(&csiphy->subdev.entity, bpp, &csiphy->c= fg.csi2->lane_cfg); if (link_freq < 0) link_freq =3D 0; =20 @@ -270,10 +269,9 @@ static int csiphy_stream_on(struct csiphy_device *csip= hy) u8 lane_mask =3D csiphy->res->hw_ops->get_lane_mask(&cfg->csi2->lane_cfg); u8 bpp =3D csiphy_get_bpp(csiphy->res->formats->formats, csiphy->res->for= mats->nformats, csiphy->fmt[MSM_CSIPHY_PAD_SINK].code); - u8 num_lanes =3D csiphy->cfg.csi2->lane_cfg.num_data; u8 val; =20 - link_freq =3D camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes); + link_freq =3D camss_get_link_freq(&csiphy->subdev.entity, bpp, &csiphy->c= fg.csi2->lane_cfg); =20 if (link_freq < 0) { dev_err(csiphy->camss->dev, diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/plat= form/qcom/camss/camss.c index ea0c8cf3cd806..4c13bae17007e 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -32,6 +32,14 @@ #define CAMSS_CLOCK_MARGIN_NUMERATOR 105 #define CAMSS_CLOCK_MARGIN_DENOMINATOR 100 =20 +/* + * C-PHY encodes data by 16/7 ~ 2.28 bits/symbol + * D-PHY doesn't encode data, thus 16/16 =3D 1 b/s + */ +#define CAMSS_COMMON_PHY_DIVIDENT 16 +#define CAMSS_CPHY_DIVISOR 7 +#define CAMSS_DPHY_DIVISOR 16 + static const struct parent_dev_ops vfe_parent_dev_ops; =20 static const struct camss_subdev_resources csiphy_res_8x16[] =3D { @@ -4280,20 +4288,24 @@ struct media_pad *camss_find_sensor_pad(struct medi= a_entity *entity) * camss_get_link_freq - Get link frequency from sensor * @entity: Media entity in the current pipeline * @bpp: Number of bits per pixel for the current format - * @lanes: Number of lanes in the link to the sensor + * @lane_cfg: CSI2 lane configuration * * Return link frequency on success or a negative error code otherwise */ s64 camss_get_link_freq(struct media_entity *entity, unsigned int bpp, - unsigned int lanes) + struct csiphy_lanes_cfg *lane_cfg) { struct media_pad *sensor_pad; + u8 num_lanes =3D lane_cfg->num_data; + bool cphy =3D lane_cfg->phy_cfg =3D=3D V4L2_MBUS_CSI2_CPHY; + unsigned int div =3D num_lanes * 2 * (cphy ? CAMSS_CPHY_DIVISOR : + CAMSS_DPHY_DIVISOR); =20 sensor_pad =3D camss_find_sensor_pad(entity); if (!sensor_pad) return -ENODEV; =20 - return v4l2_get_link_freq(sensor_pad, bpp, 2 * lanes); + return v4l2_get_link_freq(sensor_pad, CAMSS_COMMON_PHY_DIVIDENT * bpp, di= v); } =20 /* diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/plat= form/qcom/camss/camss.h index 6d048414c919e..67be42b4c9174 100644 --- a/drivers/media/platform/qcom/camss/camss.h +++ b/drivers/media/platform/qcom/camss/camss.h @@ -163,7 +163,7 @@ int camss_enable_clocks(int nclocks, struct camss_clock= *clock, void camss_disable_clocks(int nclocks, struct camss_clock *clock); struct media_pad *camss_find_sensor_pad(struct media_entity *entity); s64 camss_get_link_freq(struct media_entity *entity, unsigned int bpp, - unsigned int lanes); + struct csiphy_lanes_cfg *lane_cfg); int camss_get_pixel_clock(struct media_entity *entity, u64 *pixel_clock); int camss_pm_domain_on(struct camss *camss, int id); void camss_pm_domain_off(struct camss *camss, int id); --=20 2.51.0