From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> To: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>, broonie@kernel.org Cc: alsa-devel@alsa-project.org, lgirdwood@gmail.com, perex@perex.cz, linux-kernel@vger.kernel.org, vkoul@kernel.org Subject: Re: [PATCH 1/2] ASoC: qcom: sdm845: handle soundwire stream Date: Wed, 18 Mar 2020 11:59:21 +0000 [thread overview] Message-ID: <69c72f5a-e72e-b7b3-90cb-a7354dcb175d@linaro.org> (raw) In-Reply-To: <8daeeb26-851b-8311-30f5-5d285ccbc255@linux.intel.com> On 17/03/2020 13:07, Pierre-Louis Bossart wrote: > >> @@ -45,11 +48,20 @@ static int sdm845_slim_snd_hw_params(struct >> snd_pcm_substream *substream, >> struct snd_soc_pcm_runtime *rtd = substream->private_data; >> struct snd_soc_dai *cpu_dai = rtd->cpu_dai; >> struct snd_soc_dai *codec_dai; >> + struct sdm845_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card); >> u32 rx_ch[SLIM_MAX_RX_PORTS], tx_ch[SLIM_MAX_TX_PORTS]; >> + struct sdw_stream_runtime *sruntime; >> u32 rx_ch_cnt = 0, tx_ch_cnt = 0; >> int ret = 0, i; >> for_each_rtd_codec_dais(rtd, i, codec_dai) { >> + sruntime = snd_soc_dai_get_sdw_stream(codec_dai, >> + substream->stream); >> + if (sruntime != ERR_PTR(-ENOTSUPP)) >> + pdata->sruntime[cpu_dai->id] = sruntime; >> + else >> + pdata->sruntime[cpu_dai->id] = NULL; >> + > > Can you explain this part? > The get_sdw_stream() is supposed to return what was set by > set_sdw_stream(), so if it's not supported isn't this an error? In this case its not an error because we have totally 3 codecs in this path. One wcd934x Slimbus codec and two wsa881x Soundwire Codec. wcd934x codec side will return ENOTSUPP which is not an error. > >> ret = snd_soc_dai_get_channel_map(codec_dai, >> &tx_ch_cnt, tx_ch, &rx_ch_cnt, rx_ch); >> @@ -425,8 +437,65 @@ static void sdm845_snd_shutdown(struct >> snd_pcm_substream *substream) >> } >> } >> +static int sdm845_snd_prepare(struct snd_pcm_substream *substream) >> +{ >> + struct snd_soc_pcm_runtime *rtd = substream->private_data; >> + struct sdm845_snd_data *data = snd_soc_card_get_drvdata(rtd->card); >> + struct snd_soc_dai *cpu_dai = rtd->cpu_dai; >> + struct sdw_stream_runtime *sruntime = data->sruntime[cpu_dai->id]; >> + int ret; >> + >> + if (!sruntime) >> + return 0; > > same here, isn't this an error? These callbacks are used for other dais aswell in this case HDMI, Slimbus and Soundwire, so sruntime being null is not treated as error. > >> + if (data->stream_prepared[cpu_dai->id]) { >> + sdw_disable_stream(sruntime); >> + sdw_deprepare_stream(sruntime); >> + data->stream_prepared[cpu_dai->id] = false; >> + } >> + >> + ret = sdw_prepare_stream(sruntime); >> + if (ret) >> + return ret; >> + >> + /** >> + * NOTE: there is a strict hw requirement about the ordering of port >> + * enables and actual WSA881x PA enable. PA enable should only >> happen >> + * after soundwire ports are enabled if not DC on the line is >> + * accumulated resulting in Click/Pop Noise >> + * PA enable/mute are handled as part of codec DAPM and digital >> mute. >> + */ >> + >> + ret = sdw_enable_stream(sruntime); >> + if (ret) { >> + sdw_deprepare_stream(sruntime); >> + return ret; >> + } >> + data->stream_prepared[cpu_dai->id] = true; >> + >> + return ret; >> +} >> + >> +static int sdm845_snd_hw_free(struct snd_pcm_substream *substream) >> +{ >> + struct snd_soc_pcm_runtime *rtd = substream->private_data; >> + struct sdm845_snd_data *data = snd_soc_card_get_drvdata(rtd->card); >> + struct snd_soc_dai *cpu_dai = rtd->cpu_dai; >> + struct sdw_stream_runtime *sruntime = data->sruntime[cpu_dai->id]; >> + >> + if (sruntime && data->stream_prepared[cpu_dai->id]) { > > and here? > > Really wondering where the stream is actually allocated and set. Controller is allocating the runtime in this case. > >> + sdw_disable_stream(sruntime); >> + sdw_deprepare_stream(sruntime); >> + data->stream_prepared[cpu_dai->id] = false; >> + } >> + >> + return 0; >> +} >> + >> static const struct snd_soc_ops sdm845_be_ops = { >> .hw_params = sdm845_snd_hw_params, >> + .hw_free = sdm845_snd_hw_free, >> + .prepare = sdm845_snd_prepare, >> .startup = sdm845_snd_startup, >> .shutdown = sdm845_snd_shutdown, >> }; >>
WARNING: multiple messages have this Message-ID (diff)
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> To: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>, broonie@kernel.org Cc: linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org, vkoul@kernel.org, lgirdwood@gmail.com Subject: Re: [PATCH 1/2] ASoC: qcom: sdm845: handle soundwire stream Date: Wed, 18 Mar 2020 11:59:21 +0000 [thread overview] Message-ID: <69c72f5a-e72e-b7b3-90cb-a7354dcb175d@linaro.org> (raw) In-Reply-To: <8daeeb26-851b-8311-30f5-5d285ccbc255@linux.intel.com> On 17/03/2020 13:07, Pierre-Louis Bossart wrote: > >> @@ -45,11 +48,20 @@ static int sdm845_slim_snd_hw_params(struct >> snd_pcm_substream *substream, >> struct snd_soc_pcm_runtime *rtd = substream->private_data; >> struct snd_soc_dai *cpu_dai = rtd->cpu_dai; >> struct snd_soc_dai *codec_dai; >> + struct sdm845_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card); >> u32 rx_ch[SLIM_MAX_RX_PORTS], tx_ch[SLIM_MAX_TX_PORTS]; >> + struct sdw_stream_runtime *sruntime; >> u32 rx_ch_cnt = 0, tx_ch_cnt = 0; >> int ret = 0, i; >> for_each_rtd_codec_dais(rtd, i, codec_dai) { >> + sruntime = snd_soc_dai_get_sdw_stream(codec_dai, >> + substream->stream); >> + if (sruntime != ERR_PTR(-ENOTSUPP)) >> + pdata->sruntime[cpu_dai->id] = sruntime; >> + else >> + pdata->sruntime[cpu_dai->id] = NULL; >> + > > Can you explain this part? > The get_sdw_stream() is supposed to return what was set by > set_sdw_stream(), so if it's not supported isn't this an error? In this case its not an error because we have totally 3 codecs in this path. One wcd934x Slimbus codec and two wsa881x Soundwire Codec. wcd934x codec side will return ENOTSUPP which is not an error. > >> ret = snd_soc_dai_get_channel_map(codec_dai, >> &tx_ch_cnt, tx_ch, &rx_ch_cnt, rx_ch); >> @@ -425,8 +437,65 @@ static void sdm845_snd_shutdown(struct >> snd_pcm_substream *substream) >> } >> } >> +static int sdm845_snd_prepare(struct snd_pcm_substream *substream) >> +{ >> + struct snd_soc_pcm_runtime *rtd = substream->private_data; >> + struct sdm845_snd_data *data = snd_soc_card_get_drvdata(rtd->card); >> + struct snd_soc_dai *cpu_dai = rtd->cpu_dai; >> + struct sdw_stream_runtime *sruntime = data->sruntime[cpu_dai->id]; >> + int ret; >> + >> + if (!sruntime) >> + return 0; > > same here, isn't this an error? These callbacks are used for other dais aswell in this case HDMI, Slimbus and Soundwire, so sruntime being null is not treated as error. > >> + if (data->stream_prepared[cpu_dai->id]) { >> + sdw_disable_stream(sruntime); >> + sdw_deprepare_stream(sruntime); >> + data->stream_prepared[cpu_dai->id] = false; >> + } >> + >> + ret = sdw_prepare_stream(sruntime); >> + if (ret) >> + return ret; >> + >> + /** >> + * NOTE: there is a strict hw requirement about the ordering of port >> + * enables and actual WSA881x PA enable. PA enable should only >> happen >> + * after soundwire ports are enabled if not DC on the line is >> + * accumulated resulting in Click/Pop Noise >> + * PA enable/mute are handled as part of codec DAPM and digital >> mute. >> + */ >> + >> + ret = sdw_enable_stream(sruntime); >> + if (ret) { >> + sdw_deprepare_stream(sruntime); >> + return ret; >> + } >> + data->stream_prepared[cpu_dai->id] = true; >> + >> + return ret; >> +} >> + >> +static int sdm845_snd_hw_free(struct snd_pcm_substream *substream) >> +{ >> + struct snd_soc_pcm_runtime *rtd = substream->private_data; >> + struct sdm845_snd_data *data = snd_soc_card_get_drvdata(rtd->card); >> + struct snd_soc_dai *cpu_dai = rtd->cpu_dai; >> + struct sdw_stream_runtime *sruntime = data->sruntime[cpu_dai->id]; >> + >> + if (sruntime && data->stream_prepared[cpu_dai->id]) { > > and here? > > Really wondering where the stream is actually allocated and set. Controller is allocating the runtime in this case. > >> + sdw_disable_stream(sruntime); >> + sdw_deprepare_stream(sruntime); >> + data->stream_prepared[cpu_dai->id] = false; >> + } >> + >> + return 0; >> +} >> + >> static const struct snd_soc_ops sdm845_be_ops = { >> .hw_params = sdm845_snd_hw_params, >> + .hw_free = sdm845_snd_hw_free, >> + .prepare = sdm845_snd_prepare, >> .startup = sdm845_snd_startup, >> .shutdown = sdm845_snd_shutdown, >> }; >>
next prev parent reply other threads:[~2020-03-18 11:59 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-03-17 9:53 [PATCH 0/2] ASoC: sdm845: fix soundwire stream handling Srinivas Kandagatla 2020-03-17 9:53 ` Srinivas Kandagatla 2020-03-17 9:53 ` [PATCH 1/2] ASoC: qcom: sdm845: handle soundwire stream Srinivas Kandagatla 2020-03-17 9:53 ` Srinivas Kandagatla 2020-03-17 13:07 ` Pierre-Louis Bossart 2020-03-17 13:07 ` Pierre-Louis Bossart 2020-03-18 11:59 ` Srinivas Kandagatla [this message] 2020-03-18 11:59 ` Srinivas Kandagatla 2020-03-18 15:26 ` Pierre-Louis Bossart 2020-03-18 15:26 ` Pierre-Louis Bossart 2020-03-18 15:57 ` Srinivas Kandagatla 2020-03-18 15:57 ` Srinivas Kandagatla 2020-03-18 16:53 ` Pierre-Louis Bossart 2020-03-18 16:53 ` Pierre-Louis Bossart 2020-03-17 9:53 ` [PATCH 2/2] ASoC: codecs: wsa881x: remove soundwire stream handling Srinivas Kandagatla 2020-03-17 9:53 ` Srinivas Kandagatla 2020-03-17 11:05 ` [PATCH 0/2] ASoC: sdm845: fix " Pierre-Louis Bossart 2020-03-17 11:05 ` Pierre-Louis Bossart
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=69c72f5a-e72e-b7b3-90cb-a7354dcb175d@linaro.org \ --to=srinivas.kandagatla@linaro.org \ --cc=alsa-devel@alsa-project.org \ --cc=broonie@kernel.org \ --cc=lgirdwood@gmail.com \ --cc=linux-kernel@vger.kernel.org \ --cc=perex@perex.cz \ --cc=pierre-louis.bossart@linux.intel.com \ --cc=vkoul@kernel.org \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.