xref: /openbmc/linux/sound/pci/hda/patch_ca0132.c (revision 840ef8b7cc584a23c4f9d05352f4dbaf8e56e5ab)
1 /*
2  * HD audio interface patch for Creative CA0132 chip
3  *
4  * Copyright (c) 2011, Creative Technology Ltd.
5  *
6  * Based on patch_ca0110.c
7  * Copyright (c) 2008 Takashi Iwai <tiwai@suse.de>
8  *
9  *  This driver is free software; you can redistribute it and/or modify
10  *  it under the terms of the GNU General Public License as published by
11  *  the Free Software Foundation; either version 2 of the License, or
12  *  (at your option) any later version.
13  *
14  *  This driver is distributed in the hope that it will be useful,
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  *  GNU General Public License for more details.
18  *
19  *  You should have received a copy of the GNU General Public License
20  *  along with this program; if not, write to the Free Software
21  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
22  */
23 
24 #include <linux/init.h>
25 #include <linux/delay.h>
26 #include <linux/slab.h>
27 #include <linux/pci.h>
28 #include <linux/mutex.h>
29 #include <linux/module.h>
30 #include <linux/firmware.h>
31 #include <sound/core.h>
32 #include "hda_codec.h"
33 #include "hda_local.h"
34 #include "hda_auto_parser.h"
35 #include "hda_jack.h"
36 
37 #include "ca0132_regs.h"
38 
39 /* Enable this to see controls for tuning purpose. */
40 /*#define ENABLE_TUNING_CONTROLS*/
41 
42 #define FLOAT_ZERO	0x00000000
43 #define FLOAT_ONE	0x3f800000
44 #define FLOAT_TWO	0x40000000
45 #define FLOAT_MINUS_5	0xc0a00000
46 
47 #define UNSOL_TAG_HP	0x10
48 #define UNSOL_TAG_AMIC1	0x12
49 #define UNSOL_TAG_DSP	0x16
50 
51 #define DSP_DMA_WRITE_BUFLEN_INIT (1UL<<18)
52 #define DSP_DMA_WRITE_BUFLEN_OVLY (1UL<<15)
53 
54 #define DMA_TRANSFER_FRAME_SIZE_NWORDS		8
55 #define DMA_TRANSFER_MAX_FRAME_SIZE_NWORDS	32
56 #define DMA_OVERLAY_FRAME_SIZE_NWORDS		2
57 
58 #define MASTERCONTROL				0x80
59 #define MASTERCONTROL_ALLOC_DMA_CHAN		10
60 #define MASTERCONTROL_QUERY_SPEAKER_EQ_ADDRESS	60
61 
62 #define WIDGET_CHIP_CTRL      0x15
63 #define WIDGET_DSP_CTRL       0x16
64 
65 #define MEM_CONNID_MICIN1     3
66 #define MEM_CONNID_MICIN2     5
67 #define MEM_CONNID_MICOUT1    12
68 #define MEM_CONNID_MICOUT2    14
69 #define MEM_CONNID_WUH        10
70 #define MEM_CONNID_DSP        16
71 #define MEM_CONNID_DMIC       100
72 
73 #define SCP_SET    0
74 #define SCP_GET    1
75 
76 #define EFX_FILE   "ctefx.bin"
77 
78 #ifdef CONFIG_SND_HDA_CODEC_CA0132_DSP
79 MODULE_FIRMWARE(EFX_FILE);
80 #endif
81 
82 static char *dirstr[2] = { "Playback", "Capture" };
83 
84 enum {
85 	SPEAKER_OUT,
86 	HEADPHONE_OUT
87 };
88 
89 enum {
90 	DIGITAL_MIC,
91 	LINE_MIC_IN
92 };
93 
94 enum {
95 #define VNODE_START_NID    0x80
96 	VNID_SPK = VNODE_START_NID,			/* Speaker vnid */
97 	VNID_MIC,
98 	VNID_HP_SEL,
99 	VNID_AMIC1_SEL,
100 	VNID_HP_ASEL,
101 	VNID_AMIC1_ASEL,
102 	VNODE_END_NID,
103 #define VNODES_COUNT  (VNODE_END_NID - VNODE_START_NID)
104 
105 #define EFFECT_START_NID    0x90
106 #define OUT_EFFECT_START_NID    EFFECT_START_NID
107 	SURROUND = OUT_EFFECT_START_NID,
108 	CRYSTALIZER,
109 	DIALOG_PLUS,
110 	SMART_VOLUME,
111 	X_BASS,
112 	EQUALIZER,
113 	OUT_EFFECT_END_NID,
114 #define OUT_EFFECTS_COUNT  (OUT_EFFECT_END_NID - OUT_EFFECT_START_NID)
115 
116 #define IN_EFFECT_START_NID  OUT_EFFECT_END_NID
117 	ECHO_CANCELLATION = IN_EFFECT_START_NID,
118 	VOICE_FOCUS,
119 	MIC_SVM,
120 	NOISE_REDUCTION,
121 	IN_EFFECT_END_NID,
122 #define IN_EFFECTS_COUNT  (IN_EFFECT_END_NID - IN_EFFECT_START_NID)
123 
124 	VOICEFX = IN_EFFECT_END_NID,
125 	PLAY_ENHANCEMENT,
126 	CRYSTAL_VOICE,
127 	EFFECT_END_NID
128 #define EFFECTS_COUNT  (EFFECT_END_NID - EFFECT_START_NID)
129 };
130 
131 /* Effects values size*/
132 #define EFFECT_VALS_MAX_COUNT 12
133 
134 struct ct_effect {
135 	char name[44];
136 	hda_nid_t nid;
137 	int mid; /*effect module ID*/
138 	int reqs[EFFECT_VALS_MAX_COUNT]; /*effect module request*/
139 	int direct; /* 0:output; 1:input*/
140 	int params; /* number of default non-on/off params */
141 	/*effect default values, 1st is on/off. */
142 	unsigned int def_vals[EFFECT_VALS_MAX_COUNT];
143 };
144 
145 #define EFX_DIR_OUT 0
146 #define EFX_DIR_IN  1
147 
148 static struct ct_effect ca0132_effects[EFFECTS_COUNT] = {
149 	{ .name = "Surround",
150 	  .nid = SURROUND,
151 	  .mid = 0x96,
152 	  .reqs = {0, 1},
153 	  .direct = EFX_DIR_OUT,
154 	  .params = 1,
155 	  .def_vals = {0x3F800000, 0x3F2B851F}
156 	},
157 	{ .name = "Crystalizer",
158 	  .nid = CRYSTALIZER,
159 	  .mid = 0x96,
160 	  .reqs = {7, 8},
161 	  .direct = EFX_DIR_OUT,
162 	  .params = 1,
163 	  .def_vals = {0x3F800000, 0x3F266666}
164 	},
165 	{ .name = "Dialog Plus",
166 	  .nid = DIALOG_PLUS,
167 	  .mid = 0x96,
168 	  .reqs = {2, 3},
169 	  .direct = EFX_DIR_OUT,
170 	  .params = 1,
171 	  .def_vals = {0x00000000, 0x3F000000}
172 	},
173 	{ .name = "Smart Volume",
174 	  .nid = SMART_VOLUME,
175 	  .mid = 0x96,
176 	  .reqs = {4, 5, 6},
177 	  .direct = EFX_DIR_OUT,
178 	  .params = 2,
179 	  .def_vals = {0x3F800000, 0x3F3D70A4, 0x00000000}
180 	},
181 	{ .name = "X-Bass",
182 	  .nid = X_BASS,
183 	  .mid = 0x96,
184 	  .reqs = {24, 23, 25},
185 	  .direct = EFX_DIR_OUT,
186 	  .params = 2,
187 	  .def_vals = {0x3F800000, 0x42A00000, 0x3F000000}
188 	},
189 	{ .name = "Equalizer",
190 	  .nid = EQUALIZER,
191 	  .mid = 0x96,
192 	  .reqs = {9, 10, 11, 12, 13, 14,
193 			15, 16, 17, 18, 19, 20},
194 	  .direct = EFX_DIR_OUT,
195 	  .params = 11,
196 	  .def_vals = {0x00000000, 0x00000000, 0x00000000, 0x00000000,
197 		       0x00000000, 0x00000000, 0x00000000, 0x00000000,
198 		       0x00000000, 0x00000000, 0x00000000, 0x00000000}
199 	},
200 	{ .name = "Echo Cancellation",
201 	  .nid = ECHO_CANCELLATION,
202 	  .mid = 0x95,
203 	  .reqs = {0, 1, 2, 3},
204 	  .direct = EFX_DIR_IN,
205 	  .params = 3,
206 	  .def_vals = {0x00000000, 0x3F3A9692, 0x00000000, 0x00000000}
207 	},
208 	{ .name = "Voice Focus",
209 	  .nid = VOICE_FOCUS,
210 	  .mid = 0x95,
211 	  .reqs = {6, 7, 8, 9},
212 	  .direct = EFX_DIR_IN,
213 	  .params = 3,
214 	  .def_vals = {0x3F800000, 0x3D7DF3B6, 0x41F00000, 0x41F00000}
215 	},
216 	{ .name = "Mic SVM",
217 	  .nid = MIC_SVM,
218 	  .mid = 0x95,
219 	  .reqs = {44, 45},
220 	  .direct = EFX_DIR_IN,
221 	  .params = 1,
222 	  .def_vals = {0x00000000, 0x3F3D70A4}
223 	},
224 	{ .name = "Noise Reduction",
225 	  .nid = NOISE_REDUCTION,
226 	  .mid = 0x95,
227 	  .reqs = {4, 5},
228 	  .direct = EFX_DIR_IN,
229 	  .params = 1,
230 	  .def_vals = {0x3F800000, 0x3F000000}
231 	},
232 	{ .name = "VoiceFX",
233 	  .nid = VOICEFX,
234 	  .mid = 0x95,
235 	  .reqs = {10, 11, 12, 13, 14, 15, 16, 17, 18},
236 	  .direct = EFX_DIR_IN,
237 	  .params = 8,
238 	  .def_vals = {0x00000000, 0x43C80000, 0x44AF0000, 0x44FA0000,
239 		       0x3F800000, 0x3F800000, 0x3F800000, 0x00000000,
240 		       0x00000000}
241 	}
242 };
243 
244 /* Tuning controls */
245 #ifdef ENABLE_TUNING_CONTROLS
246 
247 enum {
248 #define TUNING_CTL_START_NID  0xC0
249 	WEDGE_ANGLE = TUNING_CTL_START_NID,
250 	SVM_LEVEL,
251 	EQUALIZER_BAND_0,
252 	EQUALIZER_BAND_1,
253 	EQUALIZER_BAND_2,
254 	EQUALIZER_BAND_3,
255 	EQUALIZER_BAND_4,
256 	EQUALIZER_BAND_5,
257 	EQUALIZER_BAND_6,
258 	EQUALIZER_BAND_7,
259 	EQUALIZER_BAND_8,
260 	EQUALIZER_BAND_9,
261 	TUNING_CTL_END_NID
262 #define TUNING_CTLS_COUNT  (TUNING_CTL_END_NID - TUNING_CTL_START_NID)
263 };
264 
265 struct ct_tuning_ctl {
266 	char name[44];
267 	hda_nid_t parent_nid;
268 	hda_nid_t nid;
269 	int mid; /*effect module ID*/
270 	int req; /*effect module request*/
271 	int direct; /* 0:output; 1:input*/
272 	unsigned int def_val;/*effect default values*/
273 };
274 
275 static struct ct_tuning_ctl ca0132_tuning_ctls[] = {
276 	{ .name = "Wedge Angle",
277 	  .parent_nid = VOICE_FOCUS,
278 	  .nid = WEDGE_ANGLE,
279 	  .mid = 0x95,
280 	  .req = 8,
281 	  .direct = EFX_DIR_IN,
282 	  .def_val = 0x41F00000
283 	},
284 	{ .name = "SVM Level",
285 	  .parent_nid = MIC_SVM,
286 	  .nid = SVM_LEVEL,
287 	  .mid = 0x95,
288 	  .req = 45,
289 	  .direct = EFX_DIR_IN,
290 	  .def_val = 0x3F3D70A4
291 	},
292 	{ .name = "EQ Band0",
293 	  .parent_nid = EQUALIZER,
294 	  .nid = EQUALIZER_BAND_0,
295 	  .mid = 0x96,
296 	  .req = 11,
297 	  .direct = EFX_DIR_OUT,
298 	  .def_val = 0x00000000
299 	},
300 	{ .name = "EQ Band1",
301 	  .parent_nid = EQUALIZER,
302 	  .nid = EQUALIZER_BAND_1,
303 	  .mid = 0x96,
304 	  .req = 12,
305 	  .direct = EFX_DIR_OUT,
306 	  .def_val = 0x00000000
307 	},
308 	{ .name = "EQ Band2",
309 	  .parent_nid = EQUALIZER,
310 	  .nid = EQUALIZER_BAND_2,
311 	  .mid = 0x96,
312 	  .req = 13,
313 	  .direct = EFX_DIR_OUT,
314 	  .def_val = 0x00000000
315 	},
316 	{ .name = "EQ Band3",
317 	  .parent_nid = EQUALIZER,
318 	  .nid = EQUALIZER_BAND_3,
319 	  .mid = 0x96,
320 	  .req = 14,
321 	  .direct = EFX_DIR_OUT,
322 	  .def_val = 0x00000000
323 	},
324 	{ .name = "EQ Band4",
325 	  .parent_nid = EQUALIZER,
326 	  .nid = EQUALIZER_BAND_4,
327 	  .mid = 0x96,
328 	  .req = 15,
329 	  .direct = EFX_DIR_OUT,
330 	  .def_val = 0x00000000
331 	},
332 	{ .name = "EQ Band5",
333 	  .parent_nid = EQUALIZER,
334 	  .nid = EQUALIZER_BAND_5,
335 	  .mid = 0x96,
336 	  .req = 16,
337 	  .direct = EFX_DIR_OUT,
338 	  .def_val = 0x00000000
339 	},
340 	{ .name = "EQ Band6",
341 	  .parent_nid = EQUALIZER,
342 	  .nid = EQUALIZER_BAND_6,
343 	  .mid = 0x96,
344 	  .req = 17,
345 	  .direct = EFX_DIR_OUT,
346 	  .def_val = 0x00000000
347 	},
348 	{ .name = "EQ Band7",
349 	  .parent_nid = EQUALIZER,
350 	  .nid = EQUALIZER_BAND_7,
351 	  .mid = 0x96,
352 	  .req = 18,
353 	  .direct = EFX_DIR_OUT,
354 	  .def_val = 0x00000000
355 	},
356 	{ .name = "EQ Band8",
357 	  .parent_nid = EQUALIZER,
358 	  .nid = EQUALIZER_BAND_8,
359 	  .mid = 0x96,
360 	  .req = 19,
361 	  .direct = EFX_DIR_OUT,
362 	  .def_val = 0x00000000
363 	},
364 	{ .name = "EQ Band9",
365 	  .parent_nid = EQUALIZER,
366 	  .nid = EQUALIZER_BAND_9,
367 	  .mid = 0x96,
368 	  .req = 20,
369 	  .direct = EFX_DIR_OUT,
370 	  .def_val = 0x00000000
371 	}
372 };
373 #endif
374 
375 /* Voice FX Presets */
376 #define VOICEFX_MAX_PARAM_COUNT 9
377 
378 struct ct_voicefx {
379 	char *name;
380 	hda_nid_t nid;
381 	int mid;
382 	int reqs[VOICEFX_MAX_PARAM_COUNT]; /*effect module request*/
383 };
384 
385 struct ct_voicefx_preset {
386 	char *name; /*preset name*/
387 	unsigned int vals[VOICEFX_MAX_PARAM_COUNT];
388 };
389 
390 static struct ct_voicefx ca0132_voicefx = {
391 	.name = "VoiceFX Capture Switch",
392 	.nid = VOICEFX,
393 	.mid = 0x95,
394 	.reqs = {10, 11, 12, 13, 14, 15, 16, 17, 18}
395 };
396 
397 static struct ct_voicefx_preset ca0132_voicefx_presets[] = {
398 	{ .name = "Neutral",
399 	  .vals = { 0x00000000, 0x43C80000, 0x44AF0000,
400 		    0x44FA0000, 0x3F800000, 0x3F800000,
401 		    0x3F800000, 0x00000000, 0x00000000 }
402 	},
403 	{ .name = "Female2Male",
404 	  .vals = { 0x3F800000, 0x43C80000, 0x44AF0000,
405 		    0x44FA0000, 0x3F19999A, 0x3F866666,
406 		    0x3F800000, 0x00000000, 0x00000000 }
407 	},
408 	{ .name = "Male2Female",
409 	  .vals = { 0x3F800000, 0x43C80000, 0x44AF0000,
410 		    0x450AC000, 0x4017AE14, 0x3F6B851F,
411 		    0x3F800000, 0x00000000, 0x00000000 }
412 	},
413 	{ .name = "ScrappyKid",
414 	  .vals = { 0x3F800000, 0x43C80000, 0x44AF0000,
415 		    0x44FA0000, 0x40400000, 0x3F28F5C3,
416 		    0x3F800000, 0x00000000, 0x00000000 }
417 	},
418 	{ .name = "Elderly",
419 	  .vals = { 0x3F800000, 0x44324000, 0x44BB8000,
420 		    0x44E10000, 0x3FB33333, 0x3FB9999A,
421 		    0x3F800000, 0x3E3A2E43, 0x00000000 }
422 	},
423 	{ .name = "Orc",
424 	  .vals = { 0x3F800000, 0x43EA0000, 0x44A52000,
425 		    0x45098000, 0x3F266666, 0x3FC00000,
426 		    0x3F800000, 0x00000000, 0x00000000 }
427 	},
428 	{ .name = "Elf",
429 	  .vals = { 0x3F800000, 0x43C70000, 0x44AE6000,
430 		    0x45193000, 0x3F8E147B, 0x3F75C28F,
431 		    0x3F800000, 0x00000000, 0x00000000 }
432 	},
433 	{ .name = "Dwarf",
434 	  .vals = { 0x3F800000, 0x43930000, 0x44BEE000,
435 		    0x45007000, 0x3F451EB8, 0x3F7851EC,
436 		    0x3F800000, 0x00000000, 0x00000000 }
437 	},
438 	{ .name = "AlienBrute",
439 	  .vals = { 0x3F800000, 0x43BFC5AC, 0x44B28FDF,
440 		    0x451F6000, 0x3F266666, 0x3FA7D945,
441 		    0x3F800000, 0x3CF5C28F, 0x00000000 }
442 	},
443 	{ .name = "Robot",
444 	  .vals = { 0x3F800000, 0x43C80000, 0x44AF0000,
445 		    0x44FA0000, 0x3FB2718B, 0x3F800000,
446 		    0xBC07010E, 0x00000000, 0x00000000 }
447 	},
448 	{ .name = "Marine",
449 	  .vals = { 0x3F800000, 0x43C20000, 0x44906000,
450 		    0x44E70000, 0x3F4CCCCD, 0x3F8A3D71,
451 		    0x3F0A3D71, 0x00000000, 0x00000000 }
452 	},
453 	{ .name = "Emo",
454 	  .vals = { 0x3F800000, 0x43C80000, 0x44AF0000,
455 		    0x44FA0000, 0x3F800000, 0x3F800000,
456 		    0x3E4CCCCD, 0x00000000, 0x00000000 }
457 	},
458 	{ .name = "DeepVoice",
459 	  .vals = { 0x3F800000, 0x43A9C5AC, 0x44AA4FDF,
460 		    0x44FFC000, 0x3EDBB56F, 0x3F99C4CA,
461 		    0x3F800000, 0x00000000, 0x00000000 }
462 	},
463 	{ .name = "Munchkin",
464 	  .vals = { 0x3F800000, 0x43C80000, 0x44AF0000,
465 		    0x44FA0000, 0x3F800000, 0x3F1A043C,
466 		    0x3F800000, 0x00000000, 0x00000000 }
467 	}
468 };
469 
470 enum hda_cmd_vendor_io {
471 	/* for DspIO node */
472 	VENDOR_DSPIO_SCP_WRITE_DATA_LOW      = 0x000,
473 	VENDOR_DSPIO_SCP_WRITE_DATA_HIGH     = 0x100,
474 
475 	VENDOR_DSPIO_STATUS                  = 0xF01,
476 	VENDOR_DSPIO_SCP_POST_READ_DATA      = 0x702,
477 	VENDOR_DSPIO_SCP_READ_DATA           = 0xF02,
478 	VENDOR_DSPIO_DSP_INIT                = 0x703,
479 	VENDOR_DSPIO_SCP_POST_COUNT_QUERY    = 0x704,
480 	VENDOR_DSPIO_SCP_READ_COUNT          = 0xF04,
481 
482 	/* for ChipIO node */
483 	VENDOR_CHIPIO_ADDRESS_LOW            = 0x000,
484 	VENDOR_CHIPIO_ADDRESS_HIGH           = 0x100,
485 	VENDOR_CHIPIO_STREAM_FORMAT          = 0x200,
486 	VENDOR_CHIPIO_DATA_LOW               = 0x300,
487 	VENDOR_CHIPIO_DATA_HIGH              = 0x400,
488 
489 	VENDOR_CHIPIO_GET_PARAMETER          = 0xF00,
490 	VENDOR_CHIPIO_STATUS                 = 0xF01,
491 	VENDOR_CHIPIO_HIC_POST_READ          = 0x702,
492 	VENDOR_CHIPIO_HIC_READ_DATA          = 0xF03,
493 
494 	VENDOR_CHIPIO_8051_DATA_WRITE        = 0x707,
495 	VENDOR_CHIPIO_8051_DATA_READ         = 0xF07,
496 
497 	VENDOR_CHIPIO_CT_EXTENSIONS_ENABLE   = 0x70A,
498 	VENDOR_CHIPIO_CT_EXTENSIONS_GET      = 0xF0A,
499 
500 	VENDOR_CHIPIO_PLL_PMU_WRITE          = 0x70C,
501 	VENDOR_CHIPIO_PLL_PMU_READ           = 0xF0C,
502 	VENDOR_CHIPIO_8051_ADDRESS_LOW       = 0x70D,
503 	VENDOR_CHIPIO_8051_ADDRESS_HIGH      = 0x70E,
504 	VENDOR_CHIPIO_FLAG_SET               = 0x70F,
505 	VENDOR_CHIPIO_FLAGS_GET              = 0xF0F,
506 	VENDOR_CHIPIO_PARAM_SET              = 0x710,
507 	VENDOR_CHIPIO_PARAM_GET              = 0xF10,
508 
509 	VENDOR_CHIPIO_PORT_ALLOC_CONFIG_SET  = 0x711,
510 	VENDOR_CHIPIO_PORT_ALLOC_SET         = 0x712,
511 	VENDOR_CHIPIO_PORT_ALLOC_GET         = 0xF12,
512 	VENDOR_CHIPIO_PORT_FREE_SET          = 0x713,
513 
514 	VENDOR_CHIPIO_PARAM_EX_ID_GET        = 0xF17,
515 	VENDOR_CHIPIO_PARAM_EX_ID_SET        = 0x717,
516 	VENDOR_CHIPIO_PARAM_EX_VALUE_GET     = 0xF18,
517 	VENDOR_CHIPIO_PARAM_EX_VALUE_SET     = 0x718,
518 
519 	VENDOR_CHIPIO_DMIC_CTL_SET           = 0x788,
520 	VENDOR_CHIPIO_DMIC_CTL_GET           = 0xF88,
521 	VENDOR_CHIPIO_DMIC_PIN_SET           = 0x789,
522 	VENDOR_CHIPIO_DMIC_PIN_GET           = 0xF89,
523 	VENDOR_CHIPIO_DMIC_MCLK_SET          = 0x78A,
524 	VENDOR_CHIPIO_DMIC_MCLK_GET          = 0xF8A,
525 
526 	VENDOR_CHIPIO_EAPD_SEL_SET           = 0x78D
527 };
528 
529 /*
530  *  Control flag IDs
531  */
532 enum control_flag_id {
533 	/* Connection manager stream setup is bypassed/enabled */
534 	CONTROL_FLAG_C_MGR                  = 0,
535 	/* DSP DMA is bypassed/enabled */
536 	CONTROL_FLAG_DMA                    = 1,
537 	/* 8051 'idle' mode is disabled/enabled */
538 	CONTROL_FLAG_IDLE_ENABLE            = 2,
539 	/* Tracker for the SPDIF-in path is bypassed/enabled */
540 	CONTROL_FLAG_TRACKER                = 3,
541 	/* DigitalOut to Spdif2Out connection is disabled/enabled */
542 	CONTROL_FLAG_SPDIF2OUT              = 4,
543 	/* Digital Microphone is disabled/enabled */
544 	CONTROL_FLAG_DMIC                   = 5,
545 	/* ADC_B rate is 48 kHz/96 kHz */
546 	CONTROL_FLAG_ADC_B_96KHZ            = 6,
547 	/* ADC_C rate is 48 kHz/96 kHz */
548 	CONTROL_FLAG_ADC_C_96KHZ            = 7,
549 	/* DAC rate is 48 kHz/96 kHz (affects all DACs) */
550 	CONTROL_FLAG_DAC_96KHZ              = 8,
551 	/* DSP rate is 48 kHz/96 kHz */
552 	CONTROL_FLAG_DSP_96KHZ              = 9,
553 	/* SRC clock is 98 MHz/196 MHz (196 MHz forces rate to 96 KHz) */
554 	CONTROL_FLAG_SRC_CLOCK_196MHZ       = 10,
555 	/* SRC rate is 48 kHz/96 kHz (48 kHz disabled when clock is 196 MHz) */
556 	CONTROL_FLAG_SRC_RATE_96KHZ         = 11,
557 	/* Decode Loop (DSP->SRC->DSP) is disabled/enabled */
558 	CONTROL_FLAG_DECODE_LOOP            = 12,
559 	/* De-emphasis filter on DAC-1 disabled/enabled */
560 	CONTROL_FLAG_DAC1_DEEMPHASIS        = 13,
561 	/* De-emphasis filter on DAC-2 disabled/enabled */
562 	CONTROL_FLAG_DAC2_DEEMPHASIS        = 14,
563 	/* De-emphasis filter on DAC-3 disabled/enabled */
564 	CONTROL_FLAG_DAC3_DEEMPHASIS        = 15,
565 	/* High-pass filter on ADC_B disabled/enabled */
566 	CONTROL_FLAG_ADC_B_HIGH_PASS        = 16,
567 	/* High-pass filter on ADC_C disabled/enabled */
568 	CONTROL_FLAG_ADC_C_HIGH_PASS        = 17,
569 	/* Common mode on Port_A disabled/enabled */
570 	CONTROL_FLAG_PORT_A_COMMON_MODE     = 18,
571 	/* Common mode on Port_D disabled/enabled */
572 	CONTROL_FLAG_PORT_D_COMMON_MODE     = 19,
573 	/* Impedance for ramp generator on Port_A 16 Ohm/10K Ohm */
574 	CONTROL_FLAG_PORT_A_10KOHM_LOAD     = 20,
575 	/* Impedance for ramp generator on Port_D, 16 Ohm/10K Ohm */
576 	CONTROL_FLAG_PORT_D_10KOHM_LOAD     = 21,
577 	/* ASI rate is 48kHz/96kHz */
578 	CONTROL_FLAG_ASI_96KHZ              = 22,
579 	/* DAC power settings able to control attached ports no/yes */
580 	CONTROL_FLAG_DACS_CONTROL_PORTS     = 23,
581 	/* Clock Stop OK reporting is disabled/enabled */
582 	CONTROL_FLAG_CONTROL_STOP_OK_ENABLE = 24,
583 	/* Number of control flags */
584 	CONTROL_FLAGS_MAX = (CONTROL_FLAG_CONTROL_STOP_OK_ENABLE+1)
585 };
586 
587 /*
588  * Control parameter IDs
589  */
590 enum control_param_id {
591 	/* 0: None, 1: Mic1In*/
592 	CONTROL_PARAM_VIP_SOURCE               = 1,
593 	/* 0: force HDA, 1: allow DSP if HDA Spdif1Out stream is idle */
594 	CONTROL_PARAM_SPDIF1_SOURCE            = 2,
595 	/* Port A output stage gain setting to use when 16 Ohm output
596 	 * impedance is selected*/
597 	CONTROL_PARAM_PORTA_160OHM_GAIN        = 8,
598 	/* Port D output stage gain setting to use when 16 Ohm output
599 	 * impedance is selected*/
600 	CONTROL_PARAM_PORTD_160OHM_GAIN        = 10,
601 
602 	/* Stream Control */
603 
604 	/* Select stream with the given ID */
605 	CONTROL_PARAM_STREAM_ID                = 24,
606 	/* Source connection point for the selected stream */
607 	CONTROL_PARAM_STREAM_SOURCE_CONN_POINT = 25,
608 	/* Destination connection point for the selected stream */
609 	CONTROL_PARAM_STREAM_DEST_CONN_POINT   = 26,
610 	/* Number of audio channels in the selected stream */
611 	CONTROL_PARAM_STREAMS_CHANNELS         = 27,
612 	/*Enable control for the selected stream */
613 	CONTROL_PARAM_STREAM_CONTROL           = 28,
614 
615 	/* Connection Point Control */
616 
617 	/* Select connection point with the given ID */
618 	CONTROL_PARAM_CONN_POINT_ID            = 29,
619 	/* Connection point sample rate */
620 	CONTROL_PARAM_CONN_POINT_SAMPLE_RATE   = 30,
621 
622 	/* Node Control */
623 
624 	/* Select HDA node with the given ID */
625 	CONTROL_PARAM_NODE_ID                  = 31
626 };
627 
628 /*
629  *  Dsp Io Status codes
630  */
631 enum hda_vendor_status_dspio {
632 	/* Success */
633 	VENDOR_STATUS_DSPIO_OK                       = 0x00,
634 	/* Busy, unable to accept new command, the host must retry */
635 	VENDOR_STATUS_DSPIO_BUSY                     = 0x01,
636 	/* SCP command queue is full */
637 	VENDOR_STATUS_DSPIO_SCP_COMMAND_QUEUE_FULL   = 0x02,
638 	/* SCP response queue is empty */
639 	VENDOR_STATUS_DSPIO_SCP_RESPONSE_QUEUE_EMPTY = 0x03
640 };
641 
642 /*
643  *  Chip Io Status codes
644  */
645 enum hda_vendor_status_chipio {
646 	/* Success */
647 	VENDOR_STATUS_CHIPIO_OK   = 0x00,
648 	/* Busy, unable to accept new command, the host must retry */
649 	VENDOR_STATUS_CHIPIO_BUSY = 0x01
650 };
651 
652 /*
653  *  CA0132 sample rate
654  */
655 enum ca0132_sample_rate {
656 	SR_6_000        = 0x00,
657 	SR_8_000        = 0x01,
658 	SR_9_600        = 0x02,
659 	SR_11_025       = 0x03,
660 	SR_16_000       = 0x04,
661 	SR_22_050       = 0x05,
662 	SR_24_000       = 0x06,
663 	SR_32_000       = 0x07,
664 	SR_44_100       = 0x08,
665 	SR_48_000       = 0x09,
666 	SR_88_200       = 0x0A,
667 	SR_96_000       = 0x0B,
668 	SR_144_000      = 0x0C,
669 	SR_176_400      = 0x0D,
670 	SR_192_000      = 0x0E,
671 	SR_384_000      = 0x0F,
672 
673 	SR_COUNT        = 0x10,
674 
675 	SR_RATE_UNKNOWN = 0x1F
676 };
677 
678 enum dsp_download_state {
679 	DSP_DOWNLOAD_FAILED = -1,
680 	DSP_DOWNLOAD_INIT   = 0,
681 	DSP_DOWNLOADING     = 1,
682 	DSP_DOWNLOADED      = 2
683 };
684 
685 /* retrieve parameters from hda format */
686 #define get_hdafmt_chs(fmt)	(fmt & 0xf)
687 #define get_hdafmt_bits(fmt)	((fmt >> 4) & 0x7)
688 #define get_hdafmt_rate(fmt)	((fmt >> 8) & 0x7f)
689 #define get_hdafmt_type(fmt)	((fmt >> 15) & 0x1)
690 
691 /*
692  * CA0132 specific
693  */
694 
695 struct ca0132_spec {
696 	struct snd_kcontrol_new *mixers[5];
697 	unsigned int num_mixers;
698 	const struct hda_verb *base_init_verbs;
699 	const struct hda_verb *base_exit_verbs;
700 	const struct hda_verb *init_verbs[5];
701 	unsigned int num_init_verbs;  /* exclude base init verbs */
702 	struct auto_pin_cfg autocfg;
703 
704 	/* Nodes configurations */
705 	struct hda_multi_out multiout;
706 	hda_nid_t out_pins[AUTO_CFG_MAX_OUTS];
707 	hda_nid_t dacs[AUTO_CFG_MAX_OUTS];
708 	unsigned int num_outputs;
709 	hda_nid_t input_pins[AUTO_PIN_LAST];
710 	hda_nid_t adcs[AUTO_PIN_LAST];
711 	hda_nid_t dig_out;
712 	hda_nid_t dig_in;
713 	unsigned int num_inputs;
714 	hda_nid_t shared_mic_nid;
715 	hda_nid_t shared_out_nid;
716 	struct hda_pcm pcm_rec[5]; /* PCM information */
717 
718 	/* chip access */
719 	struct mutex chipio_mutex; /* chip access mutex */
720 	u32 curr_chip_addx;
721 
722 	/* DSP download related */
723 	enum dsp_download_state dsp_state;
724 	unsigned int dsp_stream_id;
725 	unsigned int wait_scp;
726 	unsigned int wait_scp_header;
727 	unsigned int wait_num_data;
728 	unsigned int scp_resp_header;
729 	unsigned int scp_resp_data[4];
730 	unsigned int scp_resp_count;
731 
732 	/* mixer and effects related */
733 	unsigned char dmic_ctl;
734 	int cur_out_type;
735 	int cur_mic_type;
736 	long vnode_lvol[VNODES_COUNT];
737 	long vnode_rvol[VNODES_COUNT];
738 	long vnode_lswitch[VNODES_COUNT];
739 	long vnode_rswitch[VNODES_COUNT];
740 	long effects_switch[EFFECTS_COUNT];
741 	long voicefx_val;
742 	long cur_mic_boost;
743 
744 #ifdef ENABLE_TUNING_CONTROLS
745 	long cur_ctl_vals[TUNING_CTLS_COUNT];
746 #endif
747 };
748 
749 /*
750  * CA0132 codec access
751  */
752 unsigned int codec_send_command(struct hda_codec *codec, hda_nid_t nid,
753 		unsigned int verb, unsigned int parm, unsigned int *res)
754 {
755 	unsigned int response;
756 	response = snd_hda_codec_read(codec, nid, 0, verb, parm);
757 	*res = response;
758 
759 	return ((response == -1) ? -1 : 0);
760 }
761 
762 static int codec_set_converter_format(struct hda_codec *codec, hda_nid_t nid,
763 		unsigned short converter_format, unsigned int *res)
764 {
765 	return codec_send_command(codec, nid, VENDOR_CHIPIO_STREAM_FORMAT,
766 				converter_format & 0xffff, res);
767 }
768 
769 static int codec_set_converter_stream_channel(struct hda_codec *codec,
770 				hda_nid_t nid, unsigned char stream,
771 				unsigned char channel, unsigned int *res)
772 {
773 	unsigned char converter_stream_channel = 0;
774 
775 	converter_stream_channel = (stream << 4) | (channel & 0x0f);
776 	return codec_send_command(codec, nid, AC_VERB_SET_CHANNEL_STREAMID,
777 				converter_stream_channel, res);
778 }
779 
780 /* Chip access helper function */
781 static int chipio_send(struct hda_codec *codec,
782 		       unsigned int reg,
783 		       unsigned int data)
784 {
785 	unsigned int res;
786 	unsigned long timeout = jiffies + msecs_to_jiffies(1000);
787 
788 	/* send bits of data specified by reg */
789 	do {
790 		res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0,
791 					 reg, data);
792 		if (res == VENDOR_STATUS_CHIPIO_OK)
793 			return 0;
794 		msleep(20);
795 	} while (time_before(jiffies, timeout));
796 
797 	return -EIO;
798 }
799 
800 /*
801  * Write chip address through the vendor widget -- NOT protected by the Mutex!
802  */
803 static int chipio_write_address(struct hda_codec *codec,
804 				unsigned int chip_addx)
805 {
806 	struct ca0132_spec *spec = codec->spec;
807 	int res;
808 
809 	if (spec->curr_chip_addx == chip_addx)
810 			return 0;
811 
812 	/* send low 16 bits of the address */
813 	res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_LOW,
814 			  chip_addx & 0xffff);
815 
816 	if (res != -EIO) {
817 		/* send high 16 bits of the address */
818 		res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_HIGH,
819 				  chip_addx >> 16);
820 	}
821 
822 	spec->curr_chip_addx = (res < 0) ? ~0UL : chip_addx;
823 
824 	return res;
825 }
826 
827 /*
828  * Write data through the vendor widget -- NOT protected by the Mutex!
829  */
830 static int chipio_write_data(struct hda_codec *codec, unsigned int data)
831 {
832 	struct ca0132_spec *spec = codec->spec;
833 	int res;
834 
835 	/* send low 16 bits of the data */
836 	res = chipio_send(codec, VENDOR_CHIPIO_DATA_LOW, data & 0xffff);
837 
838 	if (res != -EIO) {
839 		/* send high 16 bits of the data */
840 		res = chipio_send(codec, VENDOR_CHIPIO_DATA_HIGH,
841 				  data >> 16);
842 	}
843 
844 	/*If no error encountered, automatically increment the address
845 	as per chip behaviour*/
846 	spec->curr_chip_addx = (res != -EIO) ?
847 					(spec->curr_chip_addx + 4) : ~0UL;
848 	return res;
849 }
850 
851 /*
852  * Write multiple data through the vendor widget -- NOT protected by the Mutex!
853  */
854 static int chipio_write_data_multiple(struct hda_codec *codec,
855 				      const u32 *data,
856 				      unsigned int count)
857 {
858 	int status = 0;
859 
860 	if (data == NULL) {
861 		snd_printdd(KERN_ERR "chipio_write_data null ptr\n");
862 		return -EINVAL;
863 	}
864 
865 	while ((count-- != 0) && (status == 0))
866 		status = chipio_write_data(codec, *data++);
867 
868 	return status;
869 }
870 
871 
872 /*
873  * Read data through the vendor widget -- NOT protected by the Mutex!
874  */
875 static int chipio_read_data(struct hda_codec *codec, unsigned int *data)
876 {
877 	struct ca0132_spec *spec = codec->spec;
878 	int res;
879 
880 	/* post read */
881 	res = chipio_send(codec, VENDOR_CHIPIO_HIC_POST_READ, 0);
882 
883 	if (res != -EIO) {
884 		/* read status */
885 		res = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0);
886 	}
887 
888 	if (res != -EIO) {
889 		/* read data */
890 		*data = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0,
891 					   VENDOR_CHIPIO_HIC_READ_DATA,
892 					   0);
893 	}
894 
895 	/*If no error encountered, automatically increment the address
896 	as per chip behaviour*/
897 	spec->curr_chip_addx = (res != -EIO) ?
898 					(spec->curr_chip_addx + 4) : ~0UL;
899 	return res;
900 }
901 
902 /*
903  * Write given value to the given address through the chip I/O widget.
904  * protected by the Mutex
905  */
906 static int chipio_write(struct hda_codec *codec,
907 		unsigned int chip_addx, const unsigned int data)
908 {
909 	struct ca0132_spec *spec = codec->spec;
910 	int err;
911 
912 	mutex_lock(&spec->chipio_mutex);
913 
914 	/* write the address, and if successful proceed to write data */
915 	err = chipio_write_address(codec, chip_addx);
916 	if (err < 0)
917 		goto exit;
918 
919 	err = chipio_write_data(codec, data);
920 	if (err < 0)
921 		goto exit;
922 
923 exit:
924 	mutex_unlock(&spec->chipio_mutex);
925 	return err;
926 }
927 
928 /*
929  * Write multiple values to the given address through the chip I/O widget.
930  * protected by the Mutex
931  */
932 static int chipio_write_multiple(struct hda_codec *codec,
933 				 u32 chip_addx,
934 				 const u32 *data,
935 				 unsigned int count)
936 {
937 	struct ca0132_spec *spec = codec->spec;
938 	int status;
939 
940 	mutex_lock(&spec->chipio_mutex);
941 	status = chipio_write_address(codec, chip_addx);
942 	if (status < 0)
943 		goto error;
944 
945 	status = chipio_write_data_multiple(codec, data, count);
946 error:
947 	mutex_unlock(&spec->chipio_mutex);
948 
949 	return status;
950 }
951 
952 /*
953  * Read the given address through the chip I/O widget
954  * protected by the Mutex
955  */
956 static int chipio_read(struct hda_codec *codec,
957 		unsigned int chip_addx, unsigned int *data)
958 {
959 	struct ca0132_spec *spec = codec->spec;
960 	int err;
961 
962 	mutex_lock(&spec->chipio_mutex);
963 
964 	/* write the address, and if successful proceed to write data */
965 	err = chipio_write_address(codec, chip_addx);
966 	if (err < 0)
967 		goto exit;
968 
969 	err = chipio_read_data(codec, data);
970 	if (err < 0)
971 		goto exit;
972 
973 exit:
974 	mutex_unlock(&spec->chipio_mutex);
975 	return err;
976 }
977 
978 /*
979  * Set chip control flags through the chip I/O widget.
980  */
981 static void chipio_set_control_flag(struct hda_codec *codec,
982 				    enum control_flag_id flag_id,
983 				    bool flag_state)
984 {
985 	unsigned int val;
986 	unsigned int flag_bit;
987 
988 	flag_bit = (flag_state ? 1 : 0);
989 	val = (flag_bit << 7) | (flag_id);
990 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
991 			    VENDOR_CHIPIO_FLAG_SET, val);
992 }
993 
994 /*
995  * Set chip parameters through the chip I/O widget.
996  */
997 static void chipio_set_control_param(struct hda_codec *codec,
998 		enum control_param_id param_id, int param_val)
999 {
1000 	struct ca0132_spec *spec = codec->spec;
1001 	int val;
1002 
1003 	if ((param_id < 32) && (param_val < 8)) {
1004 		val = (param_val << 5) | (param_id);
1005 		snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
1006 				    VENDOR_CHIPIO_PARAM_SET, val);
1007 	} else {
1008 		mutex_lock(&spec->chipio_mutex);
1009 		if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) {
1010 			snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
1011 					    VENDOR_CHIPIO_PARAM_EX_ID_SET,
1012 					    param_id);
1013 			snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
1014 					    VENDOR_CHIPIO_PARAM_EX_VALUE_SET,
1015 					    param_val);
1016 		}
1017 		mutex_unlock(&spec->chipio_mutex);
1018 	}
1019 }
1020 
1021 /*
1022  * Set sampling rate of the connection point.
1023  */
1024 static void chipio_set_conn_rate(struct hda_codec *codec,
1025 				int connid, enum ca0132_sample_rate rate)
1026 {
1027 	chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_ID, connid);
1028 	chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_SAMPLE_RATE,
1029 				 rate);
1030 }
1031 
1032 /*
1033  * Enable clocks.
1034  */
1035 static void chipio_enable_clocks(struct hda_codec *codec)
1036 {
1037 	struct ca0132_spec *spec = codec->spec;
1038 
1039 	mutex_lock(&spec->chipio_mutex);
1040 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
1041 			    VENDOR_CHIPIO_8051_ADDRESS_LOW, 0);
1042 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
1043 			    VENDOR_CHIPIO_PLL_PMU_WRITE, 0xff);
1044 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
1045 			    VENDOR_CHIPIO_8051_ADDRESS_LOW, 5);
1046 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
1047 			    VENDOR_CHIPIO_PLL_PMU_WRITE, 0x0b);
1048 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
1049 			    VENDOR_CHIPIO_8051_ADDRESS_LOW, 6);
1050 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
1051 			    VENDOR_CHIPIO_PLL_PMU_WRITE, 0xff);
1052 	mutex_unlock(&spec->chipio_mutex);
1053 }
1054 
1055 /*
1056  * CA0132 DSP IO stuffs
1057  */
1058 static int dspio_send(struct hda_codec *codec, unsigned int reg,
1059 		      unsigned int data)
1060 {
1061 	int res;
1062 	unsigned long timeout = jiffies + msecs_to_jiffies(1000);
1063 
1064 	/* send bits of data specified by reg to dsp */
1065 	do {
1066 		res = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, reg, data);
1067 		if ((res >= 0) && (res != VENDOR_STATUS_DSPIO_BUSY))
1068 			return res;
1069 		msleep(20);
1070 	} while (time_before(jiffies, timeout));
1071 
1072 	return -EIO;
1073 }
1074 
1075 /*
1076  * Wait for DSP to be ready for commands
1077  */
1078 static void dspio_write_wait(struct hda_codec *codec)
1079 {
1080 	int status;
1081 	unsigned long timeout = jiffies + msecs_to_jiffies(1000);
1082 
1083 	do {
1084 		status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0,
1085 						VENDOR_DSPIO_STATUS, 0);
1086 		if ((status == VENDOR_STATUS_DSPIO_OK) ||
1087 		    (status == VENDOR_STATUS_DSPIO_SCP_RESPONSE_QUEUE_EMPTY))
1088 			break;
1089 		msleep(1);
1090 	} while (time_before(jiffies, timeout));
1091 }
1092 
1093 /*
1094  * Write SCP data to DSP
1095  */
1096 static int dspio_write(struct hda_codec *codec, unsigned int scp_data)
1097 {
1098 	struct ca0132_spec *spec = codec->spec;
1099 	int status;
1100 
1101 	dspio_write_wait(codec);
1102 
1103 	mutex_lock(&spec->chipio_mutex);
1104 	status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_LOW,
1105 			    scp_data & 0xffff);
1106 	if (status < 0)
1107 		goto error;
1108 
1109 	status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_HIGH,
1110 				    scp_data >> 16);
1111 	if (status < 0)
1112 		goto error;
1113 
1114 	/* OK, now check if the write itself has executed*/
1115 	status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0,
1116 				    VENDOR_DSPIO_STATUS, 0);
1117 error:
1118 	mutex_unlock(&spec->chipio_mutex);
1119 
1120 	return (status == VENDOR_STATUS_DSPIO_SCP_COMMAND_QUEUE_FULL) ?
1121 			-EIO : 0;
1122 }
1123 
1124 /*
1125  * Write multiple SCP data to DSP
1126  */
1127 static int dspio_write_multiple(struct hda_codec *codec,
1128 				unsigned int *buffer, unsigned int size)
1129 {
1130 	int status = 0;
1131 	unsigned int count;
1132 
1133 	if ((buffer == NULL))
1134 		return -EINVAL;
1135 
1136 	count = 0;
1137 	while (count < size) {
1138 		status = dspio_write(codec, *buffer++);
1139 		if (status != 0)
1140 			break;
1141 		count++;
1142 	}
1143 
1144 	return status;
1145 }
1146 
1147 static int dspio_read(struct hda_codec *codec, unsigned int *data)
1148 {
1149 	int status;
1150 
1151 	status = dspio_send(codec, VENDOR_DSPIO_SCP_POST_READ_DATA, 0);
1152 	if (status == -EIO)
1153 		return status;
1154 
1155 	status = dspio_send(codec, VENDOR_DSPIO_STATUS, 0);
1156 	if (status == -EIO ||
1157 	    status == VENDOR_STATUS_DSPIO_SCP_RESPONSE_QUEUE_EMPTY)
1158 		return -EIO;
1159 
1160 	*data = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0,
1161 				   VENDOR_DSPIO_SCP_READ_DATA, 0);
1162 
1163 	return 0;
1164 }
1165 
1166 static int dspio_read_multiple(struct hda_codec *codec, unsigned int *buffer,
1167 			       unsigned int *buf_size, unsigned int size_count)
1168 {
1169 	int status = 0;
1170 	unsigned int size = *buf_size;
1171 	unsigned int count;
1172 	unsigned int skip_count;
1173 	unsigned int dummy;
1174 
1175 	if ((buffer == NULL))
1176 		return -1;
1177 
1178 	count = 0;
1179 	while (count < size && count < size_count) {
1180 		status = dspio_read(codec, buffer++);
1181 		if (status != 0)
1182 			break;
1183 		count++;
1184 	}
1185 
1186 	skip_count = count;
1187 	if (status == 0) {
1188 		while (skip_count < size) {
1189 			status = dspio_read(codec, &dummy);
1190 			if (status != 0)
1191 				break;
1192 			skip_count++;
1193 		}
1194 	}
1195 	*buf_size = count;
1196 
1197 	return status;
1198 }
1199 
1200 /*
1201  * Construct the SCP header using corresponding fields
1202  */
1203 static inline unsigned int
1204 make_scp_header(unsigned int target_id, unsigned int source_id,
1205 		unsigned int get_flag, unsigned int req,
1206 		unsigned int device_flag, unsigned int resp_flag,
1207 		unsigned int error_flag, unsigned int data_size)
1208 {
1209 	unsigned int header = 0;
1210 
1211 	header = (data_size & 0x1f) << 27;
1212 	header |= (error_flag & 0x01) << 26;
1213 	header |= (resp_flag & 0x01) << 25;
1214 	header |= (device_flag & 0x01) << 24;
1215 	header |= (req & 0x7f) << 17;
1216 	header |= (get_flag & 0x01) << 16;
1217 	header |= (source_id & 0xff) << 8;
1218 	header |= target_id & 0xff;
1219 
1220 	return header;
1221 }
1222 
1223 /*
1224  * Extract corresponding fields from SCP header
1225  */
1226 static inline void
1227 extract_scp_header(unsigned int header,
1228 		   unsigned int *target_id, unsigned int *source_id,
1229 		   unsigned int *get_flag, unsigned int *req,
1230 		   unsigned int *device_flag, unsigned int *resp_flag,
1231 		   unsigned int *error_flag, unsigned int *data_size)
1232 {
1233 	if (data_size)
1234 		*data_size = (header >> 27) & 0x1f;
1235 	if (error_flag)
1236 		*error_flag = (header >> 26) & 0x01;
1237 	if (resp_flag)
1238 		*resp_flag = (header >> 25) & 0x01;
1239 	if (device_flag)
1240 		*device_flag = (header >> 24) & 0x01;
1241 	if (req)
1242 		*req = (header >> 17) & 0x7f;
1243 	if (get_flag)
1244 		*get_flag = (header >> 16) & 0x01;
1245 	if (source_id)
1246 		*source_id = (header >> 8) & 0xff;
1247 	if (target_id)
1248 		*target_id = header & 0xff;
1249 }
1250 
1251 #define SCP_MAX_DATA_WORDS  (16)
1252 
1253 /* Structure to contain any SCP message */
1254 struct scp_msg {
1255 	unsigned int hdr;
1256 	unsigned int data[SCP_MAX_DATA_WORDS];
1257 };
1258 
1259 static void dspio_clear_response_queue(struct hda_codec *codec)
1260 {
1261 	unsigned int dummy = 0;
1262 	int status = -1;
1263 
1264 	/* clear all from the response queue */
1265 	do {
1266 		status = dspio_read(codec, &dummy);
1267 	} while (status == 0);
1268 }
1269 
1270 static int dspio_get_response_data(struct hda_codec *codec)
1271 {
1272 	struct ca0132_spec *spec = codec->spec;
1273 	unsigned int data = 0;
1274 	unsigned int count;
1275 
1276 	if (dspio_read(codec, &data) < 0)
1277 		return -EIO;
1278 
1279 	if ((data & 0x00ffffff) == spec->wait_scp_header) {
1280 		spec->scp_resp_header = data;
1281 		spec->scp_resp_count = data >> 27;
1282 		count = spec->wait_num_data;
1283 		dspio_read_multiple(codec, spec->scp_resp_data,
1284 				    &spec->scp_resp_count, count);
1285 		return 0;
1286 	}
1287 
1288 	return -EIO;
1289 }
1290 
1291 /*
1292  * Send SCP message to DSP
1293  */
1294 static int dspio_send_scp_message(struct hda_codec *codec,
1295 				  unsigned char *send_buf,
1296 				  unsigned int send_buf_size,
1297 				  unsigned char *return_buf,
1298 				  unsigned int return_buf_size,
1299 				  unsigned int *bytes_returned)
1300 {
1301 	struct ca0132_spec *spec = codec->spec;
1302 	int status = -1;
1303 	unsigned int scp_send_size = 0;
1304 	unsigned int total_size;
1305 	bool waiting_for_resp = false;
1306 	unsigned int header;
1307 	struct scp_msg *ret_msg;
1308 	unsigned int resp_src_id, resp_target_id;
1309 	unsigned int data_size, src_id, target_id, get_flag, device_flag;
1310 
1311 	if (bytes_returned)
1312 		*bytes_returned = 0;
1313 
1314 	/* get scp header from buffer */
1315 	header = *((unsigned int *)send_buf);
1316 	extract_scp_header(header, &target_id, &src_id, &get_flag, NULL,
1317 			   &device_flag, NULL, NULL, &data_size);
1318 	scp_send_size = data_size + 1;
1319 	total_size = (scp_send_size * 4);
1320 
1321 	if (send_buf_size < total_size)
1322 		return -EINVAL;
1323 
1324 	if (get_flag || device_flag) {
1325 		if (!return_buf || return_buf_size < 4 || !bytes_returned)
1326 			return -EINVAL;
1327 
1328 		spec->wait_scp_header = *((unsigned int *)send_buf);
1329 
1330 		/* swap source id with target id */
1331 		resp_target_id = src_id;
1332 		resp_src_id = target_id;
1333 		spec->wait_scp_header &= 0xffff0000;
1334 		spec->wait_scp_header |= (resp_src_id << 8) | (resp_target_id);
1335 		spec->wait_num_data = return_buf_size/sizeof(unsigned int) - 1;
1336 		spec->wait_scp = 1;
1337 		waiting_for_resp = true;
1338 	}
1339 
1340 	status = dspio_write_multiple(codec, (unsigned int *)send_buf,
1341 				      scp_send_size);
1342 	if (status < 0) {
1343 		spec->wait_scp = 0;
1344 		return status;
1345 	}
1346 
1347 	if (waiting_for_resp) {
1348 		unsigned long timeout = jiffies + msecs_to_jiffies(1000);
1349 		memset(return_buf, 0, return_buf_size);
1350 		do {
1351 			msleep(20);
1352 		} while (spec->wait_scp && time_before(jiffies, timeout));
1353 		waiting_for_resp = false;
1354 		if (!spec->wait_scp) {
1355 			ret_msg = (struct scp_msg *)return_buf;
1356 			memcpy(&ret_msg->hdr, &spec->scp_resp_header, 4);
1357 			memcpy(&ret_msg->data, spec->scp_resp_data,
1358 			       spec->wait_num_data);
1359 			*bytes_returned = (spec->scp_resp_count + 1) * 4;
1360 			status = 0;
1361 		} else {
1362 			status = -EIO;
1363 		}
1364 		spec->wait_scp = 0;
1365 	}
1366 
1367 	return status;
1368 }
1369 
1370 /**
1371  * Prepare and send the SCP message to DSP
1372  * @codec: the HDA codec
1373  * @mod_id: ID of the DSP module to send the command
1374  * @req: ID of request to send to the DSP module
1375  * @dir: SET or GET
1376  * @data: pointer to the data to send with the request, request specific
1377  * @len: length of the data, in bytes
1378  * @reply: point to the buffer to hold data returned for a reply
1379  * @reply_len: length of the reply buffer returned from GET
1380  *
1381  * Returns zero or a negative error code.
1382  */
1383 static int dspio_scp(struct hda_codec *codec,
1384 		int mod_id, int req, int dir, void *data, unsigned int len,
1385 		void *reply, unsigned int *reply_len)
1386 {
1387 	int status = 0;
1388 	struct scp_msg scp_send, scp_reply;
1389 	unsigned int ret_bytes, send_size, ret_size;
1390 	unsigned int send_get_flag, reply_resp_flag, reply_error_flag;
1391 	unsigned int reply_data_size;
1392 
1393 	memset(&scp_send, 0, sizeof(scp_send));
1394 	memset(&scp_reply, 0, sizeof(scp_reply));
1395 
1396 	if ((len != 0 && data == NULL) || (len > SCP_MAX_DATA_WORDS))
1397 		return -EINVAL;
1398 
1399 	if (dir == SCP_GET && reply == NULL) {
1400 		snd_printdd(KERN_ERR "dspio_scp get but has no buffer\n");
1401 		return -EINVAL;
1402 	}
1403 
1404 	if (reply != NULL && (reply_len == NULL || (*reply_len == 0))) {
1405 		snd_printdd(KERN_ERR "dspio_scp bad resp buf len parms\n");
1406 		return -EINVAL;
1407 	}
1408 
1409 	scp_send.hdr = make_scp_header(mod_id, 0x20, (dir == SCP_GET), req,
1410 				       0, 0, 0, len/sizeof(unsigned int));
1411 	if (data != NULL && len > 0) {
1412 		len = min((unsigned int)(sizeof(scp_send.data)), len);
1413 		memcpy(scp_send.data, data, len);
1414 	}
1415 
1416 	ret_bytes = 0;
1417 	send_size = sizeof(unsigned int) + len;
1418 	status = dspio_send_scp_message(codec, (unsigned char *)&scp_send,
1419 					send_size, (unsigned char *)&scp_reply,
1420 					sizeof(scp_reply), &ret_bytes);
1421 
1422 	if (status < 0) {
1423 		snd_printdd(KERN_ERR "dspio_scp: send scp msg failed\n");
1424 		return status;
1425 	}
1426 
1427 	/* extract send and reply headers members */
1428 	extract_scp_header(scp_send.hdr, NULL, NULL, &send_get_flag,
1429 			   NULL, NULL, NULL, NULL, NULL);
1430 	extract_scp_header(scp_reply.hdr, NULL, NULL, NULL, NULL, NULL,
1431 			   &reply_resp_flag, &reply_error_flag,
1432 			   &reply_data_size);
1433 
1434 	if (!send_get_flag)
1435 		return 0;
1436 
1437 	if (reply_resp_flag && !reply_error_flag) {
1438 		ret_size = (ret_bytes - sizeof(scp_reply.hdr))
1439 					/ sizeof(unsigned int);
1440 
1441 		if (*reply_len < ret_size*sizeof(unsigned int)) {
1442 			snd_printdd(KERN_ERR "reply too long for buf\n");
1443 			return -EINVAL;
1444 		} else if (ret_size != reply_data_size) {
1445 			snd_printdd(KERN_ERR "RetLen and HdrLen .NE.\n");
1446 			return -EINVAL;
1447 		} else {
1448 			*reply_len = ret_size*sizeof(unsigned int);
1449 			memcpy(reply, scp_reply.data, *reply_len);
1450 		}
1451 	} else {
1452 		snd_printdd(KERN_ERR "reply ill-formed or errflag set\n");
1453 		return -EIO;
1454 	}
1455 
1456 	return status;
1457 }
1458 
1459 /*
1460  * Set DSP parameters
1461  */
1462 static int dspio_set_param(struct hda_codec *codec, int mod_id,
1463 			int req, void *data, unsigned int len)
1464 {
1465 	return dspio_scp(codec, mod_id, req, SCP_SET, data, len, NULL, NULL);
1466 }
1467 
1468 static int dspio_set_uint_param(struct hda_codec *codec, int mod_id,
1469 			int req, unsigned int data)
1470 {
1471 	return dspio_set_param(codec, mod_id, req, &data, sizeof(unsigned int));
1472 }
1473 
1474 /*
1475  * Allocate a DSP DMA channel via an SCP message
1476  */
1477 static int dspio_alloc_dma_chan(struct hda_codec *codec, unsigned int *dma_chan)
1478 {
1479 	int status = 0;
1480 	unsigned int size = sizeof(dma_chan);
1481 
1482 	snd_printdd(KERN_INFO "     dspio_alloc_dma_chan() -- begin\n");
1483 	status = dspio_scp(codec, MASTERCONTROL, MASTERCONTROL_ALLOC_DMA_CHAN,
1484 			SCP_GET, NULL, 0, dma_chan, &size);
1485 
1486 	if (status < 0) {
1487 		snd_printdd(KERN_INFO "dspio_alloc_dma_chan: SCP Failed\n");
1488 		return status;
1489 	}
1490 
1491 	if ((*dma_chan + 1) == 0) {
1492 		snd_printdd(KERN_INFO "no free dma channels to allocate\n");
1493 		return -EBUSY;
1494 	}
1495 
1496 	snd_printdd("dspio_alloc_dma_chan: chan=%d\n", *dma_chan);
1497 	snd_printdd(KERN_INFO "     dspio_alloc_dma_chan() -- complete\n");
1498 
1499 	return status;
1500 }
1501 
1502 /*
1503  * Free a DSP DMA via an SCP message
1504  */
1505 static int dspio_free_dma_chan(struct hda_codec *codec, unsigned int dma_chan)
1506 {
1507 	int status = 0;
1508 	unsigned int dummy = 0;
1509 
1510 	snd_printdd(KERN_INFO "     dspio_free_dma_chan() -- begin\n");
1511 	snd_printdd("dspio_free_dma_chan: chan=%d\n", dma_chan);
1512 
1513 	status = dspio_scp(codec, MASTERCONTROL, MASTERCONTROL_ALLOC_DMA_CHAN,
1514 			   SCP_SET, &dma_chan, sizeof(dma_chan), NULL, &dummy);
1515 
1516 	if (status < 0) {
1517 		snd_printdd(KERN_INFO "dspio_free_dma_chan: SCP Failed\n");
1518 		return status;
1519 	}
1520 
1521 	snd_printdd(KERN_INFO "     dspio_free_dma_chan() -- complete\n");
1522 
1523 	return status;
1524 }
1525 
1526 /*
1527  * (Re)start the DSP
1528  */
1529 static int dsp_set_run_state(struct hda_codec *codec)
1530 {
1531 	unsigned int dbg_ctrl_reg;
1532 	unsigned int halt_state;
1533 	int err;
1534 
1535 	err = chipio_read(codec, DSP_DBGCNTL_INST_OFFSET, &dbg_ctrl_reg);
1536 	if (err < 0)
1537 		return err;
1538 
1539 	halt_state = (dbg_ctrl_reg & DSP_DBGCNTL_STATE_MASK) >>
1540 		      DSP_DBGCNTL_STATE_LOBIT;
1541 
1542 	if (halt_state != 0) {
1543 		dbg_ctrl_reg &= ~((halt_state << DSP_DBGCNTL_SS_LOBIT) &
1544 				  DSP_DBGCNTL_SS_MASK);
1545 		err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET,
1546 				   dbg_ctrl_reg);
1547 		if (err < 0)
1548 			return err;
1549 
1550 		dbg_ctrl_reg |= (halt_state << DSP_DBGCNTL_EXEC_LOBIT) &
1551 				DSP_DBGCNTL_EXEC_MASK;
1552 		err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET,
1553 				   dbg_ctrl_reg);
1554 		if (err < 0)
1555 			return err;
1556 	}
1557 
1558 	return 0;
1559 }
1560 
1561 /*
1562  * Reset the DSP
1563  */
1564 static int dsp_reset(struct hda_codec *codec)
1565 {
1566 	unsigned int res;
1567 	int retry = 20;
1568 
1569 	snd_printdd("dsp_reset\n");
1570 	do {
1571 		res = dspio_send(codec, VENDOR_DSPIO_DSP_INIT, 0);
1572 		retry--;
1573 	} while (res == -EIO && retry);
1574 
1575 	if (!retry) {
1576 		snd_printdd("dsp_reset timeout\n");
1577 		return -EIO;
1578 	}
1579 
1580 	return 0;
1581 }
1582 
1583 /*
1584  * Convert chip address to DSP address
1585  */
1586 static unsigned int dsp_chip_to_dsp_addx(unsigned int chip_addx,
1587 					bool *code, bool *yram)
1588 {
1589 	*code = *yram = false;
1590 
1591 	if (UC_RANGE(chip_addx, 1)) {
1592 		*code = true;
1593 		return UC_OFF(chip_addx);
1594 	} else if (X_RANGE_ALL(chip_addx, 1)) {
1595 		return X_OFF(chip_addx);
1596 	} else if (Y_RANGE_ALL(chip_addx, 1)) {
1597 		*yram = true;
1598 		return Y_OFF(chip_addx);
1599 	}
1600 
1601 	return INVALID_CHIP_ADDRESS;
1602 }
1603 
1604 /*
1605  * Check if the DSP DMA is active
1606  */
1607 static bool dsp_is_dma_active(struct hda_codec *codec, unsigned int dma_chan)
1608 {
1609 	unsigned int dma_chnlstart_reg;
1610 
1611 	chipio_read(codec, DSPDMAC_CHNLSTART_INST_OFFSET, &dma_chnlstart_reg);
1612 
1613 	return ((dma_chnlstart_reg & (1 <<
1614 			(DSPDMAC_CHNLSTART_EN_LOBIT + dma_chan))) != 0);
1615 }
1616 
1617 static int dsp_dma_setup_common(struct hda_codec *codec,
1618 				unsigned int chip_addx,
1619 				unsigned int dma_chan,
1620 				unsigned int port_map_mask,
1621 				bool ovly)
1622 {
1623 	int status = 0;
1624 	unsigned int chnl_prop;
1625 	unsigned int dsp_addx;
1626 	unsigned int active;
1627 	bool code, yram;
1628 
1629 	snd_printdd(KERN_INFO "-- dsp_dma_setup_common() -- Begin ---------\n");
1630 
1631 	if (dma_chan >= DSPDMAC_DMA_CFG_CHANNEL_COUNT) {
1632 		snd_printdd(KERN_ERR "dma chan num invalid\n");
1633 		return -EINVAL;
1634 	}
1635 
1636 	if (dsp_is_dma_active(codec, dma_chan)) {
1637 		snd_printdd(KERN_ERR "dma already active\n");
1638 		return -EBUSY;
1639 	}
1640 
1641 	dsp_addx = dsp_chip_to_dsp_addx(chip_addx, &code, &yram);
1642 
1643 	if (dsp_addx == INVALID_CHIP_ADDRESS) {
1644 		snd_printdd(KERN_ERR "invalid chip addr\n");
1645 		return -ENXIO;
1646 	}
1647 
1648 	chnl_prop = DSPDMAC_CHNLPROP_AC_MASK;
1649 	active = 0;
1650 
1651 	snd_printdd(KERN_INFO "   dsp_dma_setup_common()    start reg pgm\n");
1652 
1653 	if (ovly) {
1654 		status = chipio_read(codec, DSPDMAC_CHNLPROP_INST_OFFSET,
1655 				     &chnl_prop);
1656 
1657 		if (status < 0) {
1658 			snd_printdd(KERN_ERR "read CHNLPROP Reg fail\n");
1659 			return status;
1660 		}
1661 		snd_printdd(KERN_INFO "dsp_dma_setup_common() Read CHNLPROP\n");
1662 	}
1663 
1664 	if (!code)
1665 		chnl_prop &= ~(1 << (DSPDMAC_CHNLPROP_MSPCE_LOBIT + dma_chan));
1666 	else
1667 		chnl_prop |=  (1 << (DSPDMAC_CHNLPROP_MSPCE_LOBIT + dma_chan));
1668 
1669 	chnl_prop &= ~(1 << (DSPDMAC_CHNLPROP_DCON_LOBIT + dma_chan));
1670 
1671 	status = chipio_write(codec, DSPDMAC_CHNLPROP_INST_OFFSET, chnl_prop);
1672 	if (status < 0) {
1673 		snd_printdd(KERN_ERR "write CHNLPROP Reg fail\n");
1674 		return status;
1675 	}
1676 	snd_printdd(KERN_INFO "   dsp_dma_setup_common()    Write CHNLPROP\n");
1677 
1678 	if (ovly) {
1679 		status = chipio_read(codec, DSPDMAC_ACTIVE_INST_OFFSET,
1680 				     &active);
1681 
1682 		if (status < 0) {
1683 			snd_printdd(KERN_ERR "read ACTIVE Reg fail\n");
1684 			return status;
1685 		}
1686 		snd_printdd(KERN_INFO "dsp_dma_setup_common() Read ACTIVE\n");
1687 	}
1688 
1689 	active &= (~(1 << (DSPDMAC_ACTIVE_AAR_LOBIT + dma_chan))) &
1690 		DSPDMAC_ACTIVE_AAR_MASK;
1691 
1692 	status = chipio_write(codec, DSPDMAC_ACTIVE_INST_OFFSET, active);
1693 	if (status < 0) {
1694 		snd_printdd(KERN_ERR "write ACTIVE Reg fail\n");
1695 		return status;
1696 	}
1697 
1698 	snd_printdd(KERN_INFO "   dsp_dma_setup_common()    Write ACTIVE\n");
1699 
1700 	status = chipio_write(codec, DSPDMAC_AUDCHSEL_INST_OFFSET(dma_chan),
1701 			      port_map_mask);
1702 	if (status < 0) {
1703 		snd_printdd(KERN_ERR "write AUDCHSEL Reg fail\n");
1704 		return status;
1705 	}
1706 	snd_printdd(KERN_INFO "   dsp_dma_setup_common()    Write AUDCHSEL\n");
1707 
1708 	status = chipio_write(codec, DSPDMAC_IRQCNT_INST_OFFSET(dma_chan),
1709 			DSPDMAC_IRQCNT_BICNT_MASK | DSPDMAC_IRQCNT_CICNT_MASK);
1710 	if (status < 0) {
1711 		snd_printdd(KERN_ERR "write IRQCNT Reg fail\n");
1712 		return status;
1713 	}
1714 	snd_printdd(KERN_INFO "   dsp_dma_setup_common()    Write IRQCNT\n");
1715 
1716 	snd_printdd(
1717 		   "ChipA=0x%x,DspA=0x%x,dmaCh=%u, "
1718 		   "CHSEL=0x%x,CHPROP=0x%x,Active=0x%x\n",
1719 		   chip_addx, dsp_addx, dma_chan,
1720 		   port_map_mask, chnl_prop, active);
1721 
1722 	snd_printdd(KERN_INFO "-- dsp_dma_setup_common() -- Complete ------\n");
1723 
1724 	return 0;
1725 }
1726 
1727 /*
1728  * Setup the DSP DMA per-transfer-specific registers
1729  */
1730 static int dsp_dma_setup(struct hda_codec *codec,
1731 			unsigned int chip_addx,
1732 			unsigned int count,
1733 			unsigned int dma_chan)
1734 {
1735 	int status = 0;
1736 	bool code, yram;
1737 	unsigned int dsp_addx;
1738 	unsigned int addr_field;
1739 	unsigned int incr_field;
1740 	unsigned int base_cnt;
1741 	unsigned int cur_cnt;
1742 	unsigned int dma_cfg = 0;
1743 	unsigned int adr_ofs = 0;
1744 	unsigned int xfr_cnt = 0;
1745 	const unsigned int max_dma_count = 1 << (DSPDMAC_XFRCNT_BCNT_HIBIT -
1746 						DSPDMAC_XFRCNT_BCNT_LOBIT + 1);
1747 
1748 	snd_printdd(KERN_INFO "-- dsp_dma_setup() -- Begin ---------\n");
1749 
1750 	if (count > max_dma_count) {
1751 		snd_printdd(KERN_ERR "count too big\n");
1752 		return -EINVAL;
1753 	}
1754 
1755 	dsp_addx = dsp_chip_to_dsp_addx(chip_addx, &code, &yram);
1756 	if (dsp_addx == INVALID_CHIP_ADDRESS) {
1757 		snd_printdd(KERN_ERR "invalid chip addr\n");
1758 		return -ENXIO;
1759 	}
1760 
1761 	snd_printdd(KERN_INFO "   dsp_dma_setup()    start reg pgm\n");
1762 
1763 	addr_field = dsp_addx << DSPDMAC_DMACFG_DBADR_LOBIT;
1764 	incr_field   = 0;
1765 
1766 	if (!code) {
1767 		addr_field <<= 1;
1768 		if (yram)
1769 			addr_field |= (1 << DSPDMAC_DMACFG_DBADR_LOBIT);
1770 
1771 		incr_field  = (1 << DSPDMAC_DMACFG_AINCR_LOBIT);
1772 	}
1773 
1774 	dma_cfg = addr_field + incr_field;
1775 	status = chipio_write(codec, DSPDMAC_DMACFG_INST_OFFSET(dma_chan),
1776 				dma_cfg);
1777 	if (status < 0) {
1778 		snd_printdd(KERN_ERR "write DMACFG Reg fail\n");
1779 		return status;
1780 	}
1781 	snd_printdd(KERN_INFO "   dsp_dma_setup()    Write DMACFG\n");
1782 
1783 	adr_ofs = (count - 1) << (DSPDMAC_DSPADROFS_BOFS_LOBIT +
1784 							(code ? 0 : 1));
1785 
1786 	status = chipio_write(codec, DSPDMAC_DSPADROFS_INST_OFFSET(dma_chan),
1787 				adr_ofs);
1788 	if (status < 0) {
1789 		snd_printdd(KERN_ERR "write DSPADROFS Reg fail\n");
1790 		return status;
1791 	}
1792 	snd_printdd(KERN_INFO "   dsp_dma_setup()    Write DSPADROFS\n");
1793 
1794 	base_cnt = (count - 1) << DSPDMAC_XFRCNT_BCNT_LOBIT;
1795 
1796 	cur_cnt  = (count - 1) << DSPDMAC_XFRCNT_CCNT_LOBIT;
1797 
1798 	xfr_cnt = base_cnt | cur_cnt;
1799 
1800 	status = chipio_write(codec,
1801 				DSPDMAC_XFRCNT_INST_OFFSET(dma_chan), xfr_cnt);
1802 	if (status < 0) {
1803 		snd_printdd(KERN_ERR "write XFRCNT Reg fail\n");
1804 		return status;
1805 	}
1806 	snd_printdd(KERN_INFO "   dsp_dma_setup()    Write XFRCNT\n");
1807 
1808 	snd_printdd(
1809 		   "ChipA=0x%x, cnt=0x%x, DMACFG=0x%x, "
1810 		   "ADROFS=0x%x, XFRCNT=0x%x\n",
1811 		   chip_addx, count, dma_cfg, adr_ofs, xfr_cnt);
1812 
1813 	snd_printdd(KERN_INFO "-- dsp_dma_setup() -- Complete ---------\n");
1814 
1815 	return 0;
1816 }
1817 
1818 /*
1819  * Start the DSP DMA
1820  */
1821 static int dsp_dma_start(struct hda_codec *codec,
1822 			 unsigned int dma_chan, bool ovly)
1823 {
1824 	unsigned int reg = 0;
1825 	int status = 0;
1826 
1827 	snd_printdd(KERN_INFO "-- dsp_dma_start() -- Begin ---------\n");
1828 
1829 	if (ovly) {
1830 		status = chipio_read(codec,
1831 				     DSPDMAC_CHNLSTART_INST_OFFSET, &reg);
1832 
1833 		if (status < 0) {
1834 			snd_printdd(KERN_ERR "read CHNLSTART reg fail\n");
1835 			return status;
1836 		}
1837 		snd_printdd(KERN_INFO "-- dsp_dma_start()    Read CHNLSTART\n");
1838 
1839 		reg &= ~(DSPDMAC_CHNLSTART_EN_MASK |
1840 				DSPDMAC_CHNLSTART_DIS_MASK);
1841 	}
1842 
1843 	status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET,
1844 			reg | (1 << (dma_chan + DSPDMAC_CHNLSTART_EN_LOBIT)));
1845 	if (status < 0) {
1846 		snd_printdd(KERN_ERR "write CHNLSTART reg fail\n");
1847 		return status;
1848 	}
1849 	snd_printdd(KERN_INFO "-- dsp_dma_start() -- Complete ---------\n");
1850 
1851 	return status;
1852 }
1853 
1854 /*
1855  * Stop the DSP DMA
1856  */
1857 static int dsp_dma_stop(struct hda_codec *codec,
1858 			unsigned int dma_chan, bool ovly)
1859 {
1860 	unsigned int reg = 0;
1861 	int status = 0;
1862 
1863 	snd_printdd(KERN_INFO "-- dsp_dma_stop() -- Begin ---------\n");
1864 
1865 	if (ovly) {
1866 		status = chipio_read(codec,
1867 				     DSPDMAC_CHNLSTART_INST_OFFSET, &reg);
1868 
1869 		if (status < 0) {
1870 			snd_printdd(KERN_ERR "read CHNLSTART reg fail\n");
1871 			return status;
1872 		}
1873 		snd_printdd(KERN_INFO "-- dsp_dma_stop()    Read CHNLSTART\n");
1874 		reg &= ~(DSPDMAC_CHNLSTART_EN_MASK |
1875 				DSPDMAC_CHNLSTART_DIS_MASK);
1876 	}
1877 
1878 	status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET,
1879 			reg | (1 << (dma_chan + DSPDMAC_CHNLSTART_DIS_LOBIT)));
1880 	if (status < 0) {
1881 		snd_printdd(KERN_ERR "write CHNLSTART reg fail\n");
1882 		return status;
1883 	}
1884 	snd_printdd(KERN_INFO "-- dsp_dma_stop() -- Complete ---------\n");
1885 
1886 	return status;
1887 }
1888 
1889 /**
1890  * Allocate router ports
1891  *
1892  * @codec: the HDA codec
1893  * @num_chans: number of channels in the stream
1894  * @ports_per_channel: number of ports per channel
1895  * @start_device: start device
1896  * @port_map: pointer to the port list to hold the allocated ports
1897  *
1898  * Returns zero or a negative error code.
1899  */
1900 static int dsp_allocate_router_ports(struct hda_codec *codec,
1901 				     unsigned int num_chans,
1902 				     unsigned int ports_per_channel,
1903 				     unsigned int start_device,
1904 				     unsigned int *port_map)
1905 {
1906 	int status = 0;
1907 	int res;
1908 	u8 val;
1909 
1910 	status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0);
1911 	if (status < 0)
1912 		return status;
1913 
1914 	val = start_device << 6;
1915 	val |= (ports_per_channel - 1) << 4;
1916 	val |= num_chans - 1;
1917 
1918 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
1919 			    VENDOR_CHIPIO_PORT_ALLOC_CONFIG_SET,
1920 			    val);
1921 
1922 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
1923 			    VENDOR_CHIPIO_PORT_ALLOC_SET,
1924 			    MEM_CONNID_DSP);
1925 
1926 	status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0);
1927 	if (status < 0)
1928 		return status;
1929 
1930 	res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0,
1931 				VENDOR_CHIPIO_PORT_ALLOC_GET, 0);
1932 
1933 	*port_map = res;
1934 
1935 	return (res < 0) ? res : 0;
1936 }
1937 
1938 /*
1939  * Free router ports
1940  */
1941 static int dsp_free_router_ports(struct hda_codec *codec)
1942 {
1943 	int status = 0;
1944 
1945 	status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0);
1946 	if (status < 0)
1947 		return status;
1948 
1949 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
1950 			    VENDOR_CHIPIO_PORT_FREE_SET,
1951 			    MEM_CONNID_DSP);
1952 
1953 	status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0);
1954 
1955 	return status;
1956 }
1957 
1958 /*
1959  * Allocate DSP ports for the download stream
1960  */
1961 static int dsp_allocate_ports(struct hda_codec *codec,
1962 			unsigned int num_chans,
1963 			unsigned int rate_multi, unsigned int *port_map)
1964 {
1965 	int status;
1966 
1967 	snd_printdd(KERN_INFO "     dsp_allocate_ports() -- begin\n");
1968 
1969 	if ((rate_multi != 1) && (rate_multi != 2) && (rate_multi != 4)) {
1970 		snd_printdd(KERN_ERR "bad rate multiple\n");
1971 		return -EINVAL;
1972 	}
1973 
1974 	status = dsp_allocate_router_ports(codec, num_chans,
1975 					   rate_multi, 0, port_map);
1976 
1977 	snd_printdd(KERN_INFO "     dsp_allocate_ports() -- complete\n");
1978 
1979 	return status;
1980 }
1981 
1982 static int dsp_allocate_ports_format(struct hda_codec *codec,
1983 			const unsigned short fmt,
1984 			unsigned int *port_map)
1985 {
1986 	int status;
1987 	unsigned int num_chans;
1988 
1989 	unsigned int sample_rate_div = ((get_hdafmt_rate(fmt) >> 0) & 3) + 1;
1990 	unsigned int sample_rate_mul = ((get_hdafmt_rate(fmt) >> 3) & 3) + 1;
1991 	unsigned int rate_multi = sample_rate_mul / sample_rate_div;
1992 
1993 	if ((rate_multi != 1) && (rate_multi != 2) && (rate_multi != 4)) {
1994 		snd_printdd(KERN_ERR "bad rate multiple\n");
1995 		return -EINVAL;
1996 	}
1997 
1998 	num_chans = get_hdafmt_chs(fmt) + 1;
1999 
2000 	status = dsp_allocate_ports(codec, num_chans, rate_multi, port_map);
2001 
2002 	return status;
2003 }
2004 
2005 /*
2006  * free DSP ports
2007  */
2008 static int dsp_free_ports(struct hda_codec *codec)
2009 {
2010 	int status;
2011 
2012 	snd_printdd(KERN_INFO "     dsp_free_ports() -- begin\n");
2013 
2014 	status = dsp_free_router_ports(codec);
2015 	if (status < 0) {
2016 		snd_printdd(KERN_ERR "free router ports fail\n");
2017 		return status;
2018 	}
2019 	snd_printdd(KERN_INFO "     dsp_free_ports() -- complete\n");
2020 
2021 	return status;
2022 }
2023 
2024 /*
2025  *  HDA DMA engine stuffs for DSP code download
2026  */
2027 struct dma_engine {
2028 	struct hda_codec *codec;
2029 	unsigned short m_converter_format;
2030 	struct snd_dma_buffer *dmab;
2031 	unsigned int buf_size;
2032 };
2033 
2034 
2035 enum dma_state {
2036 	DMA_STATE_STOP  = 0,
2037 	DMA_STATE_RUN   = 1
2038 };
2039 
2040 static int dma_convert_to_hda_format(
2041 		unsigned int sample_rate,
2042 		unsigned short channels,
2043 		unsigned short *hda_format)
2044 {
2045 	unsigned int format_val;
2046 
2047 	format_val = snd_hda_calc_stream_format(
2048 				sample_rate,
2049 				channels,
2050 				SNDRV_PCM_FORMAT_S32_LE,
2051 				32, 0);
2052 
2053 	if (hda_format)
2054 		*hda_format = (unsigned short)format_val;
2055 
2056 	return 0;
2057 }
2058 
2059 /*
2060  *  Reset DMA for DSP download
2061  */
2062 static int dma_reset(struct dma_engine *dma)
2063 {
2064 	struct hda_codec *codec = dma->codec;
2065 	struct ca0132_spec *spec = codec->spec;
2066 	int status;
2067 
2068 	if (dma->dmab->area)
2069 		snd_hda_codec_load_dsp_cleanup(codec, dma->dmab);
2070 
2071 	status = snd_hda_codec_load_dsp_prepare(codec,
2072 			dma->m_converter_format,
2073 			dma->buf_size,
2074 			dma->dmab);
2075 	if (status < 0)
2076 		return status;
2077 	spec->dsp_stream_id = status;
2078 	return 0;
2079 }
2080 
2081 static int dma_set_state(struct dma_engine *dma, enum dma_state state)
2082 {
2083 	bool cmd;
2084 
2085 	snd_printdd("dma_set_state state=%d\n", state);
2086 
2087 	switch (state) {
2088 	case DMA_STATE_STOP:
2089 		cmd = false;
2090 		break;
2091 	case DMA_STATE_RUN:
2092 		cmd = true;
2093 		break;
2094 	default:
2095 		return 0;
2096 	}
2097 
2098 	snd_hda_codec_load_dsp_trigger(dma->codec, cmd);
2099 	return 0;
2100 }
2101 
2102 static unsigned int dma_get_buffer_size(struct dma_engine *dma)
2103 {
2104 	return dma->dmab->bytes;
2105 }
2106 
2107 static unsigned char *dma_get_buffer_addr(struct dma_engine *dma)
2108 {
2109 	return dma->dmab->area;
2110 }
2111 
2112 static int dma_xfer(struct dma_engine *dma,
2113 		const unsigned int *data,
2114 		unsigned int count)
2115 {
2116 	memcpy(dma->dmab->area, data, count);
2117 	return 0;
2118 }
2119 
2120 static void dma_get_converter_format(
2121 		struct dma_engine *dma,
2122 		unsigned short *format)
2123 {
2124 	if (format)
2125 		*format = dma->m_converter_format;
2126 }
2127 
2128 static unsigned int dma_get_stream_id(struct dma_engine *dma)
2129 {
2130 	struct ca0132_spec *spec = dma->codec->spec;
2131 
2132 	return spec->dsp_stream_id;
2133 }
2134 
2135 struct dsp_image_seg {
2136 	u32 magic;
2137 	u32 chip_addr;
2138 	u32 count;
2139 	u32 data[0];
2140 };
2141 
2142 static const u32 g_magic_value = 0x4c46584d;
2143 static const u32 g_chip_addr_magic_value = 0xFFFFFF01;
2144 
2145 static bool is_valid(const struct dsp_image_seg *p)
2146 {
2147 	return p->magic == g_magic_value;
2148 }
2149 
2150 static bool is_hci_prog_list_seg(const struct dsp_image_seg *p)
2151 {
2152 	return g_chip_addr_magic_value == p->chip_addr;
2153 }
2154 
2155 static bool is_last(const struct dsp_image_seg *p)
2156 {
2157 	return p->count == 0;
2158 }
2159 
2160 static size_t dsp_sizeof(const struct dsp_image_seg *p)
2161 {
2162 	return sizeof(*p) + p->count*sizeof(u32);
2163 }
2164 
2165 static const struct dsp_image_seg *get_next_seg_ptr(
2166 				const struct dsp_image_seg *p)
2167 {
2168 	return (struct dsp_image_seg *)((unsigned char *)(p) + dsp_sizeof(p));
2169 }
2170 
2171 /*
2172  * CA0132 chip DSP transfer stuffs.  For DSP download.
2173  */
2174 #define INVALID_DMA_CHANNEL (~0U)
2175 
2176 /*
2177  * Program a list of address/data pairs via the ChipIO widget.
2178  * The segment data is in the format of successive pairs of words.
2179  * These are repeated as indicated by the segment's count field.
2180  */
2181 static int dspxfr_hci_write(struct hda_codec *codec,
2182 			const struct dsp_image_seg *fls)
2183 {
2184 	int status;
2185 	const u32 *data;
2186 	unsigned int count;
2187 
2188 	if (fls == NULL || fls->chip_addr != g_chip_addr_magic_value) {
2189 		snd_printdd(KERN_ERR "hci_write invalid params\n");
2190 		return -EINVAL;
2191 	}
2192 
2193 	count = fls->count;
2194 	data = (u32 *)(fls->data);
2195 	while (count >= 2) {
2196 		status = chipio_write(codec, data[0], data[1]);
2197 		if (status < 0) {
2198 			snd_printdd(KERN_ERR "hci_write chipio failed\n");
2199 			return status;
2200 		}
2201 		count -= 2;
2202 		data  += 2;
2203 	}
2204 	return 0;
2205 }
2206 
2207 /**
2208  * Write a block of data into DSP code or data RAM using pre-allocated
2209  * DMA engine.
2210  *
2211  * @codec: the HDA codec
2212  * @fls: pointer to a fast load image
2213  * @reloc: Relocation address for loading single-segment overlays, or 0 for
2214  *	   no relocation
2215  * @dma_engine: pointer to DMA engine to be used for DSP download
2216  * @dma_chan: The number of DMA channels used for DSP download
2217  * @port_map_mask: port mapping
2218  * @ovly: TRUE if overlay format is required
2219  *
2220  * Returns zero or a negative error code.
2221  */
2222 static int dspxfr_one_seg(struct hda_codec *codec,
2223 			const struct dsp_image_seg *fls,
2224 			unsigned int reloc,
2225 			struct dma_engine *dma_engine,
2226 			unsigned int dma_chan,
2227 			unsigned int port_map_mask,
2228 			bool ovly)
2229 {
2230 	int status = 0;
2231 	bool comm_dma_setup_done = false;
2232 	const unsigned int *data;
2233 	unsigned int chip_addx;
2234 	unsigned int words_to_write;
2235 	unsigned int buffer_size_words;
2236 	unsigned char *buffer_addx;
2237 	unsigned short hda_format;
2238 	unsigned int sample_rate_div;
2239 	unsigned int sample_rate_mul;
2240 	unsigned int num_chans;
2241 	unsigned int hda_frame_size_words;
2242 	unsigned int remainder_words;
2243 	const u32 *data_remainder;
2244 	u32 chip_addx_remainder;
2245 	unsigned int run_size_words;
2246 	const struct dsp_image_seg *hci_write = NULL;
2247 	unsigned long timeout;
2248 	bool dma_active;
2249 
2250 	if (fls == NULL)
2251 		return -EINVAL;
2252 	if (is_hci_prog_list_seg(fls)) {
2253 		hci_write = fls;
2254 		fls = get_next_seg_ptr(fls);
2255 	}
2256 
2257 	if (hci_write && (!fls || is_last(fls))) {
2258 		snd_printdd("hci_write\n");
2259 		return dspxfr_hci_write(codec, hci_write);
2260 	}
2261 
2262 	if (fls == NULL || dma_engine == NULL || port_map_mask == 0) {
2263 		snd_printdd("Invalid Params\n");
2264 		return -EINVAL;
2265 	}
2266 
2267 	data = fls->data;
2268 	chip_addx = fls->chip_addr,
2269 	words_to_write = fls->count;
2270 
2271 	if (!words_to_write)
2272 		return hci_write ? dspxfr_hci_write(codec, hci_write) : 0;
2273 	if (reloc)
2274 		chip_addx = (chip_addx & (0xFFFF0000 << 2)) + (reloc << 2);
2275 
2276 	if (!UC_RANGE(chip_addx, words_to_write) &&
2277 	    !X_RANGE_ALL(chip_addx, words_to_write) &&
2278 	    !Y_RANGE_ALL(chip_addx, words_to_write)) {
2279 		snd_printdd("Invalid chip_addx Params\n");
2280 		return -EINVAL;
2281 	}
2282 
2283 	buffer_size_words = (unsigned int)dma_get_buffer_size(dma_engine) /
2284 					sizeof(u32);
2285 
2286 	buffer_addx = dma_get_buffer_addr(dma_engine);
2287 
2288 	if (buffer_addx == NULL) {
2289 		snd_printdd(KERN_ERR "dma_engine buffer NULL\n");
2290 		return -EINVAL;
2291 	}
2292 
2293 	dma_get_converter_format(dma_engine, &hda_format);
2294 	sample_rate_div = ((get_hdafmt_rate(hda_format) >> 0) & 3) + 1;
2295 	sample_rate_mul = ((get_hdafmt_rate(hda_format) >> 3) & 3) + 1;
2296 	num_chans = get_hdafmt_chs(hda_format) + 1;
2297 
2298 	hda_frame_size_words = ((sample_rate_div == 0) ? 0 :
2299 			(num_chans * sample_rate_mul / sample_rate_div));
2300 
2301 	buffer_size_words = min(buffer_size_words,
2302 				(unsigned int)(UC_RANGE(chip_addx, 1) ?
2303 				65536 : 32768));
2304 	buffer_size_words -= buffer_size_words % hda_frame_size_words;
2305 	snd_printdd(
2306 		   "chpadr=0x%08x frmsz=%u nchan=%u "
2307 		   "rate_mul=%u div=%u bufsz=%u\n",
2308 		   chip_addx, hda_frame_size_words, num_chans,
2309 		   sample_rate_mul, sample_rate_div, buffer_size_words);
2310 
2311 	if ((buffer_addx == NULL) || (hda_frame_size_words == 0) ||
2312 	    (buffer_size_words < hda_frame_size_words)) {
2313 		snd_printdd(KERN_ERR "dspxfr_one_seg:failed\n");
2314 		return -EINVAL;
2315 	}
2316 
2317 	remainder_words = words_to_write % hda_frame_size_words;
2318 	data_remainder = data;
2319 	chip_addx_remainder = chip_addx;
2320 
2321 	data += remainder_words;
2322 	chip_addx += remainder_words*sizeof(u32);
2323 	words_to_write -= remainder_words;
2324 
2325 	while (words_to_write != 0) {
2326 		run_size_words = min(buffer_size_words, words_to_write);
2327 		snd_printdd("dspxfr (seg loop)cnt=%u rs=%u remainder=%u\n",
2328 			    words_to_write, run_size_words, remainder_words);
2329 		dma_xfer(dma_engine, data, run_size_words*sizeof(u32));
2330 		if (!comm_dma_setup_done) {
2331 			status = dsp_dma_stop(codec, dma_chan, ovly);
2332 			if (status < 0)
2333 				return status;
2334 			status = dsp_dma_setup_common(codec, chip_addx,
2335 						dma_chan, port_map_mask, ovly);
2336 			if (status < 0)
2337 				return status;
2338 			comm_dma_setup_done = true;
2339 		}
2340 
2341 		status = dsp_dma_setup(codec, chip_addx,
2342 						run_size_words, dma_chan);
2343 		if (status < 0)
2344 			return status;
2345 		status = dsp_dma_start(codec, dma_chan, ovly);
2346 		if (status < 0)
2347 			return status;
2348 		if (!dsp_is_dma_active(codec, dma_chan)) {
2349 			snd_printdd(KERN_ERR "dspxfr:DMA did not start\n");
2350 			return -EIO;
2351 		}
2352 		status = dma_set_state(dma_engine, DMA_STATE_RUN);
2353 		if (status < 0)
2354 			return status;
2355 		if (remainder_words != 0) {
2356 			status = chipio_write_multiple(codec,
2357 						chip_addx_remainder,
2358 						data_remainder,
2359 						remainder_words);
2360 			if (status < 0)
2361 				return status;
2362 			remainder_words = 0;
2363 		}
2364 		if (hci_write) {
2365 			status = dspxfr_hci_write(codec, hci_write);
2366 			if (status < 0)
2367 				return status;
2368 			hci_write = NULL;
2369 		}
2370 
2371 		timeout = jiffies + msecs_to_jiffies(2000);
2372 		do {
2373 			dma_active = dsp_is_dma_active(codec, dma_chan);
2374 			if (!dma_active)
2375 				break;
2376 			msleep(20);
2377 		} while (time_before(jiffies, timeout));
2378 		if (dma_active)
2379 			break;
2380 
2381 		snd_printdd(KERN_INFO "+++++ DMA complete\n");
2382 		dma_set_state(dma_engine, DMA_STATE_STOP);
2383 		status = dma_reset(dma_engine);
2384 
2385 		if (status < 0)
2386 			return status;
2387 
2388 		data += run_size_words;
2389 		chip_addx += run_size_words*sizeof(u32);
2390 		words_to_write -= run_size_words;
2391 	}
2392 
2393 	if (remainder_words != 0) {
2394 		status = chipio_write_multiple(codec, chip_addx_remainder,
2395 					data_remainder, remainder_words);
2396 	}
2397 
2398 	return status;
2399 }
2400 
2401 /**
2402  * Write the entire DSP image of a DSP code/data overlay to DSP memories
2403  *
2404  * @codec: the HDA codec
2405  * @fls_data: pointer to a fast load image
2406  * @reloc: Relocation address for loading single-segment overlays, or 0 for
2407  *	   no relocation
2408  * @sample_rate: sampling rate of the stream used for DSP download
2409  * @number_channels: channels of the stream used for DSP download
2410  * @ovly: TRUE if overlay format is required
2411  *
2412  * Returns zero or a negative error code.
2413  */
2414 static int dspxfr_image(struct hda_codec *codec,
2415 			const struct dsp_image_seg *fls_data,
2416 			unsigned int reloc,
2417 			unsigned int sample_rate,
2418 			unsigned short channels,
2419 			bool ovly)
2420 {
2421 	struct ca0132_spec *spec = codec->spec;
2422 	int status;
2423 	unsigned short hda_format = 0;
2424 	unsigned int response;
2425 	unsigned char stream_id = 0;
2426 	struct dma_engine *dma_engine;
2427 	unsigned int dma_chan;
2428 	unsigned int port_map_mask;
2429 
2430 	if (fls_data == NULL)
2431 		return -EINVAL;
2432 
2433 	dma_engine = kzalloc(sizeof(*dma_engine), GFP_KERNEL);
2434 	if (!dma_engine)
2435 		return -ENOMEM;
2436 
2437 	dma_engine->dmab = kzalloc(sizeof(*dma_engine->dmab), GFP_KERNEL);
2438 	if (!dma_engine->dmab) {
2439 		kfree(dma_engine);
2440 		return -ENOMEM;
2441 	}
2442 
2443 	dma_engine->codec = codec;
2444 	dma_convert_to_hda_format(sample_rate, channels, &hda_format);
2445 	dma_engine->m_converter_format = hda_format;
2446 	dma_engine->buf_size = (ovly ? DSP_DMA_WRITE_BUFLEN_OVLY :
2447 			DSP_DMA_WRITE_BUFLEN_INIT) * 2;
2448 
2449 	dma_chan = ovly ? INVALID_DMA_CHANNEL : 0;
2450 
2451 	status = codec_set_converter_format(codec, WIDGET_CHIP_CTRL,
2452 					hda_format, &response);
2453 
2454 	if (status < 0) {
2455 		snd_printdd(KERN_ERR "set converter format fail\n");
2456 		goto exit;
2457 	}
2458 
2459 	status = snd_hda_codec_load_dsp_prepare(codec,
2460 				dma_engine->m_converter_format,
2461 				dma_engine->buf_size,
2462 				dma_engine->dmab);
2463 	if (status < 0)
2464 		goto exit;
2465 	spec->dsp_stream_id = status;
2466 
2467 	if (ovly) {
2468 		status = dspio_alloc_dma_chan(codec, &dma_chan);
2469 		if (status < 0) {
2470 			snd_printdd(KERN_ERR "alloc dmachan fail\n");
2471 			dma_chan = INVALID_DMA_CHANNEL;
2472 			goto exit;
2473 		}
2474 	}
2475 
2476 	port_map_mask = 0;
2477 	status = dsp_allocate_ports_format(codec, hda_format,
2478 					&port_map_mask);
2479 	if (status < 0) {
2480 		snd_printdd(KERN_ERR "alloc ports fail\n");
2481 		goto exit;
2482 	}
2483 
2484 	stream_id = dma_get_stream_id(dma_engine);
2485 	status = codec_set_converter_stream_channel(codec,
2486 			WIDGET_CHIP_CTRL, stream_id, 0, &response);
2487 	if (status < 0) {
2488 		snd_printdd(KERN_ERR "set stream chan fail\n");
2489 		goto exit;
2490 	}
2491 
2492 	while ((fls_data != NULL) && !is_last(fls_data)) {
2493 		if (!is_valid(fls_data)) {
2494 			snd_printdd(KERN_ERR "FLS check fail\n");
2495 			status = -EINVAL;
2496 			goto exit;
2497 		}
2498 		status = dspxfr_one_seg(codec, fls_data, reloc,
2499 					dma_engine, dma_chan,
2500 					port_map_mask, ovly);
2501 		if (status < 0)
2502 			break;
2503 
2504 		if (is_hci_prog_list_seg(fls_data))
2505 			fls_data = get_next_seg_ptr(fls_data);
2506 
2507 		if ((fls_data != NULL) && !is_last(fls_data))
2508 			fls_data = get_next_seg_ptr(fls_data);
2509 	}
2510 
2511 	if (port_map_mask != 0)
2512 		status = dsp_free_ports(codec);
2513 
2514 	if (status < 0)
2515 		goto exit;
2516 
2517 	status = codec_set_converter_stream_channel(codec,
2518 				WIDGET_CHIP_CTRL, 0, 0, &response);
2519 
2520 exit:
2521 	if (ovly && (dma_chan != INVALID_DMA_CHANNEL))
2522 		dspio_free_dma_chan(codec, dma_chan);
2523 
2524 	if (dma_engine->dmab->area)
2525 		snd_hda_codec_load_dsp_cleanup(codec, dma_engine->dmab);
2526 	kfree(dma_engine->dmab);
2527 	kfree(dma_engine);
2528 
2529 	return status;
2530 }
2531 
2532 /*
2533  * CA0132 DSP download stuffs.
2534  */
2535 static void dspload_post_setup(struct hda_codec *codec)
2536 {
2537 	snd_printdd(KERN_INFO "---- dspload_post_setup ------\n");
2538 
2539 	/*set DSP speaker to 2.0 configuration*/
2540 	chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x18), 0x08080080);
2541 	chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x19), 0x3f800000);
2542 
2543 	/*update write pointer*/
2544 	chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x29), 0x00000002);
2545 }
2546 
2547 /**
2548  * Download DSP from a DSP Image Fast Load structure. This structure is a
2549  * linear, non-constant sized element array of structures, each of which
2550  * contain the count of the data to be loaded, the data itself, and the
2551  * corresponding starting chip address of the starting data location.
2552  *
2553  * @codec: the HDA codec
2554  * @fls: pointer to a fast load image
2555  * @ovly: TRUE if overlay format is required
2556  * @reloc: Relocation address for loading single-segment overlays, or 0 for
2557  *	   no relocation
2558  * @autostart: TRUE if DSP starts after loading; ignored if ovly is TRUE
2559  * @router_chans: number of audio router channels to be allocated (0 means use
2560  *		  internal defaults; max is 32)
2561  *
2562  * Returns zero or a negative error code.
2563  */
2564 static int dspload_image(struct hda_codec *codec,
2565 			const struct dsp_image_seg *fls,
2566 			bool ovly,
2567 			unsigned int reloc,
2568 			bool autostart,
2569 			int router_chans)
2570 {
2571 	int status = 0;
2572 	unsigned int sample_rate;
2573 	unsigned short channels;
2574 
2575 	snd_printdd(KERN_INFO "---- dspload_image begin ------\n");
2576 	if (router_chans == 0) {
2577 		if (!ovly)
2578 			router_chans = DMA_TRANSFER_FRAME_SIZE_NWORDS;
2579 		else
2580 			router_chans = DMA_OVERLAY_FRAME_SIZE_NWORDS;
2581 	}
2582 
2583 	sample_rate = 48000;
2584 	channels = (unsigned short)router_chans;
2585 
2586 	while (channels > 16) {
2587 		sample_rate *= 2;
2588 		channels /= 2;
2589 	}
2590 
2591 	do {
2592 		snd_printdd(KERN_INFO "Ready to program DMA\n");
2593 		if (!ovly)
2594 			status = dsp_reset(codec);
2595 
2596 		if (status < 0)
2597 			break;
2598 
2599 		snd_printdd(KERN_INFO "dsp_reset() complete\n");
2600 		status = dspxfr_image(codec, fls, reloc, sample_rate, channels,
2601 				      ovly);
2602 
2603 		if (status < 0)
2604 			break;
2605 
2606 		snd_printdd(KERN_INFO "dspxfr_image() complete\n");
2607 		if (autostart && !ovly) {
2608 			dspload_post_setup(codec);
2609 			status = dsp_set_run_state(codec);
2610 		}
2611 
2612 		snd_printdd(KERN_INFO "LOAD FINISHED\n");
2613 	} while (0);
2614 
2615 	return status;
2616 }
2617 
2618 #ifdef CONFIG_SND_HDA_CODEC_CA0132_DSP
2619 static bool dspload_is_loaded(struct hda_codec *codec)
2620 {
2621 	unsigned int data = 0;
2622 	int status = 0;
2623 
2624 	status = chipio_read(codec, 0x40004, &data);
2625 	if ((status < 0) || (data != 1))
2626 		return false;
2627 
2628 	return true;
2629 }
2630 #else
2631 #define dspload_is_loaded(codec)	false
2632 #endif
2633 
2634 static bool dspload_wait_loaded(struct hda_codec *codec)
2635 {
2636 	unsigned long timeout = jiffies + msecs_to_jiffies(2000);
2637 
2638 	do {
2639 		if (dspload_is_loaded(codec)) {
2640 			pr_info("ca0132 DOWNLOAD OK :-) DSP IS RUNNING.\n");
2641 			return true;
2642 		}
2643 		msleep(20);
2644 	} while (time_before(jiffies, timeout));
2645 
2646 	pr_err("ca0132 DOWNLOAD FAILED!!! DSP IS NOT RUNNING.\n");
2647 	return false;
2648 }
2649 
2650 /*
2651  * PCM stuffs
2652  */
2653 static void ca0132_setup_stream(struct hda_codec *codec, hda_nid_t nid,
2654 				 u32 stream_tag,
2655 				 int channel_id, int format)
2656 {
2657 	unsigned int oldval, newval;
2658 
2659 	if (!nid)
2660 		return;
2661 
2662 	snd_printdd(
2663 		   "ca0132_setup_stream: NID=0x%x, stream=0x%x, "
2664 		   "channel=%d, format=0x%x\n",
2665 		   nid, stream_tag, channel_id, format);
2666 
2667 	/* update the format-id if changed */
2668 	oldval = snd_hda_codec_read(codec, nid, 0,
2669 				    AC_VERB_GET_STREAM_FORMAT,
2670 				    0);
2671 	if (oldval != format) {
2672 		msleep(20);
2673 		snd_hda_codec_write(codec, nid, 0,
2674 				    AC_VERB_SET_STREAM_FORMAT,
2675 				    format);
2676 	}
2677 
2678 	oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
2679 	newval = (stream_tag << 4) | channel_id;
2680 	if (oldval != newval) {
2681 		snd_hda_codec_write(codec, nid, 0,
2682 				    AC_VERB_SET_CHANNEL_STREAMID,
2683 				    newval);
2684 	}
2685 }
2686 
2687 static void ca0132_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
2688 {
2689 	unsigned int val;
2690 
2691 	if (!nid)
2692 		return;
2693 
2694 	snd_printdd(KERN_INFO "ca0132_cleanup_stream: NID=0x%x\n", nid);
2695 
2696 	val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
2697 	if (!val)
2698 		return;
2699 
2700 	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
2701 	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
2702 }
2703 
2704 /*
2705  * PCM callbacks
2706  */
2707 static int ca0132_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
2708 			struct hda_codec *codec,
2709 			unsigned int stream_tag,
2710 			unsigned int format,
2711 			struct snd_pcm_substream *substream)
2712 {
2713 	struct ca0132_spec *spec = codec->spec;
2714 
2715 	ca0132_setup_stream(codec, spec->dacs[0], stream_tag, 0, format);
2716 
2717 	return 0;
2718 }
2719 
2720 static int ca0132_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
2721 			struct hda_codec *codec,
2722 			struct snd_pcm_substream *substream)
2723 {
2724 	struct ca0132_spec *spec = codec->spec;
2725 
2726 	if (spec->dsp_state == DSP_DOWNLOADING)
2727 		return 0;
2728 
2729 	/*If Playback effects are on, allow stream some time to flush
2730 	 *effects tail*/
2731 	if (spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID])
2732 		msleep(50);
2733 
2734 	ca0132_cleanup_stream(codec, spec->dacs[0]);
2735 
2736 	return 0;
2737 }
2738 
2739 /*
2740  * Digital out
2741  */
2742 static int ca0132_dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
2743 					struct hda_codec *codec,
2744 					struct snd_pcm_substream *substream)
2745 {
2746 	struct ca0132_spec *spec = codec->spec;
2747 	return snd_hda_multi_out_dig_open(codec, &spec->multiout);
2748 }
2749 
2750 static int ca0132_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
2751 			struct hda_codec *codec,
2752 			unsigned int stream_tag,
2753 			unsigned int format,
2754 			struct snd_pcm_substream *substream)
2755 {
2756 	struct ca0132_spec *spec = codec->spec;
2757 	return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
2758 					     stream_tag, format, substream);
2759 }
2760 
2761 static int ca0132_dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
2762 			struct hda_codec *codec,
2763 			struct snd_pcm_substream *substream)
2764 {
2765 	struct ca0132_spec *spec = codec->spec;
2766 	return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
2767 }
2768 
2769 static int ca0132_dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
2770 					 struct hda_codec *codec,
2771 					 struct snd_pcm_substream *substream)
2772 {
2773 	struct ca0132_spec *spec = codec->spec;
2774 	return snd_hda_multi_out_dig_close(codec, &spec->multiout);
2775 }
2776 
2777 /*
2778  * Analog capture
2779  */
2780 static int ca0132_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
2781 					struct hda_codec *codec,
2782 					unsigned int stream_tag,
2783 					unsigned int format,
2784 					struct snd_pcm_substream *substream)
2785 {
2786 	struct ca0132_spec *spec = codec->spec;
2787 
2788 	ca0132_setup_stream(codec, spec->adcs[substream->number],
2789 			    stream_tag, 0, format);
2790 
2791 	return 0;
2792 }
2793 
2794 static int ca0132_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
2795 			struct hda_codec *codec,
2796 			struct snd_pcm_substream *substream)
2797 {
2798 	struct ca0132_spec *spec = codec->spec;
2799 
2800 	if (spec->dsp_state == DSP_DOWNLOADING)
2801 		return 0;
2802 
2803 	ca0132_cleanup_stream(codec, hinfo->nid);
2804 	return 0;
2805 }
2806 
2807 /*
2808  * Controls stuffs.
2809  */
2810 
2811 /*
2812  * Mixer controls helpers.
2813  */
2814 #define CA0132_CODEC_VOL_MONO(xname, nid, channel, dir) \
2815 	{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2816 	  .name = xname, \
2817 	  .subdevice = HDA_SUBDEV_AMP_FLAG, \
2818 	  .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | \
2819 			SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
2820 			SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK, \
2821 	  .info = ca0132_volume_info, \
2822 	  .get = ca0132_volume_get, \
2823 	  .put = ca0132_volume_put, \
2824 	  .tlv = { .c = ca0132_volume_tlv }, \
2825 	  .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, 0, dir) }
2826 
2827 #define CA0132_CODEC_MUTE_MONO(xname, nid, channel, dir) \
2828 	{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2829 	  .name = xname, \
2830 	  .subdevice = HDA_SUBDEV_AMP_FLAG, \
2831 	  .info = snd_hda_mixer_amp_switch_info, \
2832 	  .get = ca0132_switch_get, \
2833 	  .put = ca0132_switch_put, \
2834 	  .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, 0, dir) }
2835 
2836 /* stereo */
2837 #define CA0132_CODEC_VOL(xname, nid, dir) \
2838 	CA0132_CODEC_VOL_MONO(xname, nid, 3, dir)
2839 #define CA0132_CODEC_MUTE(xname, nid, dir) \
2840 	CA0132_CODEC_MUTE_MONO(xname, nid, 3, dir)
2841 
2842 /* The followings are for tuning of products */
2843 #ifdef ENABLE_TUNING_CONTROLS
2844 
2845 static unsigned int voice_focus_vals_lookup[] = {
2846 0x41A00000, 0x41A80000, 0x41B00000, 0x41B80000, 0x41C00000, 0x41C80000,
2847 0x41D00000, 0x41D80000, 0x41E00000, 0x41E80000, 0x41F00000, 0x41F80000,
2848 0x42000000, 0x42040000, 0x42080000, 0x420C0000, 0x42100000, 0x42140000,
2849 0x42180000, 0x421C0000, 0x42200000, 0x42240000, 0x42280000, 0x422C0000,
2850 0x42300000, 0x42340000, 0x42380000, 0x423C0000, 0x42400000, 0x42440000,
2851 0x42480000, 0x424C0000, 0x42500000, 0x42540000, 0x42580000, 0x425C0000,
2852 0x42600000, 0x42640000, 0x42680000, 0x426C0000, 0x42700000, 0x42740000,
2853 0x42780000, 0x427C0000, 0x42800000, 0x42820000, 0x42840000, 0x42860000,
2854 0x42880000, 0x428A0000, 0x428C0000, 0x428E0000, 0x42900000, 0x42920000,
2855 0x42940000, 0x42960000, 0x42980000, 0x429A0000, 0x429C0000, 0x429E0000,
2856 0x42A00000, 0x42A20000, 0x42A40000, 0x42A60000, 0x42A80000, 0x42AA0000,
2857 0x42AC0000, 0x42AE0000, 0x42B00000, 0x42B20000, 0x42B40000, 0x42B60000,
2858 0x42B80000, 0x42BA0000, 0x42BC0000, 0x42BE0000, 0x42C00000, 0x42C20000,
2859 0x42C40000, 0x42C60000, 0x42C80000, 0x42CA0000, 0x42CC0000, 0x42CE0000,
2860 0x42D00000, 0x42D20000, 0x42D40000, 0x42D60000, 0x42D80000, 0x42DA0000,
2861 0x42DC0000, 0x42DE0000, 0x42E00000, 0x42E20000, 0x42E40000, 0x42E60000,
2862 0x42E80000, 0x42EA0000, 0x42EC0000, 0x42EE0000, 0x42F00000, 0x42F20000,
2863 0x42F40000, 0x42F60000, 0x42F80000, 0x42FA0000, 0x42FC0000, 0x42FE0000,
2864 0x43000000, 0x43010000, 0x43020000, 0x43030000, 0x43040000, 0x43050000,
2865 0x43060000, 0x43070000, 0x43080000, 0x43090000, 0x430A0000, 0x430B0000,
2866 0x430C0000, 0x430D0000, 0x430E0000, 0x430F0000, 0x43100000, 0x43110000,
2867 0x43120000, 0x43130000, 0x43140000, 0x43150000, 0x43160000, 0x43170000,
2868 0x43180000, 0x43190000, 0x431A0000, 0x431B0000, 0x431C0000, 0x431D0000,
2869 0x431E0000, 0x431F0000, 0x43200000, 0x43210000, 0x43220000, 0x43230000,
2870 0x43240000, 0x43250000, 0x43260000, 0x43270000, 0x43280000, 0x43290000,
2871 0x432A0000, 0x432B0000, 0x432C0000, 0x432D0000, 0x432E0000, 0x432F0000,
2872 0x43300000, 0x43310000, 0x43320000, 0x43330000, 0x43340000
2873 };
2874 
2875 static unsigned int mic_svm_vals_lookup[] = {
2876 0x00000000, 0x3C23D70A, 0x3CA3D70A, 0x3CF5C28F, 0x3D23D70A, 0x3D4CCCCD,
2877 0x3D75C28F, 0x3D8F5C29, 0x3DA3D70A, 0x3DB851EC, 0x3DCCCCCD, 0x3DE147AE,
2878 0x3DF5C28F, 0x3E051EB8, 0x3E0F5C29, 0x3E19999A, 0x3E23D70A, 0x3E2E147B,
2879 0x3E3851EC, 0x3E428F5C, 0x3E4CCCCD, 0x3E570A3D, 0x3E6147AE, 0x3E6B851F,
2880 0x3E75C28F, 0x3E800000, 0x3E851EB8, 0x3E8A3D71, 0x3E8F5C29, 0x3E947AE1,
2881 0x3E99999A, 0x3E9EB852, 0x3EA3D70A, 0x3EA8F5C3, 0x3EAE147B, 0x3EB33333,
2882 0x3EB851EC, 0x3EBD70A4, 0x3EC28F5C, 0x3EC7AE14, 0x3ECCCCCD, 0x3ED1EB85,
2883 0x3ED70A3D, 0x3EDC28F6, 0x3EE147AE, 0x3EE66666, 0x3EEB851F, 0x3EF0A3D7,
2884 0x3EF5C28F, 0x3EFAE148, 0x3F000000, 0x3F028F5C, 0x3F051EB8, 0x3F07AE14,
2885 0x3F0A3D71, 0x3F0CCCCD, 0x3F0F5C29, 0x3F11EB85, 0x3F147AE1, 0x3F170A3D,
2886 0x3F19999A, 0x3F1C28F6, 0x3F1EB852, 0x3F2147AE, 0x3F23D70A, 0x3F266666,
2887 0x3F28F5C3, 0x3F2B851F, 0x3F2E147B, 0x3F30A3D7, 0x3F333333, 0x3F35C28F,
2888 0x3F3851EC, 0x3F3AE148, 0x3F3D70A4, 0x3F400000, 0x3F428F5C, 0x3F451EB8,
2889 0x3F47AE14, 0x3F4A3D71, 0x3F4CCCCD, 0x3F4F5C29, 0x3F51EB85, 0x3F547AE1,
2890 0x3F570A3D, 0x3F59999A, 0x3F5C28F6, 0x3F5EB852, 0x3F6147AE, 0x3F63D70A,
2891 0x3F666666, 0x3F68F5C3, 0x3F6B851F, 0x3F6E147B, 0x3F70A3D7, 0x3F733333,
2892 0x3F75C28F, 0x3F7851EC, 0x3F7AE148, 0x3F7D70A4, 0x3F800000
2893 };
2894 
2895 static unsigned int equalizer_vals_lookup[] = {
2896 0xC1C00000, 0xC1B80000, 0xC1B00000, 0xC1A80000, 0xC1A00000, 0xC1980000,
2897 0xC1900000, 0xC1880000, 0xC1800000, 0xC1700000, 0xC1600000, 0xC1500000,
2898 0xC1400000, 0xC1300000, 0xC1200000, 0xC1100000, 0xC1000000, 0xC0E00000,
2899 0xC0C00000, 0xC0A00000, 0xC0800000, 0xC0400000, 0xC0000000, 0xBF800000,
2900 0x00000000, 0x3F800000, 0x40000000, 0x40400000, 0x40800000, 0x40A00000,
2901 0x40C00000, 0x40E00000, 0x41000000, 0x41100000, 0x41200000, 0x41300000,
2902 0x41400000, 0x41500000, 0x41600000, 0x41700000, 0x41800000, 0x41880000,
2903 0x41900000, 0x41980000, 0x41A00000, 0x41A80000, 0x41B00000, 0x41B80000,
2904 0x41C00000
2905 };
2906 
2907 static int tuning_ctl_set(struct hda_codec *codec, hda_nid_t nid,
2908 			  unsigned int *lookup, int idx)
2909 {
2910 	int i = 0;
2911 
2912 	for (i = 0; i < TUNING_CTLS_COUNT; i++)
2913 		if (nid == ca0132_tuning_ctls[i].nid)
2914 			break;
2915 
2916 	snd_hda_power_up(codec);
2917 	dspio_set_param(codec, ca0132_tuning_ctls[i].mid,
2918 			ca0132_tuning_ctls[i].req,
2919 			&(lookup[idx]), sizeof(unsigned int));
2920 	snd_hda_power_down(codec);
2921 
2922 	return 1;
2923 }
2924 
2925 static int tuning_ctl_get(struct snd_kcontrol *kcontrol,
2926 			  struct snd_ctl_elem_value *ucontrol)
2927 {
2928 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2929 	struct ca0132_spec *spec = codec->spec;
2930 	hda_nid_t nid = get_amp_nid(kcontrol);
2931 	long *valp = ucontrol->value.integer.value;
2932 	int idx = nid - TUNING_CTL_START_NID;
2933 
2934 	*valp = spec->cur_ctl_vals[idx];
2935 	return 0;
2936 }
2937 
2938 static int voice_focus_ctl_info(struct snd_kcontrol *kcontrol,
2939 			      struct snd_ctl_elem_info *uinfo)
2940 {
2941 	int chs = get_amp_channels(kcontrol);
2942 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2943 	uinfo->count = chs == 3 ? 2 : 1;
2944 	uinfo->value.integer.min = 20;
2945 	uinfo->value.integer.max = 180;
2946 	uinfo->value.integer.step = 1;
2947 
2948 	return 0;
2949 }
2950 
2951 static int voice_focus_ctl_put(struct snd_kcontrol *kcontrol,
2952 				struct snd_ctl_elem_value *ucontrol)
2953 {
2954 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2955 	struct ca0132_spec *spec = codec->spec;
2956 	hda_nid_t nid = get_amp_nid(kcontrol);
2957 	long *valp = ucontrol->value.integer.value;
2958 	int idx;
2959 
2960 	idx = nid - TUNING_CTL_START_NID;
2961 	/* any change? */
2962 	if (spec->cur_ctl_vals[idx] == *valp)
2963 		return 0;
2964 
2965 	spec->cur_ctl_vals[idx] = *valp;
2966 
2967 	idx = *valp - 20;
2968 	tuning_ctl_set(codec, nid, voice_focus_vals_lookup, idx);
2969 
2970 	return 1;
2971 }
2972 
2973 static int mic_svm_ctl_info(struct snd_kcontrol *kcontrol,
2974 			      struct snd_ctl_elem_info *uinfo)
2975 {
2976 	int chs = get_amp_channels(kcontrol);
2977 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2978 	uinfo->count = chs == 3 ? 2 : 1;
2979 	uinfo->value.integer.min = 0;
2980 	uinfo->value.integer.max = 100;
2981 	uinfo->value.integer.step = 1;
2982 
2983 	return 0;
2984 }
2985 
2986 static int mic_svm_ctl_put(struct snd_kcontrol *kcontrol,
2987 				struct snd_ctl_elem_value *ucontrol)
2988 {
2989 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
2990 	struct ca0132_spec *spec = codec->spec;
2991 	hda_nid_t nid = get_amp_nid(kcontrol);
2992 	long *valp = ucontrol->value.integer.value;
2993 	int idx;
2994 
2995 	idx = nid - TUNING_CTL_START_NID;
2996 	/* any change? */
2997 	if (spec->cur_ctl_vals[idx] == *valp)
2998 		return 0;
2999 
3000 	spec->cur_ctl_vals[idx] = *valp;
3001 
3002 	idx = *valp;
3003 	tuning_ctl_set(codec, nid, mic_svm_vals_lookup, idx);
3004 
3005 	return 0;
3006 }
3007 
3008 static int equalizer_ctl_info(struct snd_kcontrol *kcontrol,
3009 			      struct snd_ctl_elem_info *uinfo)
3010 {
3011 	int chs = get_amp_channels(kcontrol);
3012 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
3013 	uinfo->count = chs == 3 ? 2 : 1;
3014 	uinfo->value.integer.min = 0;
3015 	uinfo->value.integer.max = 48;
3016 	uinfo->value.integer.step = 1;
3017 
3018 	return 0;
3019 }
3020 
3021 static int equalizer_ctl_put(struct snd_kcontrol *kcontrol,
3022 				struct snd_ctl_elem_value *ucontrol)
3023 {
3024 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3025 	struct ca0132_spec *spec = codec->spec;
3026 	hda_nid_t nid = get_amp_nid(kcontrol);
3027 	long *valp = ucontrol->value.integer.value;
3028 	int idx;
3029 
3030 	idx = nid - TUNING_CTL_START_NID;
3031 	/* any change? */
3032 	if (spec->cur_ctl_vals[idx] == *valp)
3033 		return 0;
3034 
3035 	spec->cur_ctl_vals[idx] = *valp;
3036 
3037 	idx = *valp;
3038 	tuning_ctl_set(codec, nid, equalizer_vals_lookup, idx);
3039 
3040 	return 1;
3041 }
3042 
3043 static const DECLARE_TLV_DB_SCALE(voice_focus_db_scale, 2000, 100, 0);
3044 static const DECLARE_TLV_DB_SCALE(eq_db_scale, -2400, 100, 0);
3045 
3046 static int add_tuning_control(struct hda_codec *codec,
3047 				hda_nid_t pnid, hda_nid_t nid,
3048 				const char *name, int dir)
3049 {
3050 	char namestr[44];
3051 	int type = dir ? HDA_INPUT : HDA_OUTPUT;
3052 	struct snd_kcontrol_new knew =
3053 		HDA_CODEC_VOLUME_MONO(namestr, nid, 1, 0, type);
3054 
3055 	knew.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
3056 			SNDRV_CTL_ELEM_ACCESS_TLV_READ;
3057 	knew.tlv.c = 0;
3058 	knew.tlv.p = 0;
3059 	switch (pnid) {
3060 	case VOICE_FOCUS:
3061 		knew.info = voice_focus_ctl_info;
3062 		knew.get = tuning_ctl_get;
3063 		knew.put = voice_focus_ctl_put;
3064 		knew.tlv.p = voice_focus_db_scale;
3065 		break;
3066 	case MIC_SVM:
3067 		knew.info = mic_svm_ctl_info;
3068 		knew.get = tuning_ctl_get;
3069 		knew.put = mic_svm_ctl_put;
3070 		break;
3071 	case EQUALIZER:
3072 		knew.info = equalizer_ctl_info;
3073 		knew.get = tuning_ctl_get;
3074 		knew.put = equalizer_ctl_put;
3075 		knew.tlv.p = eq_db_scale;
3076 		break;
3077 	default:
3078 		return 0;
3079 	}
3080 	knew.private_value =
3081 		HDA_COMPOSE_AMP_VAL(nid, 1, 0, type);
3082 	sprintf(namestr, "%s %s Volume", name, dirstr[dir]);
3083 	return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec));
3084 }
3085 
3086 static int add_tuning_ctls(struct hda_codec *codec)
3087 {
3088 	int i;
3089 	int err;
3090 
3091 	for (i = 0; i < TUNING_CTLS_COUNT; i++) {
3092 		err = add_tuning_control(codec,
3093 					ca0132_tuning_ctls[i].parent_nid,
3094 					ca0132_tuning_ctls[i].nid,
3095 					ca0132_tuning_ctls[i].name,
3096 					ca0132_tuning_ctls[i].direct);
3097 		if (err < 0)
3098 			return err;
3099 	}
3100 
3101 	return 0;
3102 }
3103 
3104 static void ca0132_init_tuning_defaults(struct hda_codec *codec)
3105 {
3106 	struct ca0132_spec *spec = codec->spec;
3107 	int i;
3108 
3109 	/* Wedge Angle defaults to 30.  10 below is 30 - 20.  20 is min. */
3110 	spec->cur_ctl_vals[WEDGE_ANGLE - TUNING_CTL_START_NID] = 10;
3111 	/* SVM level defaults to 0.74. */
3112 	spec->cur_ctl_vals[SVM_LEVEL - TUNING_CTL_START_NID] = 74;
3113 
3114 	/* EQ defaults to 0dB. */
3115 	for (i = 2; i < TUNING_CTLS_COUNT; i++)
3116 		spec->cur_ctl_vals[i] = 24;
3117 }
3118 #endif /*ENABLE_TUNING_CONTROLS*/
3119 
3120 /*
3121  * Select the active output.
3122  * If autodetect is enabled, output will be selected based on jack detection.
3123  * If jack inserted, headphone will be selected, else built-in speakers
3124  * If autodetect is disabled, output will be selected based on selection.
3125  */
3126 static int ca0132_select_out(struct hda_codec *codec)
3127 {
3128 	struct ca0132_spec *spec = codec->spec;
3129 	unsigned int pin_ctl;
3130 	int jack_present;
3131 	int auto_jack;
3132 	unsigned int tmp;
3133 	int err;
3134 
3135 	snd_printdd(KERN_INFO "ca0132_select_out\n");
3136 
3137 	snd_hda_power_up(codec);
3138 
3139 	auto_jack = spec->vnode_lswitch[VNID_HP_ASEL - VNODE_START_NID];
3140 
3141 	if (auto_jack)
3142 		jack_present = snd_hda_jack_detect(codec, spec->out_pins[1]);
3143 	else
3144 		jack_present =
3145 			spec->vnode_lswitch[VNID_HP_SEL - VNODE_START_NID];
3146 
3147 	if (jack_present)
3148 		spec->cur_out_type = HEADPHONE_OUT;
3149 	else
3150 		spec->cur_out_type = SPEAKER_OUT;
3151 
3152 	if (spec->cur_out_type == SPEAKER_OUT) {
3153 		snd_printdd(KERN_INFO "ca0132_select_out speaker\n");
3154 		/*speaker out config*/
3155 		tmp = FLOAT_ONE;
3156 		err = dspio_set_uint_param(codec, 0x80, 0x04, tmp);
3157 		if (err < 0)
3158 			goto exit;
3159 		/*enable speaker EQ*/
3160 		tmp = FLOAT_ONE;
3161 		err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp);
3162 		if (err < 0)
3163 			goto exit;
3164 
3165 		/* Setup EAPD */
3166 		snd_hda_codec_write(codec, spec->out_pins[1], 0,
3167 				    VENDOR_CHIPIO_EAPD_SEL_SET, 0x02);
3168 		snd_hda_codec_write(codec, spec->out_pins[0], 0,
3169 				    AC_VERB_SET_EAPD_BTLENABLE, 0x00);
3170 		snd_hda_codec_write(codec, spec->out_pins[0], 0,
3171 				    VENDOR_CHIPIO_EAPD_SEL_SET, 0x00);
3172 		snd_hda_codec_write(codec, spec->out_pins[0], 0,
3173 				    AC_VERB_SET_EAPD_BTLENABLE, 0x02);
3174 
3175 		/* disable headphone node */
3176 		pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0,
3177 					AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
3178 		snd_hda_set_pin_ctl(codec, spec->out_pins[1],
3179 				    pin_ctl & ~PIN_HP);
3180 		/* enable speaker node */
3181 		pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0,
3182 					     AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
3183 		snd_hda_set_pin_ctl(codec, spec->out_pins[0],
3184 				    pin_ctl | PIN_OUT);
3185 	} else {
3186 		snd_printdd(KERN_INFO "ca0132_select_out hp\n");
3187 		/*headphone out config*/
3188 		tmp = FLOAT_ZERO;
3189 		err = dspio_set_uint_param(codec, 0x80, 0x04, tmp);
3190 		if (err < 0)
3191 			goto exit;
3192 		/*disable speaker EQ*/
3193 		tmp = FLOAT_ZERO;
3194 		err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp);
3195 		if (err < 0)
3196 			goto exit;
3197 
3198 		/* Setup EAPD */
3199 		snd_hda_codec_write(codec, spec->out_pins[0], 0,
3200 				    VENDOR_CHIPIO_EAPD_SEL_SET, 0x00);
3201 		snd_hda_codec_write(codec, spec->out_pins[0], 0,
3202 				    AC_VERB_SET_EAPD_BTLENABLE, 0x00);
3203 		snd_hda_codec_write(codec, spec->out_pins[1], 0,
3204 				    VENDOR_CHIPIO_EAPD_SEL_SET, 0x02);
3205 		snd_hda_codec_write(codec, spec->out_pins[0], 0,
3206 				    AC_VERB_SET_EAPD_BTLENABLE, 0x02);
3207 
3208 		/* disable speaker*/
3209 		pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0,
3210 					AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
3211 		snd_hda_set_pin_ctl(codec, spec->out_pins[0],
3212 				    pin_ctl & ~PIN_HP);
3213 		/* enable headphone*/
3214 		pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0,
3215 					AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
3216 		snd_hda_set_pin_ctl(codec, spec->out_pins[1],
3217 				    pin_ctl | PIN_HP);
3218 	}
3219 
3220 exit:
3221 	snd_hda_power_down(codec);
3222 
3223 	return err < 0 ? err : 0;
3224 }
3225 
3226 static void ca0132_set_dmic(struct hda_codec *codec, int enable);
3227 static int ca0132_mic_boost_set(struct hda_codec *codec, long val);
3228 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val);
3229 
3230 /*
3231  * Select the active VIP source
3232  */
3233 static int ca0132_set_vipsource(struct hda_codec *codec, int val)
3234 {
3235 	struct ca0132_spec *spec = codec->spec;
3236 	unsigned int tmp;
3237 
3238 	if (!dspload_is_loaded(codec))
3239 		return 0;
3240 
3241 	/* if CrystalVoice if off, vipsource should be 0 */
3242 	if (!spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID] ||
3243 	    (val == 0)) {
3244 		chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0);
3245 		chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000);
3246 		chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000);
3247 		if (spec->cur_mic_type == DIGITAL_MIC)
3248 			tmp = FLOAT_TWO;
3249 		else
3250 			tmp = FLOAT_ONE;
3251 		dspio_set_uint_param(codec, 0x80, 0x00, tmp);
3252 		tmp = FLOAT_ZERO;
3253 		dspio_set_uint_param(codec, 0x80, 0x05, tmp);
3254 	} else {
3255 		chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000);
3256 		chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000);
3257 		if (spec->cur_mic_type == DIGITAL_MIC)
3258 			tmp = FLOAT_TWO;
3259 		else
3260 			tmp = FLOAT_ONE;
3261 		dspio_set_uint_param(codec, 0x80, 0x00, tmp);
3262 		tmp = FLOAT_ONE;
3263 		dspio_set_uint_param(codec, 0x80, 0x05, tmp);
3264 		msleep(20);
3265 		chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val);
3266 	}
3267 
3268 	return 1;
3269 }
3270 
3271 /*
3272  * Select the active microphone.
3273  * If autodetect is enabled, mic will be selected based on jack detection.
3274  * If jack inserted, ext.mic will be selected, else built-in mic
3275  * If autodetect is disabled, mic will be selected based on selection.
3276  */
3277 static int ca0132_select_mic(struct hda_codec *codec)
3278 {
3279 	struct ca0132_spec *spec = codec->spec;
3280 	int jack_present;
3281 	int auto_jack;
3282 
3283 	snd_printdd(KERN_INFO "ca0132_select_mic\n");
3284 
3285 	snd_hda_power_up(codec);
3286 
3287 	auto_jack = spec->vnode_lswitch[VNID_AMIC1_ASEL - VNODE_START_NID];
3288 
3289 	if (auto_jack)
3290 		jack_present = snd_hda_jack_detect(codec, spec->input_pins[0]);
3291 	else
3292 		jack_present =
3293 			spec->vnode_lswitch[VNID_AMIC1_SEL - VNODE_START_NID];
3294 
3295 	if (jack_present)
3296 		spec->cur_mic_type = LINE_MIC_IN;
3297 	else
3298 		spec->cur_mic_type = DIGITAL_MIC;
3299 
3300 	if (spec->cur_mic_type == DIGITAL_MIC) {
3301 		/* enable digital Mic */
3302 		chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_32_000);
3303 		ca0132_set_dmic(codec, 1);
3304 		ca0132_mic_boost_set(codec, 0);
3305 		/* set voice focus */
3306 		ca0132_effects_set(codec, VOICE_FOCUS,
3307 				   spec->effects_switch
3308 				   [VOICE_FOCUS - EFFECT_START_NID]);
3309 	} else {
3310 		/* disable digital Mic */
3311 		chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_96_000);
3312 		ca0132_set_dmic(codec, 0);
3313 		ca0132_mic_boost_set(codec, spec->cur_mic_boost);
3314 		/* disable voice focus */
3315 		ca0132_effects_set(codec, VOICE_FOCUS, 0);
3316 	}
3317 
3318 	snd_hda_power_down(codec);
3319 
3320 	return 0;
3321 }
3322 
3323 /*
3324  * Check if VNODE settings take effect immediately.
3325  */
3326 static bool ca0132_is_vnode_effective(struct hda_codec *codec,
3327 				     hda_nid_t vnid,
3328 				     hda_nid_t *shared_nid)
3329 {
3330 	struct ca0132_spec *spec = codec->spec;
3331 	hda_nid_t nid;
3332 
3333 	switch (vnid) {
3334 	case VNID_SPK:
3335 		nid = spec->shared_out_nid;
3336 		break;
3337 	case VNID_MIC:
3338 		nid = spec->shared_mic_nid;
3339 		break;
3340 	default:
3341 		return false;
3342 	}
3343 
3344 	if (shared_nid)
3345 		*shared_nid = nid;
3346 
3347 	return true;
3348 }
3349 
3350 /*
3351 * The following functions are control change helpers.
3352 * They return 0 if no changed.  Return 1 if changed.
3353 */
3354 static int ca0132_voicefx_set(struct hda_codec *codec, int enable)
3355 {
3356 	struct ca0132_spec *spec = codec->spec;
3357 	unsigned int tmp;
3358 
3359 	/* based on CrystalVoice state to enable VoiceFX. */
3360 	if (enable) {
3361 		tmp = spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID] ?
3362 			FLOAT_ONE : FLOAT_ZERO;
3363 	} else {
3364 		tmp = FLOAT_ZERO;
3365 	}
3366 
3367 	dspio_set_uint_param(codec, ca0132_voicefx.mid,
3368 			     ca0132_voicefx.reqs[0], tmp);
3369 
3370 	return 1;
3371 }
3372 
3373 /*
3374  * Set the effects parameters
3375  */
3376 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val)
3377 {
3378 	struct ca0132_spec *spec = codec->spec;
3379 	unsigned int on;
3380 	int num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT;
3381 	int err = 0;
3382 	int idx = nid - EFFECT_START_NID;
3383 
3384 	if ((idx < 0) || (idx >= num_fx))
3385 		return 0; /* no changed */
3386 
3387 	/* for out effect, qualify with PE */
3388 	if ((nid >= OUT_EFFECT_START_NID) && (nid < OUT_EFFECT_END_NID)) {
3389 		/* if PE if off, turn off out effects. */
3390 		if (!spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID])
3391 			val = 0;
3392 	}
3393 
3394 	/* for in effect, qualify with CrystalVoice */
3395 	if ((nid >= IN_EFFECT_START_NID) && (nid < IN_EFFECT_END_NID)) {
3396 		/* if CrystalVoice if off, turn off in effects. */
3397 		if (!spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID])
3398 			val = 0;
3399 
3400 		/* Voice Focus applies to 2-ch Mic, Digital Mic */
3401 		if ((nid == VOICE_FOCUS) && (spec->cur_mic_type != DIGITAL_MIC))
3402 			val = 0;
3403 	}
3404 
3405 	snd_printdd(KERN_INFO "ca0132_effect_set: nid=0x%x, val=%ld\n",
3406 		    nid, val);
3407 
3408 	on = (val == 0) ? FLOAT_ZERO : FLOAT_ONE;
3409 	err = dspio_set_uint_param(codec, ca0132_effects[idx].mid,
3410 				   ca0132_effects[idx].reqs[0], on);
3411 
3412 	if (err < 0)
3413 		return 0; /* no changed */
3414 
3415 	return 1;
3416 }
3417 
3418 /*
3419  * Turn on/off Playback Enhancements
3420  */
3421 static int ca0132_pe_switch_set(struct hda_codec *codec)
3422 {
3423 	struct ca0132_spec *spec = codec->spec;
3424 	hda_nid_t nid;
3425 	int i, ret = 0;
3426 
3427 	snd_printdd(KERN_INFO "ca0132_pe_switch_set: val=%ld\n",
3428 		    spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID]);
3429 
3430 	i = OUT_EFFECT_START_NID - EFFECT_START_NID;
3431 	nid = OUT_EFFECT_START_NID;
3432 	/* PE affects all out effects */
3433 	for (; nid < OUT_EFFECT_END_NID; nid++, i++)
3434 		ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]);
3435 
3436 	return ret;
3437 }
3438 
3439 /* Check if Mic1 is streaming, if so, stop streaming */
3440 static int stop_mic1(struct hda_codec *codec)
3441 {
3442 	struct ca0132_spec *spec = codec->spec;
3443 	unsigned int oldval = snd_hda_codec_read(codec, spec->adcs[0], 0,
3444 						 AC_VERB_GET_CONV, 0);
3445 	if (oldval != 0)
3446 		snd_hda_codec_write(codec, spec->adcs[0], 0,
3447 				    AC_VERB_SET_CHANNEL_STREAMID,
3448 				    0);
3449 	return oldval;
3450 }
3451 
3452 /* Resume Mic1 streaming if it was stopped. */
3453 static void resume_mic1(struct hda_codec *codec, unsigned int oldval)
3454 {
3455 	struct ca0132_spec *spec = codec->spec;
3456 	/* Restore the previous stream and channel */
3457 	if (oldval != 0)
3458 		snd_hda_codec_write(codec, spec->adcs[0], 0,
3459 				    AC_VERB_SET_CHANNEL_STREAMID,
3460 				    oldval);
3461 }
3462 
3463 /*
3464  * Turn on/off CrystalVoice
3465  */
3466 static int ca0132_cvoice_switch_set(struct hda_codec *codec)
3467 {
3468 	struct ca0132_spec *spec = codec->spec;
3469 	hda_nid_t nid;
3470 	int i, ret = 0;
3471 	unsigned int oldval;
3472 
3473 	snd_printdd(KERN_INFO "ca0132_cvoice_switch_set: val=%ld\n",
3474 		    spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID]);
3475 
3476 	i = IN_EFFECT_START_NID - EFFECT_START_NID;
3477 	nid = IN_EFFECT_START_NID;
3478 	/* CrystalVoice affects all in effects */
3479 	for (; nid < IN_EFFECT_END_NID; nid++, i++)
3480 		ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]);
3481 
3482 	/* including VoiceFX */
3483 	ret |= ca0132_voicefx_set(codec, (spec->voicefx_val ? 1 : 0));
3484 
3485 	/* set correct vipsource */
3486 	oldval = stop_mic1(codec);
3487 	ret |= ca0132_set_vipsource(codec, 1);
3488 	resume_mic1(codec, oldval);
3489 	return ret;
3490 }
3491 
3492 static int ca0132_mic_boost_set(struct hda_codec *codec, long val)
3493 {
3494 	struct ca0132_spec *spec = codec->spec;
3495 	int ret = 0;
3496 
3497 	if (val) /* on */
3498 		ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0,
3499 					HDA_INPUT, 0, HDA_AMP_VOLMASK, 3);
3500 	else /* off */
3501 		ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0,
3502 					HDA_INPUT, 0, HDA_AMP_VOLMASK, 0);
3503 
3504 	return ret;
3505 }
3506 
3507 static int ca0132_vnode_switch_set(struct snd_kcontrol *kcontrol,
3508 				struct snd_ctl_elem_value *ucontrol)
3509 {
3510 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3511 	hda_nid_t nid = get_amp_nid(kcontrol);
3512 	hda_nid_t shared_nid = 0;
3513 	bool effective;
3514 	int ret = 0;
3515 	struct ca0132_spec *spec = codec->spec;
3516 	int auto_jack;
3517 
3518 	if (nid == VNID_HP_SEL) {
3519 		auto_jack =
3520 			spec->vnode_lswitch[VNID_HP_ASEL - VNODE_START_NID];
3521 		if (!auto_jack)
3522 			ca0132_select_out(codec);
3523 		return 1;
3524 	}
3525 
3526 	if (nid == VNID_AMIC1_SEL) {
3527 		auto_jack =
3528 			spec->vnode_lswitch[VNID_AMIC1_ASEL - VNODE_START_NID];
3529 		if (!auto_jack)
3530 			ca0132_select_mic(codec);
3531 		return 1;
3532 	}
3533 
3534 	if (nid == VNID_HP_ASEL) {
3535 		ca0132_select_out(codec);
3536 		return 1;
3537 	}
3538 
3539 	if (nid == VNID_AMIC1_ASEL) {
3540 		ca0132_select_mic(codec);
3541 		return 1;
3542 	}
3543 
3544 	/* if effective conditions, then update hw immediately. */
3545 	effective = ca0132_is_vnode_effective(codec, nid, &shared_nid);
3546 	if (effective) {
3547 		int dir = get_amp_direction(kcontrol);
3548 		int ch = get_amp_channels(kcontrol);
3549 		unsigned long pval;
3550 
3551 		mutex_lock(&codec->control_mutex);
3552 		pval = kcontrol->private_value;
3553 		kcontrol->private_value = HDA_COMPOSE_AMP_VAL(shared_nid, ch,
3554 								0, dir);
3555 		ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
3556 		kcontrol->private_value = pval;
3557 		mutex_unlock(&codec->control_mutex);
3558 	}
3559 
3560 	return ret;
3561 }
3562 /* End of control change helpers. */
3563 
3564 static int ca0132_voicefx_info(struct snd_kcontrol *kcontrol,
3565 				 struct snd_ctl_elem_info *uinfo)
3566 {
3567 	unsigned int items = sizeof(ca0132_voicefx_presets)
3568 				/ sizeof(struct ct_voicefx_preset);
3569 
3570 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3571 	uinfo->count = 1;
3572 	uinfo->value.enumerated.items = items;
3573 	if (uinfo->value.enumerated.item >= items)
3574 		uinfo->value.enumerated.item = items - 1;
3575 	strcpy(uinfo->value.enumerated.name,
3576 	       ca0132_voicefx_presets[uinfo->value.enumerated.item].name);
3577 	return 0;
3578 }
3579 
3580 static int ca0132_voicefx_get(struct snd_kcontrol *kcontrol,
3581 				struct snd_ctl_elem_value *ucontrol)
3582 {
3583 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3584 	struct ca0132_spec *spec = codec->spec;
3585 
3586 	ucontrol->value.enumerated.item[0] = spec->voicefx_val;
3587 	return 0;
3588 }
3589 
3590 static int ca0132_voicefx_put(struct snd_kcontrol *kcontrol,
3591 				struct snd_ctl_elem_value *ucontrol)
3592 {
3593 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3594 	struct ca0132_spec *spec = codec->spec;
3595 	int i, err = 0;
3596 	int sel = ucontrol->value.enumerated.item[0];
3597 	unsigned int items = sizeof(ca0132_voicefx_presets)
3598 				/ sizeof(struct ct_voicefx_preset);
3599 
3600 	if (sel >= items)
3601 		return 0;
3602 
3603 	snd_printdd(KERN_INFO "ca0132_voicefx_put: sel=%d, preset=%s\n",
3604 		    sel, ca0132_voicefx_presets[sel].name);
3605 
3606 	/*
3607 	 * Idx 0 is default.
3608 	 * Default needs to qualify with CrystalVoice state.
3609 	 */
3610 	for (i = 0; i < VOICEFX_MAX_PARAM_COUNT; i++) {
3611 		err = dspio_set_uint_param(codec, ca0132_voicefx.mid,
3612 				ca0132_voicefx.reqs[i],
3613 				ca0132_voicefx_presets[sel].vals[i]);
3614 		if (err < 0)
3615 			break;
3616 	}
3617 
3618 	if (err >= 0) {
3619 		spec->voicefx_val = sel;
3620 		/* enable voice fx */
3621 		ca0132_voicefx_set(codec, (sel ? 1 : 0));
3622 	}
3623 
3624 	return 1;
3625 }
3626 
3627 static int ca0132_switch_get(struct snd_kcontrol *kcontrol,
3628 				struct snd_ctl_elem_value *ucontrol)
3629 {
3630 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3631 	struct ca0132_spec *spec = codec->spec;
3632 	hda_nid_t nid = get_amp_nid(kcontrol);
3633 	int ch = get_amp_channels(kcontrol);
3634 	long *valp = ucontrol->value.integer.value;
3635 
3636 	/* vnode */
3637 	if ((nid >= VNODE_START_NID) && (nid < VNODE_END_NID)) {
3638 		if (ch & 1) {
3639 			*valp = spec->vnode_lswitch[nid - VNODE_START_NID];
3640 			valp++;
3641 		}
3642 		if (ch & 2) {
3643 			*valp = spec->vnode_rswitch[nid - VNODE_START_NID];
3644 			valp++;
3645 		}
3646 		return 0;
3647 	}
3648 
3649 	/* effects, include PE and CrystalVoice */
3650 	if ((nid >= EFFECT_START_NID) && (nid < EFFECT_END_NID)) {
3651 		*valp = spec->effects_switch[nid - EFFECT_START_NID];
3652 		return 0;
3653 	}
3654 
3655 	/* mic boost */
3656 	if (nid == spec->input_pins[0]) {
3657 		*valp = spec->cur_mic_boost;
3658 		return 0;
3659 	}
3660 
3661 	return 0;
3662 }
3663 
3664 static int ca0132_switch_put(struct snd_kcontrol *kcontrol,
3665 			     struct snd_ctl_elem_value *ucontrol)
3666 {
3667 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3668 	struct ca0132_spec *spec = codec->spec;
3669 	hda_nid_t nid = get_amp_nid(kcontrol);
3670 	int ch = get_amp_channels(kcontrol);
3671 	long *valp = ucontrol->value.integer.value;
3672 	int changed = 1;
3673 
3674 	snd_printdd(KERN_INFO "ca0132_switch_put: nid=0x%x, val=%ld\n",
3675 		    nid, *valp);
3676 
3677 	snd_hda_power_up(codec);
3678 	/* vnode */
3679 	if ((nid >= VNODE_START_NID) && (nid < VNODE_END_NID)) {
3680 		if (ch & 1) {
3681 			spec->vnode_lswitch[nid - VNODE_START_NID] = *valp;
3682 			valp++;
3683 		}
3684 		if (ch & 2) {
3685 			spec->vnode_rswitch[nid - VNODE_START_NID] = *valp;
3686 			valp++;
3687 		}
3688 		changed = ca0132_vnode_switch_set(kcontrol, ucontrol);
3689 		goto exit;
3690 	}
3691 
3692 	/* PE */
3693 	if (nid == PLAY_ENHANCEMENT) {
3694 		spec->effects_switch[nid - EFFECT_START_NID] = *valp;
3695 		changed = ca0132_pe_switch_set(codec);
3696 		goto exit;
3697 	}
3698 
3699 	/* CrystalVoice */
3700 	if (nid == CRYSTAL_VOICE) {
3701 		spec->effects_switch[nid - EFFECT_START_NID] = *valp;
3702 		changed = ca0132_cvoice_switch_set(codec);
3703 		goto exit;
3704 	}
3705 
3706 	/* out and in effects */
3707 	if (((nid >= OUT_EFFECT_START_NID) && (nid < OUT_EFFECT_END_NID)) ||
3708 	    ((nid >= IN_EFFECT_START_NID) && (nid < IN_EFFECT_END_NID))) {
3709 		spec->effects_switch[nid - EFFECT_START_NID] = *valp;
3710 		changed = ca0132_effects_set(codec, nid, *valp);
3711 		goto exit;
3712 	}
3713 
3714 	/* mic boost */
3715 	if (nid == spec->input_pins[0]) {
3716 		spec->cur_mic_boost = *valp;
3717 
3718 		/* Mic boost does not apply to Digital Mic */
3719 		if (spec->cur_mic_type != DIGITAL_MIC)
3720 			changed = ca0132_mic_boost_set(codec, *valp);
3721 		goto exit;
3722 	}
3723 
3724 exit:
3725 	snd_hda_power_down(codec);
3726 	return changed;
3727 }
3728 
3729 /*
3730  * Volume related
3731  */
3732 static int ca0132_volume_info(struct snd_kcontrol *kcontrol,
3733 			      struct snd_ctl_elem_info *uinfo)
3734 {
3735 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3736 	struct ca0132_spec *spec = codec->spec;
3737 	hda_nid_t nid = get_amp_nid(kcontrol);
3738 	int ch = get_amp_channels(kcontrol);
3739 	int dir = get_amp_direction(kcontrol);
3740 	unsigned long pval;
3741 	int err;
3742 
3743 	switch (nid) {
3744 	case VNID_SPK:
3745 		/* follow shared_out info */
3746 		nid = spec->shared_out_nid;
3747 		mutex_lock(&codec->control_mutex);
3748 		pval = kcontrol->private_value;
3749 		kcontrol->private_value = HDA_COMPOSE_AMP_VAL(nid, ch, 0, dir);
3750 		err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo);
3751 		kcontrol->private_value = pval;
3752 		mutex_unlock(&codec->control_mutex);
3753 		break;
3754 	case VNID_MIC:
3755 		/* follow shared_mic info */
3756 		nid = spec->shared_mic_nid;
3757 		mutex_lock(&codec->control_mutex);
3758 		pval = kcontrol->private_value;
3759 		kcontrol->private_value = HDA_COMPOSE_AMP_VAL(nid, ch, 0, dir);
3760 		err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo);
3761 		kcontrol->private_value = pval;
3762 		mutex_unlock(&codec->control_mutex);
3763 		break;
3764 	default:
3765 		err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo);
3766 	}
3767 	return err;
3768 }
3769 
3770 static int ca0132_volume_get(struct snd_kcontrol *kcontrol,
3771 				struct snd_ctl_elem_value *ucontrol)
3772 {
3773 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3774 	struct ca0132_spec *spec = codec->spec;
3775 	hda_nid_t nid = get_amp_nid(kcontrol);
3776 	int ch = get_amp_channels(kcontrol);
3777 	long *valp = ucontrol->value.integer.value;
3778 
3779 	/* store the left and right volume */
3780 	if (ch & 1) {
3781 		*valp = spec->vnode_lvol[nid - VNODE_START_NID];
3782 		valp++;
3783 	}
3784 	if (ch & 2) {
3785 		*valp = spec->vnode_rvol[nid - VNODE_START_NID];
3786 		valp++;
3787 	}
3788 	return 0;
3789 }
3790 
3791 static int ca0132_volume_put(struct snd_kcontrol *kcontrol,
3792 				struct snd_ctl_elem_value *ucontrol)
3793 {
3794 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3795 	struct ca0132_spec *spec = codec->spec;
3796 	hda_nid_t nid = get_amp_nid(kcontrol);
3797 	int ch = get_amp_channels(kcontrol);
3798 	long *valp = ucontrol->value.integer.value;
3799 	hda_nid_t shared_nid = 0;
3800 	bool effective;
3801 	int changed = 1;
3802 
3803 	/* store the left and right volume */
3804 	if (ch & 1) {
3805 		spec->vnode_lvol[nid - VNODE_START_NID] = *valp;
3806 		valp++;
3807 	}
3808 	if (ch & 2) {
3809 		spec->vnode_rvol[nid - VNODE_START_NID] = *valp;
3810 		valp++;
3811 	}
3812 
3813 	/* if effective conditions, then update hw immediately. */
3814 	effective = ca0132_is_vnode_effective(codec, nid, &shared_nid);
3815 	if (effective) {
3816 		int dir = get_amp_direction(kcontrol);
3817 		unsigned long pval;
3818 
3819 		snd_hda_power_up(codec);
3820 		mutex_lock(&codec->control_mutex);
3821 		pval = kcontrol->private_value;
3822 		kcontrol->private_value = HDA_COMPOSE_AMP_VAL(shared_nid, ch,
3823 								0, dir);
3824 		changed = snd_hda_mixer_amp_volume_put(kcontrol, ucontrol);
3825 		kcontrol->private_value = pval;
3826 		mutex_unlock(&codec->control_mutex);
3827 		snd_hda_power_down(codec);
3828 	}
3829 
3830 	return changed;
3831 }
3832 
3833 static int ca0132_volume_tlv(struct snd_kcontrol *kcontrol, int op_flag,
3834 			     unsigned int size, unsigned int __user *tlv)
3835 {
3836 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
3837 	struct ca0132_spec *spec = codec->spec;
3838 	hda_nid_t nid = get_amp_nid(kcontrol);
3839 	int ch = get_amp_channels(kcontrol);
3840 	int dir = get_amp_direction(kcontrol);
3841 	unsigned long pval;
3842 	int err;
3843 
3844 	switch (nid) {
3845 	case VNID_SPK:
3846 		/* follow shared_out tlv */
3847 		nid = spec->shared_out_nid;
3848 		mutex_lock(&codec->control_mutex);
3849 		pval = kcontrol->private_value;
3850 		kcontrol->private_value = HDA_COMPOSE_AMP_VAL(nid, ch, 0, dir);
3851 		err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv);
3852 		kcontrol->private_value = pval;
3853 		mutex_unlock(&codec->control_mutex);
3854 		break;
3855 	case VNID_MIC:
3856 		/* follow shared_mic tlv */
3857 		nid = spec->shared_mic_nid;
3858 		mutex_lock(&codec->control_mutex);
3859 		pval = kcontrol->private_value;
3860 		kcontrol->private_value = HDA_COMPOSE_AMP_VAL(nid, ch, 0, dir);
3861 		err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv);
3862 		kcontrol->private_value = pval;
3863 		mutex_unlock(&codec->control_mutex);
3864 		break;
3865 	default:
3866 		err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv);
3867 	}
3868 	return err;
3869 }
3870 
3871 static int add_fx_switch(struct hda_codec *codec, hda_nid_t nid,
3872 			 const char *pfx, int dir)
3873 {
3874 	char namestr[44];
3875 	int type = dir ? HDA_INPUT : HDA_OUTPUT;
3876 	struct snd_kcontrol_new knew =
3877 		CA0132_CODEC_MUTE_MONO(namestr, nid, 1, type);
3878 	sprintf(namestr, "%s %s Switch", pfx, dirstr[dir]);
3879 	return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec));
3880 }
3881 
3882 static int add_voicefx(struct hda_codec *codec)
3883 {
3884 	struct snd_kcontrol_new knew =
3885 		HDA_CODEC_MUTE_MONO(ca0132_voicefx.name,
3886 				    VOICEFX, 1, 0, HDA_INPUT);
3887 	knew.info = ca0132_voicefx_info;
3888 	knew.get = ca0132_voicefx_get;
3889 	knew.put = ca0132_voicefx_put;
3890 	return snd_hda_ctl_add(codec, VOICEFX, snd_ctl_new1(&knew, codec));
3891 }
3892 
3893 /*
3894  * When changing Node IDs for Mixer Controls below, make sure to update
3895  * Node IDs in ca0132_config() as well.
3896  */
3897 static struct snd_kcontrol_new ca0132_mixer[] = {
3898 	CA0132_CODEC_VOL("Master Playback Volume", VNID_SPK, HDA_OUTPUT),
3899 	CA0132_CODEC_MUTE("Master Playback Switch", VNID_SPK, HDA_OUTPUT),
3900 	CA0132_CODEC_VOL("Capture Volume", VNID_MIC, HDA_INPUT),
3901 	CA0132_CODEC_MUTE("Capture Switch", VNID_MIC, HDA_INPUT),
3902 	HDA_CODEC_VOLUME("Analog-Mic2 Capture Volume", 0x08, 0, HDA_INPUT),
3903 	HDA_CODEC_MUTE("Analog-Mic2 Capture Switch", 0x08, 0, HDA_INPUT),
3904 	HDA_CODEC_VOLUME("What U Hear Capture Volume", 0x0a, 0, HDA_INPUT),
3905 	HDA_CODEC_MUTE("What U Hear Capture Switch", 0x0a, 0, HDA_INPUT),
3906 	CA0132_CODEC_MUTE_MONO("Mic1-Boost (30dB) Capture Switch",
3907 			       0x12, 1, HDA_INPUT),
3908 	CA0132_CODEC_MUTE_MONO("HP/Speaker Playback Switch",
3909 			       VNID_HP_SEL, 1, HDA_OUTPUT),
3910 	CA0132_CODEC_MUTE_MONO("AMic1/DMic Capture Switch",
3911 			       VNID_AMIC1_SEL, 1, HDA_INPUT),
3912 	CA0132_CODEC_MUTE_MONO("HP/Speaker Auto Detect Playback Switch",
3913 			       VNID_HP_ASEL, 1, HDA_OUTPUT),
3914 	CA0132_CODEC_MUTE_MONO("AMic1/DMic Auto Detect Capture Switch",
3915 			       VNID_AMIC1_ASEL, 1, HDA_INPUT),
3916 	{ } /* end */
3917 };
3918 
3919 static int ca0132_build_controls(struct hda_codec *codec)
3920 {
3921 	struct ca0132_spec *spec = codec->spec;
3922 	int i, num_fx;
3923 	int err = 0;
3924 
3925 	/* Add Mixer controls */
3926 	for (i = 0; i < spec->num_mixers; i++) {
3927 		err = snd_hda_add_new_ctls(codec, spec->mixers[i]);
3928 		if (err < 0)
3929 			return err;
3930 	}
3931 
3932 	/* Add in and out effects controls.
3933 	 * VoiceFX, PE and CrystalVoice are added separately.
3934 	 */
3935 	num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT;
3936 	for (i = 0; i < num_fx; i++) {
3937 		err = add_fx_switch(codec, ca0132_effects[i].nid,
3938 				    ca0132_effects[i].name,
3939 				    ca0132_effects[i].direct);
3940 		if (err < 0)
3941 			return err;
3942 	}
3943 
3944 	err = add_fx_switch(codec, PLAY_ENHANCEMENT, "PlayEnhancement", 0);
3945 	if (err < 0)
3946 		return err;
3947 
3948 	err = add_fx_switch(codec, CRYSTAL_VOICE, "CrystalVoice", 1);
3949 	if (err < 0)
3950 		return err;
3951 
3952 	add_voicefx(codec);
3953 
3954 #ifdef ENABLE_TUNING_CONTROLS
3955 	add_tuning_ctls(codec);
3956 #endif
3957 
3958 	err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
3959 	if (err < 0)
3960 		return err;
3961 
3962 	if (spec->dig_out) {
3963 		err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out,
3964 						    spec->dig_out);
3965 		if (err < 0)
3966 			return err;
3967 		err = snd_hda_create_spdif_share_sw(codec, &spec->multiout);
3968 		if (err < 0)
3969 			return err;
3970 		/* spec->multiout.share_spdif = 1; */
3971 	}
3972 
3973 	if (spec->dig_in) {
3974 		err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in);
3975 		if (err < 0)
3976 			return err;
3977 	}
3978 	return 0;
3979 }
3980 
3981 /*
3982  * PCM
3983  */
3984 static struct hda_pcm_stream ca0132_pcm_analog_playback = {
3985 	.substreams = 1,
3986 	.channels_min = 2,
3987 	.channels_max = 6,
3988 	.ops = {
3989 		.prepare = ca0132_playback_pcm_prepare,
3990 		.cleanup = ca0132_playback_pcm_cleanup
3991 	},
3992 };
3993 
3994 static struct hda_pcm_stream ca0132_pcm_analog_capture = {
3995 	.substreams = 1,
3996 	.channels_min = 2,
3997 	.channels_max = 2,
3998 	.ops = {
3999 		.prepare = ca0132_capture_pcm_prepare,
4000 		.cleanup = ca0132_capture_pcm_cleanup
4001 	},
4002 };
4003 
4004 static struct hda_pcm_stream ca0132_pcm_digital_playback = {
4005 	.substreams = 1,
4006 	.channels_min = 2,
4007 	.channels_max = 2,
4008 	.ops = {
4009 		.open = ca0132_dig_playback_pcm_open,
4010 		.close = ca0132_dig_playback_pcm_close,
4011 		.prepare = ca0132_dig_playback_pcm_prepare,
4012 		.cleanup = ca0132_dig_playback_pcm_cleanup
4013 	},
4014 };
4015 
4016 static struct hda_pcm_stream ca0132_pcm_digital_capture = {
4017 	.substreams = 1,
4018 	.channels_min = 2,
4019 	.channels_max = 2,
4020 };
4021 
4022 static int ca0132_build_pcms(struct hda_codec *codec)
4023 {
4024 	struct ca0132_spec *spec = codec->spec;
4025 	struct hda_pcm *info = spec->pcm_rec;
4026 
4027 	codec->pcm_info = info;
4028 	codec->num_pcms = 0;
4029 
4030 	info->name = "CA0132 Analog";
4031 	info->stream[SNDRV_PCM_STREAM_PLAYBACK] = ca0132_pcm_analog_playback;
4032 	info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->dacs[0];
4033 	info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
4034 		spec->multiout.max_channels;
4035 	info->stream[SNDRV_PCM_STREAM_CAPTURE] = ca0132_pcm_analog_capture;
4036 	info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = 1;
4037 	info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[0];
4038 	codec->num_pcms++;
4039 
4040 	info++;
4041 	info->name = "CA0132 Analog Mic-In2";
4042 	info->stream[SNDRV_PCM_STREAM_CAPTURE] = ca0132_pcm_analog_capture;
4043 	info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = 1;
4044 	info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[1];
4045 	codec->num_pcms++;
4046 
4047 	info++;
4048 	info->name = "CA0132 What U Hear";
4049 	info->stream[SNDRV_PCM_STREAM_CAPTURE] = ca0132_pcm_analog_capture;
4050 	info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = 1;
4051 	info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[2];
4052 	codec->num_pcms++;
4053 
4054 	if (!spec->dig_out && !spec->dig_in)
4055 		return 0;
4056 
4057 	info++;
4058 	info->name = "CA0132 Digital";
4059 	info->pcm_type = HDA_PCM_TYPE_SPDIF;
4060 	if (spec->dig_out) {
4061 		info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
4062 			ca0132_pcm_digital_playback;
4063 		info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->dig_out;
4064 	}
4065 	if (spec->dig_in) {
4066 		info->stream[SNDRV_PCM_STREAM_CAPTURE] =
4067 			ca0132_pcm_digital_capture;
4068 		info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in;
4069 	}
4070 	codec->num_pcms++;
4071 
4072 	return 0;
4073 }
4074 
4075 static void init_output(struct hda_codec *codec, hda_nid_t pin, hda_nid_t dac)
4076 {
4077 	if (pin) {
4078 		snd_hda_set_pin_ctl(codec, pin, PIN_HP);
4079 		if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP)
4080 			snd_hda_codec_write(codec, pin, 0,
4081 					    AC_VERB_SET_AMP_GAIN_MUTE,
4082 					    AMP_OUT_UNMUTE);
4083 	}
4084 	if (dac && (get_wcaps(codec, dac) & AC_WCAP_OUT_AMP))
4085 		snd_hda_codec_write(codec, dac, 0,
4086 				    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO);
4087 }
4088 
4089 static void init_input(struct hda_codec *codec, hda_nid_t pin, hda_nid_t adc)
4090 {
4091 	if (pin) {
4092 		snd_hda_set_pin_ctl(codec, pin, PIN_VREF80);
4093 		if (get_wcaps(codec, pin) & AC_WCAP_IN_AMP)
4094 			snd_hda_codec_write(codec, pin, 0,
4095 					    AC_VERB_SET_AMP_GAIN_MUTE,
4096 					    AMP_IN_UNMUTE(0));
4097 	}
4098 	if (adc && (get_wcaps(codec, adc) & AC_WCAP_IN_AMP)) {
4099 		snd_hda_codec_write(codec, adc, 0, AC_VERB_SET_AMP_GAIN_MUTE,
4100 				    AMP_IN_UNMUTE(0));
4101 
4102 		/* init to 0 dB and unmute. */
4103 		snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0,
4104 					 HDA_AMP_VOLMASK, 0x5a);
4105 		snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0,
4106 					 HDA_AMP_MUTE, 0);
4107 	}
4108 }
4109 
4110 static void ca0132_init_unsol(struct hda_codec *codec)
4111 {
4112 	snd_hda_jack_detect_enable(codec, UNSOL_TAG_HP, UNSOL_TAG_HP);
4113 	snd_hda_jack_detect_enable(codec, UNSOL_TAG_AMIC1, UNSOL_TAG_AMIC1);
4114 }
4115 
4116 static void refresh_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir)
4117 {
4118 	unsigned int caps;
4119 
4120 	caps = snd_hda_param_read(codec, nid, dir == HDA_OUTPUT ?
4121 				  AC_PAR_AMP_OUT_CAP : AC_PAR_AMP_IN_CAP);
4122 	snd_hda_override_amp_caps(codec, nid, dir, caps);
4123 }
4124 
4125 /*
4126  * Switch between Digital built-in mic and analog mic.
4127  */
4128 static void ca0132_set_dmic(struct hda_codec *codec, int enable)
4129 {
4130 	struct ca0132_spec *spec = codec->spec;
4131 	unsigned int tmp;
4132 	u8 val;
4133 	unsigned int oldval;
4134 
4135 	snd_printdd(KERN_INFO "ca0132_set_dmic: enable=%d\n", enable);
4136 
4137 	oldval = stop_mic1(codec);
4138 	ca0132_set_vipsource(codec, 0);
4139 	if (enable) {
4140 		/* set DMic input as 2-ch */
4141 		tmp = FLOAT_TWO;
4142 		dspio_set_uint_param(codec, 0x80, 0x00, tmp);
4143 
4144 		val = spec->dmic_ctl;
4145 		val |= 0x80;
4146 		snd_hda_codec_write(codec, spec->input_pins[0], 0,
4147 				    VENDOR_CHIPIO_DMIC_CTL_SET, val);
4148 
4149 		if (!(spec->dmic_ctl & 0x20))
4150 			chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 1);
4151 	} else {
4152 		/* set AMic input as mono */
4153 		tmp = FLOAT_ONE;
4154 		dspio_set_uint_param(codec, 0x80, 0x00, tmp);
4155 
4156 		val = spec->dmic_ctl;
4157 		/* clear bit7 and bit5 to disable dmic */
4158 		val &= 0x5f;
4159 		snd_hda_codec_write(codec, spec->input_pins[0], 0,
4160 				    VENDOR_CHIPIO_DMIC_CTL_SET, val);
4161 
4162 		if (!(spec->dmic_ctl & 0x20))
4163 			chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 0);
4164 	}
4165 	ca0132_set_vipsource(codec, 1);
4166 	resume_mic1(codec, oldval);
4167 }
4168 
4169 /*
4170  * Initialization for Digital Mic.
4171  */
4172 static void ca0132_init_dmic(struct hda_codec *codec)
4173 {
4174 	struct ca0132_spec *spec = codec->spec;
4175 	u8 val;
4176 
4177 	/* Setup Digital Mic here, but don't enable.
4178 	 * Enable based on jack detect.
4179 	 */
4180 
4181 	/* MCLK uses MPIO1, set to enable.
4182 	 * Bit 2-0: MPIO select
4183 	 * Bit   3: set to disable
4184 	 * Bit 7-4: reserved
4185 	 */
4186 	val = 0x01;
4187 	snd_hda_codec_write(codec, spec->input_pins[0], 0,
4188 			    VENDOR_CHIPIO_DMIC_MCLK_SET, val);
4189 
4190 	/* Data1 uses MPIO3. Data2 not use
4191 	 * Bit 2-0: Data1 MPIO select
4192 	 * Bit   3: set disable Data1
4193 	 * Bit 6-4: Data2 MPIO select
4194 	 * Bit   7: set disable Data2
4195 	 */
4196 	val = 0x83;
4197 	snd_hda_codec_write(codec, spec->input_pins[0], 0,
4198 			    VENDOR_CHIPIO_DMIC_PIN_SET, val);
4199 
4200 	/* Use Ch-0 and Ch-1. Rate is 48K, mode 1. Disable DMic first.
4201 	 * Bit 3-0: Channel mask
4202 	 * Bit   4: set for 48KHz, clear for 32KHz
4203 	 * Bit   5: mode
4204 	 * Bit   6: set to select Data2, clear for Data1
4205 	 * Bit   7: set to enable DMic, clear for AMic
4206 	 */
4207 	val = 0x23;
4208 	/* keep a copy of dmic ctl val for enable/disable dmic purpuse */
4209 	spec->dmic_ctl = val;
4210 	snd_hda_codec_write(codec, spec->input_pins[0], 0,
4211 			    VENDOR_CHIPIO_DMIC_CTL_SET, val);
4212 }
4213 
4214 /*
4215  * Initialization for Analog Mic 2
4216  */
4217 static void ca0132_init_analog_mic2(struct hda_codec *codec)
4218 {
4219 	struct ca0132_spec *spec = codec->spec;
4220 
4221 	mutex_lock(&spec->chipio_mutex);
4222 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
4223 			    VENDOR_CHIPIO_8051_ADDRESS_LOW, 0x20);
4224 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
4225 			    VENDOR_CHIPIO_8051_ADDRESS_HIGH, 0x19);
4226 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
4227 			    VENDOR_CHIPIO_8051_DATA_WRITE, 0x00);
4228 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
4229 			    VENDOR_CHIPIO_8051_ADDRESS_LOW, 0x2D);
4230 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
4231 			    VENDOR_CHIPIO_8051_ADDRESS_HIGH, 0x19);
4232 	snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
4233 			    VENDOR_CHIPIO_8051_DATA_WRITE, 0x00);
4234 	mutex_unlock(&spec->chipio_mutex);
4235 }
4236 
4237 static void ca0132_refresh_widget_caps(struct hda_codec *codec)
4238 {
4239 	struct ca0132_spec *spec = codec->spec;
4240 	int i;
4241 	hda_nid_t nid;
4242 
4243 	snd_printdd(KERN_INFO "ca0132_refresh_widget_caps.\n");
4244 	nid = codec->start_nid;
4245 	for (i = 0; i < codec->num_nodes; i++, nid++)
4246 		codec->wcaps[i] = snd_hda_param_read(codec, nid,
4247 						     AC_PAR_AUDIO_WIDGET_CAP);
4248 
4249 	for (i = 0; i < spec->multiout.num_dacs; i++)
4250 		refresh_amp_caps(codec, spec->dacs[i], HDA_OUTPUT);
4251 
4252 	for (i = 0; i < spec->num_outputs; i++)
4253 		refresh_amp_caps(codec, spec->out_pins[i], HDA_OUTPUT);
4254 
4255 	for (i = 0; i < spec->num_inputs; i++) {
4256 		refresh_amp_caps(codec, spec->adcs[i], HDA_INPUT);
4257 		refresh_amp_caps(codec, spec->input_pins[i], HDA_INPUT);
4258 	}
4259 }
4260 
4261 /*
4262  * Setup default parameters for DSP
4263  */
4264 static void ca0132_setup_defaults(struct hda_codec *codec)
4265 {
4266 	unsigned int tmp;
4267 	int num_fx;
4268 	int idx, i;
4269 
4270 	if (!dspload_is_loaded(codec))
4271 		return;
4272 
4273 	/* out, in effects + voicefx */
4274 	num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT + 1;
4275 	for (idx = 0; idx < num_fx; idx++) {
4276 		for (i = 0; i <= ca0132_effects[idx].params; i++) {
4277 			dspio_set_uint_param(codec, ca0132_effects[idx].mid,
4278 					     ca0132_effects[idx].reqs[i],
4279 					     ca0132_effects[idx].def_vals[i]);
4280 		}
4281 	}
4282 
4283 	/*remove DSP headroom*/
4284 	tmp = FLOAT_ZERO;
4285 	dspio_set_uint_param(codec, 0x96, 0x3C, tmp);
4286 
4287 	/*set speaker EQ bypass attenuation*/
4288 	dspio_set_uint_param(codec, 0x8f, 0x01, tmp);
4289 
4290 	/* set AMic1 and AMic2 as mono mic */
4291 	tmp = FLOAT_ONE;
4292 	dspio_set_uint_param(codec, 0x80, 0x00, tmp);
4293 	dspio_set_uint_param(codec, 0x80, 0x01, tmp);
4294 
4295 	/* set AMic1 as CrystalVoice input */
4296 	tmp = FLOAT_ONE;
4297 	dspio_set_uint_param(codec, 0x80, 0x05, tmp);
4298 
4299 	/* set WUH source */
4300 	tmp = FLOAT_TWO;
4301 	dspio_set_uint_param(codec, 0x31, 0x00, tmp);
4302 }
4303 
4304 /*
4305  * Initialization of flags in chip
4306  */
4307 static void ca0132_init_flags(struct hda_codec *codec)
4308 {
4309 	chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0);
4310 	chipio_set_control_flag(codec, CONTROL_FLAG_PORT_A_COMMON_MODE, 0);
4311 	chipio_set_control_flag(codec, CONTROL_FLAG_PORT_D_COMMON_MODE, 0);
4312 	chipio_set_control_flag(codec, CONTROL_FLAG_PORT_A_10KOHM_LOAD, 0);
4313 	chipio_set_control_flag(codec, CONTROL_FLAG_PORT_D_10KOHM_LOAD, 0);
4314 	chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_HIGH_PASS, 1);
4315 }
4316 
4317 /*
4318  * Initialization of parameters in chip
4319  */
4320 static void ca0132_init_params(struct hda_codec *codec)
4321 {
4322 	chipio_set_control_param(codec, CONTROL_PARAM_PORTA_160OHM_GAIN, 6);
4323 	chipio_set_control_param(codec, CONTROL_PARAM_PORTD_160OHM_GAIN, 6);
4324 }
4325 
4326 static void ca0132_set_dsp_msr(struct hda_codec *codec, bool is96k)
4327 {
4328 	chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, is96k);
4329 	chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, is96k);
4330 	chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, is96k);
4331 	chipio_set_control_flag(codec, CONTROL_FLAG_SRC_CLOCK_196MHZ, is96k);
4332 	chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, is96k);
4333 	chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, is96k);
4334 
4335 	chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000);
4336 	chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000);
4337 	chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000);
4338 }
4339 
4340 static bool ca0132_download_dsp_images(struct hda_codec *codec)
4341 {
4342 	bool dsp_loaded = false;
4343 	const struct dsp_image_seg *dsp_os_image;
4344 	const struct firmware *fw_entry;
4345 
4346 	if (request_firmware(&fw_entry, EFX_FILE, codec->bus->card->dev) != 0)
4347 		return false;
4348 
4349 	dsp_os_image = (struct dsp_image_seg *)(fw_entry->data);
4350 	dspload_image(codec, dsp_os_image, 0, 0, true, 0);
4351 	dsp_loaded = dspload_wait_loaded(codec);
4352 
4353 	release_firmware(fw_entry);
4354 
4355 
4356 	return dsp_loaded;
4357 }
4358 
4359 static void ca0132_download_dsp(struct hda_codec *codec)
4360 {
4361 	struct ca0132_spec *spec = codec->spec;
4362 
4363 #ifndef CONFIG_SND_HDA_CODEC_CA0132_DSP
4364 	return; /* NOP */
4365 #endif
4366 	spec->dsp_state = DSP_DOWNLOAD_INIT;
4367 
4368 	if (spec->dsp_state == DSP_DOWNLOAD_INIT) {
4369 		chipio_enable_clocks(codec);
4370 		spec->dsp_state = DSP_DOWNLOADING;
4371 		if (!ca0132_download_dsp_images(codec))
4372 			spec->dsp_state = DSP_DOWNLOAD_FAILED;
4373 		else
4374 			spec->dsp_state = DSP_DOWNLOADED;
4375 	}
4376 
4377 	if (spec->dsp_state == DSP_DOWNLOADED)
4378 		ca0132_set_dsp_msr(codec, true);
4379 }
4380 
4381 static void ca0132_process_dsp_response(struct hda_codec *codec)
4382 {
4383 	struct ca0132_spec *spec = codec->spec;
4384 
4385 	snd_printdd(KERN_INFO "ca0132_process_dsp_response\n");
4386 	if (spec->wait_scp) {
4387 		if (dspio_get_response_data(codec) >= 0)
4388 			spec->wait_scp = 0;
4389 	}
4390 
4391 	dspio_clear_response_queue(codec);
4392 }
4393 
4394 static void ca0132_unsol_event(struct hda_codec *codec, unsigned int res)
4395 {
4396 	snd_printdd(KERN_INFO "ca0132_unsol_event: 0x%x\n", res);
4397 
4398 
4399 	if (((res >> AC_UNSOL_RES_TAG_SHIFT) & 0x3f) == UNSOL_TAG_DSP) {
4400 		ca0132_process_dsp_response(codec);
4401 	} else {
4402 		res = snd_hda_jack_get_action(codec,
4403 				(res >> AC_UNSOL_RES_TAG_SHIFT) & 0x3f);
4404 
4405 		snd_printdd(KERN_INFO "snd_hda_jack_get_action: 0x%x\n", res);
4406 
4407 		switch (res) {
4408 		case UNSOL_TAG_HP:
4409 			ca0132_select_out(codec);
4410 			snd_hda_jack_report_sync(codec);
4411 			break;
4412 		case UNSOL_TAG_AMIC1:
4413 			ca0132_select_mic(codec);
4414 			snd_hda_jack_report_sync(codec);
4415 			break;
4416 		default:
4417 			break;
4418 		}
4419 	}
4420 }
4421 
4422 /*
4423  * Verbs tables.
4424  */
4425 
4426 /* Sends before DSP download. */
4427 static struct hda_verb ca0132_base_init_verbs[] = {
4428 	/*enable ct extension*/
4429 	{0x15, VENDOR_CHIPIO_CT_EXTENSIONS_ENABLE, 0x1},
4430 	/*enable DSP node unsol, needed for DSP download*/
4431 	{0x16, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | UNSOL_TAG_DSP},
4432 	{}
4433 };
4434 
4435 /* Send at exit. */
4436 static struct hda_verb ca0132_base_exit_verbs[] = {
4437 	/*set afg to D3*/
4438 	{0x01, AC_VERB_SET_POWER_STATE, 0x03},
4439 	/*disable ct extension*/
4440 	{0x15, VENDOR_CHIPIO_CT_EXTENSIONS_ENABLE, 0},
4441 	{}
4442 };
4443 
4444 /* Other verbs tables.  Sends after DSP download. */
4445 static struct hda_verb ca0132_init_verbs0[] = {
4446 	/* chip init verbs */
4447 	{0x15, 0x70D, 0xF0},
4448 	{0x15, 0x70E, 0xFE},
4449 	{0x15, 0x707, 0x75},
4450 	{0x15, 0x707, 0xD3},
4451 	{0x15, 0x707, 0x09},
4452 	{0x15, 0x707, 0x53},
4453 	{0x15, 0x707, 0xD4},
4454 	{0x15, 0x707, 0xEF},
4455 	{0x15, 0x707, 0x75},
4456 	{0x15, 0x707, 0xD3},
4457 	{0x15, 0x707, 0x09},
4458 	{0x15, 0x707, 0x02},
4459 	{0x15, 0x707, 0x37},
4460 	{0x15, 0x707, 0x78},
4461 	{0x15, 0x53C, 0xCE},
4462 	{0x15, 0x575, 0xC9},
4463 	{0x15, 0x53D, 0xCE},
4464 	{0x15, 0x5B7, 0xC9},
4465 	{0x15, 0x70D, 0xE8},
4466 	{0x15, 0x70E, 0xFE},
4467 	{0x15, 0x707, 0x02},
4468 	{0x15, 0x707, 0x68},
4469 	{0x15, 0x707, 0x62},
4470 	{0x15, 0x53A, 0xCE},
4471 	{0x15, 0x546, 0xC9},
4472 	{0x15, 0x53B, 0xCE},
4473 	{0x15, 0x5E8, 0xC9},
4474 	{0x15, 0x717, 0x0D},
4475 	{0x15, 0x718, 0x20},
4476 	{}
4477 };
4478 
4479 static struct hda_verb ca0132_init_verbs1[] = {
4480 	{0x10, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | UNSOL_TAG_HP},
4481 	{0x12, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | UNSOL_TAG_AMIC1},
4482 	/* config EAPD */
4483 	{0x0b, 0x78D, 0x00},
4484 	/*{0x0b, AC_VERB_SET_EAPD_BTLENABLE, 0x02},*/
4485 	/*{0x10, 0x78D, 0x02},*/
4486 	/*{0x10, AC_VERB_SET_EAPD_BTLENABLE, 0x02},*/
4487 	{}
4488 };
4489 
4490 static void ca0132_init_chip(struct hda_codec *codec)
4491 {
4492 	struct ca0132_spec *spec = codec->spec;
4493 	int num_fx;
4494 	int i;
4495 	unsigned int on;
4496 
4497 	mutex_init(&spec->chipio_mutex);
4498 
4499 	spec->cur_out_type = SPEAKER_OUT;
4500 	spec->cur_mic_type = DIGITAL_MIC;
4501 	spec->cur_mic_boost = 0;
4502 
4503 	for (i = 0; i < VNODES_COUNT; i++) {
4504 		spec->vnode_lvol[i] = 0x5a;
4505 		spec->vnode_rvol[i] = 0x5a;
4506 		spec->vnode_lswitch[i] = 0;
4507 		spec->vnode_rswitch[i] = 0;
4508 	}
4509 
4510 	/*
4511 	 * Default states for effects are in ca0132_effects[].
4512 	 */
4513 	num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT;
4514 	for (i = 0; i < num_fx; i++) {
4515 		on = (unsigned int)ca0132_effects[i].reqs[0];
4516 		spec->effects_switch[i] = on ? 1 : 0;
4517 	}
4518 
4519 	spec->voicefx_val = 0;
4520 	spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID] = 1;
4521 	spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID] = 0;
4522 
4523 #ifdef ENABLE_TUNING_CONTROLS
4524 	ca0132_init_tuning_defaults(codec);
4525 #endif
4526 }
4527 
4528 static void ca0132_exit_chip(struct hda_codec *codec)
4529 {
4530 	/* put any chip cleanup stuffs here. */
4531 
4532 	if (dspload_is_loaded(codec))
4533 		dsp_reset(codec);
4534 }
4535 
4536 static int ca0132_init(struct hda_codec *codec)
4537 {
4538 	struct ca0132_spec *spec = codec->spec;
4539 	struct auto_pin_cfg *cfg = &spec->autocfg;
4540 	int i;
4541 
4542 	spec->dsp_state = DSP_DOWNLOAD_INIT;
4543 	spec->curr_chip_addx = INVALID_CHIP_ADDRESS;
4544 
4545 	snd_hda_power_up(codec);
4546 
4547 	ca0132_init_params(codec);
4548 	ca0132_init_flags(codec);
4549 	snd_hda_sequence_write(codec, spec->base_init_verbs);
4550 	ca0132_download_dsp(codec);
4551 	ca0132_refresh_widget_caps(codec);
4552 	ca0132_setup_defaults(codec);
4553 	ca0132_init_analog_mic2(codec);
4554 	ca0132_init_dmic(codec);
4555 
4556 	for (i = 0; i < spec->num_outputs; i++)
4557 		init_output(codec, spec->out_pins[i], spec->dacs[0]);
4558 
4559 	init_output(codec, cfg->dig_out_pins[0], spec->dig_out);
4560 
4561 	for (i = 0; i < spec->num_inputs; i++)
4562 		init_input(codec, spec->input_pins[i], spec->adcs[i]);
4563 
4564 	init_input(codec, cfg->dig_in_pin, spec->dig_in);
4565 
4566 	for (i = 0; i < spec->num_init_verbs; i++)
4567 		snd_hda_sequence_write(codec, spec->init_verbs[i]);
4568 
4569 	ca0132_init_unsol(codec);
4570 
4571 	ca0132_select_out(codec);
4572 	ca0132_select_mic(codec);
4573 
4574 	snd_hda_jack_report_sync(codec);
4575 
4576 	snd_hda_power_down(codec);
4577 
4578 	return 0;
4579 }
4580 
4581 static void ca0132_free(struct hda_codec *codec)
4582 {
4583 	struct ca0132_spec *spec = codec->spec;
4584 
4585 	snd_hda_power_up(codec);
4586 	snd_hda_sequence_write(codec, spec->base_exit_verbs);
4587 	ca0132_exit_chip(codec);
4588 	snd_hda_power_down(codec);
4589 	kfree(codec->spec);
4590 }
4591 
4592 static struct hda_codec_ops ca0132_patch_ops = {
4593 	.build_controls = ca0132_build_controls,
4594 	.build_pcms = ca0132_build_pcms,
4595 	.init = ca0132_init,
4596 	.free = ca0132_free,
4597 	.unsol_event = ca0132_unsol_event,
4598 };
4599 
4600 static void ca0132_config(struct hda_codec *codec)
4601 {
4602 	struct ca0132_spec *spec = codec->spec;
4603 	struct auto_pin_cfg *cfg = &spec->autocfg;
4604 
4605 	spec->dacs[0] = 0x2;
4606 	spec->dacs[1] = 0x3;
4607 	spec->dacs[2] = 0x4;
4608 
4609 	spec->multiout.dac_nids = spec->dacs;
4610 	spec->multiout.num_dacs = 3;
4611 	spec->multiout.max_channels = 2;
4612 
4613 	spec->num_outputs = 2;
4614 	spec->out_pins[0] = 0x0b; /* speaker out */
4615 	spec->out_pins[1] = 0x10; /* headphone out */
4616 	spec->shared_out_nid = 0x2;
4617 
4618 	spec->num_inputs = 3;
4619 	spec->adcs[0] = 0x7; /* digital mic / analog mic1 */
4620 	spec->adcs[1] = 0x8; /* analog mic2 */
4621 	spec->adcs[2] = 0xa; /* what u hear */
4622 	spec->shared_mic_nid = 0x7;
4623 
4624 	spec->input_pins[0] = 0x12;
4625 	spec->input_pins[1] = 0x11;
4626 	spec->input_pins[2] = 0x13;
4627 
4628 	/* SPDIF I/O */
4629 	spec->dig_out = 0x05;
4630 	spec->multiout.dig_out_nid = spec->dig_out;
4631 	cfg->dig_out_pins[0] = 0x0c;
4632 	cfg->dig_outs = 1;
4633 	cfg->dig_out_type[0] = HDA_PCM_TYPE_SPDIF;
4634 	spec->dig_in = 0x09;
4635 	cfg->dig_in_pin = 0x0e;
4636 	cfg->dig_in_type = HDA_PCM_TYPE_SPDIF;
4637 }
4638 
4639 static int patch_ca0132(struct hda_codec *codec)
4640 {
4641 	struct ca0132_spec *spec;
4642 	int err;
4643 
4644 	snd_printdd("patch_ca0132\n");
4645 
4646 	spec = kzalloc(sizeof(*spec), GFP_KERNEL);
4647 	if (!spec)
4648 		return -ENOMEM;
4649 	codec->spec = spec;
4650 
4651 	spec->num_mixers = 1;
4652 	spec->mixers[0] = ca0132_mixer;
4653 
4654 	spec->base_init_verbs = ca0132_base_init_verbs;
4655 	spec->base_exit_verbs = ca0132_base_exit_verbs;
4656 	spec->init_verbs[0] = ca0132_init_verbs0;
4657 	spec->init_verbs[1] = ca0132_init_verbs1;
4658 	spec->num_init_verbs = 2;
4659 
4660 	ca0132_init_chip(codec);
4661 
4662 	ca0132_config(codec);
4663 
4664 	err = snd_hda_parse_pin_def_config(codec, &spec->autocfg, NULL);
4665 	if (err < 0)
4666 		return err;
4667 
4668 	codec->patch_ops = ca0132_patch_ops;
4669 
4670 	return 0;
4671 }
4672 
4673 /*
4674  * patch entries
4675  */
4676 static struct hda_codec_preset snd_hda_preset_ca0132[] = {
4677 	{ .id = 0x11020011, .name = "CA0132",     .patch = patch_ca0132 },
4678 	{} /* terminator */
4679 };
4680 
4681 MODULE_ALIAS("snd-hda-codec-id:11020011");
4682 
4683 MODULE_LICENSE("GPL");
4684 MODULE_DESCRIPTION("Creative Sound Core3D codec");
4685 
4686 static struct hda_codec_preset_list ca0132_list = {
4687 	.preset = snd_hda_preset_ca0132,
4688 	.owner = THIS_MODULE,
4689 };
4690 
4691 static int __init patch_ca0132_init(void)
4692 {
4693 	return snd_hda_add_codec_preset(&ca0132_list);
4694 }
4695 
4696 static void __exit patch_ca0132_exit(void)
4697 {
4698 	snd_hda_delete_codec_preset(&ca0132_list);
4699 }
4700 
4701 module_init(patch_ca0132_init)
4702 module_exit(patch_ca0132_exit)
4703