Merge commit 'v3.3.1' into try-3.3.1
[debian/gnuradio] / usrp2 / firmware / lib / u2_init.c
index 3a8961374c00a384344970c11968bacc5ccf3b39..9a1eb16512cb9ec9e2ab41b8a28b18795ee19ff4 100644 (file)
@@ -44,7 +44,6 @@ get_hw_rev(void)
   ok &= eeprom_read(I2C_ADDR_MBOARD, MBOARD_REV_MSB, &u2_hw_rev_major, 1);
 }
 
-
 /*
  * We ought to arrange for this to be called before main, but for now,
  * we require that the user's main call u2_init as the first thing...
@@ -52,22 +51,28 @@ get_hw_rev(void)
 bool
 u2_init(void)
 {
-  // Set GPIOs to inputs
+  // Set GPIOs to inputs, disable GPIO streaming
   hal_gpio_set_ddr(GPIO_TX_BANK, 0x0000, 0xffff);
   hal_gpio_set_ddr(GPIO_RX_BANK, 0x0000, 0xffff);
 
   hal_gpio_write(GPIO_TX_BANK, 0x0000, 0xffff);        // init s/w output value to zero
   hal_gpio_write(GPIO_RX_BANK, 0x0000, 0xffff);
 
+  dsp_rx_regs->gpio_stream_enable = 0; // I, Q LSBs come from DSP
+
   hal_io_init();
 
   // init spi, so that we can switch over to the high-speed clock
   spi_init();
 
+  // init i2c so we can read our rev
+  i2c_init();
+  get_hw_rev();
+
   // set up the default clocks
   clocks_init();
 
-  // clocks_enable_test_clk(true);
+  // clocks_enable_test_clk(true,1);
 
   // Enable ADCs
   output_regs->adc_ctrl = ADC_CTRL_ON;
@@ -87,18 +92,19 @@ u2_init(void)
   ad9777_write_reg(11, 0);     // Q dac offset
   ad9777_write_reg(12, 0);
   
+  // Initial values for tx and rx mux registers
+  dsp_tx_regs->tx_mux = 0x10;
+  dsp_rx_regs->rx_mux = 0x44444444;
+
   // Set up serdes
   output_regs->serdes_ctrl = (SERDES_ENABLE | SERDES_RXEN);
 
   pic_init();  // progammable interrupt controller
   bp_init();   // buffer pool
-  i2c_init();
   lsadc_init();            // low-speed ADCs
   lsdac_init();            // low-speed DACs
   db_init();       // daughterboard init
   
-  get_hw_rev();
-
   hal_enable_ints();
 
   // flash all leds to let us know board is alive