aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--host/lib/usrp/dboard/zbx/zbx_cpld_ctrl.cpp10
-rw-r--r--host/tests/zbx_cpld_test.cpp20
2 files changed, 28 insertions, 2 deletions
diff --git a/host/lib/usrp/dboard/zbx/zbx_cpld_ctrl.cpp b/host/lib/usrp/dboard/zbx/zbx_cpld_ctrl.cpp
index 8899f2a18..352a7def9 100644
--- a/host/lib/usrp/dboard/zbx/zbx_cpld_ctrl.cpp
+++ b/host/lib/usrp/dboard/zbx/zbx_cpld_ctrl.cpp
@@ -273,7 +273,10 @@ void zbx_cpld_ctrl::set_tx_antenna_switches(
{tx_amp::HIGHBAND, {zbx_cpld_regs_t::TX0_ANT_11_HIGHBAND_AMP, zbx_cpld_regs_t::TX0_ANT_10_HIGHBAND_AMP}}
};
// clang-format on
- std::tie(_regs.TX0_ANT_11[idx], _regs.TX0_ANT_10[idx]) = amp_map.at(amp);
+ if (idx == ATR_ADDR_TX || idx == ATR_ADDR_XX) {
+ _regs.TX0_ANT_11[idx] = std::get<0>(amp_map.at(amp));
+ }
+ _regs.TX0_ANT_10[idx] = std::get<1>(amp_map.at(amp));
} else if (antenna == ANTENNA_CAL_LOOPBACK) {
_regs.TX0_ANT_10[idx] = zbx_cpld_regs_t::TX0_ANT_10_CAL_LOOPBACK;
_regs.RX0_ANT_1[idx] = zbx_cpld_regs_t::RX0_ANT_1_CAL_LOOPBACK;
@@ -294,7 +297,10 @@ void zbx_cpld_ctrl::set_tx_antenna_switches(
{tx_amp::HIGHBAND, {zbx_cpld_regs_t::TX1_ANT_11_HIGHBAND_AMP, zbx_cpld_regs_t::TX1_ANT_10_HIGHBAND_AMP}}
};
// clang-format on
- std::tie(_regs.TX1_ANT_11[idx], _regs.TX1_ANT_10[idx]) = amp_map.at(amp);
+ if (idx == ATR_ADDR_TX || idx == ATR_ADDR_XX) {
+ _regs.TX1_ANT_11[idx] = std::get<0>(amp_map.at(amp));
+ }
+ _regs.TX1_ANT_10[idx] = std::get<1>(amp_map.at(amp));
} else if (antenna == ANTENNA_CAL_LOOPBACK) {
_regs.TX1_ANT_10[idx] = zbx_cpld_regs_t::TX1_ANT_10_CAL_LOOPBACK;
_regs.RX1_ANT_1[idx] = zbx_cpld_regs_t::RX1_ANT_1_CAL_LOOPBACK;
diff --git a/host/tests/zbx_cpld_test.cpp b/host/tests/zbx_cpld_test.cpp
index b125e8435..861f6ccdd 100644
--- a/host/tests/zbx_cpld_test.cpp
+++ b/host/tests/zbx_cpld_test.cpp
@@ -77,6 +77,26 @@ BOOST_FIXTURE_TEST_CASE(zbx_cpld_ctrl_test, zbx_cpld_fixture)
BOOST_CHECK_EQUAL(mock_reg_iface.memory[0x1024], 0x100);
}
+BOOST_FIXTURE_TEST_CASE(zbx_tx_ant_override_rx_test, zbx_cpld_fixture)
+{
+ cpld.set_rx_antenna_switches(
+ 0, uhd::usrp::zbx::ATR_ADDR_RX, uhd::usrp::zbx::ANTENNA_TXRX);
+
+ cpld.set_tx_antenna_switches(
+ 0, ATR_ADDR_0X, uhd::usrp::zbx::ANTENNA_TXRX, tx_amp::HIGHBAND);
+ cpld.set_tx_antenna_switches(
+ 0, ATR_ADDR_RX, uhd::usrp::zbx::ANTENNA_TXRX, tx_amp::HIGHBAND);
+ cpld.set_tx_antenna_switches(
+ 0, ATR_ADDR_TX, uhd::usrp::zbx::ANTENNA_TXRX, tx_amp::HIGHBAND);
+ cpld.set_tx_antenna_switches(
+ 0, ATR_ADDR_XX, uhd::usrp::zbx::ANTENNA_TXRX, tx_amp::HIGHBAND);
+
+ // Make sure that configuring the TX antenna switches didn't disconnect the RX
+ // from the TX/RX port.
+ BOOST_CHECK_EQUAL(
+ (mock_reg_iface.memory[0x2000 + 4 * uhd::usrp::zbx::ATR_ADDR_RX] >> 20) & 0x3, 0);
+}
+
BOOST_FIXTURE_TEST_CASE(zbx_tx_amp_test, zbx_cpld_fixture)
{
cpld.set_tx_antenna_switches(