• Mark Brown's avatar
    mfd: Improve WM831x AUXADC completion handling · 7cc1392a
    Mark Brown authored
    Currently completion of WM831x AUXADC conversions is monitored by
    checking for convertor enable. Due to the mechanism used to ensure
    data corruption is avoided when reading AUXADC data there may under
    heavy I/O be a window where this bit has cleared but the conversion
    results have not been updated. Data availability is only guaranteed
    after the AUXADC data interrupt has been asserted.
    
    Avoid this by always using the interrupt to detect completion. If the
    chip IRQ is not set up then we poll the IRQ status register for up to
    5ms. If it is set up then we rely on the data done interrupt with a
    vastly increased timeout, failing the conversion if the interrupt is
    not generated.
    
    This also saves a register read when using interrupts.
    Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
    Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
    7cc1392a
wm831x-core.c 36.2 KB