The battery is the rechargeable internal power source for the device.
CONFIG_PLATFORM_EC_BATTERY enables battery support in the EC application. Refer to Kconfig.battery for all sub-options controlling battery behavior.
Add battery configs to either the program.conf or project.conf file for your project.
Example:
# Battery CONFIG_PLATFORM_EC_BATTERY=y CONFIG_PLATFORM_EC_BATTERY_SMART=y CONFIG_PLATFORM_EC_BATTERY_FUEL_GAUGE=y CONFIG_PLATFORM_EC_BATTERY_CUT_OFF=y CONFIG_PLATFORM_EC_BATTERY_HW_PRESENT_CUSTOM=y CONFIG_PLATFORM_EC_BATTERY_REVIVE_DISCONNECT=y
Example:
batteries {
default_battery: vendor_part {
compatible = "vendor,part";
};
vendor2_part2 {
compatible = "vendor2,part2";
};
};
Here vendor_part will be the default battery type. If this node label is present in the overlay, the DEFAULT_BATTERY_TYPE is set in the battery shim code with the labeled battery type. The vendor and part references must match an existing battery defined in battery bindings directory.
named-gpiosExample:
named-gpios {
compatible = "named-gpios";
...
...
ec_batt_pres_odl {
gpios = <{SOME GPIO} GPIO_INPUT>;
};
...
...
};
See the Zephyr gpios doc for more information on the named-gpios node.
named-i2c-portsExample:
named-i2c-ports {
compatible = "named-i2c-ports";
...
...
battery {
i2c-port = <{i2c_phandle}>;
remote-port = <{I2C_PASSTHRU-PORT-NUMBER}>;
enum-names = "I2C_PORT_BATTERY";
};
...
...
}
Most battery fuel gauges support operation of only 100 KHz on the I2C bus, so ensure the clock-frequency for the bus is set appropriately. See the Zephyr I2C doc for more information on the named-i2c-ports node.
Refer to the cros-ec-i2c-port-base.yaml child-binding file for details about each property.
Example CL enabling batteries on a board
vendor,part to battery-smart enumvendor,part.yaml to the battery bindings directory beginning with:description: "VENDOR PART"
compatible: "vendor,part"
include: battery-smart.yaml
properties:
enum-name:
type: string
default: "vendor,part"
Refer to the vendor's datasheet to set all the fuel gauge and battery properties required in the vendor,part.yaml file.
Example CL adding a new battery
Enabling CONFIG_PLATFORM_EC_BATTERY_PRESENT_CUSTOM requires the board to provide a custom battery_is_present() function.
Battery support alone does not enable any threads. However, the charger task requires the battery module for correct operation.
The battery EC console command may be invoked to check battery information on a flashed board.
Example output of uart:~$ battery:
Status: 0x00e0 FULL DCHG INIT Param flags:00000002 Temp: 0x0b69 = 292.1 K (19.0 C) V: 0x2ffc = 12284 mV V-desired: 0x0000 = 0 mV I: 0x0000 = 0 mA I-desired: 0x0000 = 0 mA Charging: Not Allowed Charge: 96 % Display: 98.7 % Manuf: LGC Device: AC17A8M Chem: LION Serial: 0xd3b3 V-design: 0x2d1e = 11550 mV Mode: 0x6001 Abs charge:73 % Remaining: 3901 mAh Cap-full: 4074 mAh Design: 5360 mAh Time-full: 0h:0 Empty: 0h:0 full_factor:0.97 shutdown_soc:4 %
The pwr_avg EC console command logs the battery charging rate by querying the battery fuel gauge driver.
Example output of uart:~$ pwr_avg:
Charging
mv = 13073 ma = 439 mw = 573
Discharging
mv = 12824 ma = -146 mw = -1872
Note: A fully charged board may report ma = 0 and mw = 0 average rates.
The chgstate EC console command may be invoked to debug and manipulate machine charging state.
Example output of uart:~$ chgstate:
state = charge ac = 1 batt_is_charging = 1 chg.*: voltage = 13200mV current = 0mA input_current = 3000mA status = 0xc010 option = 0x2830004 flags = 0x0 batt.*: temperature = 26C state_of_charge = 100% voltage = 13037mV current = 0mA desired_voltage = 0mV desired_current = 0mA flags = 0x2 remaining_capacity = 4436mAh full_capacity = 4436mAh is_present = YES requested_voltage = 0mV requested_current = 0mA chg_ctl_mode = 0 manual_voltage = -1 manual_current = -1 user_current_limit = -1mA battery_seems_to_be_dead = 0 battery_seems_to_be_disconnected = 0 battery_was_removed = 0 debug output = off
The chargestate ectool command may be invoked to debug and manipulate machine charging state.
Usage output of uart: # ectool chargestate:
Usage: chargestate show - show current state chargestate param NUM [VALUE] - get/set param NUM chargestate param help - show known param NUMs