• Martin Blumenstingl's avatar
    iio: adc: meson-saradc: add support for the chip's temperature sensor · 723a61e0
    Martin Blumenstingl authored
    Channel 6 of the SAR ADC can be switched between two inputs:
    SAR_ADC_CH6 input (an actual pad on the SoC) and the signal from the
    temperature sensor inside the SoC.
    
    To get usable results from the temperature sensor we need to read the
    corresponding calibration data from the eFuse and pass it to the SAR ADC
    registers. If the temperature sensor is not calibrated (the eFuse data
    contains a bit for this) then the driver will only register the
    iio_chan_spec's for voltage measurements.
    
    This only enables the temperature sensor for the Meson8 SoC. Meson8b and
    Meson8m2 SoCs can be supported in the future as well but we first need
    a way to pass the fifth TSC (temperature sensor coefficient) bit to the
    HHI register area (apart from that the infrastructure as already
    implemented for Meson8 can be used). On the 64-bit SoCs (GXBB, GXL and
    GXM) the temperature sensor inside SAR ADC is firmware-controlled (by
    BL30, we can simply use the SCPI hwmon driver to get the chip
    temperature).
    
    To keep the devicetree interface backwards compatible we simply skip the
    temperature sensor initialization if no eFuse nvmem cell is passed via
    devicetree.
    
    The public documentation for the SAR ADC IP block does not explain how
    to use the registers to read the temperature. The logic from this patch
    is based on reading and understanding Amlogic's GPL kernel sources.
    Signed-off-by: default avatarMartin Blumenstingl <martin.blumenstingl@googlemail.com>
    Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
    723a61e0
meson_saradc.c 39 KB