|
@@ -1278,14 +1278,15 @@ static struct snd_soc_dai_driver fsl_ssi_ac97_dai = {
|
|
|
.channels_min = 2,
|
|
|
.channels_max = 2,
|
|
|
.rates = SNDRV_PCM_RATE_8000_48000,
|
|
|
- .formats = SNDRV_PCM_FMTBIT_S16_LE,
|
|
|
+ .formats = SNDRV_PCM_FMTBIT_S16 | SNDRV_PCM_FMTBIT_S20,
|
|
|
},
|
|
|
.capture = {
|
|
|
.stream_name = "AC97 Capture",
|
|
|
.channels_min = 2,
|
|
|
.channels_max = 2,
|
|
|
.rates = SNDRV_PCM_RATE_48000,
|
|
|
- .formats = SNDRV_PCM_FMTBIT_S16_LE,
|
|
|
+ /* 16-bit capture is broken (errata ERR003778) */
|
|
|
+ .formats = SNDRV_PCM_FMTBIT_S20,
|
|
|
},
|
|
|
.ops = &fsl_ssi_dai_ops,
|
|
|
};
|
|
@@ -1557,11 +1558,12 @@ static int fsl_ssi_probe(struct platform_device *pdev)
|
|
|
|
|
|
/* Are the RX and the TX clocks locked? */
|
|
|
if (!of_find_property(np, "fsl,ssi-asynchronous", NULL)) {
|
|
|
- if (!fsl_ssi_is_ac97(ssi_private))
|
|
|
+ if (!fsl_ssi_is_ac97(ssi_private)) {
|
|
|
ssi_private->cpu_dai_drv.symmetric_rates = 1;
|
|
|
+ ssi_private->cpu_dai_drv.symmetric_samplebits = 1;
|
|
|
+ }
|
|
|
|
|
|
ssi_private->cpu_dai_drv.symmetric_channels = 1;
|
|
|
- ssi_private->cpu_dai_drv.symmetric_samplebits = 1;
|
|
|
}
|
|
|
|
|
|
/* Determine the FIFO depth. */
|