summaryrefslogtreecommitdiff
path: root/common/temp_sensor.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/temp_sensor.c')
-rw-r--r--common/temp_sensor.c42
1 files changed, 34 insertions, 8 deletions
diff --git a/common/temp_sensor.c b/common/temp_sensor.c
index 01bbd4bbe3..7b0e6dfa10 100644
--- a/common/temp_sensor.c
+++ b/common/temp_sensor.c
@@ -5,18 +5,21 @@
/* Temperature sensor module for Chrome EC */
-#include "i2c.h"
-#include "temp_sensor.h"
-#include "uart.h"
-#include "util.h"
-#include "console.h"
#include "board.h"
-#include "peci.h"
-#include "tmp006.h"
-#include "task.h"
#include "chip_temp_sensor.h"
+#include "chipset.h"
+#include "console.h"
+#include "gpio.h"
+#include "i2c.h"
#include "lpc.h"
#include "lpc_commands.h"
+#include "peci.h"
+#include "task.h"
+#include "temp_sensor.h"
+#include "thermal.h"
+#include "tmp006.h"
+#include "uart.h"
+#include "util.h"
/* Defined in board_temp_sensor.c. Must be in the same order as
* in enum temp_sensor_id.
@@ -33,6 +36,23 @@ int temp_sensor_read(enum temp_sensor_id id)
return sensor->read(sensor->idx);
}
+
+int temp_sensor_powered(enum temp_sensor_id id)
+{
+ int flag = temp_sensors[id].power_flags;
+
+ if (flag & TEMP_SENSOR_POWER_VS &&
+ gpio_get_level(GPIO_PGOOD_1_8VS) == 0)
+ return 0;
+
+ if (flag & TEMP_SENSOR_POWER_CPU &&
+ !chipset_in_state(CHIPSET_STATE_ON))
+ return 0;
+
+ return 1;
+}
+
+
void poll_all_sensors(void)
{
#ifdef CONFIG_TMP006
@@ -55,9 +75,15 @@ static void update_lpc_mapped_memory(void)
memset(mapped, 0xff, 16);
for (i = 0; i < TEMP_SENSOR_COUNT && i < 16; ++i) {
+ if (!temp_sensor_powered(i)) {
+ mapped[i] = 0xfd;
+ continue;
+ }
t = temp_sensor_read(i);
if (t != -1)
mapped[i] = t - EC_LPC_TEMP_SENSOR_OFFSET;
+ else
+ mapped[i] = 0xfe;
}
}