aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2011-02-21 20:11:59 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2011-02-22 13:42:06 -0500
commit48e028eccabc9c246bfad175262582a1ce34a316 (patch)
tree765ecba628ca9af23f695cba2e32ede7eb7da062
parent9b7c525dfaa9a1b5f01db1f3a1edc50bbb6eb739 (diff)
ASoC: Support configuration of WM8958 microphone bias analogue parameters
The WM8958 has a different microphone bias architecture to WM8994 so needs different configuration to WM8994. Support this in platform data. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
-rw-r--r--include/linux/mfd/wm8994/pdata.h7
-rw-r--r--include/linux/mfd/wm8994/registers.h2
-rw-r--r--sound/soc/codecs/wm8994.c7
3 files changed, 14 insertions, 2 deletions
diff --git a/include/linux/mfd/wm8994/pdata.h b/include/linux/mfd/wm8994/pdata.h
index 06869466b7f0..466b1c777aff 100644
--- a/include/linux/mfd/wm8994/pdata.h
+++ b/include/linux/mfd/wm8994/pdata.h
@@ -108,13 +108,16 @@ struct wm8994_pdata {
108 */ 108 */
109 int micdet_irq; 109 int micdet_irq;
110 110
111 /* Microphone biases: 0=0.9*AVDD1 1=0.65*AVVD1 */ 111 /* WM8994 microphone biases: 0=0.9*AVDD1 1=0.65*AVVD1 */
112 unsigned int micbias1_lvl:1; 112 unsigned int micbias1_lvl:1;
113 unsigned int micbias2_lvl:1; 113 unsigned int micbias2_lvl:1;
114 114
115 /* Jack detect threashold levels, see datasheet for values */ 115 /* WM8994 jack detect threashold levels, see datasheet for values */
116 unsigned int jd_scthr:2; 116 unsigned int jd_scthr:2;
117 unsigned int jd_thr:2; 117 unsigned int jd_thr:2;
118
119 /* WM8958 microphone bias configuration */
120 int micbias[2];
118}; 121};
119 122
120#endif 123#endif
diff --git a/include/linux/mfd/wm8994/registers.h b/include/linux/mfd/wm8994/registers.h
index be072faec6f0..f3ee84284670 100644
--- a/include/linux/mfd/wm8994/registers.h
+++ b/include/linux/mfd/wm8994/registers.h
@@ -63,6 +63,8 @@
63#define WM8994_MICBIAS 0x3A 63#define WM8994_MICBIAS 0x3A
64#define WM8994_LDO_1 0x3B 64#define WM8994_LDO_1 0x3B
65#define WM8994_LDO_2 0x3C 65#define WM8994_LDO_2 0x3C
66#define WM8958_MICBIAS1 0x3D
67#define WM8958_MICBIAS2 0x3E
66#define WM8994_CHARGE_PUMP_1 0x4C 68#define WM8994_CHARGE_PUMP_1 0x4C
67#define WM8958_CHARGE_PUMP_2 0x4D 69#define WM8958_CHARGE_PUMP_2 0x4D
68#define WM8994_CLASS_W_1 0x51 70#define WM8994_CLASS_W_1 0x51
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index 1ad6e3db7804..9b9c15ffb7d2 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -2855,6 +2855,13 @@ static void wm8994_handle_pdata(struct wm8994_priv *wm8994)
2855 else 2855 else
2856 snd_soc_add_controls(wm8994->codec, wm8994_eq_controls, 2856 snd_soc_add_controls(wm8994->codec, wm8994_eq_controls,
2857 ARRAY_SIZE(wm8994_eq_controls)); 2857 ARRAY_SIZE(wm8994_eq_controls));
2858
2859 for (i = 0; i < ARRAY_SIZE(pdata->micbias); i++) {
2860 if (pdata->micbias[i]) {
2861 snd_soc_write(codec, WM8958_MICBIAS1 + i,
2862 pdata->micbias[i] & 0xffff);
2863 }
2864 }
2858} 2865}
2859 2866
2860/** 2867/**