power: supply: macsmc: add "auto-discharge" charge behaviour for CHLS - #521
Conversation
|
Tested on Apple MacBook Pro 13" M1 (j293), kernel 6.19.14, on AC at 100% (this firmware uses the
Battery restored to 100% / default afterwards. |
|
Using a module option is not a good idea. It most likely will not be accepted upstream and we do not want to carry non-upstreamable patches unless they bring clear benefits. A possible alternative solution might be to add a charge behaviour to control this. See charge_behaviour in Documentation/ABI/testing/sysfs-class-power and add either It would be worth checking if the charge thresholds are now respected while the laptop is powered off now that macOS has charge thresholds in 26.4 / 26.5 and later. |
When lowering the charge-control end threshold on machines that use the CHLS key, the driver unconditionally sets CHLS_FORCE_DISCHARGE, actively draining the battery down to the limit even on AC power. Most laptop charge-limit implementations instead just cap charging at the threshold and let the battery drain naturally through use. Add a new "auto-discharge" charge_behaviour value that opts into the active discharge, and make end-threshold writes preserve the current CHLS_FORCE_DISCHARGE bit instead of forcing it on. "auto" keeps its documented meaning of only respecting the thresholds. The selection lives in the CHLS key itself, so no state is kept in the driver, it persists across reboots, and systems upgrading from the old behaviour keep force-discharge enabled until they explicitly write "auto". Resolves the existing TODO. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: James A DellaMorte <james.dellamorte@gmail.com>
0ed7acc to
922f0e1
Compare
|
Reworked as suggested, I also rebased. Tested on Apple MacBook Pro 13" M1 (j293), kernel 7.1.5-asahidev+, on AC at 96%, |
Lowering the charge limit on CHLS machines always sets
CHLS_FORCE_DISCHARGE, so the battery actively drains down to the limit even on AC. Per review feedback, this is now implemented as a newcharge_behaviourvalue instead of a module parameter:auto-dischargevalue (enum + sysfs string + ABI doc): likeauto, but actively discharge down to the charge control end threshold.CHLS_FORCE_DISCHARGEbit instead of forcing it on;autokeeps its documented cap-only meaning.auto.Resolves the in-code TODO. Tested on M1 MacBook Pro (j293), see comments.