]> Pileus Git - ~andy/linux/blob - sound/pci/hda/patch_ca0132.c
nfsd: fix lost nfserrno() call in nfsd_setattr()
[~andy/linux] / 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)