diff options
author | Vic Yang <victoryang@google.com> | 2012-01-12 17:02:10 +0800 |
---|---|---|
committer | Vic Yang <victoryang@google.com> | 2012-02-04 14:37:04 +0800 |
commit | 000a6d57423e96ffaa2061bd764b8141ea46bb8e (patch) | |
tree | 528dd0d5f798101470a1d45f9480bc7b2ecebcb0 | |
parent | 249467b9f291e2b10a7aafdbb584c68c8b0a4e88 (diff) | |
download | chrome-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.h | 7 | ||||
-rw-r--r-- | board/bds/board_temp_sensor.c | 22 | ||||
-rw-r--r-- | board/bds/build.mk | 1 | ||||
-rw-r--r-- | board/link/board.h | 17 | ||||
-rw-r--r-- | board/link/board_temp_sensor.c | 37 | ||||
-rw-r--r-- | board/link/build.mk | 1 | ||||
-rw-r--r-- | chip/lm4/build.mk | 3 | ||||
-rw-r--r-- | chip/lm4/charger.c | 96 | ||||
-rw-r--r-- | chip/lm4/chip_temp_sensor.c | 24 | ||||
-rw-r--r-- | chip/lm4/config.h | 1 | ||||
-rw-r--r-- | common/build.mk | 2 | ||||
-rw-r--r-- | common/main.c | 5 | ||||
-rw-r--r-- | common/temp_sensor.c | 142 | ||||
-rw-r--r-- | include/charger.h | 13 | ||||
-rw-r--r-- | include/chip_temp_sensor.h | 20 | ||||
-rw-r--r-- | include/temp_sensor.h | 39 | ||||
-rw-r--r-- | util/ectool.c | 39 |
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; |