aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib')
-rw-r--r--host/lib/usrp/multi_usrp.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp
index e0811e667..b5df54a65 100644
--- a/host/lib/usrp/multi_usrp.cpp
+++ b/host/lib/usrp/multi_usrp.cpp
@@ -809,10 +809,28 @@ public:
}
tune_result_t set_rx_freq(const tune_request_t &tune_request, size_t chan){
+ tune_request_t local_request = tune_request;
+
+ // If any mixer is driven by an external LO the daughterboard assumes that no CORDIC correction is
+ // necessary. Since the LO might be sourced from another daughterboard which would normally apply a
+ // cordic correction we must disable all DSP tuning to ensure identical configurations across daughterboards.
+ if (tune_request.dsp_freq_policy == tune_request.POLICY_AUTO and
+ tune_request.rf_freq_policy == tune_request.POLICY_AUTO)
+ {
+ for (size_t c = 0; c < get_rx_num_channels(); c++) {
+ UHD_VAR(get_rx_lo_source(ALL_LOS, c));
+ if (get_rx_lo_source(ALL_LOS, c) == "external") {
+ local_request.dsp_freq_policy = tune_request.POLICY_MANUAL;
+ local_request.dsp_freq = 0;
+ break;
+ }
+ }
+ }
+
tune_result_t result = tune_xx_subdev_and_dsp(RX_SIGN,
_tree->subtree(rx_dsp_root(chan)),
_tree->subtree(rx_rf_fe_root(chan)),
- tune_request);
+ local_request);
//do_tune_freq_results_message(tune_request, result, get_rx_freq(chan), "RX");
return result;
}