| From 9f6f0afbb9fdabf6dcac642dfec457f28981e3f8 Mon Sep 17 00:00:00 2001 |
| From: Steffen Trumtrar <s.trumtrar@pengutronix.de> |
| Date: Mon, 9 Sep 2013 18:09:12 +0200 |
| Subject: ASoC: mc13783: add spi errata fix |
| |
| From: Steffen Trumtrar <s.trumtrar@pengutronix.de> |
| |
| commit 9f6f0afbb9fdabf6dcac642dfec457f28981e3f8 upstream. |
| |
| The MC13783 Chip Errata, Rev. 4 says, that depending on SPI clock |
| and main audio clock speed, the Audio Codec or Stereo DAC do sometimes |
| not start when programmed to do so. This is due to an internal clock |
| timing issue related to the loading of the SPI bits into the audio block. |
| |
| On an i.MX27 based system, this issue lead to switched audio channels under |
| certain circumstances: RTC + Touch + Audio are used and loaded at startup. |
| |
| The mentioned workaround of writing registers 40 and 41 two times is implemented |
| here. |
| |
| Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de> |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/soc/codecs/mc13783.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/sound/soc/codecs/mc13783.c |
| +++ b/sound/soc/codecs/mc13783.c |
| @@ -126,6 +126,10 @@ static int mc13783_write(struct snd_soc_ |
| |
| ret = mc13xxx_reg_write(priv->mc13xxx, reg, value); |
| |
| + /* include errata fix for spi audio problems */ |
| + if (reg == MC13783_AUDIO_CODEC || reg == MC13783_AUDIO_DAC) |
| + ret = mc13xxx_reg_write(priv->mc13xxx, reg, value); |
| + |
| mc13xxx_unlock(priv->mc13xxx); |
| |
| return ret; |