* [PATCH v11 0/7] Add dt-bindings and PHY updates for CAMSS on x1e80100 silicon
@ 2026-03-26 1:28 Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 1/7] dt-bindings: media: qcom,x1e80100-camss: Add optional PHY handle definitions Bryan O'Donoghue
` (6 more replies)
0 siblings, 7 replies; 13+ messages in thread
From: Bryan O'Donoghue @ 2026-03-26 1:28 UTC (permalink / raw)
To: Bjorn Andersson, Michael Turquette, Stephen Boyd, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Robert Foss, Todor Tomov,
Mauro Carvalho Chehab, Konrad Dybcio, Vladimir Zapolskiy,
Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Bryan O'Donoghue, Krzysztof Kozlowski, Christopher Obbard,
Krzysztof Kozlowski
Changes in v11:
- Dropped simple-mfd in dts for devm_of_platform_populate() - Krzysztof
- Pass polarity and position for data and clock lanes - bod
- Remove check for PHY_TYPE_DPHY - PHY driver validates its own mode - bod
- Depends-on: https://lore.kernel.org/r/20260325-dphy-params-extension-v1-0-c6df5599284a@linaro.org
- Depends-on: https://lore.kernel.org/r/20260326-x1e-csi2-phy-v5-0-0c0fc7f5c01b@linaro.org
- Link to v10: https://lore.kernel.org/r/20260316-b4-linux-next-25-03-13-dtsi-x1e80100-camss-v10-0-fdfe984fe941@linaro.org
Changes in v10:
- compat simple-mfd added to CAMSS allows probing sub-nodes.
The other way to do this would be simple-bus however, CAMSS
is really a collection of devices in a block as opposed to a
discoverable bus.
- csiphy nodes are sub-nodes of CAMSS.
Sub-nodes as pointed out by Dmitry will allow us to show some love to
older platforms.
- Depends-on: https://lore.kernel.org/r/20260315-x1e-csi2-phy-v4-0-90c09203888d@linaro.org
- Link to v9: https://lore.kernel.org/r/20260226-b4-linux-next-25-03-13-dtsi-x1e80100-camss-v9-0-a59c3f037d0b@linaro.org
v9:
- Adds phy handles as optional nodes
- Adds minItems: 5 for iommu entries
I believe this should be acceptable as maxItems: 8 continues
to be valid
- Makes CAMSS-level rails optional for x1e
Similarly I think this should be OK as the legacy binding
is still valid it is simply optional instead of mandatory now
- Supports CSIPHY nodes adjacent to CAMSS while leaving
csiphy regs intact.
- Pushes dtsi drop to another series everything in this series
can go through linux-media
- Depends-on: https://lore.kernel.org/r/20260226-x1e-csi2-phy-v3-0-11e608759410@linaro.org
- Link to v8: https://lore.kernel.org/r/20260225-b4-linux-next-25-03-13-dtsi-x1e80100-camss-v8-0-95517393bcb2@linaro.org
v8:
- This version rebases on latest media-committers/next - bod
- Adds support for "combo-mode" PHYs in the YAML.
It will be possible to build out the code to support this later - Vlad
- Maintains the upstream model of connecting sensors to CSI decoders.
Every other upstream implementation does it this way so
CAMSS will do it this way too.
- Reduces the number of IOMMU entires in CAMSS to those required for
CSID, VFE/RDI/PIX respectively.
Including all of the IOMMUs implies we will also "stuff" CAMSS
with ever increasing lists of registers but a better approach
is to have individual nodes for functional blocks.
For example this series supports CSIPHy as a separate block
CCI is already a separate block - and we will add ICP, BPS, IPE
etc as additional standalone nodes.
camss@someaddr {
//existing bindings vfe, csid, csiphy go here
iommus = <just what's needed for this>;
};
bps@some_other_address {
iommus = <bps specific iommus>;
}
In particular this model will save us from going down the same
path as the vpu which has ended up tripping over the total size
an iommu entry may span.
Nobody really likes the legacy binding much so instead of
continuing to bludgeon more entries into it, I've conciously
not included BPS, IPE, ICP etc.
Depends-on: https://lore.kernel.org/r/20260225-x1e-csi2-phy-v2-0-7756edb67ea9@linaro.org
Link to v7: https://lore.kernel.org/r/20250711-b4-linux-next-25-03-13-dtsi-x1e80100-camss-v7-0-0bc5da82f526@linaro.org
Working tree: https://gitlab.com/Linaro/arm64-laptops/linux/-/tree/qcom-laptops-v6.19-rc8-camss?ref_type=heads
v7:
- Reimagine the PHYs as individual nodes.
A v1 of the schmea and driver for the CSI PHY has been published with
some review feedback from Rob Herring and Konrad Dybcio
https://lore.kernel.org/r/20250710-x1e-csi2-phy-v1-0-74acbb5b162b@linaro.org
Both the clock name changes from Rob and OPP changes suggested by Konrad
are _not_ yet present in this submission however stipulating to those
changes, I think publishing this v7 of the CAMSS/DT changes is warranted.
Its important to publish a whole view of changes for reviewers without
necessarily munging everything together in one sprawling series.
TL;DR I moved the PHY driver to its own series review comments there
are not reflected here yet but "shouldn't" have a big impact here.
- Having separate nodes in the DT for the PHYS allows for switching on PHYs
as we do for just about every other PHYs.
&csiphyX {
status = "okay";
};
We just list phys = <> in the core dtsi and enable the PHYs we want in
the platform dts.
- The level of code change in CAMSS itself turns out to be quite small.
Adding the PHY structure to the CSIPHY device
Differentiating the existing camss.c -> camss-csiphy.c init functions
A few new function pointers to facilitate parallel support of legacy
and new PHY interfaces.
- A key goal of this updated series is both to introduce a new PHY method
to CAMSS but to do it _only_ for a new SoC while taking care to ensure
that legacy CAMSS-PHY and legacy DT ABI continues to work.
This is a key point coming from the DT people which I've slowly imbibed
and hopefully succeeded in implementing.
- In addition to the CRD both T14s and Slim7x are supported.
I have the Inspirion14 working and the XPS but since we haven't landed
the Inspirion upstream yet, I've chosen to hold off on the XPS too.
- There is another proposal on the list to make PHY devices as sub-devices
I believe having those separate like most of our other PHYs
is the more appropriate way to go.
Similarly there is less code change to the CAMSS driver with this change.
Finally I believe we should contine to have endpoints go from the sensor
to CAMSS not the PHY as CAMSS' CSI decoder is the consumer of the data
not the PHY.
- Working tree: https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/x1e80100-6.16-rcX-dell-inspiron14-camss-ov02c10-ov02e10-audio-iris-phy-v3
- Link to v6: https://lore.kernel.org/r/20250314-b4-linux-next-25-03-13-dtsi-x1e80100-camss-v6-0-edcb2cfc3122@linaro.org
v6:
- Removes 'A phandle to an OPP node describing' per Krzysztof's comment
on patch #1
- Drops Fixes: from patch #1 - Krzysztof
- The ordering of opp description MXC and MMXC is kept as it matches the
power-domain ordering - Krzysztof/bod
- Link to v5: https://lore.kernel.org/r/20250313-b4-linux-next-25-03-13-dtsi-x1e80100-camss-v5-0-846c9a6493a8@linaro.org
v5:
- Picks up a Fixes: that is a valid precursor for this series - Vlad
- Applies RB from Vlad
- Drops "cam" prefix in interconnect names - Krzysztof/Vlad
- Amends sorting of regs, clocks consistent with recent 8550 - Depeng/Vlad
- Link to v4: https://lore.kernel.org/r/20250119-b4-linux-next-24-11-18-dtsi-x1e80100-camss-v4-0-c2964504131c@linaro.org
v4:
- Applies RB from Konrad
- Adds the second CCI I2C bus to CCI commit log description.
I previously considered leaving out the always on pins but, decided
to include them in the end and forgot to align the commit log.
- Alphabetises the camcc.h included in the dtsi. - Vlad
- Link to v3: https://lore.kernel.org/r/20250102-b4-linux-next-24-11-18-dtsi-x1e80100-camss-v3-0-cb66d55d20cc@linaro.org
v3:
- Fixes ordering of headers in dtsi - Vlad
- Changes camcc to always on - Vlad
- Applies RB as indicated - Krzysztof, Konrad
- Link to v2: https://lore.kernel.org/r/20241227-b4-linux-next-24-11-18-dtsi-x1e80100-camss-v2-0-06fdd5a7d5bb@linaro.org
v2:
I've gone through each comment and implemented each suggestion since IMO
they were all good/correct comments.
Detail:
- Moves x1e80100 camcc to its own yaml - Krzysztof
- csid_wrapper comes first because it is the most relevant
register set - configuring all CSID blocks subordinate to it - bod, Krzysztof
- Fixes missing commit log - Krz
- Updates to latest format established @ sc7280 - bod
- Includes CSID lite which I forgot to add @ v1 - Konrad, bod
- Replaces static ICC parameters with defines - Konrad
- Drops newlines between x and x-name - Konrad
- Drops redundant iommu extents - Konrad
- Leaves CAMERA_AHB_CLK as-is - Kronrad, Dmitry
Link: https://lore.kernel.org/r/3f1a960f-062e-4c29-ae7d-126192f35a8b@oss.qualcomm.com
- Interrupt EDGE_RISING - Vladimir
- Implements suggested regulator names pending refactor to PHY API - Vladimir
- Drop slow_ahb_src clock - Vladimir
Link to v1:
https://lore.kernel.org/r/20241119-b4-linux-next-24-11-18-dtsi-x1e80100-camss-v1-0-54075d75f654@linaro.org
Working tree:
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/arm-laptop/wip/x1e80100-6.13-rc3
v1:
This series adds dt-bindings and dtsi for CAMSS on x1e80100.
The primary difference between x1e80100 and other platforms is a new VFE
and CSID pair at version 680.
Some minor driver churn will be required to support outside of the new VFE
and CSID blocks but nothing too major.
The CAMCC in this silicon requires two, not one power-domain requiring
either this fix I've proposed here or something similar:
https://lore.kernel.org/linux-arm-msm/bad60452-41b3-42fb-acba-5b7226226d2d@linaro.org/T/#t
That doesn't gate adoption of the binding description though.
A working tree in progress can be found here:
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/x1e80100-6.12-rc7+camss?ref_type=heads
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
Bryan O'Donoghue (7):
dt-bindings: media: qcom,x1e80100-camss: Add optional PHY handle definitions
dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints
dt-bindings: media: qcom,x1e80100-camss: Describe iommu entries
media: qcom: camss: Add support to populate sub-devices
media: qcom: camss: Add legacy_phy flag to SoC definition structures
media: qcom: camss: Add support for PHY API devices
media: qcom: camss: Drop legacy PHY descriptions from x1e
.../bindings/media/qcom,x1e80100-camss.yaml | 128 ++++++++++++--
drivers/media/platform/qcom/camss/Kconfig | 1 +
drivers/media/platform/qcom/camss/camss-csiphy.c | 189 +++++++++++++++++++--
drivers/media/platform/qcom/camss/camss-csiphy.h | 7 +
drivers/media/platform/qcom/camss/camss.c | 127 ++++++++------
drivers/media/platform/qcom/camss/camss.h | 1 +
6 files changed, 374 insertions(+), 79 deletions(-)
---
base-commit: b11ac7d13db32d3a232e11b09491647179a2df5f
change-id: 20250313-b4-linux-next-25-03-13-dtsi-x1e80100-camss-1506f74bbd3a
Best regards,
--
Bryan O'Donoghue <bryan.odonoghue@linaro.org>
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v11 1/7] dt-bindings: media: qcom,x1e80100-camss: Add optional PHY handle definitions
2026-03-26 1:28 [PATCH v11 0/7] Add dt-bindings and PHY updates for CAMSS on x1e80100 silicon Bryan O'Donoghue
@ 2026-03-26 1:28 ` Bryan O'Donoghue
2026-03-26 2:46 ` Rob Herring (Arm)
` (2 more replies)
2026-03-26 1:28 ` [PATCH v11 2/7] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints Bryan O'Donoghue
` (5 subsequent siblings)
6 siblings, 3 replies; 13+ messages in thread
From: Bryan O'Donoghue @ 2026-03-26 1:28 UTC (permalink / raw)
To: Bjorn Andersson, Michael Turquette, Stephen Boyd, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Robert Foss, Todor Tomov,
Mauro Carvalho Chehab, Konrad Dybcio, Vladimir Zapolskiy,
Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Bryan O'Donoghue, Krzysztof Kozlowski
Add optional PHY handle definitions. This will allow for supporting both
legacy PHY definitions as well as supporting the optional new handle based
approach.
Drop the legacy high-level 0p8 and 1p2 supplies as required, each PHY has
its own individual rails. The old binding is still valid but with
individual nodes we define the rails in the CSIPHY sub-nodes.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
.../bindings/media/qcom,x1e80100-camss.yaml | 33 ++++++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
index 2d1662ef522b7..c17b9757b2c86 100644
--- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
+++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
@@ -39,6 +39,14 @@ properties:
- const: vfe_lite0
- const: vfe_lite1
+ '#address-cells':
+ const: 2
+
+ '#size-cells':
+ const: 2
+
+ ranges: true
+
clocks:
maxItems: 29
@@ -126,6 +134,16 @@ properties:
description:
1.2V supply to a PHY.
+ phys:
+ maxItems: 4
+
+ phy-names:
+ items:
+ - const: csiphy0
+ - const: csiphy1
+ - const: csiphy2
+ - const: csiphy4
+
ports:
$ref: /schemas/graph.yaml#/properties/ports
@@ -158,6 +176,14 @@ properties:
required:
- data-lanes
+patternProperties:
+ "^phy@[0-9a-f]+$":
+ $ref: /schemas/phy/qcom,x1e80100-csi2-phy.yaml
+ unevaluatedProperties: false
+
+ "^opp-table(-.*)?$":
+ type: object
+
required:
- compatible
- reg
@@ -171,8 +197,6 @@ required:
- iommus
- power-domains
- power-domain-names
- - vdd-csiphy-0p8-supply
- - vdd-csiphy-1p2-supply
- ports
additionalProperties: false
@@ -184,6 +208,7 @@ examples:
#include <dt-bindings/clock/qcom,x1e80100-camcc.h>
#include <dt-bindings/interconnect/qcom,icc.h>
#include <dt-bindings/interconnect/qcom,x1e80100-rpmh.h>
+ #include <dt-bindings/phy/phy.h>
#include <dt-bindings/power/qcom-rpmpd.h>
soc {
@@ -229,6 +254,10 @@ examples:
"vfe_lite0",
"vfe_lite1";
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
clocks = <&camcc CAM_CC_CAMNOC_AXI_NRT_CLK>,
<&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
<&camcc CAM_CC_CORE_AHB_CLK>,
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v11 2/7] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints
2026-03-26 1:28 [PATCH v11 0/7] Add dt-bindings and PHY updates for CAMSS on x1e80100 silicon Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 1/7] dt-bindings: media: qcom,x1e80100-camss: Add optional PHY handle definitions Bryan O'Donoghue
@ 2026-03-26 1:28 ` Bryan O'Donoghue
2026-03-26 1:51 ` Vladimir Zapolskiy
2026-03-26 1:28 ` [PATCH v11 3/7] dt-bindings: media: qcom,x1e80100-camss: Describe iommu entries Bryan O'Donoghue
` (4 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Bryan O'Donoghue @ 2026-03-26 1:28 UTC (permalink / raw)
To: Bjorn Andersson, Michael Turquette, Stephen Boyd, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Robert Foss, Todor Tomov,
Mauro Carvalho Chehab, Konrad Dybcio, Vladimir Zapolskiy,
Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Bryan O'Donoghue, Krzysztof Kozlowski, Christopher Obbard
Qualcomm CSI2 PHYs support a mode where two sensors may be attached to the
one CSIPHY.
When we have one endpoint we may have
- DPHY 1, 2 or 4 data lanes + 1 clock lane
- CPHY 3 wire data lane
When we have two endpoints this indicates the special fixed combo-mode.
- DPHY endpoint0 => 2+1 and endpoint1 => 1+1 data-lane/clock-lane combination.
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
.../bindings/media/qcom,x1e80100-camss.yaml | 69 ++++++++++++++++++++--
1 file changed, 65 insertions(+), 4 deletions(-)
diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
index c17b9757b2c86..f44138f522bba 100644
--- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
+++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
@@ -148,7 +148,8 @@ properties:
$ref: /schemas/graph.yaml#/properties/ports
description:
- CSI input ports.
+ CSI input ports. Supports either standard single sensor mode or
+ Qualcomm's combo mode with one sensor in 2x1 + 1x1 data-lane, clock-lane mode.
patternProperties:
"^port@[0-3]$":
@@ -156,26 +157,86 @@ properties:
unevaluatedProperties: false
description:
- Input port for receiving CSI data from a CSIPHY.
+ Input port for receiving CSI data.
properties:
- endpoint:
+ endpoint@0:
$ref: video-interfaces.yaml#
unevaluatedProperties: false
+ description:
+ Endpoint for receiving a single sensor input (or first leg of combo).
+
properties:
data-lanes:
minItems: 1
- maxItems: 4
+ maxItems: 4 # Base max allows 4 (for D-PHY)
+
+ clock-lanes:
+ maxItems: 1
bus-type:
enum:
- 1 # MEDIA_BUS_TYPE_CSI2_CPHY
- 4 # MEDIA_BUS_TYPE_CSI2_DPHY
+ endpoint@1:
+ $ref: video-interfaces.yaml#
+ unevaluatedProperties: false
+
+ description:
+ Endpoint for receiving the second leg of a combo sensor input.
+
+ properties:
+ data-lanes:
+ maxItems: 1
+
+ clock-lanes:
+ maxItems: 1
+
+ bus-type:
+ const: 4 # Combo is D-PHY specific
+
required:
- data-lanes
+ allOf:
+ # Case 1: Combo Mode (endpoint@1 is present)
+ # If endpoint@1 exists, we restrict endpoint@0 to 2 lanes (D-PHY split)
+ - if:
+ required:
+ - endpoint@1
+ then:
+ properties:
+ endpoint@0:
+ properties:
+ data-lanes:
+ minItems: 2
+ maxItems: 2
+ bus-type:
+ const: 4
+ endpoint@1:
+ properties:
+ data-lanes:
+ minItems: 1
+ maxItems: 1
+ bus-type:
+ const: 4
+
+ # Case 2: Single Mode (endpoint@1 is missing)
+ # We explicitly allow up to 4 lanes here to cover the D-PHY use case.
+ - if:
+ not:
+ required:
+ - endpoint@1
+ then:
+ properties:
+ endpoint@0:
+ properties:
+ data-lanes:
+ minItems: 1
+ maxItems: 4
+
patternProperties:
"^phy@[0-9a-f]+$":
$ref: /schemas/phy/qcom,x1e80100-csi2-phy.yaml
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v11 3/7] dt-bindings: media: qcom,x1e80100-camss: Describe iommu entries
2026-03-26 1:28 [PATCH v11 0/7] Add dt-bindings and PHY updates for CAMSS on x1e80100 silicon Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 1/7] dt-bindings: media: qcom,x1e80100-camss: Add optional PHY handle definitions Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 2/7] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints Bryan O'Donoghue
@ 2026-03-26 1:28 ` Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 4/7] media: qcom: camss: Add support to populate sub-devices Bryan O'Donoghue
` (3 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Bryan O'Donoghue @ 2026-03-26 1:28 UTC (permalink / raw)
To: Bjorn Andersson, Michael Turquette, Stephen Boyd, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Robert Foss, Todor Tomov,
Mauro Carvalho Chehab, Konrad Dybcio, Vladimir Zapolskiy,
Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Bryan O'Donoghue, Krzysztof Kozlowski, Krzysztof Kozlowski
The original iommus list included entries for ICP and BPS/IPE S1
contexts. Only the five S1 HLOS stream IDs are required by the CAMSS
ISP hardware: IFE/IFE_LITE read and write, SFE read and write, and
CDM IFE. The remaining entries serve other hardware blocks which will
be described in their own nodes as support is added.
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
.../bindings/media/qcom,x1e80100-camss.yaml | 26 ++++++++++++++++------
1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
index f44138f522bba..d2763977a494d 100644
--- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
+++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
@@ -112,7 +112,22 @@ properties:
- const: sf_icp_mnoc
iommus:
- maxItems: 8
+ oneOf:
+ - items:
+ - description: S1 HLOS IFE and IFE_LITE non-protected read
+ - description: S1 HLOS IFE and IFE_LITE non-protected write
+ - description: S1 HLOS SFE non-protected read
+ - description: S1 HLOS SFE non-protected write
+ - description: S1 HLOS CDM IFE non-protected
+ - description: Legacy slot 0 - do not use
+ - description: Legacy slot 1 - do not use
+ - description: Legacy slot 2 - do not use
+ - items:
+ - description: S1 HLOS IFE and IFE_LITE non-protected read
+ - description: S1 HLOS IFE and IFE_LITE non-protected write
+ - description: S1 HLOS SFE non-protected read
+ - description: S1 HLOS SFE non-protected write
+ - description: S1 HLOS CDM IFE non-protected
power-domains:
items:
@@ -422,13 +437,10 @@ examples:
"sf_icp_mnoc";
iommus = <&apps_smmu 0x800 0x60>,
+ <&apps_smmu 0x820 0x60>,
+ <&apps_smmu 0x840 0x60>,
<&apps_smmu 0x860 0x60>,
- <&apps_smmu 0x1800 0x60>,
- <&apps_smmu 0x1860 0x60>,
- <&apps_smmu 0x18e0 0x00>,
- <&apps_smmu 0x1980 0x20>,
- <&apps_smmu 0x1900 0x00>,
- <&apps_smmu 0x19a0 0x20>;
+ <&apps_smmu 0x18a0 0x0>;
power-domains = <&camcc CAM_CC_IFE_0_GDSC>,
<&camcc CAM_CC_IFE_1_GDSC>,
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v11 4/7] media: qcom: camss: Add support to populate sub-devices
2026-03-26 1:28 [PATCH v11 0/7] Add dt-bindings and PHY updates for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (2 preceding siblings ...)
2026-03-26 1:28 ` [PATCH v11 3/7] dt-bindings: media: qcom,x1e80100-camss: Describe iommu entries Bryan O'Donoghue
@ 2026-03-26 1:28 ` Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 5/7] media: qcom: camss: Add legacy_phy flag to SoC definition structures Bryan O'Donoghue
` (2 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Bryan O'Donoghue @ 2026-03-26 1:28 UTC (permalink / raw)
To: Bjorn Andersson, Michael Turquette, Stephen Boyd, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Robert Foss, Todor Tomov,
Mauro Carvalho Chehab, Konrad Dybcio, Vladimir Zapolskiy,
Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Bryan O'Donoghue, Krzysztof Kozlowski
Use devm_of_platform_populate() to populate subs in the tree.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
drivers/media/platform/qcom/camss/camss.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
index 00b87fd9afbd8..66ea057291f6d 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -16,6 +16,7 @@
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/of_graph.h>
+#include <linux/of_platform.h>
#include <linux/pm_runtime.h>
#include <linux/pm_domain.h>
#include <linux/slab.h>
@@ -4964,6 +4965,8 @@ static int camss_probe(struct platform_device *pdev)
if (!camss)
return -ENOMEM;
+ devm_of_platform_populate(dev);
+
camss->res = of_device_get_match_data(dev);
atomic_set(&camss->ref_count, 0);
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v11 5/7] media: qcom: camss: Add legacy_phy flag to SoC definition structures
2026-03-26 1:28 [PATCH v11 0/7] Add dt-bindings and PHY updates for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (3 preceding siblings ...)
2026-03-26 1:28 ` [PATCH v11 4/7] media: qcom: camss: Add support to populate sub-devices Bryan O'Donoghue
@ 2026-03-26 1:28 ` Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 6/7] media: qcom: camss: Add support for PHY API devices Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 7/7] media: qcom: camss: Drop legacy PHY descriptions from x1e Bryan O'Donoghue
6 siblings, 0 replies; 13+ messages in thread
From: Bryan O'Donoghue @ 2026-03-26 1:28 UTC (permalink / raw)
To: Bjorn Andersson, Michael Turquette, Stephen Boyd, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Robert Foss, Todor Tomov,
Mauro Carvalho Chehab, Konrad Dybcio, Vladimir Zapolskiy,
Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Bryan O'Donoghue, Krzysztof Kozlowski, Christopher Obbard
Flag which SoCs have legacy - builtin PHY code. This will be useful in
subsequent patches to inform PHY bringup logic if legacy bindings are
available.
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Tested-by: Christopher Obbard <christopher.obbard@linaro.org>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
drivers/media/platform/qcom/camss/camss.c | 17 +++++++++++++++++
drivers/media/platform/qcom/camss/camss.h | 1 +
2 files changed, 18 insertions(+)
diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
index 66ea057291f6d..2749895152e32 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -5107,6 +5107,7 @@ static void camss_remove(struct platform_device *pdev)
static const struct camss_resources msm8916_resources = {
.version = CAMSS_8x16,
+ .legacy_phy = true,
.csiphy_res = csiphy_res_8x16,
.csid_res = csid_res_8x16,
.ispif_res = &ispif_res_8x16,
@@ -5118,6 +5119,7 @@ static const struct camss_resources msm8916_resources = {
static const struct camss_resources msm8939_resources = {
.version = CAMSS_8x39,
+ .legacy_phy = true,
.csiphy_res = csiphy_res_8x39,
.csid_res = csid_res_8x39,
.ispif_res = &ispif_res_8x39,
@@ -5129,6 +5131,7 @@ static const struct camss_resources msm8939_resources = {
static const struct camss_resources msm8953_resources = {
.version = CAMSS_8x53,
+ .legacy_phy = true,
.icc_res = icc_res_8x53,
.icc_path_num = ARRAY_SIZE(icc_res_8x53),
.csiphy_res = csiphy_res_8x96,
@@ -5142,6 +5145,7 @@ static const struct camss_resources msm8953_resources = {
static const struct camss_resources msm8996_resources = {
.version = CAMSS_8x96,
+ .legacy_phy = true,
.csiphy_res = csiphy_res_8x96,
.csid_res = csid_res_8x96,
.ispif_res = &ispif_res_8x96,
@@ -5153,6 +5157,7 @@ static const struct camss_resources msm8996_resources = {
static const struct camss_resources qcm2290_resources = {
.version = CAMSS_2290,
+ .legacy_phy = true,
.csiphy_res = csiphy_res_2290,
.csid_res = csid_res_2290,
.vfe_res = vfe_res_2290,
@@ -5166,6 +5171,7 @@ static const struct camss_resources qcm2290_resources = {
static const struct camss_resources qcs8300_resources = {
.version = CAMSS_8300,
.pd_name = "top",
+ .legacy_phy = true,
.csiphy_res = csiphy_res_8300,
.csid_res = csid_res_8775p,
.csid_wrapper_res = &csid_wrapper_res_sm8550,
@@ -5180,6 +5186,7 @@ static const struct camss_resources qcs8300_resources = {
static const struct camss_resources sa8775p_resources = {
.version = CAMSS_8775P,
.pd_name = "top",
+ .legacy_phy = true,
.csiphy_res = csiphy_res_8775p,
.csid_res = csid_res_8775p,
.csid_wrapper_res = &csid_wrapper_res_sm8550,
@@ -5193,6 +5200,7 @@ static const struct camss_resources sa8775p_resources = {
static const struct camss_resources sdm660_resources = {
.version = CAMSS_660,
+ .legacy_phy = true,
.csiphy_res = csiphy_res_660,
.csid_res = csid_res_660,
.ispif_res = &ispif_res_660,
@@ -5204,6 +5212,7 @@ static const struct camss_resources sdm660_resources = {
static const struct camss_resources sdm670_resources = {
.version = CAMSS_845,
+ .legacy_phy = true,
.csiphy_res = csiphy_res_670,
.csid_res = csid_res_670,
.vfe_res = vfe_res_670,
@@ -5215,6 +5224,7 @@ static const struct camss_resources sdm670_resources = {
static const struct camss_resources sdm845_resources = {
.version = CAMSS_845,
.pd_name = "top",
+ .legacy_phy = true,
.csiphy_res = csiphy_res_845,
.csid_res = csid_res_845,
.vfe_res = vfe_res_845,
@@ -5226,6 +5236,7 @@ static const struct camss_resources sdm845_resources = {
static const struct camss_resources sm6150_resources = {
.version = CAMSS_6150,
.pd_name = "top",
+ .legacy_phy = true,
.csiphy_res = csiphy_res_sm6150,
.csid_res = csid_res_sm6150,
.vfe_res = vfe_res_sm6150,
@@ -5239,6 +5250,7 @@ static const struct camss_resources sm6150_resources = {
static const struct camss_resources sm8250_resources = {
.version = CAMSS_8250,
.pd_name = "top",
+ .legacy_phy = true,
.csiphy_res = csiphy_res_8250,
.csid_res = csid_res_8250,
.vfe_res = vfe_res_8250,
@@ -5252,6 +5264,7 @@ static const struct camss_resources sm8250_resources = {
static const struct camss_resources sc8280xp_resources = {
.version = CAMSS_8280XP,
.pd_name = "top",
+ .legacy_phy = true,
.csiphy_res = csiphy_res_sc8280xp,
.csid_res = csid_res_sc8280xp,
.ispif_res = NULL,
@@ -5266,6 +5279,7 @@ static const struct camss_resources sc8280xp_resources = {
static const struct camss_resources sc7280_resources = {
.version = CAMSS_7280,
.pd_name = "top",
+ .legacy_phy = true,
.csiphy_res = csiphy_res_7280,
.csid_res = csid_res_7280,
.vfe_res = vfe_res_7280,
@@ -5279,6 +5293,7 @@ static const struct camss_resources sc7280_resources = {
static const struct camss_resources sm8550_resources = {
.version = CAMSS_8550,
.pd_name = "top",
+ .legacy_phy = true,
.csiphy_res = csiphy_res_8550,
.csid_res = csid_res_8550,
.vfe_res = vfe_res_8550,
@@ -5293,6 +5308,7 @@ static const struct camss_resources sm8550_resources = {
static const struct camss_resources sm8650_resources = {
.version = CAMSS_8650,
.pd_name = "top",
+ .legacy_phy = true,
.csiphy_res = csiphy_res_sm8650,
.csid_res = csid_res_sm8650,
.csid_wrapper_res = &csid_wrapper_res_sm8550,
@@ -5307,6 +5323,7 @@ static const struct camss_resources sm8650_resources = {
static const struct camss_resources x1e80100_resources = {
.version = CAMSS_X1E80100,
.pd_name = "top",
+ .legacy_phy = true,
.csiphy_res = csiphy_res_x1e80100,
.csid_res = csid_res_x1e80100,
.vfe_res = vfe_res_x1e80100,
diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/platform/qcom/camss/camss.h
index 6d048414c919e..24ec3ad7990e7 100644
--- a/drivers/media/platform/qcom/camss/camss.h
+++ b/drivers/media/platform/qcom/camss/camss.h
@@ -104,6 +104,7 @@ enum icc_count {
struct camss_resources {
enum camss_version version;
const char *pd_name;
+ const bool legacy_phy;
const struct camss_subdev_resources *csiphy_res;
const struct camss_subdev_resources *csid_res;
const struct camss_subdev_resources *ispif_res;
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v11 6/7] media: qcom: camss: Add support for PHY API devices
2026-03-26 1:28 [PATCH v11 0/7] Add dt-bindings and PHY updates for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (4 preceding siblings ...)
2026-03-26 1:28 ` [PATCH v11 5/7] media: qcom: camss: Add legacy_phy flag to SoC definition structures Bryan O'Donoghue
@ 2026-03-26 1:28 ` Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 7/7] media: qcom: camss: Drop legacy PHY descriptions from x1e Bryan O'Donoghue
6 siblings, 0 replies; 13+ messages in thread
From: Bryan O'Donoghue @ 2026-03-26 1:28 UTC (permalink / raw)
To: Bjorn Andersson, Michael Turquette, Stephen Boyd, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Robert Foss, Todor Tomov,
Mauro Carvalho Chehab, Konrad Dybcio, Vladimir Zapolskiy,
Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Bryan O'Donoghue, Krzysztof Kozlowski, Christopher Obbard
Add the ability to use a PHY pointer which interacts with the standard PHY
API.
In the first instance the code will try to use the new PHY interface. If no
PHYs are present in the DT then the legacy method will be attempted.
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Tested-by: Christopher Obbard <christopher.obbard@linaro.org>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
drivers/media/platform/qcom/camss/Kconfig | 1 +
drivers/media/platform/qcom/camss/camss-csiphy.c | 189 +++++++++++++++++++++--
drivers/media/platform/qcom/camss/camss-csiphy.h | 7 +
drivers/media/platform/qcom/camss/camss.c | 72 +++++++--
4 files changed, 239 insertions(+), 30 deletions(-)
diff --git a/drivers/media/platform/qcom/camss/Kconfig b/drivers/media/platform/qcom/camss/Kconfig
index 4eda48cb1adf0..1edc5e5a1829e 100644
--- a/drivers/media/platform/qcom/camss/Kconfig
+++ b/drivers/media/platform/qcom/camss/Kconfig
@@ -7,3 +7,4 @@ config VIDEO_QCOM_CAMSS
select VIDEO_V4L2_SUBDEV_API
select VIDEOBUF2_DMA_SG
select V4L2_FWNODE
+ select PHY_QCOM_MIPI_CSI2
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c
index 62623393f4144..478938165dd7b 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.c
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
@@ -7,12 +7,14 @@
* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
* Copyright (C) 2016-2018 Linaro Ltd.
*/
+#include <dt-bindings/phy/phy.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/of.h>
+#include <linux/phy/phy.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <media/media-entity.h>
@@ -131,10 +133,10 @@ static u8 csiphy_get_bpp(const struct csiphy_format_info *formats,
}
/*
- * csiphy_set_clock_rates - Calculate and set clock rates on CSIPHY module
+ * csiphy_set_clock_rates_legacy - Calculate and set clock rates on CSIPHY module
* @csiphy: CSIPHY device
*/
-static int csiphy_set_clock_rates(struct csiphy_device *csiphy)
+static int csiphy_set_clock_rates_legacy(struct csiphy_device *csiphy)
{
struct device *dev = csiphy->camss->dev;
s64 link_freq;
@@ -200,7 +202,7 @@ static int csiphy_set_clock_rates(struct csiphy_device *csiphy)
*
* Return 0 on success or a negative error code otherwise
*/
-static int csiphy_set_power(struct v4l2_subdev *sd, int on)
+static int csiphy_set_power_legacy(struct v4l2_subdev *sd, int on)
{
struct csiphy_device *csiphy = v4l2_get_subdevdata(sd);
struct device *dev = csiphy->camss->dev;
@@ -219,7 +221,7 @@ static int csiphy_set_power(struct v4l2_subdev *sd, int on)
return ret;
}
- ret = csiphy_set_clock_rates(csiphy);
+ ret = csiphy_set_clock_rates_legacy(csiphy);
if (ret < 0) {
regulator_bulk_disable(csiphy->num_supplies,
csiphy->supplies);
@@ -254,7 +256,7 @@ static int csiphy_set_power(struct v4l2_subdev *sd, int on)
}
/*
- * csiphy_stream_on - Enable streaming on CSIPHY module
+ * csiphy_stream_on_legacy - Enable streaming on CSIPHY module
* @csiphy: CSIPHY device
*
* Helper function to enable streaming on CSIPHY module.
@@ -262,7 +264,7 @@ static int csiphy_set_power(struct v4l2_subdev *sd, int on)
*
* Return 0 on success or a negative error code otherwise
*/
-static int csiphy_stream_on(struct csiphy_device *csiphy)
+static int csiphy_stream_on_legacy(struct csiphy_device *csiphy)
{
struct csiphy_config *cfg = &csiphy->cfg;
s64 link_freq;
@@ -306,11 +308,99 @@ static int csiphy_stream_on(struct csiphy_device *csiphy)
*
* Helper function to disable streaming on CSIPHY module
*/
-static void csiphy_stream_off(struct csiphy_device *csiphy)
+static void csiphy_stream_off_legacy(struct csiphy_device *csiphy)
{
csiphy->res->hw_ops->lanes_disable(csiphy, &csiphy->cfg);
}
+/*
+ * csiphy_stream_on - Enable streaming on CSIPHY module
+ * @csiphy: CSIPHY device
+ *
+ * Helper function to enable streaming on CSIPHY module.
+ * Main configuration of CSIPHY module is also done here.
+ *
+ * Return 0 on success or a negative error code otherwise
+ */
+static int csiphy_stream_on(struct csiphy_device *csiphy)
+{
+ u8 bpp = csiphy_get_bpp(csiphy->res->formats->formats, csiphy->res->formats->nformats,
+ csiphy->fmt[MSM_CSIPHY_PAD_SINK].code);
+ struct csiphy_lanes_cfg *lncfg = &csiphy->cfg.csi2->lane_cfg;
+ struct phy_configure_opts_mipi_dphy *dphy_cfg;
+ union phy_configure_opts dphy_opts = { 0 };
+ struct device *dev = csiphy->camss->dev;
+ u8 num_lanes = lncfg->num_data;
+ s64 link_freq;
+ int i;
+ int ret;
+
+ dphy_cfg = &dphy_opts.mipi_dphy;
+
+ link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes);
+
+ if (link_freq < 0) {
+ dev_err(dev,
+ "Cannot get CSI2 transmitter's link frequency\n");
+ return -EINVAL;
+ }
+
+ phy_mipi_dphy_get_default_config_for_hsclk(link_freq, num_lanes, dphy_cfg);
+
+ /* Set clock lane id and polarity */
+ dphy_cfg->clock_lane_position = lncfg->clk.pos;
+ dphy_cfg->clock_lane_polarity = lncfg->clk.pol;
+
+ /* Set data lane_mask and lane_polarities */
+ for (i = 0; i < num_lanes; i++) {
+ dphy_cfg->lane_positions[i] = lncfg->data[i].pos;
+ dphy_cfg->lane_polarities[i] = lncfg->data[i].pol;
+ }
+
+ phy_set_mode(csiphy->phy, PHY_MODE_MIPI_DPHY);
+
+ ret = phy_configure(csiphy->phy, &dphy_opts);
+ if (ret) {
+ dev_err(dev, "failed to configure MIPI D-PHY\n");
+ goto error;
+ }
+
+ return phy_power_on(csiphy->phy);
+
+error:
+ return ret;
+}
+
+/*
+ * csiphy_stream_off - Disable streaming on CSIPHY module
+ * @csiphy: CSIPHY device
+ *
+ * Helper function to disable streaming on CSIPHY module
+ */
+static void csiphy_stream_off(struct csiphy_device *csiphy)
+{
+ phy_power_off(csiphy->phy);
+}
+
+/*
+ * csiphy_set_stream - Enable/disable streaming on CSIPHY module
+ * @sd: CSIPHY V4L2 subdevice
+ * @enable: Requested streaming state
+ *
+ * Return 0 on success or a negative error code otherwise
+ */
+static int csiphy_set_stream_legacy(struct v4l2_subdev *sd, int enable)
+{
+ struct csiphy_device *csiphy = v4l2_get_subdevdata(sd);
+ int ret = 0;
+
+ if (enable)
+ ret = csiphy_stream_on_legacy(csiphy);
+ else
+ csiphy_stream_off_legacy(csiphy);
+
+ return ret;
+}
/*
* csiphy_set_stream - Enable/disable streaming on CSIPHY module
@@ -568,16 +658,16 @@ static bool csiphy_match_clock_name(const char *clock_name, const char *format,
}
/*
- * msm_csiphy_subdev_init - Initialize CSIPHY device structure and resources
+ * msm_csiphy_subdev_init_legacy - Initialize CSIPHY device structure and resources
* @csiphy: CSIPHY device
* @res: CSIPHY module resources table
* @id: CSIPHY module id
*
* Return 0 on success or a negative error code otherwise
*/
-int msm_csiphy_subdev_init(struct camss *camss,
- struct csiphy_device *csiphy,
- const struct camss_subdev_resources *res, u8 id)
+int msm_csiphy_subdev_init_legacy(struct camss *camss,
+ struct csiphy_device *csiphy,
+ const struct camss_subdev_resources *res, u8 id)
{
struct device *dev = camss->dev;
struct platform_device *pdev = to_platform_device(dev);
@@ -705,6 +795,60 @@ int msm_csiphy_subdev_init(struct camss *camss,
return ret;
}
+/*
+ * msm_csiphy_subdev_init - Initialize CSIPHY device structure and resources
+ * @csiphy: CSIPHY device
+ * @res: CSIPHY module resources table
+ * @id: CSIPHY module id
+ *
+ * Return 0 on success or a negative error code otherwise
+ */
+int msm_csiphy_subdev_init(struct camss *camss,
+ struct csiphy_device *csiphy,
+ const struct camss_subdev_resources *res, u8 id)
+{
+ struct device *dev = camss->dev;
+ struct of_phandle_args args;
+ int idx;
+ int ret;
+
+ snprintf(csiphy->name, ARRAY_SIZE(csiphy->name), "csiphy%d", id);
+
+ idx = of_property_match_string(dev->of_node, "phy-names", csiphy->name);
+ if (idx < 0) {
+ dev_err(dev, "%s not found\n", csiphy->name);
+ return idx;
+ }
+
+ ret = of_parse_phandle_with_args(dev->of_node, "phys", "#phy-cells", idx, &args);
+ if (ret < 0) {
+ dev_err(dev, "unable to parse phys args %s\n", csiphy->name);
+ return ret;
+ }
+
+ if (!of_device_is_available(args.np))
+ goto put_np;
+
+ csiphy->phy = devm_phy_get(dev, csiphy->name);
+ if (IS_ERR(csiphy->phy)) {
+ ret = PTR_ERR(csiphy->phy);
+ goto put_np;
+ }
+
+ csiphy->camss = camss;
+ csiphy->id = id;
+ csiphy->res = &res->csiphy;
+
+ ret = phy_init(csiphy->phy);
+ if (ret)
+ dev_err(dev, "phy %s init fail %d\n", csiphy->name, ret);
+
+put_np:
+ of_node_put(args.np);
+
+ return ret;
+}
+
/*
* csiphy_link_setup - Setup CSIPHY connections
* @entity: Pointer to media entity structure
@@ -739,8 +883,12 @@ static int csiphy_link_setup(struct media_entity *entity,
return 0;
}
-static const struct v4l2_subdev_core_ops csiphy_core_ops = {
- .s_power = csiphy_set_power,
+static const struct v4l2_subdev_core_ops csiphy_core_ops_legacy = {
+ .s_power = csiphy_set_power_legacy,
+};
+
+static const struct v4l2_subdev_video_ops csiphy_video_ops_legacy = {
+ .s_stream = csiphy_set_stream_legacy,
};
static const struct v4l2_subdev_video_ops csiphy_video_ops = {
@@ -754,8 +902,13 @@ static const struct v4l2_subdev_pad_ops csiphy_pad_ops = {
.set_fmt = csiphy_set_format,
};
+static const struct v4l2_subdev_ops csiphy_v4l2_ops_legacy = {
+ .core = &csiphy_core_ops_legacy,
+ .video = &csiphy_video_ops_legacy,
+ .pad = &csiphy_pad_ops,
+};
+
static const struct v4l2_subdev_ops csiphy_v4l2_ops = {
- .core = &csiphy_core_ops,
.video = &csiphy_video_ops,
.pad = &csiphy_pad_ops,
};
@@ -784,7 +937,11 @@ int msm_csiphy_register_entity(struct csiphy_device *csiphy,
struct device *dev = csiphy->camss->dev;
int ret;
- v4l2_subdev_init(sd, &csiphy_v4l2_ops);
+ if (IS_ERR(csiphy->phy))
+ v4l2_subdev_init(sd, &csiphy_v4l2_ops_legacy);
+ else
+ v4l2_subdev_init(sd, &csiphy_v4l2_ops);
+
sd->internal_ops = &csiphy_v4l2_internal_ops;
sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
snprintf(sd->name, ARRAY_SIZE(sd->name), "%s%d",
@@ -823,6 +980,8 @@ int msm_csiphy_register_entity(struct csiphy_device *csiphy,
*/
void msm_csiphy_unregister_entity(struct csiphy_device *csiphy)
{
+ if (!IS_ERR(csiphy->phy))
+ phy_exit(csiphy->phy);
v4l2_device_unregister_subdev(&csiphy->subdev);
media_entity_cleanup(&csiphy->subdev.entity);
}
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.h b/drivers/media/platform/qcom/camss/camss-csiphy.h
index 2d5054819df7f..25b803c06e8bf 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.h
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.h
@@ -12,6 +12,7 @@
#include <linux/clk.h>
#include <linux/interrupt.h>
+#include <linux/phy/phy.h>
#include <media/media-entity.h>
#include <media/v4l2-device.h>
#include <media/v4l2-mediabus.h>
@@ -95,6 +96,7 @@ struct csiphy_device_regs {
struct csiphy_device {
struct camss *camss;
+ struct phy *phy;
u8 id;
struct v4l2_subdev subdev;
struct media_pad pads[MSM_CSIPHY_PADS_NUM];
@@ -102,6 +104,7 @@ struct csiphy_device {
void __iomem *base_clk_mux;
u32 irq;
char irq_name[30];
+ char name[16];
struct camss_clock *clock;
bool *rate_set;
int nclocks;
@@ -116,6 +119,10 @@ struct csiphy_device {
struct camss_subdev_resources;
+int msm_csiphy_subdev_init_legacy(struct camss *camss,
+ struct csiphy_device *csiphy,
+ const struct camss_subdev_resources *res, u8 id);
+
int msm_csiphy_subdev_init(struct camss *camss,
struct csiphy_device *csiphy,
const struct camss_subdev_resources *res, u8 id);
diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
index 2749895152e32..224b5472d7771 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -4451,14 +4451,35 @@ static int camss_parse_endpoint_node(struct device *dev,
static int camss_parse_ports(struct camss *camss)
{
struct device *dev = camss->dev;
+ const struct camss_resources *res = camss->res;
struct fwnode_handle *fwnode = dev_fwnode(dev), *ep;
int ret;
fwnode_graph_for_each_endpoint(fwnode, ep) {
struct camss_async_subdev *csd;
+ struct fwnode_handle *remote;
+
+ if (!fwnode_device_is_available(ep))
+ continue;
+
+ if (res->legacy_phy) {
+ csd = v4l2_async_nf_add_fwnode_remote(&camss->notifier, ep,
+ typeof(*csd));
+ } else {
+ /*
+ * For non-legacy PHY, the CSIPHY is a separate device.
+ * Register the remote endpoint (CSIPHY's endpoint) as
+ * the async subdev, not the remote port parent.
+ */
+ remote = fwnode_graph_get_remote_endpoint(ep);
+ if (!remote)
+ continue;
+
+ csd = v4l2_async_nf_add_fwnode(&camss->notifier, remote,
+ struct camss_async_subdev);
+ fwnode_handle_put(remote);
+ }
- csd = v4l2_async_nf_add_fwnode_remote(&camss->notifier, ep,
- typeof(*csd));
if (IS_ERR(csd)) {
ret = PTR_ERR(csd);
goto err_cleanup;
@@ -4490,15 +4511,26 @@ static int camss_init_subdevices(struct camss *camss)
unsigned int i;
int ret;
- for (i = 0; i < camss->res->csiphy_num; i++) {
- ret = msm_csiphy_subdev_init(camss, &camss->csiphy[i],
- &res->csiphy_res[i],
- res->csiphy_res[i].csiphy.id);
- if (ret < 0) {
- dev_err(camss->dev,
- "Failed to init csiphy%d sub-device: %d\n",
- i, ret);
- return ret;
+ if (!res->legacy_phy) {
+ for (i = 0; i < camss->res->csiphy_num; i++) {
+ ret = msm_csiphy_subdev_init(camss, &camss->csiphy[i],
+ &res->csiphy_res[i],
+ res->csiphy_res[i].csiphy.id);
+ if (ret < 0)
+ return ret;
+ }
+ } else {
+ for (i = 0; i < camss->res->csiphy_num; i++) {
+ ret = msm_csiphy_subdev_init_legacy(camss, &camss->csiphy[i],
+ &res->csiphy_res[i],
+ res->csiphy_res[i].csiphy.id);
+ if (ret < 0) {
+ dev_err(camss->dev,
+ "Failed to init csiphy%d sub-device: %d\n",
+ i, ret);
+ return ret;
+ }
+ camss->csiphy[i].phy = ERR_PTR(-ENODEV);
}
}
@@ -4575,6 +4607,9 @@ static int camss_link_entities(struct camss *camss)
for (i = 0; i < camss->res->csiphy_num; i++) {
for (j = 0; j < camss->res->csid_num; j++) {
+ if (!camss->csiphy[i].phy)
+ continue;
+
ret = media_create_pad_link(&camss->csiphy[i].subdev.entity,
MSM_CSIPHY_PAD_SRC,
&camss->csid[j].subdev.entity,
@@ -4684,6 +4719,9 @@ static int camss_register_entities(struct camss *camss)
int ret;
for (i = 0; i < camss->res->csiphy_num; i++) {
+ if (!camss->csiphy[i].phy)
+ continue;
+
ret = msm_csiphy_register_entity(&camss->csiphy[i],
&camss->v4l2_dev);
if (ret < 0) {
@@ -4739,8 +4777,10 @@ static int camss_register_entities(struct camss *camss)
i = camss->res->csiphy_num;
err_reg_csiphy:
- for (i--; i >= 0; i--)
- msm_csiphy_unregister_entity(&camss->csiphy[i]);
+ for (i--; i >= 0; i--) {
+ if (camss->csiphy[i].phy)
+ msm_csiphy_unregister_entity(&camss->csiphy[i]);
+ }
return ret;
}
@@ -4755,8 +4795,10 @@ static void camss_unregister_entities(struct camss *camss)
{
unsigned int i;
- for (i = 0; i < camss->res->csiphy_num; i++)
- msm_csiphy_unregister_entity(&camss->csiphy[i]);
+ for (i = 0; i < camss->res->csiphy_num; i++) {
+ if (camss->csiphy[i].phy)
+ msm_csiphy_unregister_entity(&camss->csiphy[i]);
+ }
for (i = 0; i < camss->res->csid_num; i++)
msm_csid_unregister_entity(&camss->csid[i]);
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v11 7/7] media: qcom: camss: Drop legacy PHY descriptions from x1e
2026-03-26 1:28 [PATCH v11 0/7] Add dt-bindings and PHY updates for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (5 preceding siblings ...)
2026-03-26 1:28 ` [PATCH v11 6/7] media: qcom: camss: Add support for PHY API devices Bryan O'Donoghue
@ 2026-03-26 1:28 ` Bryan O'Donoghue
6 siblings, 0 replies; 13+ messages in thread
From: Bryan O'Donoghue @ 2026-03-26 1:28 UTC (permalink / raw)
To: Bjorn Andersson, Michael Turquette, Stephen Boyd, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Robert Foss, Todor Tomov,
Mauro Carvalho Chehab, Konrad Dybcio, Vladimir Zapolskiy,
Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Bryan O'Donoghue, Krzysztof Kozlowski, Christopher Obbard
x1e is the first CAMSS SoC to use the new PHY interface. Drop the redundant
legacy CSIPHY descriptions.
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Tested-by: Christopher Obbard <christopher.obbard@linaro.org>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
drivers/media/platform/qcom/camss/camss.c | 37 -------------------------------
1 file changed, 37 deletions(-)
diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
index 224b5472d7771..3b092560b5df5 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -3896,15 +3896,6 @@ static const struct resources_icc icc_res_sa8775p[] = {
static const struct camss_subdev_resources csiphy_res_x1e80100[] = {
/* CSIPHY0 */
{
- .regulators = {
- { .supply = "vdd-csiphy-0p8", .init_load_uA = 105000 },
- { .supply = "vdd-csiphy-1p2", .init_load_uA = 58900 }
- },
- .clock = { "csiphy0", "csiphy0_timer" },
- .clock_rate = { { 300000000, 400000000, 480000000 },
- { 266666667, 400000000 } },
- .reg = { "csiphy0" },
- .interrupt = { "csiphy0" },
.csiphy = {
.id = 0,
.hw_ops = &csiphy_ops_3ph_1_0,
@@ -3913,15 +3904,6 @@ static const struct camss_subdev_resources csiphy_res_x1e80100[] = {
},
/* CSIPHY1 */
{
- .regulators = {
- { .supply = "vdd-csiphy-0p8", .init_load_uA = 105000 },
- { .supply = "vdd-csiphy-1p2", .init_load_uA = 58900 }
- },
- .clock = { "csiphy1", "csiphy1_timer" },
- .clock_rate = { { 300000000, 400000000, 480000000 },
- { 266666667, 400000000 } },
- .reg = { "csiphy1" },
- .interrupt = { "csiphy1" },
.csiphy = {
.id = 1,
.hw_ops = &csiphy_ops_3ph_1_0,
@@ -3930,15 +3912,6 @@ static const struct camss_subdev_resources csiphy_res_x1e80100[] = {
},
/* CSIPHY2 */
{
- .regulators = {
- { .supply = "vdd-csiphy-0p8", .init_load_uA = 105000 },
- { .supply = "vdd-csiphy-1p2", .init_load_uA = 58900 }
- },
- .clock = { "csiphy2", "csiphy2_timer" },
- .clock_rate = { { 300000000, 400000000, 480000000 },
- { 266666667, 400000000 } },
- .reg = { "csiphy2" },
- .interrupt = { "csiphy2" },
.csiphy = {
.id = 2,
.hw_ops = &csiphy_ops_3ph_1_0,
@@ -3947,15 +3920,6 @@ static const struct camss_subdev_resources csiphy_res_x1e80100[] = {
},
/* CSIPHY4 */
{
- .regulators = {
- { .supply = "vdd-csiphy-0p8", .init_load_uA = 105000 },
- { .supply = "vdd-csiphy-1p2", .init_load_uA = 58900 }
- },
- .clock = { "csiphy4", "csiphy4_timer" },
- .clock_rate = { { 300000000, 400000000, 480000000 },
- { 266666667, 400000000 } },
- .reg = { "csiphy4" },
- .interrupt = { "csiphy4" },
.csiphy = {
.id = 4,
.hw_ops = &csiphy_ops_3ph_1_0,
@@ -5365,7 +5329,6 @@ static const struct camss_resources sm8650_resources = {
static const struct camss_resources x1e80100_resources = {
.version = CAMSS_X1E80100,
.pd_name = "top",
- .legacy_phy = true,
.csiphy_res = csiphy_res_x1e80100,
.csid_res = csid_res_x1e80100,
.vfe_res = vfe_res_x1e80100,
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v11 2/7] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints
2026-03-26 1:28 ` [PATCH v11 2/7] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints Bryan O'Donoghue
@ 2026-03-26 1:51 ` Vladimir Zapolskiy
2026-03-26 2:08 ` Bryan O'Donoghue
0 siblings, 1 reply; 13+ messages in thread
From: Vladimir Zapolskiy @ 2026-03-26 1:51 UTC (permalink / raw)
To: Bryan O'Donoghue, Bjorn Andersson, Michael Turquette,
Stephen Boyd, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Robert Foss, Todor Tomov, Mauro Carvalho Chehab, Konrad Dybcio,
Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski, Christopher Obbard
On 3/26/26 03:28, Bryan O'Donoghue wrote:
> Qualcomm CSI2 PHYs support a mode where two sensors may be attached to the
> one CSIPHY.
>
> When we have one endpoint we may have
> - DPHY 1, 2 or 4 data lanes + 1 clock lane
> - CPHY 3 wire data lane
>
> When we have two endpoints this indicates the special fixed combo-mode.
> - DPHY endpoint0 => 2+1 and endpoint1 => 1+1 data-lane/clock-lane combination.
>
> Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
> .../bindings/media/qcom,x1e80100-camss.yaml | 69 ++++++++++++++++++++--
> 1 file changed, 65 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> index c17b9757b2c86..f44138f522bba 100644
> --- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> +++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> @@ -148,7 +148,8 @@ properties:
> $ref: /schemas/graph.yaml#/properties/ports
>
> description:
> - CSI input ports.
> + CSI input ports. Supports either standard single sensor mode or
> + Qualcomm's combo mode with one sensor in 2x1 + 1x1 data-lane, clock-lane mode.
>
> patternProperties:
> "^port@[0-3]$":
> @@ -156,26 +157,86 @@ properties:
> unevaluatedProperties: false
>
> description:
> - Input port for receiving CSI data from a CSIPHY.
> + Input port for receiving CSI data.
>
> properties:
> - endpoint:
> + endpoint@0:
> $ref: video-interfaces.yaml#
> unevaluatedProperties: false
>
> + description:
> + Endpoint for receiving a single sensor input (or first leg of combo).
> +
> properties:
> data-lanes:
> minItems: 1
> - maxItems: 4
> + maxItems: 4 # Base max allows 4 (for D-PHY)
> +
> + clock-lanes:
> + maxItems: 1
>
> bus-type:
> enum:
> - 1 # MEDIA_BUS_TYPE_CSI2_CPHY
> - 4 # MEDIA_BUS_TYPE_CSI2_DPHY
>
> + endpoint@1:
> + $ref: video-interfaces.yaml#
> + unevaluatedProperties: false
> +
> + description:
> + Endpoint for receiving the second leg of a combo sensor input.
> +
> + properties:
> + data-lanes:
> + maxItems: 1
> +
> + clock-lanes:
> + maxItems: 1
> +
> + bus-type:
> + const: 4 # Combo is D-PHY specific
> +
It's unclear why both 'bus-type' and 'phys' cell argument are needed
at the same time, they are equal and thus one of two is redundant.
--
Best wishes,
Vladimir
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v11 2/7] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints
2026-03-26 1:51 ` Vladimir Zapolskiy
@ 2026-03-26 2:08 ` Bryan O'Donoghue
0 siblings, 0 replies; 13+ messages in thread
From: Bryan O'Donoghue @ 2026-03-26 2:08 UTC (permalink / raw)
To: Vladimir Zapolskiy, Bjorn Andersson, Michael Turquette,
Stephen Boyd, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Robert Foss, Todor Tomov, Mauro Carvalho Chehab, Konrad Dybcio,
Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski, Christopher Obbard
On 26/03/2026 01:51, Vladimir Zapolskiy wrote:
> On 3/26/26 03:28, Bryan O'Donoghue wrote:
>> Qualcomm CSI2 PHYs support a mode where two sensors may be attached to
>> the
>> one CSIPHY.
>>
>> When we have one endpoint we may have
>> - DPHY 1, 2 or 4 data lanes + 1 clock lane
>> - CPHY 3 wire data lane
>>
>> When we have two endpoints this indicates the special fixed combo-mode.
>> - DPHY endpoint0 => 2+1 and endpoint1 => 1+1 data-lane/clock-lane
>> combination.
>>
>> Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
>> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
>> ---
>> .../bindings/media/qcom,x1e80100-camss.yaml | 69 ++++++++++++
>> ++++++++--
>> 1 file changed, 65 insertions(+), 4 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-
>> camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-
>> camss.yaml
>> index c17b9757b2c86..f44138f522bba 100644
>> --- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
>> +++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
>> @@ -148,7 +148,8 @@ properties:
>> $ref: /schemas/graph.yaml#/properties/ports
>> description:
>> - CSI input ports.
>> + CSI input ports. Supports either standard single sensor mode or
>> + Qualcomm's combo mode with one sensor in 2x1 + 1x1 data-lane,
>> clock-lane mode.
>> patternProperties:
>> "^port@[0-3]$":
>> @@ -156,26 +157,86 @@ properties:
>> unevaluatedProperties: false
>> description:
>> - Input port for receiving CSI data from a CSIPHY.
>> + Input port for receiving CSI data.
>> properties:
>> - endpoint:
>> + endpoint@0:
>> $ref: video-interfaces.yaml#
>> unevaluatedProperties: false
>> + description:
>> + Endpoint for receiving a single sensor input (or first
>> leg of combo).
>> +
>> properties:
>> data-lanes:
>> minItems: 1
>> - maxItems: 4
>> + maxItems: 4 # Base max allows 4 (for D-PHY)
>> +
>> + clock-lanes:
>> + maxItems: 1
>> bus-type:
>> enum:
>> - 1 # MEDIA_BUS_TYPE_CSI2_CPHY
>> - 4 # MEDIA_BUS_TYPE_CSI2_DPHY
>> + endpoint@1:
>> + $ref: video-interfaces.yaml#
>> + unevaluatedProperties: false
>> +
>> + description:
>> + Endpoint for receiving the second leg of a combo sensor
>> input.
>> +
>> + properties:
>> + data-lanes:
>> + maxItems: 1
>> +
>> + clock-lanes:
>> + maxItems: 1
>> +
>> + bus-type:
>> + const: 4 # Combo is D-PHY specific
>> +
>
> It's unclear why both 'bus-type' and 'phys' cell argument are needed
> at the same time, they are equal and thus one of two is redundant.
>
bus-type lives on the CAMSS controller endpoint. It tells the V4L2
fwnode parser (v4l2_fwnode_endpoint_parse) how to interpret the endpoint
properties — DPHY has data-lanes + clock-lanes, CPHY has trios.
PHY phandle cell lives on the phys reference. It tells the PHY driver
which electrical mode to configure
---
bod
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v11 1/7] dt-bindings: media: qcom,x1e80100-camss: Add optional PHY handle definitions
2026-03-26 1:28 ` [PATCH v11 1/7] dt-bindings: media: qcom,x1e80100-camss: Add optional PHY handle definitions Bryan O'Donoghue
@ 2026-03-26 2:46 ` Rob Herring (Arm)
2026-03-26 7:33 ` Krzysztof Kozlowski
2026-03-26 7:34 ` Krzysztof Kozlowski
2 siblings, 0 replies; 13+ messages in thread
From: Rob Herring (Arm) @ 2026-03-26 2:46 UTC (permalink / raw)
To: Bryan O'Donoghue
Cc: linux-clk, Robert Foss, Konrad Dybcio, Michael Turquette,
Conor Dooley, linux-kernel, Vladimir Zapolskiy, Stephen Boyd,
linux-media, Krzysztof Kozlowski, Mauro Carvalho Chehab,
Bryan O'Donoghue, linux-arm-msm, devicetree,
Krzysztof Kozlowski, Todor Tomov, Bjorn Andersson
On Thu, 26 Mar 2026 01:28:29 +0000, Bryan O'Donoghue wrote:
> Add optional PHY handle definitions. This will allow for supporting both
> legacy PHY definitions as well as supporting the optional new handle based
> approach.
>
> Drop the legacy high-level 0p8 and 1p2 supplies as required, each PHY has
> its own individual rails. The old binding is still valid but with
> individual nodes we define the rails in the CSIPHY sub-nodes.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
> .../bindings/media/qcom,x1e80100-camss.yaml | 33 ++++++++++++++++++++--
> 1 file changed, 31 insertions(+), 2 deletions(-)
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml: Unresolvable reference: /schemas/phy/qcom,x1e80100-csi2-phy.yaml
doc reference errors (make refcheckdocs):
See https://patchwork.kernel.org/project/devicetree/patch/20260326-b4-linux-next-25-03-13-dtsi-x1e80100-camss-v11-1-5b93415be6dd@linaro.org
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v11 1/7] dt-bindings: media: qcom,x1e80100-camss: Add optional PHY handle definitions
2026-03-26 1:28 ` [PATCH v11 1/7] dt-bindings: media: qcom,x1e80100-camss: Add optional PHY handle definitions Bryan O'Donoghue
2026-03-26 2:46 ` Rob Herring (Arm)
@ 2026-03-26 7:33 ` Krzysztof Kozlowski
2026-03-26 7:34 ` Krzysztof Kozlowski
2 siblings, 0 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2026-03-26 7:33 UTC (permalink / raw)
To: Bryan O'Donoghue
Cc: Bjorn Andersson, Michael Turquette, Stephen Boyd, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Robert Foss, Todor Tomov,
Mauro Carvalho Chehab, Konrad Dybcio, Vladimir Zapolskiy,
Bryan O'Donoghue, linux-arm-msm, linux-clk, devicetree,
linux-kernel, linux-media
On Thu, Mar 26, 2026 at 01:28:29AM +0000, Bryan O'Donoghue wrote:
> Add optional PHY handle definitions. This will allow for supporting both
> legacy PHY definitions as well as supporting the optional new handle based
> approach.
>
> Drop the legacy high-level 0p8 and 1p2 supplies as required, each PHY has
> its own individual rails. The old binding is still valid but with
> individual nodes we define the rails in the CSIPHY sub-nodes.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
> .../bindings/media/qcom,x1e80100-camss.yaml | 33 ++++++++++++++++++++--
> 1 file changed, 31 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> index 2d1662ef522b7..c17b9757b2c86 100644
> --- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> +++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> @@ -39,6 +39,14 @@ properties:
> - const: vfe_lite0
> - const: vfe_lite1
>
> + '#address-cells':
> + const: 2
> +
> + '#size-cells':
> + const: 2
> +
> + ranges: true
> +
> clocks:
> maxItems: 29
>
> @@ -126,6 +134,16 @@ properties:
> description:
> 1.2V supply to a PHY.
>
> + phys:
> + maxItems: 4
> +
> + phy-names:
> + items:
> + - const: csiphy0
> + - const: csiphy1
> + - const: csiphy2
> + - const: csiphy4
> +
> ports:
> $ref: /schemas/graph.yaml#/properties/ports
>
> @@ -158,6 +176,14 @@ properties:
> required:
> - data-lanes
>
> +patternProperties:
> + "^phy@[0-9a-f]+$":
Use consistent quotes, either " or '
> + $ref: /schemas/phy/qcom,x1e80100-csi2-phy.yaml
> + unevaluatedProperties: false
> +
> + "^opp-table(-.*)?$":
Look at other code - this is just opp-table in properties.
> + type: object
> +
> required:
> - compatible
> - reg
> @@ -171,8 +197,6 @@ required:
> - iommus
> - power-domains
> - power-domain-names
> - - vdd-csiphy-0p8-supply
> - - vdd-csiphy-1p2-supply
> - ports
>
> additionalProperties: false
> @@ -184,6 +208,7 @@ examples:
> #include <dt-bindings/clock/qcom,x1e80100-camcc.h>
> #include <dt-bindings/interconnect/qcom,icc.h>
> #include <dt-bindings/interconnect/qcom,x1e80100-rpmh.h>
> + #include <dt-bindings/phy/phy.h>
Unused?
> #include <dt-bindings/power/qcom-rpmpd.h>
>
> soc {
> @@ -229,6 +254,10 @@ examples:
> "vfe_lite0",
> "vfe_lite1";
>
> + #address-cells = <2>;
> + #size-cells = <2>;
> + ranges;
opp-table, phys, phy-names and further also child node.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v11 1/7] dt-bindings: media: qcom,x1e80100-camss: Add optional PHY handle definitions
2026-03-26 1:28 ` [PATCH v11 1/7] dt-bindings: media: qcom,x1e80100-camss: Add optional PHY handle definitions Bryan O'Donoghue
2026-03-26 2:46 ` Rob Herring (Arm)
2026-03-26 7:33 ` Krzysztof Kozlowski
@ 2026-03-26 7:34 ` Krzysztof Kozlowski
2 siblings, 0 replies; 13+ messages in thread
From: Krzysztof Kozlowski @ 2026-03-26 7:34 UTC (permalink / raw)
To: Bryan O'Donoghue
Cc: Bjorn Andersson, Michael Turquette, Stephen Boyd, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Robert Foss, Todor Tomov,
Mauro Carvalho Chehab, Konrad Dybcio, Vladimir Zapolskiy,
Bryan O'Donoghue, linux-arm-msm, linux-clk, devicetree,
linux-kernel, linux-media
On Thu, Mar 26, 2026 at 01:28:29AM +0000, Bryan O'Donoghue wrote:
>
> +patternProperties:
> + "^phy@[0-9a-f]+$":
> + $ref: /schemas/phy/qcom,x1e80100-csi2-phy.yaml
Ah, and this does not pass tests. Use compatible syntax from MSM display
bindings (mdss).
> + unevaluatedProperties: false
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2026-03-26 7:34 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-26 1:28 [PATCH v11 0/7] Add dt-bindings and PHY updates for CAMSS on x1e80100 silicon Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 1/7] dt-bindings: media: qcom,x1e80100-camss: Add optional PHY handle definitions Bryan O'Donoghue
2026-03-26 2:46 ` Rob Herring (Arm)
2026-03-26 7:33 ` Krzysztof Kozlowski
2026-03-26 7:34 ` Krzysztof Kozlowski
2026-03-26 1:28 ` [PATCH v11 2/7] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints Bryan O'Donoghue
2026-03-26 1:51 ` Vladimir Zapolskiy
2026-03-26 2:08 ` Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 3/7] dt-bindings: media: qcom,x1e80100-camss: Describe iommu entries Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 4/7] media: qcom: camss: Add support to populate sub-devices Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 5/7] media: qcom: camss: Add legacy_phy flag to SoC definition structures Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 6/7] media: qcom: camss: Add support for PHY API devices Bryan O'Donoghue
2026-03-26 1:28 ` [PATCH v11 7/7] media: qcom: camss: Drop legacy PHY descriptions from x1e Bryan O'Donoghue
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox