Skip to content
Unverified Commit ee907afb authored by Martin Blumenstingl's avatar Martin Blumenstingl Committed by Mark Brown
Browse files

ASoC: meson: aiu: Move AIU_I2S_MISC hold setting to aiu-fifo-i2s



The out-of-tree vendor driver uses the following approach to set the
AIU_I2S_MISC register:
1) write AIU_MEM_I2S_START_PTR and AIU_MEM_I2S_RD_PTR
2) configure AIU_I2S_MUTE_SWAP[15:0]
3) write AIU_MEM_I2S_END_PTR
4) set AIU_I2S_MISC[2] to 1 (documented as: "put I2S interface in hold
   mode")
5) set AIU_I2S_MISC[4] to 1 (depending on the driver revision it always
   stays at 1 while for older drivers this bit is unset in step 4)
6) set AIU_I2S_MISC[2] to 0
7) write AIU_MEM_I2S_MASKS
8) toggle AIU_MEM_I2S_CONTROL[0]
9) toggle AIU_MEM_I2S_BUF_CNTL[0]

Move setting the AIU_I2S_MISC[2] bit to aiu_fifo_i2s_hw_params() so it
resembles the flow in the vendor kernel more closely. While here also
configure AIU_I2S_MISC[4] (documented as: "force each audio data to
left or right according to the bit attached with the audio data")
similar to how the vendor driver does this. This fixes the infamous and
long-standing "machine gun noise" issue (a buffer underrun issue).

Fixes: 6ae9ca9c ("ASoC: meson: aiu: add i2s and spdif support")
Reported-by: default avatarChristian Hewitt <christianshewitt@gmail.com>
Reported-by: default avatarGeraldo Nascimento <geraldogabriel@gmail.com>
Tested-by: default avatarChristian Hewitt <christianshewitt@gmail.com>
Tested-by: default avatarGeraldo Nascimento <geraldogabriel@gmail.com>
Acked-by: default avatarJerome Brunet <jbrunet@baylibre.com>
Cc: stable@vger.kernel.org
Signed-off-by: default avatarMartin Blumenstingl <martin.blumenstingl@googlemail.com>
Link: https://lore.kernel.org/r/20211206210804.2512999-3-martin.blumenstingl@googlemail.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 1bcd3266
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment