diff options
-rw-r--r-- | include/linux/mfd/wm8994/pdata.h | 20 | ||||
-rw-r--r-- | sound/soc/codecs/wm8994.c | 12 |
2 files changed, 24 insertions, 8 deletions
diff --git a/include/linux/mfd/wm8994/pdata.h b/include/linux/mfd/wm8994/pdata.h index 195ade95af38..5256f1f41d7f 100644 --- a/include/linux/mfd/wm8994/pdata.h +++ b/include/linux/mfd/wm8994/pdata.h | |||
@@ -113,6 +113,23 @@ struct wm8958_enh_eq_cfg { | |||
113 | u16 regs[WM8958_ENH_EQ_REGS]; | 113 | u16 regs[WM8958_ENH_EQ_REGS]; |
114 | }; | 114 | }; |
115 | 115 | ||
116 | /** | ||
117 | * Microphone detection rates, used to tune response rates and power | ||
118 | * consumption for WM8958/WM1811 microphone detection. | ||
119 | * | ||
120 | * @sysclk: System clock rate to use this configuration for. | ||
121 | * @idle: True if this configuration should use when no accessory is detected, | ||
122 | * false otherwise. | ||
123 | * @start: Value for MICD_BIAS_START_TIME register field (not shifted). | ||
124 | * @rate: Value for MICD_RATE register field (not shifted). | ||
125 | */ | ||
126 | struct wm8958_micd_rate { | ||
127 | int sysclk; | ||
128 | bool idle; | ||
129 | int start; | ||
130 | int rate; | ||
131 | }; | ||
132 | |||
116 | struct wm8994_pdata { | 133 | struct wm8994_pdata { |
117 | int gpio_base; | 134 | int gpio_base; |
118 | 135 | ||
@@ -144,6 +161,9 @@ struct wm8994_pdata { | |||
144 | int num_enh_eq_cfgs; | 161 | int num_enh_eq_cfgs; |
145 | struct wm8958_enh_eq_cfg *enh_eq_cfgs; | 162 | struct wm8958_enh_eq_cfg *enh_eq_cfgs; |
146 | 163 | ||
164 | int num_micd_rates; | ||
165 | struct wm8958_micd_rate *micd_rates; | ||
166 | |||
147 | /* LINEOUT can be differential or single ended */ | 167 | /* LINEOUT can be differential or single ended */ |
148 | unsigned int lineout1_diff:1; | 168 | unsigned int lineout1_diff:1; |
149 | unsigned int lineout2_diff:1; | 169 | unsigned int lineout2_diff:1; |
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index 91f3638ab33f..6bdf8137c7e8 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c | |||
@@ -60,13 +60,6 @@ static int wm8994_retune_mobile_base[] = { | |||
60 | 60 | ||
61 | static void wm8958_default_micdet(u16 status, void *data); | 61 | static void wm8958_default_micdet(u16 status, void *data); |
62 | 62 | ||
63 | struct wm8958_micd_rate { | ||
64 | int sysclk; | ||
65 | bool idle; | ||
66 | int start; | ||
67 | int rate; | ||
68 | }; | ||
69 | |||
70 | static const struct wm8958_micd_rate micdet_rates[] = { | 63 | static const struct wm8958_micd_rate micdet_rates[] = { |
71 | { 32768, true, 1, 4 }, | 64 | { 32768, true, 1, 4 }, |
72 | { 32768, false, 1, 1 }, | 65 | { 32768, false, 1, 1 }, |
@@ -100,7 +93,10 @@ static void wm8958_micd_set_rate(struct snd_soc_codec *codec) | |||
100 | else | 93 | else |
101 | sysclk = wm8994->aifclk[0]; | 94 | sysclk = wm8994->aifclk[0]; |
102 | 95 | ||
103 | if (wm8994->jackdet) { | 96 | if (wm8994->pdata && wm8994->pdata->micd_rates) { |
97 | rates = wm8994->pdata->micd_rates; | ||
98 | num_rates = wm8994->pdata->num_micd_rates; | ||
99 | } else if (wm8994->jackdet) { | ||
104 | rates = jackdet_rates; | 100 | rates = jackdet_rates; |
105 | num_rates = ARRAY_SIZE(jackdet_rates); | 101 | num_rates = ARRAY_SIZE(jackdet_rates); |
106 | } else { | 102 | } else { |