* [PATCH 0/7] phy: qcom-mipi-csi2: Add D-PHY support for sa8775p, qcs8300 and sc7280
@ 2026-10-16 23:54 ` Anusha Arun Nandi
0 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:54 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
This series extends the generic Qualcomm MIPI CSI2 PHY driver
(drivers/phy/qualcomm/phy-qcom-mipi-csi2-*) with three additional
CSIPHY variants: SA8775P, QCS8300 and SC7280. The driver currently
only supports x1e80100; these SoCs let CAMSS consume the CSIPHY through
the common PHY framework instead of the CSIPHY logic embedded in the
legacy in-tree CAMSS driver.
All three targets share one hardware trait that x1e80100 does not:
each has a single CSIPHY power-domain ("top", the Titan Top GDSC)
instead of three. Patch 1 fixes a latent bug this exposes: for a
single-power-domain device, the generic platform-bus code
auto-attaches the domain before probe() runs, so the driver's own
unconditional devm_pm_domain_attach_list() call fails with -EEXIST.
x1e80100 never hit this because auto-attach only applies when there
is exactly one power-domain phandle. This fix is a prerequisite for
every patch that follows and is kept first per bisectability.
The remaining patches add each SoC as its own variant, per the usual
split of core/generic changes from SoC-specific data:
- Patches 2-3 add the devicetree binding for SA8775P, then extend it
to QCS8300, which reuses the exact same CSIPHY (same D-PHY register
layout, common-control offset and clock set) as a second compatible
string in one schema rather than a duplicate file.
- Patch 4 adds the SA8775P driver-side soc_cfg (register init sequence
ported from the legacy camss-csiphy-3ph-1-0.c table, clocks and
power-domain), and generalises the previously-hardcoded "timer"/
"core" clock-name string literals in the probe path into per-SoC
soc_cfg fields so other SoCs can declare their own.
- Patch 5 binds QCS8300 to the same soc_cfg added in patch 4 -- no new
register data or power-domain wiring is needed.
- Patches 6-7 repeat the binding + driver split for SC7280, which has
its own register set and only two clocks.
Tested on sa8775p, qcs8300 and sc7280.
Depends-on: https://lore.kernel.org/all/20260917-x1e-csi2-phy-v18-0-6515b5255fa9@linaro.org/
Depends-on: https://lore.kernel.org/all/20260918-b4-linux-next-25-03-13-dtsi-x1e80100-camss-v20-0-dc244e124e71@linaro.org/
Anusha Arun Nandi (7):
phy: qcom-mipi-csi2: fix -EEXIST probe failure on single power-domain
SoCs
dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
dt-bindings: phy: qcom: Add qcs8300 to the CSI2 PHY schema
phy: qcom-mipi-csi2: Add sa8775p D-PHY support
phy: qcom-mipi-csi2: Add qcs8300 CSI2 PHY support
dt-bindings: phy: qcom: Add qcom,sc7280-csi2-phy schema
phy: qcom-mipi-csi2: Add sc7280 D-PHY provider
.../bindings/phy/qcom,sa8775p-csi2-phy.yaml | 175 ++++++++++++
.../bindings/phy/qcom,sc7280-csi2-phy.yaml | 169 ++++++++++++
.../qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c | 251 ++++++++++++++++++
.../phy/qualcomm/phy-qcom-mipi-csi2-core.c | 31 ++-
drivers/phy/qualcomm/phy-qcom-mipi-csi2.h | 5 +
5 files changed, 622 insertions(+), 9 deletions(-)
create mode 100644 Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
create mode 100644 Documentation/devicetree/bindings/phy/qcom,sc7280-csi2-phy.yaml
--
base-commit: b38d06ad1e13c32970d58039c154f009b81a3368
change-id: 20250710-x1e-csi2-phy-f6434b651d3a
base-commit: 617b69946d330ed334861a3cc2660966e8c14b2c
change-id: 20250313-b4-linux-next-25-03-13-dtsi-x1e80100-camss-1506f74bbd3a
Best regards,
--
Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
--
2.34.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH 0/7] phy: qcom-mipi-csi2: Add D-PHY support for sa8775p, qcs8300 and sc7280
@ 2026-10-16 23:54 ` Anusha Arun Nandi
0 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:54 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
This series extends the generic Qualcomm MIPI CSI2 PHY driver
(drivers/phy/qualcomm/phy-qcom-mipi-csi2-*) with three additional
CSIPHY variants: SA8775P, QCS8300 and SC7280. The driver currently
only supports x1e80100; these SoCs let CAMSS consume the CSIPHY through
the common PHY framework instead of the CSIPHY logic embedded in the
legacy in-tree CAMSS driver.
All three targets share one hardware trait that x1e80100 does not:
each has a single CSIPHY power-domain ("top", the Titan Top GDSC)
instead of three. Patch 1 fixes a latent bug this exposes: for a
single-power-domain device, the generic platform-bus code
auto-attaches the domain before probe() runs, so the driver's own
unconditional devm_pm_domain_attach_list() call fails with -EEXIST.
x1e80100 never hit this because auto-attach only applies when there
is exactly one power-domain phandle. This fix is a prerequisite for
every patch that follows and is kept first per bisectability.
The remaining patches add each SoC as its own variant, per the usual
split of core/generic changes from SoC-specific data:
- Patches 2-3 add the devicetree binding for SA8775P, then extend it
to QCS8300, which reuses the exact same CSIPHY (same D-PHY register
layout, common-control offset and clock set) as a second compatible
string in one schema rather than a duplicate file.
- Patch 4 adds the SA8775P driver-side soc_cfg (register init sequence
ported from the legacy camss-csiphy-3ph-1-0.c table, clocks and
power-domain), and generalises the previously-hardcoded "timer"/
"core" clock-name string literals in the probe path into per-SoC
soc_cfg fields so other SoCs can declare their own.
- Patch 5 binds QCS8300 to the same soc_cfg added in patch 4 -- no new
register data or power-domain wiring is needed.
- Patches 6-7 repeat the binding + driver split for SC7280, which has
its own register set and only two clocks.
Tested on sa8775p, qcs8300 and sc7280.
Depends-on: https://lore.kernel.org/all/20260917-x1e-csi2-phy-v18-0-6515b5255fa9@linaro.org/
Depends-on: https://lore.kernel.org/all/20260918-b4-linux-next-25-03-13-dtsi-x1e80100-camss-v20-0-dc244e124e71@linaro.org/
Anusha Arun Nandi (7):
phy: qcom-mipi-csi2: fix -EEXIST probe failure on single power-domain
SoCs
dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
dt-bindings: phy: qcom: Add qcs8300 to the CSI2 PHY schema
phy: qcom-mipi-csi2: Add sa8775p D-PHY support
phy: qcom-mipi-csi2: Add qcs8300 CSI2 PHY support
dt-bindings: phy: qcom: Add qcom,sc7280-csi2-phy schema
phy: qcom-mipi-csi2: Add sc7280 D-PHY provider
.../bindings/phy/qcom,sa8775p-csi2-phy.yaml | 175 ++++++++++++
.../bindings/phy/qcom,sc7280-csi2-phy.yaml | 169 ++++++++++++
.../qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c | 251 ++++++++++++++++++
.../phy/qualcomm/phy-qcom-mipi-csi2-core.c | 31 ++-
drivers/phy/qualcomm/phy-qcom-mipi-csi2.h | 5 +
5 files changed, 622 insertions(+), 9 deletions(-)
create mode 100644 Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
create mode 100644 Documentation/devicetree/bindings/phy/qcom,sc7280-csi2-phy.yaml
--
base-commit: b38d06ad1e13c32970d58039c154f009b81a3368
change-id: 20250710-x1e-csi2-phy-f6434b651d3a
base-commit: 617b69946d330ed334861a3cc2660966e8c14b2c
change-id: 20250313-b4-linux-next-25-03-13-dtsi-x1e80100-camss-1506f74bbd3a
Best regards,
--
Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
--
2.34.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH 1/7] phy: qcom-mipi-csi2: fix -EEXIST probe failure on single power-domain SoCs
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-16 23:54 ` Anusha Arun Nandi
-1 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:54 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
sa8775p, qcs8300 and sc7280 each list exactly one power-domain ("top")
on the CSI2 PHY node. For a device with a single power-domain phandle,
the generic platform-bus code (platform_probe() ->
dev_pm_domain_attach()) auto-attaches it via genpd_dev_pm_attach()
before the driver's own probe() runs. phy_qcom_mipi_csi2_probe() then
unconditionally calls devm_pm_domain_attach_list(), which fails with
-EEXIST because dev->pm_domain is already set, and the driver treats
that as fatal:
qcom-mipi-csi2-phy ace6000.phy: error -EEXIST: Failed to attach
power-domain list
qcom-mipi-csi2-phy ace6000.phy: probe with driver qcom-mipi-csi2-phy
failed with error -17
x1e80100 is unaffected: it lists three power-domains, so the generic
code does not auto-attach any of them (auto-attach only applies to
single-power-domain devices); the driver's explicit attach is the
only one that runs.
For the single power-domain case, call dev_pm_domain_attach() instead
of devm_pm_domain_attach_list(): it returns early when dev->pm_domain
is already set, so csi2phy->pd_list is left NULL rather than built up
by hand. The three call sites that walk pd_list for genpd
performance-state scaling now guard against a NULL pd_list, which is
harmless since scaling is unused (scaled = false) on every SoC that has
a single "top" domain.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
.../phy/qualcomm/phy-qcom-mipi-csi2-core.c | 24 +++++++++++++------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
index c0a4fa20eaf0..00285be9dd64 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
@@ -43,7 +43,7 @@ phy_qcom_mipi_csi2_set_clock_rates(struct mipi_csi2phy_device *csi2phy,
}
pstate = 0;
- for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
+ for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
unsigned int perf;
if (!csi2phy->soc_cfg->genpds[i].scaled)
@@ -174,7 +174,7 @@ static int phy_qcom_mipi_csi2_power_on(struct phy *phy)
unset_rate:
dev_pm_opp_set_rate(csi2phy->dev, 0);
- for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
+ for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
if (!csi2phy->soc_cfg->genpds[i].scaled)
continue;
@@ -204,7 +204,7 @@ static int phy_qcom_mipi_csi2_power_off(struct phy *phy)
dev_pm_opp_set_rate(csi2phy->dev, 0);
- for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
+ for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
if (!csi2phy->soc_cfg->genpds[i].scaled)
continue;
@@ -233,6 +233,19 @@ static int phy_qcom_mipi_csi2_attach_pm_domains(struct mipi_csi2phy_device *csi2
const char **pd_names;
int i;
+ /*
+ * A device with a single power-domain entry in the devicetree is
+ * already attached by the generic platform-bus code before probe()
+ * runs (genpd_dev_pm_attach()), so calling devm_pm_domain_attach_list()
+ * here would fail with -EEXIST. dev_pm_domain_attach() returns early
+ * in that case (dev->pm_domain already set) instead of leaving
+ * csi2phy->pd_list unset; this is fine since pd_list is only used for
+ * performance-state scaling, which is unused ("scaled = false") on
+ * every SoC that has a single "top" power-domain.
+ */
+ if (csi2phy->soc_cfg->num_genpds == 1)
+ return dev_pm_domain_attach(csi2phy->dev, 0);
+
pd_names = devm_kzalloc(csi2phy->dev,
sizeof(char *) * csi2phy->soc_cfg->num_genpds,
GFP_KERNEL);
@@ -369,11 +382,8 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
return ret;
ret = phy_qcom_mipi_csi2_attach_pm_domains(csi2phy);
- if (ret < 0 || csi2phy->pd_list == NULL) {
- if (ret == 0)
- ret = -ENODEV;
+ if (ret < 0)
return dev_err_probe(dev, ret, "Failed to attach power-domain list\n");
- }
ret = devm_pm_runtime_enable(dev);
if (ret < 0)
--
2.34.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 1/7] phy: qcom-mipi-csi2: fix -EEXIST probe failure on single power-domain SoCs
@ 2026-10-16 23:54 ` Anusha Arun Nandi
0 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:54 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
sa8775p, qcs8300 and sc7280 each list exactly one power-domain ("top")
on the CSI2 PHY node. For a device with a single power-domain phandle,
the generic platform-bus code (platform_probe() ->
dev_pm_domain_attach()) auto-attaches it via genpd_dev_pm_attach()
before the driver's own probe() runs. phy_qcom_mipi_csi2_probe() then
unconditionally calls devm_pm_domain_attach_list(), which fails with
-EEXIST because dev->pm_domain is already set, and the driver treats
that as fatal:
qcom-mipi-csi2-phy ace6000.phy: error -EEXIST: Failed to attach
power-domain list
qcom-mipi-csi2-phy ace6000.phy: probe with driver qcom-mipi-csi2-phy
failed with error -17
x1e80100 is unaffected: it lists three power-domains, so the generic
code does not auto-attach any of them (auto-attach only applies to
single-power-domain devices); the driver's explicit attach is the
only one that runs.
For the single power-domain case, call dev_pm_domain_attach() instead
of devm_pm_domain_attach_list(): it returns early when dev->pm_domain
is already set, so csi2phy->pd_list is left NULL rather than built up
by hand. The three call sites that walk pd_list for genpd
performance-state scaling now guard against a NULL pd_list, which is
harmless since scaling is unused (scaled = false) on every SoC that has
a single "top" domain.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
.../phy/qualcomm/phy-qcom-mipi-csi2-core.c | 24 +++++++++++++------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
index c0a4fa20eaf0..00285be9dd64 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
@@ -43,7 +43,7 @@ phy_qcom_mipi_csi2_set_clock_rates(struct mipi_csi2phy_device *csi2phy,
}
pstate = 0;
- for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
+ for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
unsigned int perf;
if (!csi2phy->soc_cfg->genpds[i].scaled)
@@ -174,7 +174,7 @@ static int phy_qcom_mipi_csi2_power_on(struct phy *phy)
unset_rate:
dev_pm_opp_set_rate(csi2phy->dev, 0);
- for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
+ for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
if (!csi2phy->soc_cfg->genpds[i].scaled)
continue;
@@ -204,7 +204,7 @@ static int phy_qcom_mipi_csi2_power_off(struct phy *phy)
dev_pm_opp_set_rate(csi2phy->dev, 0);
- for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
+ for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
if (!csi2phy->soc_cfg->genpds[i].scaled)
continue;
@@ -233,6 +233,19 @@ static int phy_qcom_mipi_csi2_attach_pm_domains(struct mipi_csi2phy_device *csi2
const char **pd_names;
int i;
+ /*
+ * A device with a single power-domain entry in the devicetree is
+ * already attached by the generic platform-bus code before probe()
+ * runs (genpd_dev_pm_attach()), so calling devm_pm_domain_attach_list()
+ * here would fail with -EEXIST. dev_pm_domain_attach() returns early
+ * in that case (dev->pm_domain already set) instead of leaving
+ * csi2phy->pd_list unset; this is fine since pd_list is only used for
+ * performance-state scaling, which is unused ("scaled = false") on
+ * every SoC that has a single "top" power-domain.
+ */
+ if (csi2phy->soc_cfg->num_genpds == 1)
+ return dev_pm_domain_attach(csi2phy->dev, 0);
+
pd_names = devm_kzalloc(csi2phy->dev,
sizeof(char *) * csi2phy->soc_cfg->num_genpds,
GFP_KERNEL);
@@ -369,11 +382,8 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
return ret;
ret = phy_qcom_mipi_csi2_attach_pm_domains(csi2phy);
- if (ret < 0 || csi2phy->pd_list == NULL) {
- if (ret == 0)
- ret = -ENODEV;
+ if (ret < 0)
return dev_err_probe(dev, ret, "Failed to attach power-domain list\n");
- }
ret = devm_pm_runtime_enable(dev);
if (ret < 0)
--
2.34.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-16 23:54 ` Anusha Arun Nandi
-1 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:54 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
Add a device-tree binding for the Qualcomm SA8775P MIPI CSI2
PHY, modelled as a standalone generic-PHY provider like the existing
qcom,x1e80100-csi2-phy, so CAMSS can consume the CSIPHY through the
common PHY framework instead of driving it in-line.
Follows the qcom,x1e80100-csi2-phy schema's shape: a ports/port@0
sensor-input endpoint carrying data-lanes/bus-type (D-PHY only for
now, C-PHY bus-type value is accepted by the schema but wired up by a
companion series), a port@1 CSID output, and a mandatory
operating-points-v2 table plus power-domains/power-domain-names.
Unlike x1e80100, SA8775P's CSIPHY has a single power-domain: the
Titan Top GDSC, matching the legacy in-tree CAMSS driver's
sa8775p_resources.pd_name = "top" (drivers/media/platform/qcom/camss/
camss.c) and the existing lemans.dtsi camss node's power-domains =
<&camcc CAM_CC_TITAN_TOP_GDSC>. It is not OPP-scaled, only kept
enabled, the same way x1e80100's own "top" domain is.
The PHY takes three clocks (core, timer and the shared CSID CSIPHY RX
clock) and the vdda-phy/vdda-pll supplies. The core/timer naming
matches x1e80100's clock-names convention for the same pair of
clocks.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
.../bindings/phy/qcom,sa8775p-csi2-phy.yaml | 172 ++++++++++++++++++
1 file changed, 172 insertions(+)
create mode 100644 Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
diff --git a/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
new file mode 100644
index 000000000000..b66ec2f14189
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
@@ -0,0 +1,172 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+# Copyright (c) 2026 Qualcomm Innovation Center, Inc. All rights reserved.
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/phy/qcom,sa8775p-csi2-phy.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm SA8775P CSI2 PHY
+
+maintainers:
+ - Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
+
+description:
+ Qualcomm MIPI CSI2 D-PHY. Connects MIPI CSI2 sensors to Qualcomm's Camera
+ CSI Decoder on the SA8775P SoC.
+
+properties:
+ compatible:
+ const: qcom,sa8775p-csi2-phy
+
+ reg:
+ maxItems: 1
+
+ clocks:
+ maxItems: 3
+
+ clock-names:
+ items:
+ - const: core
+ - const: timer
+ - const: csiphy_rx
+
+ interrupts:
+ maxItems: 1
+
+ operating-points-v2: true
+
+ opp-table:
+ type: object
+
+ power-domains:
+ items:
+ - description: Titan Top GDSC - Titan ISP Block, Global Distributed Switch Controller.
+
+ power-domain-names:
+ items:
+ - const: top
+
+ vdda-phy-supply:
+ description: Phandle to PHY supply.
+
+ vdda-pll-supply:
+ description: Phandle to PLL supply.
+
+ ports:
+ $ref: /schemas/graph.yaml#/properties/ports
+
+ properties:
+ port@0:
+ $ref: /schemas/graph.yaml#/$defs/port-base
+ description:
+ Sensor input. A single sensor is described by a single endpoint
+ with one to four data lanes, numbered 1-4. The clock lane is
+ position 0.
+
+ unevaluatedProperties: false
+
+ patternProperties:
+ "^endpoint(@0)?$":
+ $ref: /schemas/media/video-interfaces.yaml#
+ unevaluatedProperties: false
+ properties:
+ bus-type:
+ enum:
+ - 1 # MEDIA_BUS_TYPE_CSI2_CPHY
+ - 4 # MEDIA_BUS_TYPE_CSI2_DPHY
+ default: 4
+
+ data-lanes:
+ minItems: 1
+ maxItems: 4
+ items:
+ minimum: 1
+ maximum: 4
+ description:
+ Data lane positions following this endpoint's clock
+ lane. Positions are a per-port logical numbering, not
+ package pad or ball positions.
+
+ required:
+ - data-lanes
+ - remote-endpoint
+
+ port@1:
+ $ref: /schemas/graph.yaml#/properties/port
+ description: Output to the CAMSS CSID controller.
+
+ required:
+ - port@0
+ - port@1
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - clock-names
+ - interrupts
+ - operating-points-v2
+ - power-domains
+ - power-domain-names
+ - vdda-phy-supply
+ - vdda-pll-supply
+ - ports
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/qcom,sa8775p-camcc.h>
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/media/video-interfaces.h>
+
+ csiphy0: csiphy@ac9c000 {
+ compatible = "qcom,sa8775p-csi2-phy";
+ reg = <0x0ac9c000 0x2000>;
+
+ clocks = <&camcc CAM_CC_CSIPHY0_CLK>,
+ <&camcc CAM_CC_CSI0PHYTIMER_CLK>,
+ <&camcc CAM_CC_CSID_CSIPHY_RX_CLK>;
+ clock-names = "core",
+ "timer",
+ "csiphy_rx";
+
+ interrupts = <GIC_SPI 477 IRQ_TYPE_EDGE_RISING>;
+
+ operating-points-v2 = <&csiphy0_opp_table>;
+
+ power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
+ power-domain-names = "top";
+
+ vdda-phy-supply = <&vreg_l4a>;
+ vdda-pll-supply = <&vreg_l1c>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+ csiphy0_in: endpoint {
+ bus-type = <MEDIA_BUS_TYPE_CSI2_DPHY>;
+ data-lanes = <1 2 3 4>;
+ remote-endpoint = <&sensor_out>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+ csiphy0_out: endpoint {
+ remote-endpoint = <&csid_in>;
+ };
+ };
+ };
+
+ csiphy0_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ opp-300000000 {
+ opp-hz = /bits/ 64 <300000000>;
+ };
+ };
+ };
--
2.34.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
@ 2026-10-16 23:54 ` Anusha Arun Nandi
0 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:54 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
Add a device-tree binding for the Qualcomm SA8775P MIPI CSI2
PHY, modelled as a standalone generic-PHY provider like the existing
qcom,x1e80100-csi2-phy, so CAMSS can consume the CSIPHY through the
common PHY framework instead of driving it in-line.
Follows the qcom,x1e80100-csi2-phy schema's shape: a ports/port@0
sensor-input endpoint carrying data-lanes/bus-type (D-PHY only for
now, C-PHY bus-type value is accepted by the schema but wired up by a
companion series), a port@1 CSID output, and a mandatory
operating-points-v2 table plus power-domains/power-domain-names.
Unlike x1e80100, SA8775P's CSIPHY has a single power-domain: the
Titan Top GDSC, matching the legacy in-tree CAMSS driver's
sa8775p_resources.pd_name = "top" (drivers/media/platform/qcom/camss/
camss.c) and the existing lemans.dtsi camss node's power-domains =
<&camcc CAM_CC_TITAN_TOP_GDSC>. It is not OPP-scaled, only kept
enabled, the same way x1e80100's own "top" domain is.
The PHY takes three clocks (core, timer and the shared CSID CSIPHY RX
clock) and the vdda-phy/vdda-pll supplies. The core/timer naming
matches x1e80100's clock-names convention for the same pair of
clocks.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
.../bindings/phy/qcom,sa8775p-csi2-phy.yaml | 172 ++++++++++++++++++
1 file changed, 172 insertions(+)
create mode 100644 Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
diff --git a/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
new file mode 100644
index 000000000000..b66ec2f14189
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
@@ -0,0 +1,172 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+# Copyright (c) 2026 Qualcomm Innovation Center, Inc. All rights reserved.
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/phy/qcom,sa8775p-csi2-phy.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm SA8775P CSI2 PHY
+
+maintainers:
+ - Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
+
+description:
+ Qualcomm MIPI CSI2 D-PHY. Connects MIPI CSI2 sensors to Qualcomm's Camera
+ CSI Decoder on the SA8775P SoC.
+
+properties:
+ compatible:
+ const: qcom,sa8775p-csi2-phy
+
+ reg:
+ maxItems: 1
+
+ clocks:
+ maxItems: 3
+
+ clock-names:
+ items:
+ - const: core
+ - const: timer
+ - const: csiphy_rx
+
+ interrupts:
+ maxItems: 1
+
+ operating-points-v2: true
+
+ opp-table:
+ type: object
+
+ power-domains:
+ items:
+ - description: Titan Top GDSC - Titan ISP Block, Global Distributed Switch Controller.
+
+ power-domain-names:
+ items:
+ - const: top
+
+ vdda-phy-supply:
+ description: Phandle to PHY supply.
+
+ vdda-pll-supply:
+ description: Phandle to PLL supply.
+
+ ports:
+ $ref: /schemas/graph.yaml#/properties/ports
+
+ properties:
+ port@0:
+ $ref: /schemas/graph.yaml#/$defs/port-base
+ description:
+ Sensor input. A single sensor is described by a single endpoint
+ with one to four data lanes, numbered 1-4. The clock lane is
+ position 0.
+
+ unevaluatedProperties: false
+
+ patternProperties:
+ "^endpoint(@0)?$":
+ $ref: /schemas/media/video-interfaces.yaml#
+ unevaluatedProperties: false
+ properties:
+ bus-type:
+ enum:
+ - 1 # MEDIA_BUS_TYPE_CSI2_CPHY
+ - 4 # MEDIA_BUS_TYPE_CSI2_DPHY
+ default: 4
+
+ data-lanes:
+ minItems: 1
+ maxItems: 4
+ items:
+ minimum: 1
+ maximum: 4
+ description:
+ Data lane positions following this endpoint's clock
+ lane. Positions are a per-port logical numbering, not
+ package pad or ball positions.
+
+ required:
+ - data-lanes
+ - remote-endpoint
+
+ port@1:
+ $ref: /schemas/graph.yaml#/properties/port
+ description: Output to the CAMSS CSID controller.
+
+ required:
+ - port@0
+ - port@1
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - clock-names
+ - interrupts
+ - operating-points-v2
+ - power-domains
+ - power-domain-names
+ - vdda-phy-supply
+ - vdda-pll-supply
+ - ports
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/qcom,sa8775p-camcc.h>
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/media/video-interfaces.h>
+
+ csiphy0: csiphy@ac9c000 {
+ compatible = "qcom,sa8775p-csi2-phy";
+ reg = <0x0ac9c000 0x2000>;
+
+ clocks = <&camcc CAM_CC_CSIPHY0_CLK>,
+ <&camcc CAM_CC_CSI0PHYTIMER_CLK>,
+ <&camcc CAM_CC_CSID_CSIPHY_RX_CLK>;
+ clock-names = "core",
+ "timer",
+ "csiphy_rx";
+
+ interrupts = <GIC_SPI 477 IRQ_TYPE_EDGE_RISING>;
+
+ operating-points-v2 = <&csiphy0_opp_table>;
+
+ power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
+ power-domain-names = "top";
+
+ vdda-phy-supply = <&vreg_l4a>;
+ vdda-pll-supply = <&vreg_l1c>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+ csiphy0_in: endpoint {
+ bus-type = <MEDIA_BUS_TYPE_CSI2_DPHY>;
+ data-lanes = <1 2 3 4>;
+ remote-endpoint = <&sensor_out>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+ csiphy0_out: endpoint {
+ remote-endpoint = <&csid_in>;
+ };
+ };
+ };
+
+ csiphy0_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ opp-300000000 {
+ opp-hz = /bits/ 64 <300000000>;
+ };
+ };
+ };
--
2.34.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 3/7] dt-bindings: phy: qcom: Add qcs8300 to the CSI2 PHY schema
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-16 23:54 ` Anusha Arun Nandi
-1 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:54 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
QCS8300 uses the same MIPI CSI2 CSIPHY as SA8775P --
identical D-PHY register layout, common-control offset and clock set.
Add "qcom,qcs8300-csi2-phy" as a second enum value in the existing
schema rather than duplicating it, and generalise the title/description
to cover both SoCs.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
.../devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
index b66ec2f14189..8e60ef0714bc 100644
--- a/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
+++ b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
@@ -5,18 +5,21 @@
$id: http://devicetree.org/schemas/phy/qcom,sa8775p-csi2-phy.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
-title: Qualcomm SA8775P CSI2 PHY
+title: Qualcomm SA8775P / QCS8300 CSI2 PHY
maintainers:
- Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
description:
Qualcomm MIPI CSI2 D-PHY. Connects MIPI CSI2 sensors to Qualcomm's Camera
- CSI Decoder on the SA8775P (lemans) SoC.
+ CSI Decoder on the SA8775P (lemans) and QCS8300 (monaco) SoCs, which share
+ the same CSIPHY.
properties:
compatible:
- const: qcom,sa8775p-csi2-phy
+ enum:
+ - qcom,sa8775p-csi2-phy
+ - qcom,qcs8300-csi2-phy
reg:
maxItems: 1
--
2.34.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 3/7] dt-bindings: phy: qcom: Add qcs8300 to the CSI2 PHY schema
@ 2026-10-16 23:54 ` Anusha Arun Nandi
0 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:54 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
QCS8300 uses the same MIPI CSI2 CSIPHY as SA8775P --
identical D-PHY register layout, common-control offset and clock set.
Add "qcom,qcs8300-csi2-phy" as a second enum value in the existing
schema rather than duplicating it, and generalise the title/description
to cover both SoCs.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
.../devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
index b66ec2f14189..8e60ef0714bc 100644
--- a/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
+++ b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
@@ -5,18 +5,21 @@
$id: http://devicetree.org/schemas/phy/qcom,sa8775p-csi2-phy.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
-title: Qualcomm SA8775P CSI2 PHY
+title: Qualcomm SA8775P / QCS8300 CSI2 PHY
maintainers:
- Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
description:
Qualcomm MIPI CSI2 D-PHY. Connects MIPI CSI2 sensors to Qualcomm's Camera
- CSI Decoder on the SA8775P (lemans) SoC.
+ CSI Decoder on the SA8775P (lemans) and QCS8300 (monaco) SoCs, which share
+ the same CSIPHY.
properties:
compatible:
- const: qcom,sa8775p-csi2-phy
+ enum:
+ - qcom,sa8775p-csi2-phy
+ - qcom,qcs8300-csi2-phy
reg:
maxItems: 1
--
2.34.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 4/7] phy: qcom-mipi-csi2: Add sa8775p D-PHY support
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-16 23:54 ` Anusha Arun Nandi
-1 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:54 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
Add the SA8775P (Lemans / IQ-9075 EVK) CSIPHY to the generic MIPI CSI2
PHY driver, bound to the new "qcom,sa8775p-csi2-phy" compatible and
reusing the existing D-PHY 2-phase hw ops (phy_qcom_mipi_csi2_ops_
3ph_1_0). The lane_regs_sa8775p[] init sequence is the CSIPHY v1.3.0
2-phase 2.5Gbps 4-lane D-PHY register set ported verbatim from the
legacy in-tree camss-csiphy-3ph-1-0.c table; common_regs_offset is
0x800. The soc_cfg declares the core/timer/csiphy_rx clocks
(csiphy_rx is the shared CSID CSIPHY RX clock, matching the DT node
and binding's three-clock clock-names list) and the vdda-phy/vdda-pll
supplies.
The timer-clock lookup in phy_qcom_mipi_csi2_probe() and the OPP
clkname passed to devm_pm_opp_set_clkname() were both hardcoded
string literals sized to x1e80100 ("timer"/"core"). Add
timer_clk_name/opp_clk_name to struct mipi_csi2phy_soc_cfg so each
SoC can declare its own clock-name strings; x1e80100's soc_cfg now
declares "timer"/"core" explicitly, with no behaviour change.
SA8775P reuses the same "timer"/"core" names as x1e80100 for this
pair of clocks.
SA8775P's CSIPHY has a single power-domain, the Titan Top GDSC,
matching the legacy in-tree CAMSS driver's sa8775p_resources.pd_name
= "top" and the existing lemans.dtsi camss node. Like x1e80100's own
"top" domain, it is not OPP-scaled, only kept enabled.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
.../qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c | 112 ++++++++++++++++++
.../phy/qualcomm/phy-qcom-mipi-csi2-core.c | 5 +-
drivers/phy/qualcomm/phy-qcom-mipi-csi2.h | 4 +
3 files changed, 119 insertions(+), 2 deletions(-)
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
index 966d79c98f9b..85e89235f7c9 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
@@ -380,6 +380,118 @@ const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_4nm_x1e = {
.num_supplies = ARRAY_SIZE(x1e_supplies),
.clk_names = (const char **)x1e_clks,
.num_clk = ARRAY_SIZE(x1e_clks),
+ .timer_clk_name = "timer",
+ .opp_clk_name = "core",
.genpds = x1e_genpds,
.num_genpds = ARRAY_SIZE(x1e_genpds),
};
+
+/* 5nm 2PH v1.3.0 2p5Gbps 4 lane DPHY mode */
+static const struct mipi_csi2phy_lane_regs lane_regs_sa8775p[] = {
+ {.reg_addr = 0x0724, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0728, .reg_data = 0x04, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0700, .reg_data = 0x80, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x070c, .reg_data = 0xff, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0738, .reg_data = 0x1f, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x072c, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0734, .reg_data = 0x0f, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0710, .reg_data = 0x52, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x071c, .reg_data = 0x0a, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0714, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x073c, .reg_data = 0xb8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0704, .reg_data = 0x0c, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0720, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0708, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0024, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0000, .reg_data = 0x8d, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0038, .reg_data = 0xfe, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x002c, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0034, .reg_data = 0x0f, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0010, .reg_data = 0x52, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x001c, .reg_data = 0x0a, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0014, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x003c, .reg_data = 0xb8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0004, .reg_data = 0x0c, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0020, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0008, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0224, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0200, .reg_data = 0x8d, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0238, .reg_data = 0xfe, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x022c, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0234, .reg_data = 0x0f, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0210, .reg_data = 0x52, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x021c, .reg_data = 0x0a, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0214, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x023c, .reg_data = 0xb8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0204, .reg_data = 0x0c, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0220, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0208, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0424, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0400, .reg_data = 0x8d, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0438, .reg_data = 0xfe, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x042c, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0434, .reg_data = 0x0f, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0410, .reg_data = 0x52, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x041c, .reg_data = 0x0a, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0414, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x043c, .reg_data = 0xb8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0404, .reg_data = 0x0c, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0420, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0408, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0624, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0600, .reg_data = 0x8d, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0638, .reg_data = 0xfe, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x062c, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0634, .reg_data = 0x0f, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0610, .reg_data = 0x52, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x061c, .reg_data = 0x0a, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0614, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x063c, .reg_data = 0xb8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0604, .reg_data = 0x0c, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0620, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0608, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x005c, .reg_data = 0x00, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0060, .reg_data = 0xfd, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0064, .reg_data = 0x7f, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x025c, .reg_data = 0x00, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0260, .reg_data = 0xfd, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0264, .reg_data = 0x7f, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x045c, .reg_data = 0x00, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0460, .reg_data = 0xfd, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0464, .reg_data = 0x7f, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x065c, .reg_data = 0x00, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0660, .reg_data = 0xfd, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0664, .reg_data = 0x7f, .param_type = CSIPHY_SKEW_CAL},
+};
+
+static const char * const sa8775p_clks[] = {
+ "core",
+ "timer",
+ "csiphy_rx",
+};
+
+static const char * const sa8775p_supplies[] = {
+ "vdda-phy",
+ "vdda-pll",
+};
+
+static const struct mipi_csi2_genpd sa8775p_genpds[] = {
+ { .name = "top", .scaled = false },
+};
+
+const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_sa8775p = {
+ .ops = &phy_qcom_mipi_csi2_ops_3ph_1_0,
+ .reg_info = {
+ .init_seq = lane_regs_sa8775p,
+ .lane_array_size = ARRAY_SIZE(lane_regs_sa8775p),
+ .common_regs_offset = 0x800,
+ },
+ .supply_names = (const char **)sa8775p_supplies,
+ .num_supplies = ARRAY_SIZE(sa8775p_supplies),
+ .clk_names = (const char **)sa8775p_clks,
+ .num_clk = ARRAY_SIZE(sa8775p_clks),
+ .timer_clk_name = "timer",
+ .opp_clk_name = "core",
+ .genpds = sa8775p_genpds,
+ .num_genpds = ARRAY_SIZE(sa8775p_genpds),
+};
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
index 00285be9dd64..821c6a0a916c 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
@@ -402,7 +402,7 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
if (!csi2phy->clks[i].id)
return dev_err_probe(dev, -EINVAL, "Missing clock-names\n");
- if (!strcmp(csi2phy->clks[i].id, "timer")) {
+ if (!strcmp(csi2phy->clks[i].id, csi2phy->soc_cfg->timer_clk_name)) {
csi2phy->timer_clk = csi2phy->clks[i].clk;
break;
}
@@ -410,7 +410,7 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
if (!csi2phy->timer_clk)
return dev_err_probe(dev, -ENODEV, "no timer clock\n");
- ret = devm_pm_opp_set_clkname(dev, "core");
+ ret = devm_pm_opp_set_clkname(dev, csi2phy->soc_cfg->opp_clk_name);
if (ret)
return dev_err_probe(dev, ret, "Failed to set opp clkname\n");
@@ -453,6 +453,7 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
}
static const struct of_device_id phy_qcom_mipi_csi2_of_match_table[] = {
+ { .compatible = "qcom,sa8775p-csi2-phy", .data = &mipi_csi2_dphy_sa8775p },
{ .compatible = "qcom,x1e80100-csi2-phy", .data = &mipi_csi2_dphy_4nm_x1e },
{ }
};
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h b/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h
index 7e55ae007370..5578741c0930 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h
@@ -68,6 +68,9 @@ struct mipi_csi2phy_soc_cfg {
const char ** const clk_names;
const unsigned int num_clk;
+ const char * const timer_clk_name;
+ const char * const opp_clk_name;
+
const struct mipi_csi2_genpd *genpds;
const unsigned int num_genpds;
};
@@ -93,5 +96,6 @@ struct mipi_csi2phy_device {
};
extern const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_4nm_x1e;
+extern const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_sa8775p;
#endif /* __PHY_QCOM_MIPI_CSI2_H__ */
--
2.34.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 4/7] phy: qcom-mipi-csi2: Add sa8775p D-PHY support
@ 2026-10-16 23:54 ` Anusha Arun Nandi
0 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:54 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
Add the SA8775P (Lemans / IQ-9075 EVK) CSIPHY to the generic MIPI CSI2
PHY driver, bound to the new "qcom,sa8775p-csi2-phy" compatible and
reusing the existing D-PHY 2-phase hw ops (phy_qcom_mipi_csi2_ops_
3ph_1_0). The lane_regs_sa8775p[] init sequence is the CSIPHY v1.3.0
2-phase 2.5Gbps 4-lane D-PHY register set ported verbatim from the
legacy in-tree camss-csiphy-3ph-1-0.c table; common_regs_offset is
0x800. The soc_cfg declares the core/timer/csiphy_rx clocks
(csiphy_rx is the shared CSID CSIPHY RX clock, matching the DT node
and binding's three-clock clock-names list) and the vdda-phy/vdda-pll
supplies.
The timer-clock lookup in phy_qcom_mipi_csi2_probe() and the OPP
clkname passed to devm_pm_opp_set_clkname() were both hardcoded
string literals sized to x1e80100 ("timer"/"core"). Add
timer_clk_name/opp_clk_name to struct mipi_csi2phy_soc_cfg so each
SoC can declare its own clock-name strings; x1e80100's soc_cfg now
declares "timer"/"core" explicitly, with no behaviour change.
SA8775P reuses the same "timer"/"core" names as x1e80100 for this
pair of clocks.
SA8775P's CSIPHY has a single power-domain, the Titan Top GDSC,
matching the legacy in-tree CAMSS driver's sa8775p_resources.pd_name
= "top" and the existing lemans.dtsi camss node. Like x1e80100's own
"top" domain, it is not OPP-scaled, only kept enabled.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
.../qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c | 112 ++++++++++++++++++
.../phy/qualcomm/phy-qcom-mipi-csi2-core.c | 5 +-
drivers/phy/qualcomm/phy-qcom-mipi-csi2.h | 4 +
3 files changed, 119 insertions(+), 2 deletions(-)
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
index 966d79c98f9b..85e89235f7c9 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
@@ -380,6 +380,118 @@ const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_4nm_x1e = {
.num_supplies = ARRAY_SIZE(x1e_supplies),
.clk_names = (const char **)x1e_clks,
.num_clk = ARRAY_SIZE(x1e_clks),
+ .timer_clk_name = "timer",
+ .opp_clk_name = "core",
.genpds = x1e_genpds,
.num_genpds = ARRAY_SIZE(x1e_genpds),
};
+
+/* 5nm 2PH v1.3.0 2p5Gbps 4 lane DPHY mode */
+static const struct mipi_csi2phy_lane_regs lane_regs_sa8775p[] = {
+ {.reg_addr = 0x0724, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0728, .reg_data = 0x04, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0700, .reg_data = 0x80, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x070c, .reg_data = 0xff, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0738, .reg_data = 0x1f, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x072c, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0734, .reg_data = 0x0f, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0710, .reg_data = 0x52, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x071c, .reg_data = 0x0a, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0714, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x073c, .reg_data = 0xb8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0704, .reg_data = 0x0c, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0720, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0708, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0024, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0000, .reg_data = 0x8d, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0038, .reg_data = 0xfe, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x002c, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0034, .reg_data = 0x0f, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0010, .reg_data = 0x52, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x001c, .reg_data = 0x0a, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0014, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x003c, .reg_data = 0xb8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0004, .reg_data = 0x0c, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0020, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0008, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0224, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0200, .reg_data = 0x8d, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0238, .reg_data = 0xfe, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x022c, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0234, .reg_data = 0x0f, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0210, .reg_data = 0x52, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x021c, .reg_data = 0x0a, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0214, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x023c, .reg_data = 0xb8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0204, .reg_data = 0x0c, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0220, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0208, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0424, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0400, .reg_data = 0x8d, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0438, .reg_data = 0xfe, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x042c, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0434, .reg_data = 0x0f, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0410, .reg_data = 0x52, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x041c, .reg_data = 0x0a, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0414, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x043c, .reg_data = 0xb8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0404, .reg_data = 0x0c, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0420, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0408, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0624, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0600, .reg_data = 0x8d, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0638, .reg_data = 0xfe, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x062c, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0634, .reg_data = 0x0f, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0610, .reg_data = 0x52, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x061c, .reg_data = 0x0a, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0614, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x063c, .reg_data = 0xb8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0604, .reg_data = 0x0c, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0620, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0608, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x005c, .reg_data = 0x00, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0060, .reg_data = 0xfd, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0064, .reg_data = 0x7f, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x025c, .reg_data = 0x00, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0260, .reg_data = 0xfd, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0264, .reg_data = 0x7f, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x045c, .reg_data = 0x00, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0460, .reg_data = 0xfd, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0464, .reg_data = 0x7f, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x065c, .reg_data = 0x00, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0660, .reg_data = 0xfd, .param_type = CSIPHY_SKEW_CAL},
+ {.reg_addr = 0x0664, .reg_data = 0x7f, .param_type = CSIPHY_SKEW_CAL},
+};
+
+static const char * const sa8775p_clks[] = {
+ "core",
+ "timer",
+ "csiphy_rx",
+};
+
+static const char * const sa8775p_supplies[] = {
+ "vdda-phy",
+ "vdda-pll",
+};
+
+static const struct mipi_csi2_genpd sa8775p_genpds[] = {
+ { .name = "top", .scaled = false },
+};
+
+const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_sa8775p = {
+ .ops = &phy_qcom_mipi_csi2_ops_3ph_1_0,
+ .reg_info = {
+ .init_seq = lane_regs_sa8775p,
+ .lane_array_size = ARRAY_SIZE(lane_regs_sa8775p),
+ .common_regs_offset = 0x800,
+ },
+ .supply_names = (const char **)sa8775p_supplies,
+ .num_supplies = ARRAY_SIZE(sa8775p_supplies),
+ .clk_names = (const char **)sa8775p_clks,
+ .num_clk = ARRAY_SIZE(sa8775p_clks),
+ .timer_clk_name = "timer",
+ .opp_clk_name = "core",
+ .genpds = sa8775p_genpds,
+ .num_genpds = ARRAY_SIZE(sa8775p_genpds),
+};
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
index 00285be9dd64..821c6a0a916c 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
@@ -402,7 +402,7 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
if (!csi2phy->clks[i].id)
return dev_err_probe(dev, -EINVAL, "Missing clock-names\n");
- if (!strcmp(csi2phy->clks[i].id, "timer")) {
+ if (!strcmp(csi2phy->clks[i].id, csi2phy->soc_cfg->timer_clk_name)) {
csi2phy->timer_clk = csi2phy->clks[i].clk;
break;
}
@@ -410,7 +410,7 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
if (!csi2phy->timer_clk)
return dev_err_probe(dev, -ENODEV, "no timer clock\n");
- ret = devm_pm_opp_set_clkname(dev, "core");
+ ret = devm_pm_opp_set_clkname(dev, csi2phy->soc_cfg->opp_clk_name);
if (ret)
return dev_err_probe(dev, ret, "Failed to set opp clkname\n");
@@ -453,6 +453,7 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
}
static const struct of_device_id phy_qcom_mipi_csi2_of_match_table[] = {
+ { .compatible = "qcom,sa8775p-csi2-phy", .data = &mipi_csi2_dphy_sa8775p },
{ .compatible = "qcom,x1e80100-csi2-phy", .data = &mipi_csi2_dphy_4nm_x1e },
{ }
};
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h b/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h
index 7e55ae007370..5578741c0930 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h
@@ -68,6 +68,9 @@ struct mipi_csi2phy_soc_cfg {
const char ** const clk_names;
const unsigned int num_clk;
+ const char * const timer_clk_name;
+ const char * const opp_clk_name;
+
const struct mipi_csi2_genpd *genpds;
const unsigned int num_genpds;
};
@@ -93,5 +96,6 @@ struct mipi_csi2phy_device {
};
extern const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_4nm_x1e;
+extern const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_sa8775p;
#endif /* __PHY_QCOM_MIPI_CSI2_H__ */
--
2.34.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 5/7] phy: qcom-mipi-csi2: Add qcs8300 CSI2 PHY support
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-16 23:55 ` Anusha Arun Nandi
-1 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:55 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
Bind the new "qcom,qcs8300-csi2-phy" compatible to the existing
sa8775p SoC configuration (mipi_csi2_dphy_sa8775p). QCS8300
and SA8775P share the same CSIPHY: in the legacy in-tree
CAMSS driver (camss-csiphy-3ph-1-0.c) the CAMSS_8300 and CAMSS_8775P
cases fall through to the same D-PHY lane_regs_sa8775p[] init sequence
and common_regs_offset (0x800), and camss.c gives both SoCs the same
pd_name = "top" Titan Top GDSC. No new register data or power-domain
wiring is therefore needed; only the compatible string is added.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
index 821c6a0a916c..cef4a90ca539 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
@@ -453,6 +453,7 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
}
static const struct of_device_id phy_qcom_mipi_csi2_of_match_table[] = {
+ { .compatible = "qcom,qcs8300-csi2-phy", .data = &mipi_csi2_dphy_sa8775p },
{ .compatible = "qcom,sa8775p-csi2-phy", .data = &mipi_csi2_dphy_sa8775p },
{ .compatible = "qcom,x1e80100-csi2-phy", .data = &mipi_csi2_dphy_4nm_x1e },
{ }
--
2.34.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 5/7] phy: qcom-mipi-csi2: Add qcs8300 CSI2 PHY support
@ 2026-10-16 23:55 ` Anusha Arun Nandi
0 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:55 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
Bind the new "qcom,qcs8300-csi2-phy" compatible to the existing
sa8775p SoC configuration (mipi_csi2_dphy_sa8775p). QCS8300
and SA8775P share the same CSIPHY: in the legacy in-tree
CAMSS driver (camss-csiphy-3ph-1-0.c) the CAMSS_8300 and CAMSS_8775P
cases fall through to the same D-PHY lane_regs_sa8775p[] init sequence
and common_regs_offset (0x800), and camss.c gives both SoCs the same
pd_name = "top" Titan Top GDSC. No new register data or power-domain
wiring is therefore needed; only the compatible string is added.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
index 821c6a0a916c..cef4a90ca539 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
@@ -453,6 +453,7 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
}
static const struct of_device_id phy_qcom_mipi_csi2_of_match_table[] = {
+ { .compatible = "qcom,qcs8300-csi2-phy", .data = &mipi_csi2_dphy_sa8775p },
{ .compatible = "qcom,sa8775p-csi2-phy", .data = &mipi_csi2_dphy_sa8775p },
{ .compatible = "qcom,x1e80100-csi2-phy", .data = &mipi_csi2_dphy_4nm_x1e },
{ }
--
2.34.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 6/7] dt-bindings: phy: qcom: Add qcom,sc7280-csi2-phy schema
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-16 23:55 ` Anusha Arun Nandi
-1 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:55 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
Add a device-tree binding for the Qualcomm SC7280
MIPI CSI2 D-PHY, modelled as a standalone generic-PHY
provider like the existing qcom,x1e80100-csi2-phy and
qcom,sa8775p-csi2-phy schemas.
Follows the same ports/port@0 data-lanes shape and mandatory
operating-points-v2/power-domains as qcom,sa8775p-csi2-phy. SC7280's
CSIPHY has a single power-domain, the Titan Top GDSC, matching
camss.c's sc7280_resources.pd_name = "top" and kodiak.dtsi's existing
camss node. Two clocks only (core, timer) -- SC7280 has no shared
CSID-RX clock in the legacy driver's clock table. The core/timer
naming matches x1e80100's and sa8775p's clock-names convention for
this pair of clocks.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
.../bindings/phy/qcom,sc7280-csi2-phy.yaml | 169 ++++++++++++++++++
1 file changed, 169 insertions(+)
create mode 100644 Documentation/devicetree/bindings/phy/qcom,sc7280-csi2-phy.yaml
diff --git a/Documentation/devicetree/bindings/phy/qcom,sc7280-csi2-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,sc7280-csi2-phy.yaml
new file mode 100644
index 000000000000..3b73a9933f03
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/qcom,sc7280-csi2-phy.yaml
@@ -0,0 +1,169 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+# Copyright (c) 2026 Qualcomm Innovation Center, Inc. All rights reserved.
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/phy/qcom,sc7280-csi2-phy.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm SC7280 CSI2 PHY
+
+maintainers:
+ - Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
+
+description:
+ Qualcomm MIPI CSI2 D-PHY. Connects MIPI CSI2 sensors to Qualcomm's Camera
+ CSI Decoder on the SC7280.
+
+properties:
+ compatible:
+ const: qcom,sc7280-csi2-phy
+
+ reg:
+ maxItems: 1
+
+ clocks:
+ maxItems: 2
+
+ clock-names:
+ items:
+ - const: core
+ - const: timer
+
+ interrupts:
+ maxItems: 1
+
+ operating-points-v2: true
+
+ opp-table:
+ type: object
+
+ power-domains:
+ items:
+ - description: Titan Top GDSC - Titan ISP Block, Global Distributed Switch Controller.
+
+ power-domain-names:
+ items:
+ - const: top
+
+ vdda-phy-supply:
+ description: Phandle to PHY supply.
+
+ vdda-pll-supply:
+ description: Phandle to PLL supply.
+
+ ports:
+ $ref: /schemas/graph.yaml#/properties/ports
+
+ properties:
+ port@0:
+ $ref: /schemas/graph.yaml#/$defs/port-base
+ description:
+ Sensor input. A single sensor is described by a single endpoint
+ with one to four data lanes, numbered 1-4. The clock lane is
+ position 0.
+
+ unevaluatedProperties: false
+
+ patternProperties:
+ "^endpoint(@0)?$":
+ $ref: /schemas/media/video-interfaces.yaml#
+ unevaluatedProperties: false
+ properties:
+ bus-type:
+ enum:
+ - 1 # MEDIA_BUS_TYPE_CSI2_CPHY
+ - 4 # MEDIA_BUS_TYPE_CSI2_DPHY
+ default: 4
+
+ data-lanes:
+ minItems: 1
+ maxItems: 4
+ items:
+ minimum: 1
+ maximum: 4
+ description:
+ Data lane positions following this endpoint's clock
+ lane. Positions are a per-port logical numbering, not
+ package pad or ball positions.
+
+ required:
+ - data-lanes
+ - remote-endpoint
+
+ port@1:
+ $ref: /schemas/graph.yaml#/properties/port
+ description: Output to the CAMSS CSID controller.
+
+ required:
+ - port@0
+ - port@1
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - clock-names
+ - interrupts
+ - operating-points-v2
+ - power-domains
+ - power-domain-names
+ - vdda-phy-supply
+ - vdda-pll-supply
+ - ports
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/qcom,camcc-sc7280.h>
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/media/video-interfaces.h>
+
+ csiphy0: csiphy@ac9c000 {
+ compatible = "qcom,sc7280-csi2-phy";
+ reg = <0x0ac9c000 0x2000>;
+
+ clocks = <&camcc CAM_CC_CSIPHY0_CLK>,
+ <&camcc CAM_CC_CSI0PHYTIMER_CLK>;
+ clock-names = "core",
+ "timer";
+
+ interrupts = <GIC_SPI 477 IRQ_TYPE_EDGE_RISING>;
+
+ operating-points-v2 = <&csiphy0_opp_table>;
+
+ power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
+ power-domain-names = "top";
+
+ vdda-phy-supply = <&vreg_l4a>;
+ vdda-pll-supply = <&vreg_l1c>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+ csiphy0_in: endpoint {
+ bus-type = <MEDIA_BUS_TYPE_CSI2_DPHY>;
+ data-lanes = <1 2 3 4>;
+ remote-endpoint = <&sensor_out>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+ csiphy0_out: endpoint {
+ remote-endpoint = <&csid_in>;
+ };
+ };
+ };
+
+ csiphy0_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ opp-300000000 {
+ opp-hz = /bits/ 64 <300000000>;
+ };
+ };
+ };
--
2.34.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 6/7] dt-bindings: phy: qcom: Add qcom,sc7280-csi2-phy schema
@ 2026-10-16 23:55 ` Anusha Arun Nandi
0 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:55 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
Add a device-tree binding for the Qualcomm SC7280
MIPI CSI2 D-PHY, modelled as a standalone generic-PHY
provider like the existing qcom,x1e80100-csi2-phy and
qcom,sa8775p-csi2-phy schemas.
Follows the same ports/port@0 data-lanes shape and mandatory
operating-points-v2/power-domains as qcom,sa8775p-csi2-phy. SC7280's
CSIPHY has a single power-domain, the Titan Top GDSC, matching
camss.c's sc7280_resources.pd_name = "top" and kodiak.dtsi's existing
camss node. Two clocks only (core, timer) -- SC7280 has no shared
CSID-RX clock in the legacy driver's clock table. The core/timer
naming matches x1e80100's and sa8775p's clock-names convention for
this pair of clocks.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
.../bindings/phy/qcom,sc7280-csi2-phy.yaml | 169 ++++++++++++++++++
1 file changed, 169 insertions(+)
create mode 100644 Documentation/devicetree/bindings/phy/qcom,sc7280-csi2-phy.yaml
diff --git a/Documentation/devicetree/bindings/phy/qcom,sc7280-csi2-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,sc7280-csi2-phy.yaml
new file mode 100644
index 000000000000..3b73a9933f03
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/qcom,sc7280-csi2-phy.yaml
@@ -0,0 +1,169 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+# Copyright (c) 2026 Qualcomm Innovation Center, Inc. All rights reserved.
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/phy/qcom,sc7280-csi2-phy.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm SC7280 CSI2 PHY
+
+maintainers:
+ - Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
+
+description:
+ Qualcomm MIPI CSI2 D-PHY. Connects MIPI CSI2 sensors to Qualcomm's Camera
+ CSI Decoder on the SC7280.
+
+properties:
+ compatible:
+ const: qcom,sc7280-csi2-phy
+
+ reg:
+ maxItems: 1
+
+ clocks:
+ maxItems: 2
+
+ clock-names:
+ items:
+ - const: core
+ - const: timer
+
+ interrupts:
+ maxItems: 1
+
+ operating-points-v2: true
+
+ opp-table:
+ type: object
+
+ power-domains:
+ items:
+ - description: Titan Top GDSC - Titan ISP Block, Global Distributed Switch Controller.
+
+ power-domain-names:
+ items:
+ - const: top
+
+ vdda-phy-supply:
+ description: Phandle to PHY supply.
+
+ vdda-pll-supply:
+ description: Phandle to PLL supply.
+
+ ports:
+ $ref: /schemas/graph.yaml#/properties/ports
+
+ properties:
+ port@0:
+ $ref: /schemas/graph.yaml#/$defs/port-base
+ description:
+ Sensor input. A single sensor is described by a single endpoint
+ with one to four data lanes, numbered 1-4. The clock lane is
+ position 0.
+
+ unevaluatedProperties: false
+
+ patternProperties:
+ "^endpoint(@0)?$":
+ $ref: /schemas/media/video-interfaces.yaml#
+ unevaluatedProperties: false
+ properties:
+ bus-type:
+ enum:
+ - 1 # MEDIA_BUS_TYPE_CSI2_CPHY
+ - 4 # MEDIA_BUS_TYPE_CSI2_DPHY
+ default: 4
+
+ data-lanes:
+ minItems: 1
+ maxItems: 4
+ items:
+ minimum: 1
+ maximum: 4
+ description:
+ Data lane positions following this endpoint's clock
+ lane. Positions are a per-port logical numbering, not
+ package pad or ball positions.
+
+ required:
+ - data-lanes
+ - remote-endpoint
+
+ port@1:
+ $ref: /schemas/graph.yaml#/properties/port
+ description: Output to the CAMSS CSID controller.
+
+ required:
+ - port@0
+ - port@1
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - clock-names
+ - interrupts
+ - operating-points-v2
+ - power-domains
+ - power-domain-names
+ - vdda-phy-supply
+ - vdda-pll-supply
+ - ports
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/qcom,camcc-sc7280.h>
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/media/video-interfaces.h>
+
+ csiphy0: csiphy@ac9c000 {
+ compatible = "qcom,sc7280-csi2-phy";
+ reg = <0x0ac9c000 0x2000>;
+
+ clocks = <&camcc CAM_CC_CSIPHY0_CLK>,
+ <&camcc CAM_CC_CSI0PHYTIMER_CLK>;
+ clock-names = "core",
+ "timer";
+
+ interrupts = <GIC_SPI 477 IRQ_TYPE_EDGE_RISING>;
+
+ operating-points-v2 = <&csiphy0_opp_table>;
+
+ power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
+ power-domain-names = "top";
+
+ vdda-phy-supply = <&vreg_l4a>;
+ vdda-pll-supply = <&vreg_l1c>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+ csiphy0_in: endpoint {
+ bus-type = <MEDIA_BUS_TYPE_CSI2_DPHY>;
+ data-lanes = <1 2 3 4>;
+ remote-endpoint = <&sensor_out>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+ csiphy0_out: endpoint {
+ remote-endpoint = <&csid_in>;
+ };
+ };
+ };
+
+ csiphy0_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ opp-300000000 {
+ opp-hz = /bits/ 64 <300000000>;
+ };
+ };
+ };
--
2.34.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 7/7] phy: qcom-mipi-csi2: Add sc7280 D-PHY provider
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-16 23:55 ` Anusha Arun Nandi
-1 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:55 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
Add the SC7280 (also used on QCS6490) CSIPHY to the generic MIPI CSI2
PHY driver, bound to the new "qcom,sc7280-csi2-phy" compatible and
reusing the existing D-PHY 2-phase hw ops (phy_qcom_mipi_csi2_ops_
3ph_1_0). The lane_regs_sc7280[] init sequence is the CSIPHY 5nm
2-phase 2.5Gbps 4-lane D-PHY register set ported verbatim from the
legacy in-tree camss-csiphy-3ph-1-0.c table; common_regs_offset is
0x800. A new CSIPHY_DNP_PARAMS marker skips register entries the
legacy table left as do-not-program placeholders. The soc_cfg
declares the core/timer clocks (matching x1e80100's and sa8775p's
clock-names convention for this pair) and the vdda-phy/vdda-pll
supplies.
Like SA8775P, SC7280's CSIPHY has a single power-domain, the Titan Top
GDSC, matching camss.c's sc7280_resources.pd_name = "top" and
kodiak.dtsi's existing camss node; it is not OPP-scaled, only kept
enabled.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
.../qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c | 139 ++++++++++++++++++
.../phy/qualcomm/phy-qcom-mipi-csi2-core.c | 1 +
drivers/phy/qualcomm/phy-qcom-mipi-csi2.h | 1 +
3 files changed, 141 insertions(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
index 85e89235f7c9..f3d67d75105e 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
@@ -43,6 +43,7 @@
#define CSIPHY_DEFAULT_PARAMS 0
#define CSIPHY_SETTLE_CNT_LOWER_BYTE 2
+#define CSIPHY_DNP_PARAMS 4
#define CSIPHY_SKEW_CAL 7
/* 4nm 2PH v 2.1.2 2p5Gbps 4 lane DPHY mode */
@@ -258,6 +259,9 @@ phy_qcom_mipi_csi2_gen2_config_lanes(struct mipi_csi2phy_device *csi2phy,
case CSIPHY_SKEW_CAL:
/* TODO: support application of skew from dt flag */
continue;
+ case CSIPHY_DNP_PARAMS:
+ /* Do-not-program marker: skip this register. */
+ continue;
default:
val = r->reg_data;
break;
@@ -495,3 +499,138 @@ const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_sa8775p = {
.genpds = sa8775p_genpds,
.num_genpds = ARRAY_SIZE(sa8775p_genpds),
};
+
+/* sc7280 5nm 2PH 2p5Gbps 4 lane DPHY mode */
+static const struct mipi_csi2phy_lane_regs lane_regs_sc7280[] = {
+ {.reg_addr = 0x0030, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0900, .reg_data = 0x05, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0908, .reg_data = 0x10, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0904, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0904, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0004, .reg_data = 0x0C, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x002C, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0034, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0010, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x001C, .reg_data = 0x08, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x003C, .reg_data = 0xB8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0008, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0000, .reg_data = 0x8D, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x000c, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0038, .reg_data = 0xFE, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0014, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0028, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0024, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0800, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0884, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0730, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C80, .reg_data = 0x05, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C88, .reg_data = 0x10, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C84, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C84, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0704, .reg_data = 0x0C, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x072C, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0734, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0710, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x071C, .reg_data = 0x08, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x073C, .reg_data = 0xB8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0708, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0700, .reg_data = 0x80, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x070c, .reg_data = 0xA5, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0738, .reg_data = 0x1F, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0714, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0728, .reg_data = 0x04, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0724, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0800, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0884, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0230, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0A00, .reg_data = 0x05, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0A08, .reg_data = 0x10, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0A04, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0A04, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0204, .reg_data = 0x0C, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x022C, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0234, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0210, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x021C, .reg_data = 0x08, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x023C, .reg_data = 0xB8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0208, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0200, .reg_data = 0x8D, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x020c, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0238, .reg_data = 0xFE, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0214, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0228, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0224, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0800, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0884, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0430, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0B00, .reg_data = 0x05, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0B08, .reg_data = 0x10, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0B04, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0B04, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0404, .reg_data = 0x0C, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x042C, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0434, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0410, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x041C, .reg_data = 0x08, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x043C, .reg_data = 0xB8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0408, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0400, .reg_data = 0x8D, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x040c, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0438, .reg_data = 0xFE, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0414, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0428, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0424, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0800, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0884, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0630, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C00, .reg_data = 0x05, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C08, .reg_data = 0x10, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C04, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C04, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0604, .reg_data = 0x0C, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x062C, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0634, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0610, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x061C, .reg_data = 0x08, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x063C, .reg_data = 0xB8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0608, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0600, .reg_data = 0x8D, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x060c, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0638, .reg_data = 0xFE, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0614, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0628, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0624, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0800, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0884, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+};
+
+static const char * const sc7280_clks[] = {
+ "core",
+ "timer",
+};
+
+static const char * const sc7280_supplies[] = {
+ "vdda-phy",
+ "vdda-pll",
+};
+
+static const struct mipi_csi2_genpd sc7280_genpds[] = {
+ { .name = "top", .scaled = false },
+};
+
+const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_sc7280 = {
+ .ops = &phy_qcom_mipi_csi2_ops_3ph_1_0,
+ .reg_info = {
+ .init_seq = lane_regs_sc7280,
+ .lane_array_size = ARRAY_SIZE(lane_regs_sc7280),
+ .common_regs_offset = 0x800,
+ },
+ .supply_names = (const char **)sc7280_supplies,
+ .num_supplies = ARRAY_SIZE(sc7280_supplies),
+ .clk_names = (const char **)sc7280_clks,
+ .num_clk = ARRAY_SIZE(sc7280_clks),
+ .timer_clk_name = "timer",
+ .opp_clk_name = "core",
+ .genpds = sc7280_genpds,
+ .num_genpds = ARRAY_SIZE(sc7280_genpds),
+};
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
index cef4a90ca539..fca67d3625b8 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
@@ -455,6 +455,7 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
static const struct of_device_id phy_qcom_mipi_csi2_of_match_table[] = {
{ .compatible = "qcom,qcs8300-csi2-phy", .data = &mipi_csi2_dphy_sa8775p },
{ .compatible = "qcom,sa8775p-csi2-phy", .data = &mipi_csi2_dphy_sa8775p },
+ { .compatible = "qcom,sc7280-csi2-phy", .data = &mipi_csi2_dphy_sc7280 },
{ .compatible = "qcom,x1e80100-csi2-phy", .data = &mipi_csi2_dphy_4nm_x1e },
{ }
};
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h b/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h
index 5578741c0930..e2a346bcec89 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h
@@ -97,5 +97,6 @@ struct mipi_csi2phy_device {
extern const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_4nm_x1e;
extern const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_sa8775p;
+extern const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_sc7280;
#endif /* __PHY_QCOM_MIPI_CSI2_H__ */
--
2.34.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH 7/7] phy: qcom-mipi-csi2: Add sc7280 D-PHY provider
@ 2026-10-16 23:55 ` Anusha Arun Nandi
0 siblings, 0 replies; 38+ messages in thread
From: Anusha Arun Nandi @ 2026-10-16 23:55 UTC (permalink / raw)
To: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
Add the SC7280 (also used on QCS6490) CSIPHY to the generic MIPI CSI2
PHY driver, bound to the new "qcom,sc7280-csi2-phy" compatible and
reusing the existing D-PHY 2-phase hw ops (phy_qcom_mipi_csi2_ops_
3ph_1_0). The lane_regs_sc7280[] init sequence is the CSIPHY 5nm
2-phase 2.5Gbps 4-lane D-PHY register set ported verbatim from the
legacy in-tree camss-csiphy-3ph-1-0.c table; common_regs_offset is
0x800. A new CSIPHY_DNP_PARAMS marker skips register entries the
legacy table left as do-not-program placeholders. The soc_cfg
declares the core/timer clocks (matching x1e80100's and sa8775p's
clock-names convention for this pair) and the vdda-phy/vdda-pll
supplies.
Like SA8775P, SC7280's CSIPHY has a single power-domain, the Titan Top
GDSC, matching camss.c's sc7280_resources.pd_name = "top" and
kodiak.dtsi's existing camss node; it is not OPP-scaled, only kept
enabled.
Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
---
.../qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c | 139 ++++++++++++++++++
.../phy/qualcomm/phy-qcom-mipi-csi2-core.c | 1 +
drivers/phy/qualcomm/phy-qcom-mipi-csi2.h | 1 +
3 files changed, 141 insertions(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
index 85e89235f7c9..f3d67d75105e 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
@@ -43,6 +43,7 @@
#define CSIPHY_DEFAULT_PARAMS 0
#define CSIPHY_SETTLE_CNT_LOWER_BYTE 2
+#define CSIPHY_DNP_PARAMS 4
#define CSIPHY_SKEW_CAL 7
/* 4nm 2PH v 2.1.2 2p5Gbps 4 lane DPHY mode */
@@ -258,6 +259,9 @@ phy_qcom_mipi_csi2_gen2_config_lanes(struct mipi_csi2phy_device *csi2phy,
case CSIPHY_SKEW_CAL:
/* TODO: support application of skew from dt flag */
continue;
+ case CSIPHY_DNP_PARAMS:
+ /* Do-not-program marker: skip this register. */
+ continue;
default:
val = r->reg_data;
break;
@@ -495,3 +499,138 @@ const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_sa8775p = {
.genpds = sa8775p_genpds,
.num_genpds = ARRAY_SIZE(sa8775p_genpds),
};
+
+/* sc7280 5nm 2PH 2p5Gbps 4 lane DPHY mode */
+static const struct mipi_csi2phy_lane_regs lane_regs_sc7280[] = {
+ {.reg_addr = 0x0030, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0900, .reg_data = 0x05, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0908, .reg_data = 0x10, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0904, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0904, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0004, .reg_data = 0x0C, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x002C, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0034, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0010, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x001C, .reg_data = 0x08, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x003C, .reg_data = 0xB8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0008, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0000, .reg_data = 0x8D, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x000c, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0038, .reg_data = 0xFE, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0014, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0028, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0024, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0800, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0884, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0730, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C80, .reg_data = 0x05, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C88, .reg_data = 0x10, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C84, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C84, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0704, .reg_data = 0x0C, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x072C, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0734, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0710, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x071C, .reg_data = 0x08, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x073C, .reg_data = 0xB8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0708, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0700, .reg_data = 0x80, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x070c, .reg_data = 0xA5, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0738, .reg_data = 0x1F, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0714, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0728, .reg_data = 0x04, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0724, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0800, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0884, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0230, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0A00, .reg_data = 0x05, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0A08, .reg_data = 0x10, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0A04, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0A04, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0204, .reg_data = 0x0C, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x022C, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0234, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0210, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x021C, .reg_data = 0x08, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x023C, .reg_data = 0xB8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0208, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0200, .reg_data = 0x8D, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x020c, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0238, .reg_data = 0xFE, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0214, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0228, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0224, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0800, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0884, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0430, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0B00, .reg_data = 0x05, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0B08, .reg_data = 0x10, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0B04, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0B04, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0404, .reg_data = 0x0C, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x042C, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0434, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0410, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x041C, .reg_data = 0x08, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x043C, .reg_data = 0xB8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0408, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0400, .reg_data = 0x8D, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x040c, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0438, .reg_data = 0xFE, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0414, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0428, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0424, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0800, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0884, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0630, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C00, .reg_data = 0x05, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C08, .reg_data = 0x10, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C04, .reg_data = 0x00, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0C04, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0604, .reg_data = 0x0C, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x062C, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0634, .reg_data = 0x07, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0610, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x061C, .reg_data = 0x08, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x063C, .reg_data = 0xB8, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0608, .reg_data = 0x10, .param_type = CSIPHY_SETTLE_CNT_LOWER_BYTE},
+ {.reg_addr = 0x0600, .reg_data = 0x8D, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x060c, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0638, .reg_data = 0xFE, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0614, .reg_data = 0x60, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0628, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0624, .reg_data = 0x00, .param_type = CSIPHY_DNP_PARAMS},
+ {.reg_addr = 0x0800, .reg_data = 0x02, .param_type = CSIPHY_DEFAULT_PARAMS},
+ {.reg_addr = 0x0884, .reg_data = 0x01, .param_type = CSIPHY_DEFAULT_PARAMS},
+};
+
+static const char * const sc7280_clks[] = {
+ "core",
+ "timer",
+};
+
+static const char * const sc7280_supplies[] = {
+ "vdda-phy",
+ "vdda-pll",
+};
+
+static const struct mipi_csi2_genpd sc7280_genpds[] = {
+ { .name = "top", .scaled = false },
+};
+
+const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_sc7280 = {
+ .ops = &phy_qcom_mipi_csi2_ops_3ph_1_0,
+ .reg_info = {
+ .init_seq = lane_regs_sc7280,
+ .lane_array_size = ARRAY_SIZE(lane_regs_sc7280),
+ .common_regs_offset = 0x800,
+ },
+ .supply_names = (const char **)sc7280_supplies,
+ .num_supplies = ARRAY_SIZE(sc7280_supplies),
+ .clk_names = (const char **)sc7280_clks,
+ .num_clk = ARRAY_SIZE(sc7280_clks),
+ .timer_clk_name = "timer",
+ .opp_clk_name = "core",
+ .genpds = sc7280_genpds,
+ .num_genpds = ARRAY_SIZE(sc7280_genpds),
+};
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
index cef4a90ca539..fca67d3625b8 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
@@ -455,6 +455,7 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
static const struct of_device_id phy_qcom_mipi_csi2_of_match_table[] = {
{ .compatible = "qcom,qcs8300-csi2-phy", .data = &mipi_csi2_dphy_sa8775p },
{ .compatible = "qcom,sa8775p-csi2-phy", .data = &mipi_csi2_dphy_sa8775p },
+ { .compatible = "qcom,sc7280-csi2-phy", .data = &mipi_csi2_dphy_sc7280 },
{ .compatible = "qcom,x1e80100-csi2-phy", .data = &mipi_csi2_dphy_4nm_x1e },
{ }
};
diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h b/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h
index 5578741c0930..e2a346bcec89 100644
--- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h
+++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2.h
@@ -97,5 +97,6 @@ struct mipi_csi2phy_device {
extern const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_4nm_x1e;
extern const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_sa8775p;
+extern const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_sc7280;
#endif /* __PHY_QCOM_MIPI_CSI2_H__ */
--
2.34.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 38+ messages in thread
* Re: [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-17 17:48 ` Nihal Kumar Gupta
-1 siblings, 0 replies; 38+ messages in thread
From: Nihal Kumar Gupta @ 2026-10-17 17:48 UTC (permalink / raw)
To: Anusha Arun Nandi, bod, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On 17-10-2026 05:24, Anusha Arun Nandi wrote:
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/media/video-interfaces.h>
> +
> + csiphy0: csiphy@ac9c000 {
> + compatible = "qcom,sa8775p-csi2-phy";
> + reg = <0x0ac9c000 0x2000>;
> +
DTS uses 2-cell reg but binding example uses 1-cell. Please align:
reg = <0x0 0x0ac9c000 0x0 0x2000>;
https://lore.kernel.org/all/20261017001116.2318647-2-anusha.nandi@oss.qualcomm.com/
--
Regards,
Nihal Kumar Gupta
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
@ 2026-10-17 17:48 ` Nihal Kumar Gupta
0 siblings, 0 replies; 38+ messages in thread
From: Nihal Kumar Gupta @ 2026-10-17 17:48 UTC (permalink / raw)
To: Anusha Arun Nandi, bod, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On 17-10-2026 05:24, Anusha Arun Nandi wrote:
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/media/video-interfaces.h>
> +
> + csiphy0: csiphy@ac9c000 {
> + compatible = "qcom,sa8775p-csi2-phy";
> + reg = <0x0ac9c000 0x2000>;
> +
DTS uses 2-cell reg but binding example uses 1-cell. Please align:
reg = <0x0 0x0ac9c000 0x0 0x2000>;
https://lore.kernel.org/all/20261017001116.2318647-2-anusha.nandi@oss.qualcomm.com/
--
Regards,
Nihal Kumar Gupta
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 0/7] phy: qcom-mipi-csi2: Add D-PHY support for sa8775p, qcs8300 and sc7280
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-17 17:50 ` Nihal Kumar Gupta
-1 siblings, 0 replies; 38+ messages in thread
From: Nihal Kumar Gupta @ 2026-10-17 17:50 UTC (permalink / raw)
To: Anusha Arun Nandi, bod, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On 17-10-2026 05:24, Anusha Arun Nandi wrote:
> Depends-on: https://lore.kernel.org/all/20260917-x1e-csi2-phy-v18-0-6515b5255fa9@linaro.org/
This series already merged to linux-next.
Please rebase your series.
--
Regards,
Nihal Kumar Gupta
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 0/7] phy: qcom-mipi-csi2: Add D-PHY support for sa8775p, qcs8300 and sc7280
@ 2026-10-17 17:50 ` Nihal Kumar Gupta
0 siblings, 0 replies; 38+ messages in thread
From: Nihal Kumar Gupta @ 2026-10-17 17:50 UTC (permalink / raw)
To: Anusha Arun Nandi, bod, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On 17-10-2026 05:24, Anusha Arun Nandi wrote:
> Depends-on: https://lore.kernel.org/all/20260917-x1e-csi2-phy-v18-0-6515b5255fa9@linaro.org/
This series already merged to linux-next.
Please rebase your series.
--
Regards,
Nihal Kumar Gupta
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
2026-10-17 17:48 ` Nihal Kumar Gupta
@ 2026-10-19 7:13 ` Krzysztof Kozlowski
-1 siblings, 0 replies; 38+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-19 7:13 UTC (permalink / raw)
To: Nihal Kumar Gupta
Cc: Anusha Arun Nandi, bod, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani, gjorgji.rosikopulos, hariram.purushothaman,
akapatra, jigarkumar.zala, loic.poulain, vladimir.zapolskiy,
linux-arm-msm, linux-phy, linux-media, devicetree, linux-kernel
On Sat, Oct 17, 2026 at 11:18:48PM +0530, Nihal Kumar Gupta wrote:
>
>
> On 17-10-2026 05:24, Anusha Arun Nandi wrote:
> > + #include <dt-bindings/interrupt-controller/arm-gic.h>
> > + #include <dt-bindings/media/video-interfaces.h>
> > +
> > + csiphy0: csiphy@ac9c000 {
> > + compatible = "qcom,sa8775p-csi2-phy";
> > + reg = <0x0ac9c000 0x2000>;
> > +
> DTS uses 2-cell reg but binding example uses 1-cell. Please align:
> reg = <0x0 0x0ac9c000 0x0 0x2000>;
I don't understand what is supposed to be aligned here. The code is
correct.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
@ 2026-10-19 7:13 ` Krzysztof Kozlowski
0 siblings, 0 replies; 38+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-19 7:13 UTC (permalink / raw)
To: Nihal Kumar Gupta
Cc: Anusha Arun Nandi, bod, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani, gjorgji.rosikopulos, hariram.purushothaman,
akapatra, jigarkumar.zala, loic.poulain, vladimir.zapolskiy,
linux-arm-msm, linux-phy, linux-media, devicetree, linux-kernel
On Sat, Oct 17, 2026 at 11:18:48PM +0530, Nihal Kumar Gupta wrote:
>
>
> On 17-10-2026 05:24, Anusha Arun Nandi wrote:
> > + #include <dt-bindings/interrupt-controller/arm-gic.h>
> > + #include <dt-bindings/media/video-interfaces.h>
> > +
> > + csiphy0: csiphy@ac9c000 {
> > + compatible = "qcom,sa8775p-csi2-phy";
> > + reg = <0x0ac9c000 0x2000>;
> > +
> DTS uses 2-cell reg but binding example uses 1-cell. Please align:
> reg = <0x0 0x0ac9c000 0x0 0x2000>;
I don't understand what is supposed to be aligned here. The code is
correct.
Best regards,
Krzysztof
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-19 7:16 ` Krzysztof Kozlowski
-1 siblings, 0 replies; 38+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-19 7:16 UTC (permalink / raw)
To: Anusha Arun Nandi
Cc: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani,
gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On Fri, Oct 16, 2026 at 04:54:57PM -0700, Anusha Arun Nandi wrote:
> Add a device-tree binding for the Qualcomm SA8775P MIPI CSI2
> PHY, modelled as a standalone generic-PHY provider like the existing
> qcom,x1e80100-csi2-phy, so CAMSS can consume the CSIPHY through the
> common PHY framework instead of driving it in-line.
A nit, subject: drop second/last, redundant "schema". The
"dt-bindings" prefix is already stating that these are schemas.
See also:
https://elixir.bootlin.com/linux/v7.1-rc7/source/Documentation/devicetree/bindings/submitting-patches.rst#L23
>
> Follows the qcom,x1e80100-csi2-phy schema's shape: a ports/port@0
> sensor-input endpoint carrying data-lanes/bus-type (D-PHY only for
> now, C-PHY bus-type value is accepted by the schema but wired up by a
> companion series), a port@1 CSID output, and a mandatory
> operating-points-v2 table plus power-domains/power-domain-names.
>
> Unlike x1e80100, SA8775P's CSIPHY has a single power-domain: the
> Titan Top GDSC, matching the legacy in-tree CAMSS driver's
> sa8775p_resources.pd_name = "top" (drivers/media/platform/qcom/camss/
> camss.c) and the existing lemans.dtsi camss node's power-domains =
> <&camcc CAM_CC_TITAN_TOP_GDSC>. It is not OPP-scaled, only kept
> enabled, the same way x1e80100's own "top" domain is.
>
> The PHY takes three clocks (core, timer and the shared CSID CSIPHY RX
> clock) and the vdda-phy/vdda-pll supplies. The core/timer naming
> matches x1e80100's clock-names convention for the same pair of
> clocks.
>
> Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
> ---
> .../bindings/phy/qcom,sa8775p-csi2-phy.yaml | 172 ++++++++++++++++++
> 1 file changed, 172 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
>
> diff --git a/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
> new file mode 100644
> index 000000000000..b66ec2f14189
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
> @@ -0,0 +1,172 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +# Copyright (c) 2026 Qualcomm Innovation Center, Inc. All rights reserved.
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/phy/qcom,sa8775p-csi2-phy.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Qualcomm SA8775P CSI2 PHY
> +
> +maintainers:
> + - Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
> +
> +description:
> + Qualcomm MIPI CSI2 D-PHY. Connects MIPI CSI2 sensors to Qualcomm's Camera
> + CSI Decoder on the SA8775P SoC.
> +
> +properties:
> + compatible:
> + const: qcom,sa8775p-csi2-phy
> +
> + reg:
> + maxItems: 1
> +
> + clocks:
> + maxItems: 3
> +
> + clock-names:
> + items:
> + - const: core
> + - const: timer
> + - const: csiphy_rx
You just named it basde on clock name. Instead, name it based on the
input name. csiphy is also completely redundant.
> +
> + interrupts:
> + maxItems: 1
> +
> + operating-points-v2: true
> +
> + opp-table:
> + type: object
> +
> + power-domains:
> + items:
> + - description: Titan Top GDSC - Titan ISP Block, Global Distributed Switch Controller.
> +
> + power-domain-names:
> + items:
> + - const: top
> +
> + vdda-phy-supply:
> + description: Phandle to PHY supply.
> +
> + vdda-pll-supply:
> + description: Phandle to PLL supply.
> +
> + ports:
> + $ref: /schemas/graph.yaml#/properties/ports
> +
> + properties:
> + port@0:
> + $ref: /schemas/graph.yaml#/$defs/port-base
> + description:
> + Sensor input. A single sensor is described by a single endpoint
> + with one to four data lanes, numbered 1-4. The clock lane is
> + position 0.
> +
> + unevaluatedProperties: false
> +
> + patternProperties:
> + "^endpoint(@0)?$":
so not a pattern really and just endpoint.
> + $ref: /schemas/media/video-interfaces.yaml#
> + unevaluatedProperties: false
> + properties:
> + bus-type:
> + enum:
> + - 1 # MEDIA_BUS_TYPE_CSI2_CPHY
> + - 4 # MEDIA_BUS_TYPE_CSI2_DPHY
> + default: 4
> +
> + data-lanes:
> + minItems: 1
> + maxItems: 4
> + items:
> + minimum: 1
> + maximum: 4
> + description:
> + Data lane positions following this endpoint's clock
> + lane. Positions are a per-port logical numbering, not
> + package pad or ball positions.
> +
> + required:
> + - data-lanes
> + - remote-endpoint
> +
> + port@1:
> + $ref: /schemas/graph.yaml#/properties/port
> + description: Output to the CAMSS CSID controller.
> +
> + required:
> + - port@0
> + - port@1
> +
> +required:
> + - compatible
> + - reg
> + - clocks
> + - clock-names
> + - interrupts
> + - operating-points-v2
> + - power-domains
> + - power-domain-names
> + - vdda-phy-supply
> + - vdda-pll-supply
> + - ports
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/clock/qcom,sa8775p-camcc.h>
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/media/video-interfaces.h>
> +
> + csiphy0: csiphy@ac9c000 {
Drop unused label
git grep csiphy@
Don't come with own style.
Best regards,
Krzysztof
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
@ 2026-10-19 7:16 ` Krzysztof Kozlowski
0 siblings, 0 replies; 38+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-19 7:16 UTC (permalink / raw)
To: Anusha Arun Nandi
Cc: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani,
gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On Fri, Oct 16, 2026 at 04:54:57PM -0700, Anusha Arun Nandi wrote:
> Add a device-tree binding for the Qualcomm SA8775P MIPI CSI2
> PHY, modelled as a standalone generic-PHY provider like the existing
> qcom,x1e80100-csi2-phy, so CAMSS can consume the CSIPHY through the
> common PHY framework instead of driving it in-line.
A nit, subject: drop second/last, redundant "schema". The
"dt-bindings" prefix is already stating that these are schemas.
See also:
https://elixir.bootlin.com/linux/v7.1-rc7/source/Documentation/devicetree/bindings/submitting-patches.rst#L23
>
> Follows the qcom,x1e80100-csi2-phy schema's shape: a ports/port@0
> sensor-input endpoint carrying data-lanes/bus-type (D-PHY only for
> now, C-PHY bus-type value is accepted by the schema but wired up by a
> companion series), a port@1 CSID output, and a mandatory
> operating-points-v2 table plus power-domains/power-domain-names.
>
> Unlike x1e80100, SA8775P's CSIPHY has a single power-domain: the
> Titan Top GDSC, matching the legacy in-tree CAMSS driver's
> sa8775p_resources.pd_name = "top" (drivers/media/platform/qcom/camss/
> camss.c) and the existing lemans.dtsi camss node's power-domains =
> <&camcc CAM_CC_TITAN_TOP_GDSC>. It is not OPP-scaled, only kept
> enabled, the same way x1e80100's own "top" domain is.
>
> The PHY takes three clocks (core, timer and the shared CSID CSIPHY RX
> clock) and the vdda-phy/vdda-pll supplies. The core/timer naming
> matches x1e80100's clock-names convention for the same pair of
> clocks.
>
> Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
> ---
> .../bindings/phy/qcom,sa8775p-csi2-phy.yaml | 172 ++++++++++++++++++
> 1 file changed, 172 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
>
> diff --git a/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
> new file mode 100644
> index 000000000000..b66ec2f14189
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
> @@ -0,0 +1,172 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +# Copyright (c) 2026 Qualcomm Innovation Center, Inc. All rights reserved.
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/phy/qcom,sa8775p-csi2-phy.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Qualcomm SA8775P CSI2 PHY
> +
> +maintainers:
> + - Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
> +
> +description:
> + Qualcomm MIPI CSI2 D-PHY. Connects MIPI CSI2 sensors to Qualcomm's Camera
> + CSI Decoder on the SA8775P SoC.
> +
> +properties:
> + compatible:
> + const: qcom,sa8775p-csi2-phy
> +
> + reg:
> + maxItems: 1
> +
> + clocks:
> + maxItems: 3
> +
> + clock-names:
> + items:
> + - const: core
> + - const: timer
> + - const: csiphy_rx
You just named it basde on clock name. Instead, name it based on the
input name. csiphy is also completely redundant.
> +
> + interrupts:
> + maxItems: 1
> +
> + operating-points-v2: true
> +
> + opp-table:
> + type: object
> +
> + power-domains:
> + items:
> + - description: Titan Top GDSC - Titan ISP Block, Global Distributed Switch Controller.
> +
> + power-domain-names:
> + items:
> + - const: top
> +
> + vdda-phy-supply:
> + description: Phandle to PHY supply.
> +
> + vdda-pll-supply:
> + description: Phandle to PLL supply.
> +
> + ports:
> + $ref: /schemas/graph.yaml#/properties/ports
> +
> + properties:
> + port@0:
> + $ref: /schemas/graph.yaml#/$defs/port-base
> + description:
> + Sensor input. A single sensor is described by a single endpoint
> + with one to four data lanes, numbered 1-4. The clock lane is
> + position 0.
> +
> + unevaluatedProperties: false
> +
> + patternProperties:
> + "^endpoint(@0)?$":
so not a pattern really and just endpoint.
> + $ref: /schemas/media/video-interfaces.yaml#
> + unevaluatedProperties: false
> + properties:
> + bus-type:
> + enum:
> + - 1 # MEDIA_BUS_TYPE_CSI2_CPHY
> + - 4 # MEDIA_BUS_TYPE_CSI2_DPHY
> + default: 4
> +
> + data-lanes:
> + minItems: 1
> + maxItems: 4
> + items:
> + minimum: 1
> + maximum: 4
> + description:
> + Data lane positions following this endpoint's clock
> + lane. Positions are a per-port logical numbering, not
> + package pad or ball positions.
> +
> + required:
> + - data-lanes
> + - remote-endpoint
> +
> + port@1:
> + $ref: /schemas/graph.yaml#/properties/port
> + description: Output to the CAMSS CSID controller.
> +
> + required:
> + - port@0
> + - port@1
> +
> +required:
> + - compatible
> + - reg
> + - clocks
> + - clock-names
> + - interrupts
> + - operating-points-v2
> + - power-domains
> + - power-domain-names
> + - vdda-phy-supply
> + - vdda-pll-supply
> + - ports
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/clock/qcom,sa8775p-camcc.h>
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/media/video-interfaces.h>
> +
> + csiphy0: csiphy@ac9c000 {
Drop unused label
git grep csiphy@
Don't come with own style.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 3/7] dt-bindings: phy: qcom: Add qcs8300 to the CSI2 PHY schema
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-19 7:18 ` Krzysztof Kozlowski
-1 siblings, 0 replies; 38+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-19 7:18 UTC (permalink / raw)
To: Anusha Arun Nandi
Cc: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani,
gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On Fri, Oct 16, 2026 at 04:54:58PM -0700, Anusha Arun Nandi wrote:
> QCS8300 uses the same MIPI CSI2 CSIPHY as SA8775P --
> identical D-PHY register layout, common-control offset and clock set.
> Add "qcom,qcs8300-csi2-phy" as a second enum value in the existing
> schema rather than duplicating it, and generalise the title/description
> to cover both SoCs.
Just squash the patch.
>
> Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
> ---
> .../devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
> index b66ec2f14189..8e60ef0714bc 100644
> --- a/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
> +++ b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
> @@ -5,18 +5,21 @@
> $id: http://devicetree.org/schemas/phy/qcom,sa8775p-csi2-phy.yaml#
> $schema: http://devicetree.org/meta-schemas/core.yaml#
>
> -title: Qualcomm SA8775P CSI2 PHY
> +title: Qualcomm SA8775P / QCS8300 CSI2 PHY
>
> maintainers:
> - Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
>
> description:
> Qualcomm MIPI CSI2 D-PHY. Connects MIPI CSI2 sensors to Qualcomm's Camera
> - CSI Decoder on the SA8775P (lemans) SoC.
You just added this line. Changing something you added means previous
patch is not correct.
Best regards,
Krzysztof
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 3/7] dt-bindings: phy: qcom: Add qcs8300 to the CSI2 PHY schema
@ 2026-10-19 7:18 ` Krzysztof Kozlowski
0 siblings, 0 replies; 38+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-19 7:18 UTC (permalink / raw)
To: Anusha Arun Nandi
Cc: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani,
gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On Fri, Oct 16, 2026 at 04:54:58PM -0700, Anusha Arun Nandi wrote:
> QCS8300 uses the same MIPI CSI2 CSIPHY as SA8775P --
> identical D-PHY register layout, common-control offset and clock set.
> Add "qcom,qcs8300-csi2-phy" as a second enum value in the existing
> schema rather than duplicating it, and generalise the title/description
> to cover both SoCs.
Just squash the patch.
>
> Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
> ---
> .../devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
> index b66ec2f14189..8e60ef0714bc 100644
> --- a/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
> +++ b/Documentation/devicetree/bindings/phy/qcom,sa8775p-csi2-phy.yaml
> @@ -5,18 +5,21 @@
> $id: http://devicetree.org/schemas/phy/qcom,sa8775p-csi2-phy.yaml#
> $schema: http://devicetree.org/meta-schemas/core.yaml#
>
> -title: Qualcomm SA8775P CSI2 PHY
> +title: Qualcomm SA8775P / QCS8300 CSI2 PHY
>
> maintainers:
> - Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
>
> description:
> Qualcomm MIPI CSI2 D-PHY. Connects MIPI CSI2 sensors to Qualcomm's Camera
> - CSI Decoder on the SA8775P (lemans) SoC.
You just added this line. Changing something you added means previous
patch is not correct.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 5/7] phy: qcom-mipi-csi2: Add qcs8300 CSI2 PHY support
2026-10-16 23:55 ` Anusha Arun Nandi
@ 2026-10-19 7:18 ` Krzysztof Kozlowski
-1 siblings, 0 replies; 38+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-19 7:18 UTC (permalink / raw)
To: Anusha Arun Nandi
Cc: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani,
gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On Fri, Oct 16, 2026 at 04:55:00PM -0700, Anusha Arun Nandi wrote:
> Bind the new "qcom,qcs8300-csi2-phy" compatible to the existing
> sa8775p SoC configuration (mipi_csi2_dphy_sa8775p). QCS8300
> and SA8775P share the same CSIPHY: in the legacy in-tree
> CAMSS driver (camss-csiphy-3ph-1-0.c) the CAMSS_8300 and CAMSS_8775P
> cases fall through to the same D-PHY lane_regs_sa8775p[] init sequence
> and common_regs_offset (0x800), and camss.c gives both SoCs the same
> pd_name = "top" Titan Top GDSC. No new register data or power-domain
> wiring is therefore needed; only the compatible string is added.
>
> Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
> ---
> drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
> index 821c6a0a916c..cef4a90ca539 100644
> --- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
> +++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
> @@ -453,6 +453,7 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
> }
>
> static const struct of_device_id phy_qcom_mipi_csi2_of_match_table[] = {
> + { .compatible = "qcom,qcs8300-csi2-phy", .data = &mipi_csi2_dphy_sa8775p },
So devices are fully compatible? Then express it and drop this.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 5/7] phy: qcom-mipi-csi2: Add qcs8300 CSI2 PHY support
@ 2026-10-19 7:18 ` Krzysztof Kozlowski
0 siblings, 0 replies; 38+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-19 7:18 UTC (permalink / raw)
To: Anusha Arun Nandi
Cc: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani,
gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On Fri, Oct 16, 2026 at 04:55:00PM -0700, Anusha Arun Nandi wrote:
> Bind the new "qcom,qcs8300-csi2-phy" compatible to the existing
> sa8775p SoC configuration (mipi_csi2_dphy_sa8775p). QCS8300
> and SA8775P share the same CSIPHY: in the legacy in-tree
> CAMSS driver (camss-csiphy-3ph-1-0.c) the CAMSS_8300 and CAMSS_8775P
> cases fall through to the same D-PHY lane_regs_sa8775p[] init sequence
> and common_regs_offset (0x800), and camss.c gives both SoCs the same
> pd_name = "top" Titan Top GDSC. No new register data or power-domain
> wiring is therefore needed; only the compatible string is added.
>
> Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
> ---
> drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
> index 821c6a0a916c..cef4a90ca539 100644
> --- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
> +++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
> @@ -453,6 +453,7 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
> }
>
> static const struct of_device_id phy_qcom_mipi_csi2_of_match_table[] = {
> + { .compatible = "qcom,qcs8300-csi2-phy", .data = &mipi_csi2_dphy_sa8775p },
So devices are fully compatible? Then express it and drop this.
Best regards,
Krzysztof
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 6/7] dt-bindings: phy: qcom: Add qcom,sc7280-csi2-phy schema
2026-10-16 23:55 ` Anusha Arun Nandi
@ 2026-10-19 7:19 ` Krzysztof Kozlowski
-1 siblings, 0 replies; 38+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-19 7:19 UTC (permalink / raw)
To: Anusha Arun Nandi
Cc: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani,
gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On Fri, Oct 16, 2026 at 04:55:01PM -0700, Anusha Arun Nandi wrote:
> Add a device-tree binding for the Qualcomm SC7280
> MIPI CSI2 D-PHY, modelled as a standalone generic-PHY
> provider like the existing qcom,x1e80100-csi2-phy and
> qcom,sa8775p-csi2-phy schemas.
>
> Follows the same ports/port@0 data-lanes shape and mandatory
> operating-points-v2/power-domains as qcom,sa8775p-csi2-phy. SC7280's
> CSIPHY has a single power-domain, the Titan Top GDSC, matching
> camss.c's sc7280_resources.pd_name = "top" and kodiak.dtsi's existing
> camss node. Two clocks only (core, timer) -- SC7280 has no shared
> CSID-RX clock in the legacy driver's clock table. The core/timer
> naming matches x1e80100's and sa8775p's clock-names convention for
> this pair of clocks.
>
> Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
Basically same comments.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 6/7] dt-bindings: phy: qcom: Add qcom,sc7280-csi2-phy schema
@ 2026-10-19 7:19 ` Krzysztof Kozlowski
0 siblings, 0 replies; 38+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-19 7:19 UTC (permalink / raw)
To: Anusha Arun Nandi
Cc: bod, vkoul, kishon, robh, krzk+dt, conor+dt, neil.armstrong, mani,
gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On Fri, Oct 16, 2026 at 04:55:01PM -0700, Anusha Arun Nandi wrote:
> Add a device-tree binding for the Qualcomm SC7280
> MIPI CSI2 D-PHY, modelled as a standalone generic-PHY
> provider like the existing qcom,x1e80100-csi2-phy and
> qcom,sa8775p-csi2-phy schemas.
>
> Follows the same ports/port@0 data-lanes shape and mandatory
> operating-points-v2/power-domains as qcom,sa8775p-csi2-phy. SC7280's
> CSIPHY has a single power-domain, the Titan Top GDSC, matching
> camss.c's sc7280_resources.pd_name = "top" and kodiak.dtsi's existing
> camss node. Two clocks only (core, timer) -- SC7280 has no shared
> CSID-RX clock in the legacy driver's clock table. The core/timer
> naming matches x1e80100's and sa8775p's clock-names convention for
> this pair of clocks.
>
> Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
Basically same comments.
Best regards,
Krzysztof
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
2026-10-19 7:13 ` Krzysztof Kozlowski
@ 2026-10-19 7:25 ` Nihal Kumar Gupta
-1 siblings, 0 replies; 38+ messages in thread
From: Nihal Kumar Gupta @ 2026-10-19 7:25 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Anusha Arun Nandi, bod, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani, gjorgji.rosikopulos, hariram.purushothaman,
akapatra, jigarkumar.zala, loic.poulain, vladimir.zapolskiy,
linux-arm-msm, linux-phy, linux-media, devicetree, linux-kernel,
Vikram Sharma
On 19-10-2026 12:43, Krzysztof Kozlowski wrote:
>> DTS uses 2-cell reg but binding example uses 1-cell. Please align:
>> reg = <0x0 0x0ac9c000 0x0 0x2000>;
> I don't understand what is supposed to be aligned here. The code is
> correct.
Right, the DTS change is correct.
My comment was about the binding example using a different address/size cell
layout from the real DTS.
Krzysztof, should the binding example mirror the SoC bus address/size cell
layout here, or is the standalone 2-cell example fine as long as it passes
dt_binding_check?
--
Regards,
Nihal Kumar Gupta
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
@ 2026-10-19 7:25 ` Nihal Kumar Gupta
0 siblings, 0 replies; 38+ messages in thread
From: Nihal Kumar Gupta @ 2026-10-19 7:25 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Anusha Arun Nandi, bod, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani, gjorgji.rosikopulos, hariram.purushothaman,
akapatra, jigarkumar.zala, loic.poulain, vladimir.zapolskiy,
linux-arm-msm, linux-phy, linux-media, devicetree, linux-kernel,
Vikram Sharma
On 19-10-2026 12:43, Krzysztof Kozlowski wrote:
>> DTS uses 2-cell reg but binding example uses 1-cell. Please align:
>> reg = <0x0 0x0ac9c000 0x0 0x2000>;
> I don't understand what is supposed to be aligned here. The code is
> correct.
Right, the DTS change is correct.
My comment was about the binding example using a different address/size cell
layout from the real DTS.
Krzysztof, should the binding example mirror the SoC bus address/size cell
layout here, or is the standalone 2-cell example fine as long as it passes
dt_binding_check?
--
Regards,
Nihal Kumar Gupta
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-19 8:29 ` Bryan O'Donoghue
-1 siblings, 0 replies; 38+ messages in thread
From: Bryan O'Donoghue @ 2026-10-19 8:29 UTC (permalink / raw)
To: Anusha Arun Nandi, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On 17/10/2026 00:54, Anusha Arun Nandi wrote:
> Add a device-tree binding for the Qualcomm SA8775P MIPI CSI2
> PHY, modelled as a standalone generic-PHY provider like the existing
> qcom,x1e80100-csi2-phy, so CAMSS can consume the CSIPHY through the
> common PHY framework instead of driving it in-line.
Do you really need a whole new separate file for this though ?
---
bod
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema
@ 2026-10-19 8:29 ` Bryan O'Donoghue
0 siblings, 0 replies; 38+ messages in thread
From: Bryan O'Donoghue @ 2026-10-19 8:29 UTC (permalink / raw)
To: Anusha Arun Nandi, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On 17/10/2026 00:54, Anusha Arun Nandi wrote:
> Add a device-tree binding for the Qualcomm SA8775P MIPI CSI2
> PHY, modelled as a standalone generic-PHY provider like the existing
> qcom,x1e80100-csi2-phy, so CAMSS can consume the CSIPHY through the
> common PHY framework instead of driving it in-line.
Do you really need a whole new separate file for this though ?
---
bod
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 1/7] phy: qcom-mipi-csi2: fix -EEXIST probe failure on single power-domain SoCs
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-19 9:55 ` Bryan O'Donoghue
-1 siblings, 0 replies; 38+ messages in thread
From: Bryan O'Donoghue @ 2026-10-19 9:55 UTC (permalink / raw)
To: Anusha Arun Nandi, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On 17/10/2026 00:54, Anusha Arun Nandi wrote:
> sa8775p, qcs8300 and sc7280 each list exactly one power-domain ("top")
> on the CSI2 PHY node. For a device with a single power-domain phandle,
> the generic platform-bus code (platform_probe() ->
> dev_pm_domain_attach()) auto-attaches it via genpd_dev_pm_attach()
> before the driver's own probe() runs. phy_qcom_mipi_csi2_probe() then
> unconditionally calls devm_pm_domain_attach_list(), which fails with
> -EEXIST because dev->pm_domain is already set, and the driver treats
> that as fatal:
>
> qcom-mipi-csi2-phy ace6000.phy: error -EEXIST: Failed to attach
> power-domain list
> qcom-mipi-csi2-phy ace6000.phy: probe with driver qcom-mipi-csi2-phy
> failed with error -17
>
> x1e80100 is unaffected: it lists three power-domains, so the generic
> code does not auto-attach any of them (auto-attach only applies to
> single-power-domain devices); the driver's explicit attach is the
> only one that runs.
>
> For the single power-domain case, call dev_pm_domain_attach() instead
> of devm_pm_domain_attach_list(): it returns early when dev->pm_domain
> is already set, so csi2phy->pd_list is left NULL rather than built up
> by hand. The three call sites that walk pd_list for genpd
> performance-state scaling now guard against a NULL pd_list, which is
> harmless since scaling is unused (scaled = false) on every SoC that has
> a single "top" domain.
Fix implies bug but, this patch really adds support for one power-domain
cases.
I think the patch title should be something like "Add support for single
power-domain case"
or if you believe it is a bugfix level change add
Fixes:
Cc: stable@vger.kernel.org
My own preference is "Add support" since the driver hasn't been designed
to support single PD cases thus far but, OTOH you could make an argument
that that is in fact a design bug.
> Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
> ---
> .../phy/qualcomm/phy-qcom-mipi-csi2-core.c | 24 +++++++++++++------
> 1 file changed, 17 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
> index c0a4fa20eaf0..00285be9dd64 100644
> --- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
> +++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
> @@ -43,7 +43,7 @@ phy_qcom_mipi_csi2_set_clock_rates(struct mipi_csi2phy_device *csi2phy,
> }
>
> pstate = 0;
> - for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
> + for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
> unsigned int perf;
>
> if (!csi2phy->soc_cfg->genpds[i].scaled)
> @@ -174,7 +174,7 @@ static int phy_qcom_mipi_csi2_power_on(struct phy *phy)
> unset_rate:
> dev_pm_opp_set_rate(csi2phy->dev, 0);
>
> - for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
> + for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
> if (!csi2phy->soc_cfg->genpds[i].scaled)
> continue;
>
> @@ -204,7 +204,7 @@ static int phy_qcom_mipi_csi2_power_off(struct phy *phy)
>
> dev_pm_opp_set_rate(csi2phy->dev, 0);
>
> - for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
> + for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
> if (!csi2phy->soc_cfg->genpds[i].scaled)
> continue;
>
> @@ -233,6 +233,19 @@ static int phy_qcom_mipi_csi2_attach_pm_domains(struct mipi_csi2phy_device *csi2
> const char **pd_names;
> int i;
>
> + /*
> + * A device with a single power-domain entry in the devicetree is
> + * already attached by the generic platform-bus code before probe()
> + * runs (genpd_dev_pm_attach()), so calling devm_pm_domain_attach_list()
> + * here would fail with -EEXIST. dev_pm_domain_attach() returns early
> + * in that case (dev->pm_domain already set) instead of leaving
> + * csi2phy->pd_list unset; this is fine since pd_list is only used for
> + * performance-state scaling, which is unused ("scaled = false") on
> + * every SoC that has a single "top" power-domain.
> + */
This is alot of comment - looks like LLM babble to me. I think it can be
dropped the code is pretty obvious, if num_genpds == 1 do this other
thing here.
> + if (csi2phy->soc_cfg->num_genpds == 1)
> + return dev_pm_domain_attach(csi2phy->dev, 0);
> +
> pd_names = devm_kzalloc(csi2phy->dev,
> sizeof(char *) * csi2phy->soc_cfg->num_genpds,
> GFP_KERNEL);
> @@ -369,11 +382,8 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
> return ret;
>
> ret = phy_qcom_mipi_csi2_attach_pm_domains(csi2phy);
> - if (ret < 0 || csi2phy->pd_list == NULL) {
> - if (ret == 0)
> - ret = -ENODEV;
> + if (ret < 0)
> return dev_err_probe(dev, ret, "Failed to attach power-domain list\n");
> - }
>
> ret = devm_pm_runtime_enable(dev);
> if (ret < 0)
> --
> 2.34.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 1/7] phy: qcom-mipi-csi2: fix -EEXIST probe failure on single power-domain SoCs
@ 2026-10-19 9:55 ` Bryan O'Donoghue
0 siblings, 0 replies; 38+ messages in thread
From: Bryan O'Donoghue @ 2026-10-19 9:55 UTC (permalink / raw)
To: Anusha Arun Nandi, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On 17/10/2026 00:54, Anusha Arun Nandi wrote:
> sa8775p, qcs8300 and sc7280 each list exactly one power-domain ("top")
> on the CSI2 PHY node. For a device with a single power-domain phandle,
> the generic platform-bus code (platform_probe() ->
> dev_pm_domain_attach()) auto-attaches it via genpd_dev_pm_attach()
> before the driver's own probe() runs. phy_qcom_mipi_csi2_probe() then
> unconditionally calls devm_pm_domain_attach_list(), which fails with
> -EEXIST because dev->pm_domain is already set, and the driver treats
> that as fatal:
>
> qcom-mipi-csi2-phy ace6000.phy: error -EEXIST: Failed to attach
> power-domain list
> qcom-mipi-csi2-phy ace6000.phy: probe with driver qcom-mipi-csi2-phy
> failed with error -17
>
> x1e80100 is unaffected: it lists three power-domains, so the generic
> code does not auto-attach any of them (auto-attach only applies to
> single-power-domain devices); the driver's explicit attach is the
> only one that runs.
>
> For the single power-domain case, call dev_pm_domain_attach() instead
> of devm_pm_domain_attach_list(): it returns early when dev->pm_domain
> is already set, so csi2phy->pd_list is left NULL rather than built up
> by hand. The three call sites that walk pd_list for genpd
> performance-state scaling now guard against a NULL pd_list, which is
> harmless since scaling is unused (scaled = false) on every SoC that has
> a single "top" domain.
Fix implies bug but, this patch really adds support for one power-domain
cases.
I think the patch title should be something like "Add support for single
power-domain case"
or if you believe it is a bugfix level change add
Fixes:
Cc: stable@vger.kernel.org
My own preference is "Add support" since the driver hasn't been designed
to support single PD cases thus far but, OTOH you could make an argument
that that is in fact a design bug.
> Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
> ---
> .../phy/qualcomm/phy-qcom-mipi-csi2-core.c | 24 +++++++++++++------
> 1 file changed, 17 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
> index c0a4fa20eaf0..00285be9dd64 100644
> --- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
> +++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
> @@ -43,7 +43,7 @@ phy_qcom_mipi_csi2_set_clock_rates(struct mipi_csi2phy_device *csi2phy,
> }
>
> pstate = 0;
> - for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
> + for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
> unsigned int perf;
>
> if (!csi2phy->soc_cfg->genpds[i].scaled)
> @@ -174,7 +174,7 @@ static int phy_qcom_mipi_csi2_power_on(struct phy *phy)
> unset_rate:
> dev_pm_opp_set_rate(csi2phy->dev, 0);
>
> - for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
> + for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
> if (!csi2phy->soc_cfg->genpds[i].scaled)
> continue;
>
> @@ -204,7 +204,7 @@ static int phy_qcom_mipi_csi2_power_off(struct phy *phy)
>
> dev_pm_opp_set_rate(csi2phy->dev, 0);
>
> - for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
> + for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
> if (!csi2phy->soc_cfg->genpds[i].scaled)
> continue;
>
> @@ -233,6 +233,19 @@ static int phy_qcom_mipi_csi2_attach_pm_domains(struct mipi_csi2phy_device *csi2
> const char **pd_names;
> int i;
>
> + /*
> + * A device with a single power-domain entry in the devicetree is
> + * already attached by the generic platform-bus code before probe()
> + * runs (genpd_dev_pm_attach()), so calling devm_pm_domain_attach_list()
> + * here would fail with -EEXIST. dev_pm_domain_attach() returns early
> + * in that case (dev->pm_domain already set) instead of leaving
> + * csi2phy->pd_list unset; this is fine since pd_list is only used for
> + * performance-state scaling, which is unused ("scaled = false") on
> + * every SoC that has a single "top" power-domain.
> + */
This is alot of comment - looks like LLM babble to me. I think it can be
dropped the code is pretty obvious, if num_genpds == 1 do this other
thing here.
> + if (csi2phy->soc_cfg->num_genpds == 1)
> + return dev_pm_domain_attach(csi2phy->dev, 0);
> +
> pd_names = devm_kzalloc(csi2phy->dev,
> sizeof(char *) * csi2phy->soc_cfg->num_genpds,
> GFP_KERNEL);
> @@ -369,11 +382,8 @@ static int phy_qcom_mipi_csi2_probe(struct platform_device *pdev)
> return ret;
>
> ret = phy_qcom_mipi_csi2_attach_pm_domains(csi2phy);
> - if (ret < 0 || csi2phy->pd_list == NULL) {
> - if (ret == 0)
> - ret = -ENODEV;
> + if (ret < 0)
> return dev_err_probe(dev, ret, "Failed to attach power-domain list\n");
> - }
>
> ret = devm_pm_runtime_enable(dev);
> if (ret < 0)
> --
> 2.34.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 4/7] phy: qcom-mipi-csi2: Add sa8775p D-PHY support
2026-10-16 23:54 ` Anusha Arun Nandi
@ 2026-10-19 10:01 ` Bryan O'Donoghue
-1 siblings, 0 replies; 38+ messages in thread
From: Bryan O'Donoghue @ 2026-10-19 10:01 UTC (permalink / raw)
To: Anusha Arun Nandi, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On 17/10/2026 00:54, Anusha Arun Nandi wrote:
> The timer-clock lookup in phy_qcom_mipi_csi2_probe() and the OPP
> clkname passed to devm_pm_opp_set_clkname() were both hardcoded
> string literals sized to x1e80100 ("timer"/"core"). Add
> timer_clk_name/opp_clk_name to struct mipi_csi2phy_soc_cfg so each
> SoC can declare its own clock-name strings; x1e80100's soc_cfg now
> declares "timer"/"core" explicitly, with no behaviour change.
> SA8775P reuses the same "timer"/"core" names as x1e80100 for this
> pair of clocks.
LoL I had that in the last design and review said "hard code it" happy
to agree with myself in the past, however this change should be
standalone and precede the Lemans work.
> SA8775P's CSIPHY has a single power-domain, the Titan Top GDSC,
> matching the legacy in-tree CAMSS driver's sa8775p_resources.pd_name
> = "top" and the existing lemans.dtsi camss node. Like x1e80100's own
> "top" domain, it is not OPP-scaled, only kept enabled.
>
> Signed-off-by: Anusha Arun Nandi<anusha.nandi@oss.qualcomm.com>
> ---
> .../qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c | 112 ++++++++++++++++++
> .../phy/qualcomm/phy-qcom-mipi-csi2-core.c | 5 +-
> drivers/phy/qualcomm/phy-qcom-mipi-csi2.h | 4 +
> 3 files changed, 119 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
> index 966d79c98f9b..85e89235f7c9 100644
> --- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
> +++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
> @@ -380,6 +380,118 @@ const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_4nm_x1e = {
> .num_supplies = ARRAY_SIZE(x1e_supplies),
> .clk_names = (const char **)x1e_clks,
> .num_clk = ARRAY_SIZE(x1e_clks),
> + .timer_clk_name = "timer",
> + .opp_clk_name = "core",
> .genpds = x1e_genpds,
> .num_genpds = ARRAY_SIZE(x1e_genpds),
> };
Yes but split it up - "remove hard coded timer and opp names" - actually
you want to make the OPP optional no ? In which case you'd expect to see
a patch to make OPPs optional - instead of folding that into a
functionality drop.
Because say we want to revert or re-order the addition of Lemans in the
git log - we then have the problem of mixed functionality.
Or say I want to cherry-pick a backport - I don't necessarily want to
include lots of SoC specific stuff that doesn't affect my part.
=> More granular patches.
---
bod
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH 4/7] phy: qcom-mipi-csi2: Add sa8775p D-PHY support
@ 2026-10-19 10:01 ` Bryan O'Donoghue
0 siblings, 0 replies; 38+ messages in thread
From: Bryan O'Donoghue @ 2026-10-19 10:01 UTC (permalink / raw)
To: Anusha Arun Nandi, vkoul, kishon, robh, krzk+dt, conor+dt,
neil.armstrong, mani
Cc: gjorgji.rosikopulos, hariram.purushothaman, akapatra,
jigarkumar.zala, loic.poulain, vladimir.zapolskiy, linux-arm-msm,
linux-phy, linux-media, devicetree, linux-kernel
On 17/10/2026 00:54, Anusha Arun Nandi wrote:
> The timer-clock lookup in phy_qcom_mipi_csi2_probe() and the OPP
> clkname passed to devm_pm_opp_set_clkname() were both hardcoded
> string literals sized to x1e80100 ("timer"/"core"). Add
> timer_clk_name/opp_clk_name to struct mipi_csi2phy_soc_cfg so each
> SoC can declare its own clock-name strings; x1e80100's soc_cfg now
> declares "timer"/"core" explicitly, with no behaviour change.
> SA8775P reuses the same "timer"/"core" names as x1e80100 for this
> pair of clocks.
LoL I had that in the last design and review said "hard code it" happy
to agree with myself in the past, however this change should be
standalone and precede the Lemans work.
> SA8775P's CSIPHY has a single power-domain, the Titan Top GDSC,
> matching the legacy in-tree CAMSS driver's sa8775p_resources.pd_name
> = "top" and the existing lemans.dtsi camss node. Like x1e80100's own
> "top" domain, it is not OPP-scaled, only kept enabled.
>
> Signed-off-by: Anusha Arun Nandi<anusha.nandi@oss.qualcomm.com>
> ---
> .../qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c | 112 ++++++++++++++++++
> .../phy/qualcomm/phy-qcom-mipi-csi2-core.c | 5 +-
> drivers/phy/qualcomm/phy-qcom-mipi-csi2.h | 4 +
> 3 files changed, 119 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
> index 966d79c98f9b..85e89235f7c9 100644
> --- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
> +++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-3ph-dphy.c
> @@ -380,6 +380,118 @@ const struct mipi_csi2phy_soc_cfg mipi_csi2_dphy_4nm_x1e = {
> .num_supplies = ARRAY_SIZE(x1e_supplies),
> .clk_names = (const char **)x1e_clks,
> .num_clk = ARRAY_SIZE(x1e_clks),
> + .timer_clk_name = "timer",
> + .opp_clk_name = "core",
> .genpds = x1e_genpds,
> .num_genpds = ARRAY_SIZE(x1e_genpds),
> };
Yes but split it up - "remove hard coded timer and opp names" - actually
you want to make the OPP optional no ? In which case you'd expect to see
a patch to make OPPs optional - instead of folding that into a
functionality drop.
Because say we want to revert or re-order the addition of Lemans in the
git log - we then have the problem of mixed functionality.
Or say I want to cherry-pick a backport - I don't necessarily want to
include lots of SoC specific stuff that doesn't affect my part.
=> More granular patches.
---
bod
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 38+ messages in thread
end of thread, other threads:[~2026-10-19 10:01 UTC | newest]
Thread overview: 38+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-16 23:54 [PATCH 0/7] phy: qcom-mipi-csi2: Add D-PHY support for sa8775p, qcs8300 and sc7280 Anusha Arun Nandi
2026-10-16 23:54 ` Anusha Arun Nandi
2026-10-16 23:54 ` [PATCH 1/7] phy: qcom-mipi-csi2: fix -EEXIST probe failure on single power-domain SoCs Anusha Arun Nandi
2026-10-16 23:54 ` Anusha Arun Nandi
2026-10-19 9:55 ` Bryan O'Donoghue
2026-10-19 9:55 ` Bryan O'Donoghue
2026-10-16 23:54 ` [PATCH 2/7] dt-bindings: phy: qcom: Add qcom,sa8775p-csi2-phy schema Anusha Arun Nandi
2026-10-16 23:54 ` Anusha Arun Nandi
2026-10-17 17:48 ` Nihal Kumar Gupta
2026-10-17 17:48 ` Nihal Kumar Gupta
2026-10-19 7:13 ` Krzysztof Kozlowski
2026-10-19 7:13 ` Krzysztof Kozlowski
2026-10-19 7:25 ` Nihal Kumar Gupta
2026-10-19 7:25 ` Nihal Kumar Gupta
2026-10-19 7:16 ` Krzysztof Kozlowski
2026-10-19 7:16 ` Krzysztof Kozlowski
2026-10-19 8:29 ` Bryan O'Donoghue
2026-10-19 8:29 ` Bryan O'Donoghue
2026-10-16 23:54 ` [PATCH 3/7] dt-bindings: phy: qcom: Add qcs8300 to the CSI2 PHY schema Anusha Arun Nandi
2026-10-16 23:54 ` Anusha Arun Nandi
2026-10-19 7:18 ` Krzysztof Kozlowski
2026-10-19 7:18 ` Krzysztof Kozlowski
2026-10-16 23:54 ` [PATCH 4/7] phy: qcom-mipi-csi2: Add sa8775p D-PHY support Anusha Arun Nandi
2026-10-16 23:54 ` Anusha Arun Nandi
2026-10-19 10:01 ` Bryan O'Donoghue
2026-10-19 10:01 ` Bryan O'Donoghue
2026-10-16 23:55 ` [PATCH 5/7] phy: qcom-mipi-csi2: Add qcs8300 CSI2 PHY support Anusha Arun Nandi
2026-10-16 23:55 ` Anusha Arun Nandi
2026-10-19 7:18 ` Krzysztof Kozlowski
2026-10-19 7:18 ` Krzysztof Kozlowski
2026-10-16 23:55 ` [PATCH 6/7] dt-bindings: phy: qcom: Add qcom,sc7280-csi2-phy schema Anusha Arun Nandi
2026-10-16 23:55 ` Anusha Arun Nandi
2026-10-19 7:19 ` Krzysztof Kozlowski
2026-10-19 7:19 ` Krzysztof Kozlowski
2026-10-16 23:55 ` [PATCH 7/7] phy: qcom-mipi-csi2: Add sc7280 D-PHY provider Anusha Arun Nandi
2026-10-16 23:55 ` Anusha Arun Nandi
2026-10-17 17:50 ` [PATCH 0/7] phy: qcom-mipi-csi2: Add D-PHY support for sa8775p, qcs8300 and sc7280 Nihal Kumar Gupta
2026-10-17 17:50 ` Nihal Kumar Gupta
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.