diff options
author | Vic Yang <victoryang@google.com> | 2012-03-13 12:13:10 +0800 |
---|---|---|
committer | Vic Yang <victoryang@google.com> | 2012-03-14 13:32:02 +0800 |
commit | d2fbdfbc67ff878f000d9d51a134a097c0b8d537 (patch) | |
tree | e79b85e8ee90228cc0d5044b06f1ff97bd2887ca /common/temp_sensor.c | |
parent | 386f4618f38e47b3f38e99b47fb2dd35ce670c04 (diff) | |
download | chrome-ec-d2fbdfbc67ff878f000d9d51a134a097c0b8d537.tar.gz |
Temp sensor report 0xfd on sensor unpowered.
Make temp sensor report 0xfd when sensor is unpowered.
Also refactor power specification of temp sensors from thermal.c to
temp_sensor.c.
Signed-off-by: Vic Yang <victoryang@google.com>
BUG=chrome-os-partner:8279
TEST=none
Change-Id: Ib13813bdbac2f048fbc3b98fae5bbf104ebf37d7
Diffstat (limited to 'common/temp_sensor.c')
-rw-r--r-- | common/temp_sensor.c | 42 |
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; } } |