diff --git a/OpenAuraSDK/OpenAuraSDK.cpp b/OpenAuraSDK/OpenAuraSDK.cpp index 711a178ed..adaab0fee 100644 Binary files a/OpenAuraSDK/OpenAuraSDK.cpp and b/OpenAuraSDK/OpenAuraSDK.cpp differ diff --git a/OpenAuraSDK/OpenAuraSDK.vcxproj b/OpenAuraSDK/OpenAuraSDK.vcxproj index 351f9daaa..9a42de144 100644 --- a/OpenAuraSDK/OpenAuraSDK.vcxproj +++ b/OpenAuraSDK/OpenAuraSDK.vcxproj @@ -170,7 +170,6 @@ - diff --git a/OpenAuraSDK/OpenAuraSDK.vcxproj.filters b/OpenAuraSDK/OpenAuraSDK.vcxproj.filters index d7d7b34d1..bc7567ac8 100644 --- a/OpenAuraSDK/OpenAuraSDK.vcxproj.filters +++ b/OpenAuraSDK/OpenAuraSDK.vcxproj.filters @@ -15,9 +15,6 @@ - - Header Files - Header Files diff --git a/OpenAuraSDK/i2c_smbus_i801.cpp b/OpenAuraSDK/i2c_smbus_i801.cpp index 267fc6bfc..5e5e1f0a8 100644 --- a/OpenAuraSDK/i2c_smbus_i801.cpp +++ b/OpenAuraSDK/i2c_smbus_i801.cpp @@ -93,8 +93,7 @@ s32 i2c_smbus_i801::i801_access(u16 addr, char read_write, u8 command, int size, //if (hwpec) /* enable/disable hardware PEC */ // outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_CRC, SMBAUXCTL(priv)); //else - // outb_p(inb_p(SMBAUXCTL(priv)) & (~SMBAUXCTL_CRC), - // SMBAUXCTL(priv)); + Out32(SMBAUXCTL, Inp32(SMBAUXCTL) & (~SMBAUXCTL_CRC)); if (block) ret = i801_block_transaction(data, read_write, size, hwpec); @@ -105,8 +104,7 @@ s32 i2c_smbus_i801::i801_access(u16 addr, char read_write, u8 command, int size, time, so we forcibly disable it after every transaction. Turn off E32B for the same reason. */ //if (hwpec || block) - // outb_p(inb_p(SMBAUXCTL(priv)) & - // ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv)); + Out32(SMBAUXCTL, Inp32(SMBAUXCTL) & ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B)); if (block) goto out; @@ -299,6 +297,7 @@ int i2c_smbus_i801::i801_check_post(int status) /* try to stop the current command */ Out32(SMBHSTCNT, Inp32(SMBHSTCNT) | SMBHSTCNT_KILL); //usleep_range(1000, 2000); + Sleep(1); Out32(SMBHSTCNT, Inp32(SMBHSTCNT) & (~SMBHSTCNT_KILL)); Out32(SMBHSTSTS, STATUS_FLAGS); @@ -408,6 +407,7 @@ int i2c_smbus_i801::i801_transaction(int xact) if (result < 0) return result; + Out32(SMBHSTCNT, Inp32(SMBHSTCNT) & ~SMBHSTCNT_INTREN); //if (priv->features & FEATURE_IRQ) //{ // outb_p(xact | SMBHSTCNT_INTREN | SMBHSTCNT_START, @@ -441,6 +441,7 @@ int i2c_smbus_i801::i801_wait_byte_done() /* We will always wait for a fraction of a second! */ do { + Sleep(1); //usleep_range(250, 500); status = Inp32(SMBHSTSTS); } while (!(status & (STATUS_ERROR_FLAGS | SMBHSTSTS_BYTE_DONE)) && (timeout++ < MAX_RETRIES)); diff --git a/OpenAuraSDK/i2c_smbus_i801.h b/OpenAuraSDK/i2c_smbus_i801.h index aeda780c7..34f1b1e9d 100644 --- a/OpenAuraSDK/i2c_smbus_i801.h +++ b/OpenAuraSDK/i2c_smbus_i801.h @@ -30,6 +30,15 @@ #define SMBSLVCMD (17 + i801_smba) /* ICH3 and later */ #define SMBNTFDADD (20 + i801_smba) /* ICH3 and later */ + +/* Auxiliary status register bits, ICH4+ only */ +#define SMBAUXSTS_CRCE BIT(0) +#define SMBAUXSTS_STCO BIT(1) + +/* Auxiliary control register bits, ICH4+ only */ +#define SMBAUXCTL_CRC BIT(0) +#define SMBAUXCTL_E32B BIT(1) + /* Other settings */ #define MAX_RETRIES 400