From: "Péter Ujfalusi" <peter.ujfalusi@linux.intel.com>
To: lgirdwood@gmail.com, broonie@kernel.org
Cc: linux-sound@vger.kernel.org,
pierre-louis.bossart@linux.intel.com,
kai.vehmanen@linux.intel.com, ranjani.sridharan@linux.intel.com,
seppo.ingalsuo@linux.intel.com
Subject: Re: [PATCH] ASoC: SOF: ipc4-topology: Add support for NHLT with 16-bit only DMIC blob
Date: Wed, 29 May 2024 14:19:37 +0300 [thread overview]
Message-ID: <d4c5e7a3-710b-4ff1-95a3-395dd780fed3@linux.intel.com> (raw)
In-Reply-To: <20240516075611.18018-1-peter.ujfalusi@linux.intel.com>
Hi Mark,
On 16/05/2024 10:56, Peter Ujfalusi wrote:
> The ACPI NHLT table always had 32-bit DMIC blob even if 16-bit was also
> present and taken as a 'rule' which obviously got broken and there is at
> least one device on the market which ships with only 16-bit DMIC
> configuration blob.
> This corner case has never been supported and it is going to need topology
> updates for DMIC copier to support multiple formats.
>
> As for the kernel side: if the copier supports multiple formats and the
> preferred 32-bit DMIC blob is not found then we will try to get a 16-bit
> DMIC configuration and look for a 16-bit copier config.
Please ignore this patch, I will send it again along with few more patch
building on this to close the gaps with the logic of selecting the NHLT
blob.
> Fixes: f9209644ae76 ("ASoC: SOF: ipc4-topology: Correct DAI copier config and NHLT blob request")
> Link: https://github.com/thesofproject/linux/issues/4973
> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
> Reviewed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
> ---
> sound/soc/sof/ipc4-topology.c | 25 ++++++++++++++++++++++---
> 1 file changed, 22 insertions(+), 3 deletions(-)
>
> diff --git a/sound/soc/sof/ipc4-topology.c b/sound/soc/sof/ipc4-topology.c
> index beff10989324..521b4dcba601 100644
> --- a/sound/soc/sof/ipc4-topology.c
> +++ b/sound/soc/sof/ipc4-topology.c
> @@ -1483,6 +1483,8 @@ snd_sof_get_nhlt_endpoint_data(struct snd_sof_dev *sdev, struct snd_sof_dai *dai
> dir, dev_type);
>
> if (!cfg) {
> + bool get_new_blob = false;
> +
> if (format_change) {
> /*
> * The 32-bit blob was not found in NHLT table, try to
> @@ -1490,7 +1492,20 @@ snd_sof_get_nhlt_endpoint_data(struct snd_sof_dev *sdev, struct snd_sof_dai *dai
> */
> bit_depth = params_width(params);
> format_change = false;
> + get_new_blob = true;
> + } else if (linktype == SOF_DAI_INTEL_DMIC && !single_format) {
> + /*
> + * The requested 32-bit blob (no format change for the
> + * blob request) was not found in NHLT table, try to
> + * look for 16-bit blob if the copier supports multiple
> + * formats
> + */
> + bit_depth = 16;
> + format_change = true;
> + get_new_blob = true;
> + }
>
> + if (get_new_blob) {
> cfg = intel_nhlt_get_endpoint_blob(sdev->dev, ipc4_data->nhlt,
> dai_index, nhlt_type,
> bit_depth, bit_depth,
> @@ -1513,8 +1528,8 @@ snd_sof_get_nhlt_endpoint_data(struct snd_sof_dev *sdev, struct snd_sof_dai *dai
>
> if (format_change) {
> /*
> - * Update the params to reflect that we have loaded 32-bit blob
> - * instead of the 16-bit.
> + * Update the params to reflect that different blob was loaded
> + * instead of the requested bit depth (16 -> 32 or 32 -> 16).
> * This information is going to be used by the caller to find
> * matching copier format on the dai side.
> */
> @@ -1522,7 +1537,11 @@ snd_sof_get_nhlt_endpoint_data(struct snd_sof_dev *sdev, struct snd_sof_dai *dai
>
> m = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
> snd_mask_none(m);
> - snd_mask_set_format(m, SNDRV_PCM_FORMAT_S32_LE);
> + if (bit_depth == 16)
> + snd_mask_set_format(m, SNDRV_PCM_FORMAT_S16_LE);
> + else
> + snd_mask_set_format(m, SNDRV_PCM_FORMAT_S32_LE);
> +
> }
>
> return 0;
--
Péter
next prev parent reply other threads:[~2024-05-29 11:19 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-16 7:56 [PATCH] ASoC: SOF: ipc4-topology: Add support for NHLT with 16-bit only DMIC blob Peter Ujfalusi
2024-05-29 11:19 ` Péter Ujfalusi [this message]
2024-05-29 11:48 ` Mark Brown
2024-05-29 11:57 ` Péter Ujfalusi
2024-05-29 12:17 ` Mark Brown
2024-05-29 12:32 ` Péter Ujfalusi
2024-05-29 13:36 ` Mark Brown
2024-05-29 13:49 ` Péter Ujfalusi
2024-05-29 13:52 ` Mark Brown
2024-05-30 15:21 ` Mark Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d4c5e7a3-710b-4ff1-95a3-395dd780fed3@linux.intel.com \
--to=peter.ujfalusi@linux.intel.com \
--cc=broonie@kernel.org \
--cc=kai.vehmanen@linux.intel.com \
--cc=lgirdwood@gmail.com \
--cc=linux-sound@vger.kernel.org \
--cc=pierre-louis.bossart@linux.intel.com \
--cc=ranjani.sridharan@linux.intel.com \
--cc=seppo.ingalsuo@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox