Unverified Commit 9a068c4a authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: SOF: ipc4-topology: fixes for 'exotic' format

Merge series from Peter Ujfalusi <peter.ujfalusi@linux.intel.com>:

The introduction of 8bit and FLOAT formats missed to cover the
new corner cases they cause when the NHLT blobs are looked up.

The two patch in this series fixes the 8bit and FLOAT format caused
cases to be able to find the correct blob from NHLT.
parents e3b88652 816f291f
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -1752,11 +1752,9 @@ snd_sof_get_nhlt_endpoint_data(struct snd_sof_dev *sdev, struct snd_sof_dai *dai
		channel_count = params_channels(params);
		sample_rate = params_rate(params);
		bit_depth = params_width(params);
		/*
		 * Look for 32-bit blob first instead of 16-bit if copier
		 * supports multiple formats
		 */
		if (bit_depth == 16 && !single_bitdepth) {

		/* Prefer 32-bit blob if copier supports multiple formats */
		if (bit_depth <= 16 && !single_bitdepth) {
			dev_dbg(sdev->dev, "Looking for 32-bit blob first for DMIC\n");
			format_change = true;
			bit_depth = 32;
@@ -1799,10 +1797,18 @@ snd_sof_get_nhlt_endpoint_data(struct snd_sof_dev *sdev, struct snd_sof_dai *dai
		if (format_change) {
			/*
			 * The 32-bit blob was not found in NHLT table, try to
			 * look for one based on the params
			 * look for 16-bit for DMIC or based on the params for
			 * SSP
			 */
			if (linktype == SOF_DAI_INTEL_DMIC) {
				bit_depth = 16;
				if (params_width(params) == 16)
					format_change = false;
			} else {
				bit_depth = params_width(params);
				format_change = false;
			}

			get_new_blob = true;
		} else if (linktype == SOF_DAI_INTEL_DMIC && !single_bitdepth) {
			/*
@@ -1837,7 +1843,7 @@ snd_sof_get_nhlt_endpoint_data(struct snd_sof_dev *sdev, struct snd_sof_dai *dai
	*len = cfg->size >> 2;
	*dst = (u32 *)cfg->caps;

	if (format_change) {
	if (format_change || params_format(params) == SNDRV_PCM_FORMAT_FLOAT_LE) {
		/*
		 * Update the params to reflect that different blob was loaded
		 * instead of the requested bit depth (16 -> 32 or 32 -> 16).