• Nicolas Frattaroli's avatar
    ASoC: rockchip: i2s-tdm: Strip out direct CRU use · d6365d0f
    Nicolas Frattaroli authored
    
    
    In cases where both rx and tx lrck are synced to the same source,
    the resets for rx and tx need to be triggered simultaneously,
    according to the downstream driver.
    
    As there is no reset API to atomically bulk (de)assert two resets
    at once, what the driver did was implement half a reset controller
    specific to Rockchip, which tried to write the registers for the
    resets within one write ideally or several writes within an irqsave
    section.
    
    This of course violates abstractions quite badly. The driver should
    not write to the CRU's registers directly.
    
    In practice, for the cases I tested the driver with, which is audio
    playback, replacing the synchronised asserts with just individual
    ones does not seem to make any difference.
    
    If it turns out that this breaks something in the future, it should
    be fixed through the specification and implementation of an atomic
    bulk reset API, not with a CRU hack.
    Signed-off-by: default avatarNicolas Frattaroli <frattaroli.nicolas@gmail.com>
    Reviewed-by: default avatarHeiko Stuebner <heiko@sntech.de>
    Message-Id: <20211016105354.116513-2-frattaroli.nicolas@gmail.com>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    d6365d0f
rockchip_i2s_tdm.c 44.2 KB