mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-29 18:11:05 +00:00
On samus it is possible to have AC plugged in but have the battery discharging. So, add a new variable to charge state machine for battery charging status and use that where necessary. For example, the low battery shutdown code should now be based on whether or not battery is charging rather than if AC is present. This also changes the hibernate behavior when battery is low. The change is to wait 30 seconds in G3 of low battery with no charging before hibernating because for some chargers, like a USB PD charger, the charger may increase it's current limit after a little bit of time. BUG=chrome-os-partner:34485 BRANCH=samus TEST=test on samus. use low power charger and make sure that ectool battery shows the "DISCHARGING" flag. use zinger and see "CHARGING" flag. also use power_supply_info to make sure that the battery state accurately reflects reality. Change-Id: I8ac0267dd393071c4ca1fa24fbc9a13bf27848a9 Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/235491 Reviewed-by: Bill Richardson <wfrichar@chromium.org>
73 lines
1.9 KiB
C
73 lines
1.9 KiB
C
/* Copyright (c) 2014 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.
|
|
*/
|
|
|
|
#include "battery.h"
|
|
#include "charger.h"
|
|
#include "timer.h"
|
|
|
|
#ifndef __CROS_EC_CHARGE_STATE_V2_H
|
|
#define __CROS_EC_CHARGE_STATE_V2_H
|
|
|
|
/*
|
|
* The values exported by charge_get_state() and charge_get_flags() are used
|
|
* only to control the LEDs (with one not-quite-correct exception). For V2
|
|
* we use a different set of states internally.
|
|
*/
|
|
enum charge_state_v2 {
|
|
ST_IDLE = 0,
|
|
ST_DISCHARGE,
|
|
ST_CHARGE,
|
|
ST_PRECHARGE,
|
|
|
|
NUM_STATES_V2
|
|
};
|
|
|
|
struct charge_state_data {
|
|
timestamp_t ts;
|
|
int ac;
|
|
int batt_is_charging;
|
|
struct charger_params chg;
|
|
struct batt_params batt;
|
|
enum charge_state_v2 state;
|
|
int requested_voltage;
|
|
int requested_current;
|
|
int desired_input_current;
|
|
};
|
|
|
|
/*
|
|
* Optional customization.
|
|
*
|
|
* On input, the struct reflects the default behavior. The function can make
|
|
* changes to the state, requested_voltage, or requested_current.
|
|
*
|
|
* Return value:
|
|
* >0 Desired time in usec for this poll period.
|
|
* 0 Use the default poll period (which varies with the state).
|
|
* <0 An error occurred. The poll time will be shorter than usual. Too
|
|
* many errors in a row may trigger some corrective action.
|
|
*/
|
|
int charger_profile_override(struct charge_state_data *);
|
|
|
|
/*
|
|
* Access to custom profile params through host commands.
|
|
* What this does is up to the implementation.
|
|
*/
|
|
enum ec_status charger_profile_override_get_param(uint32_t param,
|
|
uint32_t *value);
|
|
enum ec_status charger_profile_override_set_param(uint32_t param,
|
|
uint32_t value);
|
|
|
|
/**
|
|
* Set the charge input current limit. This value is stored and sent every
|
|
* time AC is applied.
|
|
*
|
|
* @param ma New input current limit in mA
|
|
* @return EC_SUCCESS or error
|
|
*/
|
|
int charge_set_input_current_limit(int ma);
|
|
|
|
#endif /* __CROS_EC_CHARGE_STATE_V2_H */
|
|
|