linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Samuel Holland <samuel@sholland.org>
To: Mark Brown <broonie@kernel.org>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Jonathan Corbet <corbet@lwn.net>,
	Jerome Brunet <jbrunet@baylibre.com>
Cc: Ondrej Jirman <megous@megous.com>,
	alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org,
	linux-doc@vger.kernel.org
Subject: Re: [PATCH v3 3/3] ASoC: simple-card: Add support for codec2codec DAI links
Date: Tue, 3 Mar 2020 07:49:33 -0600	[thread overview]
Message-ID: <9cdcfcb6-63c2-5b76-9de1-46719e4e7139@sholland.org> (raw)
In-Reply-To: <20200223034533.1035-4-samuel@sholland.org>

On 2/22/20 9:45 PM, Samuel Holland wrote:
> Following the example in cb2cf0de1174 ("ASoC: soc-core: care Codec <->
> Codec case by non_legacy_dai_naming"), determine if a DAI link contains
> only codec DAIs by examining the non_legacy_dai_naming flag in each
> DAI's component.
> 
> For now, we assume there is only one or a small set of valid PCM stream
> parameters, so num_params == 1 is good enough. We also assume that the
> same params are valid for all supported streams. params is set to the
> subset of parameters common among all DAIs, and then the existing code
> automatically chooses the highest quality of the remaining values when
> the link is brought up.
> 
> Signed-off-by: Samuel Holland <samuel@sholland.org>
> ---
>  Documentation/sound/soc/codec-to-codec.rst |  9 +++-
>  sound/soc/generic/simple-card-utils.c      | 49 ++++++++++++++++++++++
>  2 files changed, 56 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/sound/soc/codec-to-codec.rst b/Documentation/sound/soc/codec-to-codec.rst
> index 810109d7500d..4eaa9a0c41fc 100644
> --- a/Documentation/sound/soc/codec-to-codec.rst
> +++ b/Documentation/sound/soc/codec-to-codec.rst
> @@ -104,5 +104,10 @@ Make sure to name your corresponding cpu and codec playback and capture
>  dai names ending with "Playback" and "Capture" respectively as dapm core
>  will link and power those dais based on the name.
>  
> -Note that in current device tree there is no way to mark a dai_link
> -as codec to codec. However, it may change in future.
> +A dai_link in a "simple-audio-card" will automatically be detected as
> +codec to codec when all DAIs on the link belong to codec components.
> +The dai_link will be initialized with the subset of stream parameters
> +(channels, format, sample rate) supported by all DAIs on the link. Since
> +there is no way to provide these parameters in the device tree, this is
> +mostly useful for communication with simple fixed-function codecs, such
> +as a Bluetooth controller or cellular modem.
> diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
> index 9b794775df53..54294367a40f 100644
> --- a/sound/soc/generic/simple-card-utils.c
> +++ b/sound/soc/generic/simple-card-utils.c
> @@ -331,6 +331,51 @@ static int asoc_simple_init_dai(struct snd_soc_dai *dai,
>  	return 0;
>  }
>  
> +static int asoc_simple_init_dai_link_params(struct snd_soc_pcm_runtime *rtd,
> +					    struct simple_dai_props *dai_props)
> +{
> +	struct snd_soc_dai_link *dai_link = rtd->dai_link;
> +	struct snd_soc_component *component;
> +	struct snd_soc_rtdcom_list *rtdcom;

This variable is unused in v3. I can send a v4.

> +	struct snd_soc_pcm_stream *params;
> +	struct snd_pcm_hardware hw;
> +	int i, ret, stream;
> +
> +	/* Only codecs should have non_legacy_dai_naming set. */
> +	for_each_rtd_components(rtd, i, component) {
> +		if (!component->driver->non_legacy_dai_naming)
> +			return 0;
> +	}
> +
> +	/* Assumes the capabilities are the same for all supported streams */
> +	for (stream = 0; stream < 2; stream++) {
> +		ret = snd_soc_runtime_calc_hw(rtd, &hw, stream);
> +		if (ret == 0)
> +			break;
> +	}
> +
> +	if (ret < 0) {
> +		dev_err(rtd->dev, "simple-card: no valid dai_link params\n");
> +		return ret;
> +	}
> +
> +	params = devm_kzalloc(rtd->dev, sizeof(*params), GFP_KERNEL);
> +	if (!params)
> +		return -ENOMEM;
> +
> +	params->formats = hw.formats;
> +	params->rates = hw.rates;
> +	params->rate_min = hw.rate_min;
> +	params->rate_max = hw.rate_max;
> +	params->channels_min = hw.channels_min;
> +	params->channels_max = hw.channels_max;
> +
> +	dai_link->params = params;
> +	dai_link->num_params = 1;
> +
> +	return 0;
> +}
> +
>  int asoc_simple_dai_init(struct snd_soc_pcm_runtime *rtd)
>  {
>  	struct asoc_simple_priv *priv = snd_soc_card_get_drvdata(rtd->card);
> @@ -347,6 +392,10 @@ int asoc_simple_dai_init(struct snd_soc_pcm_runtime *rtd)
>  	if (ret < 0)
>  		return ret;
>  
> +	ret = asoc_simple_init_dai_link_params(rtd, dai_props);
> +	if (ret < 0)
> +		return ret;
> +
>  	return 0;
>  }
>  EXPORT_SYMBOL_GPL(asoc_simple_dai_init);
> 


  reply	other threads:[~2020-03-03 13:49 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-23  3:45 [PATCH v3 0/3] simple-audio-card codec2codec support Samuel Holland
2020-02-23  3:45 ` [PATCH v3 1/3] ALSA: pcm: Add a standalone version of snd_pcm_limit_hw_rates Samuel Holland
2020-03-03 13:21   ` Mark Brown
2020-02-23  3:45 ` [PATCH v3 2/3] ASoC: pcm: Export parameter intersection logic Samuel Holland
2020-02-23  3:45 ` [PATCH v3 3/3] ASoC: simple-card: Add support for codec2codec DAI links Samuel Holland
2020-03-03 13:49   ` Samuel Holland [this message]
2020-03-03 13:51     ` 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=9cdcfcb6-63c2-5b76-9de1-46719e4e7139@sholland.org \
    --to=samuel@sholland.org \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=corbet@lwn.net \
    --cc=jbrunet@baylibre.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=megous@megous.com \
    --cc=perex@perex.cz \
    --cc=tiwai@suse.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;
as well as URLs for NNTP newsgroup(s).