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
						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 }; | ||||
|  | ||||
| // Tjunction = 100C for i7-8565U (and probably the same for all WHL-U) | ||||
| #define T_JUNCTION 100 | ||||
|  | ||||
| bool peci_on = false; | ||||
| int16_t peci_temp = 0; | ||||
|  | ||||
| #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 | ||||
| #define PECI_ESPI_TIMEOUT 10 | ||||
|  | ||||
| @@ -159,9 +159,12 @@ bool peci_get_temp(int16_t *const data) { | ||||
|         // Received enough data for temperature | ||||
|         uint8_t low = PUTOOBDB[5]; | ||||
|         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 | ||||
|         ESOCTRL0 = ESOCTRL0_STATUS; | ||||
|  | ||||
|         return true; | ||||
|     } else { | ||||
|         // Did not receive enough data | ||||
| @@ -328,16 +331,17 @@ bool peci_get_temp(int16_t *const data) { | ||||
|         // Clear status | ||||
|         HOSTAR = HOSTAR; | ||||
|         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 | ||||
| @@ -422,10 +426,8 @@ uint8_t peci_get_fan_duty(void) { | ||||
|  | ||||
|     peci_on = peci_available(); | ||||
|     if (peci_on) { | ||||
|         int16_t peci_offset = 0; | ||||
|         if (peci_get_temp(&peci_offset)) { | ||||
|         if (peci_get_temp(&peci_temp)) { | ||||
|             // Use result if finished successfully | ||||
|             peci_temp = PECI_TEMP(T_JUNCTION) + (peci_offset >> 6); | ||||
|             duty = fan_duty(&FAN, peci_temp); | ||||
|         } else { | ||||
|             // Default to 50% if there is an error | ||||
|   | ||||
		Reference in New Issue
	
	Block a user