[PATCH v3 0/3] ASoC: Add sdw stream operations to dailink ops.
Sdw stream operation APIs can be called once per stream. Move these operations to dailink ops. The linked series is "soundwire: Remove sdw stream operations from Intel soundwire dai".
Reviewed-by: Vinod Koul vkoul@kernel.org
Changes in v3: - s/ASOC/ASoC
Pierre-Louis Bossart (3): ASoC: soc-dai: clarify return value for get_sdw_stream() ASoC: Intel: sof_sdw: add dailink .trigger callback ASoC: Intel: sof_sdw: add dailink .prepare and .hw_free callback
include/sound/soc-dai.h | 3 +- sound/soc/intel/boards/sof_sdw.c | 81 ++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-)
From: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com
Previous changes move to use ERR_PTR(-ENOTSUPP), but it's not clear what implementations can return in case of errors. Explicitly document that NULL is not a possible return value, only ERR_PTR with a negative error code is valid.
Fixes: 308811a327c38 ('ASoC: soc-dai: return proper error for get_sdw_stream()') Cc: Srinivas Kandagatla srinivas.kandagatla@linaro.org Reported-by: Bard Liao yung-chuan.liao@linux.intel.com Signed-off-by: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com Reviewed-by: Rander Wang rander.wang@linux.intel.com Signed-off-by: Bard Liao yung-chuan.liao@linux.intel.com --- include/sound/soc-dai.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h index 776a60529e70..8b693dade9c6 100644 --- a/include/sound/soc-dai.h +++ b/include/sound/soc-dai.h @@ -471,7 +471,8 @@ static inline int snd_soc_dai_set_sdw_stream(struct snd_soc_dai *dai, * This routine only retrieves that was previously configured * with snd_soc_dai_get_sdw_stream() * - * Returns pointer to stream or -ENOTSUPP if callback is not supported; + * Returns pointer to stream or an ERR_PTR value, e.g. + * ERR_PTR(-ENOTSUPP) if callback is not supported; */ static inline void *snd_soc_dai_get_sdw_stream(struct snd_soc_dai *dai, int direction)
From: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com
Add trigger functionality to dailink, so far only .startup() and .shutdown() were implemented at the machine driver level.
The companion patch for this patch is the removal of the trigger callback at the DAI level in drivers/soundwire/intel.c
Signed-off-by: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com Reviewed-by: Rander Wang rander.wang@linux.intel.com Signed-off-by: Bard Liao yung-chuan.liao@linux.intel.com --- sound/soc/intel/boards/sof_sdw.c | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+)
diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c index 2463d432bf4d..f251e046d74d 100644 --- a/sound/soc/intel/boards/sof_sdw.c +++ b/sound/soc/intel/boards/sof_sdw.c @@ -195,6 +195,46 @@ int sdw_startup(struct snd_pcm_substream *substream) return sdw_startup_stream(substream); }
+static int sdw_trigger(struct snd_pcm_substream *substream, int cmd) +{ + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); + struct sdw_stream_runtime *sdw_stream; + struct snd_soc_dai *dai; + int ret; + + /* Find stream from first CPU DAI */ + dai = asoc_rtd_to_cpu(rtd, 0); + + sdw_stream = snd_soc_dai_get_sdw_stream(dai, substream->stream); + + if (IS_ERR(sdw_stream)) { + dev_err(rtd->dev, "no stream found for DAI %s", dai->name); + return PTR_ERR(sdw_stream); + } + + switch (cmd) { + case SNDRV_PCM_TRIGGER_START: + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: + case SNDRV_PCM_TRIGGER_RESUME: + ret = sdw_enable_stream(sdw_stream); + break; + + case SNDRV_PCM_TRIGGER_PAUSE_PUSH: + case SNDRV_PCM_TRIGGER_SUSPEND: + case SNDRV_PCM_TRIGGER_STOP: + ret = sdw_disable_stream(sdw_stream); + break; + default: + ret = -EINVAL; + break; + } + + if (ret) + dev_err(rtd->dev, "%s trigger %d failed: %d", __func__, cmd, ret); + + return ret; +} + void sdw_shutdown(struct snd_pcm_substream *substream) { sdw_shutdown_stream(substream); @@ -202,6 +242,7 @@ void sdw_shutdown(struct snd_pcm_substream *substream)
static const struct snd_soc_ops sdw_ops = { .startup = sdw_startup, + .trigger = sdw_trigger, .shutdown = sdw_shutdown, };
From: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com
Add .prepare and .hw_free callback to dailink.
The companion patch for this patch is the removal of stream operations in the .prepare and .hw_free callbacks at the DAI level in drivers/soundwire/intel.c
Signed-off-by: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com Reviewed-by: Rander Wang rander.wang@linux.intel.com Signed-off-by: Bard Liao yung-chuan.liao@linux.intel.com --- sound/soc/intel/boards/sof_sdw.c | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+)
diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c index f251e046d74d..16503772965c 100644 --- a/sound/soc/intel/boards/sof_sdw.c +++ b/sound/soc/intel/boards/sof_sdw.c @@ -195,6 +195,25 @@ int sdw_startup(struct snd_pcm_substream *substream) return sdw_startup_stream(substream); }
+static int sdw_prepare(struct snd_pcm_substream *substream) +{ + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); + struct sdw_stream_runtime *sdw_stream; + struct snd_soc_dai *dai; + + /* Find stream from first CPU DAI */ + dai = asoc_rtd_to_cpu(rtd, 0); + + sdw_stream = snd_soc_dai_get_sdw_stream(dai, substream->stream); + + if (IS_ERR(sdw_stream)) { + dev_err(rtd->dev, "no stream found for DAI %s", dai->name); + return PTR_ERR(sdw_stream); + } + + return sdw_prepare_stream(sdw_stream); +} + static int sdw_trigger(struct snd_pcm_substream *substream, int cmd) { struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); @@ -235,6 +254,25 @@ static int sdw_trigger(struct snd_pcm_substream *substream, int cmd) return ret; }
+static int sdw_hw_free(struct snd_pcm_substream *substream) +{ + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); + struct sdw_stream_runtime *sdw_stream; + struct snd_soc_dai *dai; + + /* Find stream from first CPU DAI */ + dai = asoc_rtd_to_cpu(rtd, 0); + + sdw_stream = snd_soc_dai_get_sdw_stream(dai, substream->stream); + + if (IS_ERR(sdw_stream)) { + dev_err(rtd->dev, "no stream found for DAI %s", dai->name); + return PTR_ERR(sdw_stream); + } + + return sdw_deprepare_stream(sdw_stream); +} + void sdw_shutdown(struct snd_pcm_substream *substream) { sdw_shutdown_stream(substream); @@ -242,7 +280,9 @@ void sdw_shutdown(struct snd_pcm_substream *substream)
static const struct snd_soc_ops sdw_ops = { .startup = sdw_startup, + .prepare = sdw_prepare, .trigger = sdw_trigger, + .hw_free = sdw_hw_free, .shutdown = sdw_shutdown, };
On Sat, 5 Sep 2020 02:28:51 +0800, Bard Liao wrote:
Sdw stream operation APIs can be called once per stream. Move these operations to dailink ops. The linked series is "soundwire: Remove sdw stream operations from Intel soundwire dai".
Reviewed-by: Vinod Koul vkoul@kernel.org
Changes in v3:
- s/ASOC/ASoC
[...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
Thanks!
[1/3] ASoC: soc-dai: clarify return value for get_sdw_stream() commit: d20e834e13ce349c9b901b9dd8b7013e255083e8 [2/3] ASoC: Intel: sof_sdw: add dailink .trigger callback commit: ae3a3918edf57bde7651964be04d0807cccae8f2 [3/3] ASoC: Intel: sof_sdw: add dailink .prepare and .hw_free callback commit: 06998d49bcac8a9df3341db99c5f81ae4ef51c84
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks, Mark
Dne 04. 09. 20 v 20:28 Bard Liao napsal(a):
Sdw stream operation APIs can be called once per stream. Move these operations to dailink ops. The linked series is "soundwire: Remove sdw stream operations from Intel soundwire dai".
Reviewed-by: Vinod Koul vkoul@kernel.org
Changes in v3:
- s/ASOC/ASoC
Pierre-Louis Bossart (3): ASoC: soc-dai: clarify return value for get_sdw_stream() ASoC: Intel: sof_sdw: add dailink .trigger callback ASoC: Intel: sof_sdw: add dailink .prepare and .hw_free callback
include/sound/soc-dai.h | 3 +- sound/soc/intel/boards/sof_sdw.c | 81 ++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-)
This patchset depends on the SoundWire patchset "[PATCH v2 0/4] soundwire: Remove sdw stream operations from Intel" and cannot be used standalone. I believe that one maintainer should accept it or there should be a co-ordination between Mark and Vinod to push this in sync. We should really settle, how to accept such changes. I believe that Vinod should take it with the ack from Mark for this case. Please, don't require to split changes which depends on each other.
For all above patches (I tested them):
Acked-by: Jaroslav Kysela perex@perex.cz
On Tue, Sep 08, 2020 at 02:26:14PM +0200, Jaroslav Kysela wrote:
"[PATCH v2 0/4] soundwire: Remove sdw stream operations from Intel" and cannot be used standalone. I believe that one maintainer should accept it or there should be a co-ordination between Mark and Vinod to push this in sync. We should really settle, how to accept such changes. I believe that Vinod should take it with the ack from Mark for this case. Please, don't require to split changes which depends on each other.
Or just tag the bit from Soundwire that needs to be shared so I can pull it in which is the more usual way to handle this sort of thing.
On 08-09-20, 14:26, Jaroslav Kysela wrote:
Dne 04. 09. 20 v 20:28 Bard Liao napsal(a):
Sdw stream operation APIs can be called once per stream. Move these operations to dailink ops. The linked series is "soundwire: Remove sdw stream operations from Intel soundwire dai".
Reviewed-by: Vinod Koul vkoul@kernel.org
Changes in v3:
- s/ASOC/ASoC
Pierre-Louis Bossart (3): ASoC: soc-dai: clarify return value for get_sdw_stream() ASoC: Intel: sof_sdw: add dailink .trigger callback ASoC: Intel: sof_sdw: add dailink .prepare and .hw_free callback
include/sound/soc-dai.h | 3 +- sound/soc/intel/boards/sof_sdw.c | 81 ++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-)
This patchset depends on the SoundWire patchset "[PATCH v2 0/4] soundwire: Remove sdw stream operations from Intel" and cannot be used standalone. I believe that one maintainer should accept it or there should be a co-ordination between Mark and Vinod to push this in sync. We should really settle, how to accept such changes. I believe that Vinod should take it with the ack from Mark for this case. Please, don't require to split changes which depends on each other.
I did ask about dependencies, and IIRC looking at code there were none. Yes you need both the parts to make it work, but both the trees build fine and these will go for 5.10, so I think these merged are okay.
For all above patches (I tested them):
Acked-by: Jaroslav Kysela perex@perex.cz
-- Jaroslav Kysela perex@perex.cz Linux Sound Maintainer; ALSA Project; Red Hat, Inc.
participants (4)
-
Bard Liao
-
Jaroslav Kysela
-
Mark Brown
-
Vinod Koul