• Maarten ter Huurne's avatar
    IIO: Ingenic JZ47xx: Set clock divider on probe · 5a304e1a
    Maarten ter Huurne authored
    The SADC component can run at up to 8 MHz on JZ4725B, but is fed
    a 12 MHz input clock (EXT). Divide it by two to get 6 MHz, then
    set up another divider to match, to produce a 10us clock.
    
    If the clock dividers are left on their power-on defaults (a divider
    of 1), the SADC mostly works, but will occasionally produce erroneous
    readings. This led to button presses being detected out of nowhere on
    the RS90 every few minutes. With this change, no ghost button presses
    were logged in almost a day worth of testing.
    
    The ADCLK register for configuring clock dividers doesn't exist on
    JZ4740, so avoid writing it there.
    
    A function has been introduced rather than a flag because there is a lot
    of variation between the ADCLK registers on JZ47xx SoCs, both in
    the internal layout of the register and in the frequency range
    supported by the SADC. So this solution should make it easier
    to add support for other JZ47xx SoCs later.
    
    Fixes: 1a78daea ("iio: adc: probe should set clock divider")
    Signed-off-by: default avatarMaarten ter Huurne <maarten@treewalker.org>
    Signed-off-by: default avatarArtur Rojek <contact@artur-rojek.eu>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
    5a304e1a
ingenic-adc.c 10.3 KB