• Claudiu Beznea's avatar
    iio: adc: at91-sama5d2_adc: add support for temperature sensor · 5ab38b81
    Claudiu Beznea authored
    The ADC on SAMA7G5 has a dedicated channel (channel 31) for measuring
    in-SoC temperature. 2 inputs are multiplexed on channel 31, VTEMP and
    VBG as follows:
    
              `
              | \       +-----+
    VBG   --->|  | ch31 |     |
    Vtemp --->|  |----->| ADC |
              |  /      |     |
              | /       +-----+
              .
    
    where:
    - VTEMP is proportional to the absolute temperature voltage
    - VBG is a quasi-temperature independent voltage
    
    Both VBG and VTEMP are needed to determine the correct in-SoC
    temperature. At a moment of time only one of these could be measured, the
    selection being done with bit SRCLCH bit of ACR register. The formula to
    calculate the temperature is as follows:
    
    P1 + (Vref * (VTEMP - P6 - P4 * VBG)) / (VBG * VTEMP_DT)
    
    where:
    - P1, P4, P6 are calibration data retrieved from OTP memory
    - Vref is the reference voltage for ADC
    - VTEMP_DT is the voltage sensitivity to temperature and is constant
    - VTEMP, VBG are the measured values from channel 31
    
    For better resolution before reading the temperature certain settings
    for oversampling ratio, sample frequency, EMR.TRACKX, MR.TRACKTIM are
    applied. The initial settings are reapplied at the end of temperature
    reading.
    
    Current support is not integrated with trigger buffers channel 31 not
    being enabled/disabled in functions at91_adc_buffer_prepare(),
    at91_adc_buffer_postdisable() thus the conversion for channel 31 is not
    done in case trigger buffers are enabled. In case of trigger buffers are
    enabled and temperature requests are received in the driver though
    at91_adc_read_temp() the at91_adc_read_temp() will return with an error
    code.
    Signed-off-by: default avatarClaudiu Beznea <claudiu.beznea@microchip.com>
    Link: https://lore.kernel.org/r/20220803102855.2191070-18-claudiu.beznea@microchip.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
    5ab38b81
at91-sama5d2_adc.c 70.3 KB