• Stefan Agner's avatar
    iio: adc: vf610: use ADC clock within specification · ecc682b2
    Stefan Agner authored
    commit f54e9f2b upstream.
    
    Depending on conversion mode used, the ADC clock (ADCK) needs
    to be below a maximum frequency. According to Vybrid's data
    sheet this is 20MHz for the low power conversion mode.
    
    The ADC clock is depending on input clock, which is the bus
    clock by default. Vybrid SoC are typically clocked at at 400MHz
    or 500MHz, which leads to 66MHz or 83MHz bus clock respectively.
    Hence, a divider of 8 is required to stay below the specified
    maximum clock of 20MHz.
    
    Due to the different bus clock speeds, the resulting sampling
    frequency is not static. Hence use the ADC clock and calculate
    the actual available sampling frequency dynamically.
    
    This fixes bogous values observed on some 500MHz clocked Vybrid
    SoC. The resulting value usually showed Bit 9 being stuck at 1,
    or 0, which lead to a value of +/-512.
    Signed-off-by: default avatarStefan Agner <stefan@agner.ch>
    Acked-by: default avatarFugang Duan <B38611@freescale.com>
    Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    ecc682b2
vf610_adc.c 18 KB