blob: ec69cc4bce4184895613f9e79d158b3904fe4d14 [file] [log] [blame]
# Copyright 2020 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
menuconfig PLATFORM_EC_BATTERY
bool "Battery support"
default y
depends on DT_HAS_BATTERY_SMART_ENABLED
help
Enables battery support on the board. Requires selection of a battery
and a charger IC.
If using I2C batteries, you must define I2C_PORT_BATTERY in your
board's i2c_map.h file so that the EC code will know which I2C
port the battery is on.
if PLATFORM_EC_BATTERY
config PLATFORM_EC_BATTERY_CONFIG_IN_CBI
bool "Support battery-config-in-CBI"
default y
depends on PLATFORM_EC_CBI_EEPROM_OR_FLASH
depends on PLATFORM_EC_BATTERY && PLATFORM_EC_BATTERY_FUEL_GAUGE
help
If this is enabled, the EC reads battery config from CBI and overrides
the default battery config. If BCIC isn't enabled in
CBI_TAG_COMMON_CONTROL, the device falls back to the legacy
configuration mode.
config PLATFORM_EC_CONSOLE_CMD_BATTERY_CONFIG
bool "Console commands: bcfg"
depends on PLATFORM_EC_BATTERY_CONFIG_IN_CBI
help
Enables console commands:
bcfg read | dump | reset - Read, dump, reset battery config read from
CBI.
choice PLATFORM_EC_BATTERY_SELECT
prompt "Select the battery to use"
default PLATFORM_EC_BATTERY_SMART if DT_HAS_BATTERY_SMART_ENABLED
help
Select the battery used on the board. If you are ensure, select the
smart battery option.
config PLATFORM_EC_BATTERY_SMART
bool "Support a smart battery"
select PLATFORM_EC_I2C
help
Many batteries support the Smart Battery Specification and therefore
have common registers which can be accessed to control and monitor
the battery.
See here for the spec: http://sbs-forum.org/specs/sbdat110.pdf
endchoice # PLATFORM_EC_BATTERY_SELECT
choice PLATFORM_EC_BATTERY_PRESENT_MODE
prompt "Method to use to detect the battery"
default PLATFORM_EC_BATTERY_PRESENT_GPIO if $(dt_path_enabled,/named-gpios/ec_batt_pres_odl)
help
This selects the method to use to detect the presence of a battery.
Battery detection is important since it can be used to indicate that
the case is open, so security features can be disabled. It is also
useful to report to the user when the battery is missing, e.g. with
a desktop icon.
config PLATFORM_EC_BATTERY_PRESENT_CUSTOM
bool "Call a board-provided function"
help
Use this method to provide a board-provided battery_is_present()
function to determine whether the battery is currently present.
This should be implemented in the board code and can use any
reasonable method to detect the battery.
config PLATFORM_EC_BATTERY_PRESENT_GPIO
bool "Check a GPIO"
help
Use this method if a GPIO signals whether the battery is present. The
GPIO should read low if the battery is present, high if absent.
The GPIO is hard-coded to GPIO_BATT_PRES_ODL so you should define this
in the device tree. The convention is to use the signal
name from schematic as both the node name and label for the GPIO. For
example:
/* gpio.dts */
ec_batt_pres_odl {
gpios = <&gpioe 5 GPIO_INPUT>;
enum-name = "EC_BATT_PRES_ODL";
alias = "GPIO_BATT_PRES_ODL";
};
config PLATFORM_EC_BATTERY_PRESENT_NONE
bool "No battery present signal"
help
If the platform doesn't provide a battery present signal, then the
battery support uses I2C accesses only to the battery fuel gauge to
decide if the battery is present.
endchoice # PLATFORM_EC_BATTERY_PRESENT_MODE
config PLATFORM_EC_USE_BATTERY_DEVICE_CHEMISTRY
bool "Provide information about battery chemistry"
help
Enable this to specify the chemistry of the battery device. It is
only used for stress testing of reading the battery information over
I2C.
config PLATFORM_EC_BATTERY_DEVICE_CHEMISTRY
string "Battery-device chemistry"
depends on PLATFORM_EC_USE_BATTERY_DEVICE_CHEMISTRY
help
Specify the battery chemistry for use with the I2C stress test.
The value provided here must match what is read from the real
battery. This is used in sb_i2c_test_read() to check that the battery
is returning the right information. If it is not, there might be
something wrong with the I2C implementation.
config PLATFORM_EC_I2C_VIRTUAL_BATTERY
bool "I2C virtual battery"
help
Enables driver for a virtual battery. It is used to minimalize I2C
traffic which is generated by the I2C_PASSTHRU host command.
The battery parameters, which are already cached in EC are used to
return desired data to host instead of issuing I2C transaction every
time.
config PLATFORM_EC_I2C_VIRTUAL_BATTERY_ADDR
hex "I2C virtual battery address"
default 0x0B if PLATFORM_EC_BATTERY_SMART
range 0x00 0x7f
depends on PLATFORM_EC_I2C_VIRTUAL_BATTERY
help
This config sets i2c address that will be intercepted by virtual
battery feature. All communication to this port will be cached
to decrease i2c communication traffic.
This should be equal to the address of real battery.
config PLATFORM_EC_BATTERY_CRITICAL_SHUTDOWN_CUT_OFF
bool "Enable battery cut off on critical power level"
help
If this option is enabled, the battery will enter cut-off
mode in case of critical power level.
config PLATFORM_EC_BATTERY_CHECK_CHARGE_TEMP_LIMITS
bool "Monitor battery temperature while charging"
help
Enable monitoring of battery temperature while charging and
stop charging if is outside of the safe range.
config PLATFORM_EC_BATTERY_CUT_OFF
bool "Host/Console command: battery cut-off"
help
Enables support for disconnecting the battery using the "cutoff"
console command and the EC_CMD_BATTERY_CUT_OFF host command.
Once defined, a board specific board_cut_off_battery() function
has to be provided.
config PLATFORM_EC_BATTERY_CUTOFF_TIMEOUT_MSEC
int "Timeout for battery cutoff completion"
depends on PLATFORM_EC_BATTERY_CUT_OFF
default 8000
help
After the EC executes battery cutoff, it'll wait for this amount of
time in msec before deciding the cutoff failed.
config PLATFORM_EC_BATTERY_CUTOFF_VOL_UP_DISABLED
bool "Disable Volume Up button sequence for battery cutoff"
default n
help
Disable volume up button sequence to trigger battery cutoff.
config PLATFORM_EC_BATTERY_FUEL_GAUGE
bool "Board supplies battery info"
help
The fuel gauge information is used to cut off the battery for shipping
mode and to check the charge/discharge FET status. The battery
information is used to set voltage, current and temperature operating
limits for the battery.
config PLATFORM_EC_BATTERY_INIT_TYPE_RETRY_COUNT
int "Battery type read retry limit"
default 0
help
Number of times to retry reading battery manufacturer or name during
initialization.
Some battery controller chips (such as BQ40Z555) will
NACK I2C transactions while they perform internal housekeeping, and
do not update the SBS BatteryStatus either; the EC will treat failures
in these cases as evidence that the battery is disconnected, and
failures of this type during battery initialization will leave the
battery permanently ignored even if present. If a battery is known
to exhibit this behavior, setting this option to a nonzero value will
retry reading each of those fields from the battery
(up to a total of COUNT + 1 attempts) after a short delay, allowing
the battery time to complete its housekeeping.
config PLATFORM_EC_BATTERY_HW_PRESENT_CUSTOM
bool "Hardware check of battery presence"
help
Once defined, the charger will check a board specific function
battery_hw_present() for battery hw presence as an additional
condition to determine if power on is allowed for factory override,
where allowing booting of a bare board with no battery and no power
button press is required.
config PLATFORM_EC_BATTERY_REVIVE_DISCONNECT
bool "Check battery disconnect state"
help
Check for battery in disconnect state (similar to cut-off state).
If this battery is found to be in disconnect state, take it out of
this state by force-applying a charge current. Once defined,
a battery_get_disconnect_state() function has to be provided.
config PLATFORM_EC_BATTERY_MEASURE_IMBALANCE
bool "Measure the battery cells imbalance"
help
Smart battery driver should measure the voltage cell imbalance in the
battery pack.
This requires a battery driver capable of the measurement.
If enabled, the AP enabling may be prevented if battery is too
imbalanced.
config PLATFORM_EC_BATTERY_MAX_IMBALANCE_MV
int "Max battery imbalance in millivolts"
depends on PLATFORM_EC_BATTERY_MEASURE_IMBALANCE
default 200
help
Imbalanced battery packs in this situation appear to have balanced
charge very quickly after beginning the charging cycle, since dV/dQ
rapidly decreases as the cell is charged out of deep discharge.
Increasing the value of
CONFIG_PLATFORM_EC_CHARGER_MIN_BAT_PCT_IMBALANCED_POWER_ON will make a
system tolerant of larger values of
CONFIG_PLATFORM_EC_BATTERY_MAX_IMBALANCE_MV.
config PLATFORM_EC_BATTERY_STBL_STAT
bool "Check whether the battery is initialized and stable"
help
Enables support for checking the specific battery status to
judge whether the battery is initialized and stable when the battery
wakes up from ship mode. Use two MASKs to provide logical AND and
logical OR options for different status.
For example:
STATUS_TERMINATE_CHARGE_ALARM(TCA):0x4000
STATUS_TERMINATE_DISCHARGE_ALARM(TDA):0x0800
Logical OR -- just check one of TCA/TDA mask:
CONFIG_PLATFORM_EC_BATT_ALARM_MASK1=(0x4000 | 0x0800)
CONFIG_PLATFORM_EC_BATT_ALARM_MASK2=0xFFFF
Logical AND -- check both TCA/TDA mask:
CONFIG_PLATFORM_EC_BATT_ALARM_MASK1=0x4000
CONFIG_PLATFORM_EC_BATT_ALARM_MASK2=0x0800
The default configuration is logical OR.
if PLATFORM_EC_BATTERY_STBL_STAT
config PLATFORM_EC_BATT_ALARM_MASK1
hex "The battery status mask"
default 0x4800
help
Use two MASKs to provide logical AND and logical OR options for different
status. Default mask 0x4800 means
(STATUS_TERMINATE_CHARGE_ALARM | STATUS_TERMINATE_DISCHARGE_ALARM),
any one of these two masks is set, the battery state can be considered
stable.
config PLATFORM_EC_BATT_ALARM_MASK2
hex "The battery status mask"
default 0xFFFF
help
Use two MASKs to provide logical AND and logical OR options for different
status. Default mask 0xFFFF means do not use this mask.
endif # PLATFORM_EC_BATTERY_STBL_STAT
config PLATFORM_EC_CHARGER_MIN_BAT_PCT_IMBALANCED_POWER_ON
int "Minimum battery percentage for power on with an imbalanced pack"
depends on PLATFORM_EC_BATTERY_MEASURE_IMBALANCE
default 5
range 0 100
help
If battery pack is in imbalanced state and current state of charge is
below this value, the AP won't be powered on.
config PLATFORM_EC_BATT_FULL_CHIPSET_OFF_INPUT_LIMIT_MV
int "Voltage limit in mV when battery is full and AP is off"
depends on PLATFORM_EC_USB_PE_SM && PLATFORM_EC_CHARGE_MANAGER
default -1
help
If set to a non-negative value, input voltage will be reduced to given
value when chipset is in S5/G3 state and battery is fully charged.
This condition is checked on chipset shutdown and startup, AC change
and battery SOC change.
choice PLATFORM_EC_BATTERY_API
prompt "Battery API version"
default PLATFORM_EC_BATTERY_V2
help
Select the battery API version. V2 is required on dual-battery-systems
and hostless bases with a battery. V1 should not be used except for
testing on legacy boards.
config PLATFORM_EC_BATTERY_V1
bool "Enable battery API v1"
depends on !PLATFORM_EC_BATTERY_V2
help
This enables battery API version 1, with support for only a single
battery. Battery information strings are trimmed to 8 characters.
config PLATFORM_EC_BATTERY_V2
bool "Enable battery API v2"
help
This enables battery API version 2. This version can support multiple
batteries and full size string values in the battery information
including manufacturer, model, chemistry.
endchoice
if PLATFORM_EC_BATTERY_V2
config PLATFORM_EC_BATTERY_COUNT
int "Battery count"
default 1
help
The number of batteries in the system. It matters only when
PLATFORM_EC_BATTERY_V2 is enabled. Note this is different from
BATTERY_TYPE_COUNT.
config PLATFORM_EC_HOSTCMD_BATTERY_V2
bool "Enable host command battery API v2"
default y
help
Include host commands to fetch battery information from
ec_response_battery_static/dynamic_info structures, only make sense
when PLATFORM_EC_BATTERY_V2 is enabled.
endif # PLATFORM_EC_BATTERY_V2
if PLATFORM_EC_I2C_VIRTUAL_BATTERY
config PLATFORM_EC_SMART_BATTERY_OPTIONAL_MFG_FUNC
bool "Support smart battery optional MFG function"
help
Enable this option when need support smart battery optional commands.
Only make sense when PLATFORM_EC_I2C_VIRTUAL_BATTERY.
endif # PLATFORM_EC_I2C_VIRTUAL_BATTERY
config PLATFORM_EC_BATT_HOST_FULL_FACTOR
int "This value is used by the host to calculate the ETA for full charge"
default 97
help
Today, EC's PLATFORM_EC_BATT_HOST_FULL_FACTOR is the source of truth.
Powerd gets the value from the EC over EC_CMD_DISPLAY_SOC.
endif # PLATFORM_EC_BATTERY
OSZAR »