From 08ab1925be4bccf47ca10b121a076b350bc8e79e Mon Sep 17 00:00:00 2001 From: mattprost Date: Thu, 24 Feb 2022 11:45:49 -0600 Subject: N310: Deactivate frontend components on radio shutdown Make sure no active components are connected to the TX frontend during next boot. This avoids configurations that could generate unwanted tones during operations such as the Mykonos init cals. Signed-off-by: mattprost --- .../dboard/magnesium/magnesium_radio_control.cpp | 6 ++++++ .../dboard/magnesium/magnesium_radio_control.hpp | 6 ++++++ .../magnesium/magnesium_radio_control_cpld.cpp | 23 ++++++++++++++++++++++ 3 files changed, 35 insertions(+) (limited to 'host/lib/usrp') diff --git a/host/lib/usrp/dboard/magnesium/magnesium_radio_control.cpp b/host/lib/usrp/dboard/magnesium/magnesium_radio_control.cpp index 637d85d49..a2de485e3 100644 --- a/host/lib/usrp/dboard/magnesium/magnesium_radio_control.cpp +++ b/host/lib/usrp/dboard/magnesium/magnesium_radio_control.cpp @@ -129,6 +129,12 @@ magnesium_radio_control_impl::magnesium_radio_control_impl(make_args_ptr make_ar _init_prop_tree(); } +void magnesium_radio_control_impl::deinit() +{ + RFNOC_LOG_TRACE("magnesium_radio_control_impl::deinit()"); + _reset_tx_frontend(magnesium_cpld_ctrl::BOTH); +} + magnesium_radio_control_impl::~magnesium_radio_control_impl() { RFNOC_LOG_TRACE("magnesium_radio_control_impl::dtor() "); diff --git a/host/lib/usrp/dboard/magnesium/magnesium_radio_control.hpp b/host/lib/usrp/dboard/magnesium/magnesium_radio_control.hpp index f80f75f00..edc417cfe 100644 --- a/host/lib/usrp/dboard/magnesium/magnesium_radio_control.hpp +++ b/host/lib/usrp/dboard/magnesium/magnesium_radio_control.hpp @@ -67,6 +67,9 @@ public: * Structors ***********************************************************************/ magnesium_radio_control_impl(make_args_ptr make_args); + + void deinit() override; + ~magnesium_radio_control_impl() override; /************************************************************************ @@ -270,6 +273,9 @@ private: const double freq, const size_t chan); + //! Deactivate idle-state TX frontend components + void _reset_tx_frontend(const magnesium_cpld_ctrl::chan_sel_t chan_sel); + /************************************************************************** * Private attributes *************************************************************************/ diff --git a/host/lib/usrp/dboard/magnesium/magnesium_radio_control_cpld.cpp b/host/lib/usrp/dboard/magnesium/magnesium_radio_control_cpld.cpp index a4decdaaa..2edfa50bd 100644 --- a/host/lib/usrp/dboard/magnesium/magnesium_radio_control_cpld.cpp +++ b/host/lib/usrp/dboard/magnesium/magnesium_radio_control_cpld.cpp @@ -294,3 +294,26 @@ void magnesium_radio_control_impl::_update_tx_freq_switches(const double freq, enable_lowband_mixer, magnesium_cpld_ctrl::ON); } + +void magnesium_radio_control_impl::_reset_tx_frontend( + const magnesium_cpld_ctrl::chan_sel_t chan_sel) +{ + RFNOC_LOG_TRACE("magnesium_radio_control_impl::_reset_tx_frontend()"); + + // Deactivate idle state frontend components + _cpld->set_tx_switches(chan_sel, + magnesium_cpld_ctrl::TX_SW1_SHUTDOWNTXSW1, + magnesium_cpld_ctrl::TX_SW2_TOTXFILTERLP3400MHZ, + magnesium_cpld_ctrl::TX_SW3_BYPASSPATHTOTRXSW, + magnesium_cpld_ctrl::LOWBAND_MIXER_PATH_SEL_BYPASS, + false, // disable lowband mixer + magnesium_cpld_ctrl::IDLE, + true); + _cpld->set_tx_atr_bits(chan_sel, + magnesium_cpld_ctrl::IDLE, + false, // disable LED + false, // disable PA + false, // disable AMP + true // enable Mykonos + ); +} -- cgit v1.2.3