ASoC: wm_hubs: Cache multiple DCS offsets

Rather than invalidating the cached DCS value every time the headphone
gain changes store multiple values, indexed by gain. This allows the
optimisation we get from the cache to take effect more often.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
diff --git a/sound/soc/codecs/wm_hubs.h b/sound/soc/codecs/wm_hubs.h
index 71861fc..da2dc89 100644
--- a/sound/soc/codecs/wm_hubs.h
+++ b/sound/soc/codecs/wm_hubs.h
@@ -16,6 +16,7 @@
 
 #include <linux/completion.h>
 #include <linux/interrupt.h>
+#include <linux/list.h>
 #include <sound/control.h>
 
 struct snd_soc_codec;
@@ -32,7 +33,7 @@
 	int no_series_update;
 
 	bool no_cache_dac_hp_direct;
-	u16 dac_hp_direct_dcs;
+	struct list_head dcs_cache;
 	bool (*check_class_w_digital)(struct snd_soc_codec *);
 
 	bool lineout1_se;