diff --git a/arch/arm64/boot/dts/xilinx/zynqmp-zcu102-rev10-adrv9025-nls.dts b/arch/arm64/boot/dts/xilinx/zynqmp-zcu102-rev10-adrv9025-nls.dts new file mode 100644 index 00000000000000..cbdd8e34f5e43c --- /dev/null +++ b/arch/arm64/boot/dts/xilinx/zynqmp-zcu102-rev10-adrv9025-nls.dts @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Analog Devices ADRV9025 + * https://wiki.analog.com/resources/eval/user-guides/adrv9025 + * https://wiki.analog.com/resources/tools-software/linux-drivers/iio-transceiver/adrv9025 + * + * hdl_project: + * board_revision: <> + * + * Copyright (C) 2020-2025 Analog Devices Inc. + */ +#include "zynqmp-zcu102-rev10-adrv9025.dts" + +&trx0_adrv9025 { + + clock-output-names = "rx_sampl_clk", "tx_sampl_clk", "rx_os_sampl_clk"; + + adi,device-profile-name = "ActiveUseCase_NLS.profile"; + + jesd204-device; + #jesd204-cells = <2>; + jesd204-top-device = <0>; /* This is the TOP device */ + jesd204-link-ids = ; + + jesd204-inputs = + <&axi_adrv9025_rx_jesd 0 FRAMER0_LINK_RX>, + <&axi_adrv9025_rx_os_jesd 0 FRAMER1_LINK_RX>, + <&axi_adrv9025_core_tx 0 DEFRAMER0_LINK_TX>; +}; + +&fpga_axi { + rx_os_dma: dma@9c800000 { + compatible = "adi,axi-dmac-1.00.a"; + reg = <0x9c800000 0x10000>; + #dma-cells = <1>; + #clock-cells = <0>; + dma-coherent; + interrupts = <0 111 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&zynqmp_clk 73>; + }; + + axi_rx_os_clkgen: axi-clkgen@83c20000 { + compatible = "adi,axi-clkgen-2.00.a"; + reg = <0x83c20000 0x10000>; + #clock-cells = <0>; + clocks = <&clk0_ad9528 3>, <&zynqmp_clk 71>; + clock-names = "clkin1", "s_axi_aclk"; + clock-output-names = "axi_rx_os_clkgen"; + }; + + axi_adrv9025_core_rx_os: axi-adrv9025-rx-os-hpc@84a08000 { + compatible = "adi,axi-adrv9025-obs-1.0"; + reg = <0x84a08000 0x8000>; + dmas = <&rx_os_dma 0>; + dma-names = "rx"; + clocks = <&trx0_adrv9025 2>; + clock-names = "sampl_clk"; + spibus-connected=<&trx0_adrv9025>; + label="axi-adrv9025-rx-os-hpc"; + }; + + axi_adrv9025_rx_os_jesd: axi-jesd204-rx-os@85aa0000 { + compatible = "adi,axi-jesd204-rx-1.0"; + reg = <0x85aa0000 0x1000>; + + interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>; + + clocks = <&zynqmp_clk 71>, <&axi_rx_os_clkgen>, <&axi_adrv9025_adxcvr_rx_os 0>; + clock-names = "s_axi_aclk", "device_clk", "lane_clk"; + + #clock-cells = <0>; + clock-output-names = "jesd_rx_os_lane_clk"; + + adi,octets-per-frame = <4>; + adi,frames-per-multiframe = <32>; + + jesd204-device; + #jesd204-cells = <2>; + jesd204-inputs = <&axi_adrv9025_adxcvr_rx_os 0 FRAMER1_LINK_RX>; + }; + + axi_adrv9025_adxcvr_rx_os: axi-adxcvr-rx-os@85a60000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "adi,axi-adxcvr-1.0"; + reg = <0x85a60000 0x1000>; + + clocks = <&clk0_ad9528 13>; + clock-names = "conv"; + + #clock-cells = <1>; + clock-output-names = "rx_os_gt_clk", "rx_os_out_clk"; + + adi,sys-clk-select = ; + adi,out-clk-select = ; + adi,use-lpm-enable; + adi,use-cpll-enable; + + jesd204-device; + #jesd204-cells = <2>; + jesd204-inputs = <&clk0_ad9528 0 FRAMER1_LINK_RX>; + }; +}; diff --git a/arch/arm64/boot/dts/xilinx/zynqmp-zcu102-rev10-adrv9025.dts b/arch/arm64/boot/dts/xilinx/zynqmp-zcu102-rev10-adrv9025.dts index 13e8047f106b30..ec8b5a8281bc3b 100644 --- a/arch/arm64/boot/dts/xilinx/zynqmp-zcu102-rev10-adrv9025.dts +++ b/arch/arm64/boot/dts/xilinx/zynqmp-zcu102-rev10-adrv9025.dts @@ -272,6 +272,24 @@ clocks = <&zynqmp_clk 73>; }; + axi_rx_clkgen: axi-clkgen@83c10000 { + compatible = "adi,axi-clkgen-2.00.a"; + reg = <0x83c10000 0x10000>; + #clock-cells = <0>; + clocks = <&clk0_ad9528 3>, <&zynqmp_clk 71>; + clock-names = "clkin1", "s_axi_aclk"; + clock-output-names = "axi_rx_clkgen"; + }; + + axi_tx_clkgen: axi-clkgen@83c00000 { + compatible = "adi,axi-clkgen-2.00.a"; + reg = <0x83c00000 0x10000>; + #clock-cells = <0>; + clocks = <&clk0_ad9528 3>, <&zynqmp_clk 71>; + clock-names = "clkin1", "s_axi_aclk"; + clock-output-names = "axi_tx_clkgen"; + }; + axi_adrv9025_core_rx: axi-adrv9025-rx-hpc@84a00000 { compatible = "adi,axi-adc-10.0.a"; reg = <0x84a00000 0x8000>; @@ -300,7 +318,7 @@ interrupts = <0 107 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&zynqmp_clk 71>, <&clk0_ad9528 3>, <&axi_adrv9025_adxcvr_rx 0>; + clocks = <&zynqmp_clk 71>, <&axi_rx_clkgen>, <&axi_adrv9025_adxcvr_rx 0>; clock-names = "s_axi_aclk", "device_clk", "lane_clk"; #clock-cells = <0>; @@ -320,7 +338,7 @@ interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&zynqmp_clk 71>, <&clk0_ad9528 3>, <&axi_adrv9025_adxcvr_tx 0>; + clocks = <&zynqmp_clk 71>, <&axi_tx_clkgen>, <&axi_adrv9025_adxcvr_tx 0>; clock-names = "s_axi_aclk", "device_clk", "lane_clk"; #clock-cells = <0>; @@ -352,7 +370,6 @@ jesd204-device; #jesd204-cells = <2>; jesd204-inputs = <&clk0_ad9528 0 FRAMER0_LINK_RX>; - }; axi_adrv9025_adxcvr_tx: axi-adxcvr-tx@84a80000 { @@ -383,8 +400,6 @@ }; }; - - // ad9528_reset_b, // 68 // ad9528_sysref_req, // 67 // adrv9025_tx1_enable, // 66 diff --git a/arch/arm64/configs/adi_zynqmp_defconfig b/arch/arm64/configs/adi_zynqmp_defconfig index 49ab871a68f749..719336815579b0 100644 --- a/arch/arm64/configs/adi_zynqmp_defconfig +++ b/arch/arm64/configs/adi_zynqmp_defconfig @@ -111,7 +111,7 @@ CONFIG_PCI=y CONFIG_PCIE_XILINX_NWL=y CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y -CONFIG_EXTRA_FIRMWARE="ad9144_fmc_ebz_ad9516.stp Mykonos_M3.bin TaliseStream.bin TaliseTDDArmFirmware.bin TaliseTxArmFirmware.bin TaliseRxArmFirmware.bin adau1761.bin Navassa_EvaluationFw.bin RxGainTable.csv RxGainTable_GainCompensated.csv ORxGainTable.csv TxAttenTable.csv Navassa_Stream.bin Navassa_CMOS_profile.json Navassa_LVDS_profile.json Navassa_CMOS_profile_adrv9003.json Navassa_LVDS_profile_adrv9003.json Navassa_LVDS_init_cals.bin Navassa_CMOS_init_cals.bin Navassa_CMOS_init_cals_adrv9003.bin Navassa_LVDS_init_cals_adrv9003.bin Navassa_CMOS_profile_adrv9004.json Navassa_LVDS_profile_adrv9004.json Navassa_CMOS_profile_adrv9005.json Navassa_LVDS_profile_adrv9005.json Navassa_CMOS_profile_adrv9006.json Navassa_LVDS_profile_adrv9006.json ADRV9025_DPDCORE_FW.bin ADRV9025_FW.bin ADRV9025_RxGainTable.csv ADRV9025_TxAttenTable.csv stream_image_6E3E00EFB74FE7D465FA88A171B81B8F.bin ActiveUseCase.profile ActiveUtilInit.profile" +CONFIG_EXTRA_FIRMWARE="ad9144_fmc_ebz_ad9516.stp Mykonos_M3.bin TaliseStream.bin TaliseTDDArmFirmware.bin TaliseTxArmFirmware.bin TaliseRxArmFirmware.bin adau1761.bin Navassa_EvaluationFw.bin RxGainTable.csv RxGainTable_GainCompensated.csv ORxGainTable.csv TxAttenTable.csv Navassa_Stream.bin Navassa_CMOS_profile.json Navassa_LVDS_profile.json Navassa_CMOS_profile_adrv9003.json Navassa_LVDS_profile_adrv9003.json Navassa_LVDS_init_cals.bin Navassa_CMOS_init_cals.bin Navassa_CMOS_init_cals_adrv9003.bin Navassa_LVDS_init_cals_adrv9003.bin Navassa_CMOS_profile_adrv9004.json Navassa_LVDS_profile_adrv9004.json Navassa_CMOS_profile_adrv9005.json Navassa_LVDS_profile_adrv9005.json Navassa_CMOS_profile_adrv9006.json Navassa_LVDS_profile_adrv9006.json ADRV9025_DPDCORE_FW.bin ADRV9025_FW.bin ADRV9025_RxGainTable.csv ADRV9025_TxAttenTable.csv stream_image_6E3E00EFB74FE7D465FA88A171B81B8F.bin ActiveUseCase.profile ActiveUtilInit.profile ActiveUseCase_NLS.profile" CONFIG_EXTRA_FIRMWARE_DIR="./firmware" CONFIG_CONNECTOR=y CONFIG_MTD=y diff --git a/arch/microblaze/boot/dts/vcu118_adrv9025.dts b/arch/microblaze/boot/dts/vcu118_adrv9025.dts index d4b3af894b104e..5ce440d441d8ba 100644 --- a/arch/microblaze/boot/dts/vcu118_adrv9025.dts +++ b/arch/microblaze/boot/dts/vcu118_adrv9025.dts @@ -40,7 +40,7 @@ #dma-cells = <1>; #clock-cells = <0>; interrupt-parent = <&axi_intc>; - interrupts = <12 2>; + interrupts = <13 2>; clocks = <&clk_bus_0>; }; @@ -50,10 +50,28 @@ #dma-cells = <1>; #clock-cells = <0>; interrupt-parent = <&axi_intc>; - interrupts = <13 2>; + interrupts = <12 2>; clocks = <&clk_bus_0>; }; + axi_rx_clkgen: axi-clkgen@43c10000 { + compatible = "adi,axi-clkgen-2.00.a"; + reg = <0x43c10000 0x10000>; + #clock-cells = <0>; + clocks = <&clk0_ad9528 3>, <&clk_bus_0>; + clock-names = "clkin1", "s_axi_aclk"; + clock-output-names = "axi_rx_clkgen"; + }; + + axi_tx_clkgen: axi-clkgen@43c00000 { + compatible = "adi,axi-clkgen-2.00.a"; + reg = <0x43c00000 0x10000>; + #clock-cells = <0>; + clocks = <&clk0_ad9528 3>, <&clk_bus_0>; + clock-names = "clkin1", "s_axi_aclk"; + clock-output-names = "axi_tx_clkgen"; + }; + axi_adrv9025_core_rx: axi-adrv9025-rx-hpc@44a00000 { compatible = "adi,axi-adc-10.0.a"; reg = <0x44a00000 0x8000>; @@ -83,9 +101,9 @@ reg = <0x44aa0000 0x1000>; interrupt-parent = <&axi_intc>; - interrupts = <14 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <8 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&clk_bus_0>, <&clk0_ad9528 3>, <&axi_adrv9025_adxcvr_rx 0>; + clocks = <&clk_bus_0>, <&axi_rx_clkgen>, <&axi_adrv9025_adxcvr_rx 0>; clock-names = "s_axi_aclk", "device_clk", "lane_clk"; #clock-cells = <0>; @@ -101,8 +119,8 @@ reg = <0x44a90000 0x1000>; interrupt-parent = <&axi_intc>; - interrupts = <15 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&clk_bus_0>, <&clk0_ad9528 3>, <&axi_adrv9025_adxcvr_tx 0>; + interrupts = <7 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk_bus_0>, <&axi_tx_clkgen>, <&axi_adrv9025_adxcvr_tx 0>; clock-names = "s_axi_aclk", "device_clk", "lane_clk"; #clock-cells = <0>; @@ -133,6 +151,7 @@ #jesd204-cells = <2>; jesd204-inputs = <&clk0_ad9528 0 FRAMER0_LINK_RX>; }; + axi_adrv9025_adxcvr_tx: axi-adxcvr-tx@44a80000 { #address-cells = <1>; #size-cells = <0>; diff --git a/arch/microblaze/boot/dts/vcu118_adrv9025_nls.dts b/arch/microblaze/boot/dts/vcu118_adrv9025_nls.dts new file mode 100644 index 00000000000000..4d2279d36fb7ec --- /dev/null +++ b/arch/microblaze/boot/dts/vcu118_adrv9025_nls.dts @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Analog Devices ADRV9025 + * https://wiki.analog.com/resources/eval/user-guides/adrv9025 + * https://wiki.analog.com/resources/tools-software/linux-drivers/iio-transceiver/adrv9025 + * + * hdl_project: + * board_revision: <> + * + * Copyright (C) 2020-2025 Analog Devices Inc. + */ +#include "vcu118_adrv9025.dts" + +&trx0_adrv9025 { + + clock-output-names = "rx_sampl_clk", "tx_sampl_clk", "rx_os_sampl_clk"; + + jesd204-device; + #jesd204-cells = <2>; + jesd204-top-device = <0>; /* This is the TOP device */ + jesd204-link-ids = ; + + jesd204-inputs = + <&axi_adrv9025_rx_jesd 0 FRAMER0_LINK_RX>, + <&axi_adrv9025_rx_os_jesd 0 FRAMER1_LINK_RX>, + <&axi_adrv9025_core_tx 0 DEFRAMER0_LINK_TX>; +}; + +&amba_pl { + rx_os_dma: dma@7c800000 { + compatible = "adi,axi-dmac-1.00.a"; + reg = <0x7c800000 0x10000>; + #dma-cells = <1>; + #clock-cells = <0>; + interrupt-parent = <&axi_intc>; + interrupts = <14 2>; + clocks = <&clk_bus_0>; + }; + + axi_rx_os_clkgen: axi-clkgen@43c20000 { + compatible = "adi,axi-clkgen-2.00.a"; + reg = <0x43c20000 0x10000>; + #clock-cells = <0>; + clocks = <&clk0_ad9528 3>, <&clk_bus_0>; + clock-names = "clkin1", "s_axi_aclk"; + clock-output-names = "axi_rx_os_clkgen"; + }; + + axi_adrv9025_core_rx_os: axi-adrv9025-rx-os-hpc@44a08000 { + compatible = "adi,axi-adrv9025-obs-1.0"; + reg = <0x44a08000 0x8000>; + dmas = <&rx_os_dma 0>; + dma-names = "rx"; + clocks = <&trx0_adrv9025 2>; + clock-names = "sampl_clk"; + spibus-connected=<&trx0_adrv9025>; + label="axi-adrv9025-rx-os-hpc"; + }; + + axi_adrv9025_rx_os_jesd: axi-jesd204-rx-os@45aa0000 { + compatible = "adi,axi-jesd204-rx-1.0"; + reg = <0x45aa0000 0x1000>; + + interrupt-parent = <&axi_intc>; + interrupts = <15 IRQ_TYPE_LEVEL_HIGH>; + + clocks = <&clk_bus_0>, <&axi_rx_os_clkgen>, <&axi_adrv9025_adxcvr_rx_os 0>; + clock-names = "s_axi_aclk", "device_clk", "lane_clk"; + + #clock-cells = <0>; + clock-output-names = "jesd_rx_os_lane_clk"; + + adi,octets-per-frame = <4>; + adi,frames-per-multiframe = <32>; + + jesd204-device; + #jesd204-cells = <2>; + jesd204-inputs = <&axi_adrv9025_adxcvr_rx_os 0 FRAMER1_LINK_RX>; + }; + + axi_adrv9025_adxcvr_rx_os: axi-adxcvr-rx-os@45a60000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "adi,axi-adxcvr-1.0"; + reg = <0x45a60000 0x1000>; + + clocks = <&clk0_ad9528 13>; + clock-names = "conv"; + + #clock-cells = <1>; + clock-output-names = "rx_os_gt_clk", "rx_os_out_clk"; + + adi,sys-clk-select = ; + adi,out-clk-select = ; + adi,use-lpm-enable; + adi,use-cpll-enable; + + jesd204-device; + #jesd204-cells = <2>; + jesd204-inputs = <&clk0_ad9528 0 FRAMER1_LINK_RX>; + }; +}; diff --git a/arch/microblaze/configs/adi_mb_defconfig b/arch/microblaze/configs/adi_mb_defconfig index da698a6f7e26d4..1cff86fe5a1f1e 100644 --- a/arch/microblaze/configs/adi_mb_defconfig +++ b/arch/microblaze/configs/adi_mb_defconfig @@ -74,7 +74,7 @@ CONFIG_NET_DSA=y CONFIG_PCI=y CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y -CONFIG_EXTRA_FIRMWARE="ad9467_intbypass_ad9517.stp ad9517.stp Mykonos_M3.bin TaliseStream.bin TaliseTDDArmFirmware.bin TaliseTxArmFirmware.bin TaliseRxArmFirmware.bin ADRV9025_DPDCORE_FW.bin ADRV9025_FW.bin ADRV9025_RxGainTable.csv ADRV9025_TxAttenTable.csv stream_image_6E3E00EFB74FE7D465FA88A171B81B8F.bin ActiveUseCase.profile ActiveUtilInit.profile" +CONFIG_EXTRA_FIRMWARE="ad9467_intbypass_ad9517.stp ad9517.stp Mykonos_M3.bin TaliseStream.bin TaliseTDDArmFirmware.bin TaliseTxArmFirmware.bin TaliseRxArmFirmware.bin ADRV9025_DPDCORE_FW.bin ADRV9025_FW.bin ADRV9025_RxGainTable.csv ADRV9025_TxAttenTable.csv stream_image_6E3E00EFB74FE7D465FA88A171B81B8F.bin ActiveUseCase.profile ActiveUtilInit.profile ActiveUseCase_NLS.profile" CONFIG_EXTRA_FIRMWARE_DIR="./firmware" CONFIG_MTD=y CONFIG_MTD_CMDLINE_PARTS=y diff --git a/drivers/iio/adc/ad_adc.c b/drivers/iio/adc/ad_adc.c index c9642533694452..a2b03e7b091766 100644 --- a/drivers/iio/adc/ad_adc.c +++ b/drivers/iio/adc/ad_adc.c @@ -627,6 +627,8 @@ static const struct of_device_id adc_of_match[] = { .data = &obs_rx_chip_info }, { .compatible = "adi,axi-adrv9009-obs-single-1.0", .data = &obs_rx_chip_info }, + { .compatible = "adi,axi-adrv9025-obs-1.0", + .data = &obs_rx_chip_info }, { .compatible = "adi,axi-adrv9002-rx2-1.0", .data = &adrv9002_rx_chip_info }, { .compatible = "adi,axi-adrv9003-rx2-1.0", diff --git a/drivers/iio/adc/adrv902x/adrv9025.c b/drivers/iio/adc/adrv902x/adrv9025.c index 571e83513f29cb..745e0e8656043a 100644 --- a/drivers/iio/adc/adrv902x/adrv9025.c +++ b/drivers/iio/adc/adrv902x/adrv9025.c @@ -967,6 +967,80 @@ static ssize_t adrv9025_phy_tx_write(struct iio_dev *indio_dev, return ret ? ret : len; } +static const char * const adrv9025_obs1_rx_port[] = { + "OFF", "ORX1_ON_ORX2_OFF", "ORX1_OFF_ORX2_ON", +}; + +static const char * const adrv9025_obs2_rx_port[] = { + "OFF", "ORX3_ON_ORX4_OFF", "ORX3_OFF_ORX4_ON", +}; + +static const u8 ad9371_obs_rx_port_lut[] = { + 0x00, BIT(4), BIT(5) +}; + +static int adrv9025_set_obs_rx_path(struct iio_dev *indio_dev, + const struct iio_chan_spec *chan, u32 mode) +{ + struct adrv9025_rf_phy *phy = iio_priv(indio_dev); + u32 rxchan = 0, txchan = 0; + u32 mask = 0xFFFFFFCF; + u32 val = 0; + int ret; + + ret = adi_adrv9025_RxTxEnableGet(phy->madDevice, &rxchan, + &txchan); + if (ret) + return adrv9025_dev_err(phy); + + val = ad9371_obs_rx_port_lut[mode]; + if (chan->channel > CHAN_OBS_RX1) { + mask = mask << 2 | 0xF; + val <<= 2; + } + + rxchan = (rxchan & mask) | val; + + ret = adi_adrv9025_RxTxEnableSet(phy->madDevice, rxchan, txchan); + if (ret) + return adrv9025_dev_err(phy); + + return ret; +} + +static int adrv9025_get_obs_rx_path(struct iio_dev *indio_dev, + const struct iio_chan_spec *chan) +{ + struct adrv9025_rf_phy *phy = iio_priv(indio_dev); + u32 rxchan = 0, txchan = 0; + int shift_right = CHAN_OBS_RX1; + int ret; + + ret = adi_adrv9025_RxTxEnableGet(phy->madDevice, &rxchan, + &txchan); + if (ret) + return adrv9025_dev_err(phy); + + if (chan->channel > CHAN_OBS_RX1) + shift_right = CHAN_OBS_RX3; + + return rxchan >> shift_right & 0x3; +} + +static const struct iio_enum adrv9025_rf_obs1_rx_port_available = { + .items = adrv9025_obs1_rx_port, + .num_items = ARRAY_SIZE(adrv9025_obs1_rx_port), + .get = adrv9025_get_obs_rx_path, + .set = adrv9025_set_obs_rx_path, +}; + +static const struct iio_enum adrv9025_rf_obs2_rx_port_available = { + .items = adrv9025_obs2_rx_port, + .num_items = ARRAY_SIZE(adrv9025_obs2_rx_port), + .get = adrv9025_get_obs_rx_path, + .set = adrv9025_set_obs_rx_path, +}; + #define _ADRV9025_EXT_TX_INFO(_name, _ident) \ { \ .name = _name, .read = adrv9025_phy_tx_read, \ @@ -990,7 +1064,7 @@ static const struct iio_chan_spec_ext_info adrv9025_phy_rx_ext_info[] = { {}, }; -static const struct iio_chan_spec_ext_info adrv9025_phy_obs_rx_ext_info[] = { +static const struct iio_chan_spec_ext_info adrv9025_phy_obs1_rx_ext_info[] = { /* Ideally we use IIO_CHAN_INFO_FREQUENCY, but there are * values > 2^32 in order to support the entire frequency range * in Hz. Using scale is a bit ugly. @@ -998,6 +1072,21 @@ static const struct iio_chan_spec_ext_info adrv9025_phy_obs_rx_ext_info[] = { _ADRV9025_EXT_RX_INFO("quadrature_tracking_en", RX_QEC), _ADRV9025_EXT_RX_INFO("rf_bandwidth", RX_RF_BANDWIDTH), _ADRV9025_EXT_RX_INFO("bb_dc_offset_tracking_en", RX_DIG_DC), + IIO_ENUM_AVAILABLE("rf_port_select", IIO_SEPARATE, &adrv9025_rf_obs1_rx_port_available), + IIO_ENUM("rf_port_select", IIO_SEPARATE, &adrv9025_rf_obs1_rx_port_available), + {}, +}; + +static const struct iio_chan_spec_ext_info adrv9025_phy_obs2_rx_ext_info[] = { + /* Ideally we use IIO_CHAN_INFO_FREQUENCY, but there are + * values > 2^32 in order to support the entire frequency range + * in Hz. Using scale is a bit ugly. + */ + _ADRV9025_EXT_RX_INFO("quadrature_tracking_en", RX_QEC), + _ADRV9025_EXT_RX_INFO("rf_bandwidth", RX_RF_BANDWIDTH), + _ADRV9025_EXT_RX_INFO("bb_dc_offset_tracking_en", RX_DIG_DC), + IIO_ENUM_AVAILABLE("rf_port_select", IIO_SEPARATE, &adrv9025_rf_obs2_rx_port_available), + IIO_ENUM("rf_port_select", IIO_SEPARATE, &adrv9025_rf_obs2_rx_port_available), {}, }; @@ -1039,6 +1128,7 @@ static int adrv9025_phy_read_raw(struct iio_dev *indio_dev, { struct adrv9025_rf_phy *phy = iio_priv(indio_dev); u32 rxchan = 0, txchan = 0; + int chan_no; u16 temp; int ret; @@ -1056,7 +1146,15 @@ static int adrv9025_phy_read_raw(struct iio_dev *indio_dev, if (chan->output) *val = !!(txchan & (ADI_ADRV9025_TX1 << chan->channel)); else - *val = !!(rxchan & (ADI_ADRV9025_RX1 << chan->channel)); + if (chan->channel >= CHAN_OBS_RX1) { + chan_no = chan->channel; + if (chan_no == CHAN_OBS_RX2) + chan_no += 1; + *val = !!(rxchan & (ADI_ADRV9025_RX1 << chan_no) || + rxchan & (ADI_ADRV9025_RX1 << (chan_no + 1))); + } else { + *val = !!(rxchan & (ADI_ADRV9025_RX1 << chan->channel)); + } ret = IIO_VAL_INT; break; @@ -1096,7 +1194,18 @@ static int adrv9025_phy_read_raw(struct iio_dev *indio_dev, if (chan->output) *val = clk_get_rate(phy->clks[TX_SAMPL_CLK]); else - *val = clk_get_rate(phy->clks[RX_SAMPL_CLK]); + switch (chan->channel) { + case CHAN_RX1: + case CHAN_RX2: + case CHAN_RX3: + case CHAN_RX4: + *val = clk_get_rate(phy->clks[RX_SAMPL_CLK]); + break; + case CHAN_OBS_RX1: + case CHAN_OBS_RX2: + *val = clk_get_rate(phy->clks[OBS_SAMPL_CLK]); + break; + } ret = IIO_VAL_INT; break; @@ -1120,6 +1229,7 @@ static int adrv9025_phy_write_raw(struct iio_dev *indio_dev, { struct adrv9025_rf_phy *phy = iio_priv(indio_dev); u32 rxchan = 0, txchan = 0; + int chan_no; u32 code; int ret = 0; @@ -1140,10 +1250,19 @@ static int adrv9025_phy_write_raw(struct iio_dev *indio_dev, else txchan &= ~(ADI_ADRV9025_TX1 << chan->channel); } else { - if (val) - rxchan |= (ADI_ADRV9025_RX1 << chan->channel); - else - rxchan &= ~(ADI_ADRV9025_RX1 << chan->channel); + chan_no = chan->channel; + if (chan_no == CHAN_OBS_RX2) + chan_no += 1; + if (val) { + rxchan |= (ADI_ADRV9025_RX1 << chan_no); + } else { + if (chan_no < CHAN_OBS_RX1) { + rxchan &= ~(ADI_ADRV9025_RX1 << chan_no); + } else { + rxchan &= ~(ADI_ADRV9025_RX1 << chan_no); + rxchan &= ~(ADI_ADRV9025_RX1 << (chan_no + 1)); + } + } } ret = adi_adrv9025_RxTxEnableSet(phy->madDevice, rxchan, txchan); @@ -1318,7 +1437,7 @@ static const struct iio_chan_spec adrv9025_phy_chan[] = { .info_mask_separate = BIT(IIO_CHAN_INFO_HARDWAREGAIN) | BIT(IIO_CHAN_INFO_ENABLE), .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ), - .ext_info = adrv9025_phy_obs_rx_ext_info, + .ext_info = adrv9025_phy_obs1_rx_ext_info, }, { /* RX Sniffer/Observation */ @@ -1328,7 +1447,7 @@ static const struct iio_chan_spec adrv9025_phy_chan[] = { .info_mask_separate = BIT(IIO_CHAN_INFO_HARDWAREGAIN) | BIT(IIO_CHAN_INFO_ENABLE), .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ), - .ext_info = adrv9025_phy_obs_rx_ext_info, + .ext_info = adrv9025_phy_obs2_rx_ext_info, }, { .type = IIO_TEMP, @@ -1704,6 +1823,7 @@ static int adrv9025_clk_register(struct adrv9025_rf_phy *phy, const char *name, p_name[2][ADRV9025_MAX_CLK_NAME + 1]; const char *_parent_name[2]; u32 rate; + int ret; /* struct adrv9025_clock assignments */ clk_priv->source = source; @@ -1724,14 +1844,29 @@ static int adrv9025_clk_register(struct adrv9025_rf_phy *phy, const char *name, switch (source) { case RX_SAMPL_CLK: + ret = adrv9025_RxLinkSamplingRateFind(phy->madDevice, &phy->deviceInitStruct, + ADI_ADRV9025_FRAMER_0, + &rate); + if (ret) + return adrv9025_dev_err(phy); + init.ops = &bb_clk_ops; + clk_priv->rate = rate; + break; + case OBS_SAMPL_CLK: + ret = adrv9025_RxLinkSamplingRateFind(phy->madDevice, &phy->deviceInitStruct, + ADI_ADRV9025_FRAMER_1, + &rate); + if (ret) + return adrv9025_dev_err(phy); init.ops = &bb_clk_ops; - clk_priv->rate = phy->rx_iqRate_kHz; + clk_priv->rate = rate; break; case TX_SAMPL_CLK: - adrv9025_TxLinkSamplingRateFind(phy->madDevice, &phy->deviceInitStruct, - ADI_ADRV9025_DEFRAMER_0, - &rate); - + ret = adrv9025_TxLinkSamplingRateFind(phy->madDevice, &phy->deviceInitStruct, + ADI_ADRV9025_DEFRAMER_0, + &rate); + if (ret) + return adrv9025_dev_err(phy); init.ops = &bb_clk_ops; clk_priv->rate = rate; break; @@ -1798,7 +1933,7 @@ struct adrv9025_jesd204_priv { struct adrv9025_jesd204_link link[5]; }; -int adrv9025_jesd204_link_pre_setup(struct jesd204_dev *jdev, +static int adrv9025_jesd204_link_pre_setup(struct jesd204_dev *jdev, enum jesd204_state_op_reason reason) { struct device *dev = jesd204_dev_to_device(jdev); @@ -1886,6 +2021,7 @@ static int adrv9025_jesd204_link_init(struct jesd204_dev *jdev, ret = adrv9025_RxLinkSamplingRateFind(phy->madDevice, &phy->deviceInitStruct, ADI_ADRV9025_FRAMER_1, &rate); + phy->orx_iqRate_kHz = rate; break; case FRAMER2_LINK_RX: framer = &phy->deviceInitStruct.dataInterface.framer[2]; @@ -1918,6 +2054,7 @@ static int adrv9025_jesd204_link_init(struct jesd204_dev *jdev, lnk->jesd_version = framer->enableJesd204C ? JESD204_VERSION_C : JESD204_VERSION_B; lnk->subclass = JESD204_SUBCLASS_1; lnk->is_transmit = false; + } else if (deframer) { lnk->num_converters = deframer->jesd204M; lnk->num_lanes = hweight8(deframer->deserializerLanesEnabled); @@ -1937,7 +2074,7 @@ static int adrv9025_jesd204_link_init(struct jesd204_dev *jdev, return JESD204_STATE_CHANGE_DONE; } -int adrv9025_jesd204_link_setup(struct jesd204_dev *jdev, +static int adrv9025_jesd204_link_setup(struct jesd204_dev *jdev, enum jesd204_state_op_reason reason) { struct device *dev = jesd204_dev_to_device(jdev); @@ -1948,7 +2085,6 @@ int adrv9025_jesd204_link_setup(struct jesd204_dev *jdev, dev_dbg(dev, "%s:%d reason %s\n", __func__, __LINE__, jesd204_state_op_reason_str(reason)); - if (reason == JESD204_STATE_OP_REASON_UNINIT) { phy->is_initialized = 0; @@ -2130,7 +2266,6 @@ static int adrv9025_jesd204_clks_enable(struct jesd204_dev *jdev, return adrv9025_dev_err(phy); } - ret = adi_adrv9025_FramerSysrefCtrlSet(phy->madDevice, priv->link[lnk->link_id].source_id, 0); if (ret) @@ -2324,6 +2459,7 @@ static int adrv9025_jesd204_post_running_stage(struct jesd204_dev *jdev, return adrv9025_dev_err(phy); clk_set_rate(phy->clks[RX_SAMPL_CLK], phy->rx_iqRate_kHz * 1000); + clk_set_rate(phy->clks[OBS_SAMPL_CLK], phy->orx_iqRate_kHz * 1000); clk_set_rate(phy->clks[TX_SAMPL_CLK], phy->tx_iqRate_kHz * 1000); ret = adi_adrv9025_AgcCfgSet(phy->madDevice, phy->agcConfig, 1); @@ -2790,6 +2926,10 @@ static int adrv9025_probe(struct spi_device *spi) CLK_GET_RATE_NOCACHE | CLK_IGNORE_UNUSED, RX_SAMPL_CLK); + adrv9025_clk_register(phy, "-obs_sampl_clk", __clk_get_name(phy->dev_clk), NULL, + CLK_GET_RATE_NOCACHE | CLK_IGNORE_UNUSED, + OBS_SAMPL_CLK); + adrv9025_clk_register(phy, "-tx_sampl_clk", __clk_get_name(phy->dev_clk), NULL, CLK_GET_RATE_NOCACHE | CLK_IGNORE_UNUSED, TX_SAMPL_CLK); diff --git a/drivers/iio/adc/adrv902x/adrv9025.h b/drivers/iio/adc/adrv902x/adrv9025.h index d994beb005fbd6..9ef9976e0ca5df 100644 --- a/drivers/iio/adc/adrv902x/adrv9025.h +++ b/drivers/iio/adc/adrv902x/adrv9025.h @@ -103,6 +103,7 @@ struct adrv9025_debugfs_entry { enum adrv9025_clocks { RX_SAMPL_CLK, TX_SAMPL_CLK, + OBS_SAMPL_CLK, NUM_ADRV9025_CLKS, }; @@ -135,6 +136,7 @@ struct adrv9025_rf_phy { u32 tx_iqRate_kHz; u32 rx_iqRate_kHz; + u32 orx_iqRate_kHz; adi_hal_Cfg_t linux_hal; struct clk *dev_clk; diff --git a/firmware/ActiveUseCase_NLS.profile b/firmware/ActiveUseCase_NLS.profile new file mode 100644 index 00000000000000..08a6e298f73aec --- /dev/null +++ b/firmware/ActiveUseCase_NLS.profile @@ -0,0 +1,3030 @@ +{ + "dataInterface": { + "framer": [ + { + "serializerLaneCrossbar": { + "lane0FramerOutSel": 0, + "lane1FramerOutSel": 1, + "lane2FramerOutSel": 8, + "lane3FramerOutSel": 8 + }, + "adcCrossbar": { + "conv0": 1, + "conv1": 0, + "conv2": 3, + "conv3": 2, + "conv4": 127, + "conv5": 127, + "conv6": 127, + "conv7": 127, + "conv8": 127, + "conv9": 127, + "conv10": 127, + "conv11": 127, + "conv12": 127, + "conv13": 127, + "conv14": 127, + "conv15": 127, + "conv16": 127, + "conv17": 127, + "conv18": 127, + "conv19": 127, + "conv20": 127, + "conv21": 127, + "conv22": 127, + "conv23": 127 + }, + "enableJesd204C": 0, + "bankId": 0, + "deviceId": 0, + "lane0Id": 0, + "jesd204M": 4, + "jesd204K": 32, + "jesd204F": 4, + "jesd204Np": 16, + "jesd204E": 0, + "scramble": 1, + "serializerLanesEnabled": 3, + "lmfcOffset": 0, + "syncbInSelect": 0, + "overSample": 0, + "syncbInLvdsMode": 1, + "syncbInLvdsPnInvert": 0, + "newSysrefOnRelink": 0, + "sysrefForStartup": 0, + "sysrefNShotEnable": 0, + "sysrefNShotCount": 0, + "sysrefIgnoreWhenLinked": 0 + }, + { + "serializerLaneCrossbar": { + "lane0FramerOutSel": 8, + "lane1FramerOutSel": 8, + "lane2FramerOutSel": 0, + "lane3FramerOutSel": 1 + }, + "adcCrossbar": { + "conv0": 17, + "conv1": 16, + "conv2": 19, + "conv3": 18, + "conv4": 127, + "conv5": 127, + "conv6": 127, + "conv7": 127, + "conv8": 127, + "conv9": 127, + "conv10": 127, + "conv11": 127, + "conv12": 127, + "conv13": 127, + "conv14": 127, + "conv15": 127, + "conv16": 127, + "conv17": 127, + "conv18": 127, + "conv19": 127, + "conv20": 127, + "conv21": 127, + "conv22": 127, + "conv23": 127 + }, + "enableJesd204C": 0, + "bankId": 0, + "deviceId": 0, + "lane0Id": 0, + "jesd204M": 4, + "jesd204K": 32, + "jesd204F": 4, + "jesd204Np": 16, + "jesd204E": 0, + "scramble": 1, + "serializerLanesEnabled": 12, + "lmfcOffset": 0, + "syncbInSelect": 1, + "overSample": 0, + "syncbInLvdsMode": 1, + "syncbInLvdsPnInvert": 0, + "newSysrefOnRelink": 0, + "sysrefForStartup": 0, + "sysrefNShotEnable": 0, + "sysrefNShotCount": 0, + "sysrefIgnoreWhenLinked": 0 + }, + { + "serializerLaneCrossbar": { + "lane0FramerOutSel": 0, + "lane1FramerOutSel": 0, + "lane2FramerOutSel": 0, + "lane3FramerOutSel": 0 + }, + "adcCrossbar": { + "conv0": 127, + "conv1": 127, + "conv2": 127, + "conv3": 127, + "conv4": 127, + "conv5": 127, + "conv6": 127, + "conv7": 127, + "conv8": 127, + "conv9": 127, + "conv10": 127, + "conv11": 127, + "conv12": 127, + "conv13": 127, + "conv14": 127, + "conv15": 127, + "conv16": 127, + "conv17": 127, + "conv18": 127, + "conv19": 127, + "conv20": 127, + "conv21": 127, + "conv22": 127, + "conv23": 127 + }, + "enableJesd204C": 0, + "bankId": 0, + "deviceId": 0, + "lane0Id": 0, + "jesd204M": 0, + "jesd204K": 0, + "jesd204F": 0, + "jesd204Np": 0, + "jesd204E": 0, + "scramble": 0, + "serializerLanesEnabled": 0, + "lmfcOffset": 0, + "syncbInSelect": 0, + "overSample": 0, + "syncbInLvdsMode": 0, + "syncbInLvdsPnInvert": 0, + "newSysrefOnRelink": 0, + "sysrefForStartup": 0, + "sysrefNShotEnable": 0, + "sysrefNShotCount": 0, + "sysrefIgnoreWhenLinked": 0 + } + ], + "deframer": [ + { + "deserializerLaneCrossbar": { + "deframerInput0LaneSel": 0, + "deframerInput1LaneSel": 1, + "deframerInput2LaneSel": 2, + "deframerInput3LaneSel": 3 + }, + "enableJesd204C": 0, + "bankId": 0, + "deviceId": 0, + "lane0Id": 0, + "jesd204M": 8, + "jesd204K": 32, + "jesd204F": 4, + "jesd204Np": 16, + "jesd204E": 0, + "scramble": 1, + "deserializerLanesEnabled": 15, + "lmfcOffset": 0, + "syncbOutSelect": 0, + "syncbOutLvdsMode": 1, + "syncbOutLvdsPnInvert": 0, + "syncbOutCmosSlewRate": 0, + "syncbOutCmosDriveLevel": 0, + "dacCrossbar": { + "tx1DacChanI": 1, + "tx1DacChanQ": 0, + "tx2DacChanI": 3, + "tx2DacChanQ": 2, + "tx3DacChanI": 5, + "tx3DacChanQ": 4, + "tx4DacChanI": 7, + "tx4DacChanQ": 6 + }, + "newSysrefOnRelink": 0, + "sysrefForStartup": 1, + "sysrefNShotEnable": 0, + "sysrefNShotCount": 0, + "sysrefIgnoreWhenLinked": 0 + }, + { + "deserializerLaneCrossbar": { + "deframerInput0LaneSel": 8, + "deframerInput1LaneSel": 8, + "deframerInput2LaneSel": 8, + "deframerInput3LaneSel": 8 + }, + "enableJesd204C": 0, + "bankId": 0, + "deviceId": 0, + "lane0Id": 0, + "jesd204M": 0, + "jesd204K": 0, + "jesd204F": 0, + "jesd204Np": 0, + "jesd204E": 0, + "scramble": 0, + "deserializerLanesEnabled": 0, + "lmfcOffset": 0, + "syncbOutSelect": 0, + "syncbOutLvdsMode": 0, + "syncbOutLvdsPnInvert": 0, + "syncbOutCmosSlewRate": 0, + "syncbOutCmosDriveLevel": 0, + "dacCrossbar": { + "tx1DacChanI": 127, + "tx1DacChanQ": 127, + "tx2DacChanI": 127, + "tx2DacChanQ": 127, + "tx3DacChanI": 127, + "tx3DacChanQ": 127, + "tx4DacChanI": 127, + "tx4DacChanQ": 127 + }, + "newSysrefOnRelink": 0, + "sysrefForStartup": 0, + "sysrefNShotEnable": 0, + "sysrefNShotCount": 0, + "sysrefIgnoreWhenLinked": 0 + } + ], + "serCfg": [ + { + "serAmplitude": 0, + "serPreEmphasis": 0, + "serPostEmphasis": 0, + "serInvertLanePolarity": 0 + }, + { + "serAmplitude": 0, + "serPreEmphasis": 0, + "serPostEmphasis": 0, + "serInvertLanePolarity": 0 + }, + { + "serAmplitude": 0, + "serPreEmphasis": 0, + "serPostEmphasis": 0, + "serInvertLanePolarity": 0 + }, + { + "serAmplitude": 0, + "serPreEmphasis": 0, + "serPostEmphasis": 0, + "serInvertLanePolarity": 0 + } + ], + "desCfg": [ + { + "highBoost": 0, + "configOption1": 0, + "configOption2": 0, + "configOption3": 0, + "configOption4": 0, + "configOption5": 0, + "configOption6": 0, + "configOption7": 0, + "configOption8": 0, + "configOption9": 0, + "configOption10": 0, + "desInvertLanePolarity": 0 + }, + { + "highBoost": 0, + "configOption1": 0, + "configOption2": 0, + "configOption3": 0, + "configOption4": 0, + "configOption5": 0, + "configOption6": 0, + "configOption7": 0, + "configOption8": 0, + "configOption9": 0, + "configOption10": 0, + "desInvertLanePolarity": 0 + }, + { + "highBoost": 0, + "configOption1": 0, + "configOption2": 0, + "configOption3": 0, + "configOption4": 0, + "configOption5": 0, + "configOption6": 0, + "configOption7": 0, + "configOption8": 0, + "configOption9": 0, + "configOption10": 0, + "desInvertLanePolarity": 0 + }, + { + "highBoost": 0, + "configOption1": 0, + "configOption2": 0, + "configOption3": 0, + "configOption4": 0, + "configOption5": 0, + "configOption6": 0, + "configOption7": 0, + "configOption8": 0, + "configOption9": 0, + "configOption10": 0, + "desInvertLanePolarity": 0 + } + ], + "linkSharingCfg": { + "linkSharingEnabled": 0, + "linkSharingM": 0, + "linkSharingS": 0, + "linkSharingNp": 0, + "linkSharingAdcCrossbar": { + "conv0": 127, + "conv1": 127, + "conv2": 127, + "conv3": 127, + "conv4": 127, + "conv5": 127, + "conv6": 127, + "conv7": 127, + "conv8": 127, + "conv9": 127, + "conv10": 127, + "conv11": 127, + "conv12": 127, + "conv13": 127, + "conv14": 127, + "conv15": 127 + } + }, + "dataCfg": { + "enable": 0, + "configOption1": 0, + "configOption2": 0 + }, + "channelSelect": 0, + "channelMode": 0 + }, + "clocks": { + "deviceClock_kHz": 245760, + "clkPllVcoFreq_kHz": 9830400, + "serdesPllVcoFreq_kHz": 0, + "ldoSelect": 0, + "extLoFreq1_kHz": 0, + "extLoFreq2_kHz": 0, + "rfPll1LoMode": 0, + "rfPll2LoMode": 0, + "rfPll1LoOutDivider": 0, + "rfPll2LoOutDivider": 0, + "rfPllPhaseSyncMode": 0, + "rx12LoSelect": 1, + "rx34LoSelect": 1, + "tx12LoSelect": 2, + "tx34LoSelect": 2, + "orx12LoSelect": 1, + "orx34LoSelect": 1 + }, + "gpInterrupts": { + "gpIntMaskPin0": 0, + "gpIntMaskPin1": 0 + }, + "rx": { + "rxInitChannelMask": 1023, + "rxChannelCfg": [ + { + "profile": { + "channelType": 1, + "rxFirDecimation": 1, + "rxDec5Decimation": 5, + "rhb1Decimation": 2, + "rhb1WideBandMode": 1, + "rhb2Decimation": 2, + "rhb3Decimation": 1, + "rxFir1Decimation": 1, + "rxFir2Decimation": 1, + "rxOutputRate_kHz": 245760, + "rfBandwidth_kHz": 60000, + "rxBbf3dBCorner_kHz": 60000, + "rxAdcBandWidth_kHz": 30000, + "rxFir": { + "gain_dB": 0, + "numFirCoefs": 24, + "coefs": [ + 11, + -78, + 245, + -419, + 264, + 518, + -1562, + 1556, + 886, + -5552, + 8439, + 24149, + 8439, + -5552, + 886, + 1556, + -1562, + 518, + 264, + -419, + 245, + -78, + 11, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "rxDdcMode": 0, + "rxNcoShifterCfg": { + "bandAInputBandWidth_kHz": 0, + "bandAInputCenterFreq_kHz": 0, + "bandANco1Freq_kHz": 0, + "bandANco2Freq_kHz": 0, + "bandBInputBandWidth_kHz": 0, + "bandBInputCenterFreq_kHz": 0, + "bandBNco1Freq_kHz": 0, + "bandBNco2Freq_kHz": 0, + "bandAbCombinedEnable": 0 + }, + "tiaPowerMode": 4, + "rxDataFormat": { + "rxChannelMask": 1, + "formatSelect": 0, + "floatingPointConfig": { + "fpDataFormat": 0, + "fpRoundMode": 0, + "fpNumExpBits": 0, + "fpAttenSteps": 0, + "fpHideLeadingOne": 0, + "fpEncodeNan": 0 + }, + "integerConfigSettings": { + "intEmbeddedBits": 0, + "intSampleResolution": 2, + "intParity": 2, + "intEmbeddedPos": 0 + }, + "slicerConfigSettings": { + "extSlicerStepSize": 0, + "intSlicerStepSize": 0, + "rx1ExtSlicerGpioSelect": 0, + "rx2ExtSlicerGpioSelect": 0, + "rx3ExtSlicerGpioSelect": 0, + "rx4ExtSlicerGpioSelect": 0 + }, + "embOvldMonitorSettings": { + "embeddedMonitorSrcLsbI": 0, + "embeddedMonitorSrcLsbQ": 0, + "embeddedMonitorSrcLsbPlusOneI": 0, + "embeddedMonitorSrcLsbPlusOneQ": 0, + "embeddedMonitorHb2LowSrcSel": 6, + "embeddedMonitorHb2HighSrcSel": 3, + "embeddedMonitorApdLowSrcSel": 2, + "embeddedMonitorApdHighSrcSel": 2, + "invertHb2Flag": 0, + "invertApdFlag": 0 + }, + "externalLnaGain": 0, + "tempCompensationEnable": 0 + } + } + }, + { + "profile": { + "channelType": 2, + "rxFirDecimation": 1, + "rxDec5Decimation": 5, + "rhb1Decimation": 2, + "rhb1WideBandMode": 1, + "rhb2Decimation": 2, + "rhb3Decimation": 1, + "rxFir1Decimation": 1, + "rxFir2Decimation": 1, + "rxOutputRate_kHz": 245760, + "rfBandwidth_kHz": 60000, + "rxBbf3dBCorner_kHz": 60000, + "rxAdcBandWidth_kHz": 30000, + "rxFir": { + "gain_dB": 0, + "numFirCoefs": 24, + "coefs": [ + 11, + -78, + 245, + -419, + 264, + 518, + -1562, + 1556, + 886, + -5552, + 8439, + 24149, + 8439, + -5552, + 886, + 1556, + -1562, + 518, + 264, + -419, + 245, + -78, + 11, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "rxDdcMode": 0, + "rxNcoShifterCfg": { + "bandAInputBandWidth_kHz": 0, + "bandAInputCenterFreq_kHz": 0, + "bandANco1Freq_kHz": 0, + "bandANco2Freq_kHz": 0, + "bandBInputBandWidth_kHz": 0, + "bandBInputCenterFreq_kHz": 0, + "bandBNco1Freq_kHz": 0, + "bandBNco2Freq_kHz": 0, + "bandAbCombinedEnable": 0 + }, + "tiaPowerMode": 4, + "rxDataFormat": { + "rxChannelMask": 2, + "formatSelect": 0, + "floatingPointConfig": { + "fpDataFormat": 0, + "fpRoundMode": 0, + "fpNumExpBits": 0, + "fpAttenSteps": 0, + "fpHideLeadingOne": 0, + "fpEncodeNan": 0 + }, + "integerConfigSettings": { + "intEmbeddedBits": 0, + "intSampleResolution": 2, + "intParity": 2, + "intEmbeddedPos": 0 + }, + "slicerConfigSettings": { + "extSlicerStepSize": 0, + "intSlicerStepSize": 0, + "rx1ExtSlicerGpioSelect": 0, + "rx2ExtSlicerGpioSelect": 0, + "rx3ExtSlicerGpioSelect": 0, + "rx4ExtSlicerGpioSelect": 0 + }, + "embOvldMonitorSettings": { + "embeddedMonitorSrcLsbI": 0, + "embeddedMonitorSrcLsbQ": 0, + "embeddedMonitorSrcLsbPlusOneI": 0, + "embeddedMonitorSrcLsbPlusOneQ": 0, + "embeddedMonitorHb2LowSrcSel": 6, + "embeddedMonitorHb2HighSrcSel": 3, + "embeddedMonitorApdLowSrcSel": 2, + "embeddedMonitorApdHighSrcSel": 2, + "invertHb2Flag": 0, + "invertApdFlag": 0 + }, + "externalLnaGain": 0, + "tempCompensationEnable": 0 + } + } + }, + { + "profile": { + "channelType": 4, + "rxFirDecimation": 1, + "rxDec5Decimation": 5, + "rhb1Decimation": 2, + "rhb1WideBandMode": 1, + "rhb2Decimation": 2, + "rhb3Decimation": 1, + "rxFir1Decimation": 1, + "rxFir2Decimation": 1, + "rxOutputRate_kHz": 245760, + "rfBandwidth_kHz": 60000, + "rxBbf3dBCorner_kHz": 60000, + "rxAdcBandWidth_kHz": 30000, + "rxFir": { + "gain_dB": 0, + "numFirCoefs": 24, + "coefs": [ + 11, + -78, + 245, + -419, + 264, + 518, + -1562, + 1556, + 886, + -5552, + 8439, + 24149, + 8439, + -5552, + 886, + 1556, + -1562, + 518, + 264, + -419, + 245, + -78, + 11, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "rxDdcMode": 0, + "rxNcoShifterCfg": { + "bandAInputBandWidth_kHz": 0, + "bandAInputCenterFreq_kHz": 0, + "bandANco1Freq_kHz": 0, + "bandANco2Freq_kHz": 0, + "bandBInputBandWidth_kHz": 0, + "bandBInputCenterFreq_kHz": 0, + "bandBNco1Freq_kHz": 0, + "bandBNco2Freq_kHz": 0, + "bandAbCombinedEnable": 0 + }, + "tiaPowerMode": 4, + "rxDataFormat": { + "rxChannelMask": 4, + "formatSelect": 0, + "floatingPointConfig": { + "fpDataFormat": 0, + "fpRoundMode": 0, + "fpNumExpBits": 0, + "fpAttenSteps": 0, + "fpHideLeadingOne": 0, + "fpEncodeNan": 0 + }, + "integerConfigSettings": { + "intEmbeddedBits": 0, + "intSampleResolution": 2, + "intParity": 2, + "intEmbeddedPos": 0 + }, + "slicerConfigSettings": { + "extSlicerStepSize": 0, + "intSlicerStepSize": 0, + "rx1ExtSlicerGpioSelect": 0, + "rx2ExtSlicerGpioSelect": 0, + "rx3ExtSlicerGpioSelect": 0, + "rx4ExtSlicerGpioSelect": 0 + }, + "embOvldMonitorSettings": { + "embeddedMonitorSrcLsbI": 0, + "embeddedMonitorSrcLsbQ": 0, + "embeddedMonitorSrcLsbPlusOneI": 0, + "embeddedMonitorSrcLsbPlusOneQ": 0, + "embeddedMonitorHb2LowSrcSel": 6, + "embeddedMonitorHb2HighSrcSel": 3, + "embeddedMonitorApdLowSrcSel": 2, + "embeddedMonitorApdHighSrcSel": 2, + "invertHb2Flag": 0, + "invertApdFlag": 0 + }, + "externalLnaGain": 0, + "tempCompensationEnable": 0 + } + } + }, + { + "profile": { + "channelType": 8, + "rxFirDecimation": 1, + "rxDec5Decimation": 5, + "rhb1Decimation": 2, + "rhb1WideBandMode": 1, + "rhb2Decimation": 2, + "rhb3Decimation": 1, + "rxFir1Decimation": 1, + "rxFir2Decimation": 1, + "rxOutputRate_kHz": 245760, + "rfBandwidth_kHz": 60000, + "rxBbf3dBCorner_kHz": 60000, + "rxAdcBandWidth_kHz": 30000, + "rxFir": { + "gain_dB": 0, + "numFirCoefs": 24, + "coefs": [ + 11, + -78, + 245, + -419, + 264, + 518, + -1562, + 1556, + 886, + -5552, + 8439, + 24149, + 8439, + -5552, + 886, + 1556, + -1562, + 518, + 264, + -419, + 245, + -78, + 11, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "rxDdcMode": 0, + "rxNcoShifterCfg": { + "bandAInputBandWidth_kHz": 0, + "bandAInputCenterFreq_kHz": 0, + "bandANco1Freq_kHz": 0, + "bandANco2Freq_kHz": 0, + "bandBInputBandWidth_kHz": 0, + "bandBInputCenterFreq_kHz": 0, + "bandBNco1Freq_kHz": 0, + "bandBNco2Freq_kHz": 0, + "bandAbCombinedEnable": 0 + }, + "tiaPowerMode": 4, + "rxDataFormat": { + "rxChannelMask": 8, + "formatSelect": 0, + "floatingPointConfig": { + "fpDataFormat": 0, + "fpRoundMode": 0, + "fpNumExpBits": 0, + "fpAttenSteps": 0, + "fpHideLeadingOne": 0, + "fpEncodeNan": 0 + }, + "integerConfigSettings": { + "intEmbeddedBits": 0, + "intSampleResolution": 2, + "intParity": 2, + "intEmbeddedPos": 0 + }, + "slicerConfigSettings": { + "extSlicerStepSize": 0, + "intSlicerStepSize": 0, + "rx1ExtSlicerGpioSelect": 0, + "rx2ExtSlicerGpioSelect": 0, + "rx3ExtSlicerGpioSelect": 0, + "rx4ExtSlicerGpioSelect": 0 + }, + "embOvldMonitorSettings": { + "embeddedMonitorSrcLsbI": 0, + "embeddedMonitorSrcLsbQ": 0, + "embeddedMonitorSrcLsbPlusOneI": 0, + "embeddedMonitorSrcLsbPlusOneQ": 0, + "embeddedMonitorHb2LowSrcSel": 6, + "embeddedMonitorHb2HighSrcSel": 3, + "embeddedMonitorApdLowSrcSel": 2, + "embeddedMonitorApdHighSrcSel": 2, + "invertHb2Flag": 0, + "invertApdFlag": 0 + }, + "externalLnaGain": 0, + "tempCompensationEnable": 0 + } + } + }, + { + "profile": { + "channelType": 16, + "rxFirDecimation": 1, + "rxDec5Decimation": 5, + "rhb1Decimation": 2, + "rhb1WideBandMode": 0, + "rhb2Decimation": 1, + "rhb3Decimation": 1, + "rxFir1Decimation": 1, + "rxFir2Decimation": 1, + "rxOutputRate_kHz": 245760, + "rfBandwidth_kHz": 450000, + "rxBbf3dBCorner_kHz": 225000, + "rxAdcBandWidth_kHz": 225000, + "rxFir": { + "gain_dB": 6, + "numFirCoefs": 24, + "coefs": [ + -2, + 4, + -6, + 10, + -16, + 27, + -47, + 81, + -157, + 348, + -1623, + 19145, + -1623, + 348, + -157, + 81, + -47, + 27, + -16, + 10, + -6, + 4, + -2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "rxDdcMode": 3, + "rxNcoShifterCfg": { + "bandAInputBandWidth_kHz": 0, + "bandAInputCenterFreq_kHz": 0, + "bandANco1Freq_kHz": 0, + "bandANco2Freq_kHz": 0, + "bandBInputBandWidth_kHz": 0, + "bandBInputCenterFreq_kHz": 0, + "bandBNco1Freq_kHz": 0, + "bandBNco2Freq_kHz": 0, + "bandAbCombinedEnable": 0 + }, + "tiaPowerMode": 4, + "rxDataFormat": { + "rxChannelMask": 16, + "formatSelect": 0, + "floatingPointConfig": { + "fpDataFormat": 0, + "fpRoundMode": 0, + "fpNumExpBits": 0, + "fpAttenSteps": 0, + "fpHideLeadingOne": 0, + "fpEncodeNan": 0 + }, + "integerConfigSettings": { + "intEmbeddedBits": 0, + "intSampleResolution": 2, + "intParity": 2, + "intEmbeddedPos": 0 + }, + "slicerConfigSettings": { + "extSlicerStepSize": 0, + "intSlicerStepSize": 0, + "rx1ExtSlicerGpioSelect": 0, + "rx2ExtSlicerGpioSelect": 0, + "rx3ExtSlicerGpioSelect": 0, + "rx4ExtSlicerGpioSelect": 0 + }, + "embOvldMonitorSettings": { + "embeddedMonitorSrcLsbI": 0, + "embeddedMonitorSrcLsbQ": 0, + "embeddedMonitorSrcLsbPlusOneI": 0, + "embeddedMonitorSrcLsbPlusOneQ": 0, + "embeddedMonitorHb2LowSrcSel": 6, + "embeddedMonitorHb2HighSrcSel": 3, + "embeddedMonitorApdLowSrcSel": 2, + "embeddedMonitorApdHighSrcSel": 2, + "invertHb2Flag": 0, + "invertApdFlag": 0 + }, + "externalLnaGain": 0, + "tempCompensationEnable": 0 + } + } + }, + { + "profile": { + "channelType": 32, + "rxFirDecimation": 1, + "rxDec5Decimation": 5, + "rhb1Decimation": 2, + "rhb1WideBandMode": 0, + "rhb2Decimation": 1, + "rhb3Decimation": 1, + "rxFir1Decimation": 1, + "rxFir2Decimation": 1, + "rxOutputRate_kHz": 245760, + "rfBandwidth_kHz": 450000, + "rxBbf3dBCorner_kHz": 225000, + "rxAdcBandWidth_kHz": 225000, + "rxFir": { + "gain_dB": 6, + "numFirCoefs": 24, + "coefs": [ + -2, + 4, + -6, + 10, + -16, + 27, + -47, + 81, + -157, + 348, + -1623, + 19145, + -1623, + 348, + -157, + 81, + -47, + 27, + -16, + 10, + -6, + 4, + -2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "rxDdcMode": 3, + "rxNcoShifterCfg": { + "bandAInputBandWidth_kHz": 0, + "bandAInputCenterFreq_kHz": 0, + "bandANco1Freq_kHz": 0, + "bandANco2Freq_kHz": 0, + "bandBInputBandWidth_kHz": 0, + "bandBInputCenterFreq_kHz": 0, + "bandBNco1Freq_kHz": 0, + "bandBNco2Freq_kHz": 0, + "bandAbCombinedEnable": 0 + }, + "tiaPowerMode": 4, + "rxDataFormat": { + "rxChannelMask": 32, + "formatSelect": 0, + "floatingPointConfig": { + "fpDataFormat": 0, + "fpRoundMode": 0, + "fpNumExpBits": 0, + "fpAttenSteps": 0, + "fpHideLeadingOne": 0, + "fpEncodeNan": 0 + }, + "integerConfigSettings": { + "intEmbeddedBits": 0, + "intSampleResolution": 2, + "intParity": 2, + "intEmbeddedPos": 0 + }, + "slicerConfigSettings": { + "extSlicerStepSize": 0, + "intSlicerStepSize": 0, + "rx1ExtSlicerGpioSelect": 0, + "rx2ExtSlicerGpioSelect": 0, + "rx3ExtSlicerGpioSelect": 0, + "rx4ExtSlicerGpioSelect": 0 + }, + "embOvldMonitorSettings": { + "embeddedMonitorSrcLsbI": 0, + "embeddedMonitorSrcLsbQ": 0, + "embeddedMonitorSrcLsbPlusOneI": 0, + "embeddedMonitorSrcLsbPlusOneQ": 0, + "embeddedMonitorHb2LowSrcSel": 6, + "embeddedMonitorHb2HighSrcSel": 3, + "embeddedMonitorApdLowSrcSel": 2, + "embeddedMonitorApdHighSrcSel": 2, + "invertHb2Flag": 0, + "invertApdFlag": 0 + }, + "externalLnaGain": 0, + "tempCompensationEnable": 0 + } + } + }, + { + "profile": { + "channelType": 64, + "rxFirDecimation": 1, + "rxDec5Decimation": 5, + "rhb1Decimation": 2, + "rhb1WideBandMode": 0, + "rhb2Decimation": 1, + "rhb3Decimation": 1, + "rxFir1Decimation": 1, + "rxFir2Decimation": 1, + "rxOutputRate_kHz": 245760, + "rfBandwidth_kHz": 450000, + "rxBbf3dBCorner_kHz": 225000, + "rxAdcBandWidth_kHz": 225000, + "rxFir": { + "gain_dB": 6, + "numFirCoefs": 24, + "coefs": [ + -2, + 4, + -6, + 10, + -16, + 27, + -47, + 81, + -157, + 348, + -1623, + 19145, + -1623, + 348, + -157, + 81, + -47, + 27, + -16, + 10, + -6, + 4, + -2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "rxDdcMode": 3, + "rxNcoShifterCfg": { + "bandAInputBandWidth_kHz": 0, + "bandAInputCenterFreq_kHz": 0, + "bandANco1Freq_kHz": 0, + "bandANco2Freq_kHz": 0, + "bandBInputBandWidth_kHz": 0, + "bandBInputCenterFreq_kHz": 0, + "bandBNco1Freq_kHz": 0, + "bandBNco2Freq_kHz": 0, + "bandAbCombinedEnable": 0 + }, + "tiaPowerMode": 4, + "rxDataFormat": { + "rxChannelMask": 64, + "formatSelect": 0, + "floatingPointConfig": { + "fpDataFormat": 0, + "fpRoundMode": 0, + "fpNumExpBits": 0, + "fpAttenSteps": 0, + "fpHideLeadingOne": 0, + "fpEncodeNan": 0 + }, + "integerConfigSettings": { + "intEmbeddedBits": 0, + "intSampleResolution": 2, + "intParity": 2, + "intEmbeddedPos": 0 + }, + "slicerConfigSettings": { + "extSlicerStepSize": 0, + "intSlicerStepSize": 0, + "rx1ExtSlicerGpioSelect": 0, + "rx2ExtSlicerGpioSelect": 0, + "rx3ExtSlicerGpioSelect": 0, + "rx4ExtSlicerGpioSelect": 0 + }, + "embOvldMonitorSettings": { + "embeddedMonitorSrcLsbI": 0, + "embeddedMonitorSrcLsbQ": 0, + "embeddedMonitorSrcLsbPlusOneI": 0, + "embeddedMonitorSrcLsbPlusOneQ": 0, + "embeddedMonitorHb2LowSrcSel": 6, + "embeddedMonitorHb2HighSrcSel": 3, + "embeddedMonitorApdLowSrcSel": 2, + "embeddedMonitorApdHighSrcSel": 2, + "invertHb2Flag": 0, + "invertApdFlag": 0 + }, + "externalLnaGain": 0, + "tempCompensationEnable": 0 + } + } + }, + { + "profile": { + "channelType": 128, + "rxFirDecimation": 1, + "rxDec5Decimation": 5, + "rhb1Decimation": 2, + "rhb1WideBandMode": 0, + "rhb2Decimation": 1, + "rhb3Decimation": 1, + "rxFir1Decimation": 1, + "rxFir2Decimation": 1, + "rxOutputRate_kHz": 245760, + "rfBandwidth_kHz": 450000, + "rxBbf3dBCorner_kHz": 225000, + "rxAdcBandWidth_kHz": 225000, + "rxFir": { + "gain_dB": 6, + "numFirCoefs": 24, + "coefs": [ + -2, + 4, + -6, + 10, + -16, + 27, + -47, + 81, + -157, + 348, + -1623, + 19145, + -1623, + 348, + -157, + 81, + -47, + 27, + -16, + 10, + -6, + 4, + -2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "rxDdcMode": 3, + "rxNcoShifterCfg": { + "bandAInputBandWidth_kHz": 0, + "bandAInputCenterFreq_kHz": 0, + "bandANco1Freq_kHz": 0, + "bandANco2Freq_kHz": 0, + "bandBInputBandWidth_kHz": 0, + "bandBInputCenterFreq_kHz": 0, + "bandBNco1Freq_kHz": 0, + "bandBNco2Freq_kHz": 0, + "bandAbCombinedEnable": 0 + }, + "tiaPowerMode": 4, + "rxDataFormat": { + "rxChannelMask": 128, + "formatSelect": 0, + "floatingPointConfig": { + "fpDataFormat": 0, + "fpRoundMode": 0, + "fpNumExpBits": 0, + "fpAttenSteps": 0, + "fpHideLeadingOne": 0, + "fpEncodeNan": 0 + }, + "integerConfigSettings": { + "intEmbeddedBits": 0, + "intSampleResolution": 2, + "intParity": 2, + "intEmbeddedPos": 0 + }, + "slicerConfigSettings": { + "extSlicerStepSize": 0, + "intSlicerStepSize": 0, + "rx1ExtSlicerGpioSelect": 0, + "rx2ExtSlicerGpioSelect": 0, + "rx3ExtSlicerGpioSelect": 0, + "rx4ExtSlicerGpioSelect": 0 + }, + "embOvldMonitorSettings": { + "embeddedMonitorSrcLsbI": 0, + "embeddedMonitorSrcLsbQ": 0, + "embeddedMonitorSrcLsbPlusOneI": 0, + "embeddedMonitorSrcLsbPlusOneQ": 0, + "embeddedMonitorHb2LowSrcSel": 6, + "embeddedMonitorHb2HighSrcSel": 3, + "embeddedMonitorApdLowSrcSel": 2, + "embeddedMonitorApdHighSrcSel": 2, + "invertHb2Flag": 0, + "invertApdFlag": 0 + }, + "externalLnaGain": 0, + "tempCompensationEnable": 0 + } + } + }, + { + "profile": { + "channelType": 256, + "rxFirDecimation": 1, + "rxDec5Decimation": 5, + "rhb1Decimation": 2, + "rhb1WideBandMode": 0, + "rhb2Decimation": 1, + "rhb3Decimation": 1, + "rxFir1Decimation": 1, + "rxFir2Decimation": 1, + "rxOutputRate_kHz": 245760, + "rfBandwidth_kHz": 450000, + "rxBbf3dBCorner_kHz": 225000, + "rxAdcBandWidth_kHz": 225000, + "rxFir": { + "gain_dB": 6, + "numFirCoefs": 24, + "coefs": [ + -2, + 4, + -6, + 10, + -16, + 27, + -47, + 81, + -157, + 348, + -1623, + 19145, + -1623, + 348, + -157, + 81, + -47, + 27, + -16, + 10, + -6, + 4, + -2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "rxDdcMode": 3, + "rxNcoShifterCfg": { + "bandAInputBandWidth_kHz": 0, + "bandAInputCenterFreq_kHz": 0, + "bandANco1Freq_kHz": 0, + "bandANco2Freq_kHz": 0, + "bandBInputBandWidth_kHz": 0, + "bandBInputCenterFreq_kHz": 0, + "bandBNco1Freq_kHz": 0, + "bandBNco2Freq_kHz": 0, + "bandAbCombinedEnable": 0 + }, + "tiaPowerMode": 4, + "rxDataFormat": { + "rxChannelMask": 256, + "formatSelect": 0, + "floatingPointConfig": { + "fpDataFormat": 0, + "fpRoundMode": 0, + "fpNumExpBits": 0, + "fpAttenSteps": 0, + "fpHideLeadingOne": 0, + "fpEncodeNan": 0 + }, + "integerConfigSettings": { + "intEmbeddedBits": 0, + "intSampleResolution": 2, + "intParity": 2, + "intEmbeddedPos": 0 + }, + "slicerConfigSettings": { + "extSlicerStepSize": 0, + "intSlicerStepSize": 0, + "rx1ExtSlicerGpioSelect": 0, + "rx2ExtSlicerGpioSelect": 0, + "rx3ExtSlicerGpioSelect": 0, + "rx4ExtSlicerGpioSelect": 0 + }, + "embOvldMonitorSettings": { + "embeddedMonitorSrcLsbI": 0, + "embeddedMonitorSrcLsbQ": 0, + "embeddedMonitorSrcLsbPlusOneI": 0, + "embeddedMonitorSrcLsbPlusOneQ": 0, + "embeddedMonitorHb2LowSrcSel": 6, + "embeddedMonitorHb2HighSrcSel": 3, + "embeddedMonitorApdLowSrcSel": 2, + "embeddedMonitorApdHighSrcSel": 2, + "invertHb2Flag": 0, + "invertApdFlag": 0 + }, + "externalLnaGain": 0, + "tempCompensationEnable": 0 + } + } + }, + { + "profile": { + "channelType": 512, + "rxFirDecimation": 1, + "rxDec5Decimation": 5, + "rhb1Decimation": 2, + "rhb1WideBandMode": 0, + "rhb2Decimation": 1, + "rhb3Decimation": 1, + "rxFir1Decimation": 1, + "rxFir2Decimation": 1, + "rxOutputRate_kHz": 245760, + "rfBandwidth_kHz": 450000, + "rxBbf3dBCorner_kHz": 225000, + "rxAdcBandWidth_kHz": 225000, + "rxFir": { + "gain_dB": 6, + "numFirCoefs": 24, + "coefs": [ + -2, + 4, + -6, + 10, + -16, + 27, + -47, + 81, + -157, + 348, + -1623, + 19145, + -1623, + 348, + -157, + 81, + -47, + 27, + -16, + 10, + -6, + 4, + -2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "rxDdcMode": 3, + "rxNcoShifterCfg": { + "bandAInputBandWidth_kHz": 0, + "bandAInputCenterFreq_kHz": 0, + "bandANco1Freq_kHz": 0, + "bandANco2Freq_kHz": 0, + "bandBInputBandWidth_kHz": 0, + "bandBInputCenterFreq_kHz": 0, + "bandBNco1Freq_kHz": 0, + "bandBNco2Freq_kHz": 0, + "bandAbCombinedEnable": 0 + }, + "tiaPowerMode": 4, + "rxDataFormat": { + "rxChannelMask": 512, + "formatSelect": 0, + "floatingPointConfig": { + "fpDataFormat": 0, + "fpRoundMode": 0, + "fpNumExpBits": 0, + "fpAttenSteps": 0, + "fpHideLeadingOne": 0, + "fpEncodeNan": 0 + }, + "integerConfigSettings": { + "intEmbeddedBits": 0, + "intSampleResolution": 2, + "intParity": 2, + "intEmbeddedPos": 0 + }, + "slicerConfigSettings": { + "extSlicerStepSize": 0, + "intSlicerStepSize": 0, + "rx1ExtSlicerGpioSelect": 0, + "rx2ExtSlicerGpioSelect": 0, + "rx3ExtSlicerGpioSelect": 0, + "rx4ExtSlicerGpioSelect": 0 + }, + "embOvldMonitorSettings": { + "embeddedMonitorSrcLsbI": 0, + "embeddedMonitorSrcLsbQ": 0, + "embeddedMonitorSrcLsbPlusOneI": 0, + "embeddedMonitorSrcLsbPlusOneQ": 0, + "embeddedMonitorHb2LowSrcSel": 6, + "embeddedMonitorHb2HighSrcSel": 3, + "embeddedMonitorApdLowSrcSel": 2, + "embeddedMonitorApdHighSrcSel": 2, + "invertHb2Flag": 0, + "invertApdFlag": 0 + }, + "externalLnaGain": 0, + "tempCompensationEnable": 0 + } + } + } + ] + }, + "tx": { + "txInitChannelMask": 15, + "txChannelCfg": [ + { + "profile": { + "txInputRate_kHz": 245760, + "primarySigBandwidth_kHz": 120000, + "rfBandwidth_kHz": 450000, + "txDac3dBCorner_kHz": 450000, + "txBbf3dBCorner_kHz": 225000, + "dpdHb1Interpolation": 2, + "dpdHb2Interpolation": 2, + "txFirInterpolation": 1, + "thb1Interpolation": 1, + "thb2Interpolation": 1, + "thb3Interpolation": 2, + "txInt5Interpolation": 1, + "txFir": { + "gain_dB": 6, + "numFirCoefs": 20, + "coefs": [ + 189, + -1108, + 2468, + -2226, + -1162, + 4409, + -1075, + -6668, + 5165, + 15845, + 5165, + -6668, + -1075, + 4409, + -1162, + -2226, + 2468, + -1108, + 189, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "txBbfPowerMode": 8 + }, + "txAttenCtrl": { + "txAttenStepSize": 0, + "txRampDownEvents": 63, + "reserved": 0, + "attenMode": 1, + "dacFullScale": 0, + "txAttenInit_mdB": 10000 + }, + "dacFullScale": 0 + }, + { + "profile": { + "txInputRate_kHz": 245760, + "primarySigBandwidth_kHz": 120000, + "rfBandwidth_kHz": 450000, + "txDac3dBCorner_kHz": 450000, + "txBbf3dBCorner_kHz": 225000, + "dpdHb1Interpolation": 2, + "dpdHb2Interpolation": 2, + "txFirInterpolation": 1, + "thb1Interpolation": 1, + "thb2Interpolation": 1, + "thb3Interpolation": 2, + "txInt5Interpolation": 1, + "txFir": { + "gain_dB": 6, + "numFirCoefs": 20, + "coefs": [ + 189, + -1108, + 2468, + -2226, + -1162, + 4409, + -1075, + -6668, + 5165, + 15845, + 5165, + -6668, + -1075, + 4409, + -1162, + -2226, + 2468, + -1108, + 189, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "txBbfPowerMode": 8 + }, + "txAttenCtrl": { + "txAttenStepSize": 0, + "txRampDownEvents": 63, + "reserved": 0, + "attenMode": 1, + "dacFullScale": 0, + "txAttenInit_mdB": 10000 + }, + "dacFullScale": 0 + }, + { + "profile": { + "txInputRate_kHz": 245760, + "primarySigBandwidth_kHz": 120000, + "rfBandwidth_kHz": 450000, + "txDac3dBCorner_kHz": 450000, + "txBbf3dBCorner_kHz": 225000, + "dpdHb1Interpolation": 2, + "dpdHb2Interpolation": 2, + "txFirInterpolation": 1, + "thb1Interpolation": 1, + "thb2Interpolation": 1, + "thb3Interpolation": 2, + "txInt5Interpolation": 1, + "txFir": { + "gain_dB": 6, + "numFirCoefs": 20, + "coefs": [ + 189, + -1108, + 2468, + -2226, + -1162, + 4409, + -1075, + -6668, + 5165, + 15845, + 5165, + -6668, + -1075, + 4409, + -1162, + -2226, + 2468, + -1108, + 189, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "txBbfPowerMode": 8 + }, + "txAttenCtrl": { + "txAttenStepSize": 0, + "txRampDownEvents": 63, + "reserved": 0, + "attenMode": 1, + "dacFullScale": 0, + "txAttenInit_mdB": 10000 + }, + "dacFullScale": 0 + }, + { + "profile": { + "txInputRate_kHz": 245760, + "primarySigBandwidth_kHz": 120000, + "rfBandwidth_kHz": 450000, + "txDac3dBCorner_kHz": 450000, + "txBbf3dBCorner_kHz": 225000, + "dpdHb1Interpolation": 2, + "dpdHb2Interpolation": 2, + "txFirInterpolation": 1, + "thb1Interpolation": 1, + "thb2Interpolation": 1, + "thb3Interpolation": 2, + "txInt5Interpolation": 1, + "txFir": { + "gain_dB": 6, + "numFirCoefs": 20, + "coefs": [ + 189, + -1108, + 2468, + -2226, + -1162, + 4409, + -1075, + -6668, + 5165, + 15845, + 5165, + -6668, + -1075, + 4409, + -1162, + -2226, + 2468, + -1108, + 189, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "txBbfPowerMode": 8 + }, + "txAttenCtrl": { + "txAttenStepSize": 0, + "txRampDownEvents": 63, + "reserved": 0, + "attenMode": 1, + "dacFullScale": 0, + "txAttenInit_mdB": 10000 + }, + "dacFullScale": 0 + } + ] + }, + "adcProfiles": { + "RxChannel1": [ + 386, + 273, + 500, + 320, + 7, + 591, + 308, + 120, + 25, + 210, + 132, + 1, + 10, + 48, + 0, + 0, + 32, + 0, + 0, + 0, + 13, + 128, + 7, + 7, + 0, + 5, + 0, + 7, + 7, + 7, + 7, + 7, + 0, + 7, + 13, + 13, + 0, + 13, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "RxChannel2": [ + 386, + 273, + 500, + 320, + 7, + 591, + 308, + 120, + 25, + 210, + 132, + 1, + 10, + 48, + 0, + 0, + 32, + 0, + 0, + 0, + 13, + 128, + 7, + 7, + 0, + 5, + 0, + 7, + 7, + 7, + 7, + 7, + 0, + 7, + 13, + 13, + 0, + 13, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "RxChannel3": [ + 386, + 273, + 500, + 320, + 7, + 591, + 308, + 120, + 25, + 210, + 132, + 1, + 10, + 48, + 0, + 0, + 32, + 0, + 0, + 0, + 13, + 128, + 7, + 7, + 0, + 5, + 0, + 7, + 7, + 7, + 7, + 7, + 0, + 7, + 13, + 13, + 0, + 13, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "RxChannel4": [ + 386, + 273, + 500, + 320, + 7, + 591, + 308, + 120, + 25, + 210, + 132, + 1, + 10, + 48, + 0, + 0, + 32, + 0, + 0, + 0, + 13, + 128, + 7, + 7, + 0, + 5, + 0, + 7, + 7, + 7, + 7, + 7, + 0, + 7, + 13, + 13, + 0, + 13, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "OrxChannel1Profile0": [ + 386, + 273, + 541, + 507, + 47, + 291, + 153, + 99, + 40, + 150, + 132, + 1, + 10, + 16, + 0, + 0, + 16, + 0, + 0, + 0, + 0, + 128, + 7, + 7, + 0, + 5, + 0, + 7, + 7, + 7, + 1, + 2, + 0, + 7, + 4, + 0, + 0, + 4, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "OrxChannel1Profile1": [ + 386, + 273, + 541, + 507, + 47, + 291, + 153, + 99, + 40, + 150, + 132, + 1, + 10, + 16, + 0, + 0, + 16, + 0, + 0, + 0, + 0, + 128, + 7, + 7, + 0, + 5, + 0, + 7, + 7, + 7, + 1, + 2, + 0, + 7, + 4, + 0, + 0, + 4, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "OrxChannel1Profile2": [ + 386, + 273, + 541, + 507, + 47, + 291, + 153, + 99, + 40, + 150, + 132, + 1, + 10, + 16, + 0, + 0, + 16, + 0, + 0, + 0, + 0, + 128, + 7, + 7, + 0, + 5, + 0, + 7, + 7, + 7, + 1, + 2, + 0, + 7, + 4, + 0, + 0, + 4, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "OrxChannel1Profile3": [ + 386, + 273, + 541, + 507, + 47, + 291, + 153, + 99, + 40, + 150, + 132, + 1, + 10, + 16, + 0, + 0, + 16, + 0, + 0, + 0, + 0, + 128, + 7, + 7, + 0, + 5, + 0, + 7, + 7, + 7, + 1, + 2, + 0, + 7, + 4, + 0, + 0, + 4, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "OrxChannel2Profile0": [ + 386, + 273, + 541, + 507, + 47, + 291, + 153, + 99, + 40, + 150, + 132, + 1, + 10, + 16, + 0, + 0, + 16, + 0, + 0, + 0, + 0, + 128, + 7, + 7, + 0, + 5, + 0, + 7, + 7, + 7, + 1, + 2, + 0, + 7, + 4, + 0, + 0, + 4, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "OrxChannel2Profile1": [ + 386, + 273, + 541, + 507, + 47, + 291, + 153, + 99, + 40, + 150, + 132, + 1, + 10, + 16, + 0, + 0, + 16, + 0, + 0, + 0, + 0, + 128, + 7, + 7, + 0, + 5, + 0, + 7, + 7, + 7, + 1, + 2, + 0, + 7, + 4, + 0, + 0, + 4, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "OrxChannel2Profile2": [ + 386, + 273, + 541, + 507, + 47, + 291, + 153, + 99, + 40, + 150, + 132, + 1, + 10, + 16, + 0, + 0, + 16, + 0, + 0, + 0, + 0, + 128, + 7, + 7, + 0, + 5, + 0, + 7, + 7, + 7, + 1, + 2, + 0, + 7, + 4, + 0, + 0, + 4, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "OrxChannel2Profile3": [ + 386, + 273, + 541, + 507, + 47, + 291, + 153, + 99, + 40, + 150, + 132, + 1, + 10, + 16, + 0, + 0, + 16, + 0, + 0, + 0, + 0, + 128, + 7, + 7, + 0, + 5, + 0, + 7, + 7, + 7, + 1, + 2, + 0, + 7, + 4, + 0, + 0, + 4, + 0, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "OrxChannel1Index": 0, + "OrxChannel2Index": 0 + } +} +