Skip to content

Commit a74c052

Browse files
PopPaul2021nunojsa
authored andcommitted
arm64: dts: xilinx: Add dts for AD9164
The devicetree was added for the EVAL-AD9164 board working in MODE 8 on the ZCU102. Signed-off-by: PopPaul2021 <paul.pop@analog.com>
1 parent 44e7ac1 commit a74c052

File tree

2 files changed

+297
-0
lines changed

2 files changed

+297
-0
lines changed
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
/*
3+
* dtsi file for AD916x-FMC-EBZ on Xilinx ZynqMP ZCU102 Rev 1.0
4+
*
5+
* Copyright (C) 2024 Analog Devices Inc.
6+
*/
7+
8+
/ {
9+
clocks {
10+
adf4355_clkin: clock@0 {
11+
compatible = "fixed-clock";
12+
clock-frequency = <120000000>;
13+
clock-output-names = "clkin";
14+
#clock-cells = <0>;
15+
};
16+
17+
adf4355_out_div4: hmc365 {
18+
compatible = "fixed-factor-clock";
19+
20+
clock-div = <4>;
21+
clock-mult = <1>;
22+
clocks = <&adf4355_clk>;
23+
24+
#clock-cells = <0>;
25+
};
26+
27+
ad9508_clkin: clock@1 {
28+
compatible = "fixed-factor-clock";
29+
30+
clock-div = <1>;
31+
clock-mult = <1>;
32+
clocks = <&adf4355_out_div4>;
33+
34+
#clock-cells = <0>;
35+
};
36+
};
37+
};
38+
39+
#include <dt-bindings/iio/frequency/ad9508.h>
40+
41+
&fmc_spi {
42+
adf4355_clk: adf4355@2 {
43+
compatible = "adi,adf4355-2";
44+
reg = <2>;
45+
46+
spi-max-frequency = <10000000>;
47+
48+
clocks = <&adf4355_clkin>;
49+
clock-names = "clkin";
50+
clock-scales = <1 1>;
51+
52+
clock-output-names = "adf4355_pll";
53+
#clock-cells = <0>;
54+
55+
adi,charge-pump-current = <900>;
56+
adi,muxout-select = <6>;
57+
adi,output-a-power = <3>;
58+
adi,output-b-power = <3>;
59+
adi,charge-pump-negative-bleed-enable;
60+
adi,reference-differential-input-enable;
61+
adi,muxout-level-3v3-enable;
62+
adi,power-up-frequency = /bits/ 64 <5000000000>;
63+
adi,output-a-enable;
64+
adi,output-b-enable;
65+
adi,clock-shift = <1>;
66+
};
67+
68+
ad9508_clk: ad9508@0 {
69+
#address-cells = <1>;
70+
#size-cells = <0>;
71+
#clock-cells = <1>;
72+
compatible = "adi,ad9508";
73+
reg = <0>;
74+
spi-cpol;
75+
spi-cpha;
76+
77+
clocks = <&ad9508_clkin>;
78+
79+
spi-max-frequency = <10000000>;
80+
clock-output-names = "ad9508-1_out0", "ad9508-1_out1", "ad9508-1_out2", "ad9508-1_out3";
81+
jesd204-device;
82+
adi,write-mode-only;
83+
#jesd204-cells = <2>;
84+
jesd204-sysref-provider;
85+
86+
ad9508_0_c0:channel@0 {
87+
reg = <0>;
88+
adi,extended-name = "REF_CLK";
89+
adi,driver-mode = <(DRIVER_PHASE_NORMAL | DRIVER_MODE_LVDS_1_00)>;
90+
adi,divider-phase = <0>;
91+
adi,channel-divider = <4>;
92+
};
93+
94+
ad9508_0_c2:channel@2 {
95+
reg = <2>;
96+
adi,extended-name = "SYSREF2";
97+
adi,driver-mode = <(DRIVER_PHASE_NORMAL | DRIVER_MODE_LVDS_1_00)>;
98+
adi,divider-phase = <0>;
99+
adi,channel-divider = <32>;
100+
};
101+
102+
ad9508_0_c3:channel@3 {
103+
reg = <3>;
104+
adi,extended-name = "SYSREF";
105+
adi,driver-mode = <(DRIVER_PHASE_NORMAL | DRIVER_MODE_LVDS_1_00)>;
106+
adi,divider-phase = <0>;
107+
adi,channel-divider = <32>;
108+
};
109+
};
110+
111+
dac0_ad9164: ad9164@1 {
112+
#address-cells = <1>;
113+
#size-cells = <0>;
114+
compatible = "adi,ad9164";
115+
reg = <1>;
116+
spi-max-frequency = <1000000>;
117+
clocks = <&adf4355_clk 0>;
118+
clock-names = "dac_clk";
119+
spi-cpol;
120+
spi-cpha;
121+
122+
adi,full-scale-current-mircoamp = <40000>;
123+
dac_clk-clock-scales = <1 1>;
124+
jesd204-device;
125+
#jesd204-cells = <2>;
126+
jesd204-top-device = <0>; /* This is the TOP device */
127+
jesd204-link-ids = <0>;
128+
jesd204-inputs = <&axi_ad9164_core 0 0>;
129+
130+
adi,jesd-subclass = <1>;
131+
adi,dac-interpolation = <2>;
132+
adi,channel-interpolation = <2>;
133+
adi,clock-output-divider = <1>;
134+
adi,syncoutb-signal-type-lvds-enable;
135+
//adi,scrambling = <1>;
136+
adi,sysref-mode = <2>; /* SYSREF_CONTINUOUS */
137+
138+
adi,subclass = <1>; /* JESD SUBCLASS 0,1,2 */
139+
adi,version = <1>; /* JESD VERSION 0=204A,1=204B,2=204C */
140+
adi,converters-per-device = <2>; /* JESD M */
141+
adi,octets-per-frame = <1>; /* JESD F */
142+
adi,frames-per-multiframe = <32>; /* JESD K */
143+
adi,converter-resolution = <16>; /* JESD N */
144+
adi,bits-per-sample = <16>; /* JESD NP' */
145+
adi,control-bits-per-sample = <0>; /* JESD CS */
146+
adi,lanes-per-device = <8>; /* JESD L */
147+
adi,samples-per-converter-per-frame = <2>; /* JESD S */
148+
adi,interpolation = <2>;
149+
};
150+
};
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
/*
3+
* AD9164-FMC-EBZ on Xilinx ZynqMP ZCU102 Rev 1.0
4+
*
5+
* JESD Link Mode 8 Example: M2, L8, S2, F1, NP'16, Interpolation: 2
6+
*
7+
* https://analogdevicesinc.github.io/hdl/projects/dac_fmc_ebz/index.html
8+
*
9+
* hdl_project: <dac_fmc_ebz/zcu102>
10+
* ADI_DAC_DEVICE: <AD9164>
11+
* ADI_LANE_RATE: <12.5>
12+
* ADI_DAC_MODE: <08>
13+
* board_revision: <H>
14+
*
15+
* Copyright (C) 2024 Analog Devices Inc.
16+
*/
17+
18+
#include "zynqmp-zcu102-rev1.0.dts"
19+
#include <dt-bindings/interrupt-controller/irq.h>
20+
#include <dt-bindings/jesd204/adxcvr.h>
21+
22+
&i2c1 {
23+
i2c-mux@75 {
24+
i2c@0 {
25+
#address-cells = <1>;
26+
#size-cells = <0>;
27+
reg = <0>;
28+
29+
eeprom@50 {
30+
compatible = "at24,24c02";
31+
reg = <0x50>;
32+
};
33+
34+
};
35+
};
36+
};
37+
38+
/ {
39+
40+
ad9164_control@0 {
41+
compatible = "adi,one-bit-adc-dac";
42+
#address-cells = <1>;
43+
#size-cells = <0>;
44+
out-gpios = <&gpio 99 0>, <&gpio 100 0>, <&gpio 101 0>, <&gpio 102 0>, <&gpio 103 0>;
45+
label = "ad9164_control";
46+
channel@0 {
47+
reg = <0>;
48+
label = "dac_ctrl_0";
49+
};
50+
channel@1 {
51+
reg = <1>;
52+
label = "dac_ctrl_1";
53+
};
54+
channel@2 {
55+
reg = <2>;
56+
label = "dac_ctrl_2";
57+
};
58+
channel@3 {
59+
reg = <3>;
60+
label = "dac_ctrl_3";
61+
};
62+
channel@4 {
63+
reg = <4>;
64+
label = "dac_ctrl_4";
65+
};
66+
};
67+
68+
fpga_axi: fpga-axi@0 {
69+
interrupt-parent = <&gic>;
70+
compatible = "simple-bus";
71+
#address-cells = <0x1>;
72+
#size-cells = <0x1>;
73+
ranges = <0 0 0 0xffffffff>;
74+
75+
tx_dma: tx-dmac@9c420000 {
76+
#dma-cells = <1>;
77+
compatible = "adi,axi-dmac-1.00.a";
78+
adi,cyclic;
79+
reg = <0x9c420000 0x10000>;
80+
interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
81+
clocks = <&zynqmp_clk 71>;
82+
};
83+
84+
axi_ad9164_core: axi-ad9164-hpc@84a04000 {
85+
compatible = "adi,axi-ad9162-1.0";
86+
reg = <0x84a04000 0x10000>;
87+
dmas = <&tx_dma 0>;
88+
dma-names = "tx";
89+
spibus-connected = <&dac0_ad9164>;
90+
adi,axi-pl-fifo-enable;
91+
/* jesd204-fsm support */
92+
jesd204-device;
93+
#jesd204-cells = <2>;
94+
jesd204-inputs = <&axi_ad9164_jesd 0 0>;
95+
};
96+
97+
axi_ad9164_jesd: axi-jesd204-tx@84a90000 {
98+
compatible = "adi,axi-jesd204-tx-1.0";
99+
reg = <0x84a90000 0x4000>;
100+
101+
interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>;
102+
103+
clocks = <&zynqmp_clk 71>, <&axi_ad9164_adxcvr 1>, <&axi_ad9164_adxcvr 0>;
104+
clock-names = "s_axi_aclk", "device_clk", "lane_clk";
105+
106+
#clock-cells = <0>;
107+
clock-output-names = "jesd_dac_lane_clk";
108+
109+
/* jesd204-fsm support */
110+
jesd204-device;
111+
#jesd204-cells = <2>;
112+
jesd204-inputs = <&axi_ad9164_adxcvr 0 0>;
113+
};
114+
115+
axi_ad9164_adxcvr: axi-adxcvr-tx@84a60000 {
116+
compatible = "adi,axi-adxcvr-1.0";
117+
reg = <0x84a60000 0x1000>;
118+
119+
clocks = <&ad9508_clk 0>;
120+
clock-names = "conv";
121+
122+
adi,sys-clk-select = <XCVR_QPLL>;
123+
adi,out-clk-select = <XCVR_REFCLK>;
124+
adi,use-lpm-enable;
125+
126+
#clock-cells = <1>;
127+
clock-output-names = "dac_gt_clk", "tx_out_clk";
128+
129+
/* jesd204-fsm support */
130+
jesd204-device;
131+
#jesd204-cells = <2>;
132+
};
133+
134+
axi_sysid_0: axi-sysid-0@85000000 {
135+
compatible = "adi,axi-sysid-1.00.a";
136+
reg = <0x85000000 0x10000>;
137+
};
138+
};
139+
};
140+
141+
&spi0 {
142+
status = "okay";
143+
};
144+
145+
#define fmc_spi spi0
146+
147+
#include "adi-ad9164-fmc-ebz.dtsi"

0 commit comments

Comments
 (0)