lkml.org 
[lkml]   [2019]   [Nov]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 12/15] soundwire: intel: add trigger support in sdw dai driver
    Date
    From: Rander Wang <rander.wang@linux.intel.com>

    The existing code does not expose a trigger callback, which is very
    much required for streaming.

    The SoundWire stream is enabled and disabled in trigger function.

    Signed-off-by: Rander Wang <rander.wang@linux.intel.com>
    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    ---
    drivers/soundwire/intel.c | 39 +++++++++++++++++++++++++++++++++++++++
    1 file changed, 39 insertions(+)

    diff --git a/drivers/soundwire/intel.c b/drivers/soundwire/intel.c
    index c50aebda7f4d..862dde9a9b86 100644
    --- a/drivers/soundwire/intel.c
    +++ b/drivers/soundwire/intel.c
    @@ -712,6 +712,43 @@ static int intel_prepare(struct snd_pcm_substream *substream,
    return sdw_prepare_stream(dma->stream);
    }

    +static int intel_trigger(struct snd_pcm_substream *substream, int cmd,
    + struct snd_soc_dai *dai)
    +{
    + struct sdw_cdns_dma_data *dma;
    + int ret;
    +
    + dma = snd_soc_dai_get_dma_data(dai, substream);
    + if (!dma) {
    + dev_err(dai->dev, "failed to get dma data in %s", __func__);
    + return -EIO;
    + }
    +
    + switch (cmd) {
    + case SNDRV_PCM_TRIGGER_START:
    + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
    + case SNDRV_PCM_TRIGGER_RESUME:
    + ret = sdw_enable_stream(dma->stream);
    + break;
    +
    + case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
    + case SNDRV_PCM_TRIGGER_SUSPEND:
    + case SNDRV_PCM_TRIGGER_STOP:
    + ret = sdw_disable_stream(dma->stream);
    + break;
    +
    + default:
    + ret = -EINVAL;
    + break;
    + }
    +
    + if (ret)
    + dev_err(dai->dev,
    + "%s trigger %d failed: %d",
    + __func__, cmd, ret);
    + return ret;
    +}
    +
    static int
    intel_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
    {
    @@ -759,6 +796,7 @@ static int intel_pdm_set_sdw_stream(struct snd_soc_dai *dai,
    static const struct snd_soc_dai_ops intel_pcm_dai_ops = {
    .hw_params = intel_hw_params,
    .prepare = intel_prepare,
    + .trigger = intel_trigger,
    .hw_free = intel_hw_free,
    .shutdown = intel_shutdown,
    .set_sdw_stream = intel_pcm_set_sdw_stream,
    @@ -767,6 +805,7 @@ static const struct snd_soc_dai_ops intel_pcm_dai_ops = {
    static const struct snd_soc_dai_ops intel_pdm_dai_ops = {
    .hw_params = intel_hw_params,
    .prepare = intel_prepare,
    + .trigger = intel_trigger,
    .hw_free = intel_hw_free,
    .shutdown = intel_shutdown,
    .set_sdw_stream = intel_pdm_set_sdw_stream,
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-11-14 19:01    [W:6.423 / U:0.136 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site