peci: Perform offset calculation in temp function
Have peci_get_temp() return the actual temp instead of the offset, requiring the caller to make another calculation for the temp. Signed-off-by: Tim Crawford <tcrawford@system76.com>
This commit is contained in:
committed by
Tim Crawford
parent
8f88c0c7aa
commit
e01536005a
@ -25,14 +25,14 @@ static uint8_t FAN_HEATUP[BOARD_HEATUP] = { 0 };
|
|||||||
|
|
||||||
static uint8_t FAN_COOLDOWN[BOARD_COOLDOWN] = { 0 };
|
static uint8_t FAN_COOLDOWN[BOARD_COOLDOWN] = { 0 };
|
||||||
|
|
||||||
// Tjunction = 100C for i7-8565U (and probably the same for all WHL-U)
|
|
||||||
#define T_JUNCTION 100
|
|
||||||
|
|
||||||
bool peci_on = false;
|
bool peci_on = false;
|
||||||
int16_t peci_temp = 0;
|
int16_t peci_temp = 0;
|
||||||
|
|
||||||
#define PECI_TEMP(X) ((int16_t)(X))
|
#define PECI_TEMP(X) ((int16_t)(X))
|
||||||
|
|
||||||
|
// Tjunction = 100C for i7-8565U (and probably the same for all WHL-U)
|
||||||
|
#define T_JUNCTION PECI_TEMP(100)
|
||||||
|
|
||||||
// Maximum OOB channel response time in ms
|
// Maximum OOB channel response time in ms
|
||||||
#define PECI_ESPI_TIMEOUT 10
|
#define PECI_ESPI_TIMEOUT 10
|
||||||
|
|
||||||
@ -159,9 +159,12 @@ bool peci_get_temp(int16_t *const data) {
|
|||||||
// Received enough data for temperature
|
// Received enough data for temperature
|
||||||
uint8_t low = PUTOOBDB[5];
|
uint8_t low = PUTOOBDB[5];
|
||||||
uint8_t high = PUTOOBDB[6];
|
uint8_t high = PUTOOBDB[6];
|
||||||
*data = (((int16_t)high << 8) | (int16_t)low);
|
int16_t offset = (((int16_t)high << 8) | (int16_t)low);
|
||||||
|
*data = T_JUNCTION + (offset >> 6);
|
||||||
|
|
||||||
// Clear PUT_OOB status
|
// Clear PUT_OOB status
|
||||||
ESOCTRL0 = ESOCTRL0_STATUS;
|
ESOCTRL0 = ESOCTRL0_STATUS;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
// Did not receive enough data
|
// Did not receive enough data
|
||||||
@ -328,16 +331,17 @@ bool peci_get_temp(int16_t *const data) {
|
|||||||
// Clear status
|
// Clear status
|
||||||
HOSTAR = HOSTAR;
|
HOSTAR = HOSTAR;
|
||||||
return false;
|
return false;
|
||||||
} else {
|
|
||||||
// Read two byte temperature data if finished successfully
|
|
||||||
uint8_t low = HORDDR;
|
|
||||||
uint8_t high = HORDDR;
|
|
||||||
*data = (((int16_t)high << 8) | (int16_t)low);
|
|
||||||
|
|
||||||
// Clear status
|
|
||||||
HOSTAR = HOSTAR;
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Read two byte temperature data if finished successfully
|
||||||
|
uint8_t low = HORDDR;
|
||||||
|
uint8_t high = HORDDR;
|
||||||
|
int16_t offset = (((int16_t)high << 8) | (int16_t)low);
|
||||||
|
*data = T_JUNCTION + (offset >> 6);
|
||||||
|
|
||||||
|
// Clear status
|
||||||
|
HOSTAR = HOSTAR;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns positive completion code on success, negative completion code or
|
// Returns positive completion code on success, negative completion code or
|
||||||
@ -422,10 +426,8 @@ uint8_t peci_get_fan_duty(void) {
|
|||||||
|
|
||||||
peci_on = peci_available();
|
peci_on = peci_available();
|
||||||
if (peci_on) {
|
if (peci_on) {
|
||||||
int16_t peci_offset = 0;
|
if (peci_get_temp(&peci_temp)) {
|
||||||
if (peci_get_temp(&peci_offset)) {
|
|
||||||
// Use result if finished successfully
|
// Use result if finished successfully
|
||||||
peci_temp = PECI_TEMP(T_JUNCTION) + (peci_offset >> 6);
|
|
||||||
duty = fan_duty(&FAN, peci_temp);
|
duty = fan_duty(&FAN, peci_temp);
|
||||||
} else {
|
} else {
|
||||||
// Default to 50% if there is an error
|
// Default to 50% if there is an error
|
||||||
|
Reference in New Issue
Block a user