diff --git a/func.d/35-tlp-func-batt b/func.d/35-tlp-func-batt index 0c7504b4..6eb32553 100644 --- a/func.d/35-tlp-func-batt +++ b/func.d/35-tlp-func-batt @@ -313,3 +313,47 @@ soc_gt_stop_recommendation () { return 0 } + +set_batteries_charge_mode() { + # apply charge mode from configuration to all batteries + # - called from bg tasks tlp init [re]start/auto and tlp start + + local bat + new_mode="${CHARGE_MODE:-}" + + if [ -z "$new_mode" ]; then + echo_debug "bat" "set_batteries_charge_mode.not_configured" + return 0 + fi + + for bat in /sys/class/power_supply/*[Bb][Aa][Tt]*/ ; do + if [ ! -d "$bat" ]; then + echo_debug "bat" "set_batteries_charge_mode.battery_not_present" + return 0 + elif supported_modes=$(read_sysf "$bat/charge_types"); then + case $supported_modes in + *"$new_mode"*) + old_chtype="$(echo "$supported_modes" | sed -r 's/.*\[([A-Z][a-z]+)\].*/\1/')" + if [ "$new_mode" != "$old_chtype" ]; then + if write_sysf "$new_mode" "$bat/charge_types"; then + echo_debug "bat" "set_batteries_charge_mode: $new_mode" + else + echo_debug "bat" "set_batteries_charge_mode.write_error" + return 0 + fi + fi + ;; + *) + echo_message "Charge mode $new_mode not supported on system" + echo_debug "bat" "set_batteries_charge_mode.charge_mode_not_supported" + return 0 + ;; + esac + else + echo_debug "bat" "set_batteries_charge_mode.read_error" + return 0 + fi + done + + return 0 +} diff --git a/tlp.in b/tlp.in index f097b32f..bb3584b1 100644 --- a/tlp.in +++ b/tlp.in @@ -279,8 +279,9 @@ case "$_cmd" in echo "done." # apply battery settings - printf "Setting battery charge thresholds..." + printf "Applying battery settings..." init_batteries_thresholds + set_batteries_charge_mode echo "done." # apply radio states @@ -298,8 +299,9 @@ case "$_cmd" in echo "done." # apply battery settings - printf "Setting battery charge thresholds..." + printf "Applying battery settings..." init_batteries_thresholds + set_batteries_charge_mode echo "done." ;; @@ -364,6 +366,7 @@ case "$_cmd" in poweroff_drivebay "$_pp_next" 0 set_usb_suspend 0 auto init_batteries_thresholds + set_batteries_charge_mode set_radio_device_states "$_pp_next" save_runconf unlock_tlp