summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerrit <chrome-bot@google.com>2012-03-14 00:34:03 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2012-03-14 00:34:03 -0700
commita7b90e65b4d38234d3d6ff4bc546ab250f727582 (patch)
tree6d3210a7354552b95c3a72d95c90d6b01a0a28f6
parent20fcd29d424fdaefb30dff61cd4857d9ece3ee24 (diff)
parentd2fbdfbc67ff878f000d9d51a134a097c0b8d537 (diff)
downloadchrome-ec-a7b90e65b4d38234d3d6ff4bc546ab250f727582.tar.gz
Merge "Temp sensor report 0xfd on sensor unpowered."
-rw-r--r--board/bds/board_temp_sensor.c6
-rw-r--r--board/link/board_temp_sensor.c20
-rw-r--r--board/link/board_thermal.c18
-rw-r--r--common/temp_sensor.c42
-rw-r--r--common/thermal.c7
-rw-r--r--include/temp_sensor.h9
-rw-r--r--include/thermal.h2
-rw-r--r--util/ectool.c3
8 files changed, 69 insertions, 38 deletions
diff --git a/board/bds/board_temp_sensor.c b/board/bds/board_temp_sensor.c
index 5bc9a154f5..0a10178e8e 100644
--- a/board/bds/board_temp_sensor.c
+++ b/board/bds/board_temp_sensor.c
@@ -20,9 +20,9 @@
* temp_sensor_id.
*/
const struct temp_sensor_t temp_sensors[TEMP_SENSOR_COUNT] = {
- {"ECInternal", chip_temp_sensor_get_val, 0},
- {"CaseDie", tmp006_get_val, 0},
- {"Object", tmp006_get_val, 0},
+ {"ECInternal", TEMP_SENSOR_POWER_NONE, chip_temp_sensor_get_val, 0},
+ {"CaseDie", TEMP_SENSOR_POWER_VS, tmp006_get_val, 0},
+ {"Object", TEMP_SENSOR_POWER_VS, tmp006_get_val, 0},
};
const struct tmp006_t tmp006_sensors[TMP006_COUNT] = {
diff --git a/board/link/board_temp_sensor.c b/board/link/board_temp_sensor.c
index f8d3f93c2c..29a61bfcaa 100644
--- a/board/link/board_temp_sensor.c
+++ b/board/link/board_temp_sensor.c
@@ -27,16 +27,16 @@
* temp_sensor_id.
*/
const struct temp_sensor_t temp_sensors[TEMP_SENSOR_COUNT] = {
- {"I2C_CPU-Die", tmp006_get_val, 0},
- {"I2C_CPU-Object", tmp006_get_val, 1},
- {"I2C_PCH-Die", tmp006_get_val, 2},
- {"I2C_PCH-Object", tmp006_get_val, 3},
- {"I2C_DDR-Die", tmp006_get_val, 4},
- {"I2C_DDR-Object", tmp006_get_val, 5},
- {"I2C_Charger-Die", tmp006_get_val, 6},
- {"I2C_Charger-Object", tmp006_get_val, 7},
- {"ECInternal", chip_temp_sensor_get_val, 0},
- {"PECI", peci_temp_sensor_get_val, 0},
+ {"I2C_CPU-Die", TEMP_SENSOR_POWER_VS, tmp006_get_val, 0},
+ {"I2C_CPU-Object", TEMP_SENSOR_POWER_VS, tmp006_get_val, 1},
+ {"I2C_PCH-Die", TEMP_SENSOR_POWER_VS, tmp006_get_val, 2},
+ {"I2C_PCH-Object", TEMP_SENSOR_POWER_VS, tmp006_get_val, 3},
+ {"I2C_DDR-Die", TEMP_SENSOR_POWER_VS, tmp006_get_val, 4},
+ {"I2C_DDR-Object", TEMP_SENSOR_POWER_VS, tmp006_get_val, 5},
+ {"I2C_Charger-Die", TEMP_SENSOR_POWER_VS, tmp006_get_val, 6},
+ {"I2C_Charger-Object", TEMP_SENSOR_POWER_VS, tmp006_get_val, 7},
+ {"ECInternal", TEMP_SENSOR_POWER_NONE, chip_temp_sensor_get_val, 0},
+ {"PECI", TEMP_SENSOR_POWER_CPU, peci_temp_sensor_get_val, 0},
};
const struct tmp006_t tmp006_sensors[TMP006_COUNT] = {
diff --git a/board/link/board_thermal.c b/board/link/board_thermal.c
index 4b96f1f5f5..f8a024c84a 100644
--- a/board/link/board_thermal.c
+++ b/board/link/board_thermal.c
@@ -10,28 +10,28 @@
struct thermal_config_t thermal_config[TEMP_SENSOR_COUNT] = {
/* I2C_CPU-Die */
- {THERMAL_CONFIG_NEED_VS, {THERMAL_THRESHOLD_DISABLE_ALL}},
+ {THERMAL_CONFIG_NO_FLAG, {THERMAL_THRESHOLD_DISABLE_ALL}},
/* I2C_CPU-Object */
- {THERMAL_CONFIG_NEED_VS, {313, 323, 343, 353, 358}},
+ {THERMAL_CONFIG_NO_FLAG, {313, 323, 343, 353, 358}},
/* I2C_PCH-Die */
- {THERMAL_CONFIG_NEED_VS, {THERMAL_THRESHOLD_DISABLE_ALL}},
+ {THERMAL_CONFIG_NO_FLAG, {THERMAL_THRESHOLD_DISABLE_ALL}},
/* I2C_PCH-Object */
- {THERMAL_CONFIG_NEED_VS, {THERMAL_THRESHOLD_DISABLE,
+ {THERMAL_CONFIG_NO_FLAG, {THERMAL_THRESHOLD_DISABLE,
THERMAL_THRESHOLD_DISABLE, 343, THERMAL_THRESHOLD_DISABLE, 358}},
/* I2C_DDR-Die */
- {THERMAL_CONFIG_NEED_VS, {THERMAL_THRESHOLD_DISABLE_ALL}},
+ {THERMAL_CONFIG_NO_FLAG, {THERMAL_THRESHOLD_DISABLE_ALL}},
/* I2C_DDR-Object */
- {THERMAL_CONFIG_NEED_VS, {THERMAL_THRESHOLD_DISABLE,
+ {THERMAL_CONFIG_NO_FLAG, {THERMAL_THRESHOLD_DISABLE,
THERMAL_THRESHOLD_DISABLE, 343, THERMAL_THRESHOLD_DISABLE, 358}},
/* I2C_Charger-Die */
- {THERMAL_CONFIG_NEED_VS, {THERMAL_THRESHOLD_DISABLE_ALL}},
+ {THERMAL_CONFIG_NO_FLAG, {THERMAL_THRESHOLD_DISABLE_ALL}},
/* I2C_Charger-Object */
- {THERMAL_CONFIG_NEED_VS, {THERMAL_THRESHOLD_DISABLE,
+ {THERMAL_CONFIG_NO_FLAG, {THERMAL_THRESHOLD_DISABLE,
THERMAL_THRESHOLD_DISABLE, 343, THERMAL_THRESHOLD_DISABLE, 358}},
/* ECInternal */
{THERMAL_CONFIG_NO_FLAG, {THERMAL_THRESHOLD_DISABLE,
THERMAL_THRESHOLD_DISABLE, 343, THERMAL_THRESHOLD_DISABLE, 373}},
/* PECI */
- {THERMAL_CONFIG_WARNING_ON_FAIL | THERMAL_CONFIG_NEED_CPU,
+ {THERMAL_CONFIG_WARNING_ON_FAIL,
{328, 338, 343, 348, 353}},
};
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;
}
}
diff --git a/common/thermal.c b/common/thermal.c
index 6e525fda6e..bd32f73535 100644
--- a/common/thermal.c
+++ b/common/thermal.c
@@ -140,12 +140,7 @@ static void thermal_process(void)
for (i = 0; i < TEMP_SENSOR_COUNT; ++i) {
int flag = thermal_config[i].config_flags;
- if (flag & THERMAL_CONFIG_NEED_VS &&
- gpio_get_level(GPIO_PGOOD_1_8VS) == 0)
- continue;
-
- if (flag & THERMAL_CONFIG_NEED_CPU &&
- !chipset_in_state(CHIPSET_STATE_ON))
+ if (!temp_sensor_powered(i))
continue;
cur_temp = temp_sensor_read(i);
diff --git a/include/temp_sensor.h b/include/temp_sensor.h
index b20c77fe88..f6051824ee 100644
--- a/include/temp_sensor.h
+++ b/include/temp_sensor.h
@@ -11,11 +11,17 @@
#include "common.h"
#include "board.h"
+#define TEMP_SENSOR_POWER_NONE 0x0
+#define TEMP_SENSOR_POWER_VS 0x1
+#define TEMP_SENSOR_POWER_CPU 0x2
+
/* "enum temp_sensor_id" must be defined for each board in board.h. */
enum temp_sensor_id;
struct temp_sensor_t {
const char* name;
+ /* Flags indicating power needed by temp sensor. */
+ int8_t power_flags;
/* Read sensor value and return temperature in K. */
int (*read)(int idx);
/* Index among the same kind of sensors. */
@@ -29,4 +35,7 @@ int temp_sensor_init(void);
* or -1 if error. */
int temp_sensor_read(enum temp_sensor_id id);
+/* Return non-zero if sensor is powered. */
+int temp_sensor_powered(enum temp_sensor_id id);
+
#endif /* __CROS_EC_TEMP_SENSOR_H */
diff --git a/include/thermal.h b/include/thermal.h
index 0998b70fcc..a2c26d9d4d 100644
--- a/include/thermal.h
+++ b/include/thermal.h
@@ -12,8 +12,6 @@
#define THERMAL_CONFIG_NO_FLAG 0x0
#define THERMAL_CONFIG_WARNING_ON_FAIL 0x1
-#define THERMAL_CONFIG_NEED_VS 0x2
-#define THERMAL_CONFIG_NEED_CPU 0x4
/* Set a threshold temperature to this value to disable the threshold limit. */
#define THERMAL_THRESHOLD_DISABLE 0
diff --git a/util/ectool.c b/util/ectool.c
index d2c509958c..091bf01fec 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -598,6 +598,9 @@ int cmd_temperature(int argc, char *argv[])
} else if (rv == 0xfe) {
printf("Error\n");
return -1;
+ } else if (rv == 0xfd) {
+ printf("Sensor disabled/unpowered\n");
+ return -1;
} else {
printf("%d\n", rv + EC_LPC_TEMP_SENSOR_OFFSET);
return 0;