On 10/1/2021 12:30 AM, Pierre-Louis Bossart wrote:
- The original issue at my end was not just a configuration redundancy.
I realize now that with more stream addition following error print is seen. "ASoC: too many users playback at open 4"
This is because the max DPCM users is capped at 8. Increasing this
may help (need to see what number is better), but does not address the redundancy problem.
Going back to this DPCM_MAX_BE_USERS definition, it seems rather arbitrary and not so useful indeed.
/* first time the dpcm is open ? */ if (be->dpcm[stream].users == DPCM_MAX_BE_USERS) { dev_err(be->dev, "ASoC: too many users %s at open %d\n", stream ? "capture" : "playback", be->dpcm[stream].state); continue; }
The comment is no longer aligned with the code, wondering if this is a feature or a bug.
Looks like the comment is misplaced and the intention might have been to place it like below?
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index e30cb5a..5cb5019 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -1508,7 +1508,6 @@ int dpcm_be_dai_startup(struct snd_soc_pcm_runtime *fe, int stream) if (!snd_soc_dpcm_be_can_update(fe, be, stream)) continue;
- /* first time the dpcm is open ? */ if (be->dpcm[stream].users == DPCM_MAX_BE_USERS) { dev_err(be->dev, "ASoC: too many users %s at open %d\n", stream ? "capture" : "playback", @@ -1516,6 +1515,7 @@ int dpcm_be_dai_startup(struct snd_soc_pcm_runtime *fe, int stream) continue; }
+ /* first time the dpcm is open ? */ if (be->dpcm[stream].users++ != 0) continue;
There's no reason to arbitrarily restrict the number of users of a BE, or the check would need to use platform-specific information such as the number of inputs/outputs supported by a mixer/demux.
Maybe Morimoto-san can comment since this was added in:
1db19c151819 ('ASoC: soc-pcm: fixup dpcm_be_dai_startup() user count')
We're not done with soc-pcm.c cleanups :-)