Skip to content

Commit b17b634

Browse files
TheRogueZetaCalcProgrammer1
authored andcommitted
Test to see if Patriot Viper DRAM modules exist before performing writes
Amended to use read check as quick check doesn't work for SPD addresses by Adam Honse <[email protected]>
1 parent 46d353b commit b17b634

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

Controllers/PatriotViperController/PatriotViperControllerDetect.cpp

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,32 +37,44 @@ void DetectPatriotViperControllers(std::vector<i2c_smbus_interface*> &busses)
3737
// Test for Patriot Viper RGB SPD at slot_addr
3838
// This test was copied from Viper RGB software
3939
// Tests SPD addresses in order: 0x00, 0x40, 0x41, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68
40-
busses[bus]->i2c_smbus_write_byte_data(0x36, 0x00, 0xFF);
40+
bool pass = false;
4141

42-
std::this_thread::sleep_for(1ms);
42+
int res = busses[bus]->i2c_smbus_read_byte(slot_addr);
4343

44-
if(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x00) == 0x23)
44+
if (res >= 0)
4545
{
46-
busses[bus]->i2c_smbus_write_byte_data(0x37, 0x00, 0xFF);
46+
pass = true;
47+
}
48+
49+
if(pass)
50+
{
51+
busses[bus]->i2c_smbus_write_byte_data(0x36, 0x00, 0xFF);
4752

4853
std::this_thread::sleep_for(1ms);
4954

50-
if((busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x40) == 0x85)
51-
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x41) == 0x02)
52-
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x61) == 0x4D)
53-
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x62) == 0x49)
54-
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x63) == 0x43)
55-
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x64) == 0x53)
56-
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x65) == 0x59)
57-
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x66) == 0x53)
58-
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x67) == 0x5f)
59-
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x68) == 0x44))
55+
if(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x00) == 0x23)
6056
{
61-
slots_valid |= (1 << (slot_addr - 0x50));
57+
busses[bus]->i2c_smbus_write_byte_data(0x37, 0x00, 0xFF);
58+
59+
std::this_thread::sleep_for(1ms);
60+
61+
if((busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x40) == 0x85)
62+
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x41) == 0x02)
63+
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x61) == 0x4D)
64+
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x62) == 0x49)
65+
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x63) == 0x43)
66+
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x64) == 0x53)
67+
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x65) == 0x59)
68+
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x66) == 0x53)
69+
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x67) == 0x5f)
70+
&&(busses[bus]->i2c_smbus_read_byte_data(slot_addr, 0x68) == 0x44))
71+
{
72+
slots_valid |= (1 << (slot_addr - 0x50));
73+
}
6274
}
63-
}
6475

65-
std::this_thread::sleep_for(1ms);
76+
std::this_thread::sleep_for(1ms);
77+
}
6678
}
6779

6880
if(slots_valid != 0)

0 commit comments

Comments
 (0)