• Charles Keepax's avatar
    ASoC: intel: sof_sdw: Move range check of codec_conf into inner loop · 59736ca6
    Charles Keepax authored
    
    
    There are two problems with the current range check on the codec_conf
    array.
    
    Firstly, adr_link_next->num_adr refers to the number of devices
    on the current SoundWire link, but adr_index refers to the first
    SoundWire link involved in the DAI link. This means that subtracting
    these two numbers is only meaningful on the first SoundWire link in the
    DAI and broken on later links.
    
    Secondly, the intention of the range check is to add the number
    of remaining devices on the currently link to the current index
    and ensure enough space remains. However, this assumes that all
    remaining devices on the SoundWire link will be added to the current
    DAI link. Ideally this would not be the case, and devices could be
    grouped as the user desired.
    
    Moving the range check into the inner loop both simplifies the code (no
    need to add and subtract offsets) and allows future refactoring such
    that devices on a single SoundWire link don't have to all be grouped onto
    a single DAI link. The check will be processed slightly more often since
    it is processed for each device rather each link but this is probe time
    and the numbers involved are very small here (4 links, likely no more
    than 2-4 devices per link).
    Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Reviewed-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
    Signed-off-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
    Link: https://lore.kernel.org/r/20230808132013.889419-8-ckeepax@opensource.cirrus.com
    
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    59736ca6
sof_sdw.c 50.3 KB