summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormichael5 <michael5_chen@pegatroncorp.com>2015-12-24 17:39:31 +0800
committerChromeOS bot <3su6n15k.default@developer.gserviceaccount.com>2015-12-29 18:03:27 +0000
commit7e0f529791dba4b36a9188265b876dffc726dc7a (patch)
tree44614e96760a8d56de6c9e52086285b67c8cf2c3
parentb0808565e065bca7d39da082cf2c52636074645a (diff)
downloadchrome-ec-7e0f529791dba4b36a9188265b876dffc726dc7a.tar.gz
edgar: Add thermal sensor from ADC0
Add thermal sensor from ADC0 BUG=none BRANCH=firmware-strago-7287.B TEST=Read temperature and mapping with measure. Change-Id: Idfaf09bea112a7d209b54c3cc912aaf64fe251aa Signed-off-by: michael5 <michael5_chen@pegatroncorp.com> Reviewed-on: https://chromium-review.googlesource.com/319706 Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r--board/edgar/board.c53
-rw-r--r--board/edgar/board.h6
2 files changed, 58 insertions, 1 deletions
diff --git a/board/edgar/board.c b/board/edgar/board.c
index 6a33fb5cd2..229bc02ed4 100644
--- a/board/edgar/board.c
+++ b/board/edgar/board.c
@@ -27,6 +27,7 @@
#include "thermal.h"
#include "uart.h"
#include "util.h"
+#include "adc_chip.h"
#define GPIO_KB_INPUT (GPIO_INPUT | GPIO_PULL_UP)
#define GPIO_KB_OUTPUT (GPIO_ODR_HIGH)
@@ -34,6 +35,8 @@
#include "gpio_list.h"
+static int adc_get_val(int idx, int *temp_ptr);
+
/* power signal list. Must match order of enum power_signal. */
const struct power_signal_info power_signal_list[] = {
{GPIO_ALL_SYS_PGOOD, 1, "ALL_SYS_PWRGD"},
@@ -43,6 +46,11 @@ const struct power_signal_info power_signal_list[] = {
};
BUILD_ASSERT(ARRAY_SIZE(power_signal_list) == POWER_SIGNAL_COUNT);
+const struct adc_t adc_channels[] = {
+ {"ADC0", 1, 1, 0, 0},
+};
+BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT);
+
const struct i2c_port_t i2c_ports[] = {
{"batt_chg", MEC1322_I2C0_0, 100,
GPIO_I2C_PORT0_0_SCL, GPIO_I2C_PORT0_0_SDA},
@@ -69,6 +77,8 @@ const struct temp_sensor_t temp_sensors[] = {
TMP432_IDX_REMOTE1, 4},
{"TMP432_Sensor_2", TEMP_SENSOR_TYPE_BOARD, tmp432_get_val,
TMP432_IDX_REMOTE2, 4},
+ {"ADC_Sensor_1", TEMP_SENSOR_TYPE_BOARD, adc_get_val,
+ ADC_CH_0, 4},
{"Battery", TEMP_SENSOR_TYPE_BATTERY, charge_temp_sensor_get_val,
0, 4},
};
@@ -81,6 +91,7 @@ struct ec_thermal_config thermal_params[] = {
{{0, 0, 0}, 0, 0}, /* TMP432_Internal */
{{0, 0, 0}, 0, 0}, /* TMP432_Sensor_1 */
{{0, 0, 0}, 0, 0}, /* TMP432_Sensor_2 */
+ {{0, 0, 0}, 0, 0}, /* ADC_Sensor_1 */
{{0, 0, 0}, 0, 0}, /* Battery Sensor */
};
BUILD_ASSERT(ARRAY_SIZE(thermal_params) == TEMP_SENSOR_COUNT);
@@ -92,3 +103,45 @@ static void adc_pre_init(void)
gpio_config_module(MODULE_ADC, 1);
}
DECLARE_HOOK(HOOK_INIT, adc_pre_init, HOOK_PRIO_INIT_ADC - 1);
+
+static const int adc_temp[] = {
+ 158780, 150690, 143060, 135870, 129070, 122660, 116600, 110870,
+ 105450, 100330, 95488, 90904, 86565, 82456, 78565, 74878,
+ 71384, 68071, 64930, 61951, 59124, 56442, 53895, 51478,
+ 49181, 47000, 44927, 42957, 41084, 39303, 37609, 35997,
+ 34463, 33004, 31614, 30290, 29029, 27828, 26683, 25592,
+ 24551, 23559, 22613, 21710, 20848, 20025, 19239, 18489,
+ 17772, 17087, 16432, 15807, 15208, 14636, 14088, 13564,
+ 13063, 12582, 12123, 11682, 11260, 10856, 10468, 10097,
+ 9704, 9398, 9070, 8756, 8454, 8164, 7885, 7618,
+ 7361, 7114, 6876, 6648, 6429, 6217, 6014, 5819,
+ 5631, 5450, 5276, 5108, 4947, 4791, 4641, 4496,
+ 4357, 4223, 4093, 3968, 3848, 3732, 3620, 3511,
+ 3407, 3306, 3209, 3115, 3024, 2936, 2851, 2769,
+};
+
+static int adc_get_val(int idx, int *temp_ptr)
+{
+ int head, tail, mid;
+ int voltage_value = adc_read_channel(idx);
+ int ohm_value = (voltage_value == 1023)
+ ? 158780 : (24900 * voltage_value) / (1023 - voltage_value);
+
+ /* Binary search to find proper table entry */
+ head = 0;
+ tail = ARRAY_SIZE(adc_temp)-1;
+ while (head != tail) {
+ mid = (head + tail) / 2;
+ if (adc_temp[mid] >= ohm_value &&
+ adc_temp[mid+1] < ohm_value)
+ break;
+ if (adc_temp[mid] > ohm_value)
+ head = mid + 1;
+ else
+ tail = mid;
+ }
+
+ /* Offset 3 dergee */
+ *temp_ptr = C_TO_K(mid) + 3;
+ return EC_SUCCESS;
+}
diff --git a/board/edgar/board.h b/board/edgar/board.h
index e18a1ab87d..a4cd6e3328 100644
--- a/board/edgar/board.h
+++ b/board/edgar/board.h
@@ -62,6 +62,7 @@
#define CONFIG_LED_COMMON
#define CONFIG_I2C
+#define CONFIG_ADC
/* Wireless signals */
#define WIRELESS_GPIO_WLAN GPIO_WLAN_OFF_L
@@ -72,7 +73,6 @@
#undef CONFIG_PSTORE
#undef CONFIG_PECI
#undef CONFIG_FANS
-#undef CONFIG_ADC
#ifndef __ASSEMBLER__
#include "gpio_signal.h"
@@ -85,6 +85,8 @@
/* ADC signal */
enum adc_channel {
+ ADC_CH_0 = 0,
+
/* Number of ADC channels */
ADC_CH_COUNT
};
@@ -105,6 +107,8 @@ enum temp_sensor_id {
TEMP_SENSOR_I2C_TMP432_LOCAL,
TEMP_SENSOR_I2C_TMP432_REMOTE1,
TEMP_SENSOR_I2C_TMP432_REMOTE2,
+ /* ADC Sensors */
+ TEMP_SENSOR_ADC_SENSOR1,
/* Battery temperature sensor */
TEMP_SENSOR_BATTERY,