Skip to content

Commit

Permalink
ASoC: Set SNDRV_PCM_INFO_JOINT_DUPLEX for PCMs with symmetry constraints
Browse files Browse the repository at this point in the history
If there are symmetry constraints between the playback and the capture channel
set the SNDRV_PCM_INFO_JOINT_DUPLEX flag to let userspace know about this.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
  • Loading branch information
Lars-Peter Clausen authored and Mark Brown committed Dec 2, 2013
1 parent d338342 commit 62e5f67
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions sound/soc/soc-pcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,21 @@ static int soc_pcm_params_symmetry(struct snd_pcm_substream *substream,
return 0;
}

static bool soc_pcm_has_symmetry(struct snd_pcm_substream *substream)
{
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct snd_soc_dai_driver *cpu_driver = rtd->cpu_dai->driver;
struct snd_soc_dai_driver *codec_driver = rtd->codec_dai->driver;
struct snd_soc_dai_link *link = rtd->dai_link;

return cpu_driver->symmetric_rates || codec_driver->symmetric_rates ||
link->symmetric_rates || cpu_driver->symmetric_channels ||
codec_driver->symmetric_channels || link->symmetric_channels ||
cpu_driver->symmetric_samplebits ||
codec_driver->symmetric_samplebits ||
link->symmetric_samplebits;
}

/*
* List of sample sizes that might go over the bus for parameter
* application. There ought to be a wildcard sample size for things
Expand Down Expand Up @@ -309,6 +324,9 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
&cpu_dai_drv->capture);
}

if (soc_pcm_has_symmetry(substream))
runtime->hw.info |= SNDRV_PCM_INFO_JOINT_DUPLEX;

ret = -EINVAL;
snd_pcm_limit_hw_rates(runtime);
if (!runtime->hw.rates) {
Expand Down

0 comments on commit 62e5f67

Please sign in to comment.