1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mfd/fsl,imx8qxp-csr.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Freescale i.MX8qm/qxp Control and Status Registers Module
8
9maintainers:
10  - Liu Ying <victor.liu@nxp.com>
11
12description: |
13  As a system controller, the Freescale i.MX8qm/qxp Control and Status
14  Registers(CSR) module represents a set of miscellaneous registers of a
15  specific subsystem.  It may provide control and/or status report interfaces
16  to a mix of standalone hardware devices within that subsystem.  One typical
17  use-case is for some other nodes to acquire a reference to the syscon node
18  by phandle, and the other typical use-case is that the operating system
19  should consider all subnodes of the CSR module as separate child devices.
20
21properties:
22  $nodename:
23    pattern: "^syscon@[0-9a-f]+$"
24
25  compatible:
26    items:
27      - enum:
28          - fsl,imx8qxp-mipi-lvds-csr
29          - fsl,imx8qm-lvds-csr
30      - const: syscon
31      - const: simple-mfd
32
33  reg:
34    maxItems: 1
35
36  clocks:
37    maxItems: 1
38
39  clock-names:
40    const: ipg
41
42patternProperties:
43  "^(ldb|phy|pxl2dpi)$":
44    type: object
45    description: The possible child devices of the CSR module.
46
47required:
48  - compatible
49  - reg
50  - clocks
51  - clock-names
52
53allOf:
54  - if:
55      properties:
56        compatible:
57          contains:
58            const: fsl,imx8qxp-mipi-lvds-csr
59    then:
60      required:
61        - pxl2dpi
62        - ldb
63
64  - if:
65      properties:
66        compatible:
67          contains:
68            const: fsl,imx8qm-lvds-csr
69    then:
70      required:
71        - phy
72        - ldb
73
74additionalProperties: false
75
76examples:
77  - |
78    #include <dt-bindings/clock/imx8-lpcg.h>
79    #include <dt-bindings/firmware/imx/rsrc.h>
80    mipi_lvds_0_csr: syscon@56221000 {
81        compatible = "fsl,imx8qxp-mipi-lvds-csr", "syscon", "simple-mfd";
82        reg = <0x56221000 0x1000>;
83        clocks = <&mipi_lvds_0_di_mipi_lvds_regs_lpcg IMX_LPCG_CLK_4>;
84        clock-names = "ipg";
85
86        mipi_lvds_0_pxl2dpi: pxl2dpi {
87            compatible = "fsl,imx8qxp-pxl2dpi";
88            fsl,sc-resource = <IMX_SC_R_MIPI_0>;
89            power-domains = <&pd IMX_SC_R_MIPI_0>;
90
91            ports {
92                #address-cells = <1>;
93                #size-cells = <0>;
94
95                port@0 {
96                    #address-cells = <1>;
97                    #size-cells = <0>;
98                    reg = <0>;
99
100                    mipi_lvds_0_pxl2dpi_dc0_pixel_link0: endpoint@0 {
101                        reg = <0>;
102                        remote-endpoint = <&dc0_pixel_link0_mipi_lvds_0_pxl2dpi>;
103                    };
104
105                    mipi_lvds_0_pxl2dpi_dc0_pixel_link1: endpoint@1 {
106                        reg = <1>;
107                        remote-endpoint = <&dc0_pixel_link1_mipi_lvds_0_pxl2dpi>;
108                    };
109                };
110
111                port@1 {
112                    #address-cells = <1>;
113                    #size-cells = <0>;
114                    reg = <1>;
115
116                    mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch0: endpoint@0 {
117                        reg = <0>;
118                        remote-endpoint = <&mipi_lvds_0_ldb_ch0_mipi_lvds_0_pxl2dpi>;
119                    };
120
121                    mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch1: endpoint@1 {
122                        reg = <1>;
123                        remote-endpoint = <&mipi_lvds_0_ldb_ch1_mipi_lvds_0_pxl2dpi>;
124                    };
125                };
126            };
127        };
128
129        mipi_lvds_0_ldb: ldb {
130            #address-cells = <1>;
131            #size-cells = <0>;
132            compatible = "fsl,imx8qxp-ldb";
133            clocks = <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_MISC2>,
134                     <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_BYPASS>;
135            clock-names = "pixel", "bypass";
136            power-domains = <&pd IMX_SC_R_LVDS_0>;
137
138            channel@0 {
139                #address-cells = <1>;
140                #size-cells = <0>;
141                reg = <0>;
142                phys = <&mipi_lvds_0_phy>;
143                phy-names = "lvds_phy";
144
145                port@0 {
146                    reg = <0>;
147
148                    mipi_lvds_0_ldb_ch0_mipi_lvds_0_pxl2dpi: endpoint {
149                        remote-endpoint = <&mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch0>;
150                    };
151                };
152
153                port@1 {
154                    reg = <1>;
155
156                    /* ... */
157                };
158            };
159
160            channel@1 {
161                #address-cells = <1>;
162                #size-cells = <0>;
163                reg = <1>;
164                phys = <&mipi_lvds_0_phy>;
165                phy-names = "lvds_phy";
166
167                port@0 {
168                    reg = <0>;
169
170                    mipi_lvds_0_ldb_ch1_mipi_lvds_0_pxl2dpi: endpoint {
171                        remote-endpoint = <&mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch1>;
172                    };
173                };
174
175                port@1 {
176                    reg = <1>;
177
178                    /* ... */
179                };
180            };
181        };
182    };
183
184    mipi_lvds_0_phy: phy@56228300 {
185        compatible = "fsl,imx8qxp-mipi-dphy";
186        reg = <0x56228300 0x100>;
187        clocks = <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_PHY>;
188        clock-names = "phy_ref";
189        #phy-cells = <0>;
190        fsl,syscon = <&mipi_lvds_0_csr>;
191        power-domains = <&pd IMX_SC_R_MIPI_0>;
192    };
193