* [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
* 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
* [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
* 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 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 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
* [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
* 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
* [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
* 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 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
* [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
* 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
* [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
* 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
* [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
* 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
* [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 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 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 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
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).