ASoC: McASP: Fix data rotation for playback. Enables 24bit audio playback
u32 rotate = (32 - word_length) / 4; This implementation is wrong, but it works only for 16, or 32 bit audio data. (rotation for 16 or 32 bit is same as in code I present) Mcasp rotated data in 4 bits (max value 0x7)and then masks them . That data are sended to i2s bus. For 24 bit or 20 bit or other data formats, this code rotates data badly and you hear somethink like noise. You need to use u32 rotate = (word_length / 4) & 0x7; to proper data rotation. Signed-off-by: Michal Bachraty <michal.bachraty@streamunlimited.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
949db153b6
commit
dde109fb46
|
@ -626,7 +626,7 @@ static int davinci_config_channel_size(struct davinci_audio_dev *dev,
|
|||
int word_length)
|
||||
{
|
||||
u32 fmt;
|
||||
u32 rotate = (32 - word_length) / 4;
|
||||
u32 rotate = (word_length / 4) & 0x7;
|
||||
u32 mask = (1ULL << word_length) - 1;
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue