Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4f347607 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: hda - Fix conflict of sticky PCM parameter in HDMI codecs



Intel and Nvidia HDMI codec drivers have own implementations of
sticky PCM parameters.  Now HD-audio core part already has it,
thus both setups conflict.  The fix is simply remove the part in
patch_intelhdmi.c and patch_nvhdmi.c and simply call
snd_hda_codec_setup_stream() as usual.

Reported-and-tested-by: default avatarStephen Warren <swarren@nvidia.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 274714f5
Loading
Loading
Loading
Loading
+1 −20
Original line number Original line Diff line number Diff line
@@ -707,8 +707,6 @@ static int hdmi_setup_stream(struct hda_codec *codec, hda_nid_t nid,
			      u32 stream_tag, int format)
			      u32 stream_tag, int format)
{
{
	struct hdmi_spec *spec = codec->spec;
	struct hdmi_spec *spec = codec->spec;
	int tag;
	int fmt;
	int pinctl;
	int pinctl;
	int new_pinctl = 0;
	int new_pinctl = 0;
	int i;
	int i;
@@ -745,24 +743,7 @@ static int hdmi_setup_stream(struct hda_codec *codec, hda_nid_t nid,
		return -EINVAL;
		return -EINVAL;
	}
	}


	tag = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0) >> 4;
	snd_hda_codec_setup_stream(codec, nid, stream_tag, 0, format);
	fmt = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_STREAM_FORMAT, 0);

	snd_printdd("hdmi_setup_stream: "
		    "NID=0x%x, %sstream=0x%x, %sformat=0x%x\n",
		    nid,
		    tag == stream_tag ? "" : "new-",
		    stream_tag,
		    fmt == format ? "" : "new-",
		    format);

	if (tag != stream_tag)
		snd_hda_codec_write(codec, nid, 0,
				    AC_VERB_SET_CHANNEL_STREAMID,
				    stream_tag << 4);
	if (fmt != format)
		snd_hda_codec_write(codec, nid, 0,
				    AC_VERB_SET_STREAM_FORMAT, format);
	return 0;
	return 0;
}
}


+0 −8
Original line number Original line Diff line number Diff line
@@ -69,20 +69,12 @@ static int intel_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
	return hdmi_setup_stream(codec, hinfo->nid, stream_tag, format);
	return hdmi_setup_stream(codec, hinfo->nid, stream_tag, format);
}
}


static int intel_hdmi_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
					   struct hda_codec *codec,
					   struct snd_pcm_substream *substream)
{
	return 0;
}

static struct hda_pcm_stream intel_hdmi_pcm_playback = {
static struct hda_pcm_stream intel_hdmi_pcm_playback = {
	.substreams = 1,
	.substreams = 1,
	.channels_min = 2,
	.channels_min = 2,
	.ops = {
	.ops = {
		.open = hdmi_pcm_open,
		.open = hdmi_pcm_open,
		.prepare = intel_hdmi_playback_pcm_prepare,
		.prepare = intel_hdmi_playback_pcm_prepare,
		.cleanup = intel_hdmi_playback_pcm_cleanup,
	},
	},
};
};


+0 −8
Original line number Original line Diff line number Diff line
@@ -326,13 +326,6 @@ static int nvhdmi_dig_playback_pcm_prepare_8ch(struct hda_pcm_stream *hinfo,
	return 0;
	return 0;
}
}


static int nvhdmi_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
					   struct hda_codec *codec,
					   struct snd_pcm_substream *substream)
{
	return 0;
}

static int nvhdmi_dig_playback_pcm_prepare_2ch(struct hda_pcm_stream *hinfo,
static int nvhdmi_dig_playback_pcm_prepare_2ch(struct hda_pcm_stream *hinfo,
					struct hda_codec *codec,
					struct hda_codec *codec,
					unsigned int stream_tag,
					unsigned int stream_tag,
@@ -350,7 +343,6 @@ static struct hda_pcm_stream nvhdmi_pcm_digital_playback_8ch_89 = {
	.ops = {
	.ops = {
		.open = hdmi_pcm_open,
		.open = hdmi_pcm_open,
		.prepare = nvhdmi_dig_playback_pcm_prepare_8ch_89,
		.prepare = nvhdmi_dig_playback_pcm_prepare_8ch_89,
		.cleanup = nvhdmi_playback_pcm_cleanup,
	},
	},
};
};