Skip to content

Commit

Permalink
Revert "bcm2835-i2s: Changes for allowing asymmetric sample formats."
Browse files Browse the repository at this point in the history
This reverts commit f5a6236.

See: #1799

Signed-off-by: Phil Elwell <phil@raspberrypi.org>
  • Loading branch information
Phil Elwell committed Jan 16, 2017
1 parent ae27ac3 commit 2bc77d8
Showing 1 changed file with 16 additions and 38 deletions.
54 changes: 16 additions & 38 deletions sound/soc/bcm/bcm2835-i2s.c
Expand Up @@ -237,9 +237,7 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
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,
Expand Down Expand Up @@ -322,46 +320,26 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
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);
Expand Down

0 comments on commit 2bc77d8

Please sign in to comment.