Seeking empirical data and configuration paths for charge termination behavior and charge limiting on Redmi Note 9 Power (Snapdragon 662, 6000 mAh)
Objective
- Characterize how MIUI (Android 10/11/12 builds) terminates charging on this model across different power protocols (5V/2A, QC 3.0 18W, USB-PD 18W).
- Determine whether this platform exposes reliable, non-hacky mechanisms to cap charge at 80-90% (to improve cycle life) via kernel/HAL/sysfs/vendor properties, and how these interact with MIUI’s power/thermal stack.
- Compare stock MIUI vs custom ROMs/kernels in terms of: termination current, float voltage, taper behavior, and re-charge hysteresis near 100%.
Background and hypotheses
- Many Qualcomm SMB5-based chargers (PM6150 family + SMB13xx) expose sysfs for float voltage, taper/termination current, and step/JEITA charging. Xiaomi sometimes gates or overlays these via power HAL or thermal-engine policies.
- On several Xiaomi mid-range devices, the battery driver may present nodes such as:
- /sys/class/power_supply/battery/voltage_now, voltage_max, constant_charge_current_max
- /sys/class/power_supply/battery/charge_full, charge_counter, capacity, health
- /sys/class/power_supply/battery/charge_stop_level or charge_control_limit[_max] (when implemented)
- /sys/class/power_supply/usb/input_current_limit or /sys/class/power_supply/main/…
- Charge termination typically occurs when current tapers below a threshold (e.g., C/20-C/50) near float voltage. Observed behavior can vary by charger type and thermal headroom.
Questions for owners/developers
1) Termination characteristics
- What final float voltage (voltage_now near 100%) do you observe on stock MIUI? Does it settle around 4.35 V nominal (common on high-voltage LiPo) or lower (e.g., 4.2-4.32 V)? Any variance by firmware build?
- What termination current do you see at the moment capacity flips from 99% to 100% (derived from input_current_limit or battery current nodes such as current_now, if exposed)?
- Does MIUI re-trigger charge cycles between 98-100% when idle on charger (i.e., hysteresis width and frequency)?
2) Protocol/charger dependency
- Compare behavior on:
- 5V/2A USB-A (dumb)
- QC 3.0 9V profiles (Xiaomi 18W)
- USB-PD 9V 2A PPS-off (if any)
- Does float voltage or termination current differ by protocol? Any thermal throttling artifacts (e.g., stepping down to 5V under sustained heating)?
3) Charge limiting interfaces
- Do you have charge_stop_level or charge_control_limit exposed under /sys/class/power_supply/battery on this device with:
- Stock MIUI kernel
- Custom kernels (CAF-based) or ROMs (LineageOS, ArrowOS, etc.)
- Any effective vendor properties for limiting SOC (examples seen on other Xiaomi devices: persist.vendor.smart_charge_limit, persist.vendor.charge_stop_level), and do they persist across reboots/OTAs?
4) Thermal/Power HAL interplay
- Does thermal-engine.conf (or vendor thermal XML) impose aggressive tapering or early termination under modest surface temps? Any differences between “Balanced” vs “Performance” power modes in MIUI affecting charge current caps?
- On custom ROMs using AOSP power HAL, do you observe higher stability in taper and less oscillation near 100%?
5) Battery health telemetry
- Is charge_full and (if available) charge_full_design readable? What degradation percentages are seen on multi-year units?
- Any accessible cycle count nodes or vendor BMS stats (often under /sys/class/power_supply/bms or /sys/devices/platform/soc/…/power_supply/)?
Suggested measurement methodology (non-invasive)
- From 70% to 100%, screen off, airplane mode:
- Log every 30-60 seconds:
- capacity, voltage_now, current_now (signed), temp
- usb/main input_current_limit and voltage
- status, health
- Note charger type and ambient temperature.
- Sample shell snippet (adjust paths as present on your build):
while true; do
date +“%F %T”
for n in capacity voltage_now current_now temp status health; do cat /sys/class/power_supply/battery/$n 2>/dev/null; done
for n in input_current_limit voltage_now online; do cat /sys/class/power_supply/usb/$n 2>/dev/null; done
sleep 60
done
- Optional: correlate with logcat tags from healthd/batterysvc and check for thermal events.
What to share
- ROM/firmware build (MIUI version and Android base), region variant, bootloader status (locked/unlocked), kernel (stock/custom).
- Charger model and protocol negotiated (as reported by sysfs or a PD/QC analyzer if available).
- Final float voltage observed and inferred termination current.
- Presence and effectiveness of any charge limit controls (sysfs paths, app/kernel hooks).
- Any kernel source references confirming the charger IC and BMS driver used on this device.
Goal
- Build a reproducible profile of the Redmi Note 9 Power’s charging behavior and identify reliable, user-accessible ways to cap SoC for longevity-ideally without breaking OTA or requiring persistent root-plus document any ROMs/kernels that already implement proper charge limiting on this platform.