Skip to content

Commit f98be31

Browse files
committed
docs: iio: add documentation for adf41513 driver
add documentation for adf41513 driver which describes the device driver files and shows how userspace may consume the ABI for various tasks Signed-off-by: Rodrigo Alencar <[email protected]>
1 parent a04417c commit f98be31

File tree

2 files changed

+380
-0
lines changed

2 files changed

+380
-0
lines changed

Documentation/iio/adf41513.rst

Lines changed: 379 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,379 @@
1+
.. SPDX-License-Identifier: GPL-2.0
2+
3+
===============
4+
ADF41513 driver
5+
===============
6+
7+
This driver supports Analog Devices' ADF41513 and ADF41510 PLL frequency
8+
synthesizers on SPI bus.
9+
10+
1. Supported devices
11+
====================
12+
13+
* `ADF41510 <https://www.analog.com/ADF41510>`_
14+
* `ADF41513 <https://www.analog.com/ADF41513>`_
15+
16+
The ADF41513 is an ultralow noise frequency synthesizer that can be used to
17+
implement local oscillators (LOs) as high as 26.5 GHz in the upconversion and
18+
downconversion sections of wireless receivers and transmitters. The ADF41510
19+
is a similar device that supports frequencies up to 10 GHz.
20+
21+
Both devices support integer-N and fractional-N operation modes, providing
22+
excellent phase noise performance and flexible frequency generation
23+
capabilities.
24+
25+
Key Features:
26+
27+
- **ADF41513**: 1 GHz to 26.5 GHz frequency range
28+
- **ADF41510**: 1 GHz to 10 GHz frequency range
29+
- Integer-N and fractional-N operation modes
30+
- Ultra-low phase noise (-235 dBc/Hz integer-N, -231 dBc/Hz fractional-N)
31+
- High maximum PFD frequency (250 MHz integer-N, 125 MHz fractional-N)
32+
- 25-bit fixed modulus or 49-bit variable modulus fractional modes
33+
- Programmable charge pump currents with 16x range
34+
- Digital lock detect functionality
35+
- Phase resync capability for consistent output phase
36+
- Clock framework integration for system clock generation
37+
38+
2. Device attributes
39+
====================
40+
41+
The ADF41513 driver provides the following IIO extended attributes for
42+
frequency control and monitoring:
43+
44+
Each IIO device has a device folder under ``/sys/bus/iio/devices/iio:deviceX``,
45+
where X is the IIO index of the device. Under these folders reside a set of
46+
device files that provide access to the synthesizer's functionality.
47+
48+
The following table shows the ADF41513 related device files:
49+
50+
+----------------------+-------------------------------------------------------+
51+
| Device file | Description |
52+
+======================+=======================================================+
53+
| frequency | RF output frequency control and readback (Hz) |
54+
+----------------------+-------------------------------------------------------+
55+
| frequency_resolution | Target frequency resolution control (Hz) |
56+
+----------------------+-------------------------------------------------------+
57+
| refin_frequency | Reference input frequency control and readback (Hz) |
58+
+----------------------+-------------------------------------------------------+
59+
| powerdown | Power management control (0=active, 1=power down) |
60+
+----------------------+-------------------------------------------------------+
61+
62+
2.1 Frequency Control
63+
----------------------
64+
65+
The ``frequency`` attribute controls the RF output frequency with sub-Hz precision.
66+
The driver automatically selects between integer-N and fractional-N modes to
67+
achieve the requested frequency with the best possible phase noise performance.
68+
69+
**Supported ranges:**
70+
71+
- **ADF41513**: 1,000,000,000 Hz to 26,500,000,000 Hz (1 GHz to 26.5 GHz)
72+
- **ADF41510**: 1,000,000,000 Hz to 10,000,000,000 Hz (1 GHz to 10 GHz)
73+
74+
The frequency is specified in Hz, for sub-Hz precision use decimal notation.
75+
For example, 12.102000000 GHz would be written as "12102000000.000000".
76+
77+
2.2 Frequency Resolution Control
78+
--------------------------------
79+
80+
The ``frequency_resolution`` attribute controls the target frequency resolution
81+
that the driver attempts to achieve. This affects the choice between fixed
82+
modulus (25-bit) and variable modulus (49-bit) fractional-N modes:
83+
84+
- **Fixed modulus**: Resolution = f_PFD / 2^25 (typically ~3 Hz with 100 MHz PFD)
85+
- **Variable modulus**: Resolution = f_PFD / 2^49 (µHz resolution possible)
86+
87+
Default resolution is 1 Hz (1,000,000 µHz).
88+
89+
2.3 Reference Input Control
90+
---------------------------
91+
92+
The ``refin_frequency`` attribute allows control of the reference input frequency
93+
when using a programmable reference clock. The supported range is 10 MHz to
94+
800 MHz.
95+
96+
2.4 Power Management
97+
--------------------
98+
99+
The ``powerdown`` attribute provides software power control:
100+
101+
- **0**: Device active and operational
102+
- **1**: Device in power-down mode (low power consumption)
103+
104+
3. Operating modes
105+
==================
106+
107+
3.1 Integer-N Mode
108+
------------------
109+
110+
When the requested frequency can be achieved as an integer multiple of the PFD
111+
frequency (within the specified resolution tolerance), the driver automatically
112+
selects integer-N mode for optimal phase noise performance.
113+
114+
In integer-N mode:
115+
116+
- Phase noise: -235 dBc/Hz normalized floor
117+
- Frequency resolution: f_PFD (same as PFD frequency)
118+
- Maximum PFD frequency: 250 MHz
119+
- Bleed current: Disabled for best performance
120+
121+
3.2 Fractional-N Mode
122+
---------------------
123+
124+
When sub-integer frequency steps are required, the driver automatically selects
125+
fractional-N mode using either fixed or variable modulus.
126+
127+
**Fixed Modulus (25-bit)**:
128+
129+
- Used when variable modulus is not required
130+
- Resolution: f_PFD / 2^25
131+
- Simpler implementation, faster settling
132+
133+
**Variable Modulus (49-bit)**:
134+
135+
- Used for maximum resolution requirements
136+
- Resolution: f_PFD / 2^49 (theoretical)
137+
- Exact frequency synthesis capability
138+
139+
In fractional-N mode:
140+
141+
- Phase noise: -231 dBc/Hz normalized floor
142+
- Maximum PFD frequency: 125 MHz
143+
- Bleed current: Automatically enabled and optimized
144+
- Dithering: Enabled to reduce fractional spurs
145+
146+
3.3 Automatic Mode Selection
147+
----------------------------
148+
149+
The driver automatically selects the optimal operating mode based on:
150+
151+
1. **Frequency accuracy requirements**: Determined by frequency_resolution setting
152+
2. **Phase noise optimization**: Integer-N preferred when possible
153+
3. **PFD frequency constraints**: Different limits for integer vs fractional modes
154+
4. **Prescaler selection**: Automatic 4/5 vs 8/9 prescaler selection based on frequency
155+
156+
4. Clock framework integration
157+
==============================
158+
159+
The ADF41513 driver integrates with the Linux Common Clock Framework (CCF) when
160+
the device tree includes clock provider properties (``#clock-cells = <0>``).
161+
162+
When enabled, the driver registers as a clock provider, allowing other kernel
163+
drivers to use the synthesizer output as a system clock source.
164+
165+
**Device tree configuration for clock provider**:
166+
167+
.. code-block:: dts
168+
169+
adf41513@0 {
170+
compatible = "adi,adf41513";
171+
reg = <0>;
172+
/* ... other properties ... */
173+
#clock-cells = <0>;
174+
clock-output-names = "adf41513_clk";
175+
};
176+
177+
**Clock consumer example**:
178+
179+
.. code-block:: dts
180+
181+
some_device {
182+
clocks = <&adf41513>;
183+
clock-names = "ref_clk";
184+
};
185+
186+
5. Device tree configuration
187+
============================
188+
189+
See ``Documentation/devicetree/bindings/iio/frequency/adi,adf41513.yaml`` for
190+
complete device tree binding documentation.
191+
192+
**Basic configuration example**:
193+
194+
.. code-block:: dts
195+
196+
adf41513@0 {
197+
compatible = "adi,adf41513";
198+
reg = <0>;
199+
spi-max-frequency = <10000000>;
200+
clocks = <&ref_clk>;
201+
clock-names = "clkin";
202+
vcc-supply = <&vcc_3v3>;
203+
204+
adi,power-up-frequency = /bits/ 64 <12000000000>;
205+
adi,charge-pump-current = <2400>;
206+
adi,phase-detector-polarity-positive;
207+
};
208+
209+
6. Performance characteristics
210+
==============================
211+
212+
6.1 Phase Noise Performance
213+
----------------------------
214+
215+
The ADF41513 provides excellent phase noise performance:
216+
217+
**Integer-N mode**:
218+
219+
- Normalized phase noise floor: -235 dBc/Hz
220+
- 1/f noise corner: Typically around 10 kHz offset
221+
- Best performance mode for integer frequency multiples
222+
223+
**Fractional-N mode**:
224+
225+
- Normalized phase noise floor: -231 dBc/Hz
226+
- Additional fractional spurs may be present
227+
- Optimized with automatic bleed current and dithering
228+
229+
6.2 Frequency Ranges and Prescalers
230+
------------------------------------
231+
232+
The driver automatically selects the appropriate prescaler based on frequency:
233+
234+
**4/5 Prescaler**:
235+
236+
- RF frequency range: 1 GHz to 16 GHz
237+
- Integer-N: N = 20 to 511
238+
- Fractional-N: N = 23 to 511
239+
240+
**8/9 Prescaler** (ADF41513 only):
241+
242+
- RF frequency range: 1 GHz to 26.5 GHz
243+
- Integer-N: N = 64 to 1023
244+
- Fractional-N: N = 75 to 1023
245+
246+
6.3 Reference Input Requirements
247+
---------------------------------
248+
249+
- Frequency range: 10 MHz to 800 MHz
250+
- Input sensitivity: -10 dBm to +8 dBm
251+
- Slew rate requirement: >320 V/µs (>500 V/µs recommended)
252+
- With doubler enabled: Maximum 225 MHz reference frequency
253+
254+
7. Usage examples
255+
=================
256+
257+
7.1 Basic Frequency Setting
258+
----------------------------
259+
260+
Set output frequency to 12.102 GHz:
261+
262+
.. code-block:: bash
263+
264+
root:/sys/bus/iio/devices/iio:device0> echo 12102000000 > out_altvoltage0_frequency
265+
266+
Read current frequency:
267+
268+
.. code-block:: bash
269+
270+
root:/sys/bus/iio/devices/iio:device0> cat out_altvoltage0_frequency
271+
12101999999.582767
272+
273+
7.2 High Resolution Frequency Control
274+
-------------------------------------
275+
276+
Configure for sub-Hz resolution and set a precise frequency:
277+
278+
.. code-block:: bash
279+
280+
# Set resolution to 0.1 Hz (100,000 µHz)
281+
root:/sys/bus/iio/devices/iio:device0> echo 0.1 > out_altvoltage0_frequency_resolution
282+
283+
# Set frequency to 12.102 GHz (1 µHz precision)
284+
root:/sys/bus/iio/devices/iio:device0> echo 12102000000 > out_altvoltage0_frequency
285+
root:/sys/bus/iio/devices/iio:device0> cat out_altvoltage0_frequency
286+
12101999999.980131
287+
288+
7.3 Reference Frequency Control
289+
-------------------------------
290+
291+
Change reference input frequency (if using programmable reference):
292+
293+
.. code-block:: bash
294+
295+
# Set reference to 122.88 MHz
296+
root:/sys/bus/iio/devices/iio:device0> echo 122880000 > out_altvoltage0_refin_frequency
297+
298+
# Verify the change
299+
root:/sys/bus/iio/devices/iio:device0> cat out_altvoltage0_refin_frequency
300+
122880000
301+
302+
7.4 Power Management
303+
--------------------
304+
305+
Power down the device:
306+
307+
.. code-block:: bash
308+
309+
root:/sys/bus/iio/devices/iio:device0> echo 1 > out_altvoltage0_powerdown
310+
311+
# Power back up
312+
root:/sys/bus/iio/devices/iio:device0> echo 0 > out_altvoltage0_powerdown
313+
314+
7.5 Monitor Lock Status
315+
-----------------------
316+
317+
When lock detect GPIO is configured, check if PLL is locked:
318+
319+
.. code-block:: bash
320+
321+
# Read frequency - will return error if not locked
322+
root:/sys/bus/iio/devices/iio:device0> cat out_altvoltage0_frequency
323+
324+
If the PLL is not locked, the frequency read will return ``-EBUSY`` (Device or resource busy).
325+
326+
8. Advanced features
327+
====================
328+
329+
8.1 Phase Resync
330+
-----------------
331+
332+
When enabled in device tree (``adi,phase-resync-enable``), the phase resync
333+
feature provides a consistent output phase relationship to the reference input.
334+
This is particularly useful for beamforming applications where phase coherence
335+
across multiple synthesizers is required.
336+
337+
8.2 Charge Pump Optimization
338+
-----------------------------
339+
340+
The driver automatically optimizes charge pump settings:
341+
342+
- **Current**: Programmable from 0.45 mA to 7.2 mA
343+
- **Bleed current**: Automatically calculated and enabled in fractional-N mode
344+
- **Loop filter integration**: Works with external passive loop filters
345+
346+
8.3 Spurious Performance
347+
------------------------
348+
349+
The driver includes automatic spur reduction techniques:
350+
351+
- **Integer boundary spur avoidance**: Automatic PFD frequency optimization
352+
- **Fractional spur reduction**: Automatic dithering and bleed current
353+
- **Reference spur suppression**: High PFD frequency operation when possible
354+
355+
9. Troubleshooting
356+
==================
357+
358+
9.1 Common Issues
359+
-----------------
360+
361+
**"PLL un-locked" errors**:
362+
363+
- Check reference input signal quality and level
364+
- Verify loop filter design matches charge pump current
365+
- Ensure VCO tuning range covers target frequency
366+
- Check power supply voltage and stability
367+
368+
**Frequency accuracy issues**:
369+
370+
- Verify reference frequency accuracy
371+
- Check frequency_resolution setting
372+
- Ensure target frequency is within device range
373+
374+
**High spurious content**:
375+
376+
- Verify PCB layout follows ADI recommendations
377+
- Check loop filter component values and quality
378+
- Ensure adequate power supply decoupling
379+
- Verify reference input signal purity

Documentation/iio/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ Industrial I/O Kernel Drivers
2929
ad7625
3030
ad7944
3131
ade9000
32+
adf41513
3233
adis16475
3334
adis16480
3435
adis16550

0 commit comments

Comments
 (0)