diff options
author | Sugar Zhang <sugar.zhang@rock-chips.com> | 2018-11-29 13:05:12 +0800 |
---|---|---|
committer | Tao Huang <huangtao@rock-chips.com> | 2018-12-05 18:16:28 +0800 |
commit | 5af049f8ebb49b5d6bc288688f66543a62e95c9c (patch) | |
tree | 64633020b7d892b803a41a4708a5843ce0328183 /arch/arm64/boot/dts/rockchip/rk1808.dtsi | |
parent | d83ced5248207b94078289de1125389fd2b60b9e (diff) |
ASoC: rockchip: i2s_tdm: Correct some regmap config
When restoring registers during runtime resume, we must not write to
I2S_TXDR which is the transmit FIFO as this queues up a sample to be
output and pushes all of the output channels down by one.
This can be demonstrated with the speaker-test utility:
for i in a b c; do speaker-test -c 2 -s 1; done
which should play a test with through the left speaker three times but if
the I2S hardware starts runtime suspended the first sample will be played
through the right speaker.
Fix this by marking I2S_TXDR as volatile (which also requires marking it
as readable, even though it technically isn't). This seems to be the
most robust fix, the alternative of giving I2S_TXDR a default value is
more fragile since it does not prevent regcache writing to the register
in all circumstances.
While here, also fix the configuration of I2S_RXDR and I2S_FIFOLR; these
are not writable so they do not suffer from the same problem as I2S_TXDR
but reading from I2S_RXDR does suffer from a similar problem.
Change-Id: Id91d3f54f3fda0e9140c9da162b0dff2c3df067b
Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
Diffstat (limited to 'arch/arm64/boot/dts/rockchip/rk1808.dtsi')
0 files changed, 0 insertions, 0 deletions