Include battery fuel gauge temp sensor in temperature sensors

This gives the AP a way to see that temperature for DPTF.  Alarm
thresholds were defined on a per-sensor basis, so they come along for
free.

BUG=chrome-os-partner:25585
BRANCH=rambi
TEST=temps command shows same temp for battery as battery command (other
     than rounding error; battery command shows with 0.1C accuracy).
     'ectool temps all' shows the battery temp as the last temperature.

     Unplug battery and temps command shows error for the battery temp,
     as does 'ectool temps all'.

Change-Id: I1bce72f164d9fb1be631e7241a4ea24ddf409d7a
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/185444
Reviewed-by: Dave Parker <dparker@chromium.org>
This commit is contained in:
Randall Spangler
2014-02-07 14:22:07 -08:00
committed by chrome-internal-fetch
parent 683beb8737
commit 3192264679
5 changed files with 30 additions and 0 deletions

View File

@@ -7,6 +7,7 @@
#include "adc.h"
#include "adc_chip.h"
#include "backlight.h"
#include "charge_state.h"
#include "charger.h"
#include "common.h"
#include "driver/temp_sensor/tmp432.h"
@@ -185,6 +186,7 @@ const struct temp_sensor_t temp_sensors[] = {
TMP432_IDX_REMOTE1, 4},
{"TMP432_CPU_bottom", TEMP_SENSOR_TYPE_BOARD, tmp432_get_val,
TMP432_IDX_REMOTE2, 4},
{"Battery", TEMP_SENSOR_TYPE_BATTERY, charge_temp_sensor_get_val, 0, 4},
};
BUILD_ASSERT(ARRAY_SIZE(temp_sensors) == TEMP_SENSOR_COUNT);
@@ -196,6 +198,7 @@ struct ec_thermal_config thermal_params[] = {
{{0, 0, 0}, 0, 0},
{{0, 0, 0}, 0, 0},
{{0, 0, 0}, 0, 0},
{{0, 0, 0}, 0, 0},
};
BUILD_ASSERT(ARRAY_SIZE(thermal_params) == TEMP_SENSOR_COUNT);

View File

@@ -179,6 +179,9 @@ enum temp_sensor_id {
TEMP_SENSOR_I2C_TMP432_REMOTE1,
TEMP_SENSOR_I2C_TMP432_REMOTE2,
/* Battery temperature sensor */
TEMP_SENSOR_BATTERY,
TEMP_SENSOR_COUNT
};

View File

@@ -664,6 +664,17 @@ int charge_get_percent(void)
return task_ctx.curr.batt.state_of_charge;
}
int charge_temp_sensor_get_val(int idx, int *temp_ptr)
{
const struct batt_params *batt = &task_ctx.curr.batt;
if (!(batt->flags & BATT_FLAG_RESPONSIVE))
return EC_ERROR_UNKNOWN;
*temp_ptr = C_TO_K(DECI_KELVIN_TO_CELSIUS(batt->temperature));
return EC_SUCCESS;
}
int charge_want_shutdown(void)
{
return (charge_get_state() == PWR_STATE_DISCHARGE) &&

View File

@@ -143,5 +143,16 @@ int charge_want_shutdown(void);
#else
static inline int charge_want_shutdown(void) { return 0; }
#endif
/**
* Get the last polled battery/charger temperature.
*
* @param idx Sensor index to read.
* @param temp_ptr Destination for temperature in K.
*
* @return EC_SUCCESS if successful, non-zero if error.
*/
int charge_temp_sensor_get_val(int idx, int *temp_ptr);
#endif /* __CROS_EC_CHARGE_STATE_H */

View File

@@ -23,6 +23,8 @@ enum temp_sensor_type {
TEMP_SENSOR_TYPE_BOARD,
/* Case temperature sensors. */
TEMP_SENSOR_TYPE_CASE,
/* Battery temperature sensors. */
TEMP_SENSOR_TYPE_BATTERY,
TEMP_SENSOR_TYPE_COUNT
};