2020-09-05 06:23:37

by Bard Liao

[permalink] [raw]
Subject: [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 <[email protected]>

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(-)

--
2.17.1


2020-09-05 06:23:38

by Bard Liao

[permalink] [raw]
Subject: [PATCH v3 1/3] ASoC: soc-dai: clarify return value for get_sdw_stream()

From: Pierre-Louis Bossart <[email protected]>

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 <[email protected]>
Reported-by: Bard Liao <[email protected]>
Signed-off-by: Pierre-Louis Bossart <[email protected]>
Reviewed-by: Rander Wang <[email protected]>
Signed-off-by: Bard Liao <[email protected]>
---
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)
--
2.17.1

2020-09-05 06:24:51

by Bard Liao

[permalink] [raw]
Subject: [PATCH v3 2/3] ASoC: Intel: sof_sdw: add dailink .trigger callback

From: Pierre-Louis Bossart <[email protected]>

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 <[email protected]>
Reviewed-by: Rander Wang <[email protected]>
Signed-off-by: Bard Liao <[email protected]>
---
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,
};

--
2.17.1

2020-09-05 06:25:12

by Bard Liao

[permalink] [raw]
Subject: [PATCH v3 3/3] ASoC: Intel: sof_sdw: add dailink .prepare and .hw_free callback

From: Pierre-Louis Bossart <[email protected]>

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 <[email protected]>
Reviewed-by: Rander Wang <[email protected]>
Signed-off-by: Bard Liao <[email protected]>
---
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,
};

--
2.17.1

2020-09-07 18:08:24

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH v3 0/3] ASoC: Add sdw stream operations to dailink ops.

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 <[email protected]>
>
> 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

2020-09-08 16:58:55

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH v3 0/3] ASoC: Add sdw stream operations to dailink ops.

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.


Attachments:
(No filename) (650.00 B)
signature.asc (499.00 B)
Download all attachments

2020-09-08 17:38:36

by Jaroslav Kysela

[permalink] [raw]
Subject: Re: [PATCH v3 0/3] ASoC: Add sdw stream operations to dailink ops.

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 <[email protected]>
>
> 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 <[email protected]>

--
Jaroslav Kysela <[email protected]>
Linux Sound Maintainer; ALSA Project; Red Hat, Inc.

2020-09-09 07:50:43

by Vinod Koul

[permalink] [raw]
Subject: Re: [PATCH v3 0/3] ASoC: Add sdw stream operations to dailink ops.

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 <[email protected]>
> >
> > 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 <[email protected]>
>
> --
> Jaroslav Kysela <[email protected]>
> Linux Sound Maintainer; ALSA Project; Red Hat, Inc.

--
~Vinod