summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjames_chao <james_chao@asus.com>2016-01-14 17:26:04 +0800
committerChromeOS bot <3su6n15k.default@developer.gserviceaccount.com>2016-01-14 17:46:58 +0000
commit3e16869227884e5f69f1594ee9973eda94669979 (patch)
tree0667a66d6fa0ded914cd5ebbdf8fae92538d0a3d
parent1f076054ebe5903cfbd22ee769bb8d3e82cbd3ed (diff)
downloadchrome-ec-3e16869227884e5f69f1594ee9973eda94669979.tar.gz
Terra11: use adc temperature for DPTF TSR2
For DPTF sensor 2 (TSR2), terra11 use the temperature from adc channel, terra13 use the temperature from tmp432 sensor remote 2. BUG=none BRANCH=firmware-strago-7287.B TEST=none Change-Id: I6748960a16b2c609135c7c2d27037166991fc87a Signed-off-by: james_chao <james_chao@asus.com> Reviewed-on: https://chromium-review.googlesource.com/322052 Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r--board/terra/board.c220
-rw-r--r--board/terra/board.h4
-rw-r--r--board/terra/gpio.inc1
3 files changed, 222 insertions, 3 deletions
diff --git a/board/terra/board.c b/board/terra/board.c
index e262c05c02..7fa1affce6 100644
--- a/board/terra/board.c
+++ b/board/terra/board.c
@@ -4,6 +4,8 @@
*/
/* Terra board-specific configuration */
+#include "adc.h"
+#include "adc_chip.h"
#include "charge_state.h"
#include "driver/charger/bq24773.h"
#include "driver/temp_sensor/tmp432.h"
@@ -47,6 +49,14 @@ const enum gpio_signal hibernate_wake_pins[] = {
const int hibernate_wake_pins_used = ARRAY_SIZE(hibernate_wake_pins);
+const struct adc_t adc_channels[] = {
+ [ADC_TEMP] = {"ADC1", 1, 1, 0, 0},
+};
+BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT);
+
+/* Forward declaration */
+static int terra_get_temp_sensor2(int index, int *temp_ptr);
+
/*
* Temperature sensors data; must be in same order as enum temp_sensor_id.
* Sensor index and name must match those present in coreboot:
@@ -57,7 +67,7 @@ const struct temp_sensor_t temp_sensors[] = {
TMP432_IDX_LOCAL, 4},
{"TMP432_Sensor_1", TEMP_SENSOR_TYPE_BOARD, tmp432_get_val,
TMP432_IDX_REMOTE1, 4},
- {"TMP432_Sensor_2", TEMP_SENSOR_TYPE_BOARD, tmp432_get_val,
+ {"TMP432_Sensor_2", TEMP_SENSOR_TYPE_BOARD, terra_get_temp_sensor2,
TMP432_IDX_REMOTE2, 4},
{"Battery", TEMP_SENSOR_TYPE_BATTERY, charge_temp_sensor_get_val,
0, 4},
@@ -131,3 +141,211 @@ int board_get_version(void)
return v;
}
+
+struct adc_temp_t {
+ int adc;
+ int temp;
+};
+
+const struct adc_temp_t adc_temp[] = {
+ { 65, 125 },
+ { 66, 124 },
+ { 68, 123 },
+ { 69, 122 },
+ { 71, 121 },
+ { 73, 120 },
+ { 75, 119 },
+ { 77, 118 },
+ { 79, 117 },
+ { 81, 116 },
+ { 83, 115 },
+ { 85, 114 },
+ { 87, 113 },
+ { 89, 112 },
+ { 92, 111 },
+ { 94, 110 },
+ { 96, 109 },
+ { 99, 108 },
+ { 102, 107 },
+ { 104, 106 },
+ { 107, 105 },
+ { 110, 104 },
+ { 113, 103 },
+ { 116, 102 },
+ { 119, 101 },
+ { 122, 100 },
+ { 125, 99 },
+ { 129, 98 },
+ { 132, 97 },
+ { 136, 96 },
+ { 139, 95 },
+ { 143, 94 },
+ { 147, 93 },
+ { 151, 92 },
+ { 155, 91 },
+ { 159, 90 },
+ { 163, 89 },
+ { 168, 88 },
+ { 172, 87 },
+ { 177, 86 },
+ { 182, 85 },
+ { 187, 84 },
+ { 192, 83 },
+ { 197, 82 },
+ { 202, 81 },
+ { 208, 80 },
+ { 213, 79 },
+ { 219, 78 },
+ { 225, 77 },
+ { 231, 76 },
+ { 237, 75 },
+ { 244, 74 },
+ { 250, 73 },
+ { 257, 72 },
+ { 264, 71 },
+ { 271, 70 },
+ { 278, 69 },
+ { 285, 68 },
+ { 293, 67 },
+ { 301, 66 },
+ { 309, 65 },
+ { 317, 64 },
+ { 325, 63 },
+ { 333, 62 },
+ { 342, 61 },
+ { 351, 60 },
+ { 360, 59 },
+ { 369, 58 },
+ { 378, 57 },
+ { 388, 56 },
+ { 397, 55 },
+ { 407, 54 },
+ { 417, 53 },
+ { 427, 52 },
+ { 437, 51 },
+ { 448, 50 },
+ { 458, 49 },
+ { 469, 48 },
+ { 480, 47 },
+ { 491, 46 },
+ { 502, 45 },
+ { 513, 44 },
+ { 525, 43 },
+ { 536, 42 },
+ { 548, 41 },
+ { 559, 40 },
+ { 571, 39 },
+ { 583, 38 },
+ { 594, 37 },
+ { 606, 36 },
+ { 618, 35 },
+ { 630, 34 },
+ { 642, 33 },
+ { 654, 32 },
+ { 666, 31 },
+ { 678, 30 },
+ { 690, 29 },
+ { 701, 28 },
+ { 713, 27 },
+ { 725, 26 },
+ { 736, 25 },
+ { 748, 24 },
+ { 759, 23 },
+ { 770, 22 },
+ { 782, 21 },
+ { 793, 20 },
+ { 803, 19 },
+ { 814, 18 },
+ { 825, 17 },
+ { 835, 16 },
+ { 845, 15 },
+ { 855, 14 },
+ { 865, 13 },
+ { 875, 12 },
+ { 884, 11 },
+ { 893, 10 },
+ { 902, 9 },
+ { 911, 8 },
+ { 920, 7 },
+ { 928, 6 },
+ { 936, 5 },
+ { 944, 4 },
+ { 952, 3 },
+ { 959, 2 },
+ { 967, 1 },
+ { 974, 0 },
+ { 981, -1 },
+ { 987, -2 },
+ { 993, -3 },
+ { 1000, -4 },
+ { 1006, -5 },
+ { 1011, -6 },
+ { 1017, -7 },
+ { 1022, -8 },
+ { 1027, -9 },
+ { 1032, -10 },
+ { 1037, -11 },
+ { 1042, -12 },
+ { 1046, -13 },
+ { 1050, -14 },
+ { 1054, -15 },
+ { 1058, -16 },
+ { 1062, -17 },
+ { 1065, -18 },
+ { 1069, -19 },
+ { 1072, -20 },
+ { 1075, -21 },
+ { 1078, -22 },
+ { 1081, -23 },
+ { 1083, -24 },
+ { 1086, -25 },
+ { 1088, -26 },
+ { 1090, -27 },
+ { 1093, -28 },
+ { 1095, -29 },
+ { 1096, -30 },
+ { 1098, -31 },
+ { 1100, -32 },
+ { 1102, -33 },
+ { 1103, -34 },
+ { 1105, -35 },
+ { 1106, -36 },
+ { 1107, -37 },
+ { 1109, -38 },
+ { 1110, -39 },
+ { 1111, -40 },
+};
+
+static int adc_to_temp(int adc)
+{
+ static int i;
+
+ if (adc < adc_temp[0].adc)
+ return 125;
+ else if (adc > adc_temp[ARRAY_SIZE(adc_temp)-1].adc)
+ return -40;
+
+ while (1) {
+ if (adc < adc_temp[i].adc)
+ --i;
+ else if (adc > adc_temp[i+1].adc)
+ ++i;
+ else
+ return adc_temp[i].temp;
+ }
+}
+
+static int terra_adc_get_val(int idx, int *temp_ptr)
+{
+ *temp_ptr = C_TO_K(adc_to_temp(adc_read_channel(idx)));
+ return EC_SUCCESS;
+}
+
+static int terra_get_temp_sensor2(int idx, int *temp_ptr)
+{
+ if (gpio_get_level(GPIO_IMAGE_SEL))
+ return tmp432_get_val(idx, temp_ptr);
+ else
+ return terra_adc_get_val(ADC_TEMP, temp_ptr);
+}
+
diff --git a/board/terra/board.h b/board/terra/board.h
index a92a9a9785..22527f0032 100644
--- a/board/terra/board.h
+++ b/board/terra/board.h
@@ -45,6 +45,8 @@
#define CONFIG_USB_PORT_POWER_SMART_DEFAULT_MODE USB_CHARGE_MODE_CDP
#define CONFIG_USB_PORT_POWER_SMART_SIMPLE
+#define CONFIG_ADC
+
#define CONFIG_TEMP_SENSOR
#define CONFIG_TEMP_SENSOR_TMP432
@@ -78,7 +80,6 @@
#undef CONFIG_PSTORE
#undef CONFIG_PECI
#undef CONFIG_FANS
-#undef CONFIG_ADC
#ifndef __ASSEMBLER__
#include "gpio_signal.h"
@@ -91,6 +92,7 @@
/* ADC signal */
enum adc_channel {
+ ADC_TEMP,
/* Number of ADC channels */
ADC_CH_COUNT
};
diff --git a/board/terra/gpio.inc b/board/terra/gpio.inc
index 26f03edea0..4cb9323b46 100644
--- a/board/terra/gpio.inc
+++ b/board/terra/gpio.inc
@@ -48,7 +48,6 @@ GPIO(PCH_SUS_STAT_L, PIN(51), GPIO_INT_FALLING) /* Signal to inf
GPIO(NC_GPIO52, PIN(52), GPIO_INPUT | GPIO_PULL_UP) /* NC */
GPIO(TRACKPAD_PWREN, PIN(53), GPIO_OUT_HIGH) /* Enable power for Track Pad */
GPIO(USB_OC0_L, PIN(55), GPIO_INT_FALLING) /* Over current signal of the BC1.2 charger to EC */
-GPIO(ADC_TEMP_SENSOR_1, PIN(56), GPIO_INPUT | GPIO_PULL_UP)
GPIO(NC_GPIO57, PIN(57), GPIO_INPUT | GPIO_PULL_UP) /* NC */
GPIO(ADC_BC_PMON, PIN(60), GPIO_INPUT | GPIO_PULL_UP)
GPIO(NC_GPIO61, PIN(61), GPIO_INPUT | GPIO_PULL_UP) /* NC */