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