This is an old revision of the document!
This driver supports the
The ADF4371 allows implementation of fractional-N or Integer N phase-locked loop (PLL) frequency synthesizers when used with an external loop filter and an external reference frequency. The wideband microwave voltage controlled oscillator (VCO) design allows frequencies from 62.5 MHz to 32 GHz to be generated.
The ADF4371 has an integrated VCO with a fundamental output frequency ranging from 4000 MHz to 8000 MHz. In addition, the VCO frequency is connected to divide by 1, 2, 4, 8, 16, 32, or 64 circuits that allows the user to generate radio frequency (RF) output frequencies as low as 62.5 MHz at RF8x. A frequency multiplier at RF16x generates from 8 GHz to 16 GHz. A frequency quadrupler generates frequencies from 16 GHz to 32 GHz at RF32x. RFAUX8x duplicates the frequency range of RF8x or permits direct access to the VCO output. To suppress the unwanted products of frequency multiplication, a harmonic filter exists between the multipliers and the output stages of RF16x and RF32x.
Control of all on-chip registers is through a 3-wire interface. The ADF4371 operates with analog and digital power supplies ranging from 3.15 V to 3.45 V, and 5 V for the VCO power supply. The ADF4371 also contains hardware and software power-down modes.
Source | Mainlined? |
---|---|
drivers/iio/frequency/adf4371.c | YES |
Function | File |
---|---|
driver | drivers/iio/frequency/adf4371.c |
Documentation | adf4371.yaml |
Example device tree
Function | File |
---|---|
dts | rpi-adf4371-overlay.dts |
The ADF4371 driver is a SPI bus driver and can be instantiated via device tree.
Required properties:
Optional properties:
Channel specific optional properties:
Example: spi0 { #address-cells = <1>; #size-cells = <0>; frequency@0 { compatible = "adi,adf4371"; reg = <0>; #address-cells = <1>; #size-cells = <0>; #clock-cells = <1>; spi-max-frequency = <1000000>; clocks = <&adf4371_clkin>; clock-names = "clkin"; clock-scales = <1 10>; channel@0 { reg = <0>; adi,output-enable; adi,power-up-frequency = /bits/ 64 <8000000000>; }; channel@1 { reg = <1>; adi,output-enable; }; channel@2 { reg = <2>; adi,output-enable; adi,power-up-frequency = /bits/ 64 <16000000000>; }; channel@3 { reg = <3>; adi,output-enable; adi,power-up-frequency = /bits/ 64 <32000000000>; }; }; };
Configure kernel with “make menuconfig” (alternatively use “make xconfig” or “make qconfig”)
The ADF4371 driver depends on SPI and selects REGMAP_SPI
Configure kernel with “make menuconfig” (alternatively use “make xconfig” or “make qconfig”)
Linux Kernel Configuration Device Drivers ---> <*> Industrial I/O support ---> --- Industrial I/O support Frequency Synthesizers DDS/PLL ---> *** Phase-Locked Loop (PLL) frequency synthesizers *** <*> Analog Devices ADF4371/ADF4372 Wideband Synthesizers
Each and every IIO device, typically a hardware chip, has a device folder under /sys/bus/iio/devices/iio:deviceX. Where X is the IIO index of the device. Under every of these directory folders reside a set of files, depending on the characteristics and features of the hardware device in question. These files are consistently generalized and documented in the IIO ABI documentation. In order to determine which IIO deviceX corresponds to which hardware device, the user can read the name file /sys/bus/iio/devices/iio:deviceX/name. In case the sequence in which the iio device drivers are loaded/registered is constant, the numbering is constant and may be known in advance.
This specifies any shell prompt running on the target
analog:/sys/bus/iio/devices/iio:device0# cd /sys/bus/iio/devices/ root@analog:/sys/bus/iio/devices# ls iio:device0 iio:device1 iio:device2 iio:device3 root@analog:/sys/bus/iio/devices# root@analog:/sys/bus/iio/devices# cd iio\:device0 root@analog:/sys/bus/iio/devices/iio:device0# ls -l total 0 -r--r--r-- 1 root root 4096 sep 4 14:05 dev -rw-r--r-- 1 root root 4096 sep 4 14:05 muxout_enable -rw-r--r-- 1 root root 4096 sep 4 14:05 muxout_mode -r--r--r-- 1 root root 4096 sep 4 14:05 name lrwxrwxrwx 1 root root 0 sep 4 14:05 of_node -> ../../../../../../../../firmware/devicetree/base/soc/spi@7e204000/adf4371@0 -rw-r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage0_frequency -rw-r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage0_name -rw-r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage0_powerdown -rw-r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage1_frequency -rw-r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage1_name -rw-r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage1_powerdown -rw-r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage2_frequency -rw-r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage2_name -rw-r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage2_powerdown -rw-r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage3_frequency -rw-r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage3_name -rw-r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage3_powerdown -r--r--r-- 1 root root 4096 sep 4 14:05 out_altvoltage_muxout_mode_available drwxr-xr-x 2 root root 0 sep 4 14:05 power lrwxrwxrwx 1 root root 0 sep 2 17:46 subsystem -> ../../../../../../../../bus/iio -rw-r--r-- 1 root root 4096 sep 2 17:46 uevent root@analog:/sys/bus/iio/devices/iio:device0#
This specifies any shell prompt running on the target
root@analog:/sys/bus/iio/devices/iio:device0# cat name adf4371
This specifies any shell prompt running on the target
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_frequency 8000000000
This specifies any shell prompt running on the target
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_name RF8x