Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Péter Ujfalusi" <peter.ujfalusi@linux.intel.com>
To: lgirdwood@gmail.com, broonie@kernel.org
Cc: alsa-devel@alsa-project.org, yung-chuan.liao@linux.intel.com,
	pierre-louis.bossart@linux.intel.com,
	kai.vehmanen@linux.intel.com, ranjani.sridharan@linux.intel.com
Subject: Re: [PATCH] ASoC: ipc4-topology: use different channel mask for each sdw amp feedback
Date: Wed, 25 Jan 2023 16:12:44 +0200	[thread overview]
Message-ID: <498a8fb8-89a8-6e36-ed54-2cdcf866d1c1@linux.intel.com> (raw)
In-Reply-To: <20230125141016.29487-1-peter.ujfalusi@linux.intel.com>



On 25/01/2023 16:10, Peter Ujfalusi wrote:
> From: Bard Liao <yung-chuan.liao@linux.intel.com>

The subject line is missing "SOF", sending v2 right away, sorry.

> Currently, we use the same channel mask for aggregated speakers.
> It works fine for playback because we duplicate the audio data for all
> aggregated speakers. But we need to get audio data from each aggregated
> speaker and combine them to the captured audio. So we need to set
> non-overlapping channel mask for aggregated ALH DAIs.
> 
> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
> ---
>  sound/soc/sof/ipc4-topology.c | 26 ++++++++++++++++++++++++--
>  1 file changed, 24 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/soc/sof/ipc4-topology.c b/sound/soc/sof/ipc4-topology.c
> index 59f4d42f9011..34586cbb461f 100644
> --- a/sound/soc/sof/ipc4-topology.c
> +++ b/sound/soc/sof/ipc4-topology.c
> @@ -1203,8 +1203,11 @@ sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget,
>  			struct sof_ipc4_copier_data *alh_data;
>  			struct sof_ipc4_copier *alh_copier;
>  			struct snd_sof_widget *w;
> +			u32 ch_count = 0;
>  			u32 ch_mask = 0;
>  			u32 ch_map;
> +			u32 step;
> +			u32 mask;
>  			int i;
>  
>  			blob = (struct sof_ipc4_alh_configuration_blob *)ipc4_copier->copier_config;
> @@ -1214,11 +1217,15 @@ sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget,
>  			/* Get channel_mask from ch_map */
>  			ch_map = copier_data->base_config.audio_fmt.ch_map;
>  			for (i = 0; ch_map; i++) {
> -				if ((ch_map & 0xf) != 0xf)
> +				if ((ch_map & 0xf) != 0xf) {
>  					ch_mask |= BIT(i);
> +					ch_count++;
> +				}
>  				ch_map >>= 4;
>  			}
>  
> +			step = ch_count / blob->alh_cfg.count;
> +			mask =  GENMASK(step - 1, 0);
>  			/*
>  			 * Set each gtw_cfg.node_id to blob->alh_cfg.mapping[]
>  			 * for all widgets with the same stream name
> @@ -1233,7 +1240,22 @@ sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget,
>  				alh_copier = (struct sof_ipc4_copier *)dai->private;
>  				alh_data = &alh_copier->data;
>  				blob->alh_cfg.mapping[i].alh_id = alh_data->gtw_cfg.node_id;
> -				blob->alh_cfg.mapping[i].channel_mask = ch_mask;
> +				/*
> +				 * Set the same channel mask for playback as the audio data is
> +				 * duplicated for all speakers. For capture, split the channels
> +				 * among the aggregated DAIs. For example, with 4 channels on 2
> +				 * aggregated DAIs, the channel_mask should be 0x3 and 0xc for the
> +				 * two DAI's.
> +				 * The channel masks used depend on the cpu_dais used in the
> +				 * dailink at the machine driver level, which actually comes from
> +				 * the tables in soc_acpi files depending on the _ADR and devID
> +				 * registers for each codec.
> +				 */
> +				if (w->id == snd_soc_dapm_dai_in)
> +					blob->alh_cfg.mapping[i].channel_mask = ch_mask;
> +				else
> +					blob->alh_cfg.mapping[i].channel_mask = mask << (step * i);
> +
>  				i++;
>  			}
>  			if (blob->alh_cfg.count > 1) {

-- 
Péter

      reply	other threads:[~2023-01-25 14:13 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-25 14:10 [PATCH] ASoC: ipc4-topology: use different channel mask for each sdw amp feedback Peter Ujfalusi
2023-01-25 14:12 ` Péter Ujfalusi [this message]

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=498a8fb8-89a8-6e36-ed54-2cdcf866d1c1@linux.intel.com \
    --to=peter.ujfalusi@linux.intel.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=kai.vehmanen@linux.intel.com \
    --cc=lgirdwood@gmail.com \
    --cc=pierre-louis.bossart@linux.intel.com \
    --cc=ranjani.sridharan@linux.intel.com \
    --cc=yung-chuan.liao@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