Hi,
On Tue, 10 Sep 2019, Pierre-Louis Bossart wrote:
On 9/10/19 1:29 PM, Kai Vehmanen wrote:
Fix the logic in generic_hdmi_build_controls() to identify unused hda_pcm entries by searching for SNDRV_PCM_INVALID_DEVICE. This matches with logic in snd_hda_codec_build_pcms().
[...]
if (!get_pcm_rec(spec, pcm_idx)->pcm) {
hda_pcm = get_pcm_rec(spec, pcm_idx);
if (hda_pcm->device == SNDRV_PCM_INVALID_DEVICE) {
I find it hard to follow the logic. Before this patch only device 0 would be considered NO_PCM Not it's -1, so wondering if this is a fix unrelated to this series or if there is a dependency on follow-up patches?
the intent was to align with logic in hda_codec.c:snd_hda_codec_build_pcms() which is the common function to create the HDA driver PCM state. In that function:
» list_for_each_entry(cpcm, &codec->pcm_list_head, list) { [...] » » dev = get_empty_pcm_device(bus, cpcm->pcm_type); » » if (dev < 0) { » » » cpcm->device = SNDRV_PCM_INVALID_DEVICE; » » » continue; /* no fatal error */ » » }
... i.e. if no PCM is attached, it is marked with SNDRV_PCM_INVALID_DEVICE to cpcm->device.
The logic in patch_hdmi.c, which deduced the same information by looking at another field (cpcm>->pcm), seems wrong and thus the fix.
Now, this used to be critical for this patch series as well, but you are right that is no longer the case (I added passing of the PCM handle so we can reuse all the kcontrol code in patch_hdmi.c and with that this patch is no longer mandatory for SOF usage).
I retested the series without the patch and all seems fine, so let's simplify the series by dropping this.
Br, Kai