summaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/wm8753.c
diff options
context:
space:
mode:
authorMark Brown2009-02-22 21:04:41 +0100
committerMark Brown2009-02-25 00:49:56 +0100
commite611bd82441130991d7f4600dfd4632cebd417c5 (patch)
treea67ae0acad57d18caa025e1ffdb27d8792f4a75a /sound/soc/codecs/wm8753.c
parentASoC: Convert WM8753 to register via normal device probe (diff)
downloadkernel-qcow2-linux-e611bd82441130991d7f4600dfd4632cebd417c5.tar.gz
kernel-qcow2-linux-e611bd82441130991d7f4600dfd4632cebd417c5.tar.xz
kernel-qcow2-linux-e611bd82441130991d7f4600dfd4632cebd417c5.zip
ASoC: Only write back non-default registers when resuming WM8753
This will reduce the number of writes done on resume, allowing that to complete faster (especially on systems with very slow I2C like the current Samsung driver). Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/wm8753.c')
-rw-r--r--sound/soc/codecs/wm8753.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c
index bc29558149e9..2241204b5151 100644
--- a/sound/soc/codecs/wm8753.c
+++ b/sound/soc/codecs/wm8753.c
@@ -1526,6 +1526,11 @@ static int wm8753_resume(struct platform_device *pdev)
for (i = 0; i < ARRAY_SIZE(wm8753_reg); i++) {
if (i + 1 == WM8753_RESET)
continue;
+
+ /* No point in writing hardware default values back */
+ if (cache[i] == wm8753_reg[i])
+ continue;
+
data[0] = ((i + 1) << 1) | ((cache[i] >> 8) & 0x0001);
data[1] = cache[i] & 0x00ff;
codec->hw_write(codec->control_data, data, 2);