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.
This commit is contained in:
Mark Brown
2025-12-17 07:53:20 +00:00

View File

@@ -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
*/
bit_depth = params_width(params);
format_change = false;
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).