[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