• Martin Povišer's avatar
    ASoC: apple: mca: Fix SERDES reset sequence · d8b3e396
    Martin Povišer authored
    Fix the reset sequence of reads and writes that we invoke from within
    the early trigger. It looks like there never was a SERDES_CONF_SOME_RST
    bit that should be involved in the reset sequence, and its presence in
    the driver code is a mistake from earlier.
    
    Instead, the reset sequence should go as follows: We should switch the
    the SERDES unit's SYNC_SEL mux to the value of 7 (so outside the range
    of 1...6 representing cluster's SYNCGEN units), then raise the RST bit
    in SERDES_STATUS and wait for it to clear.
    
    Properly resetting the SERDES unit fixes frame desynchronization hazard
    in case of long frames (longer than 4 used slots). The desynchronization
    manifests itself by rotating the PCM channels.
    
    Fixes: 3df5d0d9 ("ASoC: apple: mca: Start new platform driver")
    Signed-off-by: default avatarMartin Povišer <povik+lin@cutebit.org>
    Link: https://lore.kernel.org/r/20230224153302.45365-2-povik+lin@cutebit.orgSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    d8b3e396
mca.c 30.4 KB