[alsa-devel] [PATCH 1/2] ASoC: Allow drivers to specify how many bits are significant on a DAI
Peter Ujfalusi
peter.ujfalusi at ti.com
Tue Jan 17 09:55:23 CET 2012
On 01/16/2012 07:41 PM, Mark Brown wrote:
> /*
> + * List of sample sizes that might go over the bus for parameter
> + * application. There ought to be a wildcard sample size for things
> + * like the DAC/ADC resolution to use but there isn't right now.
> + */
> +static int sample_sizes[] = {
> + 8, 16, 24, 32,
> +};
> +
> +static void soc_pcm_apply_msb(struct snd_pcm_substream *substream,
> + struct snd_soc_dai *dai)
> +{
> + int ret, i, bits;
> +
> + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
> + bits = dai->driver->playback.sig_bits;
> + else
> + bits = dai->driver->capture.sig_bits;
> +
> + if (!bits)
> + return;
> +
> + for (i = 0; i < ARRAY_SIZE(sample_sizes); i++) {
> + ret = snd_pcm_hw_constraint_msbits(substream->runtime,
> + 0, sample_sizes[i],
> + bits);
Should we apply the constraint only if the sample size is bigger than
the msbit request:
if (sample_sizes[i] > bits) {
ret = snd_pcm_hw_constraint_msbits();
}
Might be not an issue to say that we have 24msbit on the 8bit sample,
but it does not sound right.
> + if (ret != 0)
> + dev_warn(dai->dev,
> + "Failed to set MSB %d/%d: %d\n",
> + bits, sample_sizes[i], ret);
> + }
> +}
> +
> +/*
> * Called by ALSA when a PCM substream is opened, the runtime->hw record is
> * then initialized and any private data can be allocated. This also calls
> * startup for the cpu DAI, platform, machine and codec DAI.
> @@ -187,6 +220,9 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
> goto config_err;
> }
>
> + soc_pcm_apply_msb(substream, codec_dai);
> + soc_pcm_apply_msb(substream, cpu_dai);
> +
> /* Symmetry only applies if we've already got an active stream. */
> if (cpu_dai->active) {
> ret = soc_pcm_apply_symmetry(substream, cpu_dai);
--
Péter
More information about the Alsa-devel
mailing list