You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
freifunkist-firmware/target/linux/brcm2708/patches-4.9/0132-Revert-bcm2835-i2s-Cha...

90 lines
2.7 KiB

From db51b292d97ecb021831ed380ce4e1152b1bd235 Mon Sep 17 00:00:00 2001
From: Phil Elwell <phil@raspberrypi.org>
Date: Mon, 16 Jan 2017 21:02:26 +0000
Subject: [PATCH] Revert "bcm2835-i2s: Changes for allowing asymmetric sample
formats."
This reverts commit f5a6236a32e82068122301d246a94ca755d61704.
See: https://github.com/raspberrypi/linux/issues/1799
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
---
sound/soc/bcm/bcm2835-i2s.c | 54 ++++++++++++++-------------------------------
1 file changed, 16 insertions(+), 38 deletions(-)
--- a/sound/soc/bcm/bcm2835-i2s.c
+++ b/sound/soc/bcm/bcm2835-i2s.c
@@ -237,9 +237,7 @@ static int bcm2835_i2s_hw_params(struct
unsigned int sampling_rate = params_rate(params);
unsigned int data_length, data_delay, bclk_ratio;
unsigned int ch1pos, ch2pos, mode, format;
- unsigned int previous_ftxp, previous_frxp;
uint32_t csreg;
- bool packed;
/*
* If a stream is already enabled,
@@ -322,46 +320,26 @@ static int bcm2835_i2s_hw_params(struct
return -EINVAL;
}
- /* Set the format for the matching stream direction. */
- switch (substream->stream) {
- case SNDRV_PCM_STREAM_PLAYBACK:
- regmap_write(dev->i2s_regmap, BCM2835_I2S_TXC_A_REG, format);
- break;
- case SNDRV_PCM_STREAM_CAPTURE:
- regmap_write(dev->i2s_regmap, BCM2835_I2S_RXC_A_REG, format);
- break;
- default:
- return -EINVAL;
- }
+ /*
+ * Set format for both streams.
+ * We cannot set another frame length
+ * (and therefore word length) anyway,
+ * so the format will be the same.
+ */
+ regmap_write(dev->i2s_regmap, BCM2835_I2S_RXC_A_REG, format);
+ regmap_write(dev->i2s_regmap, BCM2835_I2S_TXC_A_REG, format);
/* Setup the I2S mode */
- /* Keep existing FTXP and FRXP values. */
- regmap_read(dev->i2s_regmap, BCM2835_I2S_MODE_A_REG, &mode);
-
- previous_ftxp = mode & BCM2835_I2S_FTXP;
- previous_frxp = mode & BCM2835_I2S_FRXP;
-
mode = 0;
- /*
- * Retain the frame packed mode (2 channels per 32 bit word)
- * of the other direction stream intact. The formats of each
- * direction can be different as long as the frame length is
- * shared for both.
- */
- packed = data_length <= 16;
-
- switch (substream->stream) {
- case SNDRV_PCM_STREAM_PLAYBACK:
- mode |= previous_frxp;
- mode |= packed ? BCM2835_I2S_FTXP : 0;
- break;
- case SNDRV_PCM_STREAM_CAPTURE:
- mode |= previous_ftxp;
- mode |= packed ? BCM2835_I2S_FRXP : 0;
- break;
- default:
- return -EINVAL;
+ if (data_length <= 16) {
+ /*
+ * Use frame packed mode (2 channels per 32 bit word)
+ * We cannot set another frame length in the second stream
+ * (and therefore word length) anyway,
+ * so the format will be the same.
+ */
+ mode |= BCM2835_I2S_FTXP | BCM2835_I2S_FRXP;
}
mode |= BCM2835_I2S_FLEN(bclk_ratio - 1);