diff --git a/Controllers/GigabyteRGBFusionGPUController/GigabyteRGBFusionGPUControllerDetect.cpp b/Controllers/GigabyteRGBFusionGPUController/GigabyteRGBFusionGPUControllerDetect.cpp index 08cf5a556..514cdcdb5 100644 --- a/Controllers/GigabyteRGBFusionGPUController/GigabyteRGBFusionGPUControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusionGPUController/GigabyteRGBFusionGPUControllerDetect.cpp @@ -42,33 +42,69 @@ bool TestForGigabyteRGBFusionGPUController(i2c_smbus_interface* bus, unsigned ch bool pass = false; int res; - //Write out 0xAB 0x00 0x00 0x00 sequence - res = bus->i2c_smbus_write_byte(address, 0xAB); - - if (res >= 0) + switch(address) { - bus->i2c_smbus_write_byte(address, 0x00); - bus->i2c_smbus_write_byte(address, 0x00); - bus->i2c_smbus_write_byte(address, 0x00); + case 0x47: + //Write out 0xAB 0x00 0x00 0x00 sequence + res = bus->i2c_smbus_write_byte(address, 0xAB); - pass = true; + if (res >= 0) + { + bus->i2c_smbus_write_byte(address, 0x00); + bus->i2c_smbus_write_byte(address, 0x00); + bus->i2c_smbus_write_byte(address, 0x00); - res = bus->i2c_smbus_read_byte(address); + pass = true; - if (res != 0xAB) - { - pass = false; - } + res = bus->i2c_smbus_read_byte(address); - res = bus->i2c_smbus_read_byte(address); + if (res != 0xAB) + { + pass = false; + } - if(res != 0x14) - { - pass = false; - } + res = bus->i2c_smbus_read_byte(address); - bus->i2c_smbus_read_byte(address); - bus->i2c_smbus_read_byte(address); + if(res != 0x14) + { + pass = false; + } + + bus->i2c_smbus_read_byte(address); + bus->i2c_smbus_read_byte(address); + } + break; + + case 0x48: + //Write out 0xCC 0x01 0x00 0x00 sequence + res = bus->i2c_smbus_write_byte(address, 0xCC); + + if (res >= 0) + { + bus->i2c_smbus_write_byte(address, 0x01); + bus->i2c_smbus_write_byte(address, 0x00); + bus->i2c_smbus_write_byte(address, 0x00); + + pass = true; + + res = bus->i2c_smbus_read_byte(address); + + if (res != 0xCC) + { + pass = false; + } + + res = bus->i2c_smbus_read_byte(address); + + if(res != 0x01) + { + pass = false; + } + + bus->i2c_smbus_read_byte(address); + bus->i2c_smbus_read_byte(address); + } + break; } return(pass);