17 Jan
2012
17 Jan
'12
9:55 a.m.
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