Commit d5c00ab2 authored by Cezary Rojewski's avatar Cezary Rojewski Committed by Takashi Iwai
Browse files

ASoC: codecs: hda: Switch to new stream-format interface



To provide option for selecting different bit-per-sample than just the
maximum one, use the new format calculation mechanism.

While at it, complete PCM stream initialization with subformat options.

Acked-by: default avatarMark Brown <broonie@kernel.org>
Signed-off-by: default avatarCezary Rojewski <cezary.rojewski@intel.com>
Acked-by: default avatarJaroslav Kysela <perex@perex.cz>
Link: https://lore.kernel.org/r/20231117120610.1755254-9-cezary.rojewski@intel.com


Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 0d41f0c0
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -76,13 +76,16 @@ static int hda_codec_dai_prepare(struct snd_pcm_substream *substream, struct snd
	struct hdac_stream *stream;
	struct hda_codec *codec;
	unsigned int format;
	unsigned int bits;
	int ret;

	codec = dev_to_hda_codec(dai->dev);
	stream = substream->runtime->private_data;
	stream_info = snd_soc_dai_get_dma_data(dai, substream);
	format = snd_hdac_calc_stream_format(runtime->rate, runtime->channels, runtime->format,
					     runtime->sample_bits, 0);

	bits = snd_hdac_stream_format_bits(runtime->format, runtime->subformat,
					   stream_info->maxbps);
	format = snd_hdac_stream_format(runtime->channels, bits, runtime->rate);

	ret = snd_hda_codec_prepare(codec, stream_info, stream->stream_tag, format, substream);
	if (ret < 0) {
+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ static int hda_codec_create_dais(struct hda_codec *codec, int pcm_count,
		stream->channels_max = pcm->stream[dir].channels_max;
		stream->rates = pcm->stream[dir].rates;
		stream->formats = pcm->stream[dir].formats;
		stream->subformats = pcm->stream[dir].subformats;
		stream->sig_bits = pcm->stream[dir].maxbps;

capture_dais:
@@ -71,6 +72,7 @@ static int hda_codec_create_dais(struct hda_codec *codec, int pcm_count,
		stream->channels_max = pcm->stream[dir].channels_max;
		stream->rates = pcm->stream[dir].rates;
		stream->formats = pcm->stream[dir].formats;
		stream->subformats = pcm->stream[dir].subformats;
		stream->sig_bits = pcm->stream[dir].maxbps;
	}