[linux-yocto] [4.12][PATCH] ALSA: hda - Skip jack and others for non-existing PCM streams

Bruce Ashfield bruce.ashfield at windriver.com
Tue May 15 06:24:07 PDT 2018


On 05/13/2018 02:39 AM, Liwei Song wrote:
> From: Takashi Iwai <tiwai at suse.de>
> 
> commit 8a7d6003df41cb16f6b3b620da044fbd92d2f5ee upstream.
> 
> When CONFIG_SND_DYNAMIC_MINORS isn't set, there are only limited
> number of devices available, and HD-audio, especially with HDMI/DP
> codec, will fail to create more than two devices.
> 
> The driver warns about the lack of such devices and skips the PCM
> device creations, but the HDMI driver still tries to create the
> corresponding JACK, SPDIF and ELD controls even for the non-existing
> PCM substreams.  This results in confusion on user-space, and even may
> break the operation.
> 
> Similarly, Intel HDMI/DP codec builds the ELD notification from i915
> graphics driver, and this may be broken if a notification is sent for
> the non-existing PCM stream.
> 
> This patch adds the check of the existence of the assigned PCM
> substream in the both scenarios above, and skips the further operation
> if the PCM substream is not assigned.
> 
> Fixes: 9152085defb6 ("ALSA: hda - add DP MST audio support")
> Cc: <stable at vger.kernel.org>
> Signed-off-by: Takashi Iwai <tiwai at suse.de>
> Signed-off-by: Liwei Song <liwei.song at windriver.com>

merged.

Bruce

> ---
>   sound/pci/hda/patch_hdmi.c | 9 ++++++++-
>   1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> index 5df49145ed87..4a0a4dbda3cd 100644
> --- a/sound/pci/hda/patch_hdmi.c
> +++ b/sound/pci/hda/patch_hdmi.c
> @@ -1359,6 +1359,8 @@ static void hdmi_pcm_setup_pin(struct hdmi_spec *spec,
>   		pcm = get_pcm_rec(spec, per_pin->pcm_idx);
>   	else
>   		return;
> +	if (!pcm->pcm)
> +		return;
>   	if (!test_bit(per_pin->pcm_idx, &spec->pcm_in_use))
>   		return;
>   
> @@ -2127,8 +2129,13 @@ static int generic_hdmi_build_controls(struct hda_codec *codec)
>   	int dev, err;
>   	int pin_idx, pcm_idx;
>   
> -
>   	for (pcm_idx = 0; pcm_idx < spec->pcm_used; pcm_idx++) {
> +		if (!get_pcm_rec(spec, pcm_idx)->pcm) {
> +			/* no PCM: mark this for skipping permanently */
> +			set_bit(pcm_idx, &spec->pcm_bitmap);
> +			continue;
> +		}
> +
>   		err = generic_hdmi_build_jack(codec, pcm_idx);
>   		if (err < 0)
>   			return err;
> 



More information about the linux-yocto mailing list