summaryrefslogtreecommitdiffstats
path: root/drivers/mfd/mc13xxx-spi.c
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2013-09-23 20:14:32 +0200
committerLee Jones <lee.jones@linaro.org>2013-09-25 14:47:30 +0200
commitfd792f8fbcfa95674b6c417429f576ad1d808086 (patch)
treedd092c79d308f1b2194f1091cab23f2dfb046b2e /drivers/mfd/mc13xxx-spi.c
parentmfd: mc13xxx: Don't require lock for simple register I/O (diff)
downloadlinux-fd792f8fbcfa95674b6c417429f576ad1d808086.tar.xz
linux-fd792f8fbcfa95674b6c417429f576ad1d808086.zip
mfd: mc13xxx: Move SPI erratum workaround into SPI I/O function
Move the workaround for double sending AUDIO_CODEC and AUDIO_DAC writes into the SPI core, aiding refactoring to eliminate the ASoC custom I/O functions and avoiding the extra writes for I2C. Signed-off-by: Mark Brown <broonie@linaro.org> Signed-off-by: Lee Jones <lee.jones@linaro.org>
Diffstat (limited to 'drivers/mfd/mc13xxx-spi.c')
-rw-r--r--drivers/mfd/mc13xxx-spi.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/mfd/mc13xxx-spi.c b/drivers/mfd/mc13xxx-spi.c
index 77189daadf1e..5f14ef6693c2 100644
--- a/drivers/mfd/mc13xxx-spi.c
+++ b/drivers/mfd/mc13xxx-spi.c
@@ -94,10 +94,15 @@ static int mc13xxx_spi_write(void *context, const void *data, size_t count)
{
struct device *dev = context;
struct spi_device *spi = to_spi_device(dev);
+ const char *reg = data;
if (count != 4)
return -ENOTSUPP;
+ /* include errata fix for spi audio problems */
+ if (*reg == MC13783_AUDIO_CODEC || *reg == MC13783_AUDIO_DAC)
+ spi_write(spi, data, count);
+
return spi_write(spi, data, count);
}