This implements a solution to get battery temperature readings working
on (for example) smartphones with Qualcomm SoCs.
The solution chosen in downstream Qualcomm kernels is exposing
ADC_BAT_THERM_PU* in the ADC driver as temperature channels with the
lookup table ("struct vadc_map_pt") for the specific NTC found in a
device's battery patched to adjust the lookup table. Patching a kernel
per-device is obviously nothing we can put upstream.
The high level solution proposed here:
* ADC driver provides temperature channel in (milli)volt as IIO channel
* generic-adc-thermal driver converts voltage to temperature based on
provided lookup table from DT (driver has one IIO channel input, one
IIO channel output)
* The fuel gauge driver can use that temperature IIO channel to expose
battery temperature via the power supply device
See RFC for other variants or alternatives considered.
Signed-off-by: Luca Weiss <[email protected]>
---
Changes in v2:
- Rebase on linux-next (a different patch to add IIO to
generic-adc-thermal has already landed upstream)
- Un-mark as RFC
- Link to v1:
https://lore.kernel.org/r/[email protected]
---
Luca Weiss (5):
iio: adc: qcom-spmi-adc5: Add battery thermal channels
dt-bindings: thermal: generic-adc: Document #io-channel-cells
thermal/drivers/generic-adc: Allow probe without TZ registration
arm64: dts: qcom: pm7250b: Define battery temperature ADC channels
arm64: dts: qcom: sm7225-fairphone-fp4: Add battery temperature node
.../bindings/thermal/generic-adc-thermal.yaml | 4 ++
arch/arm64/boot/dts/qcom/pm7250b.dtsi | 24 +++++++
arch/arm64/boot/dts/qcom/sm7225-fairphone-fp4.dts | 83 ++++++++++++++++++++++
drivers/iio/adc/qcom-spmi-adc5.c | 6 ++
drivers/iio/adc/qcom-vadc-common.c | 16 +++++
drivers/thermal/thermal-generic-adc.c | 20 +++---
include/linux/iio/adc/qcom-vadc-common.h | 3 +
7 files changed, 147 insertions(+), 9 deletions(-)
---
base-commit: 8dd3bcb7855ad929d732f48e8a2307fdab6a5667
change-id: 20251010-bat-temp-adc-8539bf0b85bc
Best regards,
--
Luca Weiss <[email protected]>