struct e1000_hw *hw = &adapter->hw;
        s32 i2cctl = rd32(E1000_I2CPARAMS);
 
-       if (state)
-               i2cctl |= E1000_I2C_DATA_OUT;
-       else
+       if (state) {
+               i2cctl |= E1000_I2C_DATA_OUT | E1000_I2C_DATA_OE_N;
+       } else {
+               i2cctl &= ~E1000_I2C_DATA_OE_N;
                i2cctl &= ~E1000_I2C_DATA_OUT;
+       }
 
-       i2cctl &= ~E1000_I2C_DATA_OE_N;
-       i2cctl |= E1000_I2C_CLK_OE_N;
        wr32(E1000_I2CPARAMS, i2cctl);
        wrfl();
-
 }
 
 /**
        s32 i2cctl = rd32(E1000_I2CPARAMS);
 
        if (state) {
-               i2cctl |= E1000_I2C_CLK_OUT;
-               i2cctl &= ~E1000_I2C_CLK_OE_N;
+               i2cctl |= E1000_I2C_CLK_OUT | E1000_I2C_CLK_OE_N;
        } else {
                i2cctl &= ~E1000_I2C_CLK_OUT;
                i2cctl &= ~E1000_I2C_CLK_OE_N;
  **/
 static s32 igb_init_i2c(struct igb_adapter *adapter)
 {
+       struct e1000_hw *hw = &adapter->hw;
        s32 status = 0;
+       s32 i2cctl;
 
        /* I2C interface supported on i350 devices */
        if (adapter->hw.mac.type != e1000_i350)
                return 0;
 
+       i2cctl = rd32(E1000_I2CPARAMS);
+       i2cctl |= E1000_I2CBB_EN
+               | E1000_I2C_CLK_OUT | E1000_I2C_CLK_OE_N
+               | E1000_I2C_DATA_OUT | E1000_I2C_DATA_OE_N;
+       wr32(E1000_I2CPARAMS, i2cctl);
+       wrfl();
+
        /* Initialize the i2c bus which is controlled by the registers.
         * This bus will use the i2c_algo_bit structure that implements
         * the protocol through toggling of the 4 bits in the register.