#!/usr/bin/env clitest
# Test charge thresholds for Macbooks
# Requirements:
# * Hardware: Apple Silcon Macbook w/ MacOS firmware 13.0+
# * Software: Asahi Linux kernel 6.3+
# Copyright (c) 2024 Thomas Koch <linrunner at gmx.net>.
# SPDX-License-Identifier: GPL-2.0-or-later
#
$ # +++ Apple Silicon Macbooks ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$ #
$ # --- tlp start
$ sudo tlp start -- START_CHARGE_THRESH_BAT0= STOP_CHARGE_THRESH_BAT0= START_CHARGE_THRESH_BAT1= STOP_CHARGE_THRESH_BAT1=
TLP started in AC mode (auto).
$ sudo tlp start -- START_CHARGE_THRESH_BAT0=95 STOP_CHARGE_THRESH_BAT0=100 START_CHARGE_THRESH_BAT1= STOP_CHARGE_THRESH_BAT1=
TLP started in AC mode (auto).
$ sudo tlp start -- START_CHARGE_THRESH_BAT0="42" STOP_CHARGE_THRESH_BAT0="80" START_CHARGE_THRESH_BAT1= STOP_CHARGE_THRESH_BAT1=
TLP started in AC mode (auto).
$ sudo tlp start -- START_CHARGE_THRESH_BAT0="0" STOP_CHARGE_THRESH_BAT0="9" START_CHARGE_THRESH_BAT1= STOP_CHARGE_THRESH_BAT1=
Error in configuration at STOP_CHARGE_THRESH_BAT0="9": not specified or invalid (must be 80 or 100). Battery skipped.
TLP started in AC mode (auto).
$ sudo tlp start -- START_CHARGE_THRESH_BAT0="0" STOP_CHARGE_THRESH_BAT0="101" START_CHARGE_THRESH_BAT1= STOP_CHARGE_THRESH_BAT1=
Error in configuration at STOP_CHARGE_THRESH_BAT0="101": not specified or invalid (must be 80 or 100). Battery skipped.
TLP started in AC mode (auto).
$ sudo tlp start -- START_CHARGE_THRESH_BAT0="DEF" STOP_CHARGE_THRESH_BAT0="DEF" START_CHARGE_THRESH_BAT1= STOP_CHARGE_THRESH_BAT1=
TLP started in AC mode (auto).
$ #
$ # --- tlp setcharge w/o arguments
$ sudo tlp setcharge -- START_CHARGE_THRESH_BAT0="77" STOP_CHARGE_THRESH_BAT0="80" X_SOC_CHECK=0
Setting temporary charge thresholds for macsmc-battery:
  stop  =  80
  start =  75 (due to hardware constraint)
$ sudo tlp setcharge -- START_CHARGE_THRESH_BAT0="66" STOP_CHARGE_THRESH_BAT0="80" X_SOC_CHECK=0
Setting temporary charge thresholds for macsmc-battery:
  stop  =  80 (no change)
  start =  75 (no change)
$ sudo tlp setcharge -- START_CHARGE_THRESH_BAT0="0" STOP_CHARGE_THRESH_BAT0="XYZZY"
Error in configuration at STOP_CHARGE_THRESH_BAT0="XYZZY": not specified or invalid (must be 80 or 100). Aborted.
$ sudo tlp setcharge -- START_CHARGE_THRESH_BAT0="0" STOP_CHARGE_THRESH_BAT0="42"
Error in configuration at STOP_CHARGE_THRESH_BAT0="42": not specified or invalid (must be 80 or 100). Aborted.
$ sudo tlp setcharge -- START_CHARGE_THRESH_BAT0="0" STOP_CHARGE_THRESH_BAT0="101"
Error in configuration at STOP_CHARGE_THRESH_BAT0="101": not specified or invalid (must be 80 or 100). Aborted.
$ sudo tlp setcharge -- START_CHARGE_THRESH_BAT0="DEF" STOP_CHARGE_THRESH_BAT0="DEF"
Setting temporary charge thresholds for macsmc-battery:
  stop  = 100
  start = 100 (due to hardware constraint)
$ sudo tlp setcharge -- NATACPI_ENABLE=0 TPACPI_ENABLE=0 START_CHARGE_THRESH_BAT0="DEF" STOP_CHARGE_THRESH_BAT0="DEF"
Error: battery charge thresholds not available.
$ #
$ # --- tlp setcharge w/ arguments
$ sudo tlp setcharge 77 80 -- X_SOC_CHECK=0
Setting temporary charge thresholds for macsmc-battery:
  stop  =  80
  start =  75 (due to hardware constraint)
$ sudo tlp setcharge 66 80 -- X_SOC_CHECK=0
Setting temporary charge thresholds for macsmc-battery:
  stop  =  80 (no change)
  start =  75 (no change)
$ sudo tlp setcharge 0 XYZZY
Error: stop charge threshold (XYZZY) for macsmc-battery is not specified or invalid (must be 80 or 100). Aborted.
$ sudo tlp setcharge 0 42
Error: stop charge threshold (42) for macsmc-battery is not specified or invalid (must be 80 or 100). Aborted.
$ sudo tlp setcharge 0 101
Error: stop charge threshold (101) for macsmc-battery is not specified or invalid (must be 80 or 100). Aborted.
$ sudo tlp setcharge DEF DEF -- X_THRESH_SIMULATE_READERR="1"
Error: could not read current stop charge threshold for macsmc-battery. Aborted.
$ sudo tlp setcharge BAT1
Error: battery BAT1 not present.
$ sudo tlp setcharge 0 3 BAT1
Error: battery BAT1 not present.
$ sudo tlp setcharge XYZZY ABCDE BAT1
Error: battery BAT1 not present.
$ # --- Reset to hardware defaults
$ sudo tlp setcharge DEF DEF
Setting temporary charge thresholds for macsmc-battery:
  stop  = 100
  start = 100 (due to hardware constraint)
$ #
$ # --- tlp-stat
$ sudo tlp-stat -b -- | grep -E 'charge_control'
/sys/class/power_supply/macsmc-battery/charge_control_start_threshold =    100 [%]
/sys/class/power_supply/macsmc-battery/charge_control_end_threshold   =    100 [%]
$ sudo tlp-stat -b -- X_THRESH_SIMULATE_READERR=1 | grep -E 'charge_control'
/sys/class/power_supply/macsmc-battery/charge_control_start_threshold = (not available) [%]
/sys/class/power_supply/macsmc-battery/charge_control_end_threshold   = (not available) [%]
