* [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon
@ 2026-02-25 15:11 Bryan O'Donoghue
2026-02-25 15:11 ` [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address Bryan O'Donoghue
` (17 more replies)
0 siblings, 18 replies; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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, Konrad Dybcio
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 (18):
dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address
dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints
dt-bindings: media: qcom,x1e80100-camss: Reduce iommus to five
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
arm64: dts: qcom: x1e80100: Add CAMCC block definition
arm64: dts: qcom: x1e80100: Add CCI definitions
arm64: dts: qcom: x1e80100: Add MIPI CSI PHY nodes
arm64: dts: qcom: x1e80100: Add CAMSS block definition
arm64: dts: qcom: x1e80100-crd: Add pm8010 CRD pmic,id=m regulators
arm64: dts: qcom: x1e80100-crd: Add ov08x40 RGB sensor on CSIPHY4
arm64: dts: qcom: x1e80100-t14s: Add pm8010 camera PMIC with voltage levels for IR and RGB camera
arm64: dts: qcom: x1e80100-t14s: Add on ov02c10 RGB sensor on CSIPHY4
arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add pm8010 camera PMIC with voltage levels for IR and RGB camera
arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add ov02c10 RGB sensor on CSIPHY4
arm64: dts: qcom: x1e80100-dell-inspiron14-7441: Switch on CAMSS RGB sensor
.../bindings/media/qcom,x1e80100-camss.yaml | 170 ++++----
arch/arm64/boot/dts/qcom/hamoa.dtsi | 453 +++++++++++++++++++++
arch/arm64/boot/dts/qcom/x1-crd.dtsi | 106 +++++
arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi | 61 +++
.../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi | 136 +++++++
.../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 128 ++++++
drivers/media/platform/qcom/camss/Kconfig | 1 +
drivers/media/platform/qcom/camss/camss-csiphy.c | 185 ++++++++-
drivers/media/platform/qcom/camss/camss-csiphy.h | 7 +
drivers/media/platform/qcom/camss/camss.c | 124 +++---
drivers/media/platform/qcom/camss/camss.h | 1 +
11 files changed, 1228 insertions(+), 144 deletions(-)
---
base-commit: f69743819496c1b9ff12960dfd67e7093b4f5ee9
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] 62+ messages in thread
* [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-26 7:04 ` Krzysztof Kozlowski
2026-02-27 22:01 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles Bryan O'Donoghue
` (16 subsequent siblings)
17 siblings, 2 replies; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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
The first register bank should be the 'main' register bank, in this case
the CSID wrapper register is responsible for muxing PHY/TPG inputs directly
to CSID or to other blocks such as the Sensor Front End.
commit f4792eeaa971 ("dt-bindings: media: qcom,x1e80100-camss: Fix isp unit address")
assigned the address to the first register bank "csid0" whereas what we
should have done is retained the unit address and moved csid_wrapper to be
the first listed bank.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
.../devicetree/bindings/media/qcom,x1e80100-camss.yaml | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
index 2d1662ef522b7..9aaed897f7e0e 100644
--- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
+++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
@@ -21,12 +21,12 @@ properties:
reg-names:
items:
+ - const: csid_wrapper
- const: csid0
- const: csid1
- const: csid2
- const: csid_lite0
- const: csid_lite1
- - const: csid_wrapper
- const: csiphy0
- const: csiphy1
- const: csiphy2
@@ -190,15 +190,15 @@ examples:
#address-cells = <2>;
#size-cells = <2>;
- camss: isp@acb7000 {
+ camss: isp@acb6000 {
compatible = "qcom,x1e80100-camss";
- reg = <0 0x0acb7000 0 0x2000>,
+ reg = <0 0x0acb6000 0 0x1000>,
+ <0 0x0acb7000 0 0x2000>,
<0 0x0acb9000 0 0x2000>,
<0 0x0acbb000 0 0x2000>,
<0 0x0acc6000 0 0x1000>,
<0 0x0acca000 0 0x1000>,
- <0 0x0acb6000 0 0x1000>,
<0 0x0ace4000 0 0x1000>,
<0 0x0ace6000 0 0x1000>,
<0 0x0ace8000 0 0x1000>,
@@ -211,12 +211,12 @@ examples:
<0 0x0acc7000 0 0x2000>,
<0 0x0accb000 0 0x2000>;
- reg-names = "csid0",
+ reg-names = "csid_wrapper",
+ "csid0",
"csid1",
"csid2",
"csid_lite0",
"csid_lite1",
- "csid_wrapper",
"csiphy0",
"csiphy1",
"csiphy2",
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
2026-02-25 15:11 ` [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-26 7:07 ` Krzysztof Kozlowski
2026-02-27 22:01 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 03/18] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints Bryan O'Donoghue
` (15 subsequent siblings)
17 siblings, 2 replies; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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
We currently do not have an upstream user of the x1e CAMSS schema which
allows us to make this the first platform to treat the CSI PHYs as separate
devices in much the same way as we treat the CCI block as separate devices.
Convert the embedded CSIPHY node data to simple phys = <> removing all of
the PHY specific stuff previously embedded.
I gave some serious thought to making the Test Pattern Generators TPGs into
PHY nodes also but, unlike the CSIPHYs the TPGs have no dedicated external
pins nor regulators.
The CSIPHYs OTOH have dedicated in-fact generally unmuxed pins on Qualcomm
SoCs and each CSIPHY has its own set of input power rails usually 0p8 and
1p2.
Instead of defining the CSIPHYs as children of the CAMSS block, we take the
same approach as the CCI/I2C bus dedicated to CAMSS and define the CSIPHYs
as their own nodes.
Remove the embedded CSIPHY specific data and give CAMSS regular,
bog-standard phys = <>;
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
.../bindings/media/qcom,x1e80100-camss.yaml | 84 ++++++----------------
1 file changed, 20 insertions(+), 64 deletions(-)
diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
index 9aaed897f7e0e..ff14a8248321e 100644
--- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
+++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
@@ -17,7 +17,7 @@ properties:
const: qcom,x1e80100-camss
reg:
- maxItems: 17
+ maxItems: 13
reg-names:
items:
@@ -27,10 +27,6 @@ properties:
- const: csid2
- const: csid_lite0
- const: csid_lite1
- - const: csiphy0
- - const: csiphy1
- - const: csiphy2
- - const: csiphy4
- const: csitpg0
- const: csitpg1
- const: csitpg2
@@ -40,7 +36,7 @@ properties:
- const: vfe_lite1
clocks:
- maxItems: 29
+ maxItems: 21
clock-names:
items:
@@ -55,14 +51,6 @@ properties:
- const: cphy_rx_clk_src
- const: csid
- const: csid_csiphy_rx
- - const: csiphy0
- - const: csiphy0_timer
- - const: csiphy1
- - const: csiphy1_timer
- - const: csiphy2
- - const: csiphy2_timer
- - const: csiphy4
- - const: csiphy4_timer
- const: gcc_axi_hf
- const: gcc_axi_sf
- const: vfe0
@@ -75,7 +63,7 @@ properties:
- const: vfe_lite_csid
interrupts:
- maxItems: 13
+ maxItems: 9
interrupt-names:
items:
@@ -84,15 +72,21 @@ properties:
- const: csid2
- const: csid_lite0
- const: csid_lite1
- - const: csiphy0
- - const: csiphy1
- - const: csiphy2
- - const: csiphy4
- const: vfe0
- const: vfe1
- const: vfe_lite0
- const: vfe_lite1
+ phys:
+ maxItems: 4
+
+ phy-names:
+ items:
+ - const: csiphy0
+ - const: csiphy1
+ - const: csiphy2
+ - const: csiphy4
+
interconnects:
maxItems: 4
@@ -118,14 +112,6 @@ properties:
- const: ife1
- const: top
- vdd-csiphy-0p8-supply:
- description:
- 0.8V supply to a PHY.
-
- vdd-csiphy-1p2-supply:
- description:
- 1.2V supply to a PHY.
-
ports:
$ref: /schemas/graph.yaml#/properties/ports
@@ -166,13 +152,13 @@ required:
- clock-names
- interrupts
- interrupt-names
+ - phys
+ - phy-names
- interconnects
- interconnect-names
- iommus
- power-domains
- power-domain-names
- - vdd-csiphy-0p8-supply
- - vdd-csiphy-1p2-supply
- ports
additionalProperties: false
@@ -199,10 +185,6 @@ examples:
<0 0x0acbb000 0 0x2000>,
<0 0x0acc6000 0 0x1000>,
<0 0x0acca000 0 0x1000>,
- <0 0x0ace4000 0 0x1000>,
- <0 0x0ace6000 0 0x1000>,
- <0 0x0ace8000 0 0x1000>,
- <0 0x0acec000 0 0x4000>,
<0 0x0acf6000 0 0x1000>,
<0 0x0acf7000 0 0x1000>,
<0 0x0acf8000 0 0x1000>,
@@ -217,10 +199,6 @@ examples:
"csid2",
"csid_lite0",
"csid_lite1",
- "csiphy0",
- "csiphy1",
- "csiphy2",
- "csiphy4",
"csitpg0",
"csitpg1",
"csitpg2",
@@ -240,14 +218,6 @@ examples:
<&camcc CAM_CC_CPHY_RX_CLK_SRC>,
<&camcc CAM_CC_CSID_CLK>,
<&camcc CAM_CC_CSID_CSIPHY_RX_CLK>,
- <&camcc CAM_CC_CSIPHY0_CLK>,
- <&camcc CAM_CC_CSI0PHYTIMER_CLK>,
- <&camcc CAM_CC_CSIPHY1_CLK>,
- <&camcc CAM_CC_CSI1PHYTIMER_CLK>,
- <&camcc CAM_CC_CSIPHY2_CLK>,
- <&camcc CAM_CC_CSI2PHYTIMER_CLK>,
- <&camcc CAM_CC_CSIPHY4_CLK>,
- <&camcc CAM_CC_CSI4PHYTIMER_CLK>,
<&gcc GCC_CAMERA_HF_AXI_CLK>,
<&gcc GCC_CAMERA_SF_AXI_CLK>,
<&camcc CAM_CC_IFE_0_CLK>,
@@ -270,14 +240,6 @@ examples:
"cphy_rx_clk_src",
"csid",
"csid_csiphy_rx",
- "csiphy0",
- "csiphy0_timer",
- "csiphy1",
- "csiphy1_timer",
- "csiphy2",
- "csiphy2_timer",
- "csiphy4",
- "csiphy4_timer",
"gcc_axi_hf",
"gcc_axi_sf",
"vfe0",
@@ -294,10 +256,6 @@ examples:
<GIC_SPI 431 IRQ_TYPE_EDGE_RISING>,
<GIC_SPI 468 IRQ_TYPE_EDGE_RISING>,
<GIC_SPI 359 IRQ_TYPE_EDGE_RISING>,
- <GIC_SPI 477 IRQ_TYPE_EDGE_RISING>,
- <GIC_SPI 478 IRQ_TYPE_EDGE_RISING>,
- <GIC_SPI 479 IRQ_TYPE_EDGE_RISING>,
- <GIC_SPI 122 IRQ_TYPE_EDGE_RISING>,
<GIC_SPI 465 IRQ_TYPE_EDGE_RISING>,
<GIC_SPI 467 IRQ_TYPE_EDGE_RISING>,
<GIC_SPI 469 IRQ_TYPE_EDGE_RISING>,
@@ -308,15 +266,16 @@ examples:
"csid2",
"csid_lite0",
"csid_lite1",
- "csiphy0",
- "csiphy1",
- "csiphy2",
- "csiphy4",
"vfe0",
"vfe1",
"vfe_lite0",
"vfe_lite1";
+ phys = <&csiphy0>, <&csiphy1>,
+ <&csiphy2>, <&csiphy4>;
+ phy-names = "csiphy0", "csiphy1",
+ "csiphy2", "csiphy4";
+
interconnects = <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_ONLY
&config_noc SLAVE_CAMERA_CFG QCOM_ICC_TAG_ACTIVE_ONLY>,
<&mmss_noc MASTER_CAMNOC_HF QCOM_ICC_TAG_ALWAYS
@@ -348,9 +307,6 @@ examples:
"ife1",
"top";
- vdd-csiphy-0p8-supply = <&csiphy_0p8_supply>;
- vdd-csiphy-1p2-supply = <&csiphy_1p2_supply>;
-
ports {
#address-cells = <1>;
#size-cells = <0>;
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 03/18] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
2026-02-25 15:11 ` [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address Bryan O'Donoghue
2026-02-25 15:11 ` [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:01 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 04/18] dt-bindings: media: qcom,x1e80100-camss: Reduce iommus to five Bryan O'Donoghue
` (14 subsequent siblings)
17 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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
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.
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 ff14a8248321e..462b1355c9fb7 100644
--- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
+++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
@@ -116,7 +116,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]$":
@@ -124,26 +125,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
+
required:
- compatible
- reg
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 04/18] dt-bindings: media: qcom,x1e80100-camss: Reduce iommus to five
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (2 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 03/18] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-26 7:08 ` Krzysztof Kozlowski
2026-02-27 22:02 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 05/18] media: qcom: camss: Add legacy_phy flag to SoC definition structures Bryan O'Donoghue
` (13 subsequent siblings)
17 siblings, 2 replies; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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
Rather than bury the BPS and IPE inside of the CAMSS block we can define
them like the CCI/I2C and CSIPHY as their own individual devices.
Remove the IPE and BPS iommu entries from the main CAMSS yaml. There is no
upstream user of these iommu entries right now so this is safe to do.
We will instead include these iommus in the BPS and IPE device nodes
instead of jamming them into the existing CAMSS binding.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
index 462b1355c9fb7..d39013d4a83e1 100644
--- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
+++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
@@ -98,7 +98,7 @@ properties:
- const: sf_icp_mnoc
iommus:
- maxItems: 8
+ maxItems: 5
power-domains:
items:
@@ -353,11 +353,8 @@ examples:
iommus = <&apps_smmu 0x800 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>;
power-domains = <&camcc CAM_CC_IFE_0_GDSC>,
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 05/18] media: qcom: camss: Add legacy_phy flag to SoC definition structures
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (3 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 04/18] dt-bindings: media: qcom,x1e80100-camss: Reduce iommus to five Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:02 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 06/18] media: qcom: camss: Add support for PHY API devices Bryan O'Donoghue
` (12 subsequent siblings)
17 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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
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.
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 00b87fd9afbd8..5fb5ad87e1671 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -5104,6 +5104,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,
@@ -5115,6 +5116,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,
@@ -5126,6 +5128,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,
@@ -5139,6 +5142,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,
@@ -5150,6 +5154,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,
@@ -5163,6 +5168,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,
@@ -5177,6 +5183,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,
@@ -5190,6 +5197,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,
@@ -5201,6 +5209,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,
@@ -5212,6 +5221,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,
@@ -5223,6 +5233,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,
@@ -5236,6 +5247,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,
@@ -5249,6 +5261,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,
@@ -5263,6 +5276,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,
@@ -5276,6 +5290,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,
@@ -5290,6 +5305,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,
@@ -5304,6 +5320,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] 62+ messages in thread
* [PATCH v8 06/18] media: qcom: camss: Add support for PHY API devices
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (4 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 05/18] media: qcom: camss: Add legacy_phy flag to SoC definition structures Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:03 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 07/18] media: qcom: camss: Drop legacy PHY descriptions from x1e Bryan O'Donoghue
` (11 subsequent siblings)
17 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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 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.
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 | 185 +++++++++++++++++++++--
drivers/media/platform/qcom/camss/camss-csiphy.h | 7 +
drivers/media/platform/qcom/camss/camss.c | 72 +++++++--
4 files changed, 235 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..59564284fd270 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,86 @@ 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);
+ u8 num_lanes = csiphy->cfg.csi2->lane_cfg.num_data;
+ struct phy_configure_opts_mipi_dphy *dphy_cfg;
+ union phy_configure_opts dphy_opts = { 0 };
+ struct device *dev = csiphy->camss->dev;
+ s64 link_freq;
+ 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);
+
+ 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 +645,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 +782,69 @@ 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;
+ u8 combo_mode;
+ 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;
+
+ combo_mode = args.args[0];
+ if (combo_mode != PHY_TYPE_DPHY) {
+ dev_err(dev, "%s mode %d not supported\n", csiphy->name, combo_mode);
+ ret = -ENOTSUPP;
+ 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->cfg.combo_mode = combo_mode;
+ 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 +879,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 +898,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 +933,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 +976,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 5fb5ad87e1671..b1737b5d52160 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -4450,14 +4450,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;
@@ -4489,15 +4510,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);
}
}
@@ -4574,6 +4606,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,
@@ -4683,6 +4718,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) {
@@ -4738,8 +4776,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;
}
@@ -4754,8 +4794,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] 62+ messages in thread
* [PATCH v8 07/18] media: qcom: camss: Drop legacy PHY descriptions from x1e
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (5 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 06/18] media: qcom: camss: Add support for PHY API devices Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:03 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 08/18] arm64: dts: qcom: x1e80100: Add CAMCC block definition Bryan O'Donoghue
` (10 subsequent siblings)
17 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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
x1e is the first CAMSS SoC to use the new PHY interface. Drop the redundant
legacy CSIPHY descriptions.
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 b1737b5d52160..0ebe634f5d96b 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -3895,15 +3895,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,
@@ -3912,15 +3903,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,
@@ -3929,15 +3911,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,
@@ -3946,15 +3919,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,
@@ -5362,7 +5326,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] 62+ messages in thread
* [PATCH v8 08/18] arm64: dts: qcom: x1e80100: Add CAMCC block definition
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (6 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 07/18] media: qcom: camss: Drop legacy PHY descriptions from x1e Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:03 ` Christopher Obbard
2026-03-02 16:19 ` Konrad Dybcio
2026-02-25 15:11 ` [PATCH v8 09/18] arm64: dts: qcom: x1e80100: Add CCI definitions Bryan O'Donoghue
` (9 subsequent siblings)
17 siblings, 2 replies; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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, Konrad Dybcio
Add the CAMCC block for x1e80100. The x1e80100 CAMCC block is an iteration
of previous CAMCC blocks with the exception of having two required
power-domains not just one.
Reviewed-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
arch/arm64/boot/dts/qcom/hamoa.dtsi | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/hamoa.dtsi b/arch/arm64/boot/dts/qcom/hamoa.dtsi
index db65c392e6189..f96411f481305 100644
--- a/arch/arm64/boot/dts/qcom/hamoa.dtsi
+++ b/arch/arm64/boot/dts/qcom/hamoa.dtsi
@@ -6,6 +6,7 @@
#include <dt-bindings/clock/qcom,rpmh.h>
#include <dt-bindings/clock/qcom,sc8280xp-lpasscc.h>
#include <dt-bindings/clock/qcom,sm8450-videocc.h>
+#include <dt-bindings/clock/qcom,x1e80100-camcc.h>
#include <dt-bindings/clock/qcom,x1e80100-dispcc.h>
#include <dt-bindings/clock/qcom,x1e80100-gcc.h>
#include <dt-bindings/clock/qcom,x1e80100-gpucc.h>
@@ -5464,6 +5465,23 @@ videocc: clock-controller@aaf0000 {
#power-domain-cells = <1>;
};
+
+ camcc: clock-controller@ade0000 {
+ compatible = "qcom,x1e80100-camcc";
+ reg = <0 0x0ade0000 0 0x20000>;
+ clocks = <&gcc GCC_CAMERA_AHB_CLK>,
+ <&bi_tcxo_div2>,
+ <&bi_tcxo_ao_div2>,
+ <&sleep_clk>;
+ power-domains = <&rpmhpd RPMHPD_MXC>,
+ <&rpmhpd RPMHPD_MMCX>;
+ required-opps = <&rpmhpd_opp_low_svs>,
+ <&rpmhpd_opp_low_svs>;
+ #clock-cells = <1>;
+ #reset-cells = <1>;
+ #power-domain-cells = <1>;
+ };
+
mdss: display-subsystem@ae00000 {
compatible = "qcom,x1e80100-mdss";
reg = <0 0x0ae00000 0 0x1000>;
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 09/18] arm64: dts: qcom: x1e80100: Add CCI definitions
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (7 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 08/18] arm64: dts: qcom: x1e80100: Add CAMCC block definition Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:04 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 10/18] arm64: dts: qcom: x1e80100: Add MIPI CSI PHY nodes Bryan O'Donoghue
` (8 subsequent siblings)
17 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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, Konrad Dybcio
Add in two CCI buses.
One bus has two CCI bus master pinouts:
cci_i2c_sda0 = gpio101
cci_i2c_scl0 = gpio102
cci_i2c_sda1 = gpio103
cci_i2c_scl1 = gpio104
The second bus has two CCI bus master pinouts:
cci_i2c_sda2 = gpio105
cci_i2c_scl2 = gpio106
aon_cci_i2c_sda3 = gpio235
aon_cci_i2c_scl3 = gpio236
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
arch/arm64/boot/dts/qcom/hamoa.dtsi | 149 ++++++++++++++++++++++++++++++++++++
1 file changed, 149 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/hamoa.dtsi b/arch/arm64/boot/dts/qcom/hamoa.dtsi
index f96411f481305..38f9da6ad9ca5 100644
--- a/arch/arm64/boot/dts/qcom/hamoa.dtsi
+++ b/arch/arm64/boot/dts/qcom/hamoa.dtsi
@@ -5465,6 +5465,83 @@ videocc: clock-controller@aaf0000 {
#power-domain-cells = <1>;
};
+ cci0: cci@ac15000 {
+ compatible = "qcom,x1e80100-cci", "qcom,msm8996-cci";
+ reg = <0 0x0ac15000 0 0x1000>;
+
+ interrupts = <GIC_SPI 460 IRQ_TYPE_EDGE_RISING>;
+
+ clocks = <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
+ <&camcc CAM_CC_CPAS_AHB_CLK>,
+ <&camcc CAM_CC_CCI_0_CLK>;
+ clock-names = "camnoc_axi",
+ "cpas_ahb",
+ "cci";
+
+ power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
+
+ pinctrl-0 = <&cci0_default>;
+ pinctrl-1 = <&cci0_sleep>;
+ pinctrl-names = "default", "sleep";
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ status = "disabled";
+
+ cci0_i2c0: i2c-bus@0 {
+ reg = <0>;
+ clock-frequency = <1000000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
+ cci0_i2c1: i2c-bus@1 {
+ reg = <1>;
+ clock-frequency = <1000000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+ };
+
+ cci1: cci@ac16000 {
+ compatible = "qcom,x1e80100-cci", "qcom,msm8996-cci";
+ reg = <0 0x0ac16000 0 0x1000>;
+
+ interrupts = <GIC_SPI 271 IRQ_TYPE_EDGE_RISING>;
+
+ clocks = <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
+ <&camcc CAM_CC_CPAS_AHB_CLK>,
+ <&camcc CAM_CC_CCI_1_CLK>;
+ clock-names = "camnoc_axi",
+ "cpas_ahb",
+ "cci";
+
+ power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
+
+ pinctrl-0 = <&cci1_default>;
+ pinctrl-1 = <&cci1_sleep>;
+ pinctrl-names = "default", "sleep";
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ status = "disabled";
+
+ cci1_i2c0: i2c-bus@0 {
+ reg = <0>;
+ clock-frequency = <1000000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
+ cci1_i2c1: i2c-bus@1 {
+ reg = <1>;
+ clock-frequency = <1000000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+ };
camcc: clock-controller@ade0000 {
compatible = "qcom,x1e80100-camcc";
@@ -6116,6 +6193,78 @@ tlmm: pinctrl@f100000 {
gpio-ranges = <&tlmm 0 0 239>;
wakeup-parent = <&pdc>;
+ cci0_default: cci0-default-state {
+ cci0_i2c0_default: cci0-i2c0-default-pins {
+ /* cci_i2c_sda0, cci_i2c_scl0 */
+ pins = "gpio101", "gpio102";
+ function = "cci_i2c";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ cci0_i2c1_default: cci0-i2c1-default-pins {
+ /* cci_i2c_sda1, cci_i2c_scl1 */
+ pins = "gpio103", "gpio104";
+ function = "cci_i2c";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+ };
+
+ cci0_sleep: cci0-sleep-state {
+ cci0_i2c0_sleep: cci0-i2c0-sleep-pins {
+ /* cci_i2c_sda0, cci_i2c_scl0 */
+ pins = "gpio101", "gpio102";
+ function = "cci_i2c";
+ drive-strength = <2>;
+ bias-pull-down;
+ };
+
+ cci0_i2c1_sleep: cci0-i2c1-sleep-pins {
+ /* cci_i2c_sda1, cci_i2c_scl1 */
+ pins = "gpio103", "gpio104";
+ function = "cci_i2c";
+ drive-strength = <2>;
+ bias-pull-down;
+ };
+ };
+
+ cci1_default: cci1-default-state {
+ cci1_i2c0_default: cci1-i2c0-default-pins {
+ /* cci_i2c_sda2, cci_i2c_scl2 */
+ pins = "gpio105", "gpio106";
+ function = "cci_i2c";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ cci1_i2c1_default: cci1-i2c1-default-pins {
+ /* aon_cci_i2c_sda3, aon_cci_i2c_scl3 */
+ pins = "gpio235", "gpio236";
+ function = "aon_cci";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+ };
+
+ cci1_sleep: cci1-sleep-state {
+ cci1_i2c0_sleep: cci1-i2c0-sleep-pins {
+ /* cci_i2c_sda2, cci_i2c_scl2 */
+ pins = "gpio105", "gpio106";
+ function = "cci_i2c";
+ drive-strength = <2>;
+ bias-pull-down;
+ };
+
+ cci1_i2c1_sleep: cci1-i2c1-sleep-pins {
+ /* aon_cci_i2c_sda3, aon_cci_i2c_scl3 */
+ pins = "gpio235", "gpio236";
+ function = "aon_cci";
+ drive-strength = <2>;
+ bias-pull-down;
+ };
+ };
+
edp0_hpd_default: edp0-hpd-default-state {
pins = "gpio119";
function = "edp0_hot";
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 10/18] arm64: dts: qcom: x1e80100: Add MIPI CSI PHY nodes
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (8 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 09/18] arm64: dts: qcom: x1e80100: Add CCI definitions Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-26 7:11 ` Krzysztof Kozlowski
2026-02-27 22:04 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 11/18] arm64: dts: qcom: x1e80100: Add CAMSS block definition Bryan O'Donoghue
` (7 subsequent siblings)
17 siblings, 2 replies; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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 csiphy nodes for
- csiphy0
- csiphy1
- csiphy2
- csiphy4
The irregular naming of the PHYs comes directly from the hardware which for
whatever reason skipped csiphy3.
Separating the nodes from CAMSS as we have done with the sensor I2C bus aka
the CCI interface is justified since the CSIPHYs have their own pinouts and
voltage rails.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
arch/arm64/boot/dts/qcom/hamoa.dtsi | 115 ++++++++++++++++++++++++++++++++++++
1 file changed, 115 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/hamoa.dtsi b/arch/arm64/boot/dts/qcom/hamoa.dtsi
index 38f9da6ad9ca5..9c5ebe1b48ecd 100644
--- a/arch/arm64/boot/dts/qcom/hamoa.dtsi
+++ b/arch/arm64/boot/dts/qcom/hamoa.dtsi
@@ -707,6 +707,25 @@ smem_mem: smem@ffe00000 {
};
};
+ csiphy_opp_table: opp-table-csiphy {
+ compatible = "operating-points-v2";
+
+ opp-300000000 {
+ opp-hz = /bits/ 64 <300000000>;
+ required-opps = <&rpmhpd_opp_low_svs_d1>;
+ };
+
+ opp-400000000 {
+ opp-hz = /bits/ 64 <400000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ };
+
+ opp-480000000 {
+ opp-hz = /bits/ 64 <480000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ };
+ };
+
qup_opp_table_100mhz: opp-table-qup100mhz {
compatible = "operating-points-v2";
@@ -5543,6 +5562,102 @@ cci1_i2c1: i2c-bus@1 {
};
};
+ csiphy0: csiphy@ace4000 {
+ compatible = "qcom,x1e80100-csi2-phy";
+ reg = <0 0x0ace4000 0 0x2000>;
+
+ clocks = <&camcc CAM_CC_CSIPHY0_CLK>,
+ <&camcc CAM_CC_CSI0PHYTIMER_CLK>,
+ <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
+ <&camcc CAM_CC_CPAS_AHB_CLK>;
+ clock-names = "csiphy",
+ "csiphy_timer",
+ "camnoc_axi",
+ "cpas_ahb";
+
+ operating-points-v2 = <&csiphy_opp_table>;
+
+ interrupts = <GIC_SPI 477 IRQ_TYPE_EDGE_RISING>;
+
+ power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
+
+ #phy-cells = <1>;
+
+ status = "disabled";
+ };
+
+ csiphy1: csiphy@ace6000 {
+ compatible = "qcom,x1e80100-csi2-phy";
+ reg = <0 0x0ace6000 0 0x2000>;
+
+ clocks = <&camcc CAM_CC_CSIPHY1_CLK>,
+ <&camcc CAM_CC_CSI1PHYTIMER_CLK>,
+ <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
+ <&camcc CAM_CC_CPAS_AHB_CLK>;
+ clock-names = "csiphy",
+ "csiphy_timer",
+ "camnoc_axi",
+ "cpas_ahb";
+
+ operating-points-v2 = <&csiphy_opp_table>;
+
+ interrupts = <GIC_SPI 478 IRQ_TYPE_EDGE_RISING>;
+
+ power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
+
+ #phy-cells = <1>;
+
+ status = "disabled";
+ };
+
+ csiphy2: csiphy@ace8000 {
+ compatible = "qcom,x1e80100-csi2-phy";
+ reg = <0 0x0ace8000 0 0x2000>;
+
+ clocks = <&camcc CAM_CC_CSIPHY2_CLK>,
+ <&camcc CAM_CC_CSI2PHYTIMER_CLK>,
+ <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
+ <&camcc CAM_CC_CPAS_AHB_CLK>;
+ clock-names = "csiphy",
+ "csiphy_timer",
+ "camnoc_axi",
+ "cpas_ahb";
+
+ operating-points-v2 = <&csiphy_opp_table>;
+
+ interrupts = <GIC_SPI 479 IRQ_TYPE_EDGE_RISING>;
+
+ power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
+
+ #phy-cells = <1>;
+
+ status = "disabled";
+ };
+
+ csiphy4: csiphy@acec000 {
+ compatible = "qcom,x1e80100-csi2-phy";
+ reg = <0 0x0acec000 0 0x2000>;
+
+ clocks = <&camcc CAM_CC_CSIPHY4_CLK>,
+ <&camcc CAM_CC_CSI4PHYTIMER_CLK>,
+ <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
+ <&camcc CAM_CC_CPAS_AHB_CLK>;
+ clock-names = "csiphy",
+ "csiphy_timer",
+ "camnoc_axi",
+ "cpas_ahb";
+
+ operating-points-v2 = <&csiphy_opp_table>;
+
+ interrupts = <GIC_SPI 122 IRQ_TYPE_EDGE_RISING>;
+
+ power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
+
+ #phy-cells = <1>;
+
+ status = "disabled";
+ };
+
camcc: clock-controller@ade0000 {
compatible = "qcom,x1e80100-camcc";
reg = <0 0x0ade0000 0 0x20000>;
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 11/18] arm64: dts: qcom: x1e80100: Add CAMSS block definition
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (9 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 10/18] arm64: dts: qcom: x1e80100: Add MIPI CSI PHY nodes Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:05 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 12/18] arm64: dts: qcom: x1e80100-crd: Add pm8010 CRD pmic,id=m regulators Bryan O'Donoghue
` (6 subsequent siblings)
17 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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 dtsi to describe the xe180100 CAMSS block
4 x CSIPHY
3 x TPG
2 x CSID
2 x CSID Lite
2 x IFE
2 x IFE Lite
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
arch/arm64/boot/dts/qcom/hamoa.dtsi | 171 ++++++++++++++++++++++++++++++++++++
1 file changed, 171 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/hamoa.dtsi b/arch/arm64/boot/dts/qcom/hamoa.dtsi
index 9c5ebe1b48ecd..5fac814ce0f6b 100644
--- a/arch/arm64/boot/dts/qcom/hamoa.dtsi
+++ b/arch/arm64/boot/dts/qcom/hamoa.dtsi
@@ -16,6 +16,7 @@
#include <dt-bindings/interconnect/qcom,x1e80100-rpmh.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/mailbox/qcom-ipcc.h>
+#include <dt-bindings/phy/phy.h>
#include <dt-bindings/phy/phy-qcom-qmp.h>
#include <dt-bindings/power/qcom,rpmhpd.h>
#include <dt-bindings/power/qcom-rpmpd.h>
@@ -5562,6 +5563,176 @@ cci1_i2c1: i2c-bus@1 {
};
};
+ camss: isp@acb6000 {
+ compatible = "qcom,x1e80100-camss";
+
+ reg = <0 0x0acb6000 0 0x1000>,
+ <0 0x0acb7000 0 0x2000>,
+ <0 0x0acb9000 0 0x2000>,
+ <0 0x0acbb000 0 0x2000>,
+ <0 0x0acc6000 0 0x1000>,
+ <0 0x0acca000 0 0x1000>,
+ <0 0x0acf6000 0 0x1000>,
+ <0 0x0acf7000 0 0x1000>,
+ <0 0x0acf8000 0 0x1000>,
+ <0 0x0ac62000 0 0x4000>,
+ <0 0x0ac71000 0 0x4000>,
+ <0 0x0acc7000 0 0x2000>,
+ <0 0x0accb000 0 0x2000>;
+
+ reg-names = "csid_wrapper",
+ "csid0",
+ "csid1",
+ "csid2",
+ "csid_lite0",
+ "csid_lite1",
+ "csitpg0",
+ "csitpg1",
+ "csitpg2",
+ "vfe0",
+ "vfe1",
+ "vfe_lite0",
+ "vfe_lite1";
+
+ clocks = <&camcc CAM_CC_CAMNOC_AXI_NRT_CLK>,
+ <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
+ <&camcc CAM_CC_CORE_AHB_CLK>,
+ <&camcc CAM_CC_CPAS_AHB_CLK>,
+ <&camcc CAM_CC_CPAS_FAST_AHB_CLK>,
+ <&camcc CAM_CC_CPAS_IFE_0_CLK>,
+ <&camcc CAM_CC_CPAS_IFE_1_CLK>,
+ <&camcc CAM_CC_CPAS_IFE_LITE_CLK>,
+ <&camcc CAM_CC_CPHY_RX_CLK_SRC>,
+ <&camcc CAM_CC_CSID_CLK>,
+ <&camcc CAM_CC_CSID_CSIPHY_RX_CLK>,
+ <&gcc GCC_CAMERA_HF_AXI_CLK>,
+ <&gcc GCC_CAMERA_SF_AXI_CLK>,
+ <&camcc CAM_CC_IFE_0_CLK>,
+ <&camcc CAM_CC_IFE_0_FAST_AHB_CLK>,
+ <&camcc CAM_CC_IFE_1_CLK>,
+ <&camcc CAM_CC_IFE_1_FAST_AHB_CLK>,
+ <&camcc CAM_CC_IFE_LITE_CLK>,
+ <&camcc CAM_CC_IFE_LITE_AHB_CLK>,
+ <&camcc CAM_CC_IFE_LITE_CPHY_RX_CLK>,
+ <&camcc CAM_CC_IFE_LITE_CSID_CLK>;
+
+ clock-names = "camnoc_nrt_axi",
+ "camnoc_rt_axi",
+ "core_ahb",
+ "cpas_ahb",
+ "cpas_fast_ahb",
+ "cpas_vfe0",
+ "cpas_vfe1",
+ "cpas_vfe_lite",
+ "cphy_rx_clk_src",
+ "csid",
+ "csid_csiphy_rx",
+ "gcc_axi_hf",
+ "gcc_axi_sf",
+ "vfe0",
+ "vfe0_fast_ahb",
+ "vfe1",
+ "vfe1_fast_ahb",
+ "vfe_lite",
+ "vfe_lite_ahb",
+ "vfe_lite_cphy_rx",
+ "vfe_lite_csid";
+
+ interrupts = <GIC_SPI 464 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 466 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 431 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 468 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 359 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 465 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 467 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 469 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 360 IRQ_TYPE_EDGE_RISING>;
+
+ interrupt-names = "csid0",
+ "csid1",
+ "csid2",
+ "csid_lite0",
+ "csid_lite1",
+ "vfe0",
+ "vfe1",
+ "vfe_lite0",
+ "vfe_lite1";
+
+ interconnects = <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_ONLY
+ &config_noc SLAVE_CAMERA_CFG QCOM_ICC_TAG_ACTIVE_ONLY>,
+ <&mmss_noc MASTER_CAMNOC_HF QCOM_ICC_TAG_ALWAYS
+ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
+ <&mmss_noc MASTER_CAMNOC_SF QCOM_ICC_TAG_ALWAYS
+ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
+ <&mmss_noc MASTER_CAMNOC_ICP QCOM_ICC_TAG_ALWAYS
+ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>;
+ interconnect-names = "ahb",
+ "hf_mnoc",
+ "sf_mnoc",
+ "sf_icp_mnoc";
+
+ iommus = <&apps_smmu 0x800 0x60>,
+ <&apps_smmu 0x860 0x60>,
+ <&apps_smmu 0x1860 0x60>,
+ <&apps_smmu 0x18e0 0x00>,
+ <&apps_smmu 0x19a0 0x20>;
+
+ phys = <&csiphy0 PHY_TYPE_DPHY>, <&csiphy1 PHY_TYPE_DPHY>,
+ <&csiphy2 PHY_TYPE_DPHY>, <&csiphy4 PHY_TYPE_DPHY>;
+ phy-names = "csiphy0", "csiphy1",
+ "csiphy2", "csiphy4";
+
+ power-domains = <&camcc CAM_CC_IFE_0_GDSC>,
+ <&camcc CAM_CC_IFE_1_GDSC>,
+ <&camcc CAM_CC_TITAN_TOP_GDSC>;
+ power-domain-names = "ife0",
+ "ife1",
+ "top";
+
+ status = "disabled";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ camss_csiphy0_inep0: endpoint@0 {
+ reg = <0>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ camss_csiphy1_inep0: endpoint@0 {
+ reg = <0>;
+ };
+ };
+
+ port@2 {
+ reg = <2>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ camss_csiphy2_inep0: endpoint@0 {
+ reg = <0>;
+ };
+ };
+
+ port@3 {
+ reg = <3>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ camss_csiphy4_inep0: endpoint@0 {
+ reg = <0>;
+ };
+ };
+ };
+ };
+
csiphy0: csiphy@ace4000 {
compatible = "qcom,x1e80100-csi2-phy";
reg = <0 0x0ace4000 0 0x2000>;
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 12/18] arm64: dts: qcom: x1e80100-crd: Add pm8010 CRD pmic,id=m regulators
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (10 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 11/18] arm64: dts: qcom: x1e80100: Add CAMSS block definition Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:05 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 13/18] arm64: dts: qcom: x1e80100-crd: Add ov08x40 RGB sensor on CSIPHY4 Bryan O'Donoghue
` (5 subsequent siblings)
17 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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, Konrad Dybcio
Add pmic,id = m rpmh to regulator definitions. This regulator set provides
vreg_l3m_1p8 the regulator for the ov08x40 RGB sensor on the CRD.
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
arch/arm64/boot/dts/qcom/x1-crd.dtsi | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/x1-crd.dtsi b/arch/arm64/boot/dts/qcom/x1-crd.dtsi
index ded96fb43489b..c89f5ad0aed56 100644
--- a/arch/arm64/boot/dts/qcom/x1-crd.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1-crd.dtsi
@@ -865,6 +865,36 @@ vreg_l3j_0p8: ldo3 {
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
};
+
+ regulators-8 {
+ compatible = "qcom,pm8010-rpmh-regulators";
+ qcom,pmic-id = "m";
+
+ vdd-l1-l2-supply = <&vreg_s5j_1p2>;
+ vdd-l3-l4-supply = <&vreg_s4c_1p8>;
+ vdd-l7-supply = <&vreg_bob1>;
+
+ vreg_l3m_1p8: ldo3 {
+ regulator-name = "vreg_l3m_1p8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1808000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l4m_1p8: ldo4 {
+ regulator-name = "vreg_l4m_1p8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1808000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l7m_2p9: ldo7 {
+ regulator-name = "vreg_l7m_2p9";
+ regulator-min-microvolt = <2912000>;
+ regulator-max-microvolt = <2912000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+ };
};
&gpu {
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 13/18] arm64: dts: qcom: x1e80100-crd: Add ov08x40 RGB sensor on CSIPHY4
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (11 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 12/18] arm64: dts: qcom: x1e80100-crd: Add pm8010 CRD pmic,id=m regulators Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:06 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 14/18] arm64: dts: qcom: x1e80100-t14s: Add pm8010 camera PMIC with voltage levels for IR and RGB camera Bryan O'Donoghue
` (4 subsequent siblings)
17 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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
Define ov08x40 on cci1_i2c1. The RGB sensor appears on the AON CCI pins
connected to CSIPHY4 in four lane mode.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
arch/arm64/boot/dts/qcom/x1-crd.dtsi | 76 ++++++++++++++++++++++++++++++++++++
1 file changed, 76 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/x1-crd.dtsi b/arch/arm64/boot/dts/qcom/x1-crd.dtsi
index c89f5ad0aed56..d47404c71b80b 100644
--- a/arch/arm64/boot/dts/qcom/x1-crd.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1-crd.dtsi
@@ -6,6 +6,7 @@
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/gpio-keys.h>
#include <dt-bindings/input/input.h>
+#include <dt-bindings/phy/phy.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
@@ -901,6 +902,65 @@ &gpu {
status = "okay";
};
+&camss {
+ status = "okay";
+
+ ports {
+ /*
+ * port0 => csiphy0
+ * port1 => csiphy1
+ * port2 => csiphy2
+ * port3 => csiphy4
+ */
+ port@3 {
+ camss_csiphy4_inep0: endpoint@0 {
+ clock-lanes = <7>;
+ data-lanes = <0 1 2 3>;
+ remote-endpoint = <&ov08x40_ep>;
+ };
+ };
+ };
+};
+
+&cci1 {
+ status = "okay";
+};
+
+&cci1_i2c1 {
+ camera@36 {
+ compatible = "ovti,ov08x40";
+ reg = <0x36>;
+
+ reset-gpios = <&tlmm 237 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&cam_rgb_default>;
+ pinctrl-names = "default";
+
+ clocks = <&camcc CAM_CC_MCLK4_CLK>;
+ assigned-clocks = <&camcc CAM_CC_MCLK4_CLK>;
+ assigned-clock-rates = <19200000>;
+
+ orientation = <0>; /* front facing */
+
+ avdd-supply = <&vreg_l7b_2p8>;
+ dovdd-supply = <&vreg_l3m_1p8>;
+
+ port {
+ ov08x40_ep: endpoint {
+ data-lanes = <1 2 3 4>;
+ link-frequencies = /bits/ 64 <400000000>;
+ remote-endpoint = <&camss_csiphy4_inep0>;
+ };
+ };
+ };
+};
+
+&csiphy4 {
+ vdda-0p8-supply = <&vreg_l2c_0p8>;
+ vdda-1p2-supply = <&vreg_l1c_1p2>;
+
+ status = "okay";
+};
+
&i2c0 {
clock-frequency = <400000>;
@@ -1515,6 +1575,22 @@ &tlmm {
<44 4>, /* SPI (TPM) */
<238 1>; /* UFS Reset */
+ cam_rgb_default: cam-rgb-default-state {
+ mclk-pins {
+ pins = "gpio100";
+ function = "cam_aon";
+ drive-strength = <16>;
+ bias-disable;
+ };
+
+ reset-n-pins {
+ pins = "gpio237";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+ };
+
edp_reg_en: edp-reg-en-state {
pins = "gpio70";
function = "gpio";
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 14/18] arm64: dts: qcom: x1e80100-t14s: Add pm8010 camera PMIC with voltage levels for IR and RGB camera
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (12 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 13/18] arm64: dts: qcom: x1e80100-crd: Add ov08x40 RGB sensor on CSIPHY4 Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-25 15:11 ` [PATCH v8 15/18] arm64: dts: qcom: x1e80100-t14s: Add on ov02c10 RGB sensor on CSIPHY4 Bryan O'Donoghue
` (3 subsequent siblings)
17 siblings, 0 replies; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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 the PM8010 PMIC providing the following voltage rails:
vreg_l1m_r @ 1v2 IR sensor
vreg_l2m_r @ 1v2 RGB sensor
vreg_l3m_r @ 1v8 IR sensor
vreg_l4m_r @ 1v8 RGB sensor
vreg_l5m_r @ 2v8 IR sensor
vreg_l7m_r @ 2v8 RGB sensor
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
.../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi | 59 ++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
index 4d7fd51f370b7..ee49785c9d005 100644
--- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
@@ -562,6 +562,13 @@ vreg_l6b_1p8: ldo6 {
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
+ vreg_l7b_2p8: ldo7 {
+ regulator-name = "vreg_l7b_2p8";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
vreg_l8b_3p0: ldo8 {
regulator-name = "vreg_l8b_3p0";
regulator-min-microvolt = <3072000>;
@@ -805,6 +812,58 @@ vreg_l3j_0p8: ldo3 {
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
};
+
+ regulators-8 {
+ compatible = "qcom,pm8010-rpmh-regulators";
+ qcom,pmic-id = "m";
+
+ vdd-l1-l2-supply = <&vreg_s5j_1p2>;
+ vdd-l3-l4-supply = <&vreg_s4c_1p8>;
+ vdd-l7-supply = <&vreg_bob1>;
+
+ vreg_l1m_1p2: ldo1 {
+ regulator-name = "vreg_l1m_1p2";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1260000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l2m_1p2: ldo2 {
+ regulator-name = "vreg_l2m_1p2";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1260000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l3m_1p8: ldo3 {
+ regulator-name = "vreg_l3m_1p8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1900000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l4m_1p8: ldo4 {
+ regulator-name = "vreg_l4m_1p8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1900000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l5m_2p8: ldo5 {
+ regulator-name = "vreg_l5m_2p8";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <3072000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l7m_2p8: ldo7 {
+ regulator-name = "vreg_l7m_2p8";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <3072000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+ };
+
};
&gpu {
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 15/18] arm64: dts: qcom: x1e80100-t14s: Add on ov02c10 RGB sensor on CSIPHY4
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (13 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 14/18] arm64: dts: qcom: x1e80100-t14s: Add pm8010 camera PMIC with voltage levels for IR and RGB camera Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:08 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 16/18] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add pm8010 camera PMIC with voltage levels for IR and RGB camera Bryan O'Donoghue
` (2 subsequent siblings)
17 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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
Switch on the ov02c10 RGB sensor on CSIPHY4.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
.../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi | 77 ++++++++++++++++++++++
1 file changed, 77 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
index ee49785c9d005..54bf21f1c6f37 100644
--- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
@@ -9,6 +9,7 @@
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/gpio-keys.h>
#include <dt-bindings/input/input.h>
+#include <dt-bindings/phy/phy.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
@@ -866,6 +867,66 @@ vreg_l7m_2p8: ldo7 {
};
+&camss {
+ status = "okay";
+
+ ports {
+ /*
+ * port0 => csiphy0
+ * port1 => csiphy1
+ * port2 => csiphy2
+ * port3 => csiphy4
+ */
+ port@3 {
+ camss_csiphy4_inep0: endpoint@0 {
+ clock-lanes = <7>;
+ data-lanes = <0 1>;
+ remote-endpoint = <&ov02c10_ep>;
+ };
+ };
+ };
+};
+
+&cci1 {
+ status = "okay";
+};
+
+&cci1_i2c1 {
+ camera@36 {
+ compatible = "ovti,ov02c10";
+ reg = <0x36>;
+
+ reset-gpios = <&tlmm 237 GPIO_ACTIVE_LOW>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&cam_rgb_default>;
+
+ clocks = <&camcc CAM_CC_MCLK4_CLK>;
+ assigned-clocks = <&camcc CAM_CC_MCLK4_CLK>;
+ assigned-clock-rates = <19200000>;
+
+ orientation = <0>; /* front facing */
+
+ avdd-supply = <&vreg_l7m_2p8>;
+ dvdd-supply = <&vreg_l2m_1p2>;
+ dovdd-supply = <&vreg_l4m_1p8>;
+
+ port {
+ ov02c10_ep: endpoint {
+ data-lanes = <1 2>;
+ link-frequencies = /bits/ 64 <400000000>;
+ remote-endpoint = <&camss_csiphy4_inep0>;
+ };
+ };
+ };
+};
+
+&csiphy4 {
+ vdda-0p8-supply = <&vreg_l2c_0p8>;
+ vdda-1p2-supply = <&vreg_l1c_1p2>;
+
+ status = "okay";
+};
+
&gpu {
status = "okay";
};
@@ -1447,6 +1508,22 @@ &tlmm {
<72 2>, /* Secure EC I2C connection (?) */
<238 1>; /* UFS Reset */
+ cam_rgb_default: cam-rgb-default-state {
+ mclk-pins {
+ pins = "gpio100";
+ function = "cam_aon";
+ drive-strength = <16>;
+ bias-disable;
+ };
+
+ reset-n-pins {
+ pins = "gpio237";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+ };
+
ec_int_n_default: ec-int-n-state {
pins = "gpio66";
function = "gpio";
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 16/18] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add pm8010 camera PMIC with voltage levels for IR and RGB camera
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (14 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 15/18] arm64: dts: qcom: x1e80100-t14s: Add on ov02c10 RGB sensor on CSIPHY4 Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:08 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 17/18] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add ov02c10 RGB sensor on CSIPHY4 Bryan O'Donoghue
2026-02-25 15:11 ` [PATCH v8 18/18] arm64: dts: qcom: x1e80100-dell-inspiron14-7441: Switch on CAMSS RGB sensor Bryan O'Donoghue
17 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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 voltage regulators-8 for Camera on slim7x including:
- vreg_l7m_2p8
- vreg_l2m_1p2
- vreg_l4m_1p8
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
.../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 51 ++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
index d6472e5a3f9fa..f10dff1da7f8e 100644
--- a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
+++ b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
@@ -795,6 +795,57 @@ vreg_l3j_0p8: ldo3 {
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
};
};
+
+ regulators-8 {
+ compatible = "qcom,pm8010-rpmh-regulators";
+ qcom,pmic-id = "m";
+
+ vdd-l1-l2-supply = <&vreg_s5j_1p2>;
+ vdd-l3-l4-supply = <&vreg_s4c_1p8>;
+ vdd-l7-supply = <&vreg_bob1>;
+
+ vreg_l1m_1p2: ldo1 {
+ regulator-name = "vreg_l1m_1p2";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1260000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l2m_1p2: ldo2 {
+ regulator-name = "vreg_l2m_1p2";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1260000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l3m_1p8: ldo3 {
+ regulator-name = "vreg_l3m_1p8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1900000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l4m_1p8: ldo4 {
+ regulator-name = "vreg_l4m_1p8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1900000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l5m_2p8: ldo5 {
+ regulator-name = "vreg_l5m_2p8";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <3072000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l7m_2p8: ldo7 {
+ regulator-name = "vreg_l7m_2p8";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <3072000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+ };
};
&gpu {
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 17/18] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add ov02c10 RGB sensor on CSIPHY4
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (15 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 16/18] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add pm8010 camera PMIC with voltage levels for IR and RGB camera Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:08 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 18/18] arm64: dts: qcom: x1e80100-dell-inspiron14-7441: Switch on CAMSS RGB sensor Bryan O'Donoghue
17 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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 in the RGB sensor on CSIPHY4.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
.../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 77 ++++++++++++++++++++++
1 file changed, 77 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
index f10dff1da7f8e..f3f4841ad2c83 100644
--- a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
+++ b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
@@ -7,6 +7,7 @@
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/gpio-keys.h>
+#include <dt-bindings/phy/phy.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
#include "hamoa.dtsi"
@@ -856,6 +857,66 @@ &gpu_zap_shader {
firmware-name = "qcom/x1e80100/LENOVO/83ED/qcdxkmsuc8380.mbn";
};
+&camss {
+ status = "okay";
+
+ ports {
+ /*
+ * port0 => csiphy0
+ * port1 => csiphy1
+ * port2 => csiphy2
+ * port3 => csiphy4
+ */
+ port@3 {
+ camss_csiphy4_inep0: endpoint@0 {
+ clock-lanes = <7>;
+ data-lanes = <0 1>;
+ remote-endpoint = <&ov02c10_ep>;
+ };
+ };
+ };
+};
+
+&cci1 {
+ status = "okay";
+};
+
+&cci1_i2c1 {
+ camera@36 {
+ compatible = "ovti,ov02c10";
+ reg = <0x36>;
+
+ reset-gpios = <&tlmm 237 GPIO_ACTIVE_LOW>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&cam_rgb_default>;
+
+ clocks = <&camcc CAM_CC_MCLK4_CLK>;
+ assigned-clocks = <&camcc CAM_CC_MCLK4_CLK>;
+ assigned-clock-rates = <19200000>;
+
+ orientation = <0>; /* front facing */
+
+ avdd-supply = <&vreg_l7m_2p8>;
+ dvdd-supply = <&vreg_l2m_1p2>;
+ dovdd-supply = <&vreg_l4m_1p8>;
+
+ port {
+ ov02c10_ep: endpoint {
+ data-lanes = <1 2>;
+ link-frequencies = /bits/ 64 <400000000>;
+ remote-endpoint = <&camss_csiphy4_inep0>;
+ };
+ };
+ };
+};
+
+&csiphy4 {
+ vdda-0p8-supply = <&vreg_l2c_0p8>;
+ vdda-1p2-supply = <&vreg_l1c_1p2>;
+
+ status = "okay";
+};
+
&i2c0 {
clock-frequency = <400000>;
@@ -1403,6 +1464,22 @@ &tlmm {
<44 4>, /* SPI (TPM) */
<238 1>; /* UFS Reset */
+ cam_rgb_default: cam-rgb-default-state {
+ mclk-pins {
+ pins = "gpio100";
+ function = "cam_aon";
+ drive-strength = <16>;
+ bias-disable;
+ };
+
+ reset-n-pins {
+ pins = "gpio237";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+ };
+
edp_reg_en: edp-reg-en-state {
pins = "gpio70";
function = "gpio";
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v8 18/18] arm64: dts: qcom: x1e80100-dell-inspiron14-7441: Switch on CAMSS RGB sensor
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
` (16 preceding siblings ...)
2026-02-25 15:11 ` [PATCH v8 17/18] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add ov02c10 RGB sensor on CSIPHY4 Bryan O'Donoghue
@ 2026-02-25 15:11 ` Bryan O'Donoghue
2026-02-27 22:09 ` Christopher Obbard
17 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-25 15:11 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
Inspiron14 has a ov02e10 sensor on CSIPHY4. Enable the list of dependencies
now.
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi | 61 +++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi b/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
index bf04a12b16bc9..d21963e52ee48 100644
--- a/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
@@ -10,6 +10,7 @@
#include <dt-bindings/input/gpio-keys.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
+#include <dt-bindings/phy/phy.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
#include "hamoa-pmics.dtsi"
@@ -792,6 +793,66 @@ vreg_l3j_0p8: ldo3 {
};
};
+&camss {
+ status = "okay";
+
+ ports {
+ /*
+ * port0 => csiphy0
+ * port1 => csiphy1
+ * port2 => csiphy2
+ * port3 => csiphy4
+ */
+ port@3 {
+ camss_csiphy4_inep0: endpoint@0 {
+ clock-lanes = <7>;
+ data-lanes = <0 1>;
+ remote-endpoint = <&ov02e10_ep>;
+ };
+ };
+ };
+};
+
+&cci1 {
+ status = "okay";
+};
+
+&cci1_i2c1 {
+ camera@10 {
+ compatible = "ovti,ov02e10";
+ reg = <0x10>;
+
+ reset-gpios = <&tlmm 237 GPIO_ACTIVE_LOW>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&cam_rgb_default>;
+
+ clocks = <&camcc CAM_CC_MCLK4_CLK>;
+ assigned-clocks = <&camcc CAM_CC_MCLK4_CLK>;
+ assigned-clock-rates = <19200000>;
+
+ orientation = <0>; /* front facing */
+
+ avdd-supply = <&vreg_l7b_2p8>;
+ dvdd-supply = <&vreg_l7b_2p8>;
+ dovdd-supply = <&vreg_cam_1p8>;
+
+ port {
+ ov02e10_ep: endpoint {
+ data-lanes = <1 2>;
+ link-frequencies = /bits/ 64 <360000000>;
+ remote-endpoint = <&camss_csiphy4_inep0>;
+ };
+ };
+ };
+};
+
+&csiphy4 {
+ vdda-0p8-supply = <&vreg_l2c_0p8>;
+ vdda-1p2-supply = <&vreg_l1c_1p2>;
+
+ status = "okay";
+};
+
&i2c0 {
clock-frequency = <400000>;
--
2.52.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* Re: [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address
2026-02-25 15:11 ` [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address Bryan O'Donoghue
@ 2026-02-26 7:04 ` Krzysztof Kozlowski
2026-02-26 9:25 ` Bryan O'Donoghue
2026-02-27 22:01 ` Christopher Obbard
1 sibling, 1 reply; 62+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-26 7:04 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 Wed, Feb 25, 2026 at 03:11:18PM +0000, Bryan O'Donoghue wrote:
> The first register bank should be the 'main' register bank, in this case
> the CSID wrapper register is responsible for muxing PHY/TPG inputs directly
> to CSID or to other blocks such as the Sensor Front End.
>
> commit f4792eeaa971 ("dt-bindings: media: qcom,x1e80100-camss: Fix isp unit address")
There is no such commit. At least I could not find it.
Also, please wrap in the commit msg according to patch style.
> assigned the address to the first register bank "csid0" whereas what we
> should have done is retained the unit address and moved csid_wrapper to be
> the first listed bank.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
> .../devicetree/bindings/media/qcom,x1e80100-camss.yaml | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> index 2d1662ef522b7..9aaed897f7e0e 100644
> --- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> +++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> @@ -21,12 +21,12 @@ properties:
>
> reg-names:
> items:
> + - const: csid_wrapper
No, that's ABI break for no real reason. This ABI was shipped and there
is upstream (and maybe other) user of it. You cannot change it.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-25 15:11 ` [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles Bryan O'Donoghue
@ 2026-02-26 7:07 ` Krzysztof Kozlowski
2026-02-26 9:27 ` Bryan O'Donoghue
2026-02-27 22:01 ` Christopher Obbard
1 sibling, 1 reply; 62+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-26 7:07 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 Wed, Feb 25, 2026 at 03:11:19PM +0000, Bryan O'Donoghue wrote:
> We currently do not have an upstream user of the x1e CAMSS schema which
We have. It is in released kernel v6.16, so almost a year.
> allows us to make this the first platform to treat the CSI PHYs as separate
No, it does not allow that. You cannto change the ABI.
That's why I reminded multiple times before reviewing new CAMSS bindings
for Milos and something more. Because once it gets accepted, you cannot
change it anymore without valid reason. And there is no valid reason
here provided. I kept these patches in staging/waiting for long
enough...
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 04/18] dt-bindings: media: qcom,x1e80100-camss: Reduce iommus to five
2026-02-25 15:11 ` [PATCH v8 04/18] dt-bindings: media: qcom,x1e80100-camss: Reduce iommus to five Bryan O'Donoghue
@ 2026-02-26 7:08 ` Krzysztof Kozlowski
2026-02-27 22:02 ` Christopher Obbard
1 sibling, 0 replies; 62+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-26 7:08 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 Wed, Feb 25, 2026 at 03:11:21PM +0000, Bryan O'Donoghue wrote:
> Rather than bury the BPS and IPE inside of the CAMSS block we can define
> them like the CCI/I2C and CSIPHY as their own individual devices.
>
> Remove the IPE and BPS iommu entries from the main CAMSS yaml. There is no
> upstream user of these iommu entries right now so this is safe to do.
Of course there is - v6.16.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 10/18] arm64: dts: qcom: x1e80100: Add MIPI CSI PHY nodes
2026-02-25 15:11 ` [PATCH v8 10/18] arm64: dts: qcom: x1e80100: Add MIPI CSI PHY nodes Bryan O'Donoghue
@ 2026-02-26 7:11 ` Krzysztof Kozlowski
2026-02-26 9:30 ` Bryan O'Donoghue
2026-02-27 22:04 ` Christopher Obbard
1 sibling, 1 reply; 62+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-26 7:11 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 Wed, Feb 25, 2026 at 03:11:27PM +0000, Bryan O'Donoghue wrote:
> +
> qup_opp_table_100mhz: opp-table-qup100mhz {
> compatible = "operating-points-v2";
>
> @@ -5543,6 +5562,102 @@ cci1_i2c1: i2c-bus@1 {
> };
> };
>
> + csiphy0: csiphy@ace4000 {
> + compatible = "qcom,x1e80100-csi2-phy";
There is no such compatible documented in the kernel, nor in this
patchset. Either you combine DTS into driver patchset to solve this, or
don't combine DTS at all. DTS cannot go via driver tree.
This does not make easier deciphering dependencies for soc tree...
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address
2026-02-26 7:04 ` Krzysztof Kozlowski
@ 2026-02-26 9:25 ` Bryan O'Donoghue
2026-02-26 9:32 ` Krzysztof Kozlowski
0 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-26 9:25 UTC (permalink / raw)
To: Krzysztof Kozlowski, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 07:04, Krzysztof Kozlowski wrote:
> No, that's ABI break for no real reason. This ABI was shipped and there
> is upstream (and maybe other) user of it. You cannot change it.
We don't have an upstream user. The dtsi for CAMSS hasn't been committed.
So this is changeable right ?
---
bod
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-26 7:07 ` Krzysztof Kozlowski
@ 2026-02-26 9:27 ` Bryan O'Donoghue
2026-02-26 9:33 ` Krzysztof Kozlowski
0 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-26 9:27 UTC (permalink / raw)
To: Krzysztof Kozlowski, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 07:07, Krzysztof Kozlowski wrote:
> No, it does not allow that. You cannto change the ABI.
>
> That's why I reminded multiple times before reviewing new CAMSS bindings
> for Milos and something more. Because once it gets accepted, you cannot
> change it anymore without valid reason. And there is no valid reason
> here provided. I kept these patches in staging/waiting for long
> enough...
I thought your policy was - a dtsi had to have it, which we don't yet have.
---
bod
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 10/18] arm64: dts: qcom: x1e80100: Add MIPI CSI PHY nodes
2026-02-26 7:11 ` Krzysztof Kozlowski
@ 2026-02-26 9:30 ` Bryan O'Donoghue
2026-02-26 9:35 ` Krzysztof Kozlowski
0 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-26 9:30 UTC (permalink / raw)
To: Krzysztof Kozlowski, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 07:11, Krzysztof Kozlowski wrote:
> On Wed, Feb 25, 2026 at 03:11:27PM +0000, Bryan O'Donoghue wrote:
>> +
>> qup_opp_table_100mhz: opp-table-qup100mhz {
>> compatible = "operating-points-v2";
>>
>> @@ -5543,6 +5562,102 @@ cci1_i2c1: i2c-bus@1 {
>> };
>> };
>>
>> + csiphy0: csiphy@ace4000 {
>> + compatible = "qcom,x1e80100-csi2-phy";
>
> There is no such compatible documented in the kernel, nor in this
> patchset. Either you combine DTS into driver patchset to solve this, or
> don't combine DTS at all. DTS cannot go via driver tree.
"b4 shazam <change-id>" should work since
Depends-on:
https://lore.kernel.org/r/20260225-x1e-csi2-phy-v2-0-7756edb67ea9@linaro.org
appears in the series cover, I don't know of any good way to add that
type of dependency link into a patch.
---
bod
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address
2026-02-26 9:25 ` Bryan O'Donoghue
@ 2026-02-26 9:32 ` Krzysztof Kozlowski
2026-02-26 9:35 ` Bryan O'Donoghue
0 siblings, 1 reply; 62+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-26 9:32 UTC (permalink / raw)
To: Bryan O'Donoghue, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 10:25, Bryan O'Donoghue wrote:
> On 26/02/2026 07:04, Krzysztof Kozlowski wrote:
>> No, that's ABI break for no real reason. This ABI was shipped and there
>> is upstream (and maybe other) user of it. You cannot change it.
>
> We don't have an upstream user. The dtsi for CAMSS hasn't been committed.
>
> So this is changeable right ?
No. You have user since v6.16 (or v6.15, don't remember). This is
released ABI.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-26 9:27 ` Bryan O'Donoghue
@ 2026-02-26 9:33 ` Krzysztof Kozlowski
2026-02-26 9:40 ` Bryan O'Donoghue
0 siblings, 1 reply; 62+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-26 9:33 UTC (permalink / raw)
To: Bryan O'Donoghue, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 10:27, Bryan O'Donoghue wrote:
> On 26/02/2026 07:07, Krzysztof Kozlowski wrote:
>> No, it does not allow that. You cannto change the ABI.
>>
>> That's why I reminded multiple times before reviewing new CAMSS bindings
>> for Milos and something more. Because once it gets accepted, you cannot
>> change it anymore without valid reason. And there is no valid reason
>> here provided. I kept these patches in staging/waiting for long
>> enough...
>
> I thought your policy was - a dtsi had to have it, which we don't yet have.
And from where did you take that policy? I am pretty sure my each
comment is about ABI. Heh, I even commented few times about implied ABI
purely based on kernel, without DTS.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 10/18] arm64: dts: qcom: x1e80100: Add MIPI CSI PHY nodes
2026-02-26 9:30 ` Bryan O'Donoghue
@ 2026-02-26 9:35 ` Krzysztof Kozlowski
0 siblings, 0 replies; 62+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-26 9:35 UTC (permalink / raw)
To: Bryan O'Donoghue, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 10:30, Bryan O'Donoghue wrote:
> On 26/02/2026 07:11, Krzysztof Kozlowski wrote:
>> On Wed, Feb 25, 2026 at 03:11:27PM +0000, Bryan O'Donoghue wrote:
>>> +
>>> qup_opp_table_100mhz: opp-table-qup100mhz {
>>> compatible = "operating-points-v2";
>>>
>>> @@ -5543,6 +5562,102 @@ cci1_i2c1: i2c-bus@1 {
>>> };
>>> };
>>>
>>> + csiphy0: csiphy@ace4000 {
>>> + compatible = "qcom,x1e80100-csi2-phy";
>>
>> There is no such compatible documented in the kernel, nor in this
>> patchset. Either you combine DTS into driver patchset to solve this, or
>> don't combine DTS at all. DTS cannot go via driver tree.
>
> "b4 shazam <change-id>" should work since
>
> Depends-on:
> https://lore.kernel.org/r/20260225-x1e-csi2-phy-v2-0-7756edb67ea9@linaro.org
>
> appears in the series cover, I don't know of any good way to add that
> type of dependency link into a patch.
Standard way how ask every other person to document it. It's even
repeated in every Rob's bot answer - you have changelog to provide the
binding.
But you missed the point - combining here the DTS which still relies on
something else is not helping.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address
2026-02-26 9:32 ` Krzysztof Kozlowski
@ 2026-02-26 9:35 ` Bryan O'Donoghue
2026-02-26 9:38 ` Krzysztof Kozlowski
0 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-26 9:35 UTC (permalink / raw)
To: Krzysztof Kozlowski, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 09:32, Krzysztof Kozlowski wrote:
> On 26/02/2026 10:25, Bryan O'Donoghue wrote:
>> On 26/02/2026 07:04, Krzysztof Kozlowski wrote:
>>> No, that's ABI break for no real reason. This ABI was shipped and there
>>> is upstream (and maybe other) user of it. You cannot change it.
>>
>> We don't have an upstream user. The dtsi for CAMSS hasn't been committed.
>>
>> So this is changeable right ?
>
> No. You have user since v6.16 (or v6.15, don't remember). This is
> released ABI.
Yes but I distinctly remember us saying if we could prove there was no
actual _user_ then a change was possible.
Is that not the case ?
---
bod
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address
2026-02-26 9:35 ` Bryan O'Donoghue
@ 2026-02-26 9:38 ` Krzysztof Kozlowski
2026-02-26 9:49 ` Bryan O'Donoghue
0 siblings, 1 reply; 62+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-26 9:38 UTC (permalink / raw)
To: Bryan O'Donoghue, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 10:35, Bryan O'Donoghue wrote:
> On 26/02/2026 09:32, Krzysztof Kozlowski wrote:
>> On 26/02/2026 10:25, Bryan O'Donoghue wrote:
>>> On 26/02/2026 07:04, Krzysztof Kozlowski wrote:
>>>> No, that's ABI break for no real reason. This ABI was shipped and there
>>>> is upstream (and maybe other) user of it. You cannot change it.
>>>
>>> We don't have an upstream user. The dtsi for CAMSS hasn't been committed.
>>>
>>> So this is changeable right ?
>>
>> No. You have user since v6.16 (or v6.15, don't remember). This is
>> released ABI.
>
> Yes but I distinctly remember us saying if we could prove there was no
> actual _user_ then a change was possible.
I just told you - there is actual mainline user in v6.16 - so whatever
you claim here is incorrect in first assumption. Even if such rule was
true - you can change ABI without user - then you failed here, because
you have user since v6.16.
Just use git grep.
> Is that not the case ?
It WAS NEVER the case. Just read any of multiple replies from me or Rob.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-26 9:33 ` Krzysztof Kozlowski
@ 2026-02-26 9:40 ` Bryan O'Donoghue
2026-02-26 9:50 ` Krzysztof Kozlowski
0 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-26 9:40 UTC (permalink / raw)
To: Krzysztof Kozlowski, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 09:33, Krzysztof Kozlowski wrote:
> On 26/02/2026 10:27, Bryan O'Donoghue wrote:
>> On 26/02/2026 07:07, Krzysztof Kozlowski wrote:
>>> No, it does not allow that. You cannto change the ABI.
>>>
>>> That's why I reminded multiple times before reviewing new CAMSS bindings
>>> for Milos and something more. Because once it gets accepted, you cannot
>>> change it anymore without valid reason. And there is no valid reason
>>> here provided. I kept these patches in staging/waiting for long
>>> enough...
>>
>> I thought your policy was - a dtsi had to have it, which we don't yet have.
>
> And from where did you take that policy? I am pretty sure my each
> comment is about ABI. Heh, I even commented few times about implied ABI
> purely based on kernel, without DTS.
Correct me if I'm wrong. I thought we had discussed either @ the Linaro
Dublin meet or the Linaro Amsterdam meet that changing upstream YAML
would be feasible _if_ you could show there was no dependency on it -
say u-boot, FreeBSD etc.
I completely understand why you'd say for a UART definition its an ABI
since quite likely another OS might consume the YAML but, I also think
nobody but upstream Linux cares about this binding at all and our only
actual user is upstream dtsi in Linux, which doesn't exist yet.
---
bod
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address
2026-02-26 9:38 ` Krzysztof Kozlowski
@ 2026-02-26 9:49 ` Bryan O'Donoghue
0 siblings, 0 replies; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-26 9:49 UTC (permalink / raw)
To: Krzysztof Kozlowski, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 09:38, Krzysztof Kozlowski wrote:
> I just told you - there is actual mainline user in v6.16 - so whatever
> you claim here is incorrect in first assumption.
I thought we had discussed @ Amsterdam or perhaps Tokyo that if you
could show there was no external user - i.e. prove no dependency then
you could change the YAML ?
Specifically check u-boot, FreeBSD etc.
---
bod
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-26 9:40 ` Bryan O'Donoghue
@ 2026-02-26 9:50 ` Krzysztof Kozlowski
2026-02-26 10:06 ` Bryan O'Donoghue
0 siblings, 1 reply; 62+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-26 9:50 UTC (permalink / raw)
To: Bryan O'Donoghue, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 10:40, Bryan O'Donoghue wrote:
> On 26/02/2026 09:33, Krzysztof Kozlowski wrote:
>> On 26/02/2026 10:27, Bryan O'Donoghue wrote:
>>> On 26/02/2026 07:07, Krzysztof Kozlowski wrote:
>>>> No, it does not allow that. You cannto change the ABI.
>>>>
>>>> That's why I reminded multiple times before reviewing new CAMSS bindings
>>>> for Milos and something more. Because once it gets accepted, you cannot
>>>> change it anymore without valid reason. And there is no valid reason
>>>> here provided. I kept these patches in staging/waiting for long
>>>> enough...
>>>
>>> I thought your policy was - a dtsi had to have it, which we don't yet have.
>>
>> And from where did you take that policy? I am pretty sure my each
>> comment is about ABI. Heh, I even commented few times about implied ABI
>> purely based on kernel, without DTS.
>
> Correct me if I'm wrong. I thought we had discussed either @ the Linaro
> Dublin meet or the Linaro Amsterdam meet that changing upstream YAML
> would be feasible _if_ you could show there was no dependency on it -
> say u-boot, FreeBSD etc.
And I mentioned multiple caveats and restrictions. Do you quote them
here or just took the first part of sentence before ", but only ..."?
Anyway, whatever spoken is improvable and I am sure I did not give such
permissions, maybe except that Dublin meeting was in 2024 thus before
the release of previous user, so before v6.16, so of course you can
still reshape unreleased ABI. And then you released it closing the
discussion.
>
> I completely understand why you'd say for a UART definition its an ABI
> since quite likely another OS might consume the YAML but, I also think
> nobody but upstream Linux cares about this binding at all and our only
> actual user is upstream dtsi in Linux, which doesn't exist yet.
Half of the comments responding to DT maintainers are "but no one
cares". Well, I do care, so that's it. If I start analyzing each case
for possible exceptions I would spend too much time on it. So follow
documented and expressed in written rules.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-26 9:50 ` Krzysztof Kozlowski
@ 2026-02-26 10:06 ` Bryan O'Donoghue
2026-02-27 7:24 ` Krzysztof Kozlowski
0 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-26 10:06 UTC (permalink / raw)
To: Krzysztof Kozlowski, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 09:50, Krzysztof Kozlowski wrote:
> On 26/02/2026 10:40, Bryan O'Donoghue wrote:
>> On 26/02/2026 09:33, Krzysztof Kozlowski wrote:
>>> On 26/02/2026 10:27, Bryan O'Donoghue wrote:
>>>> On 26/02/2026 07:07, Krzysztof Kozlowski wrote:
>>>>> No, it does not allow that. You cannto change the ABI.
>>>>>
>>>>> That's why I reminded multiple times before reviewing new CAMSS bindings
>>>>> for Milos and something more. Because once it gets accepted, you cannot
>>>>> change it anymore without valid reason. And there is no valid reason
>>>>> here provided. I kept these patches in staging/waiting for long
>>>>> enough...
>>>>
>>>> I thought your policy was - a dtsi had to have it, which we don't yet have.
>>>
>>> And from where did you take that policy? I am pretty sure my each
>>> comment is about ABI. Heh, I even commented few times about implied ABI
>>> purely based on kernel, without DTS.
>>
>> Correct me if I'm wrong. I thought we had discussed either @ the Linaro
>> Dublin meet or the Linaro Amsterdam meet that changing upstream YAML
>> would be feasible _if_ you could show there was no dependency on it -
>> say u-boot, FreeBSD etc.
>
> And I mentioned multiple caveats and restrictions. Do you quote them
> here or just took the first part of sentence before ", but only ..."?
>
> Anyway, whatever spoken is improvable and I am sure I did not give such
> permissions, maybe except that Dublin meeting was in 2024 thus before
> the release of previous user, so before v6.16, so of course you can
> still reshape unreleased ABI. And then you released it closing the
> discussion.
Well, is there a way to support both then ?
Right now I have csiphy and their registers listed in the camss block.
I could add phys = <> as optional in the schema. Is there any reason to
stop adding adjacent csiphy nodes ?
isp@addr {
regs = 0xCSID0,
0xCSIPH1;
reg-names = "csidX",
"csiphy0";
};
csiphy@CSIPHY1 {}
I'm not sure if this is against DT rules.
The iommu items _should_ be fine as its maxItems so I can just set that
to five instead of eight in the dtsi.
---
bod
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-26 10:06 ` Bryan O'Donoghue
@ 2026-02-27 7:24 ` Krzysztof Kozlowski
2026-02-27 8:48 ` Bryan O'Donoghue
0 siblings, 1 reply; 62+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-27 7:24 UTC (permalink / raw)
To: Bryan O'Donoghue, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 26/02/2026 11:06, Bryan O'Donoghue wrote:
> On 26/02/2026 09:50, Krzysztof Kozlowski wrote:
>> On 26/02/2026 10:40, Bryan O'Donoghue wrote:
>>> On 26/02/2026 09:33, Krzysztof Kozlowski wrote:
>>>> On 26/02/2026 10:27, Bryan O'Donoghue wrote:
>>>>> On 26/02/2026 07:07, Krzysztof Kozlowski wrote:
>>>>>> No, it does not allow that. You cannto change the ABI.
>>>>>>
>>>>>> That's why I reminded multiple times before reviewing new CAMSS bindings
>>>>>> for Milos and something more. Because once it gets accepted, you cannot
>>>>>> change it anymore without valid reason. And there is no valid reason
>>>>>> here provided. I kept these patches in staging/waiting for long
>>>>>> enough...
>>>>>
>>>>> I thought your policy was - a dtsi had to have it, which we don't yet have.
>>>>
>>>> And from where did you take that policy? I am pretty sure my each
>>>> comment is about ABI. Heh, I even commented few times about implied ABI
>>>> purely based on kernel, without DTS.
>>>
>>> Correct me if I'm wrong. I thought we had discussed either @ the Linaro
>>> Dublin meet or the Linaro Amsterdam meet that changing upstream YAML
>>> would be feasible _if_ you could show there was no dependency on it -
>>> say u-boot, FreeBSD etc.
>>
>> And I mentioned multiple caveats and restrictions. Do you quote them
>> here or just took the first part of sentence before ", but only ..."?
>>
>> Anyway, whatever spoken is improvable and I am sure I did not give such
>> permissions, maybe except that Dublin meeting was in 2024 thus before
>> the release of previous user, so before v6.16, so of course you can
>> still reshape unreleased ABI. And then you released it closing the
>> discussion.
> Well, is there a way to support both then ?
I would just not touch x1e80100, but if you want then probably binding
should stay backwards compatible, where you keep all properties intact
and only add csiphy nodes.
>
> Right now I have csiphy and their registers listed in the camss block.
>
> I could add phys = <> as optional in the schema. Is there any reason to
> stop adding adjacent csiphy nodes ?
I think no.
>
> isp@addr {
> regs = 0xCSID0,
> 0xCSIPH1;
> reg-names = "csidX",
> "csiphy0";
> };
>
> csiphy@CSIPHY1 {}
>
> I'm not sure if this is against DT rules.
>
> The iommu items _should_ be fine as its maxItems so I can just set that
> to five instead of eight in the dtsi.
>
> ---
> bod
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-27 7:24 ` Krzysztof Kozlowski
@ 2026-02-27 8:48 ` Bryan O'Donoghue
2026-02-27 20:10 ` Dmitry Baryshkov
0 siblings, 1 reply; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-27 8:48 UTC (permalink / raw)
To: Krzysztof Kozlowski, 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,
linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media
On 27/02/2026 07:24, Krzysztof Kozlowski wrote:
>> Well, is there a way to support both then ?
> I would just not touch x1e80100, but if you want then probably binding
> should stay backwards compatible, where you keep all properties intact
> and only add csiphy nodes.
>
I really want to stop adding new stuff with the legacy way that has
broken power-rails, even if that means x1e has a bit Frankenstein binding.
>> Right now I have csiphy and their registers listed in the camss block.
>>
>> I could add phys = <> as optional in the schema. Is there any reason to
>> stop adding adjacent csiphy nodes ?
> I think no.
Great so, that's what I'll do.
---
bod
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-27 8:48 ` Bryan O'Donoghue
@ 2026-02-27 20:10 ` Dmitry Baryshkov
2026-02-27 21:49 ` Bryan O'Donoghue
0 siblings, 1 reply; 62+ messages in thread
From: Dmitry Baryshkov @ 2026-02-27 20:10 UTC (permalink / raw)
To: Bryan O'Donoghue
Cc: Krzysztof Kozlowski, Bryan O'Donoghue, Bjorn Andersson,
Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Robert Foss, Todor Tomov, Mauro Carvalho Chehab,
Konrad Dybcio, Vladimir Zapolskiy, linux-arm-msm, linux-clk,
devicetree, linux-kernel, linux-media
On Fri, Feb 27, 2026 at 08:48:45AM +0000, Bryan O'Donoghue wrote:
> On 27/02/2026 07:24, Krzysztof Kozlowski wrote:
> > > Well, is there a way to support both then ?
> > I would just not touch x1e80100, but if you want then probably binding
> > should stay backwards compatible, where you keep all properties intact
> > and only add csiphy nodes.
> >
>
> I really want to stop adding new stuff with the legacy way that has broken
> power-rails, even if that means x1e has a bit Frankenstein binding.
X1 is fine. Please thing of a migration path for the older platforms
too.
>
> > > Right now I have csiphy and their registers listed in the camss block.
> > >
> > > I could add phys = <> as optional in the schema. Is there any reason to
> > > stop adding adjacent csiphy nodes ?
> > I think no.
>
> Great so, that's what I'll do.
>
> ---
> bod
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-27 20:10 ` Dmitry Baryshkov
@ 2026-02-27 21:49 ` Bryan O'Donoghue
0 siblings, 0 replies; 62+ messages in thread
From: Bryan O'Donoghue @ 2026-02-27 21:49 UTC (permalink / raw)
To: Dmitry Baryshkov, Bryan O'Donoghue
Cc: Krzysztof Kozlowski, Bjorn Andersson, Michael Turquette,
Stephen Boyd, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Robert Foss, Todor Tomov, Mauro Carvalho Chehab, Konrad Dybcio,
Vladimir Zapolskiy, linux-arm-msm, linux-clk, devicetree,
linux-kernel, linux-media
On 27/02/2026 20:10, Dmitry Baryshkov wrote:
> On Fri, Feb 27, 2026 at 08:48:45AM +0000, Bryan O'Donoghue wrote:
>> On 27/02/2026 07:24, Krzysztof Kozlowski wrote:
>>>> Well, is there a way to support both then ?
>>> I would just not touch x1e80100, but if you want then probably binding
>>> should stay backwards compatible, where you keep all properties intact
>>> and only add csiphy nodes.
>>>
>>
>> I really want to stop adding new stuff with the legacy way that has broken
>> power-rails, even if that means x1e has a bit Frankenstein binding.
>
> X1 is fine. Please thing of a migration path for the older platforms
> too.
Yeah no we're very much singing from the same hymn sheet here. As I told
you elsewhere but its worth stating for the internet machine, I thought
"put the CSIPHY at the same scope as the CCI" and am not wedded to the
choice between sub-nodes of CAMSS or peer nodes to CAMSS aside from the
above statement.
Being able to move older platforms with already fixed schema to the new
CSIPHY driver hadn't really occured to me but, since you raise it, I
think its worth trying to support.
I will alloc(cycles);
---
bod
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address
2026-02-25 15:11 ` [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address Bryan O'Donoghue
2026-02-26 7:04 ` Krzysztof Kozlowski
@ 2026-02-27 22:01 ` Christopher Obbard
1 sibling, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:01 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> The first register bank should be the 'main' register bank, in this case
> the CSID wrapper register is responsible for muxing PHY/TPG inputs directly
> to CSID or to other blocks such as the Sensor Front End.
>
> commit f4792eeaa971 ("dt-bindings: media: qcom,x1e80100-camss: Fix isp unit address")
> assigned the address to the first register bank "csid0" whereas what we
> should have done is retained the unit address and moved csid_wrapper to be
> the first listed bank.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
> ---
> .../devicetree/bindings/media/qcom,x1e80100-camss.yaml | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> index 2d1662ef522b7..9aaed897f7e0e 100644
> --- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> +++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> @@ -21,12 +21,12 @@ properties:
>
> reg-names:
> items:
> + - const: csid_wrapper
> - const: csid0
> - const: csid1
> - const: csid2
> - const: csid_lite0
> - const: csid_lite1
> - - const: csid_wrapper
> - const: csiphy0
> - const: csiphy1
> - const: csiphy2
> @@ -190,15 +190,15 @@ examples:
> #address-cells = <2>;
> #size-cells = <2>;
>
> - camss: isp@acb7000 {
> + camss: isp@acb6000 {
> compatible = "qcom,x1e80100-camss";
>
> - reg = <0 0x0acb7000 0 0x2000>,
> + reg = <0 0x0acb6000 0 0x1000>,
> + <0 0x0acb7000 0 0x2000>,
> <0 0x0acb9000 0 0x2000>,
> <0 0x0acbb000 0 0x2000>,
> <0 0x0acc6000 0 0x1000>,
> <0 0x0acca000 0 0x1000>,
> - <0 0x0acb6000 0 0x1000>,
> <0 0x0ace4000 0 0x1000>,
> <0 0x0ace6000 0 0x1000>,
> <0 0x0ace8000 0 0x1000>,
> @@ -211,12 +211,12 @@ examples:
> <0 0x0acc7000 0 0x2000>,
> <0 0x0accb000 0 0x2000>;
>
> - reg-names = "csid0",
> + reg-names = "csid_wrapper",
> + "csid0",
> "csid1",
> "csid2",
> "csid_lite0",
> "csid_lite1",
> - "csid_wrapper",
> "csiphy0",
> "csiphy1",
> "csiphy2",
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-25 15:11 ` [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles Bryan O'Donoghue
2026-02-26 7:07 ` Krzysztof Kozlowski
@ 2026-02-27 22:01 ` Christopher Obbard
2026-02-28 13:28 ` Krzysztof Kozlowski
1 sibling, 1 reply; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:01 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> We currently do not have an upstream user of the x1e CAMSS schema which
> allows us to make this the first platform to treat the CSI PHYs as separate
> devices in much the same way as we treat the CCI block as separate devices.
>
> Convert the embedded CSIPHY node data to simple phys = <> removing all of
> the PHY specific stuff previously embedded.
>
> I gave some serious thought to making the Test Pattern Generators TPGs into
> PHY nodes also but, unlike the CSIPHYs the TPGs have no dedicated external
> pins nor regulators.
>
> The CSIPHYs OTOH have dedicated in-fact generally unmuxed pins on Qualcomm
> SoCs and each CSIPHY has its own set of input power rails usually 0p8 and
> 1p2.
>
> Instead of defining the CSIPHYs as children of the CAMSS block, we take the
> same approach as the CCI/I2C bus dedicated to CAMSS and define the CSIPHYs
> as their own nodes.
>
> Remove the embedded CSIPHY specific data and give CAMSS regular,
> bog-standard phys = <>;
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
> ---
> .../bindings/media/qcom,x1e80100-camss.yaml | 84 ++++++----------------
> 1 file changed, 20 insertions(+), 64 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> index 9aaed897f7e0e..ff14a8248321e 100644
> --- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> +++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> @@ -17,7 +17,7 @@ properties:
> const: qcom,x1e80100-camss
>
> reg:
> - maxItems: 17
> + maxItems: 13
>
> reg-names:
> items:
> @@ -27,10 +27,6 @@ properties:
> - const: csid2
> - const: csid_lite0
> - const: csid_lite1
> - - const: csiphy0
> - - const: csiphy1
> - - const: csiphy2
> - - const: csiphy4
> - const: csitpg0
> - const: csitpg1
> - const: csitpg2
> @@ -40,7 +36,7 @@ properties:
> - const: vfe_lite1
>
> clocks:
> - maxItems: 29
> + maxItems: 21
>
> clock-names:
> items:
> @@ -55,14 +51,6 @@ properties:
> - const: cphy_rx_clk_src
> - const: csid
> - const: csid_csiphy_rx
> - - const: csiphy0
> - - const: csiphy0_timer
> - - const: csiphy1
> - - const: csiphy1_timer
> - - const: csiphy2
> - - const: csiphy2_timer
> - - const: csiphy4
> - - const: csiphy4_timer
> - const: gcc_axi_hf
> - const: gcc_axi_sf
> - const: vfe0
> @@ -75,7 +63,7 @@ properties:
> - const: vfe_lite_csid
>
> interrupts:
> - maxItems: 13
> + maxItems: 9
>
> interrupt-names:
> items:
> @@ -84,15 +72,21 @@ properties:
> - const: csid2
> - const: csid_lite0
> - const: csid_lite1
> - - const: csiphy0
> - - const: csiphy1
> - - const: csiphy2
> - - const: csiphy4
> - const: vfe0
> - const: vfe1
> - const: vfe_lite0
> - const: vfe_lite1
>
> + phys:
> + maxItems: 4
> +
> + phy-names:
> + items:
> + - const: csiphy0
> + - const: csiphy1
> + - const: csiphy2
> + - const: csiphy4
> +
> interconnects:
> maxItems: 4
>
> @@ -118,14 +112,6 @@ properties:
> - const: ife1
> - const: top
>
> - vdd-csiphy-0p8-supply:
> - description:
> - 0.8V supply to a PHY.
> -
> - vdd-csiphy-1p2-supply:
> - description:
> - 1.2V supply to a PHY.
> -
> ports:
> $ref: /schemas/graph.yaml#/properties/ports
>
> @@ -166,13 +152,13 @@ required:
> - clock-names
> - interrupts
> - interrupt-names
> + - phys
> + - phy-names
> - interconnects
> - interconnect-names
> - iommus
> - power-domains
> - power-domain-names
> - - vdd-csiphy-0p8-supply
> - - vdd-csiphy-1p2-supply
> - ports
>
> additionalProperties: false
> @@ -199,10 +185,6 @@ examples:
> <0 0x0acbb000 0 0x2000>,
> <0 0x0acc6000 0 0x1000>,
> <0 0x0acca000 0 0x1000>,
> - <0 0x0ace4000 0 0x1000>,
> - <0 0x0ace6000 0 0x1000>,
> - <0 0x0ace8000 0 0x1000>,
> - <0 0x0acec000 0 0x4000>,
> <0 0x0acf6000 0 0x1000>,
> <0 0x0acf7000 0 0x1000>,
> <0 0x0acf8000 0 0x1000>,
> @@ -217,10 +199,6 @@ examples:
> "csid2",
> "csid_lite0",
> "csid_lite1",
> - "csiphy0",
> - "csiphy1",
> - "csiphy2",
> - "csiphy4",
> "csitpg0",
> "csitpg1",
> "csitpg2",
> @@ -240,14 +218,6 @@ examples:
> <&camcc CAM_CC_CPHY_RX_CLK_SRC>,
> <&camcc CAM_CC_CSID_CLK>,
> <&camcc CAM_CC_CSID_CSIPHY_RX_CLK>,
> - <&camcc CAM_CC_CSIPHY0_CLK>,
> - <&camcc CAM_CC_CSI0PHYTIMER_CLK>,
> - <&camcc CAM_CC_CSIPHY1_CLK>,
> - <&camcc CAM_CC_CSI1PHYTIMER_CLK>,
> - <&camcc CAM_CC_CSIPHY2_CLK>,
> - <&camcc CAM_CC_CSI2PHYTIMER_CLK>,
> - <&camcc CAM_CC_CSIPHY4_CLK>,
> - <&camcc CAM_CC_CSI4PHYTIMER_CLK>,
> <&gcc GCC_CAMERA_HF_AXI_CLK>,
> <&gcc GCC_CAMERA_SF_AXI_CLK>,
> <&camcc CAM_CC_IFE_0_CLK>,
> @@ -270,14 +240,6 @@ examples:
> "cphy_rx_clk_src",
> "csid",
> "csid_csiphy_rx",
> - "csiphy0",
> - "csiphy0_timer",
> - "csiphy1",
> - "csiphy1_timer",
> - "csiphy2",
> - "csiphy2_timer",
> - "csiphy4",
> - "csiphy4_timer",
> "gcc_axi_hf",
> "gcc_axi_sf",
> "vfe0",
> @@ -294,10 +256,6 @@ examples:
> <GIC_SPI 431 IRQ_TYPE_EDGE_RISING>,
> <GIC_SPI 468 IRQ_TYPE_EDGE_RISING>,
> <GIC_SPI 359 IRQ_TYPE_EDGE_RISING>,
> - <GIC_SPI 477 IRQ_TYPE_EDGE_RISING>,
> - <GIC_SPI 478 IRQ_TYPE_EDGE_RISING>,
> - <GIC_SPI 479 IRQ_TYPE_EDGE_RISING>,
> - <GIC_SPI 122 IRQ_TYPE_EDGE_RISING>,
> <GIC_SPI 465 IRQ_TYPE_EDGE_RISING>,
> <GIC_SPI 467 IRQ_TYPE_EDGE_RISING>,
> <GIC_SPI 469 IRQ_TYPE_EDGE_RISING>,
> @@ -308,15 +266,16 @@ examples:
> "csid2",
> "csid_lite0",
> "csid_lite1",
> - "csiphy0",
> - "csiphy1",
> - "csiphy2",
> - "csiphy4",
> "vfe0",
> "vfe1",
> "vfe_lite0",
> "vfe_lite1";
>
> + phys = <&csiphy0>, <&csiphy1>,
> + <&csiphy2>, <&csiphy4>;
> + phy-names = "csiphy0", "csiphy1",
> + "csiphy2", "csiphy4";
> +
> interconnects = <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_ONLY
> &config_noc SLAVE_CAMERA_CFG QCOM_ICC_TAG_ACTIVE_ONLY>,
> <&mmss_noc MASTER_CAMNOC_HF QCOM_ICC_TAG_ALWAYS
> @@ -348,9 +307,6 @@ examples:
> "ife1",
> "top";
>
> - vdd-csiphy-0p8-supply = <&csiphy_0p8_supply>;
> - vdd-csiphy-1p2-supply = <&csiphy_1p2_supply>;
> -
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 03/18] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints
2026-02-25 15:11 ` [PATCH v8 03/18] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints Bryan O'Donoghue
@ 2026-02-27 22:01 ` Christopher Obbard
2026-02-28 7:17 ` Dmitry Baryshkov
0 siblings, 1 reply; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:01 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, 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.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Christopher Obbard <christopher.obbard@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 ff14a8248321e..462b1355c9fb7 100644
> --- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> +++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> @@ -116,7 +116,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]$":
> @@ -124,26 +125,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
> +
> required:
> - compatible
> - reg
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 04/18] dt-bindings: media: qcom,x1e80100-camss: Reduce iommus to five
2026-02-25 15:11 ` [PATCH v8 04/18] dt-bindings: media: qcom,x1e80100-camss: Reduce iommus to five Bryan O'Donoghue
2026-02-26 7:08 ` Krzysztof Kozlowski
@ 2026-02-27 22:02 ` Christopher Obbard
1 sibling, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:02 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> Rather than bury the BPS and IPE inside of the CAMSS block we can define
> them like the CCI/I2C and CSIPHY as their own individual devices.
>
> Remove the IPE and BPS iommu entries from the main CAMSS yaml. There is no
> upstream user of these iommu entries right now so this is safe to do.
>
> We will instead include these iommus in the BPS and IPE device nodes
> instead of jamming them into the existing CAMSS binding.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
> ---
> Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> index 462b1355c9fb7..d39013d4a83e1 100644
> --- a/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> +++ b/Documentation/devicetree/bindings/media/qcom,x1e80100-camss.yaml
> @@ -98,7 +98,7 @@ properties:
> - const: sf_icp_mnoc
>
> iommus:
> - maxItems: 8
> + maxItems: 5
>
> power-domains:
> items:
> @@ -353,11 +353,8 @@ examples:
>
> iommus = <&apps_smmu 0x800 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>;
>
> power-domains = <&camcc CAM_CC_IFE_0_GDSC>,
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 05/18] media: qcom: camss: Add legacy_phy flag to SoC definition structures
2026-02-25 15:11 ` [PATCH v8 05/18] media: qcom: camss: Add legacy_phy flag to SoC definition structures Bryan O'Donoghue
@ 2026-02-27 22:02 ` Christopher Obbard
0 siblings, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:02 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> 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.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Tested-by: Christopher Obbard <christopher.obbard@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 00b87fd9afbd8..5fb5ad87e1671 100644
> --- a/drivers/media/platform/qcom/camss/camss.c
> +++ b/drivers/media/platform/qcom/camss/camss.c
> @@ -5104,6 +5104,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,
> @@ -5115,6 +5116,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,
> @@ -5126,6 +5128,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,
> @@ -5139,6 +5142,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,
> @@ -5150,6 +5154,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,
> @@ -5163,6 +5168,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,
> @@ -5177,6 +5183,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,
> @@ -5190,6 +5197,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,
> @@ -5201,6 +5209,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,
> @@ -5212,6 +5221,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,
> @@ -5223,6 +5233,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,
> @@ -5236,6 +5247,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,
> @@ -5249,6 +5261,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,
> @@ -5263,6 +5276,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,
> @@ -5276,6 +5290,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,
> @@ -5290,6 +5305,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,
> @@ -5304,6 +5320,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;
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 06/18] media: qcom: camss: Add support for PHY API devices
2026-02-25 15:11 ` [PATCH v8 06/18] media: qcom: camss: Add support for PHY API devices Bryan O'Donoghue
@ 2026-02-27 22:03 ` Christopher Obbard
0 siblings, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:03 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> 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.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Tested-by: Christopher Obbard <christopher.obbard@linaro.org>
> ---
> drivers/media/platform/qcom/camss/Kconfig | 1 +
> drivers/media/platform/qcom/camss/camss-csiphy.c | 185 +++++++++++++++++++++--
> drivers/media/platform/qcom/camss/camss-csiphy.h | 7 +
> drivers/media/platform/qcom/camss/camss.c | 72 +++++++--
> 4 files changed, 235 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..59564284fd270 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,86 @@ 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);
> + u8 num_lanes = csiphy->cfg.csi2->lane_cfg.num_data;
> + struct phy_configure_opts_mipi_dphy *dphy_cfg;
> + union phy_configure_opts dphy_opts = { 0 };
> + struct device *dev = csiphy->camss->dev;
> + s64 link_freq;
> + 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);
> +
> + 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 +645,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 +782,69 @@ 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;
> + u8 combo_mode;
> + 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;
> +
> + combo_mode = args.args[0];
> + if (combo_mode != PHY_TYPE_DPHY) {
> + dev_err(dev, "%s mode %d not supported\n", csiphy->name, combo_mode);
> + ret = -ENOTSUPP;
> + 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->cfg.combo_mode = combo_mode;
> + 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 +879,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 +898,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 +933,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 +976,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 5fb5ad87e1671..b1737b5d52160 100644
> --- a/drivers/media/platform/qcom/camss/camss.c
> +++ b/drivers/media/platform/qcom/camss/camss.c
> @@ -4450,14 +4450,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;
> @@ -4489,15 +4510,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);
> }
> }
>
> @@ -4574,6 +4606,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,
> @@ -4683,6 +4718,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) {
> @@ -4738,8 +4776,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;
> }
> @@ -4754,8 +4794,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]);
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 07/18] media: qcom: camss: Drop legacy PHY descriptions from x1e
2026-02-25 15:11 ` [PATCH v8 07/18] media: qcom: camss: Drop legacy PHY descriptions from x1e Bryan O'Donoghue
@ 2026-02-27 22:03 ` Christopher Obbard
0 siblings, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:03 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> x1e is the first CAMSS SoC to use the new PHY interface. Drop the redundant
> legacy CSIPHY descriptions.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Tested-by: Christopher Obbard <christopher.obbard@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 b1737b5d52160..0ebe634f5d96b 100644
> --- a/drivers/media/platform/qcom/camss/camss.c
> +++ b/drivers/media/platform/qcom/camss/camss.c
> @@ -3895,15 +3895,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,
> @@ -3912,15 +3903,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,
> @@ -3929,15 +3911,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,
> @@ -3946,15 +3919,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,
> @@ -5362,7 +5326,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,
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 08/18] arm64: dts: qcom: x1e80100: Add CAMCC block definition
2026-02-25 15:11 ` [PATCH v8 08/18] arm64: dts: qcom: x1e80100: Add CAMCC block definition Bryan O'Donoghue
@ 2026-02-27 22:03 ` Christopher Obbard
2026-03-02 16:19 ` Konrad Dybcio
1 sibling, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:03 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski, Konrad Dybcio
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> Add the CAMCC block for x1e80100. The x1e80100 CAMCC block is an iteration
> of previous CAMCC blocks with the exception of having two required
> power-domains not just one.
>
> Reviewed-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Tested-by: Christopher Obbard <christopher.obbard@linaro.org>
> arch/arm64/boot/dts/qcom/hamoa.dtsi | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/hamoa.dtsi b/arch/arm64/boot/dts/qcom/hamoa.dtsi
> index db65c392e6189..f96411f481305 100644
> --- a/arch/arm64/boot/dts/qcom/hamoa.dtsi
> +++ b/arch/arm64/boot/dts/qcom/hamoa.dtsi
> @@ -6,6 +6,7 @@
> #include <dt-bindings/clock/qcom,rpmh.h>
> #include <dt-bindings/clock/qcom,sc8280xp-lpasscc.h>
> #include <dt-bindings/clock/qcom,sm8450-videocc.h>
> +#include <dt-bindings/clock/qcom,x1e80100-camcc.h>
> #include <dt-bindings/clock/qcom,x1e80100-dispcc.h>
> #include <dt-bindings/clock/qcom,x1e80100-gcc.h>
> #include <dt-bindings/clock/qcom,x1e80100-gpucc.h>
> @@ -5464,6 +5465,23 @@ videocc: clock-controller@aaf0000 {
> #power-domain-cells = <1>;
> };
>
> +
> + camcc: clock-controller@ade0000 {
> + compatible = "qcom,x1e80100-camcc";
> + reg = <0 0x0ade0000 0 0x20000>;
> + clocks = <&gcc GCC_CAMERA_AHB_CLK>,
> + <&bi_tcxo_div2>,
> + <&bi_tcxo_ao_div2>,
> + <&sleep_clk>;
> + power-domains = <&rpmhpd RPMHPD_MXC>,
> + <&rpmhpd RPMHPD_MMCX>;
> + required-opps = <&rpmhpd_opp_low_svs>,
> + <&rpmhpd_opp_low_svs>;
> + #clock-cells = <1>;
> + #reset-cells = <1>;
> + #power-domain-cells = <1>;
> + };
> +
> mdss: display-subsystem@ae00000 {
> compatible = "qcom,x1e80100-mdss";
> reg = <0 0x0ae00000 0 0x1000>;
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 09/18] arm64: dts: qcom: x1e80100: Add CCI definitions
2026-02-25 15:11 ` [PATCH v8 09/18] arm64: dts: qcom: x1e80100: Add CCI definitions Bryan O'Donoghue
@ 2026-02-27 22:04 ` Christopher Obbard
0 siblings, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:04 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski, Konrad Dybcio
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> Add in two CCI buses.
>
> One bus has two CCI bus master pinouts:
> cci_i2c_sda0 = gpio101
> cci_i2c_scl0 = gpio102
>
> cci_i2c_sda1 = gpio103
> cci_i2c_scl1 = gpio104
>
> The second bus has two CCI bus master pinouts:
> cci_i2c_sda2 = gpio105
> cci_i2c_scl2 = gpio106
>
> aon_cci_i2c_sda3 = gpio235
> aon_cci_i2c_scl3 = gpio236
>
> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
> Reviewed-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Tested-by: Christopher Obbard <christopher.obbard@linaro.org>
> arch/arm64/boot/dts/qcom/hamoa.dtsi | 149 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 149 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/hamoa.dtsi b/arch/arm64/boot/dts/qcom/hamoa.dtsi
> index f96411f481305..38f9da6ad9ca5 100644
> --- a/arch/arm64/boot/dts/qcom/hamoa.dtsi
> +++ b/arch/arm64/boot/dts/qcom/hamoa.dtsi
> @@ -5465,6 +5465,83 @@ videocc: clock-controller@aaf0000 {
> #power-domain-cells = <1>;
> };
>
> + cci0: cci@ac15000 {
> + compatible = "qcom,x1e80100-cci", "qcom,msm8996-cci";
> + reg = <0 0x0ac15000 0 0x1000>;
> +
> + interrupts = <GIC_SPI 460 IRQ_TYPE_EDGE_RISING>;
> +
> + clocks = <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
> + <&camcc CAM_CC_CPAS_AHB_CLK>,
> + <&camcc CAM_CC_CCI_0_CLK>;
> + clock-names = "camnoc_axi",
> + "cpas_ahb",
> + "cci";
> +
> + power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
> +
> + pinctrl-0 = <&cci0_default>;
> + pinctrl-1 = <&cci0_sleep>;
> + pinctrl-names = "default", "sleep";
> +
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + status = "disabled";
> +
> + cci0_i2c0: i2c-bus@0 {
> + reg = <0>;
> + clock-frequency = <1000000>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + };
> +
> + cci0_i2c1: i2c-bus@1 {
> + reg = <1>;
> + clock-frequency = <1000000>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + };
> + };
> +
> + cci1: cci@ac16000 {
> + compatible = "qcom,x1e80100-cci", "qcom,msm8996-cci";
> + reg = <0 0x0ac16000 0 0x1000>;
> +
> + interrupts = <GIC_SPI 271 IRQ_TYPE_EDGE_RISING>;
> +
> + clocks = <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
> + <&camcc CAM_CC_CPAS_AHB_CLK>,
> + <&camcc CAM_CC_CCI_1_CLK>;
> + clock-names = "camnoc_axi",
> + "cpas_ahb",
> + "cci";
> +
> + power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
> +
> + pinctrl-0 = <&cci1_default>;
> + pinctrl-1 = <&cci1_sleep>;
> + pinctrl-names = "default", "sleep";
> +
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + status = "disabled";
> +
> + cci1_i2c0: i2c-bus@0 {
> + reg = <0>;
> + clock-frequency = <1000000>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + };
> +
> + cci1_i2c1: i2c-bus@1 {
> + reg = <1>;
> + clock-frequency = <1000000>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + };
> + };
>
> camcc: clock-controller@ade0000 {
> compatible = "qcom,x1e80100-camcc";
> @@ -6116,6 +6193,78 @@ tlmm: pinctrl@f100000 {
> gpio-ranges = <&tlmm 0 0 239>;
> wakeup-parent = <&pdc>;
>
> + cci0_default: cci0-default-state {
> + cci0_i2c0_default: cci0-i2c0-default-pins {
> + /* cci_i2c_sda0, cci_i2c_scl0 */
> + pins = "gpio101", "gpio102";
> + function = "cci_i2c";
> + drive-strength = <2>;
> + bias-pull-up;
> + };
> +
> + cci0_i2c1_default: cci0-i2c1-default-pins {
> + /* cci_i2c_sda1, cci_i2c_scl1 */
> + pins = "gpio103", "gpio104";
> + function = "cci_i2c";
> + drive-strength = <2>;
> + bias-pull-up;
> + };
> + };
> +
> + cci0_sleep: cci0-sleep-state {
> + cci0_i2c0_sleep: cci0-i2c0-sleep-pins {
> + /* cci_i2c_sda0, cci_i2c_scl0 */
> + pins = "gpio101", "gpio102";
> + function = "cci_i2c";
> + drive-strength = <2>;
> + bias-pull-down;
> + };
> +
> + cci0_i2c1_sleep: cci0-i2c1-sleep-pins {
> + /* cci_i2c_sda1, cci_i2c_scl1 */
> + pins = "gpio103", "gpio104";
> + function = "cci_i2c";
> + drive-strength = <2>;
> + bias-pull-down;
> + };
> + };
> +
> + cci1_default: cci1-default-state {
> + cci1_i2c0_default: cci1-i2c0-default-pins {
> + /* cci_i2c_sda2, cci_i2c_scl2 */
> + pins = "gpio105", "gpio106";
> + function = "cci_i2c";
> + drive-strength = <2>;
> + bias-pull-up;
> + };
> +
> + cci1_i2c1_default: cci1-i2c1-default-pins {
> + /* aon_cci_i2c_sda3, aon_cci_i2c_scl3 */
> + pins = "gpio235", "gpio236";
> + function = "aon_cci";
> + drive-strength = <2>;
> + bias-pull-up;
> + };
> + };
> +
> + cci1_sleep: cci1-sleep-state {
> + cci1_i2c0_sleep: cci1-i2c0-sleep-pins {
> + /* cci_i2c_sda2, cci_i2c_scl2 */
> + pins = "gpio105", "gpio106";
> + function = "cci_i2c";
> + drive-strength = <2>;
> + bias-pull-down;
> + };
> +
> + cci1_i2c1_sleep: cci1-i2c1-sleep-pins {
> + /* aon_cci_i2c_sda3, aon_cci_i2c_scl3 */
> + pins = "gpio235", "gpio236";
> + function = "aon_cci";
> + drive-strength = <2>;
> + bias-pull-down;
> + };
> + };
> +
> edp0_hpd_default: edp0-hpd-default-state {
> pins = "gpio119";
> function = "edp0_hot";
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 10/18] arm64: dts: qcom: x1e80100: Add MIPI CSI PHY nodes
2026-02-25 15:11 ` [PATCH v8 10/18] arm64: dts: qcom: x1e80100: Add MIPI CSI PHY nodes Bryan O'Donoghue
2026-02-26 7:11 ` Krzysztof Kozlowski
@ 2026-02-27 22:04 ` Christopher Obbard
1 sibling, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:04 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> Add csiphy nodes for
>
> - csiphy0
> - csiphy1
> - csiphy2
> - csiphy4
>
> The irregular naming of the PHYs comes directly from the hardware which for
> whatever reason skipped csiphy3.
>
> Separating the nodes from CAMSS as we have done with the sensor I2C bus aka
> the CCI interface is justified since the CSIPHYs have their own pinouts and
> voltage rails.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Tested-by: Christopher Obbard <christopher.obbard@linaro.org>
> arch/arm64/boot/dts/qcom/hamoa.dtsi | 115 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 115 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/hamoa.dtsi b/arch/arm64/boot/dts/qcom/hamoa.dtsi
> index 38f9da6ad9ca5..9c5ebe1b48ecd 100644
> --- a/arch/arm64/boot/dts/qcom/hamoa.dtsi
> +++ b/arch/arm64/boot/dts/qcom/hamoa.dtsi
> @@ -707,6 +707,25 @@ smem_mem: smem@ffe00000 {
> };
> };
>
> + csiphy_opp_table: opp-table-csiphy {
> + compatible = "operating-points-v2";
> +
> + opp-300000000 {
> + opp-hz = /bits/ 64 <300000000>;
> + required-opps = <&rpmhpd_opp_low_svs_d1>;
> + };
> +
> + opp-400000000 {
> + opp-hz = /bits/ 64 <400000000>;
> + required-opps = <&rpmhpd_opp_low_svs>;
> + };
> +
> + opp-480000000 {
> + opp-hz = /bits/ 64 <480000000>;
> + required-opps = <&rpmhpd_opp_low_svs>;
> + };
> + };
> +
> qup_opp_table_100mhz: opp-table-qup100mhz {
> compatible = "operating-points-v2";
>
> @@ -5543,6 +5562,102 @@ cci1_i2c1: i2c-bus@1 {
> };
> };
>
> + csiphy0: csiphy@ace4000 {
> + compatible = "qcom,x1e80100-csi2-phy";
> + reg = <0 0x0ace4000 0 0x2000>;
> +
> + clocks = <&camcc CAM_CC_CSIPHY0_CLK>,
> + <&camcc CAM_CC_CSI0PHYTIMER_CLK>,
> + <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
> + <&camcc CAM_CC_CPAS_AHB_CLK>;
> + clock-names = "csiphy",
> + "csiphy_timer",
> + "camnoc_axi",
> + "cpas_ahb";
> +
> + operating-points-v2 = <&csiphy_opp_table>;
> +
> + interrupts = <GIC_SPI 477 IRQ_TYPE_EDGE_RISING>;
> +
> + power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
> +
> + #phy-cells = <1>;
> +
> + status = "disabled";
> + };
> +
> + csiphy1: csiphy@ace6000 {
> + compatible = "qcom,x1e80100-csi2-phy";
> + reg = <0 0x0ace6000 0 0x2000>;
> +
> + clocks = <&camcc CAM_CC_CSIPHY1_CLK>,
> + <&camcc CAM_CC_CSI1PHYTIMER_CLK>,
> + <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
> + <&camcc CAM_CC_CPAS_AHB_CLK>;
> + clock-names = "csiphy",
> + "csiphy_timer",
> + "camnoc_axi",
> + "cpas_ahb";
> +
> + operating-points-v2 = <&csiphy_opp_table>;
> +
> + interrupts = <GIC_SPI 478 IRQ_TYPE_EDGE_RISING>;
> +
> + power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
> +
> + #phy-cells = <1>;
> +
> + status = "disabled";
> + };
> +
> + csiphy2: csiphy@ace8000 {
> + compatible = "qcom,x1e80100-csi2-phy";
> + reg = <0 0x0ace8000 0 0x2000>;
> +
> + clocks = <&camcc CAM_CC_CSIPHY2_CLK>,
> + <&camcc CAM_CC_CSI2PHYTIMER_CLK>,
> + <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
> + <&camcc CAM_CC_CPAS_AHB_CLK>;
> + clock-names = "csiphy",
> + "csiphy_timer",
> + "camnoc_axi",
> + "cpas_ahb";
> +
> + operating-points-v2 = <&csiphy_opp_table>;
> +
> + interrupts = <GIC_SPI 479 IRQ_TYPE_EDGE_RISING>;
> +
> + power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
> +
> + #phy-cells = <1>;
> +
> + status = "disabled";
> + };
> +
> + csiphy4: csiphy@acec000 {
> + compatible = "qcom,x1e80100-csi2-phy";
> + reg = <0 0x0acec000 0 0x2000>;
> +
> + clocks = <&camcc CAM_CC_CSIPHY4_CLK>,
> + <&camcc CAM_CC_CSI4PHYTIMER_CLK>,
> + <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
> + <&camcc CAM_CC_CPAS_AHB_CLK>;
> + clock-names = "csiphy",
> + "csiphy_timer",
> + "camnoc_axi",
> + "cpas_ahb";
> +
> + operating-points-v2 = <&csiphy_opp_table>;
> +
> + interrupts = <GIC_SPI 122 IRQ_TYPE_EDGE_RISING>;
> +
> + power-domains = <&camcc CAM_CC_TITAN_TOP_GDSC>;
> +
> + #phy-cells = <1>;
> +
> + status = "disabled";
> + };
> +
> camcc: clock-controller@ade0000 {
> compatible = "qcom,x1e80100-camcc";
> reg = <0 0x0ade0000 0 0x20000>;
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 11/18] arm64: dts: qcom: x1e80100: Add CAMSS block definition
2026-02-25 15:11 ` [PATCH v8 11/18] arm64: dts: qcom: x1e80100: Add CAMSS block definition Bryan O'Donoghue
@ 2026-02-27 22:05 ` Christopher Obbard
0 siblings, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:05 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> Add dtsi to describe the xe180100 CAMSS block
>
> 4 x CSIPHY
> 3 x TPG
> 2 x CSID
> 2 x CSID Lite
> 2 x IFE
> 2 x IFE Lite
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Tested-by: Christopher Obbard <christopher.obbard@linaro.org>
> arch/arm64/boot/dts/qcom/hamoa.dtsi | 171 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 171 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/hamoa.dtsi b/arch/arm64/boot/dts/qcom/hamoa.dtsi
> index 9c5ebe1b48ecd..5fac814ce0f6b 100644
> --- a/arch/arm64/boot/dts/qcom/hamoa.dtsi
> +++ b/arch/arm64/boot/dts/qcom/hamoa.dtsi
> @@ -16,6 +16,7 @@
> #include <dt-bindings/interconnect/qcom,x1e80100-rpmh.h>
> #include <dt-bindings/interrupt-controller/arm-gic.h>
> #include <dt-bindings/mailbox/qcom-ipcc.h>
> +#include <dt-bindings/phy/phy.h>
> #include <dt-bindings/phy/phy-qcom-qmp.h>
> #include <dt-bindings/power/qcom,rpmhpd.h>
> #include <dt-bindings/power/qcom-rpmpd.h>
> @@ -5562,6 +5563,176 @@ cci1_i2c1: i2c-bus@1 {
> };
> };
>
> + camss: isp@acb6000 {
> + compatible = "qcom,x1e80100-camss";
> +
> + reg = <0 0x0acb6000 0 0x1000>,
> + <0 0x0acb7000 0 0x2000>,
> + <0 0x0acb9000 0 0x2000>,
> + <0 0x0acbb000 0 0x2000>,
> + <0 0x0acc6000 0 0x1000>,
> + <0 0x0acca000 0 0x1000>,
> + <0 0x0acf6000 0 0x1000>,
> + <0 0x0acf7000 0 0x1000>,
> + <0 0x0acf8000 0 0x1000>,
> + <0 0x0ac62000 0 0x4000>,
> + <0 0x0ac71000 0 0x4000>,
> + <0 0x0acc7000 0 0x2000>,
> + <0 0x0accb000 0 0x2000>;
> +
> + reg-names = "csid_wrapper",
> + "csid0",
> + "csid1",
> + "csid2",
> + "csid_lite0",
> + "csid_lite1",
> + "csitpg0",
> + "csitpg1",
> + "csitpg2",
> + "vfe0",
> + "vfe1",
> + "vfe_lite0",
> + "vfe_lite1";
> +
> + clocks = <&camcc CAM_CC_CAMNOC_AXI_NRT_CLK>,
> + <&camcc CAM_CC_CAMNOC_AXI_RT_CLK>,
> + <&camcc CAM_CC_CORE_AHB_CLK>,
> + <&camcc CAM_CC_CPAS_AHB_CLK>,
> + <&camcc CAM_CC_CPAS_FAST_AHB_CLK>,
> + <&camcc CAM_CC_CPAS_IFE_0_CLK>,
> + <&camcc CAM_CC_CPAS_IFE_1_CLK>,
> + <&camcc CAM_CC_CPAS_IFE_LITE_CLK>,
> + <&camcc CAM_CC_CPHY_RX_CLK_SRC>,
> + <&camcc CAM_CC_CSID_CLK>,
> + <&camcc CAM_CC_CSID_CSIPHY_RX_CLK>,
> + <&gcc GCC_CAMERA_HF_AXI_CLK>,
> + <&gcc GCC_CAMERA_SF_AXI_CLK>,
> + <&camcc CAM_CC_IFE_0_CLK>,
> + <&camcc CAM_CC_IFE_0_FAST_AHB_CLK>,
> + <&camcc CAM_CC_IFE_1_CLK>,
> + <&camcc CAM_CC_IFE_1_FAST_AHB_CLK>,
> + <&camcc CAM_CC_IFE_LITE_CLK>,
> + <&camcc CAM_CC_IFE_LITE_AHB_CLK>,
> + <&camcc CAM_CC_IFE_LITE_CPHY_RX_CLK>,
> + <&camcc CAM_CC_IFE_LITE_CSID_CLK>;
> +
> + clock-names = "camnoc_nrt_axi",
> + "camnoc_rt_axi",
> + "core_ahb",
> + "cpas_ahb",
> + "cpas_fast_ahb",
> + "cpas_vfe0",
> + "cpas_vfe1",
> + "cpas_vfe_lite",
> + "cphy_rx_clk_src",
> + "csid",
> + "csid_csiphy_rx",
> + "gcc_axi_hf",
> + "gcc_axi_sf",
> + "vfe0",
> + "vfe0_fast_ahb",
> + "vfe1",
> + "vfe1_fast_ahb",
> + "vfe_lite",
> + "vfe_lite_ahb",
> + "vfe_lite_cphy_rx",
> + "vfe_lite_csid";
> +
> + interrupts = <GIC_SPI 464 IRQ_TYPE_EDGE_RISING>,
> + <GIC_SPI 466 IRQ_TYPE_EDGE_RISING>,
> + <GIC_SPI 431 IRQ_TYPE_EDGE_RISING>,
> + <GIC_SPI 468 IRQ_TYPE_EDGE_RISING>,
> + <GIC_SPI 359 IRQ_TYPE_EDGE_RISING>,
> + <GIC_SPI 465 IRQ_TYPE_EDGE_RISING>,
> + <GIC_SPI 467 IRQ_TYPE_EDGE_RISING>,
> + <GIC_SPI 469 IRQ_TYPE_EDGE_RISING>,
> + <GIC_SPI 360 IRQ_TYPE_EDGE_RISING>;
> +
> + interrupt-names = "csid0",
> + "csid1",
> + "csid2",
> + "csid_lite0",
> + "csid_lite1",
> + "vfe0",
> + "vfe1",
> + "vfe_lite0",
> + "vfe_lite1";
> +
> + interconnects = <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_ONLY
> + &config_noc SLAVE_CAMERA_CFG QCOM_ICC_TAG_ACTIVE_ONLY>,
> + <&mmss_noc MASTER_CAMNOC_HF QCOM_ICC_TAG_ALWAYS
> + &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
> + <&mmss_noc MASTER_CAMNOC_SF QCOM_ICC_TAG_ALWAYS
> + &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
> + <&mmss_noc MASTER_CAMNOC_ICP QCOM_ICC_TAG_ALWAYS
> + &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>;
> + interconnect-names = "ahb",
> + "hf_mnoc",
> + "sf_mnoc",
> + "sf_icp_mnoc";
> +
> + iommus = <&apps_smmu 0x800 0x60>,
> + <&apps_smmu 0x860 0x60>,
> + <&apps_smmu 0x1860 0x60>,
> + <&apps_smmu 0x18e0 0x00>,
> + <&apps_smmu 0x19a0 0x20>;
> +
> + phys = <&csiphy0 PHY_TYPE_DPHY>, <&csiphy1 PHY_TYPE_DPHY>,
> + <&csiphy2 PHY_TYPE_DPHY>, <&csiphy4 PHY_TYPE_DPHY>;
> + phy-names = "csiphy0", "csiphy1",
> + "csiphy2", "csiphy4";
> +
> + power-domains = <&camcc CAM_CC_IFE_0_GDSC>,
> + <&camcc CAM_CC_IFE_1_GDSC>,
> + <&camcc CAM_CC_TITAN_TOP_GDSC>;
> + power-domain-names = "ife0",
> + "ife1",
> + "top";
> +
> + status = "disabled";
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + camss_csiphy0_inep0: endpoint@0 {
> + reg = <0>;
> + };
> + };
> +
> + port@1 {
> + reg = <1>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + camss_csiphy1_inep0: endpoint@0 {
> + reg = <0>;
> + };
> + };
> +
> + port@2 {
> + reg = <2>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + camss_csiphy2_inep0: endpoint@0 {
> + reg = <0>;
> + };
> + };
> +
> + port@3 {
> + reg = <3>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + camss_csiphy4_inep0: endpoint@0 {
> + reg = <0>;
> + };
> + };
> + };
> + };
> +
> csiphy0: csiphy@ace4000 {
> compatible = "qcom,x1e80100-csi2-phy";
> reg = <0 0x0ace4000 0 0x2000>;
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 12/18] arm64: dts: qcom: x1e80100-crd: Add pm8010 CRD pmic,id=m regulators
2026-02-25 15:11 ` [PATCH v8 12/18] arm64: dts: qcom: x1e80100-crd: Add pm8010 CRD pmic,id=m regulators Bryan O'Donoghue
@ 2026-02-27 22:05 ` Christopher Obbard
0 siblings, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:05 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski, Konrad Dybcio
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> Add pmic,id = m rpmh to regulator definitions. This regulator set provides
> vreg_l3m_1p8 the regulator for the ov08x40 RGB sensor on the CRD.
>
> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
> arch/arm64/boot/dts/qcom/x1-crd.dtsi | 30 ++++++++++++++++++++++++++++++
> 1 file changed, 30 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/x1-crd.dtsi b/arch/arm64/boot/dts/qcom/x1-crd.dtsi
> index ded96fb43489b..c89f5ad0aed56 100644
> --- a/arch/arm64/boot/dts/qcom/x1-crd.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1-crd.dtsi
> @@ -865,6 +865,36 @@ vreg_l3j_0p8: ldo3 {
> regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> };
> };
> +
> + regulators-8 {
> + compatible = "qcom,pm8010-rpmh-regulators";
> + qcom,pmic-id = "m";
> +
> + vdd-l1-l2-supply = <&vreg_s5j_1p2>;
> + vdd-l3-l4-supply = <&vreg_s4c_1p8>;
> + vdd-l7-supply = <&vreg_bob1>;
> +
> + vreg_l3m_1p8: ldo3 {
> + regulator-name = "vreg_l3m_1p8";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1808000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l4m_1p8: ldo4 {
> + regulator-name = "vreg_l4m_1p8";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1808000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l7m_2p9: ldo7 {
> + regulator-name = "vreg_l7m_2p9";
> + regulator-min-microvolt = <2912000>;
> + regulator-max-microvolt = <2912000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> + };
> };
>
> &gpu {
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 13/18] arm64: dts: qcom: x1e80100-crd: Add ov08x40 RGB sensor on CSIPHY4
2026-02-25 15:11 ` [PATCH v8 13/18] arm64: dts: qcom: x1e80100-crd: Add ov08x40 RGB sensor on CSIPHY4 Bryan O'Donoghue
@ 2026-02-27 22:06 ` Christopher Obbard
0 siblings, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:06 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> Define ov08x40 on cci1_i2c1. The RGB sensor appears on the AON CCI pins
> connected to CSIPHY4 in four lane mode.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
> arch/arm64/boot/dts/qcom/x1-crd.dtsi | 76 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 76 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/x1-crd.dtsi b/arch/arm64/boot/dts/qcom/x1-crd.dtsi
> index c89f5ad0aed56..d47404c71b80b 100644
> --- a/arch/arm64/boot/dts/qcom/x1-crd.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1-crd.dtsi
> @@ -6,6 +6,7 @@
> #include <dt-bindings/gpio/gpio.h>
> #include <dt-bindings/input/gpio-keys.h>
> #include <dt-bindings/input/input.h>
> +#include <dt-bindings/phy/phy.h>
> #include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
> #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
>
> @@ -901,6 +902,65 @@ &gpu {
> status = "okay";
> };
>
> +&camss {
> + status = "okay";
> +
> + ports {
> + /*
> + * port0 => csiphy0
> + * port1 => csiphy1
> + * port2 => csiphy2
> + * port3 => csiphy4
> + */
> + port@3 {
> + camss_csiphy4_inep0: endpoint@0 {
> + clock-lanes = <7>;
> + data-lanes = <0 1 2 3>;
> + remote-endpoint = <&ov08x40_ep>;
> + };
> + };
> + };
> +};
> +
> +&cci1 {
> + status = "okay";
> +};
> +
> +&cci1_i2c1 {
> + camera@36 {
> + compatible = "ovti,ov08x40";
> + reg = <0x36>;
> +
> + reset-gpios = <&tlmm 237 GPIO_ACTIVE_LOW>;
> + pinctrl-0 = <&cam_rgb_default>;
> + pinctrl-names = "default";
> +
> + clocks = <&camcc CAM_CC_MCLK4_CLK>;
> + assigned-clocks = <&camcc CAM_CC_MCLK4_CLK>;
> + assigned-clock-rates = <19200000>;
> +
> + orientation = <0>; /* front facing */
> +
> + avdd-supply = <&vreg_l7b_2p8>;
> + dovdd-supply = <&vreg_l3m_1p8>;
> +
> + port {
> + ov08x40_ep: endpoint {
> + data-lanes = <1 2 3 4>;
> + link-frequencies = /bits/ 64 <400000000>;
> + remote-endpoint = <&camss_csiphy4_inep0>;
> + };
> + };
> + };
> +};
> +
> +&csiphy4 {
> + vdda-0p8-supply = <&vreg_l2c_0p8>;
> + vdda-1p2-supply = <&vreg_l1c_1p2>;
> +
> + status = "okay";
> +};
> +
> &i2c0 {
> clock-frequency = <400000>;
>
> @@ -1515,6 +1575,22 @@ &tlmm {
> <44 4>, /* SPI (TPM) */
> <238 1>; /* UFS Reset */
>
> + cam_rgb_default: cam-rgb-default-state {
> + mclk-pins {
> + pins = "gpio100";
> + function = "cam_aon";
> + drive-strength = <16>;
> + bias-disable;
> + };
> +
> + reset-n-pins {
> + pins = "gpio237";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-disable;
> + };
> + };
> +
> edp_reg_en: edp-reg-en-state {
> pins = "gpio70";
> function = "gpio";
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 15/18] arm64: dts: qcom: x1e80100-t14s: Add on ov02c10 RGB sensor on CSIPHY4
2026-02-25 15:11 ` [PATCH v8 15/18] arm64: dts: qcom: x1e80100-t14s: Add on ov02c10 RGB sensor on CSIPHY4 Bryan O'Donoghue
@ 2026-02-27 22:08 ` Christopher Obbard
0 siblings, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:08 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> Switch on the ov02c10 RGB sensor on CSIPHY4.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Tested-by: Christopher Obbard <christopher.obbard@linaro.org>
> .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi | 77 ++++++++++++++++++++++
> 1 file changed, 77 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
> index ee49785c9d005..54bf21f1c6f37 100644
> --- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
> @@ -9,6 +9,7 @@
> #include <dt-bindings/gpio/gpio.h>
> #include <dt-bindings/input/gpio-keys.h>
> #include <dt-bindings/input/input.h>
> +#include <dt-bindings/phy/phy.h>
> #include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
> #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
>
> @@ -866,6 +867,66 @@ vreg_l7m_2p8: ldo7 {
>
> };
>
> +&camss {
> + status = "okay";
> +
> + ports {
> + /*
> + * port0 => csiphy0
> + * port1 => csiphy1
> + * port2 => csiphy2
> + * port3 => csiphy4
> + */
> + port@3 {
> + camss_csiphy4_inep0: endpoint@0 {
> + clock-lanes = <7>;
> + data-lanes = <0 1>;
> + remote-endpoint = <&ov02c10_ep>;
> + };
> + };
> + };
> +};
> +
> +&cci1 {
> + status = "okay";
> +};
> +
> +&cci1_i2c1 {
> + camera@36 {
> + compatible = "ovti,ov02c10";
> + reg = <0x36>;
> +
> + reset-gpios = <&tlmm 237 GPIO_ACTIVE_LOW>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&cam_rgb_default>;
> +
> + clocks = <&camcc CAM_CC_MCLK4_CLK>;
> + assigned-clocks = <&camcc CAM_CC_MCLK4_CLK>;
> + assigned-clock-rates = <19200000>;
> +
> + orientation = <0>; /* front facing */
> +
> + avdd-supply = <&vreg_l7m_2p8>;
> + dvdd-supply = <&vreg_l2m_1p2>;
> + dovdd-supply = <&vreg_l4m_1p8>;
> +
> + port {
> + ov02c10_ep: endpoint {
> + data-lanes = <1 2>;
> + link-frequencies = /bits/ 64 <400000000>;
> + remote-endpoint = <&camss_csiphy4_inep0>;
> + };
> + };
> + };
> +};
> +
> +&csiphy4 {
> + vdda-0p8-supply = <&vreg_l2c_0p8>;
> + vdda-1p2-supply = <&vreg_l1c_1p2>;
> +
> + status = "okay";
> +};
> +
> &gpu {
> status = "okay";
> };
> @@ -1447,6 +1508,22 @@ &tlmm {
> <72 2>, /* Secure EC I2C connection (?) */
> <238 1>; /* UFS Reset */
>
> + cam_rgb_default: cam-rgb-default-state {
> + mclk-pins {
> + pins = "gpio100";
> + function = "cam_aon";
> + drive-strength = <16>;
> + bias-disable;
> + };
> +
> + reset-n-pins {
> + pins = "gpio237";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-disable;
> + };
> + };
> +
> ec_int_n_default: ec-int-n-state {
> pins = "gpio66";
> function = "gpio";
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 16/18] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add pm8010 camera PMIC with voltage levels for IR and RGB camera
2026-02-25 15:11 ` [PATCH v8 16/18] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add pm8010 camera PMIC with voltage levels for IR and RGB camera Bryan O'Donoghue
@ 2026-02-27 22:08 ` Christopher Obbard
0 siblings, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:08 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> Add voltage regulators-8 for Camera on slim7x including:
>
> - vreg_l7m_2p8
> - vreg_l2m_1p2
> - vreg_l4m_1p8
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.or>
> .../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 51 ++++++++++++++++++++++
> 1 file changed, 51 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> index d6472e5a3f9fa..f10dff1da7f8e 100644
> --- a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> +++ b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> @@ -795,6 +795,57 @@ vreg_l3j_0p8: ldo3 {
> regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> };
> };
> +
> + regulators-8 {
> + compatible = "qcom,pm8010-rpmh-regulators";
> + qcom,pmic-id = "m";
> +
> + vdd-l1-l2-supply = <&vreg_s5j_1p2>;
> + vdd-l3-l4-supply = <&vreg_s4c_1p8>;
> + vdd-l7-supply = <&vreg_bob1>;
> +
> + vreg_l1m_1p2: ldo1 {
> + regulator-name = "vreg_l1m_1p2";
> + regulator-min-microvolt = <1200000>;
> + regulator-max-microvolt = <1260000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l2m_1p2: ldo2 {
> + regulator-name = "vreg_l2m_1p2";
> + regulator-min-microvolt = <1200000>;
> + regulator-max-microvolt = <1260000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l3m_1p8: ldo3 {
> + regulator-name = "vreg_l3m_1p8";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1900000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l4m_1p8: ldo4 {
> + regulator-name = "vreg_l4m_1p8";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1900000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l5m_2p8: ldo5 {
> + regulator-name = "vreg_l5m_2p8";
> + regulator-min-microvolt = <2800000>;
> + regulator-max-microvolt = <3072000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l7m_2p8: ldo7 {
> + regulator-name = "vreg_l7m_2p8";
> + regulator-min-microvolt = <2800000>;
> + regulator-max-microvolt = <3072000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> + };
> };
>
> &gpu {
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 17/18] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add ov02c10 RGB sensor on CSIPHY4
2026-02-25 15:11 ` [PATCH v8 17/18] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add ov02c10 RGB sensor on CSIPHY4 Bryan O'Donoghue
@ 2026-02-27 22:08 ` Christopher Obbard
0 siblings, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:08 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> Add in the RGB sensor on CSIPHY4.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
> .../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 77 ++++++++++++++++++++++
> 1 file changed, 77 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> index f10dff1da7f8e..f3f4841ad2c83 100644
> --- a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> +++ b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> @@ -7,6 +7,7 @@
>
> #include <dt-bindings/gpio/gpio.h>
> #include <dt-bindings/input/gpio-keys.h>
> +#include <dt-bindings/phy/phy.h>
> #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
>
> #include "hamoa.dtsi"
> @@ -856,6 +857,66 @@ &gpu_zap_shader {
> firmware-name = "qcom/x1e80100/LENOVO/83ED/qcdxkmsuc8380.mbn";
> };
>
> +&camss {
> + status = "okay";
> +
> + ports {
> + /*
> + * port0 => csiphy0
> + * port1 => csiphy1
> + * port2 => csiphy2
> + * port3 => csiphy4
> + */
> + port@3 {
> + camss_csiphy4_inep0: endpoint@0 {
> + clock-lanes = <7>;
> + data-lanes = <0 1>;
> + remote-endpoint = <&ov02c10_ep>;
> + };
> + };
> + };
> +};
> +
> +&cci1 {
> + status = "okay";
> +};
> +
> +&cci1_i2c1 {
> + camera@36 {
> + compatible = "ovti,ov02c10";
> + reg = <0x36>;
> +
> + reset-gpios = <&tlmm 237 GPIO_ACTIVE_LOW>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&cam_rgb_default>;
> +
> + clocks = <&camcc CAM_CC_MCLK4_CLK>;
> + assigned-clocks = <&camcc CAM_CC_MCLK4_CLK>;
> + assigned-clock-rates = <19200000>;
> +
> + orientation = <0>; /* front facing */
> +
> + avdd-supply = <&vreg_l7m_2p8>;
> + dvdd-supply = <&vreg_l2m_1p2>;
> + dovdd-supply = <&vreg_l4m_1p8>;
> +
> + port {
> + ov02c10_ep: endpoint {
> + data-lanes = <1 2>;
> + link-frequencies = /bits/ 64 <400000000>;
> + remote-endpoint = <&camss_csiphy4_inep0>;
> + };
> + };
> + };
> +};
> +
> +&csiphy4 {
> + vdda-0p8-supply = <&vreg_l2c_0p8>;
> + vdda-1p2-supply = <&vreg_l1c_1p2>;
> +
> + status = "okay";
> +};
> +
> &i2c0 {
> clock-frequency = <400000>;
>
> @@ -1403,6 +1464,22 @@ &tlmm {
> <44 4>, /* SPI (TPM) */
> <238 1>; /* UFS Reset */
>
> + cam_rgb_default: cam-rgb-default-state {
> + mclk-pins {
> + pins = "gpio100";
> + function = "cam_aon";
> + drive-strength = <16>;
> + bias-disable;
> + };
> +
> + reset-n-pins {
> + pins = "gpio237";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-disable;
> + };
> + };
> +
> edp_reg_en: edp-reg-en-state {
> pins = "gpio70";
> function = "gpio";
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 18/18] arm64: dts: qcom: x1e80100-dell-inspiron14-7441: Switch on CAMSS RGB sensor
2026-02-25 15:11 ` [PATCH v8 18/18] arm64: dts: qcom: x1e80100-dell-inspiron14-7441: Switch on CAMSS RGB sensor Bryan O'Donoghue
@ 2026-02-27 22:09 ` Christopher Obbard
0 siblings, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-02-27 22:09 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,
Vladimir Zapolskiy, Bryan O'Donoghue
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
Hi Bryan,
On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> Inspiron14 has a ov02e10 sensor on CSIPHY4. Enable the list of dependencies
> now.
>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
> arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi | 61 +++++++++++++++++++++++++++++
> 1 file changed, 61 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi b/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
> index bf04a12b16bc9..d21963e52ee48 100644
> --- a/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
> @@ -10,6 +10,7 @@
> #include <dt-bindings/input/gpio-keys.h>
> #include <dt-bindings/input/input.h>
> #include <dt-bindings/leds/common.h>
> +#include <dt-bindings/phy/phy.h>
> #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
>
> #include "hamoa-pmics.dtsi"
> @@ -792,6 +793,66 @@ vreg_l3j_0p8: ldo3 {
> };
> };
>
> +&camss {
> + status = "okay";
> +
> + ports {
> + /*
> + * port0 => csiphy0
> + * port1 => csiphy1
> + * port2 => csiphy2
> + * port3 => csiphy4
> + */
> + port@3 {
> + camss_csiphy4_inep0: endpoint@0 {
> + clock-lanes = <7>;
> + data-lanes = <0 1>;
> + remote-endpoint = <&ov02e10_ep>;
> + };
> + };
> + };
> +};
> +
> +&cci1 {
> + status = "okay";
> +};
> +
> +&cci1_i2c1 {
> + camera@10 {
> + compatible = "ovti,ov02e10";
> + reg = <0x10>;
> +
> + reset-gpios = <&tlmm 237 GPIO_ACTIVE_LOW>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&cam_rgb_default>;
> +
> + clocks = <&camcc CAM_CC_MCLK4_CLK>;
> + assigned-clocks = <&camcc CAM_CC_MCLK4_CLK>;
> + assigned-clock-rates = <19200000>;
> +
> + orientation = <0>; /* front facing */
> +
> + avdd-supply = <&vreg_l7b_2p8>;
> + dvdd-supply = <&vreg_l7b_2p8>;
> + dovdd-supply = <&vreg_cam_1p8>;
> +
> + port {
> + ov02e10_ep: endpoint {
> + data-lanes = <1 2>;
> + link-frequencies = /bits/ 64 <360000000>;
> + remote-endpoint = <&camss_csiphy4_inep0>;
> + };
> + };
> + };
> +};
> +
> +&csiphy4 {
> + vdda-0p8-supply = <&vreg_l2c_0p8>;
> + vdda-1p2-supply = <&vreg_l1c_1p2>;
> +
> + status = "okay";
> +};
> +
> &i2c0 {
> clock-frequency = <400000>;
>
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 03/18] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints
2026-02-27 22:01 ` Christopher Obbard
@ 2026-02-28 7:17 ` Dmitry Baryshkov
2026-03-04 4:38 ` Christopher Obbard
0 siblings, 1 reply; 62+ messages in thread
From: Dmitry Baryshkov @ 2026-02-28 7:17 UTC (permalink / raw)
To: Christopher Obbard
Cc: Bryan O'Donoghue, 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,
Krzysztof Kozlowski
On Fri, Feb 27, 2026 at 10:01:43PM +0000, Christopher Obbard wrote:
> Hi Bryan,
>
> On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
> >
> > Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
>
> Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
Christopher, please trim your messages. There is no point in having the
whole original patch to be quoted if you are replying with an R-B.
>
> > ---
> > .../bindings/media/qcom,x1e80100-camss.yaml | 69 ++++++++++++++++++++--
> > 1 file changed, 65 insertions(+), 4 deletions(-)
> >
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles
2026-02-27 22:01 ` Christopher Obbard
@ 2026-02-28 13:28 ` Krzysztof Kozlowski
0 siblings, 0 replies; 62+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-28 13:28 UTC (permalink / raw)
To: Christopher Obbard, Bryan O'Donoghue, 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
On 27/02/2026 23:01, Christopher Obbard wrote:
> Hi Bryan,
>
> On Wed, 2026-02-25 at 15:11 +0000, Bryan O'Donoghue wrote:
>> We currently do not have an upstream user of the x1e CAMSS schema which
>> allows us to make this the first platform to treat the CSI PHYs as separate
>> devices in much the same way as we treat the CCI block as separate devices.
>>
>> Convert the embedded CSIPHY node data to simple phys = <> removing all of
>> the PHY specific stuff previously embedded.
>>
>> I gave some serious thought to making the Test Pattern Generators TPGs into
>> PHY nodes also but, unlike the CSIPHYs the TPGs have no dedicated external
>> pins nor regulators.
>>
>> The CSIPHYs OTOH have dedicated in-fact generally unmuxed pins on Qualcomm
>> SoCs and each CSIPHY has its own set of input power rails usually 0p8 and
>> 1p2.
>>
>> Instead of defining the CSIPHYs as children of the CAMSS block, we take the
>> same approach as the CCI/I2C bus dedicated to CAMSS and define the CSIPHYs
>> as their own nodes.
>>
>> Remove the embedded CSIPHY specific data and give CAMSS regular,
>> bog-standard phys = <>;
>>
>> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
>
> Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
This is surprising since I clearly object to these patches and pointed
out issues.
This is also obsolete version, thus your review will not apply to new
one (it's different).
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 08/18] arm64: dts: qcom: x1e80100: Add CAMCC block definition
2026-02-25 15:11 ` [PATCH v8 08/18] arm64: dts: qcom: x1e80100: Add CAMCC block definition Bryan O'Donoghue
2026-02-27 22:03 ` Christopher Obbard
@ 2026-03-02 16:19 ` Konrad Dybcio
2026-03-03 5:56 ` Taniya Das
1 sibling, 1 reply; 62+ messages in thread
From: Konrad Dybcio @ 2026-03-02 16:19 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,
Vladimir Zapolskiy, Bryan O'Donoghue, Taniya Das
Cc: linux-arm-msm, linux-clk, devicetree, linux-kernel, linux-media,
Krzysztof Kozlowski
On 2/25/26 4:11 PM, Bryan O'Donoghue wrote:
> Add the CAMCC block for x1e80100. The x1e80100 CAMCC block is an iteration
> of previous CAMCC blocks with the exception of having two required
> power-domains not just one.
>
> Reviewed-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
> arch/arm64/boot/dts/qcom/hamoa.dtsi | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/hamoa.dtsi b/arch/arm64/boot/dts/qcom/hamoa.dtsi
> index db65c392e6189..f96411f481305 100644
> --- a/arch/arm64/boot/dts/qcom/hamoa.dtsi
> +++ b/arch/arm64/boot/dts/qcom/hamoa.dtsi
> @@ -6,6 +6,7 @@
> #include <dt-bindings/clock/qcom,rpmh.h>
> #include <dt-bindings/clock/qcom,sc8280xp-lpasscc.h>
> #include <dt-bindings/clock/qcom,sm8450-videocc.h>
> +#include <dt-bindings/clock/qcom,x1e80100-camcc.h>
> #include <dt-bindings/clock/qcom,x1e80100-dispcc.h>
> #include <dt-bindings/clock/qcom,x1e80100-gcc.h>
> #include <dt-bindings/clock/qcom,x1e80100-gpucc.h>
> @@ -5464,6 +5465,23 @@ videocc: clock-controller@aaf0000 {
> #power-domain-cells = <1>;
> };
>
> +
> + camcc: clock-controller@ade0000 {
> + compatible = "qcom,x1e80100-camcc";
> + reg = <0 0x0ade0000 0 0x20000>;
> + clocks = <&gcc GCC_CAMERA_AHB_CLK>,
> + <&bi_tcxo_div2>,
> + <&bi_tcxo_ao_div2>,
> + <&sleep_clk>;
> + power-domains = <&rpmhpd RPMHPD_MXC>,
> + <&rpmhpd RPMHPD_MMCX>;
> + required-opps = <&rpmhpd_opp_low_svs>,
> + <&rpmhpd_opp_low_svs>;
Taniya, in light of the recent discoveries on other platforms, does x1
need a performance vote on MXA here?
Konrad
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 08/18] arm64: dts: qcom: x1e80100: Add CAMCC block definition
2026-03-02 16:19 ` Konrad Dybcio
@ 2026-03-03 5:56 ` Taniya Das
2026-03-03 10:05 ` Konrad Dybcio
0 siblings, 1 reply; 62+ messages in thread
From: Taniya Das @ 2026-03-03 5:56 UTC (permalink / raw)
To: Konrad Dybcio, Bryan O'Donoghue, 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,
Krzysztof Kozlowski
>>
>> +
>> + camcc: clock-controller@ade0000 {
>> + compatible = "qcom,x1e80100-camcc";
>> + reg = <0 0x0ade0000 0 0x20000>;
>> + clocks = <&gcc GCC_CAMERA_AHB_CLK>,
>> + <&bi_tcxo_div2>,
>> + <&bi_tcxo_ao_div2>,
>> + <&sleep_clk>;
>> + power-domains = <&rpmhpd RPMHPD_MXC>,
>> + <&rpmhpd RPMHPD_MMCX>;
>> + required-opps = <&rpmhpd_opp_low_svs>,
>> + <&rpmhpd_opp_low_svs>;
>
> Taniya, in light of the recent discoveries on other platforms, does x1
> need a performance vote on MXA here?
Konrad, MxA is always ON, and with the current clock configuration, a
performance vote isn’t required because the clock controller currently
votes only for the minimum level.
--
Thanks,
Taniya Das
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 08/18] arm64: dts: qcom: x1e80100: Add CAMCC block definition
2026-03-03 5:56 ` Taniya Das
@ 2026-03-03 10:05 ` Konrad Dybcio
0 siblings, 0 replies; 62+ messages in thread
From: Konrad Dybcio @ 2026-03-03 10:05 UTC (permalink / raw)
To: Taniya Das, Bryan O'Donoghue, 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,
Krzysztof Kozlowski
On 3/3/26 6:56 AM, Taniya Das wrote:
>
>>>
>>> +
>>> + camcc: clock-controller@ade0000 {
>>> + compatible = "qcom,x1e80100-camcc";
>>> + reg = <0 0x0ade0000 0 0x20000>;
>>> + clocks = <&gcc GCC_CAMERA_AHB_CLK>,
>>> + <&bi_tcxo_div2>,
>>> + <&bi_tcxo_ao_div2>,
>>> + <&sleep_clk>;
>>> + power-domains = <&rpmhpd RPMHPD_MXC>,
>>> + <&rpmhpd RPMHPD_MMCX>;
>>> + required-opps = <&rpmhpd_opp_low_svs>,
>>> + <&rpmhpd_opp_low_svs>;
>>
>> Taniya, in light of the recent discoveries on other platforms, does x1
>> need a performance vote on MXA here?
>
> Konrad, MxA is always ON, and with the current clock configuration, a
> performance vote isn’t required because the clock controller currently
> votes only for the minimum level.
Yes, it's on, however I'm asking whether it needs to be at any specific
higher OPP as the clocks are scaled to higher rates.
In particular, PLL2 and the MCLK RCGs/branches have *some* references
to MXA, yet their FMAX is possible @ LOWSVS_D1, so it may be that we
*effectively* don't need any.
Konrad
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v8 03/18] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints
2026-02-28 7:17 ` Dmitry Baryshkov
@ 2026-03-04 4:38 ` Christopher Obbard
0 siblings, 0 replies; 62+ messages in thread
From: Christopher Obbard @ 2026-03-04 4:38 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Bryan O'Donoghue, 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,
Krzysztof Kozlowski
Hi Dmitry,
On Sat, 28 Feb 2026 at 07:17, Dmitry Baryshkov
<dmitry.baryshkov@oss.qualcomm.com> wrote:
> On Fri, Feb 27, 2026 at 10:01:43PM +0000, Christopher Obbard wrote:
> > Reviewed-by: Christopher Obbard <christopher.obbard@linaro.org>
>
> Christopher, please trim your messages. There is no point in having the
> whole original patch to be quoted if you are replying with an R-B.
Thanks for the hint, I will make sure to trim my replies in future.
Chris
^ permalink raw reply [flat|nested] 62+ messages in thread
end of thread, other threads:[~2026-03-04 4:38 UTC | newest]
Thread overview: 62+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-25 15:11 [PATCH v8 00/18] Add dt-bindings and dtsi changes for CAMSS on x1e80100 silicon Bryan O'Donoghue
2026-02-25 15:11 ` [PATCH v8 01/18] dt-bindings: media: qcom,x1e80100-camss: Assign correct main register bank to first address Bryan O'Donoghue
2026-02-26 7:04 ` Krzysztof Kozlowski
2026-02-26 9:25 ` Bryan O'Donoghue
2026-02-26 9:32 ` Krzysztof Kozlowski
2026-02-26 9:35 ` Bryan O'Donoghue
2026-02-26 9:38 ` Krzysztof Kozlowski
2026-02-26 9:49 ` Bryan O'Donoghue
2026-02-27 22:01 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 02/18] dt-bindings: media: qcom,x1e80100-camss: Convert from inline PHY definitions to PHY handles Bryan O'Donoghue
2026-02-26 7:07 ` Krzysztof Kozlowski
2026-02-26 9:27 ` Bryan O'Donoghue
2026-02-26 9:33 ` Krzysztof Kozlowski
2026-02-26 9:40 ` Bryan O'Donoghue
2026-02-26 9:50 ` Krzysztof Kozlowski
2026-02-26 10:06 ` Bryan O'Donoghue
2026-02-27 7:24 ` Krzysztof Kozlowski
2026-02-27 8:48 ` Bryan O'Donoghue
2026-02-27 20:10 ` Dmitry Baryshkov
2026-02-27 21:49 ` Bryan O'Donoghue
2026-02-27 22:01 ` Christopher Obbard
2026-02-28 13:28 ` Krzysztof Kozlowski
2026-02-25 15:11 ` [PATCH v8 03/18] dt-bindings: media: qcom,x1e80100-camss: Add support for combo-mode endpoints Bryan O'Donoghue
2026-02-27 22:01 ` Christopher Obbard
2026-02-28 7:17 ` Dmitry Baryshkov
2026-03-04 4:38 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 04/18] dt-bindings: media: qcom,x1e80100-camss: Reduce iommus to five Bryan O'Donoghue
2026-02-26 7:08 ` Krzysztof Kozlowski
2026-02-27 22:02 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 05/18] media: qcom: camss: Add legacy_phy flag to SoC definition structures Bryan O'Donoghue
2026-02-27 22:02 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 06/18] media: qcom: camss: Add support for PHY API devices Bryan O'Donoghue
2026-02-27 22:03 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 07/18] media: qcom: camss: Drop legacy PHY descriptions from x1e Bryan O'Donoghue
2026-02-27 22:03 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 08/18] arm64: dts: qcom: x1e80100: Add CAMCC block definition Bryan O'Donoghue
2026-02-27 22:03 ` Christopher Obbard
2026-03-02 16:19 ` Konrad Dybcio
2026-03-03 5:56 ` Taniya Das
2026-03-03 10:05 ` Konrad Dybcio
2026-02-25 15:11 ` [PATCH v8 09/18] arm64: dts: qcom: x1e80100: Add CCI definitions Bryan O'Donoghue
2026-02-27 22:04 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 10/18] arm64: dts: qcom: x1e80100: Add MIPI CSI PHY nodes Bryan O'Donoghue
2026-02-26 7:11 ` Krzysztof Kozlowski
2026-02-26 9:30 ` Bryan O'Donoghue
2026-02-26 9:35 ` Krzysztof Kozlowski
2026-02-27 22:04 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 11/18] arm64: dts: qcom: x1e80100: Add CAMSS block definition Bryan O'Donoghue
2026-02-27 22:05 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 12/18] arm64: dts: qcom: x1e80100-crd: Add pm8010 CRD pmic,id=m regulators Bryan O'Donoghue
2026-02-27 22:05 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 13/18] arm64: dts: qcom: x1e80100-crd: Add ov08x40 RGB sensor on CSIPHY4 Bryan O'Donoghue
2026-02-27 22:06 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 14/18] arm64: dts: qcom: x1e80100-t14s: Add pm8010 camera PMIC with voltage levels for IR and RGB camera Bryan O'Donoghue
2026-02-25 15:11 ` [PATCH v8 15/18] arm64: dts: qcom: x1e80100-t14s: Add on ov02c10 RGB sensor on CSIPHY4 Bryan O'Donoghue
2026-02-27 22:08 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 16/18] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add pm8010 camera PMIC with voltage levels for IR and RGB camera Bryan O'Donoghue
2026-02-27 22:08 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 17/18] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add ov02c10 RGB sensor on CSIPHY4 Bryan O'Donoghue
2026-02-27 22:08 ` Christopher Obbard
2026-02-25 15:11 ` [PATCH v8 18/18] arm64: dts: qcom: x1e80100-dell-inspiron14-7441: Switch on CAMSS RGB sensor Bryan O'Donoghue
2026-02-27 22:09 ` Christopher Obbard
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox