diff options
Diffstat (limited to 'host/lib/usrp')
| -rw-r--r-- | host/lib/usrp/multi_usrp.cpp | 20 | 
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;      }  | 
