xref: /freebsd/sys/contrib/device-tree/Bindings/display/brcm,bcm-vc4.txt (revision c66ec88fed842fbaad62c30d510644ceb7bd2d71)
1*c66ec88fSEmmanuel VadotBroadcom VC4 (VideoCore4) GPU
2*c66ec88fSEmmanuel Vadot
3*c66ec88fSEmmanuel VadotThe VC4 device present on the Raspberry Pi includes a display system
4*c66ec88fSEmmanuel Vadotwith HDMI output and the HVS (Hardware Video Scaler) for compositing
5*c66ec88fSEmmanuel Vadotdisplay planes.
6*c66ec88fSEmmanuel Vadot
7*c66ec88fSEmmanuel VadotRequired properties for VC4:
8*c66ec88fSEmmanuel Vadot- compatible:	Should be "brcm,bcm2835-vc4" or "brcm,cygnus-vc4"
9*c66ec88fSEmmanuel Vadot
10*c66ec88fSEmmanuel VadotRequired properties for Pixel Valve:
11*c66ec88fSEmmanuel Vadot- compatible:	Should be one of "brcm,bcm2835-pixelvalve0",
12*c66ec88fSEmmanuel Vadot		  "brcm,bcm2835-pixelvalve1", or "brcm,bcm2835-pixelvalve2"
13*c66ec88fSEmmanuel Vadot- reg:		Physical base address and length of the PV's registers
14*c66ec88fSEmmanuel Vadot- interrupts:	The interrupt number
15*c66ec88fSEmmanuel Vadot		  See bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.txt
16*c66ec88fSEmmanuel Vadot
17*c66ec88fSEmmanuel VadotRequired properties for HVS:
18*c66ec88fSEmmanuel Vadot- compatible:	Should be "brcm,bcm2835-hvs"
19*c66ec88fSEmmanuel Vadot- reg:		Physical base address and length of the HVS's registers
20*c66ec88fSEmmanuel Vadot- interrupts:	The interrupt number
21*c66ec88fSEmmanuel Vadot		  See bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.txt
22*c66ec88fSEmmanuel Vadot
23*c66ec88fSEmmanuel VadotRequired properties for HDMI
24*c66ec88fSEmmanuel Vadot- compatible:	Should be "brcm,bcm2835-hdmi"
25*c66ec88fSEmmanuel Vadot- reg:		Physical base address and length of the two register ranges
26*c66ec88fSEmmanuel Vadot		  ("HDMI" and "HD", in that order)
27*c66ec88fSEmmanuel Vadot- interrupts:	The interrupt numbers
28*c66ec88fSEmmanuel Vadot		  See bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.txt
29*c66ec88fSEmmanuel Vadot- ddc:		phandle of the I2C controller used for DDC EDID probing
30*c66ec88fSEmmanuel Vadot- clocks:	a) hdmi: The HDMI state machine clock
31*c66ec88fSEmmanuel Vadot		b) pixel: The pixel clock.
32*c66ec88fSEmmanuel Vadot
33*c66ec88fSEmmanuel VadotOptional properties for HDMI:
34*c66ec88fSEmmanuel Vadot- hpd-gpios:	The GPIO pin for HDMI hotplug detect (if it doesn't appear
35*c66ec88fSEmmanuel Vadot		  as an interrupt/status bit in the HDMI controller
36*c66ec88fSEmmanuel Vadot		  itself).  See bindings/pinctrl/brcm,bcm2835-gpio.txt
37*c66ec88fSEmmanuel Vadot- dmas:		Should contain one entry pointing to the DMA channel used to
38*c66ec88fSEmmanuel Vadot		transfer audio data
39*c66ec88fSEmmanuel Vadot- dma-names:	Should contain "audio-rx"
40*c66ec88fSEmmanuel Vadot
41*c66ec88fSEmmanuel VadotRequired properties for DPI:
42*c66ec88fSEmmanuel Vadot- compatible:	Should be "brcm,bcm2835-dpi"
43*c66ec88fSEmmanuel Vadot- reg:		Physical base address and length of the registers
44*c66ec88fSEmmanuel Vadot- clocks:	a) core: The core clock the unit runs on
45*c66ec88fSEmmanuel Vadot		b) pixel: The pixel clock that feeds the pixelvalve
46*c66ec88fSEmmanuel Vadot- port:		Port node with a single endpoint connecting to the panel
47*c66ec88fSEmmanuel Vadot		  device, as defined in [1]
48*c66ec88fSEmmanuel Vadot
49*c66ec88fSEmmanuel VadotRequired properties for VEC:
50*c66ec88fSEmmanuel Vadot- compatible:	Should be "brcm,bcm2835-vec"
51*c66ec88fSEmmanuel Vadot- reg:		Physical base address and length of the registers
52*c66ec88fSEmmanuel Vadot- clocks:	The core clock the unit runs on
53*c66ec88fSEmmanuel Vadot- interrupts:	The interrupt number
54*c66ec88fSEmmanuel Vadot		  See bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.txt
55*c66ec88fSEmmanuel Vadot
56*c66ec88fSEmmanuel VadotRequired properties for V3D:
57*c66ec88fSEmmanuel Vadot- compatible:	Should be "brcm,bcm2835-v3d" or "brcm,cygnus-v3d"
58*c66ec88fSEmmanuel Vadot- reg:		Physical base address and length of the V3D's registers
59*c66ec88fSEmmanuel Vadot- interrupts:	The interrupt number
60*c66ec88fSEmmanuel Vadot		  See bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.txt
61*c66ec88fSEmmanuel Vadot
62*c66ec88fSEmmanuel VadotOptional properties for V3D:
63*c66ec88fSEmmanuel Vadot- clocks:	The clock the unit runs on
64*c66ec88fSEmmanuel Vadot
65*c66ec88fSEmmanuel VadotRequired properties for DSI:
66*c66ec88fSEmmanuel Vadot- compatible:	Should be "brcm,bcm2835-dsi0" or "brcm,bcm2835-dsi1"
67*c66ec88fSEmmanuel Vadot- reg:		Physical base address and length of the DSI block's registers
68*c66ec88fSEmmanuel Vadot- interrupts:	The interrupt number
69*c66ec88fSEmmanuel Vadot		  See bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.txt
70*c66ec88fSEmmanuel Vadot- clocks:	a) phy: The DSI PLL clock feeding the DSI analog PHY
71*c66ec88fSEmmanuel Vadot		b) escape: The DSI ESC clock from CPRMAN
72*c66ec88fSEmmanuel Vadot		c) pixel: The DSI pixel clock from CPRMAN
73*c66ec88fSEmmanuel Vadot- clock-output-names:
74*c66ec88fSEmmanuel Vadot		The 3 clocks output from the DSI analog PHY: dsi[01]_byte,
75*c66ec88fSEmmanuel Vadot		dsi[01]_ddr2, and dsi[01]_ddr
76*c66ec88fSEmmanuel Vadot
77*c66ec88fSEmmanuel VadotRequired properties for the TXP (writeback) block:
78*c66ec88fSEmmanuel Vadot- compatible:	Should be "brcm,bcm2835-txp"
79*c66ec88fSEmmanuel Vadot- reg:		Physical base address and length of the TXP block's registers
80*c66ec88fSEmmanuel Vadot- interrupts:	The interrupt number
81*c66ec88fSEmmanuel Vadot		  See bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.txt
82*c66ec88fSEmmanuel Vadot
83*c66ec88fSEmmanuel Vadot[1] Documentation/devicetree/bindings/media/video-interfaces.txt
84*c66ec88fSEmmanuel Vadot
85*c66ec88fSEmmanuel VadotExample:
86*c66ec88fSEmmanuel Vadotpixelvalve@7e807000 {
87*c66ec88fSEmmanuel Vadot	compatible = "brcm,bcm2835-pixelvalve2";
88*c66ec88fSEmmanuel Vadot	reg = <0x7e807000 0x100>;
89*c66ec88fSEmmanuel Vadot	interrupts = <2 10>; /* pixelvalve */
90*c66ec88fSEmmanuel Vadot};
91*c66ec88fSEmmanuel Vadot
92*c66ec88fSEmmanuel Vadothvs@7e400000 {
93*c66ec88fSEmmanuel Vadot	compatible = "brcm,bcm2835-hvs";
94*c66ec88fSEmmanuel Vadot	reg = <0x7e400000 0x6000>;
95*c66ec88fSEmmanuel Vadot	interrupts = <2 1>;
96*c66ec88fSEmmanuel Vadot};
97*c66ec88fSEmmanuel Vadot
98*c66ec88fSEmmanuel Vadothdmi: hdmi@7e902000 {
99*c66ec88fSEmmanuel Vadot	compatible = "brcm,bcm2835-hdmi";
100*c66ec88fSEmmanuel Vadot	reg = <0x7e902000 0x600>,
101*c66ec88fSEmmanuel Vadot	      <0x7e808000 0x100>;
102*c66ec88fSEmmanuel Vadot	interrupts = <2 8>, <2 9>;
103*c66ec88fSEmmanuel Vadot	ddc = <&i2c2>;
104*c66ec88fSEmmanuel Vadot	hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
105*c66ec88fSEmmanuel Vadot	clocks = <&clocks BCM2835_PLLH_PIX>,
106*c66ec88fSEmmanuel Vadot		 <&clocks BCM2835_CLOCK_HSM>;
107*c66ec88fSEmmanuel Vadot	clock-names = "pixel", "hdmi";
108*c66ec88fSEmmanuel Vadot};
109*c66ec88fSEmmanuel Vadot
110*c66ec88fSEmmanuel Vadotdpi: dpi@7e208000 {
111*c66ec88fSEmmanuel Vadot	compatible = "brcm,bcm2835-dpi";
112*c66ec88fSEmmanuel Vadot	reg = <0x7e208000 0x8c>;
113*c66ec88fSEmmanuel Vadot	clocks = <&clocks BCM2835_CLOCK_VPU>,
114*c66ec88fSEmmanuel Vadot	         <&clocks BCM2835_CLOCK_DPI>;
115*c66ec88fSEmmanuel Vadot	clock-names = "core", "pixel";
116*c66ec88fSEmmanuel Vadot	#address-cells = <1>;
117*c66ec88fSEmmanuel Vadot	#size-cells = <0>;
118*c66ec88fSEmmanuel Vadot
119*c66ec88fSEmmanuel Vadot	port {
120*c66ec88fSEmmanuel Vadot		dpi_out: endpoint@0 {
121*c66ec88fSEmmanuel Vadot			remote-endpoint = <&panel_in>;
122*c66ec88fSEmmanuel Vadot		};
123*c66ec88fSEmmanuel Vadot	};
124*c66ec88fSEmmanuel Vadot};
125*c66ec88fSEmmanuel Vadot
126*c66ec88fSEmmanuel Vadotdsi1: dsi@7e700000 {
127*c66ec88fSEmmanuel Vadot	compatible = "brcm,bcm2835-dsi1";
128*c66ec88fSEmmanuel Vadot	reg = <0x7e700000 0x8c>;
129*c66ec88fSEmmanuel Vadot	interrupts = <2 12>;
130*c66ec88fSEmmanuel Vadot	#address-cells = <1>;
131*c66ec88fSEmmanuel Vadot	#size-cells = <0>;
132*c66ec88fSEmmanuel Vadot	#clock-cells = <1>;
133*c66ec88fSEmmanuel Vadot
134*c66ec88fSEmmanuel Vadot	clocks = <&clocks BCM2835_PLLD_DSI1>,
135*c66ec88fSEmmanuel Vadot		 <&clocks BCM2835_CLOCK_DSI1E>,
136*c66ec88fSEmmanuel Vadot		 <&clocks BCM2835_CLOCK_DSI1P>;
137*c66ec88fSEmmanuel Vadot	clock-names = "phy", "escape", "pixel";
138*c66ec88fSEmmanuel Vadot
139*c66ec88fSEmmanuel Vadot	clock-output-names = "dsi1_byte", "dsi1_ddr2", "dsi1_ddr";
140*c66ec88fSEmmanuel Vadot
141*c66ec88fSEmmanuel Vadot	pitouchscreen: panel@0 {
142*c66ec88fSEmmanuel Vadot		compatible = "raspberrypi,touchscreen";
143*c66ec88fSEmmanuel Vadot		reg = <0>;
144*c66ec88fSEmmanuel Vadot
145*c66ec88fSEmmanuel Vadot		<...>
146*c66ec88fSEmmanuel Vadot	};
147*c66ec88fSEmmanuel Vadot};
148*c66ec88fSEmmanuel Vadot
149*c66ec88fSEmmanuel Vadotvec: vec@7e806000 {
150*c66ec88fSEmmanuel Vadot	compatible = "brcm,bcm2835-vec";
151*c66ec88fSEmmanuel Vadot	reg = <0x7e806000 0x1000>;
152*c66ec88fSEmmanuel Vadot	clocks = <&clocks BCM2835_CLOCK_VEC>;
153*c66ec88fSEmmanuel Vadot	interrupts = <2 27>;
154*c66ec88fSEmmanuel Vadot};
155*c66ec88fSEmmanuel Vadot
156*c66ec88fSEmmanuel Vadotv3d: v3d@7ec00000 {
157*c66ec88fSEmmanuel Vadot	compatible = "brcm,bcm2835-v3d";
158*c66ec88fSEmmanuel Vadot	reg = <0x7ec00000 0x1000>;
159*c66ec88fSEmmanuel Vadot	interrupts = <1 10>;
160*c66ec88fSEmmanuel Vadot};
161*c66ec88fSEmmanuel Vadot
162*c66ec88fSEmmanuel Vadotvc4: gpu {
163*c66ec88fSEmmanuel Vadot	compatible = "brcm,bcm2835-vc4";
164*c66ec88fSEmmanuel Vadot};
165*c66ec88fSEmmanuel Vadot
166*c66ec88fSEmmanuel Vadotpanel: panel {
167*c66ec88fSEmmanuel Vadot	compatible = "ontat,yx700wv03", "simple-panel";
168*c66ec88fSEmmanuel Vadot
169*c66ec88fSEmmanuel Vadot	port {
170*c66ec88fSEmmanuel Vadot		panel_in: endpoint {
171*c66ec88fSEmmanuel Vadot			remote-endpoint = <&dpi_out>;
172*c66ec88fSEmmanuel Vadot		};
173*c66ec88fSEmmanuel Vadot	};
174*c66ec88fSEmmanuel Vadot};
175