162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci%YAML 1.2
462306a36Sopenharmony_ci---
562306a36Sopenharmony_ci$id: http://devicetree.org/schemas/media/qcom,msm8996-camss.yaml#
662306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
762306a36Sopenharmony_ci
862306a36Sopenharmony_cititle: Qualcomm CAMSS ISP
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cimaintainers:
1162306a36Sopenharmony_ci  - Robert Foss <robert.foss@linaro.org>
1262306a36Sopenharmony_ci  - Todor Tomov <todor.too@gmail.com>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cidescription: |
1562306a36Sopenharmony_ci  The CAMSS IP is a CSI decoder and ISP present on Qualcomm platforms
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciproperties:
1862306a36Sopenharmony_ci  compatible:
1962306a36Sopenharmony_ci    const: qcom,msm8996-camss
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci  clocks:
2262306a36Sopenharmony_ci    minItems: 36
2362306a36Sopenharmony_ci    maxItems: 36
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci  clock-names:
2662306a36Sopenharmony_ci    items:
2762306a36Sopenharmony_ci      - const: top_ahb
2862306a36Sopenharmony_ci      - const: ispif_ahb
2962306a36Sopenharmony_ci      - const: csiphy0_timer
3062306a36Sopenharmony_ci      - const: csiphy1_timer
3162306a36Sopenharmony_ci      - const: csiphy2_timer
3262306a36Sopenharmony_ci      - const: csi0_ahb
3362306a36Sopenharmony_ci      - const: csi0
3462306a36Sopenharmony_ci      - const: csi0_phy
3562306a36Sopenharmony_ci      - const: csi0_pix
3662306a36Sopenharmony_ci      - const: csi0_rdi
3762306a36Sopenharmony_ci      - const: csi1_ahb
3862306a36Sopenharmony_ci      - const: csi1
3962306a36Sopenharmony_ci      - const: csi1_phy
4062306a36Sopenharmony_ci      - const: csi1_pix
4162306a36Sopenharmony_ci      - const: csi1_rdi
4262306a36Sopenharmony_ci      - const: csi2_ahb
4362306a36Sopenharmony_ci      - const: csi2
4462306a36Sopenharmony_ci      - const: csi2_phy
4562306a36Sopenharmony_ci      - const: csi2_pix
4662306a36Sopenharmony_ci      - const: csi2_rdi
4762306a36Sopenharmony_ci      - const: csi3_ahb
4862306a36Sopenharmony_ci      - const: csi3
4962306a36Sopenharmony_ci      - const: csi3_phy
5062306a36Sopenharmony_ci      - const: csi3_pix
5162306a36Sopenharmony_ci      - const: csi3_rdi
5262306a36Sopenharmony_ci      - const: ahb
5362306a36Sopenharmony_ci      - const: vfe0
5462306a36Sopenharmony_ci      - const: csi_vfe0
5562306a36Sopenharmony_ci      - const: vfe0_ahb
5662306a36Sopenharmony_ci      - const: vfe0_stream
5762306a36Sopenharmony_ci      - const: vfe1
5862306a36Sopenharmony_ci      - const: csi_vfe1
5962306a36Sopenharmony_ci      - const: vfe1_ahb
6062306a36Sopenharmony_ci      - const: vfe1_stream
6162306a36Sopenharmony_ci      - const: vfe_ahb
6262306a36Sopenharmony_ci      - const: vfe_axi
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci  interrupts:
6562306a36Sopenharmony_ci    minItems: 10
6662306a36Sopenharmony_ci    maxItems: 10
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci  interrupt-names:
6962306a36Sopenharmony_ci    items:
7062306a36Sopenharmony_ci      - const: csiphy0
7162306a36Sopenharmony_ci      - const: csiphy1
7262306a36Sopenharmony_ci      - const: csiphy2
7362306a36Sopenharmony_ci      - const: csid0
7462306a36Sopenharmony_ci      - const: csid1
7562306a36Sopenharmony_ci      - const: csid2
7662306a36Sopenharmony_ci      - const: csid3
7762306a36Sopenharmony_ci      - const: ispif
7862306a36Sopenharmony_ci      - const: vfe0
7962306a36Sopenharmony_ci      - const: vfe1
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci  iommus:
8262306a36Sopenharmony_ci    maxItems: 4
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci  power-domains:
8562306a36Sopenharmony_ci    items:
8662306a36Sopenharmony_ci      - description: VFE0 GDSC - Video Front End, Global Distributed Switch Controller.
8762306a36Sopenharmony_ci      - description: VFE1 GDSC - Video Front End, Global Distributed Switch Controller.
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci  ports:
9062306a36Sopenharmony_ci    $ref: /schemas/graph.yaml#/properties/ports
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci    description:
9362306a36Sopenharmony_ci      CSI input ports.
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci    properties:
9662306a36Sopenharmony_ci      port@0:
9762306a36Sopenharmony_ci        $ref: /schemas/graph.yaml#/$defs/port-base
9862306a36Sopenharmony_ci        unevaluatedProperties: false
9962306a36Sopenharmony_ci        description:
10062306a36Sopenharmony_ci          Input port for receiving CSI data.
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci        properties:
10362306a36Sopenharmony_ci          endpoint:
10462306a36Sopenharmony_ci            $ref: video-interfaces.yaml#
10562306a36Sopenharmony_ci            unevaluatedProperties: false
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci            properties:
10862306a36Sopenharmony_ci              data-lanes:
10962306a36Sopenharmony_ci                description:
11062306a36Sopenharmony_ci                  An array of physical data lanes indexes.
11162306a36Sopenharmony_ci                  Position of an entry determines the logical
11262306a36Sopenharmony_ci                  lane number, while the value of an entry
11362306a36Sopenharmony_ci                  indicates physical lane index. Lane swapping
11462306a36Sopenharmony_ci                  is supported. Physical lane indexes are;
11562306a36Sopenharmony_ci                  0, 1, 2, 3
11662306a36Sopenharmony_ci                minItems: 1
11762306a36Sopenharmony_ci                maxItems: 4
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ci            required:
12062306a36Sopenharmony_ci              - data-lanes
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci      port@1:
12362306a36Sopenharmony_ci        $ref: /schemas/graph.yaml#/$defs/port-base
12462306a36Sopenharmony_ci        unevaluatedProperties: false
12562306a36Sopenharmony_ci        description:
12662306a36Sopenharmony_ci          Input port for receiving CSI data.
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci        properties:
12962306a36Sopenharmony_ci          endpoint:
13062306a36Sopenharmony_ci            $ref: video-interfaces.yaml#
13162306a36Sopenharmony_ci            unevaluatedProperties: false
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci            properties:
13462306a36Sopenharmony_ci              data-lanes:
13562306a36Sopenharmony_ci                minItems: 1
13662306a36Sopenharmony_ci                maxItems: 4
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci            required:
13962306a36Sopenharmony_ci              - data-lanes
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ci      port@2:
14262306a36Sopenharmony_ci        $ref: /schemas/graph.yaml#/$defs/port-base
14362306a36Sopenharmony_ci        unevaluatedProperties: false
14462306a36Sopenharmony_ci        description:
14562306a36Sopenharmony_ci          Input port for receiving CSI data.
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ci        properties:
14862306a36Sopenharmony_ci          endpoint:
14962306a36Sopenharmony_ci            $ref: video-interfaces.yaml#
15062306a36Sopenharmony_ci            unevaluatedProperties: false
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci            properties:
15362306a36Sopenharmony_ci              data-lanes:
15462306a36Sopenharmony_ci                minItems: 1
15562306a36Sopenharmony_ci                maxItems: 4
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci            required:
15862306a36Sopenharmony_ci              - data-lanes
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci      port@3:
16162306a36Sopenharmony_ci        $ref: /schemas/graph.yaml#/$defs/port-base
16262306a36Sopenharmony_ci        unevaluatedProperties: false
16362306a36Sopenharmony_ci        description:
16462306a36Sopenharmony_ci          Input port for receiving CSI data.
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ci        properties:
16762306a36Sopenharmony_ci          endpoint:
16862306a36Sopenharmony_ci            $ref: video-interfaces.yaml#
16962306a36Sopenharmony_ci            unevaluatedProperties: false
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci            properties:
17262306a36Sopenharmony_ci              data-lanes:
17362306a36Sopenharmony_ci                minItems: 1
17462306a36Sopenharmony_ci                maxItems: 4
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci            required:
17762306a36Sopenharmony_ci              - data-lanes
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci  reg:
18062306a36Sopenharmony_ci    minItems: 14
18162306a36Sopenharmony_ci    maxItems: 14
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci  reg-names:
18462306a36Sopenharmony_ci    items:
18562306a36Sopenharmony_ci      - const: csiphy0
18662306a36Sopenharmony_ci      - const: csiphy0_clk_mux
18762306a36Sopenharmony_ci      - const: csiphy1
18862306a36Sopenharmony_ci      - const: csiphy1_clk_mux
18962306a36Sopenharmony_ci      - const: csiphy2
19062306a36Sopenharmony_ci      - const: csiphy2_clk_mux
19162306a36Sopenharmony_ci      - const: csid0
19262306a36Sopenharmony_ci      - const: csid1
19362306a36Sopenharmony_ci      - const: csid2
19462306a36Sopenharmony_ci      - const: csid3
19562306a36Sopenharmony_ci      - const: ispif
19662306a36Sopenharmony_ci      - const: csi_clk_mux
19762306a36Sopenharmony_ci      - const: vfe0
19862306a36Sopenharmony_ci      - const: vfe1
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_ci  vdda-supply:
20162306a36Sopenharmony_ci    description:
20262306a36Sopenharmony_ci      Definition of the regulator used as analog power supply.
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_cirequired:
20562306a36Sopenharmony_ci  - clock-names
20662306a36Sopenharmony_ci  - clocks
20762306a36Sopenharmony_ci  - compatible
20862306a36Sopenharmony_ci  - interrupt-names
20962306a36Sopenharmony_ci  - interrupts
21062306a36Sopenharmony_ci  - iommus
21162306a36Sopenharmony_ci  - power-domains
21262306a36Sopenharmony_ci  - reg
21362306a36Sopenharmony_ci  - reg-names
21462306a36Sopenharmony_ci  - vdda-supply
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ciadditionalProperties: false
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ciexamples:
21962306a36Sopenharmony_ci  - |
22062306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
22162306a36Sopenharmony_ci    #include <dt-bindings/clock/qcom,gcc-msm8996.h>
22262306a36Sopenharmony_ci    #include <dt-bindings/clock/qcom,mmcc-msm8996.h>
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_ci    camss: camss@a34000 {
22562306a36Sopenharmony_ci      compatible = "qcom,msm8996-camss";
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci      clocks = <&mmcc CAMSS_TOP_AHB_CLK>,
22862306a36Sopenharmony_ci        <&mmcc CAMSS_ISPIF_AHB_CLK>,
22962306a36Sopenharmony_ci        <&mmcc CAMSS_CSI0PHYTIMER_CLK>,
23062306a36Sopenharmony_ci        <&mmcc CAMSS_CSI1PHYTIMER_CLK>,
23162306a36Sopenharmony_ci        <&mmcc CAMSS_CSI2PHYTIMER_CLK>,
23262306a36Sopenharmony_ci        <&mmcc CAMSS_CSI0_AHB_CLK>,
23362306a36Sopenharmony_ci        <&mmcc CAMSS_CSI0_CLK>,
23462306a36Sopenharmony_ci        <&mmcc CAMSS_CSI0PHY_CLK>,
23562306a36Sopenharmony_ci        <&mmcc CAMSS_CSI0PIX_CLK>,
23662306a36Sopenharmony_ci        <&mmcc CAMSS_CSI0RDI_CLK>,
23762306a36Sopenharmony_ci        <&mmcc CAMSS_CSI1_AHB_CLK>,
23862306a36Sopenharmony_ci        <&mmcc CAMSS_CSI1_CLK>,
23962306a36Sopenharmony_ci        <&mmcc CAMSS_CSI1PHY_CLK>,
24062306a36Sopenharmony_ci        <&mmcc CAMSS_CSI1PIX_CLK>,
24162306a36Sopenharmony_ci        <&mmcc CAMSS_CSI1RDI_CLK>,
24262306a36Sopenharmony_ci        <&mmcc CAMSS_CSI2_AHB_CLK>,
24362306a36Sopenharmony_ci        <&mmcc CAMSS_CSI2_CLK>,
24462306a36Sopenharmony_ci        <&mmcc CAMSS_CSI2PHY_CLK>,
24562306a36Sopenharmony_ci        <&mmcc CAMSS_CSI2PIX_CLK>,
24662306a36Sopenharmony_ci        <&mmcc CAMSS_CSI2RDI_CLK>,
24762306a36Sopenharmony_ci        <&mmcc CAMSS_CSI3_AHB_CLK>,
24862306a36Sopenharmony_ci        <&mmcc CAMSS_CSI3_CLK>,
24962306a36Sopenharmony_ci        <&mmcc CAMSS_CSI3PHY_CLK>,
25062306a36Sopenharmony_ci        <&mmcc CAMSS_CSI3PIX_CLK>,
25162306a36Sopenharmony_ci        <&mmcc CAMSS_CSI3RDI_CLK>,
25262306a36Sopenharmony_ci        <&mmcc CAMSS_AHB_CLK>,
25362306a36Sopenharmony_ci        <&mmcc CAMSS_VFE0_CLK>,
25462306a36Sopenharmony_ci        <&mmcc CAMSS_CSI_VFE0_CLK>,
25562306a36Sopenharmony_ci        <&mmcc CAMSS_VFE0_AHB_CLK>,
25662306a36Sopenharmony_ci        <&mmcc CAMSS_VFE0_STREAM_CLK>,
25762306a36Sopenharmony_ci        <&mmcc CAMSS_VFE1_CLK>,
25862306a36Sopenharmony_ci        <&mmcc CAMSS_CSI_VFE1_CLK>,
25962306a36Sopenharmony_ci        <&mmcc CAMSS_VFE1_AHB_CLK>,
26062306a36Sopenharmony_ci        <&mmcc CAMSS_VFE1_STREAM_CLK>,
26162306a36Sopenharmony_ci        <&mmcc CAMSS_VFE_AHB_CLK>,
26262306a36Sopenharmony_ci        <&mmcc CAMSS_VFE_AXI_CLK>;
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ci      clock-names = "top_ahb",
26562306a36Sopenharmony_ci        "ispif_ahb",
26662306a36Sopenharmony_ci        "csiphy0_timer",
26762306a36Sopenharmony_ci        "csiphy1_timer",
26862306a36Sopenharmony_ci        "csiphy2_timer",
26962306a36Sopenharmony_ci        "csi0_ahb",
27062306a36Sopenharmony_ci        "csi0",
27162306a36Sopenharmony_ci        "csi0_phy",
27262306a36Sopenharmony_ci        "csi0_pix",
27362306a36Sopenharmony_ci        "csi0_rdi",
27462306a36Sopenharmony_ci        "csi1_ahb",
27562306a36Sopenharmony_ci        "csi1",
27662306a36Sopenharmony_ci        "csi1_phy",
27762306a36Sopenharmony_ci        "csi1_pix",
27862306a36Sopenharmony_ci        "csi1_rdi",
27962306a36Sopenharmony_ci        "csi2_ahb",
28062306a36Sopenharmony_ci        "csi2",
28162306a36Sopenharmony_ci        "csi2_phy",
28262306a36Sopenharmony_ci        "csi2_pix",
28362306a36Sopenharmony_ci        "csi2_rdi",
28462306a36Sopenharmony_ci        "csi3_ahb",
28562306a36Sopenharmony_ci        "csi3",
28662306a36Sopenharmony_ci        "csi3_phy",
28762306a36Sopenharmony_ci        "csi3_pix",
28862306a36Sopenharmony_ci        "csi3_rdi",
28962306a36Sopenharmony_ci        "ahb",
29062306a36Sopenharmony_ci        "vfe0",
29162306a36Sopenharmony_ci        "csi_vfe0",
29262306a36Sopenharmony_ci        "vfe0_ahb",
29362306a36Sopenharmony_ci        "vfe0_stream",
29462306a36Sopenharmony_ci        "vfe1",
29562306a36Sopenharmony_ci        "csi_vfe1",
29662306a36Sopenharmony_ci        "vfe1_ahb",
29762306a36Sopenharmony_ci        "vfe1_stream",
29862306a36Sopenharmony_ci        "vfe_ahb",
29962306a36Sopenharmony_ci        "vfe_axi";
30062306a36Sopenharmony_ci
30162306a36Sopenharmony_ci      interrupts = <GIC_SPI 78 IRQ_TYPE_EDGE_RISING>,
30262306a36Sopenharmony_ci        <GIC_SPI 79 IRQ_TYPE_EDGE_RISING>,
30362306a36Sopenharmony_ci        <GIC_SPI 80 IRQ_TYPE_EDGE_RISING>,
30462306a36Sopenharmony_ci        <GIC_SPI 296 IRQ_TYPE_EDGE_RISING>,
30562306a36Sopenharmony_ci        <GIC_SPI 297 IRQ_TYPE_EDGE_RISING>,
30662306a36Sopenharmony_ci        <GIC_SPI 298 IRQ_TYPE_EDGE_RISING>,
30762306a36Sopenharmony_ci        <GIC_SPI 299 IRQ_TYPE_EDGE_RISING>,
30862306a36Sopenharmony_ci        <GIC_SPI 309 IRQ_TYPE_EDGE_RISING>,
30962306a36Sopenharmony_ci        <GIC_SPI 314 IRQ_TYPE_EDGE_RISING>,
31062306a36Sopenharmony_ci        <GIC_SPI 315 IRQ_TYPE_EDGE_RISING>;
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_ci      interrupt-names = "csiphy0",
31362306a36Sopenharmony_ci        "csiphy1",
31462306a36Sopenharmony_ci        "csiphy2",
31562306a36Sopenharmony_ci        "csid0",
31662306a36Sopenharmony_ci        "csid1",
31762306a36Sopenharmony_ci        "csid2",
31862306a36Sopenharmony_ci        "csid3",
31962306a36Sopenharmony_ci        "ispif",
32062306a36Sopenharmony_ci        "vfe0",
32162306a36Sopenharmony_ci        "vfe1";
32262306a36Sopenharmony_ci
32362306a36Sopenharmony_ci      iommus = <&vfe_smmu 0>,
32462306a36Sopenharmony_ci         <&vfe_smmu 1>,
32562306a36Sopenharmony_ci         <&vfe_smmu 2>,
32662306a36Sopenharmony_ci         <&vfe_smmu 3>;
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ci      power-domains = <&mmcc VFE0_GDSC>,
32962306a36Sopenharmony_ci        <&mmcc VFE1_GDSC>;
33062306a36Sopenharmony_ci
33162306a36Sopenharmony_ci      reg = <0x00a34000 0x1000>,
33262306a36Sopenharmony_ci        <0x00a00030 0x4>,
33362306a36Sopenharmony_ci        <0x00a35000 0x1000>,
33462306a36Sopenharmony_ci        <0x00a00038 0x4>,
33562306a36Sopenharmony_ci        <0x00a36000 0x1000>,
33662306a36Sopenharmony_ci        <0x00a00040 0x4>,
33762306a36Sopenharmony_ci        <0x00a30000 0x100>,
33862306a36Sopenharmony_ci        <0x00a30400 0x100>,
33962306a36Sopenharmony_ci        <0x00a30800 0x100>,
34062306a36Sopenharmony_ci        <0x00a30c00 0x100>,
34162306a36Sopenharmony_ci        <0x00a31000 0x500>,
34262306a36Sopenharmony_ci        <0x00a00020 0x10>,
34362306a36Sopenharmony_ci        <0x00a10000 0x1000>,
34462306a36Sopenharmony_ci        <0x00a14000 0x1000>;
34562306a36Sopenharmony_ci
34662306a36Sopenharmony_ci      reg-names = "csiphy0",
34762306a36Sopenharmony_ci        "csiphy0_clk_mux",
34862306a36Sopenharmony_ci        "csiphy1",
34962306a36Sopenharmony_ci        "csiphy1_clk_mux",
35062306a36Sopenharmony_ci        "csiphy2",
35162306a36Sopenharmony_ci        "csiphy2_clk_mux",
35262306a36Sopenharmony_ci        "csid0",
35362306a36Sopenharmony_ci        "csid1",
35462306a36Sopenharmony_ci        "csid2",
35562306a36Sopenharmony_ci        "csid3",
35662306a36Sopenharmony_ci        "ispif",
35762306a36Sopenharmony_ci        "csi_clk_mux",
35862306a36Sopenharmony_ci        "vfe0",
35962306a36Sopenharmony_ci        "vfe1";
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ci      vdda-supply = <&reg_2v8>;
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_ci      ports {
36462306a36Sopenharmony_ci        #address-cells = <1>;
36562306a36Sopenharmony_ci        #size-cells = <0>;
36662306a36Sopenharmony_ci      };
36762306a36Sopenharmony_ci    };
368