| # 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 |