Wiki

This version is outdated by a newer approved version.DiffThis version (31 Mar 2022 15:09) was approved by Antoniu Miclaus.

This is an old revision of the document!


ADMV8818 2GHz to 18GHz, Digitally Tunable High-Pass and Low-PASS Filter Linux Driver

Supported Devices

Supported Boards

This driver supports the

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

Files

Function File
driver drivers/iio/filter/admv8818.c
Documentation adi,admv8818.yaml
ABI documentation sysfs-bus-iio-filter-admv8818

Example device tree

Function File
dts rpi-admv8818-overlay.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”)

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.

02 Mar 2011 15:16

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
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

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device0# cat name
admv8818

Read channel bandwidth frequency

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_filter_band_pass_bandwidth_3db_frequency
750

Set channel bandwidth frequency

This specifies any shell prompt running on the target

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

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_filter_band_pass_center_frequency
5055

Set channel center frequency

This specifies any shell prompt running on the target

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

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_filter_low_pass_3db_frequency
5430

Set channel low pass 3db frequency

This specifies any shell prompt running on the target

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

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_filter_high_pass_3db_frequency
4680

Set channel high pass 3db frequency

This specifies any shell prompt running on the target

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

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_scale
1000000

Set channel scale

This specifies any shell prompt running on the target

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:

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device0# cat out_altvoltage0_mode_available
auto maunual 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

More Information

resources/tools-software/linux-drivers/iio-filter/admv8818.1648732139.txt.gz · Last modified: 31 Mar 2022 15:08 by Antoniu Miclaus