summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVic Yang <victoryang@google.com>2012-01-12 17:02:10 +0800
committerVic Yang <victoryang@google.com>2012-02-04 14:37:04 +0800
commit000a6d57423e96ffaa2061bd764b8141ea46bb8e (patch)
tree528dd0d5f798101470a1d45f9480bc7b2ecebcb0
parent249467b9f291e2b10a7aafdbb584c68c8b0a4e88 (diff)
downloadchrome-ec-000a6d57423e96ffaa2061bd764b8141ea46bb8e.tar.gz
Refactor temperature sensor code and add support of Link I2C temp sensor.
Refactor board/chip-specific code into corresponding directories. Add support of the four I2C temp sensor in Link. Use table lookup to handle different types of temperature sensors. BUG=chrome-os-partner:7527 TEST=Correctly read EC internal temperature on bds. Compile for link succeeded. Change-Id: I694cfa54e1545798d877fafdf18c5585ab5f03e2
-rw-r--r--board/bds/board.h7
-rw-r--r--board/bds/board_temp_sensor.c22
-rw-r--r--board/bds/build.mk1
-rw-r--r--board/link/board.h17
-rw-r--r--board/link/board_temp_sensor.c37
-rw-r--r--board/link/build.mk1
-rw-r--r--chip/lm4/build.mk3
-rw-r--r--chip/lm4/charger.c96
-rw-r--r--chip/lm4/chip_temp_sensor.c24
-rw-r--r--chip/lm4/config.h1
-rw-r--r--common/build.mk2
-rw-r--r--common/main.c5
-rw-r--r--common/temp_sensor.c142
-rw-r--r--include/charger.h13
-rw-r--r--include/chip_temp_sensor.h20
-rw-r--r--include/temp_sensor.h39
-rw-r--r--util/ectool.c39
17 files changed, 440 insertions, 29 deletions
diff --git a/board/bds/board.h b/board/bds/board.h
index fbd4f153ca..e5cab1f212 100644
--- a/board/bds/board.h
+++ b/board/bds/board.h
@@ -117,6 +117,13 @@ enum gpio_signal {
GPIO_COUNT
};
+enum temp_sensor_id {
+ TEMP_SENSOR_EC_INTERNAL = 0, /* EC internal temperature sensor */
+ TEMP_SENSOR_CASE_DIE,
+
+ TEMP_SENSOR_COUNT
+};
+
void configure_board(void);
#endif /* __BOARD_H */
diff --git a/board/bds/board_temp_sensor.c b/board/bds/board_temp_sensor.c
new file mode 100644
index 0000000000..709ca8226a
--- /dev/null
+++ b/board/bds/board_temp_sensor.c
@@ -0,0 +1,22 @@
+/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* BDS-specific temp sensor module for Chrome EC */
+
+#include "temp_sensor.h"
+#include "chip_temp_sensor.h"
+#include "board.h"
+#include "i2c.h"
+
+#define TEMP_CASE_DIE_REG_ADDR ((0x40 << 1) | I2C_FLAG_BIG_ENDIAN)
+#define TEMP_CASE_DIE_ADDR \
+ TMP006_ADDR(I2C_PORT_THERMAL, TEMP_CASE_DIE_REG_ADDR)
+
+const struct temp_sensor_t temp_sensors[TEMP_SENSOR_COUNT] = {
+ {"ECInternal", TEMP_SENSOR_EC_INTERNAL, TEMP_SENSOR_NO_ADDR,
+ chip_temp_sensor_read, TEMP_SENSOR_NO_PRINT},
+ {"CaseDie", TEMP_SENSOR_CASE_DIE, TEMP_CASE_DIE_ADDR,
+ temp_sensor_tmp006_read, temp_sensor_tmp006_print}
+};
diff --git a/board/bds/build.mk b/board/bds/build.mk
index d026221342..c3fae48c4b 100644
--- a/board/bds/build.mk
+++ b/board/bds/build.mk
@@ -5,3 +5,4 @@
CHIP:=lm4
board-y=board.o
+board-$(CONFIG_TEMP_SENSOR)+=board_temp_sensor.o
diff --git a/board/link/board.h b/board/link/board.h
index 0387bc45fc..e9917a0932 100644
--- a/board/link/board.h
+++ b/board/link/board.h
@@ -138,6 +138,23 @@ enum gpio_signal {
GPIO_COUNT
};
+enum temp_sensor_id {
+ /* I2C die temperature sensor near CPU */
+ TEMP_SENSOR_I2C_DIE_NEAR_CPU = 0,
+ /* PCH temperature sensor */
+ TEMP_SENSOR_I2C_DIE_NEAR_PCH,
+ /* DDR memory temperature sensor */
+ TEMP_SENSOR_I2C_DIE_NEAR_DDR,
+ /* Battery charger temperature sensor */
+ TEMP_SENSOR_I2C_DIE_NEAR_CHARGER,
+ /* EC internal temperature sensor */
+ TEMP_SENSOR_EC_INTERNAL,
+
+ /* TODO: I2C temperature sensors. */
+
+ TEMP_SENSOR_COUNT
+};
+
void configure_board(void);
#endif /* __BOARD_H */
diff --git a/board/link/board_temp_sensor.c b/board/link/board_temp_sensor.c
new file mode 100644
index 0000000000..f04754f2bd
--- /dev/null
+++ b/board/link/board_temp_sensor.c
@@ -0,0 +1,37 @@
+/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Link-specific temp sensor module for Chrome EC */
+
+#include "temp_sensor.h"
+#include "chip_temp_sensor.h"
+#include "board.h"
+#include "i2c.h"
+
+#define TEMP_CPU_REG_ADDR ((0x40 << 1) | I2C_FLAG_BIG_ENDIAN)
+#define TEMP_PCH_REG_ADDR ((0x41 << 1) | I2C_FLAG_BIG_ENDIAN)
+#define TEMP_DDR_REG_ADDR ((0x43 << 1) | I2C_FLAG_BIG_ENDIAN)
+#define TEMP_CHARGER_REG_ADDR ((0x45 << 1) | I2C_FLAG_BIG_ENDIAN)
+
+#define TEMP_CPU_ADDR TMP006_ADDR(I2C_PORT_THERMAL, TEMP_CPU_REG_ADDR)
+#define TEMP_PCH_ADDR TMP006_ADDR(I2C_PORT_THERMAL, TEMP_PCH_REG_ADDR)
+#define TEMP_DDR_ADDR TMP006_ADDR(I2C_PORT_THERMAL, TEMP_DDR_REG_ADDR)
+#define TEMP_CHARGER_ADDR TMP006_ADDR(I2C_PORT_THERMAL, TEMP_CHARGER_REG_ADDR)
+
+/* Temperature sensors data. Must be in the same order as enum
+ * temp_sensor_id.
+ */
+const struct temp_sensor_t temp_sensors[TEMP_SENSOR_COUNT] = {
+ {"CPU", TEMP_SENSOR_I2C_DIE_NEAR_CPU, TEMP_CPU_ADDR,
+ temp_sensor_tmp006_read, temp_sensor_tmp006_print},
+ {"PCH", TEMP_SENSOR_I2C_DIE_NEAR_PCH, TEMP_PCH_ADDR,
+ temp_sensor_tmp006_read, temp_sensor_tmp006_print},
+ {"DDR", TEMP_SENSOR_I2C_DIE_NEAR_DDR, TEMP_DDR_ADDR,
+ temp_sensor_tmp006_read, temp_sensor_tmp006_print},
+ {"Charger", TEMP_SENSOR_I2C_DIE_NEAR_CHARGER, TEMP_CHARGER_ADDR,
+ temp_sensor_tmp006_read, temp_sensor_tmp006_print},
+ {"ECInternal", TEMP_SENSOR_EC_INTERNAL, TEMP_SENSOR_NO_ADDR,
+ chip_temp_sensor_read, TEMP_SENSOR_NO_PRINT},
+};
diff --git a/board/link/build.mk b/board/link/build.mk
index faf9968a45..b600d69d13 100644
--- a/board/link/build.mk
+++ b/board/link/build.mk
@@ -9,3 +9,4 @@
CHIP:=lm4
board-y=board.o
+board-$(CONFIG_TEMP_SENSOR)+=board_temp_sensor.o
diff --git a/chip/lm4/build.mk b/chip/lm4/build.mk
index cfd78e9866..7a2053b2f9 100644
--- a/chip/lm4/build.mk
+++ b/chip/lm4/build.mk
@@ -14,5 +14,6 @@ chip-y+=watchdog.o eeprom.o hwtimer.o
chip-$(CONFIG_FLASH)+=flash.o
chip-$(CONFIG_LPC)+=lpc.o
chip-$(CONFIG_PWM)+=pwm.o
-chip-$(CONFIG_TEMP_SENSOR)+=temp_sensor.o
+chip-$(CONFIG_TEMP_SENSOR)+=chip_temp_sensor.o
chip-$(CONFIG_TASK_KEYSCAN)+=keyboard_scan.o
+chip-$(CONFIG_CHARGER)+=charger.o
diff --git a/chip/lm4/charger.c b/chip/lm4/charger.c
new file mode 100644
index 0000000000..e603e63453
--- /dev/null
+++ b/chip/lm4/charger.c
@@ -0,0 +1,96 @@
+/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Charger/battery debug command module for Chrome EC */
+
+/* TODO: remove this or merge into charger/battery modules
+ * once charger and battery modules are ready.
+ */
+
+#include "charger.h"
+#include "board.h"
+#include "i2c.h"
+#include "console.h"
+#include "uart.h"
+#include "util.h"
+
+/* Address of battery charger */
+#define CHARGER_ADDR 0x12
+
+/* Address of battery */
+#define BATTERY_ADDR 0x16
+
+/*****************************************************************************/
+/* Console commands */
+
+static int command_charger(int argc, char **argv)
+{
+ int rv;
+ int d;
+
+ uart_puts("Reading battery charger...\n");
+
+ rv = i2c_read16(I2C_PORT_CHARGER, CHARGER_ADDR, 0xfe, &d);
+ if (rv)
+ return rv;
+ uart_printf(" Manufacturer ID: 0x%04x\n", d);
+
+ rv = i2c_read16(I2C_PORT_CHARGER, CHARGER_ADDR, 0xff, &d);
+ uart_printf(" Device ID: 0x%04x\n", d);
+
+ rv = i2c_read16(I2C_PORT_CHARGER, CHARGER_ADDR, 0x12, &d);
+ uart_printf(" Option: 0x%04x\n", d);
+
+ rv = i2c_read16(I2C_PORT_CHARGER, CHARGER_ADDR, 0x14, &d);
+ uart_printf(" Charge current: 0x%04x\n", d);
+
+ rv = i2c_read16(I2C_PORT_CHARGER, CHARGER_ADDR, 0x15, &d);
+ uart_printf(" Charge voltage: 0x%04x\n", d);
+
+ rv = i2c_read16(I2C_PORT_CHARGER, CHARGER_ADDR, 0x3f, &d);
+ uart_printf(" Input current: 0x%04x\n", d);
+
+ return EC_SUCCESS;
+}
+DECLARE_CONSOLE_COMMAND(charger, command_charger);
+
+static int command_battery(int argc, char **argv)
+{
+ int rv;
+ int d;
+
+ uart_puts("Reading battery...\n");
+
+ rv = i2c_read16(I2C_PORT_BATTERY, BATTERY_ADDR, 0x08, &d);
+ if (rv)
+ return rv;
+ uart_printf(" Temperature: 0x%04x = %d C\n",
+ d, (d-2731)/10);
+
+ rv = i2c_read16(I2C_PORT_BATTERY, BATTERY_ADDR, 0x09, &d);
+ uart_printf(" Voltage: 0x%04x = %d mV\n", d, d);
+
+ rv = i2c_read16(I2C_PORT_BATTERY, BATTERY_ADDR, 0x0f, &d);
+ uart_printf(" Remaining capacity: 0x%04x = %d mAh\n", d, d);
+ rv = i2c_read16(I2C_PORT_BATTERY, BATTERY_ADDR, 0x10, &d);
+ uart_printf(" Full charge capacity: 0x%04x = %d mAh\n", d, d);
+
+ rv = i2c_read16(I2C_PORT_BATTERY, BATTERY_ADDR, 0x14, &d);
+ uart_printf(" Desired charge current: 0x%04x = %d mA\n", d, d);
+ rv = i2c_read16(I2C_PORT_BATTERY, BATTERY_ADDR, 0x15, &d);
+ uart_printf(" Desired charge voltage: 0x%04x = %d mV\n", d, d);
+
+
+ return EC_SUCCESS;
+}
+DECLARE_CONSOLE_COMMAND(battery, command_battery);
+
+/*****************************************************************************/
+/* Initialization */
+
+int charger_init(void)
+{
+ return EC_SUCCESS;
+}
diff --git a/chip/lm4/chip_temp_sensor.c b/chip/lm4/chip_temp_sensor.c
new file mode 100644
index 0000000000..d810216851
--- /dev/null
+++ b/chip/lm4/chip_temp_sensor.c
@@ -0,0 +1,24 @@
+/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Temperature sensor module for Chrome EC */
+
+#include "adc.h"
+#include "board.h"
+#include "temp_sensor.h"
+
+int chip_temp_sensor_read(const struct temp_sensor_t* sensor)
+{
+ /* LM4 only has internal temperature sensor */
+ if (sensor->id != TEMP_SENSOR_EC_INTERNAL)
+ return EC_ERROR_INVAL;
+
+ return adc_read_channel(ADC_CH_EC_TEMP);
+}
+
+int chip_temp_sensor_init(void)
+{
+ return EC_SUCCESS;
+}
diff --git a/chip/lm4/config.h b/chip/lm4/config.h
index d1c892bd68..f2224f8226 100644
--- a/chip/lm4/config.h
+++ b/chip/lm4/config.h
@@ -36,6 +36,7 @@
#define CONFIG_LPC
#define CONFIG_PWM
#define CONFIG_TEMP_SENSOR
+#define CONFIG_CHARGER
/* Compile for running from RAM instead of flash */
/* #define COMPILE_FOR_RAM */
diff --git a/common/build.mk b/common/build.mk
index 397188f255..9c25397569 100644
--- a/common/build.mk
+++ b/common/build.mk
@@ -14,4 +14,4 @@ common-$(CONFIG_TASK_I8042CMD)+=i8042.o keyboard.o
common-$(CONFIG_TASK_X86POWER)+=x86_power.o
common-$(CONFIG_FLASH)+=flash_commands.o
common-$(CONFIG_PWM)+=pwm_commands.o
-common-$(CONFIG_TEMP_SENSOR)+=temp_sensor_commands.o
+common-$(CONFIG_TEMP_SENSOR)+=temp_sensor.o temp_sensor_commands.o
diff --git a/common/main.c b/common/main.c
index d9d1f5375c..bf27cae30f 100644
--- a/common/main.c
+++ b/common/main.c
@@ -31,7 +31,8 @@
#include "vboot.h"
#include "watchdog.h"
#include "usb_charge.h"
-
+#include "chip_temp_sensor.h"
+#include "charger.h"
int main(void)
{
@@ -75,10 +76,12 @@ int main(void)
i2c_init();
#ifdef CONFIG_TEMP_SENSOR
temp_sensor_init();
+ chip_temp_sensor_init();
#endif
power_button_init();
adc_init();
usb_charge_init();
+ charger_init();
/* Print the reset cause */
uart_printf("\n\n--- Chrome EC initialized! ---\n");
diff --git a/common/temp_sensor.c b/common/temp_sensor.c
new file mode 100644
index 0000000000..a517636ea2
--- /dev/null
+++ b/common/temp_sensor.c
@@ -0,0 +1,142 @@
+/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* 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"
+
+/* Defined in board_temp_sensor.c. Must be in the same order as
+ * in enum temp_sensor_id.
+ */
+extern const struct temp_sensor_t temp_sensors[TEMP_SENSOR_COUNT];
+
+int temp_sensor_read(enum temp_sensor_id id)
+{
+ const struct temp_sensor_t *sensor;
+
+ if (id < 0 || id >= TEMP_SENSOR_COUNT)
+ return -1;
+ sensor = temp_sensors + id;
+ return sensor->read(sensor);
+}
+
+int temp_sensor_tmp006_read(const struct temp_sensor_t* sensor)
+{
+ int traw, t;
+ int rv;
+ int addr = sensor->addr;
+
+ rv = i2c_read16(TMP006_PORT(addr), TMP006_REG(addr), 0x01, &traw);
+ if (rv)
+ return -1;
+ t = (int)(int16_t)traw / 128;
+ return t + 273;
+}
+
+void temp_sensor_tmp006_config(const struct temp_sensor_t* sensor)
+{
+ int addr = sensor->addr;
+
+ /* Configure the sensor:
+ * 0x7000 = bits 14:12 = continuous conversion
+ * 0x0400 = bits 11:9 = ADC conversion rate (1/sec)
+ * 0x0100 = bit 8 = DRDY pin enabled */
+
+ /* TODO: support shutdown mode for power-saving? */
+ i2c_write16(TMP006_PORT(addr), TMP006_REG(addr), 0x02, 0x7500);
+}
+
+int temp_sensor_tmp006_print(const struct temp_sensor_t* sensor)
+{
+ int vraw, v;
+ int traw, t;
+ int rv;
+ int d;
+ int addr = sensor->addr;
+
+ uart_printf("Debug data from %s:\n", sensor->name);
+ rv = i2c_read16(TMP006_PORT(addr), TMP006_REG(addr), 0xfe, &d);
+ if (rv)
+ return rv;
+ uart_printf(" Manufacturer ID: 0x%04x\n", d);
+
+ rv = i2c_read16(TMP006_PORT(addr), TMP006_REG(addr), 0xff, &d);
+ uart_printf(" Device ID: 0x%04x\n", d);
+
+ rv = i2c_read16(TMP006_PORT(addr), TMP006_REG(addr), 0x02, &d);
+ uart_printf(" Config: 0x%04x\n", d);
+
+ rv = i2c_read16(TMP006_PORT(addr), TMP006_REG(addr), 0x00, &vraw);
+ v = ((int)(int16_t)vraw * 15625) / 100;
+ uart_printf(" Voltage: 0x%04x = %d nV\n", vraw, v);
+
+ rv = i2c_read16(TMP006_PORT(addr), TMP006_REG(addr), 0x01, &traw);
+ t = ((int)(int16_t)traw * 100) / 128;
+ uart_printf(" Temperature: 0x%04x = %d.%02d C\n",
+ traw, t / 100, t > 0 ? t % 100 : 100 - (t % 100));
+
+ return EC_SUCCESS;
+}
+/*****************************************************************************/
+/* Console commands */
+
+static int command_temps(int argc, char **argv)
+{
+ int i;
+ int rv = 0;
+ int t;
+
+ uart_puts("Reading temperature sensors...\n");
+
+ for (i = 0; i < TEMP_SENSOR_COUNT; ++i) {
+ uart_printf(" Temp from %s: ", temp_sensors[i].name);
+ t = temp_sensor_read(temp_sensors[i].id);
+ if (t < 0) {
+ uart_printf("Error.\n\n");
+ rv = -1;
+ }
+ else
+ uart_printf("%d K\n\n", t);
+ }
+
+ if (rv == -1)
+ return EC_ERROR_UNKNOWN;
+
+ return EC_SUCCESS;
+}
+DECLARE_CONSOLE_COMMAND(temps, command_temps);
+
+static int command_sensor_info(int argc, char ** argv)
+{
+ int i;
+ int rv;
+ const struct temp_sensor_t* sensor;
+
+ for (i = 0; i < TEMP_SENSOR_COUNT; ++i) {
+ sensor = temp_sensors + i;
+ if (sensor->print == TEMP_SENSOR_NO_PRINT)
+ continue;
+ rv = sensor->print(sensor);
+ if (rv != EC_SUCCESS)
+ return rv;
+ }
+
+ return EC_SUCCESS;
+}
+DECLARE_CONSOLE_COMMAND(tempsinfo, command_sensor_info);
+
+
+/*****************************************************************************/
+/* Initialization */
+
+int temp_sensor_init(void)
+{
+ return EC_SUCCESS;
+}
diff --git a/include/charger.h b/include/charger.h
new file mode 100644
index 0000000000..5e40c37f75
--- /dev/null
+++ b/include/charger.h
@@ -0,0 +1,13 @@
+/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Charger/battery debug command module for Chrome EC */
+
+#ifndef __CROS_EC_CHARGER_H
+#define __CROS_EC_CHARGER_H
+
+int charger_init(void);
+
+#endif /* __CROS_EC_CHARGER_H */
diff --git a/include/chip_temp_sensor.h b/include/chip_temp_sensor.h
new file mode 100644
index 0000000000..22c358771b
--- /dev/null
+++ b/include/chip_temp_sensor.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Temperature sensor module for LM4 chip */
+
+#ifndef __CHIP_TEMP_SENSOR_H
+#define __CHIP_TEMP_SENSOR_H
+
+struct temp_sensor_t;
+
+/* Temperature reading function. Input pointer to a sensor in temp_sensors.
+ * Return temperature in K.
+ */
+int chip_temp_sensor_read(const struct temp_sensor_t* sensor);
+
+int chip_temp_sensor_init(void);
+
+#endif /* __CHIP_TEMP_SENSOR_H */
diff --git a/include/temp_sensor.h b/include/temp_sensor.h
index 863f9d7d51..df937112e1 100644
--- a/include/temp_sensor.h
+++ b/include/temp_sensor.h
@@ -9,13 +9,30 @@
#define __CROS_EC_TEMP_SENSOR_H
#include "common.h"
+#include "board.h"
-enum temp_sensor_id {
- TEMP_SENSOR_CASE = 0, /* Case temperature */
- TEMP_SENSOR_CASE_DIE, /* Case temperature sensor die */
- TEMP_SENSOR_EC_INTERNAL, /* EC internal temperature sensor */
+/* "enum temp_sensor_id" must be defined for each board in board.h. */
+struct temp_sensor_t {
+ const char* name;
+ enum temp_sensor_id id;
+ /* Sensor address. Used by read and print functions. */
+ int addr;
+ /* Read sensor value and return temperature in K. */
+ int (*read)(const struct temp_sensor_t* self);
+ /* Print debug info on console. */
+ int (*print)(const struct temp_sensor_t* self);
};
+/* Dummy value to put in "addr" field in temp_sensor_t if we don't need to
+ * specify address.
+ */
+#define TEMP_SENSOR_NO_ADDR 0
+
+/* Dummy value to put in "print" field in temp_sensor_t if we don't have debug
+ * function for a sensor.
+ */
+#define TEMP_SENSOR_NO_PRINT 0
+
/* Initializes the module. */
int temp_sensor_init(void);
@@ -23,4 +40,18 @@ int temp_sensor_init(void);
* or -1 if error. */
int temp_sensor_read(enum temp_sensor_id id);
+
+#define TMP006_ADDR(PORT,REG) ((PORT << 16) + REG)
+#define TMP006_PORT(ADDR) (ADDR >> 16)
+#define TMP006_REG(ADDR) (ADDR & 0xffff)
+
+/* Read TI TMP006 temperature sensor. Return temperature in K. */
+int temp_sensor_tmp006_read(const struct temp_sensor_t* sensor);
+
+/* Configure TMP006 DRDY pin. */
+void temp_sensor_tmp006_config(const struct temp_sensor_t* sensor);
+
+/* Print debug messages for TMP006. */
+int temp_sensor_tmp006_print(const struct temp_sensor_t* sensor);
+
#endif /* __CROS_EC_TEMP_SENSOR_H */
diff --git a/util/ectool.c b/util/ectool.c
index e158a9494a..3c377b4c18 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -10,7 +10,6 @@
#include <unistd.h>
#include "lpc_commands.h"
-#include "temp_sensor.h"
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
/* Don't use a macro where an inline will do... */
@@ -35,9 +34,8 @@ const char help_str[] =
" Serial output test for COM2\n"
" version\n"
" Prints EC version\n"
- " temps [sensorname]\n"
+ " temps <sensorid>\n"
" Print temperature.\n"
- " If sensorname is omitted, print temperature from all sensor.\n"
" pwmgetfanrpm\n"
" Prints current fan RPM\n"
" pwmsetfanrpm <targetrpm>\n"
@@ -438,14 +436,27 @@ int cmd_serial_test(int argc, char *argv[])
return 0;
}
-int get_temperature(int sensor_id, const char* name)
+int cmd_temperature(int argc, char *argv[])
{
struct lpc_params_temp_sensor_get_readings p;
struct lpc_response_temp_sensor_get_readings r;
int rv;
+ int id;
+ char *e;
+
+ if (argc != 1) {
+ fprintf(stderr, "Usage: temps <sensorid>\n");
+ return -1;
+ }
+
+ id = strtol(argv[0], &e, 0);
+ if (e && *e) {
+ fprintf(stderr, "Bad sensor ID.\n");
+ return -1;
+ }
- p.temp_sensor_id = sensor_id;
- printf("Reading %s...", name);
+ p.temp_sensor_id = id;
+ printf("Reading temperature...");
rv = ec_command(EC_LPC_COMMAND_TEMP_SENSOR_GET_READINGS,
&p, sizeof(p), &r, sizeof(r));
if (rv)
@@ -455,22 +466,6 @@ int get_temperature(int sensor_id, const char* name)
return rv;
}
-int cmd_temperature(int argc, char *argv[])
-{
- int rv1 = 0, rv2 = 0, rv3 = 0;
- if (argc == 0 || strcasecmp(argv[0], "TEMP_SENSOR_CASE") == 0)
- rv1 = get_temperature(TEMP_SENSOR_CASE, "TEMP_SENSOR_CASE");
- if (argc == 0 || strcasecmp(argv[0], "TEMP_SENSOR_CASE_DIE") == 0)
- rv2 = get_temperature(TEMP_SENSOR_CASE_DIE,
- "TEMP_SENSOR_CASE_DIE");
- if (argc == 0 || strcasecmp(argv[0], "TEMP_SENSOR_EC_INTERNAL") == 0)
- rv3 = get_temperature(TEMP_SENSOR_EC_INTERNAL,
- "TEMP_SENSOR_EC_INTERNAL");
- if (rv1 || rv2 || rv3)
- return -1;
- return 0;
-}
-
int cmd_pwm_get_fan_rpm(void)
{
struct lpc_response_pwm_get_fan_rpm r;