[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