diff options
Diffstat (limited to 'sound/soc/codecs/wm9713.c')
-rw-r--r-- | sound/soc/codecs/wm9713.c | 91 |
1 files changed, 56 insertions, 35 deletions
diff --git a/sound/soc/codecs/wm9713.c b/sound/soc/codecs/wm9713.c index abed37acf787..2fca514fde58 100644 --- a/sound/soc/codecs/wm9713.c +++ b/sound/soc/codecs/wm9713.c | |||
@@ -16,6 +16,7 @@ | |||
16 | */ | 16 | */ |
17 | 17 | ||
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/slab.h> | ||
19 | #include <linux/module.h> | 20 | #include <linux/module.h> |
20 | #include <linux/device.h> | 21 | #include <linux/device.h> |
21 | #include <sound/core.h> | 22 | #include <sound/core.h> |
@@ -23,13 +24,12 @@ | |||
23 | #include <sound/ac97_codec.h> | 24 | #include <sound/ac97_codec.h> |
24 | #include <sound/initval.h> | 25 | #include <sound/initval.h> |
25 | #include <sound/pcm_params.h> | 26 | #include <sound/pcm_params.h> |
27 | #include <sound/tlv.h> | ||
26 | #include <sound/soc.h> | 28 | #include <sound/soc.h> |
27 | #include <sound/soc-dapm.h> | 29 | #include <sound/soc-dapm.h> |
28 | 30 | ||
29 | #include "wm9713.h" | 31 | #include "wm9713.h" |
30 | 32 | ||
31 | #define WM9713_VERSION "0.15" | ||
32 | |||
33 | struct wm9713_priv { | 33 | struct wm9713_priv { |
34 | u32 pll_in; /* PLL input frequency */ | 34 | u32 pll_in; /* PLL input frequency */ |
35 | }; | 35 | }; |
@@ -115,15 +115,27 @@ SOC_ENUM_SINGLE(AC97_3D_CONTROL, 12, 3, wm9713_mic_select), /* mic selection 18 | |||
115 | SOC_ENUM_SINGLE(MICB_MUX, 0, 2, wm9713_micb_select), /* mic selection 19 */ | 115 | SOC_ENUM_SINGLE(MICB_MUX, 0, 2, wm9713_micb_select), /* mic selection 19 */ |
116 | }; | 116 | }; |
117 | 117 | ||
118 | static const DECLARE_TLV_DB_SCALE(out_tlv, -4650, 150, 0); | ||
119 | static const DECLARE_TLV_DB_SCALE(main_tlv, -3450, 150, 0); | ||
120 | static const DECLARE_TLV_DB_SCALE(misc_tlv, -1500, 300, 0); | ||
121 | static unsigned int mic_tlv[] = { | ||
122 | TLV_DB_RANGE_HEAD(2), | ||
123 | 0, 2, TLV_DB_SCALE_ITEM(1200, 600, 0), | ||
124 | 3, 3, TLV_DB_SCALE_ITEM(3000, 0, 0), | ||
125 | }; | ||
126 | |||
118 | static const struct snd_kcontrol_new wm9713_snd_ac97_controls[] = { | 127 | static const struct snd_kcontrol_new wm9713_snd_ac97_controls[] = { |
119 | SOC_DOUBLE("Speaker Playback Volume", AC97_MASTER, 8, 0, 31, 1), | 128 | SOC_DOUBLE_TLV("Speaker Playback Volume", AC97_MASTER, 8, 0, 31, 1, out_tlv), |
120 | SOC_DOUBLE("Speaker Playback Switch", AC97_MASTER, 15, 7, 1, 1), | 129 | SOC_DOUBLE("Speaker Playback Switch", AC97_MASTER, 15, 7, 1, 1), |
121 | SOC_DOUBLE("Headphone Playback Volume", AC97_HEADPHONE, 8, 0, 31, 1), | 130 | SOC_DOUBLE_TLV("Headphone Playback Volume", AC97_HEADPHONE, 8, 0, 31, 1, |
131 | out_tlv), | ||
122 | SOC_DOUBLE("Headphone Playback Switch", AC97_HEADPHONE, 15, 7, 1, 1), | 132 | SOC_DOUBLE("Headphone Playback Switch", AC97_HEADPHONE, 15, 7, 1, 1), |
123 | SOC_DOUBLE("Line In Volume", AC97_PC_BEEP, 8, 0, 31, 1), | 133 | SOC_DOUBLE_TLV("Line In Volume", AC97_PC_BEEP, 8, 0, 31, 1, main_tlv), |
124 | SOC_DOUBLE("PCM Playback Volume", AC97_PHONE, 8, 0, 31, 1), | 134 | SOC_DOUBLE_TLV("PCM Playback Volume", AC97_PHONE, 8, 0, 31, 1, main_tlv), |
125 | SOC_SINGLE("Mic 1 Volume", AC97_MIC, 8, 31, 1), | 135 | SOC_SINGLE_TLV("Mic 1 Volume", AC97_MIC, 8, 31, 1, main_tlv), |
126 | SOC_SINGLE("Mic 2 Volume", AC97_MIC, 0, 31, 1), | 136 | SOC_SINGLE_TLV("Mic 2 Volume", AC97_MIC, 0, 31, 1, main_tlv), |
137 | SOC_SINGLE_TLV("Mic 1 Preamp Volume", AC97_3D_CONTROL, 10, 3, 0, mic_tlv), | ||
138 | SOC_SINGLE_TLV("Mic 2 Preamp Volume", AC97_3D_CONTROL, 12, 3, 0, mic_tlv), | ||
127 | 139 | ||
128 | SOC_SINGLE("Mic Boost (+20dB) Switch", AC97_LINE, 5, 1, 0), | 140 | SOC_SINGLE("Mic Boost (+20dB) Switch", AC97_LINE, 5, 1, 0), |
129 | SOC_SINGLE("Mic Headphone Mixer Volume", AC97_LINE, 0, 7, 1), | 141 | SOC_SINGLE("Mic Headphone Mixer Volume", AC97_LINE, 0, 7, 1), |
@@ -133,7 +145,7 @@ SOC_ENUM("Capture Volume Steps", wm9713_enum[5]), | |||
133 | SOC_DOUBLE("Capture Volume", AC97_CD, 8, 0, 31, 0), | 145 | SOC_DOUBLE("Capture Volume", AC97_CD, 8, 0, 31, 0), |
134 | SOC_SINGLE("Capture ZC Switch", AC97_CD, 7, 1, 0), | 146 | SOC_SINGLE("Capture ZC Switch", AC97_CD, 7, 1, 0), |
135 | 147 | ||
136 | SOC_SINGLE("Capture to Headphone Volume", AC97_VIDEO, 11, 7, 1), | 148 | SOC_SINGLE_TLV("Capture to Headphone Volume", AC97_VIDEO, 11, 7, 1, misc_tlv), |
137 | SOC_SINGLE("Capture to Mono Boost (+20dB) Switch", AC97_VIDEO, 8, 1, 0), | 149 | SOC_SINGLE("Capture to Mono Boost (+20dB) Switch", AC97_VIDEO, 8, 1, 0), |
138 | SOC_SINGLE("Capture ADC Boost (+20dB) Switch", AC97_VIDEO, 6, 1, 0), | 150 | SOC_SINGLE("Capture ADC Boost (+20dB) Switch", AC97_VIDEO, 6, 1, 0), |
139 | 151 | ||
@@ -154,28 +166,43 @@ SOC_DOUBLE("Headphone Playback ZC Switch", AC97_HEADPHONE, 14, 6, 1, 0), | |||
154 | 166 | ||
155 | SOC_SINGLE("Out4 Playback Switch", AC97_MASTER_MONO, 15, 1, 1), | 167 | SOC_SINGLE("Out4 Playback Switch", AC97_MASTER_MONO, 15, 1, 1), |
156 | SOC_SINGLE("Out4 Playback ZC Switch", AC97_MASTER_MONO, 14, 1, 0), | 168 | SOC_SINGLE("Out4 Playback ZC Switch", AC97_MASTER_MONO, 14, 1, 0), |
157 | SOC_SINGLE("Out4 Playback Volume", AC97_MASTER_MONO, 8, 63, 1), | 169 | SOC_SINGLE_TLV("Out4 Playback Volume", AC97_MASTER_MONO, 8, 31, 1, out_tlv), |
158 | 170 | ||
159 | SOC_SINGLE("Out3 Playback Switch", AC97_MASTER_MONO, 7, 1, 1), | 171 | SOC_SINGLE("Out3 Playback Switch", AC97_MASTER_MONO, 7, 1, 1), |
160 | SOC_SINGLE("Out3 Playback ZC Switch", AC97_MASTER_MONO, 6, 1, 0), | 172 | SOC_SINGLE("Out3 Playback ZC Switch", AC97_MASTER_MONO, 6, 1, 0), |
161 | SOC_SINGLE("Out3 Playback Volume", AC97_MASTER_MONO, 0, 63, 1), | 173 | SOC_SINGLE_TLV("Out3 Playback Volume", AC97_MASTER_MONO, 0, 31, 1, out_tlv), |
162 | 174 | ||
163 | SOC_SINGLE("Mono Capture Volume", AC97_MASTER_TONE, 8, 31, 1), | 175 | SOC_SINGLE_TLV("Mono Capture Volume", AC97_MASTER_TONE, 8, 31, 1, main_tlv), |
164 | SOC_SINGLE("Mono Playback Switch", AC97_MASTER_TONE, 7, 1, 1), | 176 | SOC_SINGLE("Mono Playback Switch", AC97_MASTER_TONE, 7, 1, 1), |
165 | SOC_SINGLE("Mono Playback ZC Switch", AC97_MASTER_TONE, 6, 1, 0), | 177 | SOC_SINGLE("Mono Playback ZC Switch", AC97_MASTER_TONE, 6, 1, 0), |
166 | SOC_SINGLE("Mono Playback Volume", AC97_MASTER_TONE, 0, 31, 1), | 178 | SOC_SINGLE_TLV("Mono Playback Volume", AC97_MASTER_TONE, 0, 31, 1, out_tlv), |
167 | 179 | ||
168 | SOC_SINGLE("PC Beep Playback Headphone Volume", AC97_AUX, 12, 7, 1), | 180 | SOC_SINGLE_TLV("Headphone Mixer Beep Playback Volume", AC97_AUX, 12, 7, 1, |
169 | SOC_SINGLE("PC Beep Playback Speaker Volume", AC97_AUX, 8, 7, 1), | 181 | misc_tlv), |
170 | SOC_SINGLE("PC Beep Playback Mono Volume", AC97_AUX, 4, 7, 1), | 182 | SOC_SINGLE_TLV("Speaker Mixer Beep Playback Volume", AC97_AUX, 8, 7, 1, |
183 | misc_tlv), | ||
184 | SOC_SINGLE_TLV("Mono Mixer Beep Playback Volume", AC97_AUX, 4, 7, 1, misc_tlv), | ||
171 | 185 | ||
172 | SOC_SINGLE("Voice Playback Headphone Volume", AC97_PCM, 12, 7, 1), | 186 | SOC_SINGLE_TLV("Voice Playback Headphone Volume", AC97_PCM, 12, 7, 1, |
187 | misc_tlv), | ||
173 | SOC_SINGLE("Voice Playback Master Volume", AC97_PCM, 8, 7, 1), | 188 | SOC_SINGLE("Voice Playback Master Volume", AC97_PCM, 8, 7, 1), |
174 | SOC_SINGLE("Voice Playback Mono Volume", AC97_PCM, 4, 7, 1), | 189 | SOC_SINGLE("Voice Playback Mono Volume", AC97_PCM, 4, 7, 1), |
175 | 190 | ||
191 | SOC_SINGLE_TLV("Headphone Mixer Aux Playback Volume", AC97_REC_SEL, 12, 7, 1, | ||
192 | misc_tlv), | ||
193 | |||
194 | SOC_SINGLE_TLV("Speaker Mixer Voice Playback Volume", AC97_PCM, 8, 7, 1, | ||
195 | misc_tlv), | ||
196 | SOC_SINGLE_TLV("Speaker Mixer Aux Playback Volume", AC97_REC_SEL, 8, 7, 1, | ||
197 | misc_tlv), | ||
198 | |||
199 | SOC_SINGLE_TLV("Mono Mixer Voice Playback Volume", AC97_PCM, 4, 7, 1, | ||
200 | misc_tlv), | ||
201 | SOC_SINGLE_TLV("Mono Mixer Aux Playback Volume", AC97_REC_SEL, 4, 7, 1, | ||
202 | misc_tlv), | ||
203 | |||
176 | SOC_SINGLE("Aux Playback Headphone Volume", AC97_REC_SEL, 12, 7, 1), | 204 | SOC_SINGLE("Aux Playback Headphone Volume", AC97_REC_SEL, 12, 7, 1), |
177 | SOC_SINGLE("Aux Playback Master Volume", AC97_REC_SEL, 8, 7, 1), | 205 | SOC_SINGLE("Aux Playback Master Volume", AC97_REC_SEL, 8, 7, 1), |
178 | SOC_SINGLE("Aux Playback Mono Volume", AC97_REC_SEL, 4, 7, 1), | ||
179 | 206 | ||
180 | SOC_ENUM("Bass Control", wm9713_enum[16]), | 207 | SOC_ENUM("Bass Control", wm9713_enum[16]), |
181 | SOC_SINGLE("Bass Cut-off Switch", AC97_GENERAL_PURPOSE, 12, 1, 1), | 208 | SOC_SINGLE("Bass Cut-off Switch", AC97_GENERAL_PURPOSE, 12, 1, 1), |
@@ -266,7 +293,7 @@ static int mixer_event(struct snd_soc_dapm_widget *w, | |||
266 | 293 | ||
267 | /* Left Headphone Mixers */ | 294 | /* Left Headphone Mixers */ |
268 | static const struct snd_kcontrol_new wm9713_hpl_mixer_controls[] = { | 295 | static const struct snd_kcontrol_new wm9713_hpl_mixer_controls[] = { |
269 | SOC_DAPM_SINGLE("PC Beep Playback Switch", HPL_MIXER, 5, 1, 0), | 296 | SOC_DAPM_SINGLE("Beep Playback Switch", HPL_MIXER, 5, 1, 0), |
270 | SOC_DAPM_SINGLE("Voice Playback Switch", HPL_MIXER, 4, 1, 0), | 297 | SOC_DAPM_SINGLE("Voice Playback Switch", HPL_MIXER, 4, 1, 0), |
271 | SOC_DAPM_SINGLE("Aux Playback Switch", HPL_MIXER, 3, 1, 0), | 298 | SOC_DAPM_SINGLE("Aux Playback Switch", HPL_MIXER, 3, 1, 0), |
272 | SOC_DAPM_SINGLE("PCM Playback Switch", HPL_MIXER, 2, 1, 0), | 299 | SOC_DAPM_SINGLE("PCM Playback Switch", HPL_MIXER, 2, 1, 0), |
@@ -276,7 +303,7 @@ SOC_DAPM_SINGLE("Bypass Playback Switch", HPL_MIXER, 0, 1, 0), | |||
276 | 303 | ||
277 | /* Right Headphone Mixers */ | 304 | /* Right Headphone Mixers */ |
278 | static const struct snd_kcontrol_new wm9713_hpr_mixer_controls[] = { | 305 | static const struct snd_kcontrol_new wm9713_hpr_mixer_controls[] = { |
279 | SOC_DAPM_SINGLE("PC Beep Playback Switch", HPR_MIXER, 5, 1, 0), | 306 | SOC_DAPM_SINGLE("Beep Playback Switch", HPR_MIXER, 5, 1, 0), |
280 | SOC_DAPM_SINGLE("Voice Playback Switch", HPR_MIXER, 4, 1, 0), | 307 | SOC_DAPM_SINGLE("Voice Playback Switch", HPR_MIXER, 4, 1, 0), |
281 | SOC_DAPM_SINGLE("Aux Playback Switch", HPR_MIXER, 3, 1, 0), | 308 | SOC_DAPM_SINGLE("Aux Playback Switch", HPR_MIXER, 3, 1, 0), |
282 | SOC_DAPM_SINGLE("PCM Playback Switch", HPR_MIXER, 2, 1, 0), | 309 | SOC_DAPM_SINGLE("PCM Playback Switch", HPR_MIXER, 2, 1, 0), |
@@ -294,7 +321,7 @@ SOC_DAPM_ENUM("Route", wm9713_enum[0]); | |||
294 | 321 | ||
295 | /* Speaker Mixer */ | 322 | /* Speaker Mixer */ |
296 | static const struct snd_kcontrol_new wm9713_speaker_mixer_controls[] = { | 323 | static const struct snd_kcontrol_new wm9713_speaker_mixer_controls[] = { |
297 | SOC_DAPM_SINGLE("PC Beep Playback Switch", AC97_AUX, 11, 1, 1), | 324 | SOC_DAPM_SINGLE("Beep Playback Switch", AC97_AUX, 11, 1, 1), |
298 | SOC_DAPM_SINGLE("Voice Playback Switch", AC97_PCM, 11, 1, 1), | 325 | SOC_DAPM_SINGLE("Voice Playback Switch", AC97_PCM, 11, 1, 1), |
299 | SOC_DAPM_SINGLE("Aux Playback Switch", AC97_REC_SEL, 11, 1, 1), | 326 | SOC_DAPM_SINGLE("Aux Playback Switch", AC97_REC_SEL, 11, 1, 1), |
300 | SOC_DAPM_SINGLE("PCM Playback Switch", AC97_PHONE, 14, 1, 1), | 327 | SOC_DAPM_SINGLE("PCM Playback Switch", AC97_PHONE, 14, 1, 1), |
@@ -304,7 +331,7 @@ SOC_DAPM_SINGLE("Bypass Playback Switch", AC97_PC_BEEP, 14, 1, 1), | |||
304 | 331 | ||
305 | /* Mono Mixer */ | 332 | /* Mono Mixer */ |
306 | static const struct snd_kcontrol_new wm9713_mono_mixer_controls[] = { | 333 | static const struct snd_kcontrol_new wm9713_mono_mixer_controls[] = { |
307 | SOC_DAPM_SINGLE("PC Beep Playback Switch", AC97_AUX, 7, 1, 1), | 334 | SOC_DAPM_SINGLE("Beep Playback Switch", AC97_AUX, 7, 1, 1), |
308 | SOC_DAPM_SINGLE("Voice Playback Switch", AC97_PCM, 7, 1, 1), | 335 | SOC_DAPM_SINGLE("Voice Playback Switch", AC97_PCM, 7, 1, 1), |
309 | SOC_DAPM_SINGLE("Aux Playback Switch", AC97_REC_SEL, 7, 1, 1), | 336 | SOC_DAPM_SINGLE("Aux Playback Switch", AC97_REC_SEL, 7, 1, 1), |
310 | SOC_DAPM_SINGLE("PCM Playback Switch", AC97_PHONE, 13, 1, 1), | 337 | SOC_DAPM_SINGLE("PCM Playback Switch", AC97_PHONE, 13, 1, 1), |
@@ -463,7 +490,7 @@ SND_SOC_DAPM_VMID("VMID"), | |||
463 | 490 | ||
464 | static const struct snd_soc_dapm_route audio_map[] = { | 491 | static const struct snd_soc_dapm_route audio_map[] = { |
465 | /* left HP mixer */ | 492 | /* left HP mixer */ |
466 | {"Left HP Mixer", "PC Beep Playback Switch", "PCBEEP"}, | 493 | {"Left HP Mixer", "Beep Playback Switch", "PCBEEP"}, |
467 | {"Left HP Mixer", "Voice Playback Switch", "Voice DAC"}, | 494 | {"Left HP Mixer", "Voice Playback Switch", "Voice DAC"}, |
468 | {"Left HP Mixer", "Aux Playback Switch", "Aux DAC"}, | 495 | {"Left HP Mixer", "Aux Playback Switch", "Aux DAC"}, |
469 | {"Left HP Mixer", "Bypass Playback Switch", "Left Line In"}, | 496 | {"Left HP Mixer", "Bypass Playback Switch", "Left Line In"}, |
@@ -472,7 +499,7 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
472 | {"Left HP Mixer", NULL, "Capture Headphone Mux"}, | 499 | {"Left HP Mixer", NULL, "Capture Headphone Mux"}, |
473 | 500 | ||
474 | /* right HP mixer */ | 501 | /* right HP mixer */ |
475 | {"Right HP Mixer", "PC Beep Playback Switch", "PCBEEP"}, | 502 | {"Right HP Mixer", "Beep Playback Switch", "PCBEEP"}, |
476 | {"Right HP Mixer", "Voice Playback Switch", "Voice DAC"}, | 503 | {"Right HP Mixer", "Voice Playback Switch", "Voice DAC"}, |
477 | {"Right HP Mixer", "Aux Playback Switch", "Aux DAC"}, | 504 | {"Right HP Mixer", "Aux Playback Switch", "Aux DAC"}, |
478 | {"Right HP Mixer", "Bypass Playback Switch", "Right Line In"}, | 505 | {"Right HP Mixer", "Bypass Playback Switch", "Right Line In"}, |
@@ -491,7 +518,7 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
491 | {"Capture Mixer", NULL, "Right Capture Source"}, | 518 | {"Capture Mixer", NULL, "Right Capture Source"}, |
492 | 519 | ||
493 | /* speaker mixer */ | 520 | /* speaker mixer */ |
494 | {"Speaker Mixer", "PC Beep Playback Switch", "PCBEEP"}, | 521 | {"Speaker Mixer", "Beep Playback Switch", "PCBEEP"}, |
495 | {"Speaker Mixer", "Voice Playback Switch", "Voice DAC"}, | 522 | {"Speaker Mixer", "Voice Playback Switch", "Voice DAC"}, |
496 | {"Speaker Mixer", "Aux Playback Switch", "Aux DAC"}, | 523 | {"Speaker Mixer", "Aux Playback Switch", "Aux DAC"}, |
497 | {"Speaker Mixer", "Bypass Playback Switch", "Line Mixer"}, | 524 | {"Speaker Mixer", "Bypass Playback Switch", "Line Mixer"}, |
@@ -499,7 +526,7 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
499 | {"Speaker Mixer", "MonoIn Playback Switch", "Mono In"}, | 526 | {"Speaker Mixer", "MonoIn Playback Switch", "Mono In"}, |
500 | 527 | ||
501 | /* mono mixer */ | 528 | /* mono mixer */ |
502 | {"Mono Mixer", "PC Beep Playback Switch", "PCBEEP"}, | 529 | {"Mono Mixer", "Beep Playback Switch", "PCBEEP"}, |
503 | {"Mono Mixer", "Voice Playback Switch", "Voice DAC"}, | 530 | {"Mono Mixer", "Voice Playback Switch", "Voice DAC"}, |
504 | {"Mono Mixer", "Aux Playback Switch", "Aux DAC"}, | 531 | {"Mono Mixer", "Aux Playback Switch", "Aux DAC"}, |
505 | {"Mono Mixer", "Bypass Playback Switch", "Line Mixer"}, | 532 | {"Mono Mixer", "Bypass Playback Switch", "Line Mixer"}, |
@@ -625,7 +652,6 @@ static int wm9713_add_widgets(struct snd_soc_codec *codec) | |||
625 | 652 | ||
626 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 653 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); |
627 | 654 | ||
628 | snd_soc_dapm_new_widgets(codec); | ||
629 | return 0; | 655 | return 0; |
630 | } | 656 | } |
631 | 657 | ||
@@ -800,8 +826,8 @@ static int wm9713_set_pll(struct snd_soc_codec *codec, | |||
800 | return 0; | 826 | return 0; |
801 | } | 827 | } |
802 | 828 | ||
803 | static int wm9713_set_dai_pll(struct snd_soc_dai *codec_dai, | 829 | static int wm9713_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id, |
804 | int pll_id, unsigned int freq_in, unsigned int freq_out) | 830 | int source, unsigned int freq_in, unsigned int freq_out) |
805 | { | 831 | { |
806 | struct snd_soc_codec *codec = codec_dai->codec; | 832 | struct snd_soc_codec *codec = codec_dai->codec; |
807 | return wm9713_set_pll(codec, pll_id, freq_in, freq_out); | 833 | return wm9713_set_pll(codec, pll_id, freq_in, freq_out); |
@@ -1187,8 +1213,6 @@ static int wm9713_soc_probe(struct platform_device *pdev) | |||
1187 | struct snd_soc_codec *codec; | 1213 | struct snd_soc_codec *codec; |
1188 | int ret = 0, reg; | 1214 | int ret = 0, reg; |
1189 | 1215 | ||
1190 | printk(KERN_INFO "WM9713/WM9714 SoC Audio Codec %s\n", WM9713_VERSION); | ||
1191 | |||
1192 | socdev->card->codec = kzalloc(sizeof(struct snd_soc_codec), | 1216 | socdev->card->codec = kzalloc(sizeof(struct snd_soc_codec), |
1193 | GFP_KERNEL); | 1217 | GFP_KERNEL); |
1194 | if (socdev->card->codec == NULL) | 1218 | if (socdev->card->codec == NULL) |
@@ -1247,14 +1271,11 @@ static int wm9713_soc_probe(struct platform_device *pdev) | |||
1247 | snd_soc_add_controls(codec, wm9713_snd_ac97_controls, | 1271 | snd_soc_add_controls(codec, wm9713_snd_ac97_controls, |
1248 | ARRAY_SIZE(wm9713_snd_ac97_controls)); | 1272 | ARRAY_SIZE(wm9713_snd_ac97_controls)); |
1249 | wm9713_add_widgets(codec); | 1273 | wm9713_add_widgets(codec); |
1250 | ret = snd_soc_init_card(socdev); | 1274 | |
1251 | if (ret < 0) | ||
1252 | goto reset_err; | ||
1253 | return 0; | 1275 | return 0; |
1254 | 1276 | ||
1255 | reset_err: | 1277 | reset_err: |
1256 | snd_soc_free_pcms(socdev); | 1278 | snd_soc_free_pcms(socdev); |
1257 | |||
1258 | pcm_err: | 1279 | pcm_err: |
1259 | snd_soc_free_ac97_codec(codec); | 1280 | snd_soc_free_ac97_codec(codec); |
1260 | 1281 | ||