Merge tag 'block-6.13-20242901' of git://git.kernel.dk/linux
[drm/drm-misc.git] / Documentation / devicetree / bindings / display / xylon,logicvc-display.yaml
blob76b804b7c8806927f931843f21e433e769f40959
1 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2 # Copyright 2019 Bootlin
3 %YAML 1.2
4 ---
5 $id: http://devicetree.org/schemas/display/xylon,logicvc-display.yaml#
6 $schema: http://devicetree.org/meta-schemas/core.yaml#
8 title: Xylon LogiCVC display controller
10 maintainers:
11   - Paul Kocialkowski <paul.kocialkowski@bootlin.com>
13 description: |
14   The Xylon LogiCVC is a display controller that supports multiple layers.
15   It is usually implemented as programmable logic and was optimized for use
16   with Xilinx Zynq-7000 SoCs and Xilinx FPGAs.
18   Because the controller is intended for use in a FPGA, most of the
19   configuration of the controller takes place at logic configuration bitstream
20   synthesis time. As a result, many of the device-tree bindings are meant to
21   reflect the synthesis configuration and must not be configured differently.
22   Matching synthesis parameters are provided when applicable.
24   Layers are declared in the "layers" sub-node and have dedicated configuration.
25   In version 3 of the controller, each layer has fixed memory offset and address
26   starting from the video memory base address for its framebuffer. In version 4,
27   framebuffers are configured with a direct memory address instead.
29 properties:
30   compatible:
31     enum:
32       - xylon,logicvc-3.02.a-display
33       - xylon,logicvc-4.01.a-display
35   reg:
36     maxItems: 1
38   clocks:
39     minItems: 1
40     maxItems: 4
42   clock-names:
43     minItems: 1
44     items:
45       # vclk is required and must be provided as first item.
46       - const: vclk
47       # Other clocks are optional and can be provided in any order.
48       - enum:
49           - vclk2
50           - lvdsclk
51           - lvdsclkn
52       - enum:
53           - vclk2
54           - lvdsclk
55           - lvdsclkn
56       - enum:
57           - vclk2
58           - lvdsclk
59           - lvdsclkn
61   interrupts:
62     maxItems: 1
64   memory-region:
65     maxItems: 1
67   xylon,display-interface:
68     enum:
69       # Parallel RGB interface (C_DISPLAY_INTERFACE == 0)
70       - parallel-rgb
71       # ITU-T BR656 interface (C_DISPLAY_INTERFACE == 1)
72       - bt656
73       # 4-bit LVDS interface (C_DISPLAY_INTERFACE == 2)
74       - lvds-4bits
75       # 3-bit LVDS interface (C_DISPLAY_INTERFACE == 4)
76       - lvds-3bits
77       # DVI interface (C_DISPLAY_INTERFACE == 5)
78       - dvi
79     description: Display output interface (C_DISPLAY_INTERFACE).
81   xylon,display-colorspace:
82     enum:
83       # RGB colorspace (C_DISPLAY_COLOR_SPACE == 0)
84       - rgb
85       # YUV 4:2:2 colorspace (C_DISPLAY_COLOR_SPACE == 1)
86       - yuv422
87       # YUV 4:4:4 colorspace (C_DISPLAY_COLOR_SPACE == 2)
88       - yuv444
89     description: Display output colorspace (C_DISPLAY_COLOR_SPACE).
91   xylon,display-depth:
92     $ref: /schemas/types.yaml#/definitions/uint32
93     description: Display output depth (C_PIXEL_DATA_WIDTH).
95   xylon,row-stride:
96     $ref: /schemas/types.yaml#/definitions/uint32
97     description: Fixed number of pixels in a framebuffer row (C_ROW_STRIDE).
99   xylon,dithering:
100     $ref: /schemas/types.yaml#/definitions/flag
101     description: Dithering module is enabled (C_XCOLOR)
103   xylon,background-layer:
104     $ref: /schemas/types.yaml#/definitions/flag
105     description: |
106       The last layer is used to display a black background (C_USE_BACKGROUND).
107       The layer must still be registered.
109   xylon,layers-configurable:
110     $ref: /schemas/types.yaml#/definitions/flag
111     description: |
112       Configuration of layers' size, position and offset is enabled
113       (C_USE_SIZE_POSITION).
115   layers:
116     type: object
118     properties:
119       "#address-cells":
120         const: 1
122       "#size-cells":
123         const: 0
125     patternProperties:
126       "^layer@[0-9]+$":
127         type: object
129         properties:
130           reg:
131             maxItems: 1
133           xylon,layer-depth:
134             $ref: /schemas/types.yaml#/definitions/uint32
135             description: Layer depth (C_LAYER_X_DATA_WIDTH).
137           xylon,layer-colorspace:
138             enum:
139               # RGB colorspace (C_LAYER_X_TYPE == 0)
140               - rgb
141               # YUV packed colorspace (C_LAYER_X_TYPE == 0)
142               - yuv
143             description: Layer colorspace (C_LAYER_X_TYPE).
145           xylon,layer-alpha-mode:
146             enum:
147               # Alpha is configured layer-wide (C_LAYER_X_ALPHA_MODE == 0)
148               - layer
149               # Alpha is configured per-pixel (C_LAYER_X_ALPHA_MODE == 1)
150               - pixel
151             description: Alpha mode for the layer (C_LAYER_X_ALPHA_MODE).
153           xylon,layer-base-offset:
154             $ref: /schemas/types.yaml#/definitions/uint32
155             description: |
156               Offset in number of lines (C_LAYER_X_OFFSET) starting from the
157               video RAM base (C_VMEM_BASEADDR), only for version 3.
159           xylon,layer-buffer-offset:
160             $ref: /schemas/types.yaml#/definitions/uint32
161             description: |
162               Offset in number of lines (C_BUFFER_*_OFFSET) starting from the
163               layer base offset for the second buffer used in double-buffering.
165           xylon,layer-primary:
166             $ref: /schemas/types.yaml#/definitions/flag
167             description: |
168               Layer should be registered as a primary plane (exactly one is
169               required).
171         additionalProperties: false
173         required:
174           - reg
175           - xylon,layer-depth
176           - xylon,layer-colorspace
177           - xylon,layer-alpha-mode
179     required:
180       - "#address-cells"
181       - "#size-cells"
182       - layer@0
184     additionalProperties: false
186     description: |
187       The description of the display controller layers, containing layer
188       sub-nodes that each describe a registered layer.
190   port:
191     $ref: /schemas/graph.yaml#/properties/port
192     description: |
193       Video output port, typically connected to a panel or bridge.
195 additionalProperties: false
197 required:
198   - compatible
199   - reg
200   - clocks
201   - clock-names
202   - interrupts
203   - xylon,display-interface
204   - xylon,display-colorspace
205   - xylon,display-depth
206   - xylon,row-stride
207   - layers
208   - port
210 examples:
211   - |
212     #include <dt-bindings/interrupt-controller/irq.h>
214     logicvc: logicvc@43c00000 {
215       compatible = "xylon,logicvc-3.02.a", "syscon", "simple-mfd";
216       reg = <0x43c00000 0x6000>;
218       #address-cells = <1>;
219       #size-cells = <1>;
221       logicvc_display: display@0 {
222         compatible = "xylon,logicvc-3.02.a-display";
223         reg = <0x0 0x6000>;
225         memory-region = <&logicvc_cma>;
227         clocks = <&logicvc_vclk 0>, <&logicvc_lvdsclk 0>;
228         clock-names = "vclk", "lvdsclk";
230         interrupt-parent = <&intc>;
231         interrupts = <0 34 IRQ_TYPE_LEVEL_HIGH>;
233         xylon,display-interface = "lvds-4bits";
234         xylon,display-colorspace = "rgb";
235         xylon,display-depth = <16>;
236         xylon,row-stride = <1024>;
238         xylon,layers-configurable;
240         layers {
241           #address-cells = <1>;
242           #size-cells = <0>;
244           layer@0 {
245             reg = <0>;
246             xylon,layer-depth = <16>;
247             xylon,layer-colorspace = "rgb";
248             xylon,layer-alpha-mode = "layer";
249             xylon,layer-base-offset = <0>;
250             xylon,layer-buffer-offset = <480>;
251             xylon,layer-primary;
252           };
254           layer@1 {
255             reg = <1>;
256             xylon,layer-depth = <16>;
257             xylon,layer-colorspace = "rgb";
258             xylon,layer-alpha-mode = "layer";
259             xylon,layer-base-offset = <2400>;
260             xylon,layer-buffer-offset = <480>;
261           };
263           layer@2 {
264             reg = <2>;
265             xylon,layer-depth = <16>;
266             xylon,layer-colorspace = "rgb";
267             xylon,layer-alpha-mode = "layer";
268             xylon,layer-base-offset = <960>;
269             xylon,layer-buffer-offset = <480>;
270           };
272           layer@3 {
273             reg = <3>;
274             xylon,layer-depth = <16>;
275             xylon,layer-colorspace = "rgb";
276             xylon,layer-alpha-mode = "layer";
277             xylon,layer-base-offset = <480>;
278             xylon,layer-buffer-offset = <480>;
279           };
281           layer@4 {
282             reg = <4>;
283             xylon,layer-depth = <16>;
284             xylon,layer-colorspace = "rgb";
285             xylon,layer-alpha-mode = "layer";
286             xylon,layer-base-offset = <8192>;
287             xylon,layer-buffer-offset = <480>;
288           };
289         };
291         port {
292           #address-cells = <1>;
293           #size-cells = <0>;
295           logicvc_output: endpoint@0 {
296             reg = <0>;
297             remote-endpoint = <&panel_input>;
298           };
299         };
300       };
301     };