xref: /linux/Documentation/devicetree/bindings/iio/adc/xilinx-xadc.txt (revision d0034a7a4ac7fae708146ac0059b9c47a1543f0d)
1588858c4SLars-Peter ClausenXilinx XADC device driver
2588858c4SLars-Peter Clausen
3*d0dc4c80SLars-Peter ClausenThis binding document describes the bindings for the Xilinx 7 Series XADC as well
4*d0dc4c80SLars-Peter Clausenas the UltraScale/UltraScale+ System Monitor.
5*d0dc4c80SLars-Peter Clausen
6*d0dc4c80SLars-Peter ClausenThe Xilinx XADC is an ADC that can be found in the Series 7 FPGAs from Xilinx.
7*d0dc4c80SLars-Peter ClausenThe XADC has a DRP interface for communication. Currently two different
8*d0dc4c80SLars-Peter Clausenfrontends for the DRP interface exist. One that is only available on the ZYNQ
9*d0dc4c80SLars-Peter Clausenfamily as a hardmacro in the SoC portion of the ZYNQ. The other one is available
10*d0dc4c80SLars-Peter Clausenon all series 7 platforms and is a softmacro with a AXI interface. This binding
11*d0dc4c80SLars-Peter Clausendocument describes the bindings for both of them since the bindings are very
12*d0dc4c80SLars-Peter Clausensimilar.
13*d0dc4c80SLars-Peter Clausen
14*d0dc4c80SLars-Peter ClausenThe Xilinx System Monitor is an ADC that is found in the UltraScale and
15*d0dc4c80SLars-Peter ClausenUltraScale+ FPGAs from Xilinx. The System Monitor provides a DRP interface for
16*d0dc4c80SLars-Peter Clausencommunication. Xilinx provides a standard IP core that can be used to access the
17*d0dc4c80SLars-Peter ClausenSystem Monitor through an AXI interface in the FPGA fabric. This IP core is
18*d0dc4c80SLars-Peter Clausencalled the Xilinx System Management Wizard. This document describes the bindings
19*d0dc4c80SLars-Peter Clausenfor this IP.
20588858c4SLars-Peter Clausen
21588858c4SLars-Peter ClausenRequired properties:
22588858c4SLars-Peter Clausen	- compatible: Should be one of
23588858c4SLars-Peter Clausen		* "xlnx,zynq-xadc-1.00.a": When using the ZYNQ device
24588858c4SLars-Peter Clausen		  configuration interface to interface to the XADC hardmacro.
25588858c4SLars-Peter Clausen		* "xlnx,axi-xadc-1.00.a": When using the axi-xadc pcore to
26588858c4SLars-Peter Clausen		  interface to the XADC hardmacro.
27*d0dc4c80SLars-Peter Clausen		* "xlnx,system-management-wiz-1.3": When using the
28*d0dc4c80SLars-Peter Clausen		  Xilinx System Management Wizard fabric IP core to access the
29*d0dc4c80SLars-Peter Clausen		  UltraScale and UltraScale+ System Monitor.
30588858c4SLars-Peter Clausen	- reg: Address and length of the register set for the device
31588858c4SLars-Peter Clausen	- interrupts: Interrupt for the XADC control interface.
32588858c4SLars-Peter Clausen	- clocks: When using the ZYNQ this must be the ZYNQ PCAP clock,
33*d0dc4c80SLars-Peter Clausen	  when using the axi-xadc or the axi-system-management-wizard this must be
34*d0dc4c80SLars-Peter Clausen	  the clock that provides the clock to the AXI bus interface of the core.
35588858c4SLars-Peter Clausen
36588858c4SLars-Peter ClausenOptional properties:
37588858c4SLars-Peter Clausen	- xlnx,external-mux:
38588858c4SLars-Peter Clausen		* "none": No external multiplexer is used, this is the default
39588858c4SLars-Peter Clausen		  if the property is omitted.
40588858c4SLars-Peter Clausen		* "single": External multiplexer mode is used with one
41588858c4SLars-Peter Clausen		   multiplexer.
42588858c4SLars-Peter Clausen		* "dual": External multiplexer mode is used with two
43588858c4SLars-Peter Clausen		  multiplexers for simultaneous sampling.
44588858c4SLars-Peter Clausen	- xlnx,external-mux-channel: Configures which pair of pins is used to
45588858c4SLars-Peter Clausen	  sample data in external mux mode.
46588858c4SLars-Peter Clausen	  Valid values for single external multiplexer mode are:
47588858c4SLars-Peter Clausen		0: VP/VN
48588858c4SLars-Peter Clausen		1: VAUXP[0]/VAUXN[0]
49588858c4SLars-Peter Clausen		2: VAUXP[1]/VAUXN[1]
50588858c4SLars-Peter Clausen		...
51588858c4SLars-Peter Clausen		16: VAUXP[15]/VAUXN[15]
52588858c4SLars-Peter Clausen	  Valid values for dual external multiplexer mode are:
53588858c4SLars-Peter Clausen		1: VAUXP[0]/VAUXN[0] - VAUXP[8]/VAUXN[8]
54588858c4SLars-Peter Clausen		2: VAUXP[1]/VAUXN[1] - VAUXP[9]/VAUXN[9]
55588858c4SLars-Peter Clausen		...
56588858c4SLars-Peter Clausen		8: VAUXP[7]/VAUXN[7] - VAUXP[15]/VAUXN[15]
57588858c4SLars-Peter Clausen
58588858c4SLars-Peter Clausen	  This property needs to be present if the device is configured for
59588858c4SLars-Peter Clausen	  external multiplexer mode (either single or dual). If the device is
60588858c4SLars-Peter Clausen	  not using external multiplexer mode the property is ignored.
61588858c4SLars-Peter Clausen	- xnlx,channels: List of external channels that are connected to the ADC
62588858c4SLars-Peter Clausen	  Required properties:
63588858c4SLars-Peter Clausen		* #address-cells: Should be 1.
64588858c4SLars-Peter Clausen		* #size-cells: Should be 0.
65588858c4SLars-Peter Clausen
66588858c4SLars-Peter Clausen	  The child nodes of this node represent the external channels which are
67588858c4SLars-Peter Clausen	  connected to the ADC. If the property is no present no external
68588858c4SLars-Peter Clausen	  channels will be assumed to be connected.
69588858c4SLars-Peter Clausen
70588858c4SLars-Peter Clausen	  Each child node represents one channel and has the following
71588858c4SLars-Peter Clausen	  properties:
72588858c4SLars-Peter Clausen		Required properties:
73ac3e8ea1SMasanari Iida			* reg: Pair of pins the channel is connected to.
74588858c4SLars-Peter Clausen				0: VP/VN
75588858c4SLars-Peter Clausen				1: VAUXP[0]/VAUXN[0]
76588858c4SLars-Peter Clausen				2: VAUXP[1]/VAUXN[1]
77588858c4SLars-Peter Clausen				...
78588858c4SLars-Peter Clausen				16: VAUXP[15]/VAUXN[15]
79588858c4SLars-Peter Clausen			  Note each channel number should only be used at most
80588858c4SLars-Peter Clausen			  once.
81588858c4SLars-Peter Clausen		Optional properties:
82588858c4SLars-Peter Clausen			* xlnx,bipolar: If set the channel is used in bipolar
83588858c4SLars-Peter Clausen			  mode.
84588858c4SLars-Peter Clausen
85588858c4SLars-Peter Clausen
86588858c4SLars-Peter ClausenExamples:
87588858c4SLars-Peter Clausen	xadc@f8007100 {
88588858c4SLars-Peter Clausen		compatible = "xlnx,zynq-xadc-1.00.a";
89588858c4SLars-Peter Clausen		reg = <0xf8007100 0x20>;
90588858c4SLars-Peter Clausen		interrupts = <0 7 4>;
91588858c4SLars-Peter Clausen		interrupt-parent = <&gic>;
92588858c4SLars-Peter Clausen		clocks = <&pcap_clk>;
93588858c4SLars-Peter Clausen
94588858c4SLars-Peter Clausen		xlnx,channels {
95588858c4SLars-Peter Clausen			#address-cells = <1>;
96588858c4SLars-Peter Clausen			#size-cells = <0>;
97588858c4SLars-Peter Clausen			channel@0 {
98588858c4SLars-Peter Clausen				reg = <0>;
99588858c4SLars-Peter Clausen			};
100588858c4SLars-Peter Clausen			channel@1 {
101588858c4SLars-Peter Clausen				reg = <1>;
102588858c4SLars-Peter Clausen			};
103588858c4SLars-Peter Clausen			channel@8 {
104588858c4SLars-Peter Clausen				reg = <8>;
105588858c4SLars-Peter Clausen			};
106588858c4SLars-Peter Clausen		};
107588858c4SLars-Peter Clausen	};
108588858c4SLars-Peter Clausen
109588858c4SLars-Peter Clausen	xadc@43200000 {
110588858c4SLars-Peter Clausen		compatible = "xlnx,axi-xadc-1.00.a";
111588858c4SLars-Peter Clausen		reg = <0x43200000 0x1000>;
112588858c4SLars-Peter Clausen		interrupts = <0 53 4>;
113588858c4SLars-Peter Clausen		interrupt-parent = <&gic>;
114588858c4SLars-Peter Clausen		clocks = <&fpga1_clk>;
115588858c4SLars-Peter Clausen
116588858c4SLars-Peter Clausen		xlnx,channels {
117588858c4SLars-Peter Clausen			#address-cells = <1>;
118588858c4SLars-Peter Clausen			#size-cells = <0>;
119588858c4SLars-Peter Clausen			channel@0 {
120588858c4SLars-Peter Clausen				reg = <0>;
121588858c4SLars-Peter Clausen				xlnx,bipolar;
122588858c4SLars-Peter Clausen			};
123588858c4SLars-Peter Clausen		};
124588858c4SLars-Peter Clausen	};
125*d0dc4c80SLars-Peter Clausen
126*d0dc4c80SLars-Peter Clausen	adc@80000000 {
127*d0dc4c80SLars-Peter Clausen		compatible = "xlnx,system-management-wiz-1.3";
128*d0dc4c80SLars-Peter Clausen		reg = <0x80000000 0x1000>;
129*d0dc4c80SLars-Peter Clausen		interrupts = <0 81 4>;
130*d0dc4c80SLars-Peter Clausen		interrupt-parent = <&gic>;
131*d0dc4c80SLars-Peter Clausen		clocks = <&fpga1_clk>;
132*d0dc4c80SLars-Peter Clausen
133*d0dc4c80SLars-Peter Clausen		xlnx,channels {
134*d0dc4c80SLars-Peter Clausen			#address-cells = <1>;
135*d0dc4c80SLars-Peter Clausen			#size-cells = <0>;
136*d0dc4c80SLars-Peter Clausen			channel@0 {
137*d0dc4c80SLars-Peter Clausen				reg = <0>;
138*d0dc4c80SLars-Peter Clausen				xlnx,bipolar;
139*d0dc4c80SLars-Peter Clausen			};
140*d0dc4c80SLars-Peter Clausen		};
141*d0dc4c80SLars-Peter Clausen	};
142