From f854119e01c87d83ccd9c30047915d35a17f929f Mon Sep 17 00:00:00 2001
From: Jason Abele <jason@ettus.com>
Date: Fri, 5 Nov 2010 15:27:51 -0700
Subject: Added mangling for DBSRX2 i2c addresses on USRP

---
 host/lib/usrp/dboard/db_dbsrx2.cpp | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

(limited to 'host')

diff --git a/host/lib/usrp/dboard/db_dbsrx2.cpp b/host/lib/usrp/dboard/db_dbsrx2.cpp
index b223206da..e3e0dd09b 100644
--- a/host/lib/usrp/dboard/db_dbsrx2.cpp
+++ b/host/lib/usrp/dboard/db_dbsrx2.cpp
@@ -57,7 +57,7 @@ static const uhd::dict<std::string, gain_range_t> dbsrx2_gain_ranges = map_list_
  **********************************************************************/
 class dbsrx2 : public rx_dboard_base{
 public:
-    dbsrx2(ctor_args_t args, boost::uint8_t max2112_addr);
+    dbsrx2(ctor_args_t args);
     ~dbsrx2(void);
 
     void rx_get(const wax::obj &key, wax::obj &val);
@@ -69,7 +69,9 @@ private:
     uhd::dict<std::string, float> _gains;
     max2112_write_regs_t _max2112_write_regs;
     max2112_read_regs_t _max2112_read_regs;
-    boost::uint8_t _max2112_addr; //0x60 or 0x61 depending on which side
+    boost::uint8_t _max2112_addr(){ //0x60 or 0x61 depending on which side
+        return (this->get_iface()->get_special_props().mangle_i2c_addrs)? 0x60 : 0x61;
+    }
 
     void set_lo_freq(double target_freq);
     void set_gain(float gain, const std::string &name);
@@ -98,7 +100,7 @@ private:
 
             //send the data
             this->get_iface()->write_i2c(
-                _max2112_addr, regs_vector
+                _max2112_addr(), regs_vector
             );
         }
     }
@@ -117,7 +119,7 @@ private:
 
             //send the address
             this->get_iface()->write_i2c(
-                _max2112_addr, address_vector
+                _max2112_addr(), address_vector
             );
 
             //create buffer for register data
@@ -125,7 +127,7 @@ private:
 
             //read from i2c
             regs_vector = this->get_iface()->read_i2c(
-                _max2112_addr, num_bytes
+                _max2112_addr(), num_bytes
             );
 
             for(boost::uint8_t i=0; i < num_bytes; i++){
@@ -169,7 +171,7 @@ private:
 // FIXME 0x67 is the default i2c address on USRP2
 //       need to handle which side for USRP1 with different address
 static dboard_base::sptr make_dbsrx2(dboard_base::ctor_args_t args){
-    return dboard_base::sptr(new dbsrx2(args, 0x61));
+    return dboard_base::sptr(new dbsrx2(args));
 }
 
 UHD_STATIC_BLOCK(reg_dbsrx2_dboard){
@@ -180,7 +182,7 @@ UHD_STATIC_BLOCK(reg_dbsrx2_dboard){
 /***********************************************************************
  * Structors
  **********************************************************************/
-dbsrx2::dbsrx2(ctor_args_t args, boost::uint8_t max2112_addr) : rx_dboard_base(args){
+dbsrx2::dbsrx2(ctor_args_t args) : rx_dboard_base(args){
     //enable only the clocks we need
     this->get_iface()->set_clock_enabled(dboard_iface::UNIT_RX, true);
 
@@ -188,9 +190,6 @@ dbsrx2::dbsrx2(ctor_args_t args, boost::uint8_t max2112_addr) : rx_dboard_base(a
     this->get_iface()->set_pin_ctrl(dboard_iface::UNIT_RX, 0x0); // All unused in atr
     this->get_iface()->set_gpio_ddr(dboard_iface::UNIT_RX, 0x0); // All Inputs
 
-    //set the i2c address for the max2112
-    _max2112_addr = max2112_addr;
-
     //send initial register settings
     send_reg(0x0, 0xB);
     //for (boost::uint8_t addr=0; addr<=12; addr++) this->send_reg(addr, addr);
-- 
cgit v1.2.3