mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
bcm2835-i2s: add 24bit support, update bclk_ratio to more correct values
Code ported from bcm2708-i2s driver in Raspberry Pi tree. RPi commit62c05a0b53("ASoC: BCM2708: Add 24 bit support") This adds 24 bit support to the I2S driver of the BCM2708. Besides enabling the 24 bit flags, it includes two bug fixes: MMAP is not supported. Claiming this leads to strange issues when the format of driver and file do not match. The datasheet states that the width extension bit should be set for widths greater than 24, but greater or equal would be correct. This follows from the definition of the width field. Signed-off-by: Florian Meier <florian.meier@koalo.de> RPi commit3e8c672bc4("bcm2708-i2s: Update bclk_ratio to more correct values") Discussion about blck_ratio affecting sound quality: https://github.com/raspberrypi/linux/issues/681 Signed-off-by: Matthias Reichl <hias@horus.com>
This commit is contained in:
committed by
popcornmix
parent
b9034bf300
commit
6fc2e3b055
@@ -340,11 +340,15 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
switch (params_format(params)) {
|
||||
case SNDRV_PCM_FORMAT_S16_LE:
|
||||
data_length = 16;
|
||||
bclk_ratio = 40;
|
||||
bclk_ratio = 50;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S24_LE:
|
||||
data_length = 24;
|
||||
bclk_ratio = 50;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S32_LE:
|
||||
data_length = 32;
|
||||
bclk_ratio = 80;
|
||||
bclk_ratio = 100;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
@@ -420,7 +424,7 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
/* Setup the frame format */
|
||||
format = BCM2835_I2S_CHEN;
|
||||
|
||||
if (data_length > 24)
|
||||
if (data_length >= 24)
|
||||
format |= BCM2835_I2S_CHWEX;
|
||||
|
||||
format |= BCM2835_I2S_CHWID((data_length-8)&0xf);
|
||||
@@ -711,6 +715,7 @@ static struct snd_soc_dai_driver bcm2835_i2s_dai = {
|
||||
.channels_max = 2,
|
||||
.rates = SNDRV_PCM_RATE_8000_192000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE
|
||||
| SNDRV_PCM_FMTBIT_S24_LE
|
||||
| SNDRV_PCM_FMTBIT_S32_LE
|
||||
},
|
||||
.capture = {
|
||||
@@ -718,6 +723,7 @@ static struct snd_soc_dai_driver bcm2835_i2s_dai = {
|
||||
.channels_max = 2,
|
||||
.rates = SNDRV_PCM_RATE_8000_192000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE
|
||||
| SNDRV_PCM_FMTBIT_S24_LE
|
||||
| SNDRV_PCM_FMTBIT_S32_LE
|
||||
},
|
||||
.ops = &bcm2835_i2s_dai_ops,
|
||||
|
||||
Reference in New Issue
Block a user