* [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms
@ 2025-11-09 9:39 David Heidelberg via B4 Relay
2025-11-09 9:39 ` [PATCH RFC 1/8] media: qcom: camss: csiphy-3ph: Add Gen2 v1.1 MIPI CSI-2 CPHY init David Heidelberg via B4 Relay
` (8 more replies)
0 siblings, 9 replies; 24+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-09 9:39 UTC (permalink / raw)
To: Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel, David Heidelberg, Sakari Ailus
# Short summary
This patch series extends the Qualcomm CAMSS (Camera Subsystem),
including CSID and CSIPHY components, to support C-PHY mode configuration.
# Background and motivation
Modern smartphone cameras increasingly rely on MIPI C-PHY rather than D-PHY,
thanks to its higher data throughput and signal efficiency. As a result,
many OEMs adopt C-PHY interfaces for main (rear) cameras on Qualcomm-based
devices.
Until now, mainline Linux lacked C-PHY configuration support for Qualcomm
chipsets, preventing bring-up of primary camera sensors on several
Snapdragon platforms. This series closes that gap.
- Introduces C-PHY configuration support for the CAMSS driver stack,
covering both CSID and CSIPHY blocks.
- Successfully enables C-PHY operation on the Snapdragon 845 platform.
- Tested on OnePlus 6 and 6T phones running mainline Linux,
using the Sony IMX519 main camera sensor.
- The new configuration allows other chipsets versionsto enable C-PHY by
simply adding corresponding sensor driver support and csiphy
initialization data, following the example set for sdm845.
With this patch series, mainline Linux gains working C-PHY support for
Snapdragon 845, paving the way for improved main camera functionality
across many Qualcomm-based devices. The groundwork also simplifies
future enablement efforts for additional SoCs and sensors.
Signed-off-by: David Heidelberg <david@ixit.cz>
---
Casey Connolly (1):
media: qcom: camss: csiphy-3ph: Add Gen2 v1.1 MIPI CSI-2 CPHY init
David Heidelberg (6):
media: qcom: camss: csiphy: Introduce C-PHY
media: qcom: camss: csiphy-3ph: Use odd bits for configuring C-PHY lanes
media: qcom: camss: Prepare CSID for C-PHY support
media: qcom: camss: csiphy-3ph: Use sdm845 C-PHY configuration sequence
media: qcom: camss: Account for C-PHY when calculating link frequency
media: qcom: camss: Remove D-PHY-only endpoint restriction
Petr Hodina (1):
media: qcom: camss: Initialize lanes after lane configuration is available
.../media/platform/qcom/camss/camss-csid-gen2.c | 1 +
drivers/media/platform/qcom/camss/camss-csid.c | 3 +-
drivers/media/platform/qcom/camss/camss-csid.h | 1 +
.../platform/qcom/camss/camss-csiphy-3ph-1-0.c | 165 ++++++++++++++++-----
drivers/media/platform/qcom/camss/camss-csiphy.c | 6 +-
drivers/media/platform/qcom/camss/camss-csiphy.h | 2 +
drivers/media/platform/qcom/camss/camss.c | 24 ++-
drivers/media/platform/qcom/camss/camss.h | 2 +-
8 files changed, 146 insertions(+), 58 deletions(-)
---
base-commit: 9c0826a5d9aa4d52206dd89976858457a2a8a7ed
change-id: 20251109-qcom-cphy-bb8cbda1c644
Best regards,
--
David Heidelberg <david@ixit.cz>
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH RFC 1/8] media: qcom: camss: csiphy-3ph: Add Gen2 v1.1 MIPI CSI-2 CPHY init
2025-11-09 9:39 [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms David Heidelberg via B4 Relay
@ 2025-11-09 9:39 ` David Heidelberg via B4 Relay
2025-11-10 20:23 ` Vladimir Zapolskiy
2025-11-09 9:39 ` [PATCH RFC 2/8] media: qcom: camss: csiphy: Introduce C-PHY David Heidelberg via B4 Relay
` (7 subsequent siblings)
8 siblings, 1 reply; 24+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-09 9:39 UTC (permalink / raw)
To: Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel, David Heidelberg
From: Casey Connolly <casey.connolly@linaro.org>
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 <casey.connolly@linaro.org>
Signed-off-by: David Heidelberg <david@ixit.cz>
---
.../platform/qcom/camss/camss-csiphy-3ph-1-0.c | 64 ++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
index 619abbf607813..f28c32d1a4ec5 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
@@ -144,6 +144,7 @@ csiphy_lane_regs lane_regs_sa8775p[] = {
};
/* GEN2 1.0 2PH */
+/* 5 entries: clock + 4 lanes */
static const struct
csiphy_lane_regs lane_regs_sdm845[] = {
{0x0004, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS},
@@ -218,6 +219,69 @@ csiphy_lane_regs lane_regs_sdm845[] = {
{0x0664, 0x7F, 0x00, CSIPHY_DEFAULT_PARAMS},
};
+/* GEN2 1.0 3PH */
+/* 3 entries: 3 lanes (C-PHY) */
+static const struct
+csiphy_lane_regs lane_regs_sdm845_3ph[] = {
+ {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[] = {
--
2.51.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH RFC 2/8] media: qcom: camss: csiphy: Introduce C-PHY
2025-11-09 9:39 [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms David Heidelberg via B4 Relay
2025-11-09 9:39 ` [PATCH RFC 1/8] media: qcom: camss: csiphy-3ph: Add Gen2 v1.1 MIPI CSI-2 CPHY init David Heidelberg via B4 Relay
@ 2025-11-09 9:39 ` David Heidelberg via B4 Relay
2025-11-09 12:35 ` Casey Connolly
2025-11-10 11:35 ` Bryan O'Donoghue
2025-11-09 9:39 ` [PATCH RFC 3/8] media: qcom: camss: csiphy-3ph: Use odd bits for configuring C-PHY lanes David Heidelberg via B4 Relay
` (6 subsequent siblings)
8 siblings, 2 replies; 24+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-09 9:39 UTC (permalink / raw)
To: Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel, David Heidelberg
From: David Heidelberg <david@ixit.cz>
Read C-PHY 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 <david@ixit.cz>
---
drivers/media/platform/qcom/camss/camss-csiphy.h | 2 ++
drivers/media/platform/qcom/camss/camss.c | 8 ++++++--
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.h b/drivers/media/platform/qcom/camss/camss-csiphy.h
index 895f80003c441..8f7d0e4c73075 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 {
/**
* struct csiphy_lanes_cfg - CSIPHY lanes configuration
+ * @cphy: true if C-PHY is used, false if D-PHY is used
* @num_data: number of data lanes
* @data: data lanes configuration
* @clk: clock lane configuration (only for D-PHY)
*/
struct csiphy_lanes_cfg {
+ bool cphy;
int num_data;
struct csiphy_lane *data;
struct csiphy_lane clk;
diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
index fcc2b2c3cba07..549780f3f948b 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -4055,9 +4055,13 @@ static int camss_of_parse_endpoint_node(struct device *dev,
csd->interface.csiphy_id = vep.base.port;
mipi_csi2 = &vep.bus.mipi_csi2;
- lncfg->clk.pos = mipi_csi2->clock_lane;
- lncfg->clk.pol = mipi_csi2->lane_polarities[0];
lncfg->num_data = mipi_csi2->num_data_lanes;
+ lncfg->cphy = vep.bus_type == V4L2_MBUS_CSI2_CPHY;
+
+ if (!lncfg->cphy) {
+ lncfg->clk.pos = mipi_csi2->clock_lane;
+ lncfg->clk.pol = mipi_csi2->lane_polarities[0];
+ }
lncfg->data = devm_kcalloc(dev,
lncfg->num_data, sizeof(*lncfg->data),
--
2.51.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH RFC 3/8] media: qcom: camss: csiphy-3ph: Use odd bits for configuring C-PHY lanes
2025-11-09 9:39 [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms David Heidelberg via B4 Relay
2025-11-09 9:39 ` [PATCH RFC 1/8] media: qcom: camss: csiphy-3ph: Add Gen2 v1.1 MIPI CSI-2 CPHY init David Heidelberg via B4 Relay
2025-11-09 9:39 ` [PATCH RFC 2/8] media: qcom: camss: csiphy: Introduce C-PHY David Heidelberg via B4 Relay
@ 2025-11-09 9:39 ` David Heidelberg via B4 Relay
2025-11-09 9:49 ` David Heidelberg
2025-11-09 9:39 ` [PATCH RFC 4/8] media: qcom: camss: Prepare CSID for C-PHY support David Heidelberg via B4 Relay
` (5 subsequent siblings)
8 siblings, 1 reply; 24+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-09 9:39 UTC (permalink / raw)
To: Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel, David Heidelberg
From: David Heidelberg <david@ixit.cz>
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.
Signed-off-by: David Heidelberg <david@ixit.cz>
---
.../platform/qcom/camss/camss-csiphy-3ph-1-0.c | 25 ++++++++++++++++------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
index f28c32d1a4ec5..348b8cd18327e 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
@@ -1054,10 +1054,17 @@ static u8 csiphy_get_lane_mask(struct csiphy_lanes_cfg *lane_cfg)
u8 lane_mask;
int i;
- lane_mask = CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE;
+ if (lane_cfg->cphy) {
+ lane_mask = 0;
- for (i = 0; i < lane_cfg->num_data; i++)
- lane_mask |= 1 << lane_cfg->data[i].pos;
+ for (i = 0; i < lane_cfg->num_data; i++)
+ lane_mask |= (1 << lane_cfg->data[i].pos) + 1;
+ } else {
+ lane_mask = CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE;
+
+ for (i = 0; i < lane_cfg->num_data; i++)
+ lane_mask |= 1 << lane_cfg->data[i].pos;
+ }
return lane_mask;
}
@@ -1096,10 +1103,14 @@ static void csiphy_lanes_enable(struct csiphy_device *csiphy,
settle_cnt = csiphy_settle_cnt_calc(link_freq, csiphy->timer_clk_rate);
- val = CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE;
- for (i = 0; i < c->num_data; i++)
- val |= BIT(c->data[i].pos * 2);
-
+ if (c->cphy) {
+ for (i = 0; i < c->num_data; i++)
+ val |= BIT((c->data[i].pos * 2) + 1);
+ } else {
+ val = CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE;
+ for (i = 0; i < c->num_data; i++)
+ val |= BIT(c->data[i].pos * 2);
+ }
writel_relaxed(val, csiphy->base +
CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(regs->offset, 5));
--
2.51.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH RFC 4/8] media: qcom: camss: Prepare CSID for C-PHY support
2025-11-09 9:39 [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms David Heidelberg via B4 Relay
` (2 preceding siblings ...)
2025-11-09 9:39 ` [PATCH RFC 3/8] media: qcom: camss: csiphy-3ph: Use odd bits for configuring C-PHY lanes David Heidelberg via B4 Relay
@ 2025-11-09 9:39 ` David Heidelberg via B4 Relay
2025-11-10 11:37 ` Bryan O'Donoghue
2025-11-09 9:39 ` [PATCH RFC 5/8] media: qcom: camss: Initialize lanes after lane configuration is available David Heidelberg via B4 Relay
` (4 subsequent siblings)
8 siblings, 1 reply; 24+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-09 9:39 UTC (permalink / raw)
To: Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel, David Heidelberg
From: David Heidelberg <david@ixit.cz>
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 <david@ixit.cz>
---
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 *csid,
val = (lane_cnt - 1) << CSI2_RX_CFG0_NUM_ACTIVE_LANES;
val |= phy->lane_assign << CSI2_RX_CFG0_DL0_INPUT_SEL;
val |= phy->csiphy_id << CSI2_RX_CFG0_PHY_NUM_SEL;
+ val |= csid->phy.cphy << CSI2_RX_CFG0_PHY_TYPE_SEL;
writel_relaxed(val, csid->base + CSID_CSI2_RX_CFG0);
val = 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 5284b5857368c..68adea33cc719 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.c
+++ b/drivers/media/platform/qcom/camss/camss-csid.c
@@ -1287,6 +1287,7 @@ static int csid_link_setup(struct media_entity *entity,
csid->phy.csiphy_id = csiphy->id;
lane_cfg = &csiphy->cfg.csi2->lane_cfg;
+ csid->phy.cphy = lane_cfg->cphy;
csid->phy.lane_cnt = lane_cfg->num_data;
csid->phy.lane_assign = 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;
};
struct csid_device;
--
2.51.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH RFC 5/8] media: qcom: camss: Initialize lanes after lane configuration is available
2025-11-09 9:39 [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms David Heidelberg via B4 Relay
` (3 preceding siblings ...)
2025-11-09 9:39 ` [PATCH RFC 4/8] media: qcom: camss: Prepare CSID for C-PHY support David Heidelberg via B4 Relay
@ 2025-11-09 9:39 ` David Heidelberg via B4 Relay
2025-11-10 11:38 ` Bryan O'Donoghue
2025-11-09 9:39 ` [PATCH RFC 6/8] media: qcom: camss: csiphy-3ph: Use sdm845 C-PHY configuration sequence David Heidelberg via B4 Relay
` (3 subsequent siblings)
8 siblings, 1 reply; 24+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-09 9:39 UTC (permalink / raw)
To: Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel, David Heidelberg
From: Petr Hodina <phodina@protonmail.com>
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 <phodina@protonmail.com>
Signed-off-by: David Heidelberg <david@ixit.cz>
---
.../platform/qcom/camss/camss-csiphy-3ph-1-0.c | 70 ++++++++++++----------
1 file changed, 37 insertions(+), 33 deletions(-)
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
index 348b8cd18327e..c2adbde6b4e0d 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
@@ -1101,6 +1101,42 @@ static void csiphy_lanes_enable(struct csiphy_device *csiphy,
u8 val;
int i;
+ switch (csiphy->camss->res->version) {
+ case CAMSS_845:
+ regs->lane_regs = &lane_regs_sdm845[0];
+ regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845);
+ break;
+ case CAMSS_2290:
+ regs->lane_regs = &lane_regs_qcm2290[0];
+ regs->lane_array_size = ARRAY_SIZE(lane_regs_qcm2290);
+ break;
+ case CAMSS_7280:
+ case CAMSS_8250:
+ regs->lane_regs = &lane_regs_sm8250[0];
+ regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8250);
+ break;
+ case CAMSS_8280XP:
+ regs->lane_regs = &lane_regs_sc8280xp[0];
+ regs->lane_array_size = ARRAY_SIZE(lane_regs_sc8280xp);
+ break;
+ case CAMSS_X1E80100:
+ case CAMSS_8550:
+ regs->offset = 0x1000;
+ break;
+ case CAMSS_8650:
+ regs->lane_regs = &lane_regs_sm8650[0];
+ regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8650);
+ regs->offset = 0x1000;
+ break;
+ case CAMSS_8300:
+ case CAMSS_8775P:
+ regs->lane_regs = &lane_regs_sa8775p[0];
+ regs->lane_array_size = ARRAY_SIZE(lane_regs_sa8775p);
+ break;
+ default:
+ break;
+ }
+
settle_cnt = csiphy_settle_cnt_calc(link_freq, csiphy->timer_clk_rate);
if (c->cphy) {
@@ -1160,47 +1196,15 @@ static int csiphy_init(struct csiphy_device *csiphy)
return -ENOMEM;
csiphy->regs = regs;
- regs->offset = 0x800;
switch (csiphy->camss->res->version) {
- case CAMSS_845:
- regs->lane_regs = &lane_regs_sdm845[0];
- regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845);
- break;
- case CAMSS_2290:
- regs->lane_regs = &lane_regs_qcm2290[0];
- regs->lane_array_size = ARRAY_SIZE(lane_regs_qcm2290);
- break;
- case CAMSS_7280:
- case CAMSS_8250:
- regs->lane_regs = &lane_regs_sm8250[0];
- regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8250);
- break;
- case CAMSS_8280XP:
- regs->lane_regs = &lane_regs_sc8280xp[0];
- regs->lane_array_size = ARRAY_SIZE(lane_regs_sc8280xp);
- break;
case CAMSS_X1E80100:
- regs->lane_regs = &lane_regs_x1e80100[0];
- regs->lane_array_size = ARRAY_SIZE(lane_regs_x1e80100);
- regs->offset = 0x1000;
- break;
case CAMSS_8550:
- regs->lane_regs = &lane_regs_sm8550[0];
- regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8550);
- regs->offset = 0x1000;
- break;
case CAMSS_8650:
- regs->lane_regs = &lane_regs_sm8650[0];
- regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8650);
regs->offset = 0x1000;
break;
- case CAMSS_8300:
- case CAMSS_8775P:
- regs->lane_regs = &lane_regs_sa8775p[0];
- regs->lane_array_size = ARRAY_SIZE(lane_regs_sa8775p);
- break;
default:
+ regs->offset = 0x800;
break;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH RFC 6/8] media: qcom: camss: csiphy-3ph: Use sdm845 C-PHY configuration sequence
2025-11-09 9:39 [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms David Heidelberg via B4 Relay
` (4 preceding siblings ...)
2025-11-09 9:39 ` [PATCH RFC 5/8] media: qcom: camss: Initialize lanes after lane configuration is available David Heidelberg via B4 Relay
@ 2025-11-09 9:39 ` David Heidelberg via B4 Relay
2025-11-10 11:40 ` Bryan O'Donoghue
2025-11-10 11:41 ` Luca Weiss
2025-11-09 9:39 ` [PATCH RFC 7/8] media: qcom: camss: Account for C-PHY when calculating link frequency David Heidelberg via B4 Relay
` (2 subsequent siblings)
8 siblings, 2 replies; 24+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-09 9:39 UTC (permalink / raw)
To: Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel, David Heidelberg
From: David Heidelberg <david@ixit.cz>
Enable the 3-phase (3PH) lane configuration introduced earlier when
C-PHY mode is requested on the SDM845 platform. This ensures the proper
initialization sequence is used for C-PHY operation.
Signed-off-by: David Heidelberg <david@ixit.cz>
---
drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
index c2adbde6b4e0d..03f5c4676e89a 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
@@ -1103,8 +1103,14 @@ static void csiphy_lanes_enable(struct csiphy_device *csiphy,
switch (csiphy->camss->res->version) {
case CAMSS_845:
- regs->lane_regs = &lane_regs_sdm845[0];
- regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845);
+ if (c->cphy) {
+ regs->lane_regs = &lane_regs_sdm845_3ph[0];
+ regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845_3ph);
+
+ } else {
+ regs->lane_regs = &lane_regs_sdm845[0];
+ regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845);
+ }
break;
case CAMSS_2290:
regs->lane_regs = &lane_regs_qcm2290[0];
--
2.51.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH RFC 7/8] media: qcom: camss: Account for C-PHY when calculating link frequency
2025-11-09 9:39 [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms David Heidelberg via B4 Relay
` (5 preceding siblings ...)
2025-11-09 9:39 ` [PATCH RFC 6/8] media: qcom: camss: csiphy-3ph: Use sdm845 C-PHY configuration sequence David Heidelberg via B4 Relay
@ 2025-11-09 9:39 ` David Heidelberg via B4 Relay
2025-11-09 12:42 ` Casey Connolly
2025-11-09 9:39 ` [PATCH RFC 8/8] media: qcom: camss: Remove D-PHY-only endpoint restriction David Heidelberg via B4 Relay
2025-11-09 12:49 ` [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms Casey Connolly
8 siblings, 1 reply; 24+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-09 9:39 UTC (permalink / raw)
To: Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel, David Heidelberg, Sakari Ailus
From: David Heidelberg <david@ixit.cz>
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 <sakari.ailus@linux.intel.com>
Signed-off-by: David Heidelberg <david@ixit.cz>
---
drivers/media/platform/qcom/camss/camss-csid.c | 2 +-
drivers/media/platform/qcom/camss/camss-csiphy.c | 6 ++++--
drivers/media/platform/qcom/camss/camss.c | 7 ++++---
drivers/media/platform/qcom/camss/camss.h | 2 +-
4 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c
index 68adea33cc719..9fb5834b28e2b 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.c
+++ b/drivers/media/platform/qcom/camss/camss-csid.c
@@ -545,7 +545,7 @@ static int csid_set_clock_rates(struct csid_device *csid)
fmt = csid_get_fmt_entry(csid->res->formats->formats, csid->res->formats->nformats,
csid->fmt[MSM_CSIPHY_PAD_SINK].code);
link_freq = camss_get_link_freq(&csid->subdev.entity, fmt->bpp,
- csid->phy.lane_cnt);
+ csid->phy.lane_cnt, csid->phy.cphy);
if (link_freq < 0)
link_freq = 0;
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c
index a734fb7dde0a4..61f2b2ac3f159 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.c
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
@@ -144,8 +144,9 @@ static int csiphy_set_clock_rates(struct csiphy_device *csiphy)
u8 bpp = csiphy_get_bpp(csiphy->res->formats->formats, csiphy->res->formats->nformats,
csiphy->fmt[MSM_CSIPHY_PAD_SINK].code);
u8 num_lanes = csiphy->cfg.csi2->lane_cfg.num_data;
+ bool cphy = csiphy->cfg.csi2->lane_cfg.cphy;
- link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes);
+ link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes, cphy);
if (link_freq < 0)
link_freq = 0;
@@ -270,9 +271,10 @@ static int csiphy_stream_on(struct csiphy_device *csiphy)
u8 bpp = csiphy_get_bpp(csiphy->res->formats->formats, csiphy->res->formats->nformats,
csiphy->fmt[MSM_CSIPHY_PAD_SINK].code);
u8 num_lanes = csiphy->cfg.csi2->lane_cfg.num_data;
+ bool cphy = csiphy->cfg.csi2->lane_cfg.cphy;
u8 val;
- link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes);
+ link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes, cphy);
if (link_freq < 0) {
dev_err(csiphy->camss->dev,
diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
index 549780f3f948b..248aa6b21b5ad 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -3912,20 +3912,21 @@ struct media_pad *camss_find_sensor_pad(struct media_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
+ * @nr_of_lanes: Number of lanes in the link to the sensor
*
* 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)
+ unsigned int nr_of_lanes, bool cphy)
{
struct media_pad *sensor_pad;
+ unsigned int div = nr_of_lanes * 2 * (cphy ? 7 : 16);
sensor_pad = camss_find_sensor_pad(entity);
if (!sensor_pad)
return -ENODEV;
- return v4l2_get_link_freq(sensor_pad, bpp, 2 * lanes);
+ return v4l2_get_link_freq(sensor_pad, 16 * bpp, div);
}
/*
diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/platform/qcom/camss/camss.h
index 9d9a62640e25d..0ab908b0c037f 100644
--- a/drivers/media/platform/qcom/camss/camss.h
+++ b/drivers/media/platform/qcom/camss/camss.h
@@ -162,7 +162,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);
+ unsigned int lanes, bool cphy);
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);
--
2.51.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH RFC 8/8] media: qcom: camss: Remove D-PHY-only endpoint restriction
2025-11-09 9:39 [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms David Heidelberg via B4 Relay
` (6 preceding siblings ...)
2025-11-09 9:39 ` [PATCH RFC 7/8] media: qcom: camss: Account for C-PHY when calculating link frequency David Heidelberg via B4 Relay
@ 2025-11-09 9:39 ` David Heidelberg via B4 Relay
2025-11-09 12:43 ` Casey Connolly
2025-11-09 17:22 ` Luca Weiss
2025-11-09 12:49 ` [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms Casey Connolly
8 siblings, 2 replies; 24+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-09 9:39 UTC (permalink / raw)
To: Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel, David Heidelberg
From: David Heidelberg <david@ixit.cz>
C-PHY mode is now supported, so the endpoint bus-type restriction to
D-PHY can be removed.
Signed-off-by: David Heidelberg <david@ixit.cz>
---
drivers/media/platform/qcom/camss/camss.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
index 248aa6b21b5ad..1408e8a03f0bd 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -4044,15 +4044,6 @@ static int camss_of_parse_endpoint_node(struct device *dev,
if (ret)
return ret;
- /*
- * Most SoCs support both D-PHY and C-PHY standards, but currently only
- * D-PHY is supported in the driver.
- */
- if (vep.bus_type != V4L2_MBUS_CSI2_DPHY) {
- dev_err(dev, "Unsupported bus type %d\n", vep.bus_type);
- return -EINVAL;
- }
-
csd->interface.csiphy_id = vep.base.port;
mipi_csi2 = &vep.bus.mipi_csi2;
--
2.51.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 3/8] media: qcom: camss: csiphy-3ph: Use odd bits for configuring C-PHY lanes
2025-11-09 9:39 ` [PATCH RFC 3/8] media: qcom: camss: csiphy-3ph: Use odd bits for configuring C-PHY lanes David Heidelberg via B4 Relay
@ 2025-11-09 9:49 ` David Heidelberg
0 siblings, 0 replies; 24+ messages in thread
From: David Heidelberg @ 2025-11-09 9:49 UTC (permalink / raw)
To: Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
On 09/11/2025 10:39, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> 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.
>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> .../platform/qcom/camss/camss-csiphy-3ph-1-0.c | 25 ++++++++++++++++------
> 1 file changed, 18 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
> index f28c32d1a4ec5..348b8cd18327e 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
> @@ -1054,10 +1054,17 @@ static u8 csiphy_get_lane_mask(struct csiphy_lanes_cfg *lane_cfg)
> u8 lane_mask;
> int i;
>
> - lane_mask = CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE;
> + if (lane_cfg->cphy) {
> + lane_mask = 0;
>
> - for (i = 0; i < lane_cfg->num_data; i++)
> - lane_mask |= 1 << lane_cfg->data[i].pos;
> + for (i = 0; i < lane_cfg->num_data; i++)
> + lane_mask |= (1 << lane_cfg->data[i].pos) + 1;
> + } else {
> + lane_mask = CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE;
> +
> + for (i = 0; i < lane_cfg->num_data; i++)
> + lane_mask |= 1 << lane_cfg->data[i].pos;
> + }
>
> return lane_mask;
> }
> @@ -1096,10 +1103,14 @@ static void csiphy_lanes_enable(struct csiphy_device *csiphy,
>
> settle_cnt = csiphy_settle_cnt_calc(link_freq, csiphy->timer_clk_rate);
>
> - val = CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE;
> - for (i = 0; i < c->num_data; i++)
> - val |= BIT(c->data[i].pos * 2);
> -
> + if (c->cphy) {
Imagine val is initialized here:
val = 0;
is already fixed in next version.
> + for (i = 0; i < c->num_data; i++)
> + val |= BIT((c->data[i].pos * 2) + 1);
> + } else {
> + val = CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE;
> + for (i = 0; i < c->num_data; i++)
> + val |= BIT(c->data[i].pos * 2);
> + }
> writel_relaxed(val, csiphy->base +
> CSIPHY_3PH_CMN_CSI_COMMON_CTRLn(regs->offset, 5));
>
>
--
David Heidelberg
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 2/8] media: qcom: camss: csiphy: Introduce C-PHY
2025-11-09 9:39 ` [PATCH RFC 2/8] media: qcom: camss: csiphy: Introduce C-PHY David Heidelberg via B4 Relay
@ 2025-11-09 12:35 ` Casey Connolly
2025-11-10 11:35 ` Bryan O'Donoghue
1 sibling, 0 replies; 24+ messages in thread
From: Casey Connolly @ 2025-11-09 12:35 UTC (permalink / raw)
To: david, Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
Hi David,
On 11/9/25 10:39, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> Read C-PHY 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 <david@ixit.cz>
> ---
> drivers/media/platform/qcom/camss/camss-csiphy.h | 2 ++
> drivers/media/platform/qcom/camss/camss.c | 8 ++++++--
> 2 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.h b/drivers/media/platform/qcom/camss/camss-csiphy.h
> index 895f80003c441..8f7d0e4c73075 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 {
>
> /**
> * struct csiphy_lanes_cfg - CSIPHY lanes configuration
> + * @cphy: true if C-PHY is used, false if D-PHY is used
> * @num_data: number of data lanes
> * @data: data lanes configuration
> * @clk: clock lane configuration (only for D-PHY)
> */
> struct csiphy_lanes_cfg {
> + bool cphy;
Bit of a nit, but it would read better to use an enum here I think, then
one doesn't have to infer that "!lncfg->cphy" means dphy mode.
Kind regards,
Casey (she/they)
> int num_data;
> struct csiphy_lane *data;
> struct csiphy_lane clk;
> diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
> index fcc2b2c3cba07..549780f3f948b 100644
> --- a/drivers/media/platform/qcom/camss/camss.c
> +++ b/drivers/media/platform/qcom/camss/camss.c
> @@ -4055,9 +4055,13 @@ static int camss_of_parse_endpoint_node(struct device *dev,
> csd->interface.csiphy_id = vep.base.port;
>
> mipi_csi2 = &vep.bus.mipi_csi2;
> - lncfg->clk.pos = mipi_csi2->clock_lane;
> - lncfg->clk.pol = mipi_csi2->lane_polarities[0];
> lncfg->num_data = mipi_csi2->num_data_lanes;
> + lncfg->cphy = vep.bus_type == V4L2_MBUS_CSI2_CPHY;
> +
> + if (!lncfg->cphy) {
> + lncfg->clk.pos = mipi_csi2->clock_lane;
> + lncfg->clk.pol = mipi_csi2->lane_polarities[0];
> + }
>
> lncfg->data = devm_kcalloc(dev,
> lncfg->num_data, sizeof(*lncfg->data),
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 7/8] media: qcom: camss: Account for C-PHY when calculating link frequency
2025-11-09 9:39 ` [PATCH RFC 7/8] media: qcom: camss: Account for C-PHY when calculating link frequency David Heidelberg via B4 Relay
@ 2025-11-09 12:42 ` Casey Connolly
0 siblings, 0 replies; 24+ messages in thread
From: Casey Connolly @ 2025-11-09 12:42 UTC (permalink / raw)
To: david, Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel, Sakari Ailus
Hi David,
On 11/9/25 10:39, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> 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 <sakari.ailus@linux.intel.com>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> drivers/media/platform/qcom/camss/camss-csid.c | 2 +-
> drivers/media/platform/qcom/camss/camss-csiphy.c | 6 ++++--
> drivers/media/platform/qcom/camss/camss.c | 7 ++++---
> drivers/media/platform/qcom/camss/camss.h | 2 +-
> 4 files changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c
> index 68adea33cc719..9fb5834b28e2b 100644
> --- a/drivers/media/platform/qcom/camss/camss-csid.c
> +++ b/drivers/media/platform/qcom/camss/camss-csid.c
> @@ -545,7 +545,7 @@ static int csid_set_clock_rates(struct csid_device *csid)
> fmt = csid_get_fmt_entry(csid->res->formats->formats, csid->res->formats->nformats,
> csid->fmt[MSM_CSIPHY_PAD_SINK].code);
> link_freq = camss_get_link_freq(&csid->subdev.entity, fmt->bpp,
> - csid->phy.lane_cnt);
> + csid->phy.lane_cnt, csid->phy.cphy);
> if (link_freq < 0)
> link_freq = 0;
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c
> index a734fb7dde0a4..61f2b2ac3f159 100644
> --- a/drivers/media/platform/qcom/camss/camss-csiphy.c
> +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
> @@ -144,8 +144,9 @@ static int csiphy_set_clock_rates(struct csiphy_device *csiphy)
> u8 bpp = csiphy_get_bpp(csiphy->res->formats->formats, csiphy->res->formats->nformats,
> csiphy->fmt[MSM_CSIPHY_PAD_SINK].code);
> u8 num_lanes = csiphy->cfg.csi2->lane_cfg.num_data;
> + bool cphy = csiphy->cfg.csi2->lane_cfg.cphy;
>
> - link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes);
> + link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes, cphy);
> if (link_freq < 0)
> link_freq = 0;
>
> @@ -270,9 +271,10 @@ static int csiphy_stream_on(struct csiphy_device *csiphy)
> u8 bpp = csiphy_get_bpp(csiphy->res->formats->formats, csiphy->res->formats->nformats,
> csiphy->fmt[MSM_CSIPHY_PAD_SINK].code);
> u8 num_lanes = csiphy->cfg.csi2->lane_cfg.num_data;
> + bool cphy = csiphy->cfg.csi2->lane_cfg.cphy;
> u8 val;
>
> - link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes);
> + link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes, cphy);
>
> if (link_freq < 0) {
> dev_err(csiphy->camss->dev,
> diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
> index 549780f3f948b..248aa6b21b5ad 100644
> --- a/drivers/media/platform/qcom/camss/camss.c
> +++ b/drivers/media/platform/qcom/camss/camss.c
> @@ -3912,20 +3912,21 @@ struct media_pad *camss_find_sensor_pad(struct media_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
> + * @nr_of_lanes: Number of lanes in the link to the sensor
Missing cphy doc comment.> *
> * 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)
> + unsigned int nr_of_lanes, bool cphy)
> {
> struct media_pad *sensor_pad;
> + unsigned int div = nr_of_lanes * 2 * (cphy ? 7 : 16);
What do the magic numbers 7 and 16 mean? It would be nice to describe these.
Kind regards,
Casey (she/they)
>
> sensor_pad = camss_find_sensor_pad(entity);
> if (!sensor_pad)
> return -ENODEV;
>
> - return v4l2_get_link_freq(sensor_pad, bpp, 2 * lanes);
> + return v4l2_get_link_freq(sensor_pad, 16 * bpp, div);
> }
>
> /*
> diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/platform/qcom/camss/camss.h
> index 9d9a62640e25d..0ab908b0c037f 100644
> --- a/drivers/media/platform/qcom/camss/camss.h
> +++ b/drivers/media/platform/qcom/camss/camss.h
> @@ -162,7 +162,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);
> + unsigned int lanes, bool cphy);
> 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);
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 8/8] media: qcom: camss: Remove D-PHY-only endpoint restriction
2025-11-09 9:39 ` [PATCH RFC 8/8] media: qcom: camss: Remove D-PHY-only endpoint restriction David Heidelberg via B4 Relay
@ 2025-11-09 12:43 ` Casey Connolly
2025-11-09 17:22 ` Luca Weiss
1 sibling, 0 replies; 24+ messages in thread
From: Casey Connolly @ 2025-11-09 12:43 UTC (permalink / raw)
To: david, Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
On 11/9/25 10:39, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> C-PHY mode is now supported, so the endpoint bus-type restriction to
> D-PHY can be removed.
>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> drivers/media/platform/qcom/camss/camss.c | 9 ---------
> 1 file changed, 9 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
> index 248aa6b21b5ad..1408e8a03f0bd 100644
> --- a/drivers/media/platform/qcom/camss/camss.c
> +++ b/drivers/media/platform/qcom/camss/camss.c
> @@ -4044,15 +4044,6 @@ static int camss_of_parse_endpoint_node(struct device *dev,
> if (ret)
> return ret;
>
> - /*
> - * Most SoCs support both D-PHY and C-PHY standards, but currently only
> - * D-PHY is supported in the driver.
> - */
> - if (vep.bus_type != V4L2_MBUS_CSI2_DPHY) {
> - dev_err(dev, "Unsupported bus type %d\n", vep.bus_type);
> - return -EINVAL;
> - }
Might be better to just expand the check to include C-phy, since there
are other bus types that are also unsupported.> -
> csd->interface.csiphy_id = vep.base.port;
>
> mipi_csi2 = &vep.bus.mipi_csi2;
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms
2025-11-09 9:39 [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms David Heidelberg via B4 Relay
` (7 preceding siblings ...)
2025-11-09 9:39 ` [PATCH RFC 8/8] media: qcom: camss: Remove D-PHY-only endpoint restriction David Heidelberg via B4 Relay
@ 2025-11-09 12:49 ` Casey Connolly
8 siblings, 0 replies; 24+ messages in thread
From: Casey Connolly @ 2025-11-09 12:49 UTC (permalink / raw)
To: david, Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel, Sakari Ailus
Hi David,
On 11/9/25 10:39, David Heidelberg via B4 Relay wrote:
> # Short summary
>
> This patch series extends the Qualcomm CAMSS (Camera Subsystem),
> including CSID and CSIPHY components, to support C-PHY mode configuration.
Awesome to see this actually working after so much time and prior effort!
>
> # Background and motivation
>
> Modern smartphone cameras increasingly rely on MIPI C-PHY rather than D-PHY,
> thanks to its higher data throughput and signal efficiency. As a result,
> many OEMs adopt C-PHY interfaces for main (rear) cameras on Qualcomm-based
> devices.
>
> Until now, mainline Linux lacked C-PHY configuration support for Qualcomm
> chipsets, preventing bring-up of primary camera sensors on several
> Snapdragon platforms. This series closes that gap.
I think it's worth being clearer here that this is only tested on
SDM845, and will only work on sdm845 anyway because of the lane
configuration.
Additionally, with Luca's explicit D-phy check removed, other platforms
won't error out if someone tries to use c-phy without adding the lane
configuration (and whatever other configuration might also be needed),
so it might be worth adding a proper check for that.
>
> - Introduces C-PHY configuration support for the CAMSS driver stack,
> covering both CSID and CSIPHY blocks.
> - Successfully enables C-PHY operation on the Snapdragon 845 platform.
> - Tested on OnePlus 6 and 6T phones running mainline Linux,
> using the Sony IMX519 main camera sensor.
> - The new configuration allows other chipsets versionsto enable C-PHY by
> simply adding corresponding sensor driver support and csiphy
> initialization data, following the example set for sdm845.
>
> With this patch series, mainline Linux gains working C-PHY support for
> Snapdragon 845, paving the way for improved main camera functionality
> across many Qualcomm-based devices. The groundwork also simplifies
> future enablement efforts for additional SoCs and sensors.
woohoo!
Kind regards,
Casey (she/they)
>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> Casey Connolly (1):
> media: qcom: camss: csiphy-3ph: Add Gen2 v1.1 MIPI CSI-2 CPHY init
>
> David Heidelberg (6):
> media: qcom: camss: csiphy: Introduce C-PHY
> media: qcom: camss: csiphy-3ph: Use odd bits for configuring C-PHY lanes
> media: qcom: camss: Prepare CSID for C-PHY support
> media: qcom: camss: csiphy-3ph: Use sdm845 C-PHY configuration sequence
> media: qcom: camss: Account for C-PHY when calculating link frequency
> media: qcom: camss: Remove D-PHY-only endpoint restriction
>
> Petr Hodina (1):
> media: qcom: camss: Initialize lanes after lane configuration is available
>
> .../media/platform/qcom/camss/camss-csid-gen2.c | 1 +
> drivers/media/platform/qcom/camss/camss-csid.c | 3 +-
> drivers/media/platform/qcom/camss/camss-csid.h | 1 +
> .../platform/qcom/camss/camss-csiphy-3ph-1-0.c | 165 ++++++++++++++++-----
> drivers/media/platform/qcom/camss/camss-csiphy.c | 6 +-
> drivers/media/platform/qcom/camss/camss-csiphy.h | 2 +
> drivers/media/platform/qcom/camss/camss.c | 24 ++-
> drivers/media/platform/qcom/camss/camss.h | 2 +-
> 8 files changed, 146 insertions(+), 58 deletions(-)
> ---
> base-commit: 9c0826a5d9aa4d52206dd89976858457a2a8a7ed
> change-id: 20251109-qcom-cphy-bb8cbda1c644
>
> Best regards,
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 8/8] media: qcom: camss: Remove D-PHY-only endpoint restriction
2025-11-09 9:39 ` [PATCH RFC 8/8] media: qcom: camss: Remove D-PHY-only endpoint restriction David Heidelberg via B4 Relay
2025-11-09 12:43 ` Casey Connolly
@ 2025-11-09 17:22 ` Luca Weiss
1 sibling, 0 replies; 24+ messages in thread
From: Luca Weiss @ 2025-11-09 17:22 UTC (permalink / raw)
To: david, Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
On Sun Nov 9, 2025 at 10:39 AM CET, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> C-PHY mode is now supported, so the endpoint bus-type restriction to
> D-PHY can be removed.
>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> drivers/media/platform/qcom/camss/camss.c | 9 ---------
> 1 file changed, 9 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
> index 248aa6b21b5ad..1408e8a03f0bd 100644
> --- a/drivers/media/platform/qcom/camss/camss.c
> +++ b/drivers/media/platform/qcom/camss/camss.c
> @@ -4044,15 +4044,6 @@ static int camss_of_parse_endpoint_node(struct device *dev,
> if (ret)
> return ret;
>
> - /*
> - * Most SoCs support both D-PHY and C-PHY standards, but currently only
> - * D-PHY is supported in the driver.
> - */
> - if (vep.bus_type != V4L2_MBUS_CSI2_DPHY) {
How about just adding && != V4L2_MBUS_CSI2_CPHY to it? Good to check in
any case imo.
Regards
Luca
> - dev_err(dev, "Unsupported bus type %d\n", vep.bus_type);
> - return -EINVAL;
> - }
> -
> csd->interface.csiphy_id = vep.base.port;
>
> mipi_csi2 = &vep.bus.mipi_csi2;
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 2/8] media: qcom: camss: csiphy: Introduce C-PHY
2025-11-09 9:39 ` [PATCH RFC 2/8] media: qcom: camss: csiphy: Introduce C-PHY David Heidelberg via B4 Relay
2025-11-09 12:35 ` Casey Connolly
@ 2025-11-10 11:35 ` Bryan O'Donoghue
2025-11-12 16:15 ` David Heidelberg
1 sibling, 1 reply; 24+ messages in thread
From: Bryan O'Donoghue @ 2025-11-10 11:35 UTC (permalink / raw)
To: david, Robert Foss, Todor Tomov, Vladimir Zapolskiy,
Mauro Carvalho Chehab, Luca Weiss, Petr Hodina, Casey Connolly,
Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
On 09/11/2025 09:39, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> Read C-PHY 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 <david@ixit.cz>
> ---
> drivers/media/platform/qcom/camss/camss-csiphy.h | 2 ++
> drivers/media/platform/qcom/camss/camss.c | 8 ++++++--
> 2 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.h b/drivers/media/platform/qcom/camss/camss-csiphy.h
> index 895f80003c441..8f7d0e4c73075 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 {
>
> /**
> * struct csiphy_lanes_cfg - CSIPHY lanes configuration
> + * @cphy: true if C-PHY is used, false if D-PHY is used
> * @num_data: number of data lanes
> * @data: data lanes configuration
> * @clk: clock lane configuration (only for D-PHY)
> */
> struct csiphy_lanes_cfg {
> + bool cphy;
Should be an integer from
include/dt-bindings/phy/phy.h
- PHY_TYPE_DPHY
- PHY_TYPE_CPHY
this should be indicated in the dt and latched here.
---
bod
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 4/8] media: qcom: camss: Prepare CSID for C-PHY support
2025-11-09 9:39 ` [PATCH RFC 4/8] media: qcom: camss: Prepare CSID for C-PHY support David Heidelberg via B4 Relay
@ 2025-11-10 11:37 ` Bryan O'Donoghue
2025-12-01 20:30 ` David Heidelberg
0 siblings, 1 reply; 24+ messages in thread
From: Bryan O'Donoghue @ 2025-11-10 11:37 UTC (permalink / raw)
To: david, Robert Foss, Todor Tomov, Vladimir Zapolskiy,
Mauro Carvalho Chehab, Luca Weiss, Petr Hodina, Casey Connolly,
Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
On 09/11/2025 09:39, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> 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 <david@ixit.cz>
> ---
> 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 *csid,
> val = (lane_cnt - 1) << CSI2_RX_CFG0_NUM_ACTIVE_LANES;
> val |= phy->lane_assign << CSI2_RX_CFG0_DL0_INPUT_SEL;
> val |= phy->csiphy_id << CSI2_RX_CFG0_PHY_NUM_SEL;
> + val |= csid->phy.cphy << CSI2_RX_CFG0_PHY_TYPE_SEL;
> writel_relaxed(val, csid->base + CSID_CSI2_RX_CFG0);
>
> val = 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 5284b5857368c..68adea33cc719 100644
> --- a/drivers/media/platform/qcom/camss/camss-csid.c
> +++ b/drivers/media/platform/qcom/camss/camss-csid.c
> @@ -1287,6 +1287,7 @@ static int csid_link_setup(struct media_entity *entity,
> csid->phy.csiphy_id = csiphy->id;
>
> lane_cfg = &csiphy->cfg.csi2->lane_cfg;
> + csid->phy.cphy = lane_cfg->cphy;
> csid->phy.lane_cnt = lane_cfg->num_data;
> csid->phy.lane_assign = 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;
> };
>
> struct csid_device;
>
I'm not convinced you need another flag for this. It should be possible
for the CSID to get a pointer to the PHY and interrogate the encoded mode.
---
bod
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 5/8] media: qcom: camss: Initialize lanes after lane configuration is available
2025-11-09 9:39 ` [PATCH RFC 5/8] media: qcom: camss: Initialize lanes after lane configuration is available David Heidelberg via B4 Relay
@ 2025-11-10 11:38 ` Bryan O'Donoghue
0 siblings, 0 replies; 24+ messages in thread
From: Bryan O'Donoghue @ 2025-11-10 11:38 UTC (permalink / raw)
To: david, Robert Foss, Todor Tomov, Vladimir Zapolskiy,
Mauro Carvalho Chehab, Luca Weiss, Petr Hodina, Casey Connolly,
Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
On 09/11/2025 09:39, David Heidelberg via B4 Relay wrote:
> From: Petr Hodina <phodina@protonmail.com>
>
> 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 <phodina@protonmail.com>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> .../platform/qcom/camss/camss-csiphy-3ph-1-0.c | 70 ++++++++++++----------
> 1 file changed, 37 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
> index 348b8cd18327e..c2adbde6b4e0d 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
> @@ -1101,6 +1101,42 @@ static void csiphy_lanes_enable(struct csiphy_device *csiphy,
> u8 val;
> int i;
>
> + switch (csiphy->camss->res->version) {
> + case CAMSS_845:
> + regs->lane_regs = &lane_regs_sdm845[0];
> + regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845);
> + break;
> + case CAMSS_2290:
> + regs->lane_regs = &lane_regs_qcm2290[0];
> + regs->lane_array_size = ARRAY_SIZE(lane_regs_qcm2290);
> + break;
> + case CAMSS_7280:
> + case CAMSS_8250:
> + regs->lane_regs = &lane_regs_sm8250[0];
> + regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8250);
> + break;
> + case CAMSS_8280XP:
> + regs->lane_regs = &lane_regs_sc8280xp[0];
> + regs->lane_array_size = ARRAY_SIZE(lane_regs_sc8280xp);
> + break;
> + case CAMSS_X1E80100:
> + case CAMSS_8550:
> + regs->offset = 0x1000;
> + break;
> + case CAMSS_8650:
> + regs->lane_regs = &lane_regs_sm8650[0];
> + regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8650);
> + regs->offset = 0x1000;
> + break;
> + case CAMSS_8300:
> + case CAMSS_8775P:
> + regs->lane_regs = &lane_regs_sa8775p[0];
> + regs->lane_array_size = ARRAY_SIZE(lane_regs_sa8775p);
> + break;
> + default:
> + break;
> + }
> +
> settle_cnt = csiphy_settle_cnt_calc(link_freq, csiphy->timer_clk_rate);
>
> if (c->cphy) {
> @@ -1160,47 +1196,15 @@ static int csiphy_init(struct csiphy_device *csiphy)
> return -ENOMEM;
>
> csiphy->regs = regs;
> - regs->offset = 0x800;
>
> switch (csiphy->camss->res->version) {
> - case CAMSS_845:
> - regs->lane_regs = &lane_regs_sdm845[0];
> - regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845);
> - break;
> - case CAMSS_2290:
> - regs->lane_regs = &lane_regs_qcm2290[0];
> - regs->lane_array_size = ARRAY_SIZE(lane_regs_qcm2290);
> - break;
> - case CAMSS_7280:
> - case CAMSS_8250:
> - regs->lane_regs = &lane_regs_sm8250[0];
> - regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8250);
> - break;
> - case CAMSS_8280XP:
> - regs->lane_regs = &lane_regs_sc8280xp[0];
> - regs->lane_array_size = ARRAY_SIZE(lane_regs_sc8280xp);
> - break;
> case CAMSS_X1E80100:
> - regs->lane_regs = &lane_regs_x1e80100[0];
> - regs->lane_array_size = ARRAY_SIZE(lane_regs_x1e80100);
> - regs->offset = 0x1000;
> - break;
> case CAMSS_8550:
> - regs->lane_regs = &lane_regs_sm8550[0];
> - regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8550);
> - regs->offset = 0x1000;
> - break;
> case CAMSS_8650:
> - regs->lane_regs = &lane_regs_sm8650[0];
> - regs->lane_array_size = ARRAY_SIZE(lane_regs_sm8650);
> regs->offset = 0x1000;
> break;
> - case CAMSS_8300:
> - case CAMSS_8775P:
> - regs->lane_regs = &lane_regs_sa8775p[0];
> - regs->lane_array_size = ARRAY_SIZE(lane_regs_sa8775p);
> - break;
> default:
> + regs->offset = 0x800;
> break;
> }
>
>
Agreement in principle.
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 6/8] media: qcom: camss: csiphy-3ph: Use sdm845 C-PHY configuration sequence
2025-11-09 9:39 ` [PATCH RFC 6/8] media: qcom: camss: csiphy-3ph: Use sdm845 C-PHY configuration sequence David Heidelberg via B4 Relay
@ 2025-11-10 11:40 ` Bryan O'Donoghue
2025-11-10 11:41 ` Luca Weiss
1 sibling, 0 replies; 24+ messages in thread
From: Bryan O'Donoghue @ 2025-11-10 11:40 UTC (permalink / raw)
To: david, Robert Foss, Todor Tomov, Vladimir Zapolskiy,
Mauro Carvalho Chehab, Luca Weiss, Petr Hodina, Casey Connolly,
Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
On 09/11/2025 09:39, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> Enable the 3-phase (3PH) lane configuration introduced earlier when
> C-PHY mode is requested on the SDM845 platform. This ensures the proper
> initialization sequence is used for C-PHY operation.
>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
> index c2adbde6b4e0d..03f5c4676e89a 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
> @@ -1103,8 +1103,14 @@ static void csiphy_lanes_enable(struct csiphy_device *csiphy,
>
> switch (csiphy->camss->res->version) {
> case CAMSS_845:
> - regs->lane_regs = &lane_regs_sdm845[0];
> - regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845);
> + if (c->cphy) {
> + regs->lane_regs = &lane_regs_sdm845_3ph[0];
> + regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845_3ph);
> +
> + } else {
> + regs->lane_regs = &lane_regs_sdm845[0];
> + regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845);
> + }
> break;
> case CAMSS_2290:
> regs->lane_regs = &lane_regs_qcm2290[0];
>
Assuming the bool becomes an int derived from the define instead...
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 6/8] media: qcom: camss: csiphy-3ph: Use sdm845 C-PHY configuration sequence
2025-11-09 9:39 ` [PATCH RFC 6/8] media: qcom: camss: csiphy-3ph: Use sdm845 C-PHY configuration sequence David Heidelberg via B4 Relay
2025-11-10 11:40 ` Bryan O'Donoghue
@ 2025-11-10 11:41 ` Luca Weiss
1 sibling, 0 replies; 24+ messages in thread
From: Luca Weiss @ 2025-11-10 11:41 UTC (permalink / raw)
To: david, Robert Foss, Todor Tomov, Bryan O'Donoghue,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
On Sun Nov 9, 2025 at 10:39 AM CET, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> Enable the 3-phase (3PH) lane configuration introduced earlier when
> C-PHY mode is requested on the SDM845 platform. This ensures the proper
> initialization sequence is used for C-PHY operation.
>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
> index c2adbde6b4e0d..03f5c4676e89a 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
> @@ -1103,8 +1103,14 @@ static void csiphy_lanes_enable(struct csiphy_device *csiphy,
>
> switch (csiphy->camss->res->version) {
> case CAMSS_845:
> - regs->lane_regs = &lane_regs_sdm845[0];
> - regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845);
> + if (c->cphy) {
> + regs->lane_regs = &lane_regs_sdm845_3ph[0];
> + regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845_3ph);
> +
> + } else {
> + regs->lane_regs = &lane_regs_sdm845[0];
> + regs->lane_array_size = ARRAY_SIZE(lane_regs_sdm845);
> + }
Why not add this directly in the commit adding the sequence? Otherwise
the other commit adding lane_regs_sdm845_3ph will just have an unused
variable warning until this patch.
I think it's one logical change.
Regards
Luca
> break;
> case CAMSS_2290:
> regs->lane_regs = &lane_regs_qcm2290[0];
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 1/8] media: qcom: camss: csiphy-3ph: Add Gen2 v1.1 MIPI CSI-2 CPHY init
2025-11-09 9:39 ` [PATCH RFC 1/8] media: qcom: camss: csiphy-3ph: Add Gen2 v1.1 MIPI CSI-2 CPHY init David Heidelberg via B4 Relay
@ 2025-11-10 20:23 ` Vladimir Zapolskiy
0 siblings, 0 replies; 24+ messages in thread
From: Vladimir Zapolskiy @ 2025-11-10 20:23 UTC (permalink / raw)
To: david, Robert Foss, Todor Tomov, Bryan O'Donoghue,
Mauro Carvalho Chehab, Luca Weiss, Petr Hodina, Casey Connolly,
Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
On 11/9/25 11:39, David Heidelberg via B4 Relay wrote:
> From: Casey Connolly <casey.connolly@linaro.org>
>
> 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 <casey.connolly@linaro.org>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> .../platform/qcom/camss/camss-csiphy-3ph-1-0.c | 64 ++++++++++++++++++++++
> 1 file changed, 64 insertions(+)
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
> index 619abbf607813..f28c32d1a4ec5 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
> @@ -144,6 +144,7 @@ csiphy_lane_regs lane_regs_sa8775p[] = {
> };
>
> /* GEN2 1.0 2PH */
> +/* 5 entries: clock + 4 lanes */
> static const struct
> csiphy_lane_regs lane_regs_sdm845[] = {
> {0x0004, 0x0C, 0x00, CSIPHY_DEFAULT_PARAMS},
> @@ -218,6 +219,69 @@ csiphy_lane_regs lane_regs_sdm845[] = {
> {0x0664, 0x7F, 0x00, CSIPHY_DEFAULT_PARAMS},
> };
>
> +/* GEN2 1.0 3PH */
> +/* 3 entries: 3 lanes (C-PHY) */
> +static const struct
> +csiphy_lane_regs lane_regs_sdm845_3ph[] = {
> + {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},
You may find it be more structured, if the array is split between
0x01zz, 0x03zz and 0x05zz blocks by new lines, each of those three
blocks is a configuration of one of three lanes in total.
> + {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[] = {
>
Reviewed-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
--
Best wishes,
Vladimir
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 2/8] media: qcom: camss: csiphy: Introduce C-PHY
2025-11-10 11:35 ` Bryan O'Donoghue
@ 2025-11-12 16:15 ` David Heidelberg
2025-11-13 9:27 ` Bryan O'Donoghue
0 siblings, 1 reply; 24+ messages in thread
From: David Heidelberg @ 2025-11-12 16:15 UTC (permalink / raw)
To: Bryan O'Donoghue, Robert Foss, Todor Tomov,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
On 10/11/2025 12:35, Bryan O'Donoghue wrote:
> On 09/11/2025 09:39, David Heidelberg via B4 Relay wrote:
>> From: David Heidelberg <david@ixit.cz>
>>
>> Read C-PHY 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 <david@ixit.cz>
>> ---
>> drivers/media/platform/qcom/camss/camss-csiphy.h | 2 ++
>> drivers/media/platform/qcom/camss/camss.c | 8 ++++++--
>> 2 files changed, 8 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.h b/
>> drivers/media/platform/qcom/camss/camss-csiphy.h
>> index 895f80003c441..8f7d0e4c73075 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 {
>> /**
>> * struct csiphy_lanes_cfg - CSIPHY lanes configuration
>> + * @cphy: true if C-PHY is used, false if D-PHY is used
>> * @num_data: number of data lanes
>> * @data: data lanes configuration
>> * @clk: clock lane configuration (only for D-PHY)
>> */
>> struct csiphy_lanes_cfg {
>> + bool cphy;
>
> Should be an integer from
>
> include/dt-bindings/phy/phy.h
>
> - PHY_TYPE_DPHY
> - PHY_TYPE_CPHY
>
> this should be indicated in the dt and latched here.
Would it make sense to rather use the int from:
include/dt-bindings/media/video-interfaces.h
- MEDIA_BUS_TYPE_CSI2_CPHY
- MEDIA_BUS_TYPE_CSI2_DPHY
- ...
?
This one is always used with the endpoint bus-type.
David
>
> ---
> bod
--
David Heidelberg
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 2/8] media: qcom: camss: csiphy: Introduce C-PHY
2025-11-12 16:15 ` David Heidelberg
@ 2025-11-13 9:27 ` Bryan O'Donoghue
0 siblings, 0 replies; 24+ messages in thread
From: Bryan O'Donoghue @ 2025-11-13 9:27 UTC (permalink / raw)
To: David Heidelberg, Robert Foss, Todor Tomov, Vladimir Zapolskiy,
Mauro Carvalho Chehab, Luca Weiss, Petr Hodina, Casey Connolly,
Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
On 12/11/2025 16:15, David Heidelberg wrote:
>> Should be an integer from
>>
>> include/dt-bindings/phy/phy.h
>>
>> - PHY_TYPE_DPHY
>> - PHY_TYPE_CPHY
>>
>> this should be indicated in the dt and latched here.
>
> Would it make sense to rather use the int from:
>
> include/dt-bindings/media/video-interfaces.h
>
> - MEDIA_BUS_TYPE_CSI2_CPHY
> - MEDIA_BUS_TYPE_CSI2_DPHY
> - ...
>
> ?
Maybe, but surely you need to get the mode of the PHY from DT ?
I'm fine with the MEDIA_BUS_TYPE but, I do think the logic must be DT
driven.
---
bod
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH RFC 4/8] media: qcom: camss: Prepare CSID for C-PHY support
2025-11-10 11:37 ` Bryan O'Donoghue
@ 2025-12-01 20:30 ` David Heidelberg
0 siblings, 0 replies; 24+ messages in thread
From: David Heidelberg @ 2025-12-01 20:30 UTC (permalink / raw)
To: Bryan O'Donoghue, Robert Foss, Todor Tomov,
Vladimir Zapolskiy, Mauro Carvalho Chehab, Luca Weiss,
Petr Hodina, Casey Connolly, Dr. Git
Cc: Joel Selvaraj, linux-media, linux-arm-msm, linux-kernel,
phone-devel
On 10/11/2025 12:37, Bryan O'Donoghue wrote:
> On 09/11/2025 09:39, David Heidelberg via B4 Relay wrote:
>> From: David Heidelberg <david@ixit.cz>
>>
>> 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 <david@ixit.cz>
>> ---
>> 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
>> *csid,
>> val = (lane_cnt - 1) << CSI2_RX_CFG0_NUM_ACTIVE_LANES;
>> val |= phy->lane_assign << CSI2_RX_CFG0_DL0_INPUT_SEL;
>> val |= phy->csiphy_id << CSI2_RX_CFG0_PHY_NUM_SEL;
>> + val |= csid->phy.cphy << CSI2_RX_CFG0_PHY_TYPE_SEL;
>> writel_relaxed(val, csid->base + CSID_CSI2_RX_CFG0);
>> val = 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 5284b5857368c..68adea33cc719 100644
>> --- a/drivers/media/platform/qcom/camss/camss-csid.c
>> +++ b/drivers/media/platform/qcom/camss/camss-csid.c
>> @@ -1287,6 +1287,7 @@ static int csid_link_setup(struct media_entity
>> *entity,
>> csid->phy.csiphy_id = csiphy->id;
>> lane_cfg = &csiphy->cfg.csi2->lane_cfg;
>> + csid->phy.cphy = lane_cfg->cphy;
>> csid->phy.lane_cnt = lane_cfg->num_data;
>> csid->phy.lane_assign = 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;
>> };
>> struct csid_device;
>>
>
> I'm not convinced you need another flag for this. It should be possible
> for the CSID to get a pointer to the PHY and interrogate the encoded mode.
I'm not seeing elegant way to do this, if you look below my change
above, others attributes are taken into csid_phy_config in similar way.
Or maybe I'm not seeing some easy/clean way here?
David
>
> ---
> bod
--
David Heidelberg
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2025-12-01 20:30 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-09 9:39 [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms David Heidelberg via B4 Relay
2025-11-09 9:39 ` [PATCH RFC 1/8] media: qcom: camss: csiphy-3ph: Add Gen2 v1.1 MIPI CSI-2 CPHY init David Heidelberg via B4 Relay
2025-11-10 20:23 ` Vladimir Zapolskiy
2025-11-09 9:39 ` [PATCH RFC 2/8] media: qcom: camss: csiphy: Introduce C-PHY David Heidelberg via B4 Relay
2025-11-09 12:35 ` Casey Connolly
2025-11-10 11:35 ` Bryan O'Donoghue
2025-11-12 16:15 ` David Heidelberg
2025-11-13 9:27 ` Bryan O'Donoghue
2025-11-09 9:39 ` [PATCH RFC 3/8] media: qcom: camss: csiphy-3ph: Use odd bits for configuring C-PHY lanes David Heidelberg via B4 Relay
2025-11-09 9:49 ` David Heidelberg
2025-11-09 9:39 ` [PATCH RFC 4/8] media: qcom: camss: Prepare CSID for C-PHY support David Heidelberg via B4 Relay
2025-11-10 11:37 ` Bryan O'Donoghue
2025-12-01 20:30 ` David Heidelberg
2025-11-09 9:39 ` [PATCH RFC 5/8] media: qcom: camss: Initialize lanes after lane configuration is available David Heidelberg via B4 Relay
2025-11-10 11:38 ` Bryan O'Donoghue
2025-11-09 9:39 ` [PATCH RFC 6/8] media: qcom: camss: csiphy-3ph: Use sdm845 C-PHY configuration sequence David Heidelberg via B4 Relay
2025-11-10 11:40 ` Bryan O'Donoghue
2025-11-10 11:41 ` Luca Weiss
2025-11-09 9:39 ` [PATCH RFC 7/8] media: qcom: camss: Account for C-PHY when calculating link frequency David Heidelberg via B4 Relay
2025-11-09 12:42 ` Casey Connolly
2025-11-09 9:39 ` [PATCH RFC 8/8] media: qcom: camss: Remove D-PHY-only endpoint restriction David Heidelberg via B4 Relay
2025-11-09 12:43 ` Casey Connolly
2025-11-09 17:22 ` Luca Weiss
2025-11-09 12:49 ` [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms Casey Connolly
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).