Not getting any response from GY-50 L3G4200D gyroscope

I just got this gyroscope sensor Arduino Compatible 3-axis Gyroscope/Gyro Sensor Module

I followed this tutorial http://bildr.org/2011/06/l3g4200d-arduino/ , but I cannot get any data or response from the device.

I also ran the I2C Scanner and it didn't find any devices.

The connections are:
3.3v --- SDO , VCC, CS
A4 --- SCL
A5 --- SDA
GND --- GND

Here's the code I used:

#include<Wire.h>
#define CTRL_REG1 0x20
#define CTRL_REG2 0x21
#define CTRL_REG3 0x22
#define CTRL_REG4 0x23
#define CTRL_REG5 0x24

int L3G4200D_Address = 105; //I2C address of the L3G4200D

int x;
int y;
int z;

void setup(){
  Wire.begin();
  Serial.begin(9600);
  
  Serial.println("starting up L3G4200D");
  setupL3G4200D(2000); // Configure L3G4200 – 250, 500 or 2000 deg/sec
  
  delay(1500); //wait for the sensor to be ready
}

void loop(){
  getGyroValues(); // This will update x, y, and z with new values
  
  Serial.print("X:");
  Serial.print(x);
  
  Serial.print(" Y:");
  Serial.print(y);
  
  Serial.print(" Z:");
  Serial.println(z);
  
  delay(500); //Just here to slow down the serial to make it more readable
}

void getGyroValues(){
  byte xMSB = readRegister(L3G4200D_Address, 0x29);
  byte xLSB = readRegister(L3G4200D_Address, 0x28);
  x = ((xMSB << 8) | xLSB); 
  byte yMSB = readRegister(L3G4200D_Address, 0x2B); 
  byte yLSB = readRegister(L3G4200D_Address, 0x2A); 
  y = ((yMSB << 8) | yLSB); 
  byte zMSB = readRegister(L3G4200D_Address, 0x2D); 
  byte zLSB = readRegister(L3G4200D_Address, 0x2C); 
  z = ((zMSB << 8) | zLSB); 
} 

int setupL3G4200D(int scale){ //From Jim Lindblom of Sparkfun's code 
  // Enable x, y, z and turn off power down: 
  writeRegister(L3G4200D_Address, CTRL_REG1, 0b00001111); 
  // If you'd like to adjust/use the HPF, you can edit the line below to configure CTRL_REG2: 
  writeRegister(L3G4200D_Address, CTRL_REG2, 0b00000000); 
  // Configure CTRL_REG3 to generate data ready interrupt on INT2 
  // No interrupts used on INT1, if you'd like to configure INT1 
  // or INT2 otherwise, consult the datasheet: 
  writeRegister(L3G4200D_Address, CTRL_REG3, 0b00001000); 
  // CTRL_REG4 controls the full-scale range, among other things: 
  if(scale == 250){ 
    writeRegister(L3G4200D_Address, CTRL_REG4, 0b00000000); 
    }
    else if(scale == 500){ 
      writeRegister(L3G4200D_Address, CTRL_REG4, 0b00010000); 
    }
    else{ 
      writeRegister(L3G4200D_Address, CTRL_REG4, 0b00110000); 
     } 
   // CTRL_REG5 controls high-pass filtering of outputs, use it 
   // if you'd like: 
   writeRegister(L3G4200D_Address, CTRL_REG5, 0b00000000); 
} 

void writeRegister(int deviceAddress, byte address, byte val) { 
  Wire.beginTransmission(deviceAddress); // start transmission to device  
  Wire.write(address); // send register address 
  Wire.write(val); // send value to write 
  Wire.endTransmission(); // end transmission 
} 

int readRegister(int deviceAddress, byte address){ 
  int v; 
  Wire.beginTransmission(deviceAddress); 
  Wire.write(address); // register to read 
  Wire.endTransmission(); 
  if (Wire.requestFrom(deviceAddress, 1) != 1) // Read a byte
      return -1;  // error
  return Wire.read ();  // return data
}

When I run it I just get -1's, because Wire.requestFrom(deviceAddress, 1) returns an error.
Possibly I do not have the right address, but if that was the case, wouldn't the I2C scanner have found the right address?

I would appreciate any help.