On 4/7/24 22:55, Kuninori Morimoto wrote: > > Hi Pierre-Louis, again > >> dpcm_xxx is used to declare that the DAI/dailink is possible to use >> playback/capture. For example dpcm_playback means the DAI / dailink >> should playback-able, if not it is error. >> >> xxx_only is used to limit the playback/capture. >> For example the DAI / dailink can use both playback and capture, >> but want to use playback only for some reasons, we can use playback_only. > > My pervious patch-set was "try to merge dpcm_xxx and xxx_only flag", > but next patch will be "expand assertion flag to all connection". > This "assertion flag" was originaly dpcm_xxx. > > In next patch-set, it will assume for example current "dpcm_playback" > as "playback_assertion". It can be used not only for DPCM, but > all connection, but is not mandatory option. > > Its pseudo code is like below, but what do you think ? > > soc_get_playback_capture(...) > { > ... > /* > * get HW / DAI availability > */ > for_each_rtd_ch_maps(...) { > ... > has_playback = xxx; > has_capture = xxx; > } > > /* > * "xxx_assersion" was "dpcm_xxx" before, but expand to > * all connection. It is not mandatory option. > * It will be error if dai_link has xxx_assersion flag, > * but DAI was not valid > */ > if (dai_link->playback_assertion && !has_playback) { > dev_err(rtd->dev, ...); > return -EINVAL; > } > if (dai_link->capture_assertion && !has_capture) { > dev_err(rtd->dev, ...); > return -EINVAL; > } > > /* > * xxx_only flag limits availability. It will indicate warning > * if DAI was not valid. > */ > if (dai_link->playback_only) { > if (!has_capture) > dev_warn(rtd->dev, ...); > has_capture = 0; > } > > if (dai_link->capture_only) { > if (!has_playback) > dev_warn(rtd->dev, ...); > has_playback = 0; > } > > /* > * No Playback, No Capture is error > */ > if (!has_playback && !has_capture) { > dev_err(rtd->dev, ...); > return -EINVAL; > } > ... > } The code looks fine, but what are we trying to achieve? I thought the idea was to have a single field at the dailink, and with the example above we would still have two - just like today. This looks like a lot of code churn in many drivers for limited benefits. Or I am missing something?