1*48ed447cSLiu Ying# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*48ed447cSLiu Ying%YAML 1.2
3*48ed447cSLiu Ying---
4*48ed447cSLiu Ying$id: http://devicetree.org/schemas/display/bridge/fsl,imx8qxp-ldb.yaml#
5*48ed447cSLiu Ying$schema: http://devicetree.org/meta-schemas/core.yaml#
6*48ed447cSLiu Ying
7*48ed447cSLiu Yingtitle: Freescale i.MX8qm/qxp LVDS Display Bridge
8*48ed447cSLiu Ying
9*48ed447cSLiu Yingmaintainers:
10*48ed447cSLiu Ying  - Liu Ying <victor.liu@nxp.com>
11*48ed447cSLiu Ying
12*48ed447cSLiu Yingdescription: |
13*48ed447cSLiu Ying  The Freescale i.MX8qm/qxp LVDS Display Bridge(LDB) has two channels.
14*48ed447cSLiu Ying
15*48ed447cSLiu Ying  The i.MX8qm/qxp LDB is controlled by Control and Status Registers(CSR) module.
16*48ed447cSLiu Ying  The CSR module, as a system controller, contains the LDB's configuration
17*48ed447cSLiu Ying  registers.
18*48ed447cSLiu Ying
19*48ed447cSLiu Ying  For i.MX8qxp LDB, each channel supports up to 24bpp parallel input color
20*48ed447cSLiu Ying  format and can map the input to VESA or JEIDA standards.  The two channels
21*48ed447cSLiu Ying  cannot be used simultaneously, that is to say, the user should pick one of
22*48ed447cSLiu Ying  them to use.  Two LDB channels from two LDB instances can work together in
23*48ed447cSLiu Ying  LDB split mode to support a dual link LVDS display.  The channel indexes
24*48ed447cSLiu Ying  have to be different.  Channel0 outputs odd pixels and channel1 outputs
25*48ed447cSLiu Ying  even pixels.
26*48ed447cSLiu Ying
27*48ed447cSLiu Ying  For i.MX8qm LDB, each channel additionally supports up to 30bpp parallel
28*48ed447cSLiu Ying  input color format.  The two channels can be used simultaneously, either
29*48ed447cSLiu Ying  in dual mode or split mode.  In dual mode, the two channels output identical
30*48ed447cSLiu Ying  data.  In split mode, channel0 outputs odd pixels and channel1 outputs even
31*48ed447cSLiu Ying  pixels.
32*48ed447cSLiu Ying
33*48ed447cSLiu Ying  A side note is that i.MX8qm/qxp LDB is officially called pixel mapper in
34*48ed447cSLiu Ying  the SoC reference manuals.  The pixel mapper uses logic of LDBs embedded in
35*48ed447cSLiu Ying  i.MX6qdl/sx SoCs, i.e., it is essentially based on them.  To keep the naming
36*48ed447cSLiu Ying  consistency, this binding calls it LDB.
37*48ed447cSLiu Ying
38*48ed447cSLiu Yingproperties:
39*48ed447cSLiu Ying  compatible:
40*48ed447cSLiu Ying    enum:
41*48ed447cSLiu Ying      - fsl,imx8qm-ldb
42*48ed447cSLiu Ying      - fsl,imx8qxp-ldb
43*48ed447cSLiu Ying
44*48ed447cSLiu Ying  "#address-cells":
45*48ed447cSLiu Ying    const: 1
46*48ed447cSLiu Ying
47*48ed447cSLiu Ying  "#size-cells":
48*48ed447cSLiu Ying    const: 0
49*48ed447cSLiu Ying
50*48ed447cSLiu Ying  clocks:
51*48ed447cSLiu Ying    items:
52*48ed447cSLiu Ying      - description: pixel clock
53*48ed447cSLiu Ying      - description: bypass clock
54*48ed447cSLiu Ying
55*48ed447cSLiu Ying  clock-names:
56*48ed447cSLiu Ying    items:
57*48ed447cSLiu Ying      - const: pixel
58*48ed447cSLiu Ying      - const: bypass
59*48ed447cSLiu Ying
60*48ed447cSLiu Ying  power-domains:
61*48ed447cSLiu Ying    maxItems: 1
62*48ed447cSLiu Ying
63*48ed447cSLiu Ying  fsl,companion-ldb:
64*48ed447cSLiu Ying    $ref: /schemas/types.yaml#/definitions/phandle
65*48ed447cSLiu Ying    description: |
66*48ed447cSLiu Ying      A phandle which points to companion LDB which is used in LDB split mode.
67*48ed447cSLiu Ying
68*48ed447cSLiu YingpatternProperties:
69*48ed447cSLiu Ying  "^channel@[0-1]$":
70*48ed447cSLiu Ying    type: object
71*48ed447cSLiu Ying    description: Represents a channel of LDB.
72*48ed447cSLiu Ying
73*48ed447cSLiu Ying    properties:
74*48ed447cSLiu Ying      "#address-cells":
75*48ed447cSLiu Ying        const: 1
76*48ed447cSLiu Ying
77*48ed447cSLiu Ying      "#size-cells":
78*48ed447cSLiu Ying        const: 0
79*48ed447cSLiu Ying
80*48ed447cSLiu Ying      reg:
81*48ed447cSLiu Ying        description: The channel index.
82*48ed447cSLiu Ying        enum: [ 0, 1 ]
83*48ed447cSLiu Ying
84*48ed447cSLiu Ying      phys:
85*48ed447cSLiu Ying        description: A phandle to the phy module representing the LVDS PHY.
86*48ed447cSLiu Ying        maxItems: 1
87*48ed447cSLiu Ying
88*48ed447cSLiu Ying      phy-names:
89*48ed447cSLiu Ying        const: lvds_phy
90*48ed447cSLiu Ying
91*48ed447cSLiu Ying      port@0:
92*48ed447cSLiu Ying        $ref: /schemas/graph.yaml#/properties/port
93*48ed447cSLiu Ying        description: Input port of the channel.
94*48ed447cSLiu Ying
95*48ed447cSLiu Ying      port@1:
96*48ed447cSLiu Ying        $ref: /schemas/graph.yaml#/properties/port
97*48ed447cSLiu Ying        description: Output port of the channel.
98*48ed447cSLiu Ying
99*48ed447cSLiu Ying    required:
100*48ed447cSLiu Ying      - "#address-cells"
101*48ed447cSLiu Ying      - "#size-cells"
102*48ed447cSLiu Ying      - reg
103*48ed447cSLiu Ying      - phys
104*48ed447cSLiu Ying      - phy-names
105*48ed447cSLiu Ying
106*48ed447cSLiu Ying    additionalProperties: false
107*48ed447cSLiu Ying
108*48ed447cSLiu Yingrequired:
109*48ed447cSLiu Ying  - compatible
110*48ed447cSLiu Ying  - "#address-cells"
111*48ed447cSLiu Ying  - "#size-cells"
112*48ed447cSLiu Ying  - clocks
113*48ed447cSLiu Ying  - clock-names
114*48ed447cSLiu Ying  - power-domains
115*48ed447cSLiu Ying  - channel@0
116*48ed447cSLiu Ying  - channel@1
117*48ed447cSLiu Ying
118*48ed447cSLiu YingallOf:
119*48ed447cSLiu Ying  - if:
120*48ed447cSLiu Ying      properties:
121*48ed447cSLiu Ying        compatible:
122*48ed447cSLiu Ying          contains:
123*48ed447cSLiu Ying            const: fsl,imx8qm-ldb
124*48ed447cSLiu Ying    then:
125*48ed447cSLiu Ying      properties:
126*48ed447cSLiu Ying        fsl,companion-ldb: false
127*48ed447cSLiu Ying
128*48ed447cSLiu YingadditionalProperties: false
129*48ed447cSLiu Ying
130*48ed447cSLiu Yingexamples:
131*48ed447cSLiu Ying  - |
132*48ed447cSLiu Ying    #include <dt-bindings/firmware/imx/rsrc.h>
133*48ed447cSLiu Ying    ldb {
134*48ed447cSLiu Ying        #address-cells = <1>;
135*48ed447cSLiu Ying        #size-cells = <0>;
136*48ed447cSLiu Ying        compatible = "fsl,imx8qxp-ldb";
137*48ed447cSLiu Ying        clocks = <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_MISC2>,
138*48ed447cSLiu Ying                 <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_BYPASS>;
139*48ed447cSLiu Ying        clock-names = "pixel", "bypass";
140*48ed447cSLiu Ying        power-domains = <&pd IMX_SC_R_LVDS_0>;
141*48ed447cSLiu Ying
142*48ed447cSLiu Ying        channel@0 {
143*48ed447cSLiu Ying            #address-cells = <1>;
144*48ed447cSLiu Ying            #size-cells = <0>;
145*48ed447cSLiu Ying            reg = <0>;
146*48ed447cSLiu Ying            phys = <&mipi_lvds_0_phy>;
147*48ed447cSLiu Ying            phy-names = "lvds_phy";
148*48ed447cSLiu Ying
149*48ed447cSLiu Ying            port@0 {
150*48ed447cSLiu Ying                reg = <0>;
151*48ed447cSLiu Ying
152*48ed447cSLiu Ying                mipi_lvds_0_ldb_ch0_mipi_lvds_0_pxl2dpi: endpoint {
153*48ed447cSLiu Ying                    remote-endpoint = <&mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch0>;
154*48ed447cSLiu Ying                };
155*48ed447cSLiu Ying            };
156*48ed447cSLiu Ying        };
157*48ed447cSLiu Ying
158*48ed447cSLiu Ying        channel@1 {
159*48ed447cSLiu Ying            #address-cells = <1>;
160*48ed447cSLiu Ying            #size-cells = <0>;
161*48ed447cSLiu Ying            reg = <1>;
162*48ed447cSLiu Ying            phys = <&mipi_lvds_0_phy>;
163*48ed447cSLiu Ying            phy-names = "lvds_phy";
164*48ed447cSLiu Ying
165*48ed447cSLiu Ying            port@0 {
166*48ed447cSLiu Ying                reg = <0>;
167*48ed447cSLiu Ying
168*48ed447cSLiu Ying                mipi_lvds_0_ldb_ch1_mipi_lvds_0_pxl2dpi: endpoint {
169*48ed447cSLiu Ying                    remote-endpoint = <&mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch1>;
170*48ed447cSLiu Ying                };
171*48ed447cSLiu Ying            };
172*48ed447cSLiu Ying        };
173*48ed447cSLiu Ying    };
174