mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-07 16:11:43 +00:00
Setting battery charging maximum value of temperature. If battery temperture is over than 45 degree, set charge current to 0 mA, and charge state to idle. Then LED will turn to white in idle state. BUG=chrome-os-partner:49695 BRANCH=glados TEST=check the battery will not charge when battery temperture is over than 45 degree, and LED turn to white. Then temperture is less than 45 degree, the battery will charge and LED turn to amber. Signed-off-by: Bruce.Wan <Bruce.Wan@quantatw.com> Reviewed-on: https://chromium-review.googlesource.com/323982 Reviewed-by: Shawn N <shawnn@chromium.org> Signed-off-by: Duncan Laurie <dlaurie@chromium.org> (cherry picked from commit 4994d85d3b6c589e3ac297697aeb36456f2401a6) Change-Id: Ic7d3fe0c482fab76041c5ae3f35402e529576b1c Reviewed-on: https://chromium-review.googlesource.com/325487
82 lines
2.0 KiB
C
82 lines
2.0 KiB
C
/* Copyright 2015 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.
|
|
*
|
|
* Battery pack vendor provided charging profile
|
|
*/
|
|
|
|
#include "battery.h"
|
|
#include "battery_smart.h"
|
|
#include "charge_state.h"
|
|
#include "console.h"
|
|
#include "ec_commands.h"
|
|
#include "util.h"
|
|
|
|
/* Shutdown mode parameter to write to manufacturer access register */
|
|
#define SB_SHUTDOWN_DATA 0x0010
|
|
|
|
/* Battery info for proto */
|
|
static const struct battery_info info = {
|
|
.voltage_max = 13050, /* mV */
|
|
.voltage_normal = 11400,
|
|
.voltage_min = 9000,
|
|
.precharge_current = 392, /* mA */
|
|
.start_charging_min_c = 0,
|
|
.start_charging_max_c = 60,
|
|
.charging_min_c = 0,
|
|
.charging_max_c = 60,
|
|
.discharging_min_c = 0,
|
|
.discharging_max_c = 60,
|
|
};
|
|
|
|
const struct battery_info *battery_get_info(void)
|
|
{
|
|
return &info;
|
|
}
|
|
|
|
int board_cut_off_battery(void)
|
|
{
|
|
int rv;
|
|
|
|
/* Ship mode command must be sent twice to take effect */
|
|
rv = sb_write(SB_MANUFACTURER_ACCESS, SB_SHUTDOWN_DATA);
|
|
if (rv != EC_SUCCESS)
|
|
return EC_RES_ERROR;
|
|
|
|
rv = sb_write(SB_MANUFACTURER_ACCESS, SB_SHUTDOWN_DATA);
|
|
return rv ? EC_RES_ERROR : EC_RES_SUCCESS;
|
|
}
|
|
|
|
int charger_profile_override(struct charge_state_data *curr)
|
|
{
|
|
const struct battery_info *batt_info;
|
|
/* battery temp in 0.1 deg C */
|
|
int bat_temp_c = curr->batt.temperature - 2731;
|
|
|
|
batt_info = battery_get_info();
|
|
/* Don't charge if outside of allowable temperature range */
|
|
if (bat_temp_c >= batt_info->charging_max_c * 10 ||
|
|
bat_temp_c < batt_info->charging_min_c * 10) {
|
|
curr->requested_current = 0;
|
|
curr->requested_voltage = 0;
|
|
curr->batt.flags &= ~BATT_FLAG_WANT_CHARGE;
|
|
curr->state = ST_IDLE;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* Customs options controllable by host command. */
|
|
#define PARAM_FASTCHARGE (CS_PARAM_CUSTOM_PROFILE_MIN + 0)
|
|
|
|
enum ec_status charger_profile_override_get_param(uint32_t param,
|
|
uint32_t *value)
|
|
{
|
|
return EC_RES_INVALID_PARAM;
|
|
}
|
|
|
|
enum ec_status charger_profile_override_set_param(uint32_t param,
|
|
uint32_t value)
|
|
{
|
|
return EC_RES_INVALID_PARAM;
|
|
}
|