mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-13 11:25:14 +00:00
yorp: Enable temperature sensors
BUG=b:77944804 BRANCH=None TEST=On yorp; test adc values, verify they are valid. Change-Id: I64191f33c594d8869391bab813902f59a63d2ea1 Signed-off-by: Divya Sasidharan <divya.s.sasidharan@intel.com> Reviewed-on: https://chromium-review.googlesource.com/1018118 Commit-Ready: Divya Sasidharan <divya.s.sasidharan@intel.corp-partner.google.com> Tested-by: Divya Sasidharan <divya.s.sasidharan@intel.corp-partner.google.com> Reviewed-by: Jett Rink <jettrink@chromium.org>
This commit is contained in:
committed by
chrome-bot
parent
6782985535
commit
dc875f284f
@@ -31,6 +31,8 @@
|
||||
#include "power_button.h"
|
||||
#include "switch.h"
|
||||
#include "system.h"
|
||||
#include "temp_sensor.h"
|
||||
#include "thermistor.h"
|
||||
#include "tcpci.h"
|
||||
#include "usb_mux.h"
|
||||
#include "usbc_ppc.h"
|
||||
@@ -83,6 +85,10 @@ const int hibernate_wake_pins_used = ARRAY_SIZE(hibernate_wake_pins);
|
||||
|
||||
/* ADC channels */
|
||||
const struct adc_t adc_channels[] = {
|
||||
[ADC_TEMP_SENSOR_AMB] = {
|
||||
"TEMP_AMB", NPCX_ADC_CH0, ADC_MAX_VOLT, ADC_READ_MAX+1, 0},
|
||||
[ADC_TEMP_SENSOR_CHARGER] = {
|
||||
"TEMP_CHARGER", NPCX_ADC_CH1, ADC_MAX_VOLT, ADC_READ_MAX+1, 0},
|
||||
/* Vbus C0 sensing (10x voltage divider). PPVAR_USB_C0_VBUS */
|
||||
[ADC_VBUS_C0] = {
|
||||
"VBUS_C0", NPCX_ADC_CH4, ADC_MAX_VOLT*10, ADC_READ_MAX+1, 0},
|
||||
@@ -129,6 +135,92 @@ const int usb_port_enable[USB_PORT_COUNT] = {
|
||||
/* TODO(b/74388692): Add second port control after hardware fix. */
|
||||
};
|
||||
|
||||
/*
|
||||
* Data derived from Seinhart-Hart equation in a resistor divider circuit with
|
||||
* Vdd=3300mV, R = 13.7Kohm, and Murata NCP15WB-series thermistor (B = 4050,
|
||||
* T0 = 298.15, nominal resistance (R0) = 47Kohm).
|
||||
*/
|
||||
#define CHARGER_THERMISTOR_SCALING_FACTOR 13
|
||||
static const struct thermistor_data_pair charger_thermistor_data[] = {
|
||||
{ 3044 / CHARGER_THERMISTOR_SCALING_FACTOR, 0 },
|
||||
{ 2890 / CHARGER_THERMISTOR_SCALING_FACTOR, 10 },
|
||||
{ 2680 / CHARGER_THERMISTOR_SCALING_FACTOR, 20 },
|
||||
{ 2418 / CHARGER_THERMISTOR_SCALING_FACTOR, 30 },
|
||||
{ 2117 / CHARGER_THERMISTOR_SCALING_FACTOR, 40 },
|
||||
{ 1800 / CHARGER_THERMISTOR_SCALING_FACTOR, 50 },
|
||||
{ 1490 / CHARGER_THERMISTOR_SCALING_FACTOR, 60 },
|
||||
{ 1208 / CHARGER_THERMISTOR_SCALING_FACTOR, 70 },
|
||||
{ 966 / CHARGER_THERMISTOR_SCALING_FACTOR, 80 },
|
||||
{ 860 / CHARGER_THERMISTOR_SCALING_FACTOR, 85 },
|
||||
{ 766 / CHARGER_THERMISTOR_SCALING_FACTOR, 90 },
|
||||
{ 679 / CHARGER_THERMISTOR_SCALING_FACTOR, 95 },
|
||||
{ 603 / CHARGER_THERMISTOR_SCALING_FACTOR, 100 },
|
||||
};
|
||||
|
||||
static const struct thermistor_info charger_thermistor_info = {
|
||||
.scaling_factor = CHARGER_THERMISTOR_SCALING_FACTOR,
|
||||
.num_pairs = ARRAY_SIZE(charger_thermistor_data),
|
||||
.data = charger_thermistor_data,
|
||||
};
|
||||
|
||||
int board_get_charger_temp(int idx, int *temp_ptr)
|
||||
{
|
||||
int mv = adc_read_channel(NPCX_ADC_CH1);
|
||||
|
||||
if (mv < 0)
|
||||
return EC_ERROR_UNKNOWN;
|
||||
|
||||
*temp_ptr = thermistor_linear_interpolate(mv, &charger_thermistor_info);
|
||||
*temp_ptr = C_TO_K(*temp_ptr);
|
||||
return EC_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* Data derived from Seinhart-Hart equation in a resistor divider circuit with
|
||||
* Vdd=3300mV, R = 51.1Kohm, and Murata NCP15WB-series thermistor (B = 4050,
|
||||
* T0 = 298.15, nominal resistance (R0) = 47Kohm).
|
||||
*/
|
||||
#define AMB_THERMISTOR_SCALING_FACTOR 11
|
||||
static const struct thermistor_data_pair amb_thermistor_data[] = {
|
||||
{ 2512 / AMB_THERMISTOR_SCALING_FACTOR, 0 },
|
||||
{ 2158 / AMB_THERMISTOR_SCALING_FACTOR, 10 },
|
||||
{ 1772 / AMB_THERMISTOR_SCALING_FACTOR, 20 },
|
||||
{ 1398 / AMB_THERMISTOR_SCALING_FACTOR, 30 },
|
||||
{ 1070 / AMB_THERMISTOR_SCALING_FACTOR, 40 },
|
||||
{ 803 / AMB_THERMISTOR_SCALING_FACTOR, 50 },
|
||||
{ 597 / AMB_THERMISTOR_SCALING_FACTOR, 60 },
|
||||
{ 443 / AMB_THERMISTOR_SCALING_FACTOR, 70 },
|
||||
{ 329 / AMB_THERMISTOR_SCALING_FACTOR, 80 },
|
||||
{ 285 / AMB_THERMISTOR_SCALING_FACTOR, 85 },
|
||||
{ 247 / AMB_THERMISTOR_SCALING_FACTOR, 90 },
|
||||
{ 214 / AMB_THERMISTOR_SCALING_FACTOR, 95 },
|
||||
{ 187 / AMB_THERMISTOR_SCALING_FACTOR, 100 },
|
||||
};
|
||||
|
||||
static const struct thermistor_info amb_thermistor_info = {
|
||||
.scaling_factor = AMB_THERMISTOR_SCALING_FACTOR,
|
||||
.num_pairs = ARRAY_SIZE(amb_thermistor_data),
|
||||
.data = amb_thermistor_data,
|
||||
};
|
||||
|
||||
int board_get_ambient_temp(int idx, int *temp_ptr)
|
||||
{
|
||||
int mv = adc_read_channel(NPCX_ADC_CH0);
|
||||
|
||||
if (mv < 0)
|
||||
return EC_ERROR_UNKNOWN;
|
||||
|
||||
*temp_ptr = thermistor_linear_interpolate(mv, &amb_thermistor_info);
|
||||
*temp_ptr = C_TO_K(*temp_ptr);
|
||||
return EC_SUCCESS;
|
||||
}
|
||||
|
||||
const struct temp_sensor_t temp_sensors[] = {
|
||||
{"Ambient", TEMP_SENSOR_TYPE_BOARD, board_get_ambient_temp, 0, 5},
|
||||
{"Charger", TEMP_SENSOR_TYPE_BOARD, board_get_charger_temp, 1, 1},
|
||||
};
|
||||
BUILD_ASSERT(ARRAY_SIZE(temp_sensors) == TEMP_SENSOR_COUNT);
|
||||
|
||||
/* Called by APL power state machine when transitioning from G3 to S5 */
|
||||
void chipset_pre_init_callback(void)
|
||||
{
|
||||
|
||||
@@ -147,6 +147,8 @@
|
||||
#define CONFIG_POWER_BUTTON
|
||||
#define CONFIG_POWER_BUTTON_X86
|
||||
#define CONFIG_POWER_PP5000_CONTROL
|
||||
#define CONFIG_TEMP_SENSOR
|
||||
#define CONFIG_THERMISTOR_NCP15WB
|
||||
#define CONFIG_EXTPOWER_GPIO
|
||||
#undef CONFIG_EXTPOWER_DEBOUNCE_MS
|
||||
/*
|
||||
@@ -162,8 +164,10 @@
|
||||
#include "registers.h"
|
||||
|
||||
enum adc_channel {
|
||||
ADC_VBUS_C0,
|
||||
ADC_VBUS_C1,
|
||||
ADC_TEMP_SENSOR_AMB, /* ADC0 */
|
||||
ADC_TEMP_SENSOR_CHARGER, /* ADC1 */
|
||||
ADC_VBUS_C0, /* ADC4 */
|
||||
ADC_VBUS_C1, /* ADC9 */
|
||||
ADC_CH_COUNT
|
||||
};
|
||||
|
||||
@@ -184,8 +188,13 @@ enum power_signal {
|
||||
POWER_SIGNAL_COUNT
|
||||
};
|
||||
|
||||
/* Motion sensors */
|
||||
enum temp_sensor_id {
|
||||
TEMP_SENSOR_AMBIENT = 0,
|
||||
TEMP_SENSOR_CHARGER,
|
||||
TEMP_SENSOR_COUNT
|
||||
};
|
||||
|
||||
/* Motion sensors */
|
||||
enum sensor_id {
|
||||
LID_ACCEL,
|
||||
BASE_ACCEL,
|
||||
|
||||
@@ -123,6 +123,7 @@ ALTERNATE(PIN_MASK(8, 0x80), 0, MODULE_I2C, 0) /* I2C1 SDA */
|
||||
ALTERNATE(PIN_MASK(D, 0x03), 0, MODULE_I2C, 0) /* I2C3 */
|
||||
ALTERNATE(PIN_MASK(F, 0x0C), 0, MODULE_I2C, 0) /* I2C4 */
|
||||
ALTERNATE(PIN_MASK(B, 0x0C), 0, MODULE_I2C, 0) /* I2C7 */
|
||||
ALTERNATE(PIN_MASK(4, 0x30), 0, MODULE_ADC, 0) /* ADC0-1 */
|
||||
ALTERNATE(PIN_MASK(4, 0x02), 0, MODULE_ADC, 0) /* ADC4: ADC_USB_C0_VBUS */
|
||||
ALTERNATE(PIN_MASK(F, 0x01), 0, MODULE_ADC, 0) /* ADC9: ADC_USB_C1_VBUS */
|
||||
ALTERNATE(PIN_MASK(C, 0x18), 0, MODULE_PWM, 0) /* LED 1 & 2 */
|
||||
|
||||
Reference in New Issue
Block a user