ADMV8818
ADMV8818 2GHz to 18GHz, Digitally Tunable High-Pass and Low-PASS Filter Linux Driver.
Supported Devices
Supported Boards
Description
The ADMV8818-EP is a fully monolithic microwave integrated circuit (MMIC) that features a digitally selectable frequency of operation. The device features four independently controlled high-pass filters (HPFs) and four independently controlled low-pass filters (LPFs) that span the 2 GHz to 18 GHz frequency range.
The flexible architecture of the ADMV8818-EP allows the 3 dB cutoff frequency (f3dB) of the high-pass and low-pass filters to be controlled independently to generate up to 4 GHz of bandwidth. The digital logic control on each filter is 4 bits wide (16 states) and controls the on-chip reactive elements to adjust the f3dB. The typical insertion loss is 9 dB, and the wideband rejection is 35 dB, which is ideally suited for minimizing system harmonics.
This tunable filter can be used as a smaller alternative to large switched filter banks and cavity tuned filters, and this device provides a dynamically adjustable solution in advanced communications applications.
Source Code
Status
Source |
Mainlined? |
||
|---|---|---|---|
Files
Function |
File |
|
|---|---|---|
driver |
||
Documentation |
||
ABI documentation |
Example device tree
Function |
File |
|
|---|---|---|
dts |
Example platform device initialization
The ADF4371 driver is a SPI bus driver and can be instantiated via device tree.
Required properties:
compatible: Should always be one of these:
adi,admv8818
reg: SPI chip select number.
clocks: a list of phandle, one for each entry in clock-names.
clock-names: Must include the following entry:
rf_in
Optional properties:
clock-scales: The Common Clock Framework max rate is limited by MAX of unsigned long. For ADF4371/ADF4372 devices this is a deficiency. If specified, this property allows arbitrary scales. The first element in the array should be the multiplier and the second element should be the divider.
adi,bw-hz:: Allows the user to increase the Bandpass Filter (BPF) bandwidth in Hz. Normally when invoked by the clk notifier, the driver sets the HPF cutoff close below the frequency and the LPF cutoff close above the frequency, and thus creating a BPF.
Example:
spi {
#address-cells = <1>;
#size-cells = <0>;
admv8818@0 {
compatible = "adi,admv8818";
reg = <0>;
spi-max-frequency = <10000000>;
clocks = <&admv8818_rfin>;
clock-scales = <1 5>;
clock-names = "rf_in";
adi,bw-hz = /bits/ 64 <600000000>;
};
};
Enabling Linux driver support
Configure kernel with make menuconfig (alternatively use make xconfig or
make qconfig)
Note
The ADMV8818 driver depends on SPI and selects REGMAP_SPI
Adding Linux driver support
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
Filters --->
<*> Analog Devices ADMV8818 High-Pass and Low-Pass Filter
Hardware configuration
Driver testing
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.
analog:/sys/bus/iio/devices/iio:device0# cd /sys/bus/iio/devices/
root@analog:/sys/bus/iio/devices# ls
iio:device0
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 Mar 24 08:38 dev
-r--r--r-- 1 root root 4096 Mar 24 08:38 name
lrwxrwxrwx 1 root root 0 Mar 24 08:38 of_node -> ../../../../../../../../firmware/devicetree/base/soc/spi@7e204000/admv8818@0
-rw-r--r-- 1 root root 4096 Mar 24 08:38 out_altvoltage0_filter_band_pass_bandwidth_3db_frequency
-rw-r--r-- 1 root root 4096 Mar 24 08:38 out_altvoltage0_filter_band_pass_center_frequency
-rw-r--r-- 1 root root 4096 Mar 24 08:38 out_altvoltage0_filter_high_pass_3db_frequency
-rw-r--r-- 1 root root 4096 Mar 24 08:38 out_altvoltage0_filter_low_pass_3db_frequency
-rw-r--r-- 1 root root 4096 Mar 24 08:38 out_altvoltage0_mode
-r--r--r-- 1 root root 4096 Mar 24 08:38 out_altvoltage0_mode_available
-rw-r--r-- 1 root root 4096 Mar 24 08:38 out_altvoltage0_scale
drwxr-xr-x 2 root root 0 Mar 24 08:38 power
lrwxrwxrwx 1 root root 0 Mar 24 08:38 subsystem -> ../../../../../../../../bus/iio
-rw-r--r-- 1 root root 4096 Mar 24 08:38 uevent
root@analog:/sys/bus/iio/devices/iio:device0#
Show device name
root@analog:/sys/bus/iio/devices/iio:device0# cat name
admv8818
Read channel bandwidth frequency
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_filter_band_pass_bandwidth_3db_frequency
750
Set channel bandwidth frequency
root@analog:/sys/bus/iio/devices/iio:device0# echo 500 > out_altvoltage0_filter_band_pass_bandwidth_3db_frequency
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_filter_band_pass_bandwidth_3db_frequency
734
Read channel center frequency
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_filter_band_pass_center_frequency
5055
Set channel center frequency
root@analog:/sys/bus/iio/devices/iio:device0# echo 4000 > out_altvoltage0_filter_band_pass_bandwidth_3db_frequency
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_filter_band_pass_center_frequency
4023
Read low pass 3db frequency
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_filter_low_pass_3db_frequency
5430
Set channel low pass 3db frequency
root@analog:/sys/bus/iio/devices/iio:device0# echo 8000 > out_altvoltage0_filter_low_pass_3db_frequency
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_filter_low_pass_3db_frequency
8200
Read high pass 3db frequency
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_filter_high_pass_3db_frequency
4680
Set channel high pass 3db frequency
root@analog:/sys/bus/iio/devices/iio:device0# echo 6000 > out_altvoltage0_filter_high_pass_3db_frequency
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_filter_high_pass_3db_frequency
5960
Read scale
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_scale
1000000
Set channel scale
root@analog:/sys/bus/iio/devices/iio:device0# echo 10000000 > out_altvoltage0_scale
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_scale
10000000
Filter mode
The mode allows the user to access enable/disable/register/unregister the clock rate notifier. Valid values that can be written:
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_mode_available
auto manual bypass
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_mode
auto
root@analog:/sys/bus/iio/devices/iio:device0# echo bypass > out_altvoltage0_mode
root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_mode
bypass