1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * HD audio interface patch for Creative CA0132 chip 4 * 5 * Copyright (c) 2011, Creative Technology Ltd. 6 * 7 * Based on patch_ca0110.c 8 * Copyright (c) 2008 Takashi Iwai <tiwai@suse.de> 9 */ 10 11 #include <linux/init.h> 12 #include <linux/delay.h> 13 #include <linux/slab.h> 14 #include <linux/mutex.h> 15 #include <linux/module.h> 16 #include <linux/firmware.h> 17 #include <linux/kernel.h> 18 #include <linux/types.h> 19 #include <linux/io.h> 20 #include <linux/pci.h> 21 #include <asm/io.h> 22 #include <sound/core.h> 23 #include <sound/hda_codec.h> 24 #include "hda_local.h" 25 #include "hda_auto_parser.h" 26 #include "hda_jack.h" 27 28 #include "ca0132_regs.h" 29 30 /* Enable this to see controls for tuning purpose. */ 31 /*#define ENABLE_TUNING_CONTROLS*/ 32 33 #ifdef ENABLE_TUNING_CONTROLS 34 #include <sound/tlv.h> 35 #endif 36 37 #define FLOAT_ZERO 0x00000000 38 #define FLOAT_ONE 0x3f800000 39 #define FLOAT_TWO 0x40000000 40 #define FLOAT_THREE 0x40400000 41 #define FLOAT_FIVE 0x40a00000 42 #define FLOAT_SIX 0x40c00000 43 #define FLOAT_EIGHT 0x41000000 44 #define FLOAT_MINUS_5 0xc0a00000 45 46 #define UNSOL_TAG_DSP 0x16 47 48 #define DSP_DMA_WRITE_BUFLEN_INIT (1UL<<18) 49 #define DSP_DMA_WRITE_BUFLEN_OVLY (1UL<<15) 50 51 #define DMA_TRANSFER_FRAME_SIZE_NWORDS 8 52 #define DMA_TRANSFER_MAX_FRAME_SIZE_NWORDS 32 53 #define DMA_OVERLAY_FRAME_SIZE_NWORDS 2 54 55 #define MASTERCONTROL 0x80 56 #define MASTERCONTROL_ALLOC_DMA_CHAN 10 57 #define MASTERCONTROL_QUERY_SPEAKER_EQ_ADDRESS 60 58 59 #define WIDGET_CHIP_CTRL 0x15 60 #define WIDGET_DSP_CTRL 0x16 61 62 #define MEM_CONNID_MICIN1 3 63 #define MEM_CONNID_MICIN2 5 64 #define MEM_CONNID_MICOUT1 12 65 #define MEM_CONNID_MICOUT2 14 66 #define MEM_CONNID_WUH 10 67 #define MEM_CONNID_DSP 16 68 #define MEM_CONNID_DMIC 100 69 70 #define SCP_SET 0 71 #define SCP_GET 1 72 73 #define EFX_FILE "ctefx.bin" 74 #define DESKTOP_EFX_FILE "ctefx-desktop.bin" 75 #define R3DI_EFX_FILE "ctefx-r3di.bin" 76 77 #ifdef CONFIG_SND_HDA_CODEC_CA0132_DSP 78 MODULE_FIRMWARE(EFX_FILE); 79 MODULE_FIRMWARE(DESKTOP_EFX_FILE); 80 MODULE_FIRMWARE(R3DI_EFX_FILE); 81 #endif 82 83 static const char *const dirstr[2] = { "Playback", "Capture" }; 84 85 #define NUM_OF_OUTPUTS 2 86 static const char *const out_type_str[2] = { "Speakers", "Headphone" }; 87 enum { 88 SPEAKER_OUT, 89 HEADPHONE_OUT, 90 }; 91 92 enum { 93 DIGITAL_MIC, 94 LINE_MIC_IN 95 }; 96 97 /* Strings for Input Source Enum Control */ 98 static const char *const in_src_str[3] = { "Microphone", "Line In", "Front Microphone" }; 99 #define IN_SRC_NUM_OF_INPUTS 3 100 enum { 101 REAR_MIC, 102 REAR_LINE_IN, 103 FRONT_MIC, 104 }; 105 106 enum { 107 #define VNODE_START_NID 0x80 108 VNID_SPK = VNODE_START_NID, /* Speaker vnid */ 109 VNID_MIC, 110 VNID_HP_SEL, 111 VNID_AMIC1_SEL, 112 VNID_HP_ASEL, 113 VNID_AMIC1_ASEL, 114 VNODE_END_NID, 115 #define VNODES_COUNT (VNODE_END_NID - VNODE_START_NID) 116 117 #define EFFECT_START_NID 0x90 118 #define OUT_EFFECT_START_NID EFFECT_START_NID 119 SURROUND = OUT_EFFECT_START_NID, 120 CRYSTALIZER, 121 DIALOG_PLUS, 122 SMART_VOLUME, 123 X_BASS, 124 EQUALIZER, 125 OUT_EFFECT_END_NID, 126 #define OUT_EFFECTS_COUNT (OUT_EFFECT_END_NID - OUT_EFFECT_START_NID) 127 128 #define IN_EFFECT_START_NID OUT_EFFECT_END_NID 129 ECHO_CANCELLATION = IN_EFFECT_START_NID, 130 VOICE_FOCUS, 131 MIC_SVM, 132 NOISE_REDUCTION, 133 IN_EFFECT_END_NID, 134 #define IN_EFFECTS_COUNT (IN_EFFECT_END_NID - IN_EFFECT_START_NID) 135 136 VOICEFX = IN_EFFECT_END_NID, 137 PLAY_ENHANCEMENT, 138 CRYSTAL_VOICE, 139 EFFECT_END_NID, 140 OUTPUT_SOURCE_ENUM, 141 INPUT_SOURCE_ENUM, 142 XBASS_XOVER, 143 EQ_PRESET_ENUM, 144 SMART_VOLUME_ENUM, 145 MIC_BOOST_ENUM, 146 AE5_HEADPHONE_GAIN_ENUM, 147 AE5_SOUND_FILTER_ENUM, 148 ZXR_HEADPHONE_GAIN, 149 SPEAKER_CHANNEL_CFG_ENUM, 150 SPEAKER_FULL_RANGE_FRONT, 151 SPEAKER_FULL_RANGE_REAR, 152 BASS_REDIRECTION, 153 BASS_REDIRECTION_XOVER, 154 #define EFFECTS_COUNT (EFFECT_END_NID - EFFECT_START_NID) 155 }; 156 157 /* Effects values size*/ 158 #define EFFECT_VALS_MAX_COUNT 12 159 160 /* 161 * Default values for the effect slider controls, they are in order of their 162 * effect NID's. Surround, Crystalizer, Dialog Plus, Smart Volume, and then 163 * X-bass. 164 */ 165 static const unsigned int effect_slider_defaults[] = {67, 65, 50, 74, 50}; 166 /* Amount of effect level sliders for ca0132_alt controls. */ 167 #define EFFECT_LEVEL_SLIDERS 5 168 169 /* Latency introduced by DSP blocks in milliseconds. */ 170 #define DSP_CAPTURE_INIT_LATENCY 0 171 #define DSP_CRYSTAL_VOICE_LATENCY 124 172 #define DSP_PLAYBACK_INIT_LATENCY 13 173 #define DSP_PLAY_ENHANCEMENT_LATENCY 30 174 #define DSP_SPEAKER_OUT_LATENCY 7 175 176 struct ct_effect { 177 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; 178 hda_nid_t nid; 179 int mid; /*effect module ID*/ 180 int reqs[EFFECT_VALS_MAX_COUNT]; /*effect module request*/ 181 int direct; /* 0:output; 1:input*/ 182 int params; /* number of default non-on/off params */ 183 /*effect default values, 1st is on/off. */ 184 unsigned int def_vals[EFFECT_VALS_MAX_COUNT]; 185 }; 186 187 #define EFX_DIR_OUT 0 188 #define EFX_DIR_IN 1 189 190 static const struct ct_effect ca0132_effects[EFFECTS_COUNT] = { 191 { .name = "Surround", 192 .nid = SURROUND, 193 .mid = 0x96, 194 .reqs = {0, 1}, 195 .direct = EFX_DIR_OUT, 196 .params = 1, 197 .def_vals = {0x3F800000, 0x3F2B851F} 198 }, 199 { .name = "Crystalizer", 200 .nid = CRYSTALIZER, 201 .mid = 0x96, 202 .reqs = {7, 8}, 203 .direct = EFX_DIR_OUT, 204 .params = 1, 205 .def_vals = {0x3F800000, 0x3F266666} 206 }, 207 { .name = "Dialog Plus", 208 .nid = DIALOG_PLUS, 209 .mid = 0x96, 210 .reqs = {2, 3}, 211 .direct = EFX_DIR_OUT, 212 .params = 1, 213 .def_vals = {0x00000000, 0x3F000000} 214 }, 215 { .name = "Smart Volume", 216 .nid = SMART_VOLUME, 217 .mid = 0x96, 218 .reqs = {4, 5, 6}, 219 .direct = EFX_DIR_OUT, 220 .params = 2, 221 .def_vals = {0x3F800000, 0x3F3D70A4, 0x00000000} 222 }, 223 { .name = "X-Bass", 224 .nid = X_BASS, 225 .mid = 0x96, 226 .reqs = {24, 23, 25}, 227 .direct = EFX_DIR_OUT, 228 .params = 2, 229 .def_vals = {0x3F800000, 0x42A00000, 0x3F000000} 230 }, 231 { .name = "Equalizer", 232 .nid = EQUALIZER, 233 .mid = 0x96, 234 .reqs = {9, 10, 11, 12, 13, 14, 235 15, 16, 17, 18, 19, 20}, 236 .direct = EFX_DIR_OUT, 237 .params = 11, 238 .def_vals = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 239 0x00000000, 0x00000000, 0x00000000, 0x00000000, 240 0x00000000, 0x00000000, 0x00000000, 0x00000000} 241 }, 242 { .name = "Echo Cancellation", 243 .nid = ECHO_CANCELLATION, 244 .mid = 0x95, 245 .reqs = {0, 1, 2, 3}, 246 .direct = EFX_DIR_IN, 247 .params = 3, 248 .def_vals = {0x00000000, 0x3F3A9692, 0x00000000, 0x00000000} 249 }, 250 { .name = "Voice Focus", 251 .nid = VOICE_FOCUS, 252 .mid = 0x95, 253 .reqs = {6, 7, 8, 9}, 254 .direct = EFX_DIR_IN, 255 .params = 3, 256 .def_vals = {0x3F800000, 0x3D7DF3B6, 0x41F00000, 0x41F00000} 257 }, 258 { .name = "Mic SVM", 259 .nid = MIC_SVM, 260 .mid = 0x95, 261 .reqs = {44, 45}, 262 .direct = EFX_DIR_IN, 263 .params = 1, 264 .def_vals = {0x00000000, 0x3F3D70A4} 265 }, 266 { .name = "Noise Reduction", 267 .nid = NOISE_REDUCTION, 268 .mid = 0x95, 269 .reqs = {4, 5}, 270 .direct = EFX_DIR_IN, 271 .params = 1, 272 .def_vals = {0x3F800000, 0x3F000000} 273 }, 274 { .name = "VoiceFX", 275 .nid = VOICEFX, 276 .mid = 0x95, 277 .reqs = {10, 11, 12, 13, 14, 15, 16, 17, 18}, 278 .direct = EFX_DIR_IN, 279 .params = 8, 280 .def_vals = {0x00000000, 0x43C80000, 0x44AF0000, 0x44FA0000, 281 0x3F800000, 0x3F800000, 0x3F800000, 0x00000000, 282 0x00000000} 283 } 284 }; 285 286 /* Tuning controls */ 287 #ifdef ENABLE_TUNING_CONTROLS 288 289 enum { 290 #define TUNING_CTL_START_NID 0xC0 291 WEDGE_ANGLE = TUNING_CTL_START_NID, 292 SVM_LEVEL, 293 EQUALIZER_BAND_0, 294 EQUALIZER_BAND_1, 295 EQUALIZER_BAND_2, 296 EQUALIZER_BAND_3, 297 EQUALIZER_BAND_4, 298 EQUALIZER_BAND_5, 299 EQUALIZER_BAND_6, 300 EQUALIZER_BAND_7, 301 EQUALIZER_BAND_8, 302 EQUALIZER_BAND_9, 303 TUNING_CTL_END_NID 304 #define TUNING_CTLS_COUNT (TUNING_CTL_END_NID - TUNING_CTL_START_NID) 305 }; 306 307 struct ct_tuning_ctl { 308 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; 309 hda_nid_t parent_nid; 310 hda_nid_t nid; 311 int mid; /*effect module ID*/ 312 int req; /*effect module request*/ 313 int direct; /* 0:output; 1:input*/ 314 unsigned int def_val;/*effect default values*/ 315 }; 316 317 static const struct ct_tuning_ctl ca0132_tuning_ctls[] = { 318 { .name = "Wedge Angle", 319 .parent_nid = VOICE_FOCUS, 320 .nid = WEDGE_ANGLE, 321 .mid = 0x95, 322 .req = 8, 323 .direct = EFX_DIR_IN, 324 .def_val = 0x41F00000 325 }, 326 { .name = "SVM Level", 327 .parent_nid = MIC_SVM, 328 .nid = SVM_LEVEL, 329 .mid = 0x95, 330 .req = 45, 331 .direct = EFX_DIR_IN, 332 .def_val = 0x3F3D70A4 333 }, 334 { .name = "EQ Band0", 335 .parent_nid = EQUALIZER, 336 .nid = EQUALIZER_BAND_0, 337 .mid = 0x96, 338 .req = 11, 339 .direct = EFX_DIR_OUT, 340 .def_val = 0x00000000 341 }, 342 { .name = "EQ Band1", 343 .parent_nid = EQUALIZER, 344 .nid = EQUALIZER_BAND_1, 345 .mid = 0x96, 346 .req = 12, 347 .direct = EFX_DIR_OUT, 348 .def_val = 0x00000000 349 }, 350 { .name = "EQ Band2", 351 .parent_nid = EQUALIZER, 352 .nid = EQUALIZER_BAND_2, 353 .mid = 0x96, 354 .req = 13, 355 .direct = EFX_DIR_OUT, 356 .def_val = 0x00000000 357 }, 358 { .name = "EQ Band3", 359 .parent_nid = EQUALIZER, 360 .nid = EQUALIZER_BAND_3, 361 .mid = 0x96, 362 .req = 14, 363 .direct = EFX_DIR_OUT, 364 .def_val = 0x00000000 365 }, 366 { .name = "EQ Band4", 367 .parent_nid = EQUALIZER, 368 .nid = EQUALIZER_BAND_4, 369 .mid = 0x96, 370 .req = 15, 371 .direct = EFX_DIR_OUT, 372 .def_val = 0x00000000 373 }, 374 { .name = "EQ Band5", 375 .parent_nid = EQUALIZER, 376 .nid = EQUALIZER_BAND_5, 377 .mid = 0x96, 378 .req = 16, 379 .direct = EFX_DIR_OUT, 380 .def_val = 0x00000000 381 }, 382 { .name = "EQ Band6", 383 .parent_nid = EQUALIZER, 384 .nid = EQUALIZER_BAND_6, 385 .mid = 0x96, 386 .req = 17, 387 .direct = EFX_DIR_OUT, 388 .def_val = 0x00000000 389 }, 390 { .name = "EQ Band7", 391 .parent_nid = EQUALIZER, 392 .nid = EQUALIZER_BAND_7, 393 .mid = 0x96, 394 .req = 18, 395 .direct = EFX_DIR_OUT, 396 .def_val = 0x00000000 397 }, 398 { .name = "EQ Band8", 399 .parent_nid = EQUALIZER, 400 .nid = EQUALIZER_BAND_8, 401 .mid = 0x96, 402 .req = 19, 403 .direct = EFX_DIR_OUT, 404 .def_val = 0x00000000 405 }, 406 { .name = "EQ Band9", 407 .parent_nid = EQUALIZER, 408 .nid = EQUALIZER_BAND_9, 409 .mid = 0x96, 410 .req = 20, 411 .direct = EFX_DIR_OUT, 412 .def_val = 0x00000000 413 } 414 }; 415 #endif 416 417 /* Voice FX Presets */ 418 #define VOICEFX_MAX_PARAM_COUNT 9 419 420 struct ct_voicefx { 421 char *name; 422 hda_nid_t nid; 423 int mid; 424 int reqs[VOICEFX_MAX_PARAM_COUNT]; /*effect module request*/ 425 }; 426 427 struct ct_voicefx_preset { 428 char *name; /*preset name*/ 429 unsigned int vals[VOICEFX_MAX_PARAM_COUNT]; 430 }; 431 432 static const struct ct_voicefx ca0132_voicefx = { 433 .name = "VoiceFX Capture Switch", 434 .nid = VOICEFX, 435 .mid = 0x95, 436 .reqs = {10, 11, 12, 13, 14, 15, 16, 17, 18} 437 }; 438 439 static const struct ct_voicefx_preset ca0132_voicefx_presets[] = { 440 { .name = "Neutral", 441 .vals = { 0x00000000, 0x43C80000, 0x44AF0000, 442 0x44FA0000, 0x3F800000, 0x3F800000, 443 0x3F800000, 0x00000000, 0x00000000 } 444 }, 445 { .name = "Female2Male", 446 .vals = { 0x3F800000, 0x43C80000, 0x44AF0000, 447 0x44FA0000, 0x3F19999A, 0x3F866666, 448 0x3F800000, 0x00000000, 0x00000000 } 449 }, 450 { .name = "Male2Female", 451 .vals = { 0x3F800000, 0x43C80000, 0x44AF0000, 452 0x450AC000, 0x4017AE14, 0x3F6B851F, 453 0x3F800000, 0x00000000, 0x00000000 } 454 }, 455 { .name = "ScrappyKid", 456 .vals = { 0x3F800000, 0x43C80000, 0x44AF0000, 457 0x44FA0000, 0x40400000, 0x3F28F5C3, 458 0x3F800000, 0x00000000, 0x00000000 } 459 }, 460 { .name = "Elderly", 461 .vals = { 0x3F800000, 0x44324000, 0x44BB8000, 462 0x44E10000, 0x3FB33333, 0x3FB9999A, 463 0x3F800000, 0x3E3A2E43, 0x00000000 } 464 }, 465 { .name = "Orc", 466 .vals = { 0x3F800000, 0x43EA0000, 0x44A52000, 467 0x45098000, 0x3F266666, 0x3FC00000, 468 0x3F800000, 0x00000000, 0x00000000 } 469 }, 470 { .name = "Elf", 471 .vals = { 0x3F800000, 0x43C70000, 0x44AE6000, 472 0x45193000, 0x3F8E147B, 0x3F75C28F, 473 0x3F800000, 0x00000000, 0x00000000 } 474 }, 475 { .name = "Dwarf", 476 .vals = { 0x3F800000, 0x43930000, 0x44BEE000, 477 0x45007000, 0x3F451EB8, 0x3F7851EC, 478 0x3F800000, 0x00000000, 0x00000000 } 479 }, 480 { .name = "AlienBrute", 481 .vals = { 0x3F800000, 0x43BFC5AC, 0x44B28FDF, 482 0x451F6000, 0x3F266666, 0x3FA7D945, 483 0x3F800000, 0x3CF5C28F, 0x00000000 } 484 }, 485 { .name = "Robot", 486 .vals = { 0x3F800000, 0x43C80000, 0x44AF0000, 487 0x44FA0000, 0x3FB2718B, 0x3F800000, 488 0xBC07010E, 0x00000000, 0x00000000 } 489 }, 490 { .name = "Marine", 491 .vals = { 0x3F800000, 0x43C20000, 0x44906000, 492 0x44E70000, 0x3F4CCCCD, 0x3F8A3D71, 493 0x3F0A3D71, 0x00000000, 0x00000000 } 494 }, 495 { .name = "Emo", 496 .vals = { 0x3F800000, 0x43C80000, 0x44AF0000, 497 0x44FA0000, 0x3F800000, 0x3F800000, 498 0x3E4CCCCD, 0x00000000, 0x00000000 } 499 }, 500 { .name = "DeepVoice", 501 .vals = { 0x3F800000, 0x43A9C5AC, 0x44AA4FDF, 502 0x44FFC000, 0x3EDBB56F, 0x3F99C4CA, 503 0x3F800000, 0x00000000, 0x00000000 } 504 }, 505 { .name = "Munchkin", 506 .vals = { 0x3F800000, 0x43C80000, 0x44AF0000, 507 0x44FA0000, 0x3F800000, 0x3F1A043C, 508 0x3F800000, 0x00000000, 0x00000000 } 509 } 510 }; 511 512 /* ca0132 EQ presets, taken from Windows Sound Blaster Z Driver */ 513 514 #define EQ_PRESET_MAX_PARAM_COUNT 11 515 516 struct ct_eq { 517 char *name; 518 hda_nid_t nid; 519 int mid; 520 int reqs[EQ_PRESET_MAX_PARAM_COUNT]; /*effect module request*/ 521 }; 522 523 struct ct_eq_preset { 524 char *name; /*preset name*/ 525 unsigned int vals[EQ_PRESET_MAX_PARAM_COUNT]; 526 }; 527 528 static const struct ct_eq ca0132_alt_eq_enum = { 529 .name = "FX: Equalizer Preset Switch", 530 .nid = EQ_PRESET_ENUM, 531 .mid = 0x96, 532 .reqs = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20} 533 }; 534 535 536 static const struct ct_eq_preset ca0132_alt_eq_presets[] = { 537 { .name = "Flat", 538 .vals = { 0x00000000, 0x00000000, 0x00000000, 539 0x00000000, 0x00000000, 0x00000000, 540 0x00000000, 0x00000000, 0x00000000, 541 0x00000000, 0x00000000 } 542 }, 543 { .name = "Acoustic", 544 .vals = { 0x00000000, 0x00000000, 0x3F8CCCCD, 545 0x40000000, 0x00000000, 0x00000000, 546 0x00000000, 0x00000000, 0x40000000, 547 0x40000000, 0x40000000 } 548 }, 549 { .name = "Classical", 550 .vals = { 0x00000000, 0x00000000, 0x40C00000, 551 0x40C00000, 0x40466666, 0x00000000, 552 0x00000000, 0x00000000, 0x00000000, 553 0x40466666, 0x40466666 } 554 }, 555 { .name = "Country", 556 .vals = { 0x00000000, 0xBF99999A, 0x00000000, 557 0x3FA66666, 0x3FA66666, 0x3F8CCCCD, 558 0x00000000, 0x00000000, 0x40000000, 559 0x40466666, 0x40800000 } 560 }, 561 { .name = "Dance", 562 .vals = { 0x00000000, 0xBF99999A, 0x40000000, 563 0x40466666, 0x40866666, 0xBF99999A, 564 0xBF99999A, 0x00000000, 0x00000000, 565 0x40800000, 0x40800000 } 566 }, 567 { .name = "Jazz", 568 .vals = { 0x00000000, 0x00000000, 0x00000000, 569 0x3F8CCCCD, 0x40800000, 0x40800000, 570 0x40800000, 0x00000000, 0x3F8CCCCD, 571 0x40466666, 0x40466666 } 572 }, 573 { .name = "New Age", 574 .vals = { 0x00000000, 0x00000000, 0x40000000, 575 0x40000000, 0x00000000, 0x00000000, 576 0x00000000, 0x3F8CCCCD, 0x40000000, 577 0x40000000, 0x40000000 } 578 }, 579 { .name = "Pop", 580 .vals = { 0x00000000, 0xBFCCCCCD, 0x00000000, 581 0x40000000, 0x40000000, 0x00000000, 582 0xBF99999A, 0xBF99999A, 0x00000000, 583 0x40466666, 0x40C00000 } 584 }, 585 { .name = "Rock", 586 .vals = { 0x00000000, 0xBF99999A, 0xBF99999A, 587 0x3F8CCCCD, 0x40000000, 0xBF99999A, 588 0xBF99999A, 0x00000000, 0x00000000, 589 0x40800000, 0x40800000 } 590 }, 591 { .name = "Vocal", 592 .vals = { 0x00000000, 0xC0000000, 0xBF99999A, 593 0xBF99999A, 0x00000000, 0x40466666, 594 0x40800000, 0x40466666, 0x00000000, 595 0x00000000, 0x3F8CCCCD } 596 } 597 }; 598 599 /* 600 * DSP reqs for handling full-range speakers/bass redirection. If a speaker is 601 * set as not being full range, and bass redirection is enabled, all 602 * frequencies below the crossover frequency are redirected to the LFE 603 * channel. If the surround configuration has no LFE channel, this can't be 604 * enabled. X-Bass must be disabled when using these. 605 */ 606 enum speaker_range_reqs { 607 SPEAKER_BASS_REDIRECT = 0x15, 608 SPEAKER_BASS_REDIRECT_XOVER_FREQ = 0x16, 609 /* Between 0x16-0x1a are the X-Bass reqs. */ 610 SPEAKER_FULL_RANGE_FRONT_L_R = 0x1a, 611 SPEAKER_FULL_RANGE_CENTER_LFE = 0x1b, 612 SPEAKER_FULL_RANGE_REAR_L_R = 0x1c, 613 SPEAKER_FULL_RANGE_SURROUND_L_R = 0x1d, 614 SPEAKER_BASS_REDIRECT_SUB_GAIN = 0x1e, 615 }; 616 617 /* 618 * Definitions for the DSP req's to handle speaker tuning. These all belong to 619 * module ID 0x96, the output effects module. 620 */ 621 enum speaker_tuning_reqs { 622 /* 623 * Currently, this value is always set to 0.0f. However, on Windows, 624 * when selecting certain headphone profiles on the new Sound Blaster 625 * connect software, the QUERY_SPEAKER_EQ_ADDRESS req on mid 0x80 is 626 * sent. This gets the speaker EQ address area, which is then used to 627 * send over (presumably) an equalizer profile for the specific 628 * headphone setup. It is sent using the same method the DSP 629 * firmware is uploaded with, which I believe is why the 'ctspeq.bin' 630 * file exists in linux firmware tree but goes unused. It would also 631 * explain why the QUERY_SPEAKER_EQ_ADDRESS req is defined but unused. 632 * Once this profile is sent over, SPEAKER_TUNING_USE_SPEAKER_EQ is 633 * set to 1.0f. 634 */ 635 SPEAKER_TUNING_USE_SPEAKER_EQ = 0x1f, 636 SPEAKER_TUNING_ENABLE_CENTER_EQ = 0x20, 637 SPEAKER_TUNING_FRONT_LEFT_VOL_LEVEL = 0x21, 638 SPEAKER_TUNING_FRONT_RIGHT_VOL_LEVEL = 0x22, 639 SPEAKER_TUNING_CENTER_VOL_LEVEL = 0x23, 640 SPEAKER_TUNING_LFE_VOL_LEVEL = 0x24, 641 SPEAKER_TUNING_REAR_LEFT_VOL_LEVEL = 0x25, 642 SPEAKER_TUNING_REAR_RIGHT_VOL_LEVEL = 0x26, 643 SPEAKER_TUNING_SURROUND_LEFT_VOL_LEVEL = 0x27, 644 SPEAKER_TUNING_SURROUND_RIGHT_VOL_LEVEL = 0x28, 645 /* 646 * Inversion is used when setting headphone virtualization to line 647 * out. Not sure why this is, but it's the only place it's ever used. 648 */ 649 SPEAKER_TUNING_FRONT_LEFT_INVERT = 0x29, 650 SPEAKER_TUNING_FRONT_RIGHT_INVERT = 0x2a, 651 SPEAKER_TUNING_CENTER_INVERT = 0x2b, 652 SPEAKER_TUNING_LFE_INVERT = 0x2c, 653 SPEAKER_TUNING_REAR_LEFT_INVERT = 0x2d, 654 SPEAKER_TUNING_REAR_RIGHT_INVERT = 0x2e, 655 SPEAKER_TUNING_SURROUND_LEFT_INVERT = 0x2f, 656 SPEAKER_TUNING_SURROUND_RIGHT_INVERT = 0x30, 657 /* Delay is used when setting surround speaker distance in Windows. */ 658 SPEAKER_TUNING_FRONT_LEFT_DELAY = 0x31, 659 SPEAKER_TUNING_FRONT_RIGHT_DELAY = 0x32, 660 SPEAKER_TUNING_CENTER_DELAY = 0x33, 661 SPEAKER_TUNING_LFE_DELAY = 0x34, 662 SPEAKER_TUNING_REAR_LEFT_DELAY = 0x35, 663 SPEAKER_TUNING_REAR_RIGHT_DELAY = 0x36, 664 SPEAKER_TUNING_SURROUND_LEFT_DELAY = 0x37, 665 SPEAKER_TUNING_SURROUND_RIGHT_DELAY = 0x38, 666 /* Of these two, only mute seems to ever be used. */ 667 SPEAKER_TUNING_MAIN_VOLUME = 0x39, 668 SPEAKER_TUNING_MUTE = 0x3a, 669 }; 670 671 /* Surround output channel count configuration structures. */ 672 #define SPEAKER_CHANNEL_CFG_COUNT 5 673 enum { 674 SPEAKER_CHANNELS_2_0, 675 SPEAKER_CHANNELS_2_1, 676 SPEAKER_CHANNELS_4_0, 677 SPEAKER_CHANNELS_4_1, 678 SPEAKER_CHANNELS_5_1, 679 }; 680 681 struct ca0132_alt_speaker_channel_cfg { 682 char *name; 683 unsigned int val; 684 }; 685 686 static const struct ca0132_alt_speaker_channel_cfg speaker_channel_cfgs[] = { 687 { .name = "2.0", 688 .val = FLOAT_ONE 689 }, 690 { .name = "2.1", 691 .val = FLOAT_TWO 692 }, 693 { .name = "4.0", 694 .val = FLOAT_FIVE 695 }, 696 { .name = "4.1", 697 .val = FLOAT_SIX 698 }, 699 { .name = "5.1", 700 .val = FLOAT_EIGHT 701 } 702 }; 703 704 /* 705 * DSP volume setting structs. Req 1 is left volume, req 2 is right volume, 706 * and I don't know what the third req is, but it's always zero. I assume it's 707 * some sort of update or set command to tell the DSP there's new volume info. 708 */ 709 #define DSP_VOL_OUT 0 710 #define DSP_VOL_IN 1 711 712 struct ct_dsp_volume_ctl { 713 hda_nid_t vnid; 714 int mid; /* module ID*/ 715 unsigned int reqs[3]; /* scp req ID */ 716 }; 717 718 static const struct ct_dsp_volume_ctl ca0132_alt_vol_ctls[] = { 719 { .vnid = VNID_SPK, 720 .mid = 0x32, 721 .reqs = {3, 4, 2} 722 }, 723 { .vnid = VNID_MIC, 724 .mid = 0x37, 725 .reqs = {2, 3, 1} 726 } 727 }; 728 729 /* Values for ca0113_mmio_command_set for selecting output. */ 730 #define AE_CA0113_OUT_SET_COMMANDS 6 731 struct ae_ca0113_output_set { 732 unsigned int group[AE_CA0113_OUT_SET_COMMANDS]; 733 unsigned int target[AE_CA0113_OUT_SET_COMMANDS]; 734 unsigned int vals[NUM_OF_OUTPUTS][AE_CA0113_OUT_SET_COMMANDS]; 735 }; 736 737 static const struct ae_ca0113_output_set ae5_ca0113_output_presets = { 738 .group = { 0x30, 0x30, 0x48, 0x48, 0x48, 0x30 }, 739 .target = { 0x2e, 0x30, 0x0d, 0x17, 0x19, 0x32 }, 740 /* Speakers. */ 741 .vals = { { 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f }, 742 /* Headphones. */ 743 { 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00 } }, 744 }; 745 746 static const struct ae_ca0113_output_set ae7_ca0113_output_presets = { 747 .group = { 0x30, 0x30, 0x48, 0x48, 0x48, 0x30 }, 748 .target = { 0x2e, 0x30, 0x0d, 0x17, 0x19, 0x32 }, 749 /* Speakers. */ 750 .vals = { { 0x00, 0x00, 0x40, 0x00, 0x00, 0x3f }, 751 /* Headphones. */ 752 { 0x3f, 0x3f, 0x00, 0x00, 0x02, 0x00 } }, 753 }; 754 755 /* ae5 ca0113 command sequences to set headphone gain levels. */ 756 #define AE5_HEADPHONE_GAIN_PRESET_MAX_COMMANDS 4 757 struct ae5_headphone_gain_set { 758 char *name; 759 unsigned int vals[AE5_HEADPHONE_GAIN_PRESET_MAX_COMMANDS]; 760 }; 761 762 static const struct ae5_headphone_gain_set ae5_headphone_gain_presets[] = { 763 { .name = "Low (16-31", 764 .vals = { 0xff, 0x2c, 0xf5, 0x32 } 765 }, 766 { .name = "Medium (32-149", 767 .vals = { 0x38, 0xa8, 0x3e, 0x4c } 768 }, 769 { .name = "High (150-600", 770 .vals = { 0xff, 0xff, 0xff, 0x7f } 771 } 772 }; 773 774 struct ae5_filter_set { 775 char *name; 776 unsigned int val; 777 }; 778 779 static const struct ae5_filter_set ae5_filter_presets[] = { 780 { .name = "Slow Roll Off", 781 .val = 0xa0 782 }, 783 { .name = "Minimum Phase", 784 .val = 0xc0 785 }, 786 { .name = "Fast Roll Off", 787 .val = 0x80 788 } 789 }; 790 791 /* 792 * Data structures for storing audio router remapping data. These are used to 793 * remap a currently active streams ports. 794 */ 795 struct chipio_stream_remap_data { 796 unsigned int stream_id; 797 unsigned int count; 798 799 unsigned int offset[16]; 800 unsigned int value[16]; 801 }; 802 803 static const struct chipio_stream_remap_data stream_remap_data[] = { 804 { .stream_id = 0x14, 805 .count = 0x04, 806 .offset = { 0x00, 0x04, 0x08, 0x0c }, 807 .value = { 0x0001f8c0, 0x0001f9c1, 0x0001fac6, 0x0001fbc7 }, 808 }, 809 { .stream_id = 0x0c, 810 .count = 0x0c, 811 .offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, 0x18, 0x1c, 812 0x20, 0x24, 0x28, 0x2c }, 813 .value = { 0x0001e0c0, 0x0001e1c1, 0x0001e4c2, 0x0001e5c3, 814 0x0001e2c4, 0x0001e3c5, 0x0001e8c6, 0x0001e9c7, 815 0x0001ecc8, 0x0001edc9, 0x0001eaca, 0x0001ebcb }, 816 }, 817 { .stream_id = 0x0c, 818 .count = 0x08, 819 .offset = { 0x08, 0x0c, 0x10, 0x14, 0x20, 0x24, 0x28, 0x2c }, 820 .value = { 0x000140c2, 0x000141c3, 0x000150c4, 0x000151c5, 821 0x000142c8, 0x000143c9, 0x000152ca, 0x000153cb }, 822 } 823 }; 824 825 enum hda_cmd_vendor_io { 826 /* for DspIO node */ 827 VENDOR_DSPIO_SCP_WRITE_DATA_LOW = 0x000, 828 VENDOR_DSPIO_SCP_WRITE_DATA_HIGH = 0x100, 829 830 VENDOR_DSPIO_STATUS = 0xF01, 831 VENDOR_DSPIO_SCP_POST_READ_DATA = 0x702, 832 VENDOR_DSPIO_SCP_READ_DATA = 0xF02, 833 VENDOR_DSPIO_DSP_INIT = 0x703, 834 VENDOR_DSPIO_SCP_POST_COUNT_QUERY = 0x704, 835 VENDOR_DSPIO_SCP_READ_COUNT = 0xF04, 836 837 /* for ChipIO node */ 838 VENDOR_CHIPIO_ADDRESS_LOW = 0x000, 839 VENDOR_CHIPIO_ADDRESS_HIGH = 0x100, 840 VENDOR_CHIPIO_STREAM_FORMAT = 0x200, 841 VENDOR_CHIPIO_DATA_LOW = 0x300, 842 VENDOR_CHIPIO_DATA_HIGH = 0x400, 843 844 VENDOR_CHIPIO_8051_WRITE_DIRECT = 0x500, 845 VENDOR_CHIPIO_8051_READ_DIRECT = 0xD00, 846 847 VENDOR_CHIPIO_GET_PARAMETER = 0xF00, 848 VENDOR_CHIPIO_STATUS = 0xF01, 849 VENDOR_CHIPIO_HIC_POST_READ = 0x702, 850 VENDOR_CHIPIO_HIC_READ_DATA = 0xF03, 851 852 VENDOR_CHIPIO_8051_DATA_WRITE = 0x707, 853 VENDOR_CHIPIO_8051_DATA_READ = 0xF07, 854 VENDOR_CHIPIO_8051_PMEM_READ = 0xF08, 855 VENDOR_CHIPIO_8051_IRAM_WRITE = 0x709, 856 VENDOR_CHIPIO_8051_IRAM_READ = 0xF09, 857 858 VENDOR_CHIPIO_CT_EXTENSIONS_ENABLE = 0x70A, 859 VENDOR_CHIPIO_CT_EXTENSIONS_GET = 0xF0A, 860 861 VENDOR_CHIPIO_PLL_PMU_WRITE = 0x70C, 862 VENDOR_CHIPIO_PLL_PMU_READ = 0xF0C, 863 VENDOR_CHIPIO_8051_ADDRESS_LOW = 0x70D, 864 VENDOR_CHIPIO_8051_ADDRESS_HIGH = 0x70E, 865 VENDOR_CHIPIO_FLAG_SET = 0x70F, 866 VENDOR_CHIPIO_FLAGS_GET = 0xF0F, 867 VENDOR_CHIPIO_PARAM_SET = 0x710, 868 VENDOR_CHIPIO_PARAM_GET = 0xF10, 869 870 VENDOR_CHIPIO_PORT_ALLOC_CONFIG_SET = 0x711, 871 VENDOR_CHIPIO_PORT_ALLOC_SET = 0x712, 872 VENDOR_CHIPIO_PORT_ALLOC_GET = 0xF12, 873 VENDOR_CHIPIO_PORT_FREE_SET = 0x713, 874 875 VENDOR_CHIPIO_PARAM_EX_ID_GET = 0xF17, 876 VENDOR_CHIPIO_PARAM_EX_ID_SET = 0x717, 877 VENDOR_CHIPIO_PARAM_EX_VALUE_GET = 0xF18, 878 VENDOR_CHIPIO_PARAM_EX_VALUE_SET = 0x718, 879 880 VENDOR_CHIPIO_DMIC_CTL_SET = 0x788, 881 VENDOR_CHIPIO_DMIC_CTL_GET = 0xF88, 882 VENDOR_CHIPIO_DMIC_PIN_SET = 0x789, 883 VENDOR_CHIPIO_DMIC_PIN_GET = 0xF89, 884 VENDOR_CHIPIO_DMIC_MCLK_SET = 0x78A, 885 VENDOR_CHIPIO_DMIC_MCLK_GET = 0xF8A, 886 887 VENDOR_CHIPIO_EAPD_SEL_SET = 0x78D 888 }; 889 890 /* 891 * Control flag IDs 892 */ 893 enum control_flag_id { 894 /* Connection manager stream setup is bypassed/enabled */ 895 CONTROL_FLAG_C_MGR = 0, 896 /* DSP DMA is bypassed/enabled */ 897 CONTROL_FLAG_DMA = 1, 898 /* 8051 'idle' mode is disabled/enabled */ 899 CONTROL_FLAG_IDLE_ENABLE = 2, 900 /* Tracker for the SPDIF-in path is bypassed/enabled */ 901 CONTROL_FLAG_TRACKER = 3, 902 /* DigitalOut to Spdif2Out connection is disabled/enabled */ 903 CONTROL_FLAG_SPDIF2OUT = 4, 904 /* Digital Microphone is disabled/enabled */ 905 CONTROL_FLAG_DMIC = 5, 906 /* ADC_B rate is 48 kHz/96 kHz */ 907 CONTROL_FLAG_ADC_B_96KHZ = 6, 908 /* ADC_C rate is 48 kHz/96 kHz */ 909 CONTROL_FLAG_ADC_C_96KHZ = 7, 910 /* DAC rate is 48 kHz/96 kHz (affects all DACs) */ 911 CONTROL_FLAG_DAC_96KHZ = 8, 912 /* DSP rate is 48 kHz/96 kHz */ 913 CONTROL_FLAG_DSP_96KHZ = 9, 914 /* SRC clock is 98 MHz/196 MHz (196 MHz forces rate to 96 KHz) */ 915 CONTROL_FLAG_SRC_CLOCK_196MHZ = 10, 916 /* SRC rate is 48 kHz/96 kHz (48 kHz disabled when clock is 196 MHz) */ 917 CONTROL_FLAG_SRC_RATE_96KHZ = 11, 918 /* Decode Loop (DSP->SRC->DSP) is disabled/enabled */ 919 CONTROL_FLAG_DECODE_LOOP = 12, 920 /* De-emphasis filter on DAC-1 disabled/enabled */ 921 CONTROL_FLAG_DAC1_DEEMPHASIS = 13, 922 /* De-emphasis filter on DAC-2 disabled/enabled */ 923 CONTROL_FLAG_DAC2_DEEMPHASIS = 14, 924 /* De-emphasis filter on DAC-3 disabled/enabled */ 925 CONTROL_FLAG_DAC3_DEEMPHASIS = 15, 926 /* High-pass filter on ADC_B disabled/enabled */ 927 CONTROL_FLAG_ADC_B_HIGH_PASS = 16, 928 /* High-pass filter on ADC_C disabled/enabled */ 929 CONTROL_FLAG_ADC_C_HIGH_PASS = 17, 930 /* Common mode on Port_A disabled/enabled */ 931 CONTROL_FLAG_PORT_A_COMMON_MODE = 18, 932 /* Common mode on Port_D disabled/enabled */ 933 CONTROL_FLAG_PORT_D_COMMON_MODE = 19, 934 /* Impedance for ramp generator on Port_A 16 Ohm/10K Ohm */ 935 CONTROL_FLAG_PORT_A_10KOHM_LOAD = 20, 936 /* Impedance for ramp generator on Port_D, 16 Ohm/10K Ohm */ 937 CONTROL_FLAG_PORT_D_10KOHM_LOAD = 21, 938 /* ASI rate is 48kHz/96kHz */ 939 CONTROL_FLAG_ASI_96KHZ = 22, 940 /* DAC power settings able to control attached ports no/yes */ 941 CONTROL_FLAG_DACS_CONTROL_PORTS = 23, 942 /* Clock Stop OK reporting is disabled/enabled */ 943 CONTROL_FLAG_CONTROL_STOP_OK_ENABLE = 24, 944 /* Number of control flags */ 945 CONTROL_FLAGS_MAX = (CONTROL_FLAG_CONTROL_STOP_OK_ENABLE+1) 946 }; 947 948 /* 949 * Control parameter IDs 950 */ 951 enum control_param_id { 952 /* 0: None, 1: Mic1In*/ 953 CONTROL_PARAM_VIP_SOURCE = 1, 954 /* 0: force HDA, 1: allow DSP if HDA Spdif1Out stream is idle */ 955 CONTROL_PARAM_SPDIF1_SOURCE = 2, 956 /* Port A output stage gain setting to use when 16 Ohm output 957 * impedance is selected*/ 958 CONTROL_PARAM_PORTA_160OHM_GAIN = 8, 959 /* Port D output stage gain setting to use when 16 Ohm output 960 * impedance is selected*/ 961 CONTROL_PARAM_PORTD_160OHM_GAIN = 10, 962 963 /* 964 * This control param name was found in the 8051 memory, and makes 965 * sense given the fact the AE-5 uses it and has the ASI flag set. 966 */ 967 CONTROL_PARAM_ASI = 23, 968 969 /* Stream Control */ 970 971 /* Select stream with the given ID */ 972 CONTROL_PARAM_STREAM_ID = 24, 973 /* Source connection point for the selected stream */ 974 CONTROL_PARAM_STREAM_SOURCE_CONN_POINT = 25, 975 /* Destination connection point for the selected stream */ 976 CONTROL_PARAM_STREAM_DEST_CONN_POINT = 26, 977 /* Number of audio channels in the selected stream */ 978 CONTROL_PARAM_STREAMS_CHANNELS = 27, 979 /*Enable control for the selected stream */ 980 CONTROL_PARAM_STREAM_CONTROL = 28, 981 982 /* Connection Point Control */ 983 984 /* Select connection point with the given ID */ 985 CONTROL_PARAM_CONN_POINT_ID = 29, 986 /* Connection point sample rate */ 987 CONTROL_PARAM_CONN_POINT_SAMPLE_RATE = 30, 988 989 /* Node Control */ 990 991 /* Select HDA node with the given ID */ 992 CONTROL_PARAM_NODE_ID = 31 993 }; 994 995 /* 996 * Dsp Io Status codes 997 */ 998 enum hda_vendor_status_dspio { 999 /* Success */ 1000 VENDOR_STATUS_DSPIO_OK = 0x00, 1001 /* Busy, unable to accept new command, the host must retry */ 1002 VENDOR_STATUS_DSPIO_BUSY = 0x01, 1003 /* SCP command queue is full */ 1004 VENDOR_STATUS_DSPIO_SCP_COMMAND_QUEUE_FULL = 0x02, 1005 /* SCP response queue is empty */ 1006 VENDOR_STATUS_DSPIO_SCP_RESPONSE_QUEUE_EMPTY = 0x03 1007 }; 1008 1009 /* 1010 * Chip Io Status codes 1011 */ 1012 enum hda_vendor_status_chipio { 1013 /* Success */ 1014 VENDOR_STATUS_CHIPIO_OK = 0x00, 1015 /* Busy, unable to accept new command, the host must retry */ 1016 VENDOR_STATUS_CHIPIO_BUSY = 0x01 1017 }; 1018 1019 /* 1020 * CA0132 sample rate 1021 */ 1022 enum ca0132_sample_rate { 1023 SR_6_000 = 0x00, 1024 SR_8_000 = 0x01, 1025 SR_9_600 = 0x02, 1026 SR_11_025 = 0x03, 1027 SR_16_000 = 0x04, 1028 SR_22_050 = 0x05, 1029 SR_24_000 = 0x06, 1030 SR_32_000 = 0x07, 1031 SR_44_100 = 0x08, 1032 SR_48_000 = 0x09, 1033 SR_88_200 = 0x0A, 1034 SR_96_000 = 0x0B, 1035 SR_144_000 = 0x0C, 1036 SR_176_400 = 0x0D, 1037 SR_192_000 = 0x0E, 1038 SR_384_000 = 0x0F, 1039 1040 SR_COUNT = 0x10, 1041 1042 SR_RATE_UNKNOWN = 0x1F 1043 }; 1044 1045 enum dsp_download_state { 1046 DSP_DOWNLOAD_FAILED = -1, 1047 DSP_DOWNLOAD_INIT = 0, 1048 DSP_DOWNLOADING = 1, 1049 DSP_DOWNLOADED = 2 1050 }; 1051 1052 /* retrieve parameters from hda format */ 1053 #define get_hdafmt_chs(fmt) (fmt & 0xf) 1054 #define get_hdafmt_bits(fmt) ((fmt >> 4) & 0x7) 1055 #define get_hdafmt_rate(fmt) ((fmt >> 8) & 0x7f) 1056 #define get_hdafmt_type(fmt) ((fmt >> 15) & 0x1) 1057 1058 /* 1059 * CA0132 specific 1060 */ 1061 1062 struct ca0132_spec { 1063 const struct snd_kcontrol_new *mixers[5]; 1064 unsigned int num_mixers; 1065 const struct hda_verb *base_init_verbs; 1066 const struct hda_verb *base_exit_verbs; 1067 const struct hda_verb *chip_init_verbs; 1068 const struct hda_verb *desktop_init_verbs; 1069 struct hda_verb *spec_init_verbs; 1070 struct auto_pin_cfg autocfg; 1071 1072 /* Nodes configurations */ 1073 struct hda_multi_out multiout; 1074 hda_nid_t out_pins[AUTO_CFG_MAX_OUTS]; 1075 hda_nid_t dacs[AUTO_CFG_MAX_OUTS]; 1076 unsigned int num_outputs; 1077 hda_nid_t input_pins[AUTO_PIN_LAST]; 1078 hda_nid_t adcs[AUTO_PIN_LAST]; 1079 hda_nid_t dig_out; 1080 hda_nid_t dig_in; 1081 unsigned int num_inputs; 1082 hda_nid_t shared_mic_nid; 1083 hda_nid_t shared_out_nid; 1084 hda_nid_t unsol_tag_hp; 1085 hda_nid_t unsol_tag_front_hp; /* for desktop ca0132 codecs */ 1086 hda_nid_t unsol_tag_amic1; 1087 1088 /* chip access */ 1089 struct mutex chipio_mutex; /* chip access mutex */ 1090 u32 curr_chip_addx; 1091 1092 /* DSP download related */ 1093 enum dsp_download_state dsp_state; 1094 unsigned int dsp_stream_id; 1095 unsigned int wait_scp; 1096 unsigned int wait_scp_header; 1097 unsigned int wait_num_data; 1098 unsigned int scp_resp_header; 1099 unsigned int scp_resp_data[4]; 1100 unsigned int scp_resp_count; 1101 bool startup_check_entered; 1102 bool dsp_reload; 1103 1104 /* mixer and effects related */ 1105 unsigned char dmic_ctl; 1106 int cur_out_type; 1107 int cur_mic_type; 1108 long vnode_lvol[VNODES_COUNT]; 1109 long vnode_rvol[VNODES_COUNT]; 1110 long vnode_lswitch[VNODES_COUNT]; 1111 long vnode_rswitch[VNODES_COUNT]; 1112 long effects_switch[EFFECTS_COUNT]; 1113 long voicefx_val; 1114 long cur_mic_boost; 1115 /* ca0132_alt control related values */ 1116 unsigned char in_enum_val; 1117 unsigned char out_enum_val; 1118 unsigned char channel_cfg_val; 1119 unsigned char speaker_range_val[2]; 1120 unsigned char mic_boost_enum_val; 1121 unsigned char smart_volume_setting; 1122 unsigned char bass_redirection_val; 1123 long bass_redirect_xover_freq; 1124 long fx_ctl_val[EFFECT_LEVEL_SLIDERS]; 1125 long xbass_xover_freq; 1126 long eq_preset_val; 1127 unsigned int tlv[4]; 1128 struct hda_vmaster_mute_hook vmaster_mute; 1129 /* AE-5 Control values */ 1130 unsigned char ae5_headphone_gain_val; 1131 unsigned char ae5_filter_val; 1132 /* ZxR Control Values */ 1133 unsigned char zxr_gain_set; 1134 1135 struct hda_codec *codec; 1136 struct delayed_work unsol_hp_work; 1137 int quirk; 1138 1139 #ifdef ENABLE_TUNING_CONTROLS 1140 long cur_ctl_vals[TUNING_CTLS_COUNT]; 1141 #endif 1142 /* 1143 * The Recon3D, Sound Blaster Z, Sound Blaster ZxR, and Sound Blaster 1144 * AE-5 all use PCI region 2 to toggle GPIO and other currently unknown 1145 * things. 1146 */ 1147 bool use_pci_mmio; 1148 void __iomem *mem_base; 1149 1150 /* 1151 * Whether or not to use the alt functions like alt_select_out, 1152 * alt_select_in, etc. Only used on desktop codecs for now, because of 1153 * surround sound support. 1154 */ 1155 bool use_alt_functions; 1156 1157 /* 1158 * Whether or not to use alt controls: volume effect sliders, EQ 1159 * presets, smart volume presets, and new control names with FX prefix. 1160 * Renames PlayEnhancement and CrystalVoice too. 1161 */ 1162 bool use_alt_controls; 1163 }; 1164 1165 /* 1166 * CA0132 quirks table 1167 */ 1168 enum { 1169 QUIRK_NONE, 1170 QUIRK_ALIENWARE, 1171 QUIRK_ALIENWARE_M17XR4, 1172 QUIRK_SBZ, 1173 QUIRK_ZXR, 1174 QUIRK_ZXR_DBPRO, 1175 QUIRK_R3DI, 1176 QUIRK_R3D, 1177 QUIRK_AE5, 1178 QUIRK_AE7, 1179 }; 1180 1181 #ifdef CONFIG_PCI 1182 #define ca0132_quirk(spec) ((spec)->quirk) 1183 #define ca0132_use_pci_mmio(spec) ((spec)->use_pci_mmio) 1184 #define ca0132_use_alt_functions(spec) ((spec)->use_alt_functions) 1185 #define ca0132_use_alt_controls(spec) ((spec)->use_alt_controls) 1186 #else 1187 #define ca0132_quirk(spec) ({ (void)(spec); QUIRK_NONE; }) 1188 #define ca0132_use_alt_functions(spec) ({ (void)(spec); false; }) 1189 #define ca0132_use_pci_mmio(spec) ({ (void)(spec); false; }) 1190 #define ca0132_use_alt_controls(spec) ({ (void)(spec); false; }) 1191 #endif 1192 1193 static const struct hda_pintbl alienware_pincfgs[] = { 1194 { 0x0b, 0x90170110 }, /* Builtin Speaker */ 1195 { 0x0c, 0x411111f0 }, /* N/A */ 1196 { 0x0d, 0x411111f0 }, /* N/A */ 1197 { 0x0e, 0x411111f0 }, /* N/A */ 1198 { 0x0f, 0x0321101f }, /* HP */ 1199 { 0x10, 0x411111f0 }, /* Headset? disabled for now */ 1200 { 0x11, 0x03a11021 }, /* Mic */ 1201 { 0x12, 0xd5a30140 }, /* Builtin Mic */ 1202 { 0x13, 0x411111f0 }, /* N/A */ 1203 { 0x18, 0x411111f0 }, /* N/A */ 1204 {} 1205 }; 1206 1207 /* Sound Blaster Z pin configs taken from Windows Driver */ 1208 static const struct hda_pintbl sbz_pincfgs[] = { 1209 { 0x0b, 0x01017010 }, /* Port G -- Lineout FRONT L/R */ 1210 { 0x0c, 0x014510f0 }, /* SPDIF Out 1 */ 1211 { 0x0d, 0x014510f0 }, /* Digital Out */ 1212 { 0x0e, 0x01c510f0 }, /* SPDIF In */ 1213 { 0x0f, 0x0221701f }, /* Port A -- BackPanel HP */ 1214 { 0x10, 0x01017012 }, /* Port D -- Center/LFE or FP Hp */ 1215 { 0x11, 0x01017014 }, /* Port B -- LineMicIn2 / Rear L/R */ 1216 { 0x12, 0x01a170f0 }, /* Port C -- LineIn1 */ 1217 { 0x13, 0x908700f0 }, /* What U Hear In*/ 1218 { 0x18, 0x50d000f0 }, /* N/A */ 1219 {} 1220 }; 1221 1222 /* Sound Blaster ZxR pin configs taken from Windows Driver */ 1223 static const struct hda_pintbl zxr_pincfgs[] = { 1224 { 0x0b, 0x01047110 }, /* Port G -- Lineout FRONT L/R */ 1225 { 0x0c, 0x414510f0 }, /* SPDIF Out 1 - Disabled*/ 1226 { 0x0d, 0x014510f0 }, /* Digital Out */ 1227 { 0x0e, 0x41c520f0 }, /* SPDIF In - Disabled*/ 1228 { 0x0f, 0x0122711f }, /* Port A -- BackPanel HP */ 1229 { 0x10, 0x01017111 }, /* Port D -- Center/LFE */ 1230 { 0x11, 0x01017114 }, /* Port B -- LineMicIn2 / Rear L/R */ 1231 { 0x12, 0x01a271f0 }, /* Port C -- LineIn1 */ 1232 { 0x13, 0x908700f0 }, /* What U Hear In*/ 1233 { 0x18, 0x50d000f0 }, /* N/A */ 1234 {} 1235 }; 1236 1237 /* Recon3D pin configs taken from Windows Driver */ 1238 static const struct hda_pintbl r3d_pincfgs[] = { 1239 { 0x0b, 0x01014110 }, /* Port G -- Lineout FRONT L/R */ 1240 { 0x0c, 0x014510f0 }, /* SPDIF Out 1 */ 1241 { 0x0d, 0x014510f0 }, /* Digital Out */ 1242 { 0x0e, 0x01c520f0 }, /* SPDIF In */ 1243 { 0x0f, 0x0221401f }, /* Port A -- BackPanel HP */ 1244 { 0x10, 0x01016011 }, /* Port D -- Center/LFE or FP Hp */ 1245 { 0x11, 0x01011014 }, /* Port B -- LineMicIn2 / Rear L/R */ 1246 { 0x12, 0x02a090f0 }, /* Port C -- LineIn1 */ 1247 { 0x13, 0x908700f0 }, /* What U Hear In*/ 1248 { 0x18, 0x50d000f0 }, /* N/A */ 1249 {} 1250 }; 1251 1252 /* Sound Blaster AE-5 pin configs taken from Windows Driver */ 1253 static const struct hda_pintbl ae5_pincfgs[] = { 1254 { 0x0b, 0x01017010 }, /* Port G -- Lineout FRONT L/R */ 1255 { 0x0c, 0x014510f0 }, /* SPDIF Out 1 */ 1256 { 0x0d, 0x014510f0 }, /* Digital Out */ 1257 { 0x0e, 0x01c510f0 }, /* SPDIF In */ 1258 { 0x0f, 0x01017114 }, /* Port A -- Rear L/R. */ 1259 { 0x10, 0x01017012 }, /* Port D -- Center/LFE or FP Hp */ 1260 { 0x11, 0x012170ff }, /* Port B -- LineMicIn2 / Rear Headphone */ 1261 { 0x12, 0x01a170f0 }, /* Port C -- LineIn1 */ 1262 { 0x13, 0x908700f0 }, /* What U Hear In*/ 1263 { 0x18, 0x50d000f0 }, /* N/A */ 1264 {} 1265 }; 1266 1267 /* Recon3D integrated pin configs taken from Windows Driver */ 1268 static const struct hda_pintbl r3di_pincfgs[] = { 1269 { 0x0b, 0x01014110 }, /* Port G -- Lineout FRONT L/R */ 1270 { 0x0c, 0x014510f0 }, /* SPDIF Out 1 */ 1271 { 0x0d, 0x014510f0 }, /* Digital Out */ 1272 { 0x0e, 0x41c520f0 }, /* SPDIF In */ 1273 { 0x0f, 0x0221401f }, /* Port A -- BackPanel HP */ 1274 { 0x10, 0x01016011 }, /* Port D -- Center/LFE or FP Hp */ 1275 { 0x11, 0x01011014 }, /* Port B -- LineMicIn2 / Rear L/R */ 1276 { 0x12, 0x02a090f0 }, /* Port C -- LineIn1 */ 1277 { 0x13, 0x908700f0 }, /* What U Hear In*/ 1278 { 0x18, 0x500000f0 }, /* N/A */ 1279 {} 1280 }; 1281 1282 static const struct hda_pintbl ae7_pincfgs[] = { 1283 { 0x0b, 0x01017010 }, 1284 { 0x0c, 0x014510f0 }, 1285 { 0x0d, 0x414510f0 }, 1286 { 0x0e, 0x01c520f0 }, 1287 { 0x0f, 0x01017114 }, 1288 { 0x10, 0x01017011 }, 1289 { 0x11, 0x018170ff }, 1290 { 0x12, 0x01a170f0 }, 1291 { 0x13, 0x908700f0 }, 1292 { 0x18, 0x500000f0 }, 1293 {} 1294 }; 1295 1296 static const struct snd_pci_quirk ca0132_quirks[] = { 1297 SND_PCI_QUIRK(0x1028, 0x057b, "Alienware M17x R4", QUIRK_ALIENWARE_M17XR4), 1298 SND_PCI_QUIRK(0x1028, 0x0685, "Alienware 15 2015", QUIRK_ALIENWARE), 1299 SND_PCI_QUIRK(0x1028, 0x0688, "Alienware 17 2015", QUIRK_ALIENWARE), 1300 SND_PCI_QUIRK(0x1028, 0x0708, "Alienware 15 R2 2016", QUIRK_ALIENWARE), 1301 SND_PCI_QUIRK(0x1102, 0x0010, "Sound Blaster Z", QUIRK_SBZ), 1302 SND_PCI_QUIRK(0x1102, 0x0023, "Sound Blaster Z", QUIRK_SBZ), 1303 SND_PCI_QUIRK(0x1102, 0x0027, "Sound Blaster Z", QUIRK_SBZ), 1304 SND_PCI_QUIRK(0x1102, 0x0033, "Sound Blaster ZxR", QUIRK_SBZ), 1305 SND_PCI_QUIRK(0x1458, 0xA016, "Recon3Di", QUIRK_R3DI), 1306 SND_PCI_QUIRK(0x1458, 0xA026, "Gigabyte G1.Sniper Z97", QUIRK_R3DI), 1307 SND_PCI_QUIRK(0x1458, 0xA036, "Gigabyte GA-Z170X-Gaming 7", QUIRK_R3DI), 1308 SND_PCI_QUIRK(0x3842, 0x1038, "EVGA X99 Classified", QUIRK_R3DI), 1309 SND_PCI_QUIRK(0x1102, 0x0013, "Recon3D", QUIRK_R3D), 1310 SND_PCI_QUIRK(0x1102, 0x0018, "Recon3D", QUIRK_R3D), 1311 SND_PCI_QUIRK(0x1102, 0x0051, "Sound Blaster AE-5", QUIRK_AE5), 1312 SND_PCI_QUIRK(0x1102, 0x0191, "Sound Blaster AE-5 Plus", QUIRK_AE5), 1313 SND_PCI_QUIRK(0x1102, 0x0081, "Sound Blaster AE-7", QUIRK_AE7), 1314 {} 1315 }; 1316 1317 /* Output selection quirk info structures. */ 1318 #define MAX_QUIRK_MMIO_GPIO_SET_VALS 3 1319 #define MAX_QUIRK_SCP_SET_VALS 2 1320 struct ca0132_alt_out_set_info { 1321 unsigned int dac2port; /* ParamID 0x0d value. */ 1322 1323 bool has_hda_gpio; 1324 char hda_gpio_pin; 1325 char hda_gpio_set; 1326 1327 unsigned int mmio_gpio_count; 1328 char mmio_gpio_pin[MAX_QUIRK_MMIO_GPIO_SET_VALS]; 1329 char mmio_gpio_set[MAX_QUIRK_MMIO_GPIO_SET_VALS]; 1330 1331 unsigned int scp_cmds_count; 1332 unsigned int scp_cmd_mid[MAX_QUIRK_SCP_SET_VALS]; 1333 unsigned int scp_cmd_req[MAX_QUIRK_SCP_SET_VALS]; 1334 unsigned int scp_cmd_val[MAX_QUIRK_SCP_SET_VALS]; 1335 1336 bool has_chipio_write; 1337 unsigned int chipio_write_addr; 1338 unsigned int chipio_write_data; 1339 }; 1340 1341 struct ca0132_alt_out_set_quirk_data { 1342 int quirk_id; 1343 1344 bool has_headphone_gain; 1345 bool is_ae_series; 1346 1347 struct ca0132_alt_out_set_info out_set_info[NUM_OF_OUTPUTS]; 1348 }; 1349 1350 static const struct ca0132_alt_out_set_quirk_data quirk_out_set_data[] = { 1351 { .quirk_id = QUIRK_R3DI, 1352 .has_headphone_gain = false, 1353 .is_ae_series = false, 1354 .out_set_info = { 1355 /* Speakers. */ 1356 { .dac2port = 0x24, 1357 .has_hda_gpio = true, 1358 .hda_gpio_pin = 2, 1359 .hda_gpio_set = 1, 1360 .mmio_gpio_count = 0, 1361 .scp_cmds_count = 0, 1362 .has_chipio_write = false, 1363 }, 1364 /* Headphones. */ 1365 { .dac2port = 0x21, 1366 .has_hda_gpio = true, 1367 .hda_gpio_pin = 2, 1368 .hda_gpio_set = 0, 1369 .mmio_gpio_count = 0, 1370 .scp_cmds_count = 0, 1371 .has_chipio_write = false, 1372 } }, 1373 }, 1374 { .quirk_id = QUIRK_R3D, 1375 .has_headphone_gain = false, 1376 .is_ae_series = false, 1377 .out_set_info = { 1378 /* Speakers. */ 1379 { .dac2port = 0x24, 1380 .has_hda_gpio = false, 1381 .mmio_gpio_count = 1, 1382 .mmio_gpio_pin = { 1 }, 1383 .mmio_gpio_set = { 1 }, 1384 .scp_cmds_count = 0, 1385 .has_chipio_write = false, 1386 }, 1387 /* Headphones. */ 1388 { .dac2port = 0x21, 1389 .has_hda_gpio = false, 1390 .mmio_gpio_count = 1, 1391 .mmio_gpio_pin = { 1 }, 1392 .mmio_gpio_set = { 0 }, 1393 .scp_cmds_count = 0, 1394 .has_chipio_write = false, 1395 } }, 1396 }, 1397 { .quirk_id = QUIRK_SBZ, 1398 .has_headphone_gain = false, 1399 .is_ae_series = false, 1400 .out_set_info = { 1401 /* Speakers. */ 1402 { .dac2port = 0x18, 1403 .has_hda_gpio = false, 1404 .mmio_gpio_count = 3, 1405 .mmio_gpio_pin = { 7, 4, 1 }, 1406 .mmio_gpio_set = { 0, 1, 1 }, 1407 .scp_cmds_count = 0, 1408 .has_chipio_write = false, }, 1409 /* Headphones. */ 1410 { .dac2port = 0x12, 1411 .has_hda_gpio = false, 1412 .mmio_gpio_count = 3, 1413 .mmio_gpio_pin = { 7, 4, 1 }, 1414 .mmio_gpio_set = { 1, 1, 0 }, 1415 .scp_cmds_count = 0, 1416 .has_chipio_write = false, 1417 } }, 1418 }, 1419 { .quirk_id = QUIRK_ZXR, 1420 .has_headphone_gain = true, 1421 .is_ae_series = false, 1422 .out_set_info = { 1423 /* Speakers. */ 1424 { .dac2port = 0x24, 1425 .has_hda_gpio = false, 1426 .mmio_gpio_count = 3, 1427 .mmio_gpio_pin = { 2, 3, 5 }, 1428 .mmio_gpio_set = { 1, 1, 0 }, 1429 .scp_cmds_count = 0, 1430 .has_chipio_write = false, 1431 }, 1432 /* Headphones. */ 1433 { .dac2port = 0x21, 1434 .has_hda_gpio = false, 1435 .mmio_gpio_count = 3, 1436 .mmio_gpio_pin = { 2, 3, 5 }, 1437 .mmio_gpio_set = { 0, 1, 1 }, 1438 .scp_cmds_count = 0, 1439 .has_chipio_write = false, 1440 } }, 1441 }, 1442 { .quirk_id = QUIRK_AE5, 1443 .has_headphone_gain = true, 1444 .is_ae_series = true, 1445 .out_set_info = { 1446 /* Speakers. */ 1447 { .dac2port = 0xa4, 1448 .has_hda_gpio = false, 1449 .mmio_gpio_count = 0, 1450 .scp_cmds_count = 2, 1451 .scp_cmd_mid = { 0x96, 0x96 }, 1452 .scp_cmd_req = { SPEAKER_TUNING_FRONT_LEFT_INVERT, 1453 SPEAKER_TUNING_FRONT_RIGHT_INVERT }, 1454 .scp_cmd_val = { FLOAT_ZERO, FLOAT_ZERO }, 1455 .has_chipio_write = true, 1456 .chipio_write_addr = 0x0018b03c, 1457 .chipio_write_data = 0x00000012 1458 }, 1459 /* Headphones. */ 1460 { .dac2port = 0xa1, 1461 .has_hda_gpio = false, 1462 .mmio_gpio_count = 0, 1463 .scp_cmds_count = 2, 1464 .scp_cmd_mid = { 0x96, 0x96 }, 1465 .scp_cmd_req = { SPEAKER_TUNING_FRONT_LEFT_INVERT, 1466 SPEAKER_TUNING_FRONT_RIGHT_INVERT }, 1467 .scp_cmd_val = { FLOAT_ONE, FLOAT_ONE }, 1468 .has_chipio_write = true, 1469 .chipio_write_addr = 0x0018b03c, 1470 .chipio_write_data = 0x00000012 1471 } }, 1472 }, 1473 { .quirk_id = QUIRK_AE7, 1474 .has_headphone_gain = true, 1475 .is_ae_series = true, 1476 .out_set_info = { 1477 /* Speakers. */ 1478 { .dac2port = 0x58, 1479 .has_hda_gpio = false, 1480 .mmio_gpio_count = 1, 1481 .mmio_gpio_pin = { 0 }, 1482 .mmio_gpio_set = { 1 }, 1483 .scp_cmds_count = 2, 1484 .scp_cmd_mid = { 0x96, 0x96 }, 1485 .scp_cmd_req = { SPEAKER_TUNING_FRONT_LEFT_INVERT, 1486 SPEAKER_TUNING_FRONT_RIGHT_INVERT }, 1487 .scp_cmd_val = { FLOAT_ZERO, FLOAT_ZERO }, 1488 .has_chipio_write = true, 1489 .chipio_write_addr = 0x0018b03c, 1490 .chipio_write_data = 0x00000000 1491 }, 1492 /* Headphones. */ 1493 { .dac2port = 0x58, 1494 .has_hda_gpio = false, 1495 .mmio_gpio_count = 1, 1496 .mmio_gpio_pin = { 0 }, 1497 .mmio_gpio_set = { 1 }, 1498 .scp_cmds_count = 2, 1499 .scp_cmd_mid = { 0x96, 0x96 }, 1500 .scp_cmd_req = { SPEAKER_TUNING_FRONT_LEFT_INVERT, 1501 SPEAKER_TUNING_FRONT_RIGHT_INVERT }, 1502 .scp_cmd_val = { FLOAT_ONE, FLOAT_ONE }, 1503 .has_chipio_write = true, 1504 .chipio_write_addr = 0x0018b03c, 1505 .chipio_write_data = 0x00000010 1506 } }, 1507 } 1508 }; 1509 1510 /* 1511 * CA0132 codec access 1512 */ 1513 static unsigned int codec_send_command(struct hda_codec *codec, hda_nid_t nid, 1514 unsigned int verb, unsigned int parm, unsigned int *res) 1515 { 1516 unsigned int response; 1517 response = snd_hda_codec_read(codec, nid, 0, verb, parm); 1518 *res = response; 1519 1520 return ((response == -1) ? -1 : 0); 1521 } 1522 1523 static int codec_set_converter_format(struct hda_codec *codec, hda_nid_t nid, 1524 unsigned short converter_format, unsigned int *res) 1525 { 1526 return codec_send_command(codec, nid, VENDOR_CHIPIO_STREAM_FORMAT, 1527 converter_format & 0xffff, res); 1528 } 1529 1530 static int codec_set_converter_stream_channel(struct hda_codec *codec, 1531 hda_nid_t nid, unsigned char stream, 1532 unsigned char channel, unsigned int *res) 1533 { 1534 unsigned char converter_stream_channel = 0; 1535 1536 converter_stream_channel = (stream << 4) | (channel & 0x0f); 1537 return codec_send_command(codec, nid, AC_VERB_SET_CHANNEL_STREAMID, 1538 converter_stream_channel, res); 1539 } 1540 1541 /* Chip access helper function */ 1542 static int chipio_send(struct hda_codec *codec, 1543 unsigned int reg, 1544 unsigned int data) 1545 { 1546 unsigned int res; 1547 unsigned long timeout = jiffies + msecs_to_jiffies(1000); 1548 1549 /* send bits of data specified by reg */ 1550 do { 1551 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, 1552 reg, data); 1553 if (res == VENDOR_STATUS_CHIPIO_OK) 1554 return 0; 1555 msleep(20); 1556 } while (time_before(jiffies, timeout)); 1557 1558 return -EIO; 1559 } 1560 1561 /* 1562 * Write chip address through the vendor widget -- NOT protected by the Mutex! 1563 */ 1564 static int chipio_write_address(struct hda_codec *codec, 1565 unsigned int chip_addx) 1566 { 1567 struct ca0132_spec *spec = codec->spec; 1568 int res; 1569 1570 if (spec->curr_chip_addx == chip_addx) 1571 return 0; 1572 1573 /* send low 16 bits of the address */ 1574 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_LOW, 1575 chip_addx & 0xffff); 1576 1577 if (res != -EIO) { 1578 /* send high 16 bits of the address */ 1579 res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_HIGH, 1580 chip_addx >> 16); 1581 } 1582 1583 spec->curr_chip_addx = (res < 0) ? ~0U : chip_addx; 1584 1585 return res; 1586 } 1587 1588 /* 1589 * Write data through the vendor widget -- NOT protected by the Mutex! 1590 */ 1591 static int chipio_write_data(struct hda_codec *codec, unsigned int data) 1592 { 1593 struct ca0132_spec *spec = codec->spec; 1594 int res; 1595 1596 /* send low 16 bits of the data */ 1597 res = chipio_send(codec, VENDOR_CHIPIO_DATA_LOW, data & 0xffff); 1598 1599 if (res != -EIO) { 1600 /* send high 16 bits of the data */ 1601 res = chipio_send(codec, VENDOR_CHIPIO_DATA_HIGH, 1602 data >> 16); 1603 } 1604 1605 /*If no error encountered, automatically increment the address 1606 as per chip behaviour*/ 1607 spec->curr_chip_addx = (res != -EIO) ? 1608 (spec->curr_chip_addx + 4) : ~0U; 1609 return res; 1610 } 1611 1612 /* 1613 * Write multiple data through the vendor widget -- NOT protected by the Mutex! 1614 */ 1615 static int chipio_write_data_multiple(struct hda_codec *codec, 1616 const u32 *data, 1617 unsigned int count) 1618 { 1619 int status = 0; 1620 1621 if (data == NULL) { 1622 codec_dbg(codec, "chipio_write_data null ptr\n"); 1623 return -EINVAL; 1624 } 1625 1626 while ((count-- != 0) && (status == 0)) 1627 status = chipio_write_data(codec, *data++); 1628 1629 return status; 1630 } 1631 1632 1633 /* 1634 * Read data through the vendor widget -- NOT protected by the Mutex! 1635 */ 1636 static int chipio_read_data(struct hda_codec *codec, unsigned int *data) 1637 { 1638 struct ca0132_spec *spec = codec->spec; 1639 int res; 1640 1641 /* post read */ 1642 res = chipio_send(codec, VENDOR_CHIPIO_HIC_POST_READ, 0); 1643 1644 if (res != -EIO) { 1645 /* read status */ 1646 res = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); 1647 } 1648 1649 if (res != -EIO) { 1650 /* read data */ 1651 *data = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, 1652 VENDOR_CHIPIO_HIC_READ_DATA, 1653 0); 1654 } 1655 1656 /*If no error encountered, automatically increment the address 1657 as per chip behaviour*/ 1658 spec->curr_chip_addx = (res != -EIO) ? 1659 (spec->curr_chip_addx + 4) : ~0U; 1660 return res; 1661 } 1662 1663 /* 1664 * Write given value to the given address through the chip I/O widget. 1665 * protected by the Mutex 1666 */ 1667 static int chipio_write(struct hda_codec *codec, 1668 unsigned int chip_addx, const unsigned int data) 1669 { 1670 struct ca0132_spec *spec = codec->spec; 1671 int err; 1672 1673 mutex_lock(&spec->chipio_mutex); 1674 1675 /* write the address, and if successful proceed to write data */ 1676 err = chipio_write_address(codec, chip_addx); 1677 if (err < 0) 1678 goto exit; 1679 1680 err = chipio_write_data(codec, data); 1681 if (err < 0) 1682 goto exit; 1683 1684 exit: 1685 mutex_unlock(&spec->chipio_mutex); 1686 return err; 1687 } 1688 1689 /* 1690 * Write given value to the given address through the chip I/O widget. 1691 * not protected by the Mutex 1692 */ 1693 static int chipio_write_no_mutex(struct hda_codec *codec, 1694 unsigned int chip_addx, const unsigned int data) 1695 { 1696 int err; 1697 1698 1699 /* write the address, and if successful proceed to write data */ 1700 err = chipio_write_address(codec, chip_addx); 1701 if (err < 0) 1702 goto exit; 1703 1704 err = chipio_write_data(codec, data); 1705 if (err < 0) 1706 goto exit; 1707 1708 exit: 1709 return err; 1710 } 1711 1712 /* 1713 * Write multiple values to the given address through the chip I/O widget. 1714 * protected by the Mutex 1715 */ 1716 static int chipio_write_multiple(struct hda_codec *codec, 1717 u32 chip_addx, 1718 const u32 *data, 1719 unsigned int count) 1720 { 1721 struct ca0132_spec *spec = codec->spec; 1722 int status; 1723 1724 mutex_lock(&spec->chipio_mutex); 1725 status = chipio_write_address(codec, chip_addx); 1726 if (status < 0) 1727 goto error; 1728 1729 status = chipio_write_data_multiple(codec, data, count); 1730 error: 1731 mutex_unlock(&spec->chipio_mutex); 1732 1733 return status; 1734 } 1735 1736 /* 1737 * Read the given address through the chip I/O widget 1738 * protected by the Mutex 1739 */ 1740 static int chipio_read(struct hda_codec *codec, 1741 unsigned int chip_addx, unsigned int *data) 1742 { 1743 struct ca0132_spec *spec = codec->spec; 1744 int err; 1745 1746 mutex_lock(&spec->chipio_mutex); 1747 1748 /* write the address, and if successful proceed to write data */ 1749 err = chipio_write_address(codec, chip_addx); 1750 if (err < 0) 1751 goto exit; 1752 1753 err = chipio_read_data(codec, data); 1754 if (err < 0) 1755 goto exit; 1756 1757 exit: 1758 mutex_unlock(&spec->chipio_mutex); 1759 return err; 1760 } 1761 1762 /* 1763 * Set chip control flags through the chip I/O widget. 1764 */ 1765 static void chipio_set_control_flag(struct hda_codec *codec, 1766 enum control_flag_id flag_id, 1767 bool flag_state) 1768 { 1769 unsigned int val; 1770 unsigned int flag_bit; 1771 1772 flag_bit = (flag_state ? 1 : 0); 1773 val = (flag_bit << 7) | (flag_id); 1774 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 1775 VENDOR_CHIPIO_FLAG_SET, val); 1776 } 1777 1778 /* 1779 * Set chip parameters through the chip I/O widget. 1780 */ 1781 static void chipio_set_control_param(struct hda_codec *codec, 1782 enum control_param_id param_id, int param_val) 1783 { 1784 struct ca0132_spec *spec = codec->spec; 1785 int val; 1786 1787 if ((param_id < 32) && (param_val < 8)) { 1788 val = (param_val << 5) | (param_id); 1789 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 1790 VENDOR_CHIPIO_PARAM_SET, val); 1791 } else { 1792 mutex_lock(&spec->chipio_mutex); 1793 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { 1794 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 1795 VENDOR_CHIPIO_PARAM_EX_ID_SET, 1796 param_id); 1797 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 1798 VENDOR_CHIPIO_PARAM_EX_VALUE_SET, 1799 param_val); 1800 } 1801 mutex_unlock(&spec->chipio_mutex); 1802 } 1803 } 1804 1805 /* 1806 * Set chip parameters through the chip I/O widget. NO MUTEX. 1807 */ 1808 static void chipio_set_control_param_no_mutex(struct hda_codec *codec, 1809 enum control_param_id param_id, int param_val) 1810 { 1811 int val; 1812 1813 if ((param_id < 32) && (param_val < 8)) { 1814 val = (param_val << 5) | (param_id); 1815 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 1816 VENDOR_CHIPIO_PARAM_SET, val); 1817 } else { 1818 if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == 0) { 1819 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 1820 VENDOR_CHIPIO_PARAM_EX_ID_SET, 1821 param_id); 1822 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 1823 VENDOR_CHIPIO_PARAM_EX_VALUE_SET, 1824 param_val); 1825 } 1826 } 1827 } 1828 /* 1829 * Connect stream to a source point, and then connect 1830 * that source point to a destination point. 1831 */ 1832 static void chipio_set_stream_source_dest(struct hda_codec *codec, 1833 int streamid, int source_point, int dest_point) 1834 { 1835 chipio_set_control_param_no_mutex(codec, 1836 CONTROL_PARAM_STREAM_ID, streamid); 1837 chipio_set_control_param_no_mutex(codec, 1838 CONTROL_PARAM_STREAM_SOURCE_CONN_POINT, source_point); 1839 chipio_set_control_param_no_mutex(codec, 1840 CONTROL_PARAM_STREAM_DEST_CONN_POINT, dest_point); 1841 } 1842 1843 /* 1844 * Set number of channels in the selected stream. 1845 */ 1846 static void chipio_set_stream_channels(struct hda_codec *codec, 1847 int streamid, unsigned int channels) 1848 { 1849 chipio_set_control_param_no_mutex(codec, 1850 CONTROL_PARAM_STREAM_ID, streamid); 1851 chipio_set_control_param_no_mutex(codec, 1852 CONTROL_PARAM_STREAMS_CHANNELS, channels); 1853 } 1854 1855 /* 1856 * Enable/Disable audio stream. 1857 */ 1858 static void chipio_set_stream_control(struct hda_codec *codec, 1859 int streamid, int enable) 1860 { 1861 chipio_set_control_param_no_mutex(codec, 1862 CONTROL_PARAM_STREAM_ID, streamid); 1863 chipio_set_control_param_no_mutex(codec, 1864 CONTROL_PARAM_STREAM_CONTROL, enable); 1865 } 1866 1867 /* 1868 * Get ChipIO audio stream's status. 1869 */ 1870 static void chipio_get_stream_control(struct hda_codec *codec, 1871 int streamid, unsigned int *enable) 1872 { 1873 chipio_set_control_param_no_mutex(codec, 1874 CONTROL_PARAM_STREAM_ID, streamid); 1875 *enable = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, 1876 VENDOR_CHIPIO_PARAM_GET, 1877 CONTROL_PARAM_STREAM_CONTROL); 1878 } 1879 1880 /* 1881 * Set sampling rate of the connection point. NO MUTEX. 1882 */ 1883 static void chipio_set_conn_rate_no_mutex(struct hda_codec *codec, 1884 int connid, enum ca0132_sample_rate rate) 1885 { 1886 chipio_set_control_param_no_mutex(codec, 1887 CONTROL_PARAM_CONN_POINT_ID, connid); 1888 chipio_set_control_param_no_mutex(codec, 1889 CONTROL_PARAM_CONN_POINT_SAMPLE_RATE, rate); 1890 } 1891 1892 /* 1893 * Set sampling rate of the connection point. 1894 */ 1895 static void chipio_set_conn_rate(struct hda_codec *codec, 1896 int connid, enum ca0132_sample_rate rate) 1897 { 1898 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_ID, connid); 1899 chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_SAMPLE_RATE, 1900 rate); 1901 } 1902 1903 /* 1904 * Writes to the 8051's internal address space directly instead of indirectly, 1905 * giving access to the special function registers located at addresses 1906 * 0x80-0xFF. 1907 */ 1908 static void chipio_8051_write_direct(struct hda_codec *codec, 1909 unsigned int addr, unsigned int data) 1910 { 1911 unsigned int verb; 1912 1913 verb = VENDOR_CHIPIO_8051_WRITE_DIRECT | data; 1914 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, verb, addr); 1915 } 1916 1917 /* 1918 * Writes to the 8051's exram, which has 16-bits of address space. 1919 * Data at addresses 0x2000-0x7fff is mirrored to 0x8000-0xdfff. 1920 * Data at 0x8000-0xdfff can also be used as program memory for the 8051 by 1921 * setting the pmem bank selection SFR. 1922 * 0xe000-0xffff is always mapped as program memory, with only 0xf000-0xffff 1923 * being writable. 1924 */ 1925 static void chipio_8051_set_address(struct hda_codec *codec, unsigned int addr) 1926 { 1927 unsigned int tmp; 1928 1929 /* Lower 8-bits. */ 1930 tmp = addr & 0xff; 1931 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 1932 VENDOR_CHIPIO_8051_ADDRESS_LOW, tmp); 1933 1934 /* Upper 8-bits. */ 1935 tmp = (addr >> 8) & 0xff; 1936 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 1937 VENDOR_CHIPIO_8051_ADDRESS_HIGH, tmp); 1938 } 1939 1940 static void chipio_8051_set_data(struct hda_codec *codec, unsigned int data) 1941 { 1942 /* 8-bits of data. */ 1943 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 1944 VENDOR_CHIPIO_8051_DATA_WRITE, data & 0xff); 1945 } 1946 1947 static unsigned int chipio_8051_get_data(struct hda_codec *codec) 1948 { 1949 return snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, 1950 VENDOR_CHIPIO_8051_DATA_READ, 0); 1951 } 1952 1953 /* PLL_PMU writes share the lower address register of the 8051 exram writes. */ 1954 static void chipio_8051_set_data_pll(struct hda_codec *codec, unsigned int data) 1955 { 1956 /* 8-bits of data. */ 1957 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 1958 VENDOR_CHIPIO_PLL_PMU_WRITE, data & 0xff); 1959 } 1960 1961 static void chipio_8051_write_exram(struct hda_codec *codec, 1962 unsigned int addr, unsigned int data) 1963 { 1964 struct ca0132_spec *spec = codec->spec; 1965 1966 mutex_lock(&spec->chipio_mutex); 1967 1968 chipio_8051_set_address(codec, addr); 1969 chipio_8051_set_data(codec, data); 1970 1971 mutex_unlock(&spec->chipio_mutex); 1972 } 1973 1974 static void chipio_8051_write_exram_no_mutex(struct hda_codec *codec, 1975 unsigned int addr, unsigned int data) 1976 { 1977 chipio_8051_set_address(codec, addr); 1978 chipio_8051_set_data(codec, data); 1979 } 1980 1981 /* Readback data from the 8051's exram. No mutex. */ 1982 static void chipio_8051_read_exram(struct hda_codec *codec, 1983 unsigned int addr, unsigned int *data) 1984 { 1985 chipio_8051_set_address(codec, addr); 1986 *data = chipio_8051_get_data(codec); 1987 } 1988 1989 static void chipio_8051_write_pll_pmu(struct hda_codec *codec, 1990 unsigned int addr, unsigned int data) 1991 { 1992 struct ca0132_spec *spec = codec->spec; 1993 1994 mutex_lock(&spec->chipio_mutex); 1995 1996 chipio_8051_set_address(codec, addr & 0xff); 1997 chipio_8051_set_data_pll(codec, data); 1998 1999 mutex_unlock(&spec->chipio_mutex); 2000 } 2001 2002 static void chipio_8051_write_pll_pmu_no_mutex(struct hda_codec *codec, 2003 unsigned int addr, unsigned int data) 2004 { 2005 chipio_8051_set_address(codec, addr & 0xff); 2006 chipio_8051_set_data_pll(codec, data); 2007 } 2008 2009 /* 2010 * Enable clocks. 2011 */ 2012 static void chipio_enable_clocks(struct hda_codec *codec) 2013 { 2014 struct ca0132_spec *spec = codec->spec; 2015 2016 mutex_lock(&spec->chipio_mutex); 2017 2018 chipio_8051_write_pll_pmu_no_mutex(codec, 0x00, 0xff); 2019 chipio_8051_write_pll_pmu_no_mutex(codec, 0x05, 0x0b); 2020 chipio_8051_write_pll_pmu_no_mutex(codec, 0x06, 0xff); 2021 2022 mutex_unlock(&spec->chipio_mutex); 2023 } 2024 2025 /* 2026 * CA0132 DSP IO stuffs 2027 */ 2028 static int dspio_send(struct hda_codec *codec, unsigned int reg, 2029 unsigned int data) 2030 { 2031 int res; 2032 unsigned long timeout = jiffies + msecs_to_jiffies(1000); 2033 2034 /* send bits of data specified by reg to dsp */ 2035 do { 2036 res = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, reg, data); 2037 if ((res >= 0) && (res != VENDOR_STATUS_DSPIO_BUSY)) 2038 return res; 2039 msleep(20); 2040 } while (time_before(jiffies, timeout)); 2041 2042 return -EIO; 2043 } 2044 2045 /* 2046 * Wait for DSP to be ready for commands 2047 */ 2048 static void dspio_write_wait(struct hda_codec *codec) 2049 { 2050 int status; 2051 unsigned long timeout = jiffies + msecs_to_jiffies(1000); 2052 2053 do { 2054 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, 2055 VENDOR_DSPIO_STATUS, 0); 2056 if ((status == VENDOR_STATUS_DSPIO_OK) || 2057 (status == VENDOR_STATUS_DSPIO_SCP_RESPONSE_QUEUE_EMPTY)) 2058 break; 2059 msleep(1); 2060 } while (time_before(jiffies, timeout)); 2061 } 2062 2063 /* 2064 * Write SCP data to DSP 2065 */ 2066 static int dspio_write(struct hda_codec *codec, unsigned int scp_data) 2067 { 2068 struct ca0132_spec *spec = codec->spec; 2069 int status; 2070 2071 dspio_write_wait(codec); 2072 2073 mutex_lock(&spec->chipio_mutex); 2074 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_LOW, 2075 scp_data & 0xffff); 2076 if (status < 0) 2077 goto error; 2078 2079 status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_HIGH, 2080 scp_data >> 16); 2081 if (status < 0) 2082 goto error; 2083 2084 /* OK, now check if the write itself has executed*/ 2085 status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, 2086 VENDOR_DSPIO_STATUS, 0); 2087 error: 2088 mutex_unlock(&spec->chipio_mutex); 2089 2090 return (status == VENDOR_STATUS_DSPIO_SCP_COMMAND_QUEUE_FULL) ? 2091 -EIO : 0; 2092 } 2093 2094 /* 2095 * Write multiple SCP data to DSP 2096 */ 2097 static int dspio_write_multiple(struct hda_codec *codec, 2098 unsigned int *buffer, unsigned int size) 2099 { 2100 int status = 0; 2101 unsigned int count; 2102 2103 if (buffer == NULL) 2104 return -EINVAL; 2105 2106 count = 0; 2107 while (count < size) { 2108 status = dspio_write(codec, *buffer++); 2109 if (status != 0) 2110 break; 2111 count++; 2112 } 2113 2114 return status; 2115 } 2116 2117 static int dspio_read(struct hda_codec *codec, unsigned int *data) 2118 { 2119 int status; 2120 2121 status = dspio_send(codec, VENDOR_DSPIO_SCP_POST_READ_DATA, 0); 2122 if (status == -EIO) 2123 return status; 2124 2125 status = dspio_send(codec, VENDOR_DSPIO_STATUS, 0); 2126 if (status == -EIO || 2127 status == VENDOR_STATUS_DSPIO_SCP_RESPONSE_QUEUE_EMPTY) 2128 return -EIO; 2129 2130 *data = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, 2131 VENDOR_DSPIO_SCP_READ_DATA, 0); 2132 2133 return 0; 2134 } 2135 2136 static int dspio_read_multiple(struct hda_codec *codec, unsigned int *buffer, 2137 unsigned int *buf_size, unsigned int size_count) 2138 { 2139 int status = 0; 2140 unsigned int size = *buf_size; 2141 unsigned int count; 2142 unsigned int skip_count; 2143 unsigned int dummy; 2144 2145 if (buffer == NULL) 2146 return -1; 2147 2148 count = 0; 2149 while (count < size && count < size_count) { 2150 status = dspio_read(codec, buffer++); 2151 if (status != 0) 2152 break; 2153 count++; 2154 } 2155 2156 skip_count = count; 2157 if (status == 0) { 2158 while (skip_count < size) { 2159 status = dspio_read(codec, &dummy); 2160 if (status != 0) 2161 break; 2162 skip_count++; 2163 } 2164 } 2165 *buf_size = count; 2166 2167 return status; 2168 } 2169 2170 /* 2171 * Construct the SCP header using corresponding fields 2172 */ 2173 static inline unsigned int 2174 make_scp_header(unsigned int target_id, unsigned int source_id, 2175 unsigned int get_flag, unsigned int req, 2176 unsigned int device_flag, unsigned int resp_flag, 2177 unsigned int error_flag, unsigned int data_size) 2178 { 2179 unsigned int header = 0; 2180 2181 header = (data_size & 0x1f) << 27; 2182 header |= (error_flag & 0x01) << 26; 2183 header |= (resp_flag & 0x01) << 25; 2184 header |= (device_flag & 0x01) << 24; 2185 header |= (req & 0x7f) << 17; 2186 header |= (get_flag & 0x01) << 16; 2187 header |= (source_id & 0xff) << 8; 2188 header |= target_id & 0xff; 2189 2190 return header; 2191 } 2192 2193 /* 2194 * Extract corresponding fields from SCP header 2195 */ 2196 static inline void 2197 extract_scp_header(unsigned int header, 2198 unsigned int *target_id, unsigned int *source_id, 2199 unsigned int *get_flag, unsigned int *req, 2200 unsigned int *device_flag, unsigned int *resp_flag, 2201 unsigned int *error_flag, unsigned int *data_size) 2202 { 2203 if (data_size) 2204 *data_size = (header >> 27) & 0x1f; 2205 if (error_flag) 2206 *error_flag = (header >> 26) & 0x01; 2207 if (resp_flag) 2208 *resp_flag = (header >> 25) & 0x01; 2209 if (device_flag) 2210 *device_flag = (header >> 24) & 0x01; 2211 if (req) 2212 *req = (header >> 17) & 0x7f; 2213 if (get_flag) 2214 *get_flag = (header >> 16) & 0x01; 2215 if (source_id) 2216 *source_id = (header >> 8) & 0xff; 2217 if (target_id) 2218 *target_id = header & 0xff; 2219 } 2220 2221 #define SCP_MAX_DATA_WORDS (16) 2222 2223 /* Structure to contain any SCP message */ 2224 struct scp_msg { 2225 unsigned int hdr; 2226 unsigned int data[SCP_MAX_DATA_WORDS]; 2227 }; 2228 2229 static void dspio_clear_response_queue(struct hda_codec *codec) 2230 { 2231 unsigned long timeout = jiffies + msecs_to_jiffies(1000); 2232 unsigned int dummy = 0; 2233 int status; 2234 2235 /* clear all from the response queue */ 2236 do { 2237 status = dspio_read(codec, &dummy); 2238 } while (status == 0 && time_before(jiffies, timeout)); 2239 } 2240 2241 static int dspio_get_response_data(struct hda_codec *codec) 2242 { 2243 struct ca0132_spec *spec = codec->spec; 2244 unsigned int data = 0; 2245 unsigned int count; 2246 2247 if (dspio_read(codec, &data) < 0) 2248 return -EIO; 2249 2250 if ((data & 0x00ffffff) == spec->wait_scp_header) { 2251 spec->scp_resp_header = data; 2252 spec->scp_resp_count = data >> 27; 2253 count = spec->wait_num_data; 2254 dspio_read_multiple(codec, spec->scp_resp_data, 2255 &spec->scp_resp_count, count); 2256 return 0; 2257 } 2258 2259 return -EIO; 2260 } 2261 2262 /* 2263 * Send SCP message to DSP 2264 */ 2265 static int dspio_send_scp_message(struct hda_codec *codec, 2266 unsigned char *send_buf, 2267 unsigned int send_buf_size, 2268 unsigned char *return_buf, 2269 unsigned int return_buf_size, 2270 unsigned int *bytes_returned) 2271 { 2272 struct ca0132_spec *spec = codec->spec; 2273 int status; 2274 unsigned int scp_send_size = 0; 2275 unsigned int total_size; 2276 bool waiting_for_resp = false; 2277 unsigned int header; 2278 struct scp_msg *ret_msg; 2279 unsigned int resp_src_id, resp_target_id; 2280 unsigned int data_size, src_id, target_id, get_flag, device_flag; 2281 2282 if (bytes_returned) 2283 *bytes_returned = 0; 2284 2285 /* get scp header from buffer */ 2286 header = *((unsigned int *)send_buf); 2287 extract_scp_header(header, &target_id, &src_id, &get_flag, NULL, 2288 &device_flag, NULL, NULL, &data_size); 2289 scp_send_size = data_size + 1; 2290 total_size = (scp_send_size * 4); 2291 2292 if (send_buf_size < total_size) 2293 return -EINVAL; 2294 2295 if (get_flag || device_flag) { 2296 if (!return_buf || return_buf_size < 4 || !bytes_returned) 2297 return -EINVAL; 2298 2299 spec->wait_scp_header = *((unsigned int *)send_buf); 2300 2301 /* swap source id with target id */ 2302 resp_target_id = src_id; 2303 resp_src_id = target_id; 2304 spec->wait_scp_header &= 0xffff0000; 2305 spec->wait_scp_header |= (resp_src_id << 8) | (resp_target_id); 2306 spec->wait_num_data = return_buf_size/sizeof(unsigned int) - 1; 2307 spec->wait_scp = 1; 2308 waiting_for_resp = true; 2309 } 2310 2311 status = dspio_write_multiple(codec, (unsigned int *)send_buf, 2312 scp_send_size); 2313 if (status < 0) { 2314 spec->wait_scp = 0; 2315 return status; 2316 } 2317 2318 if (waiting_for_resp) { 2319 unsigned long timeout = jiffies + msecs_to_jiffies(1000); 2320 memset(return_buf, 0, return_buf_size); 2321 do { 2322 msleep(20); 2323 } while (spec->wait_scp && time_before(jiffies, timeout)); 2324 waiting_for_resp = false; 2325 if (!spec->wait_scp) { 2326 ret_msg = (struct scp_msg *)return_buf; 2327 memcpy(&ret_msg->hdr, &spec->scp_resp_header, 4); 2328 memcpy(&ret_msg->data, spec->scp_resp_data, 2329 spec->wait_num_data); 2330 *bytes_returned = (spec->scp_resp_count + 1) * 4; 2331 status = 0; 2332 } else { 2333 status = -EIO; 2334 } 2335 spec->wait_scp = 0; 2336 } 2337 2338 return status; 2339 } 2340 2341 /** 2342 * dspio_scp - Prepare and send the SCP message to DSP 2343 * @codec: the HDA codec 2344 * @mod_id: ID of the DSP module to send the command 2345 * @src_id: ID of the source 2346 * @req: ID of request to send to the DSP module 2347 * @dir: SET or GET 2348 * @data: pointer to the data to send with the request, request specific 2349 * @len: length of the data, in bytes 2350 * @reply: point to the buffer to hold data returned for a reply 2351 * @reply_len: length of the reply buffer returned from GET 2352 * 2353 * Returns zero or a negative error code. 2354 */ 2355 static int dspio_scp(struct hda_codec *codec, 2356 int mod_id, int src_id, int req, int dir, const void *data, 2357 unsigned int len, void *reply, unsigned int *reply_len) 2358 { 2359 int status = 0; 2360 struct scp_msg scp_send, scp_reply; 2361 unsigned int ret_bytes, send_size, ret_size; 2362 unsigned int send_get_flag, reply_resp_flag, reply_error_flag; 2363 unsigned int reply_data_size; 2364 2365 memset(&scp_send, 0, sizeof(scp_send)); 2366 memset(&scp_reply, 0, sizeof(scp_reply)); 2367 2368 if ((len != 0 && data == NULL) || (len > SCP_MAX_DATA_WORDS)) 2369 return -EINVAL; 2370 2371 if (dir == SCP_GET && reply == NULL) { 2372 codec_dbg(codec, "dspio_scp get but has no buffer\n"); 2373 return -EINVAL; 2374 } 2375 2376 if (reply != NULL && (reply_len == NULL || (*reply_len == 0))) { 2377 codec_dbg(codec, "dspio_scp bad resp buf len parms\n"); 2378 return -EINVAL; 2379 } 2380 2381 scp_send.hdr = make_scp_header(mod_id, src_id, (dir == SCP_GET), req, 2382 0, 0, 0, len/sizeof(unsigned int)); 2383 if (data != NULL && len > 0) { 2384 len = min((unsigned int)(sizeof(scp_send.data)), len); 2385 memcpy(scp_send.data, data, len); 2386 } 2387 2388 ret_bytes = 0; 2389 send_size = sizeof(unsigned int) + len; 2390 status = dspio_send_scp_message(codec, (unsigned char *)&scp_send, 2391 send_size, (unsigned char *)&scp_reply, 2392 sizeof(scp_reply), &ret_bytes); 2393 2394 if (status < 0) { 2395 codec_dbg(codec, "dspio_scp: send scp msg failed\n"); 2396 return status; 2397 } 2398 2399 /* extract send and reply headers members */ 2400 extract_scp_header(scp_send.hdr, NULL, NULL, &send_get_flag, 2401 NULL, NULL, NULL, NULL, NULL); 2402 extract_scp_header(scp_reply.hdr, NULL, NULL, NULL, NULL, NULL, 2403 &reply_resp_flag, &reply_error_flag, 2404 &reply_data_size); 2405 2406 if (!send_get_flag) 2407 return 0; 2408 2409 if (reply_resp_flag && !reply_error_flag) { 2410 ret_size = (ret_bytes - sizeof(scp_reply.hdr)) 2411 / sizeof(unsigned int); 2412 2413 if (*reply_len < ret_size*sizeof(unsigned int)) { 2414 codec_dbg(codec, "reply too long for buf\n"); 2415 return -EINVAL; 2416 } else if (ret_size != reply_data_size) { 2417 codec_dbg(codec, "RetLen and HdrLen .NE.\n"); 2418 return -EINVAL; 2419 } else if (!reply) { 2420 codec_dbg(codec, "NULL reply\n"); 2421 return -EINVAL; 2422 } else { 2423 *reply_len = ret_size*sizeof(unsigned int); 2424 memcpy(reply, scp_reply.data, *reply_len); 2425 } 2426 } else { 2427 codec_dbg(codec, "reply ill-formed or errflag set\n"); 2428 return -EIO; 2429 } 2430 2431 return status; 2432 } 2433 2434 /* 2435 * Set DSP parameters 2436 */ 2437 static int dspio_set_param(struct hda_codec *codec, int mod_id, 2438 int src_id, int req, const void *data, unsigned int len) 2439 { 2440 return dspio_scp(codec, mod_id, src_id, req, SCP_SET, data, len, NULL, 2441 NULL); 2442 } 2443 2444 static int dspio_set_uint_param(struct hda_codec *codec, int mod_id, 2445 int req, const unsigned int data) 2446 { 2447 return dspio_set_param(codec, mod_id, 0x20, req, &data, 2448 sizeof(unsigned int)); 2449 } 2450 2451 /* 2452 * Allocate a DSP DMA channel via an SCP message 2453 */ 2454 static int dspio_alloc_dma_chan(struct hda_codec *codec, unsigned int *dma_chan) 2455 { 2456 int status = 0; 2457 unsigned int size = sizeof(dma_chan); 2458 2459 codec_dbg(codec, " dspio_alloc_dma_chan() -- begin\n"); 2460 status = dspio_scp(codec, MASTERCONTROL, 0x20, 2461 MASTERCONTROL_ALLOC_DMA_CHAN, SCP_GET, NULL, 0, 2462 dma_chan, &size); 2463 2464 if (status < 0) { 2465 codec_dbg(codec, "dspio_alloc_dma_chan: SCP Failed\n"); 2466 return status; 2467 } 2468 2469 if ((*dma_chan + 1) == 0) { 2470 codec_dbg(codec, "no free dma channels to allocate\n"); 2471 return -EBUSY; 2472 } 2473 2474 codec_dbg(codec, "dspio_alloc_dma_chan: chan=%d\n", *dma_chan); 2475 codec_dbg(codec, " dspio_alloc_dma_chan() -- complete\n"); 2476 2477 return status; 2478 } 2479 2480 /* 2481 * Free a DSP DMA via an SCP message 2482 */ 2483 static int dspio_free_dma_chan(struct hda_codec *codec, unsigned int dma_chan) 2484 { 2485 int status = 0; 2486 unsigned int dummy = 0; 2487 2488 codec_dbg(codec, " dspio_free_dma_chan() -- begin\n"); 2489 codec_dbg(codec, "dspio_free_dma_chan: chan=%d\n", dma_chan); 2490 2491 status = dspio_scp(codec, MASTERCONTROL, 0x20, 2492 MASTERCONTROL_ALLOC_DMA_CHAN, SCP_SET, &dma_chan, 2493 sizeof(dma_chan), NULL, &dummy); 2494 2495 if (status < 0) { 2496 codec_dbg(codec, "dspio_free_dma_chan: SCP Failed\n"); 2497 return status; 2498 } 2499 2500 codec_dbg(codec, " dspio_free_dma_chan() -- complete\n"); 2501 2502 return status; 2503 } 2504 2505 /* 2506 * (Re)start the DSP 2507 */ 2508 static int dsp_set_run_state(struct hda_codec *codec) 2509 { 2510 unsigned int dbg_ctrl_reg; 2511 unsigned int halt_state; 2512 int err; 2513 2514 err = chipio_read(codec, DSP_DBGCNTL_INST_OFFSET, &dbg_ctrl_reg); 2515 if (err < 0) 2516 return err; 2517 2518 halt_state = (dbg_ctrl_reg & DSP_DBGCNTL_STATE_MASK) >> 2519 DSP_DBGCNTL_STATE_LOBIT; 2520 2521 if (halt_state != 0) { 2522 dbg_ctrl_reg &= ~((halt_state << DSP_DBGCNTL_SS_LOBIT) & 2523 DSP_DBGCNTL_SS_MASK); 2524 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, 2525 dbg_ctrl_reg); 2526 if (err < 0) 2527 return err; 2528 2529 dbg_ctrl_reg |= (halt_state << DSP_DBGCNTL_EXEC_LOBIT) & 2530 DSP_DBGCNTL_EXEC_MASK; 2531 err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET, 2532 dbg_ctrl_reg); 2533 if (err < 0) 2534 return err; 2535 } 2536 2537 return 0; 2538 } 2539 2540 /* 2541 * Reset the DSP 2542 */ 2543 static int dsp_reset(struct hda_codec *codec) 2544 { 2545 unsigned int res; 2546 int retry = 20; 2547 2548 codec_dbg(codec, "dsp_reset\n"); 2549 do { 2550 res = dspio_send(codec, VENDOR_DSPIO_DSP_INIT, 0); 2551 retry--; 2552 } while (res == -EIO && retry); 2553 2554 if (!retry) { 2555 codec_dbg(codec, "dsp_reset timeout\n"); 2556 return -EIO; 2557 } 2558 2559 return 0; 2560 } 2561 2562 /* 2563 * Convert chip address to DSP address 2564 */ 2565 static unsigned int dsp_chip_to_dsp_addx(unsigned int chip_addx, 2566 bool *code, bool *yram) 2567 { 2568 *code = *yram = false; 2569 2570 if (UC_RANGE(chip_addx, 1)) { 2571 *code = true; 2572 return UC_OFF(chip_addx); 2573 } else if (X_RANGE_ALL(chip_addx, 1)) { 2574 return X_OFF(chip_addx); 2575 } else if (Y_RANGE_ALL(chip_addx, 1)) { 2576 *yram = true; 2577 return Y_OFF(chip_addx); 2578 } 2579 2580 return INVALID_CHIP_ADDRESS; 2581 } 2582 2583 /* 2584 * Check if the DSP DMA is active 2585 */ 2586 static bool dsp_is_dma_active(struct hda_codec *codec, unsigned int dma_chan) 2587 { 2588 unsigned int dma_chnlstart_reg; 2589 2590 chipio_read(codec, DSPDMAC_CHNLSTART_INST_OFFSET, &dma_chnlstart_reg); 2591 2592 return ((dma_chnlstart_reg & (1 << 2593 (DSPDMAC_CHNLSTART_EN_LOBIT + dma_chan))) != 0); 2594 } 2595 2596 static int dsp_dma_setup_common(struct hda_codec *codec, 2597 unsigned int chip_addx, 2598 unsigned int dma_chan, 2599 unsigned int port_map_mask, 2600 bool ovly) 2601 { 2602 int status = 0; 2603 unsigned int chnl_prop; 2604 unsigned int dsp_addx; 2605 unsigned int active; 2606 bool code, yram; 2607 2608 codec_dbg(codec, "-- dsp_dma_setup_common() -- Begin ---------\n"); 2609 2610 if (dma_chan >= DSPDMAC_DMA_CFG_CHANNEL_COUNT) { 2611 codec_dbg(codec, "dma chan num invalid\n"); 2612 return -EINVAL; 2613 } 2614 2615 if (dsp_is_dma_active(codec, dma_chan)) { 2616 codec_dbg(codec, "dma already active\n"); 2617 return -EBUSY; 2618 } 2619 2620 dsp_addx = dsp_chip_to_dsp_addx(chip_addx, &code, &yram); 2621 2622 if (dsp_addx == INVALID_CHIP_ADDRESS) { 2623 codec_dbg(codec, "invalid chip addr\n"); 2624 return -ENXIO; 2625 } 2626 2627 chnl_prop = DSPDMAC_CHNLPROP_AC_MASK; 2628 active = 0; 2629 2630 codec_dbg(codec, " dsp_dma_setup_common() start reg pgm\n"); 2631 2632 if (ovly) { 2633 status = chipio_read(codec, DSPDMAC_CHNLPROP_INST_OFFSET, 2634 &chnl_prop); 2635 2636 if (status < 0) { 2637 codec_dbg(codec, "read CHNLPROP Reg fail\n"); 2638 return status; 2639 } 2640 codec_dbg(codec, "dsp_dma_setup_common() Read CHNLPROP\n"); 2641 } 2642 2643 if (!code) 2644 chnl_prop &= ~(1 << (DSPDMAC_CHNLPROP_MSPCE_LOBIT + dma_chan)); 2645 else 2646 chnl_prop |= (1 << (DSPDMAC_CHNLPROP_MSPCE_LOBIT + dma_chan)); 2647 2648 chnl_prop &= ~(1 << (DSPDMAC_CHNLPROP_DCON_LOBIT + dma_chan)); 2649 2650 status = chipio_write(codec, DSPDMAC_CHNLPROP_INST_OFFSET, chnl_prop); 2651 if (status < 0) { 2652 codec_dbg(codec, "write CHNLPROP Reg fail\n"); 2653 return status; 2654 } 2655 codec_dbg(codec, " dsp_dma_setup_common() Write CHNLPROP\n"); 2656 2657 if (ovly) { 2658 status = chipio_read(codec, DSPDMAC_ACTIVE_INST_OFFSET, 2659 &active); 2660 2661 if (status < 0) { 2662 codec_dbg(codec, "read ACTIVE Reg fail\n"); 2663 return status; 2664 } 2665 codec_dbg(codec, "dsp_dma_setup_common() Read ACTIVE\n"); 2666 } 2667 2668 active &= (~(1 << (DSPDMAC_ACTIVE_AAR_LOBIT + dma_chan))) & 2669 DSPDMAC_ACTIVE_AAR_MASK; 2670 2671 status = chipio_write(codec, DSPDMAC_ACTIVE_INST_OFFSET, active); 2672 if (status < 0) { 2673 codec_dbg(codec, "write ACTIVE Reg fail\n"); 2674 return status; 2675 } 2676 2677 codec_dbg(codec, " dsp_dma_setup_common() Write ACTIVE\n"); 2678 2679 status = chipio_write(codec, DSPDMAC_AUDCHSEL_INST_OFFSET(dma_chan), 2680 port_map_mask); 2681 if (status < 0) { 2682 codec_dbg(codec, "write AUDCHSEL Reg fail\n"); 2683 return status; 2684 } 2685 codec_dbg(codec, " dsp_dma_setup_common() Write AUDCHSEL\n"); 2686 2687 status = chipio_write(codec, DSPDMAC_IRQCNT_INST_OFFSET(dma_chan), 2688 DSPDMAC_IRQCNT_BICNT_MASK | DSPDMAC_IRQCNT_CICNT_MASK); 2689 if (status < 0) { 2690 codec_dbg(codec, "write IRQCNT Reg fail\n"); 2691 return status; 2692 } 2693 codec_dbg(codec, " dsp_dma_setup_common() Write IRQCNT\n"); 2694 2695 codec_dbg(codec, 2696 "ChipA=0x%x,DspA=0x%x,dmaCh=%u, " 2697 "CHSEL=0x%x,CHPROP=0x%x,Active=0x%x\n", 2698 chip_addx, dsp_addx, dma_chan, 2699 port_map_mask, chnl_prop, active); 2700 2701 codec_dbg(codec, "-- dsp_dma_setup_common() -- Complete ------\n"); 2702 2703 return 0; 2704 } 2705 2706 /* 2707 * Setup the DSP DMA per-transfer-specific registers 2708 */ 2709 static int dsp_dma_setup(struct hda_codec *codec, 2710 unsigned int chip_addx, 2711 unsigned int count, 2712 unsigned int dma_chan) 2713 { 2714 int status = 0; 2715 bool code, yram; 2716 unsigned int dsp_addx; 2717 unsigned int addr_field; 2718 unsigned int incr_field; 2719 unsigned int base_cnt; 2720 unsigned int cur_cnt; 2721 unsigned int dma_cfg = 0; 2722 unsigned int adr_ofs = 0; 2723 unsigned int xfr_cnt = 0; 2724 const unsigned int max_dma_count = 1 << (DSPDMAC_XFRCNT_BCNT_HIBIT - 2725 DSPDMAC_XFRCNT_BCNT_LOBIT + 1); 2726 2727 codec_dbg(codec, "-- dsp_dma_setup() -- Begin ---------\n"); 2728 2729 if (count > max_dma_count) { 2730 codec_dbg(codec, "count too big\n"); 2731 return -EINVAL; 2732 } 2733 2734 dsp_addx = dsp_chip_to_dsp_addx(chip_addx, &code, &yram); 2735 if (dsp_addx == INVALID_CHIP_ADDRESS) { 2736 codec_dbg(codec, "invalid chip addr\n"); 2737 return -ENXIO; 2738 } 2739 2740 codec_dbg(codec, " dsp_dma_setup() start reg pgm\n"); 2741 2742 addr_field = dsp_addx << DSPDMAC_DMACFG_DBADR_LOBIT; 2743 incr_field = 0; 2744 2745 if (!code) { 2746 addr_field <<= 1; 2747 if (yram) 2748 addr_field |= (1 << DSPDMAC_DMACFG_DBADR_LOBIT); 2749 2750 incr_field = (1 << DSPDMAC_DMACFG_AINCR_LOBIT); 2751 } 2752 2753 dma_cfg = addr_field + incr_field; 2754 status = chipio_write(codec, DSPDMAC_DMACFG_INST_OFFSET(dma_chan), 2755 dma_cfg); 2756 if (status < 0) { 2757 codec_dbg(codec, "write DMACFG Reg fail\n"); 2758 return status; 2759 } 2760 codec_dbg(codec, " dsp_dma_setup() Write DMACFG\n"); 2761 2762 adr_ofs = (count - 1) << (DSPDMAC_DSPADROFS_BOFS_LOBIT + 2763 (code ? 0 : 1)); 2764 2765 status = chipio_write(codec, DSPDMAC_DSPADROFS_INST_OFFSET(dma_chan), 2766 adr_ofs); 2767 if (status < 0) { 2768 codec_dbg(codec, "write DSPADROFS Reg fail\n"); 2769 return status; 2770 } 2771 codec_dbg(codec, " dsp_dma_setup() Write DSPADROFS\n"); 2772 2773 base_cnt = (count - 1) << DSPDMAC_XFRCNT_BCNT_LOBIT; 2774 2775 cur_cnt = (count - 1) << DSPDMAC_XFRCNT_CCNT_LOBIT; 2776 2777 xfr_cnt = base_cnt | cur_cnt; 2778 2779 status = chipio_write(codec, 2780 DSPDMAC_XFRCNT_INST_OFFSET(dma_chan), xfr_cnt); 2781 if (status < 0) { 2782 codec_dbg(codec, "write XFRCNT Reg fail\n"); 2783 return status; 2784 } 2785 codec_dbg(codec, " dsp_dma_setup() Write XFRCNT\n"); 2786 2787 codec_dbg(codec, 2788 "ChipA=0x%x, cnt=0x%x, DMACFG=0x%x, " 2789 "ADROFS=0x%x, XFRCNT=0x%x\n", 2790 chip_addx, count, dma_cfg, adr_ofs, xfr_cnt); 2791 2792 codec_dbg(codec, "-- dsp_dma_setup() -- Complete ---------\n"); 2793 2794 return 0; 2795 } 2796 2797 /* 2798 * Start the DSP DMA 2799 */ 2800 static int dsp_dma_start(struct hda_codec *codec, 2801 unsigned int dma_chan, bool ovly) 2802 { 2803 unsigned int reg = 0; 2804 int status = 0; 2805 2806 codec_dbg(codec, "-- dsp_dma_start() -- Begin ---------\n"); 2807 2808 if (ovly) { 2809 status = chipio_read(codec, 2810 DSPDMAC_CHNLSTART_INST_OFFSET, ®); 2811 2812 if (status < 0) { 2813 codec_dbg(codec, "read CHNLSTART reg fail\n"); 2814 return status; 2815 } 2816 codec_dbg(codec, "-- dsp_dma_start() Read CHNLSTART\n"); 2817 2818 reg &= ~(DSPDMAC_CHNLSTART_EN_MASK | 2819 DSPDMAC_CHNLSTART_DIS_MASK); 2820 } 2821 2822 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, 2823 reg | (1 << (dma_chan + DSPDMAC_CHNLSTART_EN_LOBIT))); 2824 if (status < 0) { 2825 codec_dbg(codec, "write CHNLSTART reg fail\n"); 2826 return status; 2827 } 2828 codec_dbg(codec, "-- dsp_dma_start() -- Complete ---------\n"); 2829 2830 return status; 2831 } 2832 2833 /* 2834 * Stop the DSP DMA 2835 */ 2836 static int dsp_dma_stop(struct hda_codec *codec, 2837 unsigned int dma_chan, bool ovly) 2838 { 2839 unsigned int reg = 0; 2840 int status = 0; 2841 2842 codec_dbg(codec, "-- dsp_dma_stop() -- Begin ---------\n"); 2843 2844 if (ovly) { 2845 status = chipio_read(codec, 2846 DSPDMAC_CHNLSTART_INST_OFFSET, ®); 2847 2848 if (status < 0) { 2849 codec_dbg(codec, "read CHNLSTART reg fail\n"); 2850 return status; 2851 } 2852 codec_dbg(codec, "-- dsp_dma_stop() Read CHNLSTART\n"); 2853 reg &= ~(DSPDMAC_CHNLSTART_EN_MASK | 2854 DSPDMAC_CHNLSTART_DIS_MASK); 2855 } 2856 2857 status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET, 2858 reg | (1 << (dma_chan + DSPDMAC_CHNLSTART_DIS_LOBIT))); 2859 if (status < 0) { 2860 codec_dbg(codec, "write CHNLSTART reg fail\n"); 2861 return status; 2862 } 2863 codec_dbg(codec, "-- dsp_dma_stop() -- Complete ---------\n"); 2864 2865 return status; 2866 } 2867 2868 /** 2869 * dsp_allocate_router_ports - Allocate router ports 2870 * 2871 * @codec: the HDA codec 2872 * @num_chans: number of channels in the stream 2873 * @ports_per_channel: number of ports per channel 2874 * @start_device: start device 2875 * @port_map: pointer to the port list to hold the allocated ports 2876 * 2877 * Returns zero or a negative error code. 2878 */ 2879 static int dsp_allocate_router_ports(struct hda_codec *codec, 2880 unsigned int num_chans, 2881 unsigned int ports_per_channel, 2882 unsigned int start_device, 2883 unsigned int *port_map) 2884 { 2885 int status = 0; 2886 int res; 2887 u8 val; 2888 2889 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); 2890 if (status < 0) 2891 return status; 2892 2893 val = start_device << 6; 2894 val |= (ports_per_channel - 1) << 4; 2895 val |= num_chans - 1; 2896 2897 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 2898 VENDOR_CHIPIO_PORT_ALLOC_CONFIG_SET, 2899 val); 2900 2901 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 2902 VENDOR_CHIPIO_PORT_ALLOC_SET, 2903 MEM_CONNID_DSP); 2904 2905 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); 2906 if (status < 0) 2907 return status; 2908 2909 res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0, 2910 VENDOR_CHIPIO_PORT_ALLOC_GET, 0); 2911 2912 *port_map = res; 2913 2914 return (res < 0) ? res : 0; 2915 } 2916 2917 /* 2918 * Free router ports 2919 */ 2920 static int dsp_free_router_ports(struct hda_codec *codec) 2921 { 2922 int status = 0; 2923 2924 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); 2925 if (status < 0) 2926 return status; 2927 2928 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 2929 VENDOR_CHIPIO_PORT_FREE_SET, 2930 MEM_CONNID_DSP); 2931 2932 status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0); 2933 2934 return status; 2935 } 2936 2937 /* 2938 * Allocate DSP ports for the download stream 2939 */ 2940 static int dsp_allocate_ports(struct hda_codec *codec, 2941 unsigned int num_chans, 2942 unsigned int rate_multi, unsigned int *port_map) 2943 { 2944 int status; 2945 2946 codec_dbg(codec, " dsp_allocate_ports() -- begin\n"); 2947 2948 if ((rate_multi != 1) && (rate_multi != 2) && (rate_multi != 4)) { 2949 codec_dbg(codec, "bad rate multiple\n"); 2950 return -EINVAL; 2951 } 2952 2953 status = dsp_allocate_router_ports(codec, num_chans, 2954 rate_multi, 0, port_map); 2955 2956 codec_dbg(codec, " dsp_allocate_ports() -- complete\n"); 2957 2958 return status; 2959 } 2960 2961 static int dsp_allocate_ports_format(struct hda_codec *codec, 2962 const unsigned short fmt, 2963 unsigned int *port_map) 2964 { 2965 unsigned int num_chans; 2966 2967 unsigned int sample_rate_div = ((get_hdafmt_rate(fmt) >> 0) & 3) + 1; 2968 unsigned int sample_rate_mul = ((get_hdafmt_rate(fmt) >> 3) & 3) + 1; 2969 unsigned int rate_multi = sample_rate_mul / sample_rate_div; 2970 2971 if ((rate_multi != 1) && (rate_multi != 2) && (rate_multi != 4)) { 2972 codec_dbg(codec, "bad rate multiple\n"); 2973 return -EINVAL; 2974 } 2975 2976 num_chans = get_hdafmt_chs(fmt) + 1; 2977 2978 return dsp_allocate_ports(codec, num_chans, rate_multi, port_map); 2979 } 2980 2981 /* 2982 * free DSP ports 2983 */ 2984 static int dsp_free_ports(struct hda_codec *codec) 2985 { 2986 int status; 2987 2988 codec_dbg(codec, " dsp_free_ports() -- begin\n"); 2989 2990 status = dsp_free_router_ports(codec); 2991 if (status < 0) { 2992 codec_dbg(codec, "free router ports fail\n"); 2993 return status; 2994 } 2995 codec_dbg(codec, " dsp_free_ports() -- complete\n"); 2996 2997 return status; 2998 } 2999 3000 /* 3001 * HDA DMA engine stuffs for DSP code download 3002 */ 3003 struct dma_engine { 3004 struct hda_codec *codec; 3005 unsigned short m_converter_format; 3006 struct snd_dma_buffer *dmab; 3007 unsigned int buf_size; 3008 }; 3009 3010 3011 enum dma_state { 3012 DMA_STATE_STOP = 0, 3013 DMA_STATE_RUN = 1 3014 }; 3015 3016 static int dma_convert_to_hda_format(struct hda_codec *codec, 3017 unsigned int sample_rate, 3018 unsigned short channels, 3019 unsigned short *hda_format) 3020 { 3021 unsigned int format_val; 3022 3023 format_val = snd_hdac_calc_stream_format(sample_rate, 3024 channels, SNDRV_PCM_FORMAT_S32_LE, 32, 0); 3025 3026 if (hda_format) 3027 *hda_format = (unsigned short)format_val; 3028 3029 return 0; 3030 } 3031 3032 /* 3033 * Reset DMA for DSP download 3034 */ 3035 static int dma_reset(struct dma_engine *dma) 3036 { 3037 struct hda_codec *codec = dma->codec; 3038 struct ca0132_spec *spec = codec->spec; 3039 int status; 3040 3041 if (dma->dmab->area) 3042 snd_hda_codec_load_dsp_cleanup(codec, dma->dmab); 3043 3044 status = snd_hda_codec_load_dsp_prepare(codec, 3045 dma->m_converter_format, 3046 dma->buf_size, 3047 dma->dmab); 3048 if (status < 0) 3049 return status; 3050 spec->dsp_stream_id = status; 3051 return 0; 3052 } 3053 3054 static int dma_set_state(struct dma_engine *dma, enum dma_state state) 3055 { 3056 bool cmd; 3057 3058 switch (state) { 3059 case DMA_STATE_STOP: 3060 cmd = false; 3061 break; 3062 case DMA_STATE_RUN: 3063 cmd = true; 3064 break; 3065 default: 3066 return 0; 3067 } 3068 3069 snd_hda_codec_load_dsp_trigger(dma->codec, cmd); 3070 return 0; 3071 } 3072 3073 static unsigned int dma_get_buffer_size(struct dma_engine *dma) 3074 { 3075 return dma->dmab->bytes; 3076 } 3077 3078 static unsigned char *dma_get_buffer_addr(struct dma_engine *dma) 3079 { 3080 return dma->dmab->area; 3081 } 3082 3083 static int dma_xfer(struct dma_engine *dma, 3084 const unsigned int *data, 3085 unsigned int count) 3086 { 3087 memcpy(dma->dmab->area, data, count); 3088 return 0; 3089 } 3090 3091 static void dma_get_converter_format( 3092 struct dma_engine *dma, 3093 unsigned short *format) 3094 { 3095 if (format) 3096 *format = dma->m_converter_format; 3097 } 3098 3099 static unsigned int dma_get_stream_id(struct dma_engine *dma) 3100 { 3101 struct ca0132_spec *spec = dma->codec->spec; 3102 3103 return spec->dsp_stream_id; 3104 } 3105 3106 struct dsp_image_seg { 3107 u32 magic; 3108 u32 chip_addr; 3109 u32 count; 3110 u32 data[]; 3111 }; 3112 3113 static const u32 g_magic_value = 0x4c46584d; 3114 static const u32 g_chip_addr_magic_value = 0xFFFFFF01; 3115 3116 static bool is_valid(const struct dsp_image_seg *p) 3117 { 3118 return p->magic == g_magic_value; 3119 } 3120 3121 static bool is_hci_prog_list_seg(const struct dsp_image_seg *p) 3122 { 3123 return g_chip_addr_magic_value == p->chip_addr; 3124 } 3125 3126 static bool is_last(const struct dsp_image_seg *p) 3127 { 3128 return p->count == 0; 3129 } 3130 3131 static size_t dsp_sizeof(const struct dsp_image_seg *p) 3132 { 3133 return struct_size(p, data, p->count); 3134 } 3135 3136 static const struct dsp_image_seg *get_next_seg_ptr( 3137 const struct dsp_image_seg *p) 3138 { 3139 return (struct dsp_image_seg *)((unsigned char *)(p) + dsp_sizeof(p)); 3140 } 3141 3142 /* 3143 * CA0132 chip DSP transfer stuffs. For DSP download. 3144 */ 3145 #define INVALID_DMA_CHANNEL (~0U) 3146 3147 /* 3148 * Program a list of address/data pairs via the ChipIO widget. 3149 * The segment data is in the format of successive pairs of words. 3150 * These are repeated as indicated by the segment's count field. 3151 */ 3152 static int dspxfr_hci_write(struct hda_codec *codec, 3153 const struct dsp_image_seg *fls) 3154 { 3155 int status; 3156 const u32 *data; 3157 unsigned int count; 3158 3159 if (fls == NULL || fls->chip_addr != g_chip_addr_magic_value) { 3160 codec_dbg(codec, "hci_write invalid params\n"); 3161 return -EINVAL; 3162 } 3163 3164 count = fls->count; 3165 data = (u32 *)(fls->data); 3166 while (count >= 2) { 3167 status = chipio_write(codec, data[0], data[1]); 3168 if (status < 0) { 3169 codec_dbg(codec, "hci_write chipio failed\n"); 3170 return status; 3171 } 3172 count -= 2; 3173 data += 2; 3174 } 3175 return 0; 3176 } 3177 3178 /** 3179 * dspxfr_one_seg - Write a block of data into DSP code or data RAM using pre-allocated DMA engine. 3180 * 3181 * @codec: the HDA codec 3182 * @fls: pointer to a fast load image 3183 * @reloc: Relocation address for loading single-segment overlays, or 0 for 3184 * no relocation 3185 * @dma_engine: pointer to DMA engine to be used for DSP download 3186 * @dma_chan: The number of DMA channels used for DSP download 3187 * @port_map_mask: port mapping 3188 * @ovly: TRUE if overlay format is required 3189 * 3190 * Returns zero or a negative error code. 3191 */ 3192 static int dspxfr_one_seg(struct hda_codec *codec, 3193 const struct dsp_image_seg *fls, 3194 unsigned int reloc, 3195 struct dma_engine *dma_engine, 3196 unsigned int dma_chan, 3197 unsigned int port_map_mask, 3198 bool ovly) 3199 { 3200 int status = 0; 3201 bool comm_dma_setup_done = false; 3202 const unsigned int *data; 3203 unsigned int chip_addx; 3204 unsigned int words_to_write; 3205 unsigned int buffer_size_words; 3206 unsigned char *buffer_addx; 3207 unsigned short hda_format; 3208 unsigned int sample_rate_div; 3209 unsigned int sample_rate_mul; 3210 unsigned int num_chans; 3211 unsigned int hda_frame_size_words; 3212 unsigned int remainder_words; 3213 const u32 *data_remainder; 3214 u32 chip_addx_remainder; 3215 unsigned int run_size_words; 3216 const struct dsp_image_seg *hci_write = NULL; 3217 unsigned long timeout; 3218 bool dma_active; 3219 3220 if (fls == NULL) 3221 return -EINVAL; 3222 if (is_hci_prog_list_seg(fls)) { 3223 hci_write = fls; 3224 fls = get_next_seg_ptr(fls); 3225 } 3226 3227 if (hci_write && (!fls || is_last(fls))) { 3228 codec_dbg(codec, "hci_write\n"); 3229 return dspxfr_hci_write(codec, hci_write); 3230 } 3231 3232 if (fls == NULL || dma_engine == NULL || port_map_mask == 0) { 3233 codec_dbg(codec, "Invalid Params\n"); 3234 return -EINVAL; 3235 } 3236 3237 data = fls->data; 3238 chip_addx = fls->chip_addr; 3239 words_to_write = fls->count; 3240 3241 if (!words_to_write) 3242 return hci_write ? dspxfr_hci_write(codec, hci_write) : 0; 3243 if (reloc) 3244 chip_addx = (chip_addx & (0xFFFF0000 << 2)) + (reloc << 2); 3245 3246 if (!UC_RANGE(chip_addx, words_to_write) && 3247 !X_RANGE_ALL(chip_addx, words_to_write) && 3248 !Y_RANGE_ALL(chip_addx, words_to_write)) { 3249 codec_dbg(codec, "Invalid chip_addx Params\n"); 3250 return -EINVAL; 3251 } 3252 3253 buffer_size_words = (unsigned int)dma_get_buffer_size(dma_engine) / 3254 sizeof(u32); 3255 3256 buffer_addx = dma_get_buffer_addr(dma_engine); 3257 3258 if (buffer_addx == NULL) { 3259 codec_dbg(codec, "dma_engine buffer NULL\n"); 3260 return -EINVAL; 3261 } 3262 3263 dma_get_converter_format(dma_engine, &hda_format); 3264 sample_rate_div = ((get_hdafmt_rate(hda_format) >> 0) & 3) + 1; 3265 sample_rate_mul = ((get_hdafmt_rate(hda_format) >> 3) & 3) + 1; 3266 num_chans = get_hdafmt_chs(hda_format) + 1; 3267 3268 hda_frame_size_words = ((sample_rate_div == 0) ? 0 : 3269 (num_chans * sample_rate_mul / sample_rate_div)); 3270 3271 if (hda_frame_size_words == 0) { 3272 codec_dbg(codec, "frmsz zero\n"); 3273 return -EINVAL; 3274 } 3275 3276 buffer_size_words = min(buffer_size_words, 3277 (unsigned int)(UC_RANGE(chip_addx, 1) ? 3278 65536 : 32768)); 3279 buffer_size_words -= buffer_size_words % hda_frame_size_words; 3280 codec_dbg(codec, 3281 "chpadr=0x%08x frmsz=%u nchan=%u " 3282 "rate_mul=%u div=%u bufsz=%u\n", 3283 chip_addx, hda_frame_size_words, num_chans, 3284 sample_rate_mul, sample_rate_div, buffer_size_words); 3285 3286 if (buffer_size_words < hda_frame_size_words) { 3287 codec_dbg(codec, "dspxfr_one_seg:failed\n"); 3288 return -EINVAL; 3289 } 3290 3291 remainder_words = words_to_write % hda_frame_size_words; 3292 data_remainder = data; 3293 chip_addx_remainder = chip_addx; 3294 3295 data += remainder_words; 3296 chip_addx += remainder_words*sizeof(u32); 3297 words_to_write -= remainder_words; 3298 3299 while (words_to_write != 0) { 3300 run_size_words = min(buffer_size_words, words_to_write); 3301 codec_dbg(codec, "dspxfr (seg loop)cnt=%u rs=%u remainder=%u\n", 3302 words_to_write, run_size_words, remainder_words); 3303 dma_xfer(dma_engine, data, run_size_words*sizeof(u32)); 3304 if (!comm_dma_setup_done) { 3305 status = dsp_dma_stop(codec, dma_chan, ovly); 3306 if (status < 0) 3307 return status; 3308 status = dsp_dma_setup_common(codec, chip_addx, 3309 dma_chan, port_map_mask, ovly); 3310 if (status < 0) 3311 return status; 3312 comm_dma_setup_done = true; 3313 } 3314 3315 status = dsp_dma_setup(codec, chip_addx, 3316 run_size_words, dma_chan); 3317 if (status < 0) 3318 return status; 3319 status = dsp_dma_start(codec, dma_chan, ovly); 3320 if (status < 0) 3321 return status; 3322 if (!dsp_is_dma_active(codec, dma_chan)) { 3323 codec_dbg(codec, "dspxfr:DMA did not start\n"); 3324 return -EIO; 3325 } 3326 status = dma_set_state(dma_engine, DMA_STATE_RUN); 3327 if (status < 0) 3328 return status; 3329 if (remainder_words != 0) { 3330 status = chipio_write_multiple(codec, 3331 chip_addx_remainder, 3332 data_remainder, 3333 remainder_words); 3334 if (status < 0) 3335 return status; 3336 remainder_words = 0; 3337 } 3338 if (hci_write) { 3339 status = dspxfr_hci_write(codec, hci_write); 3340 if (status < 0) 3341 return status; 3342 hci_write = NULL; 3343 } 3344 3345 timeout = jiffies + msecs_to_jiffies(2000); 3346 do { 3347 dma_active = dsp_is_dma_active(codec, dma_chan); 3348 if (!dma_active) 3349 break; 3350 msleep(20); 3351 } while (time_before(jiffies, timeout)); 3352 if (dma_active) 3353 break; 3354 3355 codec_dbg(codec, "+++++ DMA complete\n"); 3356 dma_set_state(dma_engine, DMA_STATE_STOP); 3357 status = dma_reset(dma_engine); 3358 3359 if (status < 0) 3360 return status; 3361 3362 data += run_size_words; 3363 chip_addx += run_size_words*sizeof(u32); 3364 words_to_write -= run_size_words; 3365 } 3366 3367 if (remainder_words != 0) { 3368 status = chipio_write_multiple(codec, chip_addx_remainder, 3369 data_remainder, remainder_words); 3370 } 3371 3372 return status; 3373 } 3374 3375 /** 3376 * dspxfr_image - Write the entire DSP image of a DSP code/data overlay to DSP memories 3377 * 3378 * @codec: the HDA codec 3379 * @fls_data: pointer to a fast load image 3380 * @reloc: Relocation address for loading single-segment overlays, or 0 for 3381 * no relocation 3382 * @sample_rate: sampling rate of the stream used for DSP download 3383 * @channels: channels of the stream used for DSP download 3384 * @ovly: TRUE if overlay format is required 3385 * 3386 * Returns zero or a negative error code. 3387 */ 3388 static int dspxfr_image(struct hda_codec *codec, 3389 const struct dsp_image_seg *fls_data, 3390 unsigned int reloc, 3391 unsigned int sample_rate, 3392 unsigned short channels, 3393 bool ovly) 3394 { 3395 struct ca0132_spec *spec = codec->spec; 3396 int status; 3397 unsigned short hda_format = 0; 3398 unsigned int response; 3399 unsigned char stream_id = 0; 3400 struct dma_engine *dma_engine; 3401 unsigned int dma_chan; 3402 unsigned int port_map_mask; 3403 3404 if (fls_data == NULL) 3405 return -EINVAL; 3406 3407 dma_engine = kzalloc(sizeof(*dma_engine), GFP_KERNEL); 3408 if (!dma_engine) 3409 return -ENOMEM; 3410 3411 dma_engine->dmab = kzalloc(sizeof(*dma_engine->dmab), GFP_KERNEL); 3412 if (!dma_engine->dmab) { 3413 kfree(dma_engine); 3414 return -ENOMEM; 3415 } 3416 3417 dma_engine->codec = codec; 3418 dma_convert_to_hda_format(codec, sample_rate, channels, &hda_format); 3419 dma_engine->m_converter_format = hda_format; 3420 dma_engine->buf_size = (ovly ? DSP_DMA_WRITE_BUFLEN_OVLY : 3421 DSP_DMA_WRITE_BUFLEN_INIT) * 2; 3422 3423 dma_chan = ovly ? INVALID_DMA_CHANNEL : 0; 3424 3425 status = codec_set_converter_format(codec, WIDGET_CHIP_CTRL, 3426 hda_format, &response); 3427 3428 if (status < 0) { 3429 codec_dbg(codec, "set converter format fail\n"); 3430 goto exit; 3431 } 3432 3433 status = snd_hda_codec_load_dsp_prepare(codec, 3434 dma_engine->m_converter_format, 3435 dma_engine->buf_size, 3436 dma_engine->dmab); 3437 if (status < 0) 3438 goto exit; 3439 spec->dsp_stream_id = status; 3440 3441 if (ovly) { 3442 status = dspio_alloc_dma_chan(codec, &dma_chan); 3443 if (status < 0) { 3444 codec_dbg(codec, "alloc dmachan fail\n"); 3445 dma_chan = INVALID_DMA_CHANNEL; 3446 goto exit; 3447 } 3448 } 3449 3450 port_map_mask = 0; 3451 status = dsp_allocate_ports_format(codec, hda_format, 3452 &port_map_mask); 3453 if (status < 0) { 3454 codec_dbg(codec, "alloc ports fail\n"); 3455 goto exit; 3456 } 3457 3458 stream_id = dma_get_stream_id(dma_engine); 3459 status = codec_set_converter_stream_channel(codec, 3460 WIDGET_CHIP_CTRL, stream_id, 0, &response); 3461 if (status < 0) { 3462 codec_dbg(codec, "set stream chan fail\n"); 3463 goto exit; 3464 } 3465 3466 while ((fls_data != NULL) && !is_last(fls_data)) { 3467 if (!is_valid(fls_data)) { 3468 codec_dbg(codec, "FLS check fail\n"); 3469 status = -EINVAL; 3470 goto exit; 3471 } 3472 status = dspxfr_one_seg(codec, fls_data, reloc, 3473 dma_engine, dma_chan, 3474 port_map_mask, ovly); 3475 if (status < 0) 3476 break; 3477 3478 if (is_hci_prog_list_seg(fls_data)) 3479 fls_data = get_next_seg_ptr(fls_data); 3480 3481 if ((fls_data != NULL) && !is_last(fls_data)) 3482 fls_data = get_next_seg_ptr(fls_data); 3483 } 3484 3485 if (port_map_mask != 0) 3486 status = dsp_free_ports(codec); 3487 3488 if (status < 0) 3489 goto exit; 3490 3491 status = codec_set_converter_stream_channel(codec, 3492 WIDGET_CHIP_CTRL, 0, 0, &response); 3493 3494 exit: 3495 if (ovly && (dma_chan != INVALID_DMA_CHANNEL)) 3496 dspio_free_dma_chan(codec, dma_chan); 3497 3498 if (dma_engine->dmab->area) 3499 snd_hda_codec_load_dsp_cleanup(codec, dma_engine->dmab); 3500 kfree(dma_engine->dmab); 3501 kfree(dma_engine); 3502 3503 return status; 3504 } 3505 3506 /* 3507 * CA0132 DSP download stuffs. 3508 */ 3509 static void dspload_post_setup(struct hda_codec *codec) 3510 { 3511 struct ca0132_spec *spec = codec->spec; 3512 codec_dbg(codec, "---- dspload_post_setup ------\n"); 3513 if (!ca0132_use_alt_functions(spec)) { 3514 /*set DSP speaker to 2.0 configuration*/ 3515 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x18), 0x08080080); 3516 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x19), 0x3f800000); 3517 3518 /*update write pointer*/ 3519 chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x29), 0x00000002); 3520 } 3521 } 3522 3523 /** 3524 * dspload_image - Download DSP from a DSP Image Fast Load structure. 3525 * 3526 * @codec: the HDA codec 3527 * @fls: pointer to a fast load image 3528 * @ovly: TRUE if overlay format is required 3529 * @reloc: Relocation address for loading single-segment overlays, or 0 for 3530 * no relocation 3531 * @autostart: TRUE if DSP starts after loading; ignored if ovly is TRUE 3532 * @router_chans: number of audio router channels to be allocated (0 means use 3533 * internal defaults; max is 32) 3534 * 3535 * Download DSP from a DSP Image Fast Load structure. This structure is a 3536 * linear, non-constant sized element array of structures, each of which 3537 * contain the count of the data to be loaded, the data itself, and the 3538 * corresponding starting chip address of the starting data location. 3539 * Returns zero or a negative error code. 3540 */ 3541 static int dspload_image(struct hda_codec *codec, 3542 const struct dsp_image_seg *fls, 3543 bool ovly, 3544 unsigned int reloc, 3545 bool autostart, 3546 int router_chans) 3547 { 3548 int status = 0; 3549 unsigned int sample_rate; 3550 unsigned short channels; 3551 3552 codec_dbg(codec, "---- dspload_image begin ------\n"); 3553 if (router_chans == 0) { 3554 if (!ovly) 3555 router_chans = DMA_TRANSFER_FRAME_SIZE_NWORDS; 3556 else 3557 router_chans = DMA_OVERLAY_FRAME_SIZE_NWORDS; 3558 } 3559 3560 sample_rate = 48000; 3561 channels = (unsigned short)router_chans; 3562 3563 while (channels > 16) { 3564 sample_rate *= 2; 3565 channels /= 2; 3566 } 3567 3568 do { 3569 codec_dbg(codec, "Ready to program DMA\n"); 3570 if (!ovly) 3571 status = dsp_reset(codec); 3572 3573 if (status < 0) 3574 break; 3575 3576 codec_dbg(codec, "dsp_reset() complete\n"); 3577 status = dspxfr_image(codec, fls, reloc, sample_rate, channels, 3578 ovly); 3579 3580 if (status < 0) 3581 break; 3582 3583 codec_dbg(codec, "dspxfr_image() complete\n"); 3584 if (autostart && !ovly) { 3585 dspload_post_setup(codec); 3586 status = dsp_set_run_state(codec); 3587 } 3588 3589 codec_dbg(codec, "LOAD FINISHED\n"); 3590 } while (0); 3591 3592 return status; 3593 } 3594 3595 #ifdef CONFIG_SND_HDA_CODEC_CA0132_DSP 3596 static bool dspload_is_loaded(struct hda_codec *codec) 3597 { 3598 unsigned int data = 0; 3599 int status = 0; 3600 3601 status = chipio_read(codec, 0x40004, &data); 3602 if ((status < 0) || (data != 1)) 3603 return false; 3604 3605 return true; 3606 } 3607 #else 3608 #define dspload_is_loaded(codec) false 3609 #endif 3610 3611 static bool dspload_wait_loaded(struct hda_codec *codec) 3612 { 3613 unsigned long timeout = jiffies + msecs_to_jiffies(2000); 3614 3615 do { 3616 if (dspload_is_loaded(codec)) { 3617 codec_info(codec, "ca0132 DSP downloaded and running\n"); 3618 return true; 3619 } 3620 msleep(20); 3621 } while (time_before(jiffies, timeout)); 3622 3623 codec_err(codec, "ca0132 failed to download DSP\n"); 3624 return false; 3625 } 3626 3627 /* 3628 * ca0113 related functions. The ca0113 acts as the HDA bus for the pci-e 3629 * based cards, and has a second mmio region, region2, that's used for special 3630 * commands. 3631 */ 3632 3633 /* 3634 * For cards with PCI-E region2 (Sound Blaster Z/ZxR, Recon3D, and AE-5) 3635 * the mmio address 0x320 is used to set GPIO pins. The format for the data 3636 * The first eight bits are just the number of the pin. So far, I've only seen 3637 * this number go to 7. 3638 * AE-5 note: The AE-5 seems to use pins 2 and 3 to somehow set the color value 3639 * of the on-card LED. It seems to use pin 2 for data, then toggles 3 to on and 3640 * then off to send that bit. 3641 */ 3642 static void ca0113_mmio_gpio_set(struct hda_codec *codec, unsigned int gpio_pin, 3643 bool enable) 3644 { 3645 struct ca0132_spec *spec = codec->spec; 3646 unsigned short gpio_data; 3647 3648 gpio_data = gpio_pin & 0xF; 3649 gpio_data |= ((enable << 8) & 0x100); 3650 3651 writew(gpio_data, spec->mem_base + 0x320); 3652 } 3653 3654 /* 3655 * Special pci region2 commands that are only used by the AE-5. They follow 3656 * a set format, and require reads at certain points to seemingly 'clear' 3657 * the response data. My first tests didn't do these reads, and would cause 3658 * the card to get locked up until the memory was read. These commands 3659 * seem to work with three distinct values that I've taken to calling group, 3660 * target-id, and value. 3661 */ 3662 static void ca0113_mmio_command_set(struct hda_codec *codec, unsigned int group, 3663 unsigned int target, unsigned int value) 3664 { 3665 struct ca0132_spec *spec = codec->spec; 3666 unsigned int write_val; 3667 3668 writel(0x0000007e, spec->mem_base + 0x210); 3669 readl(spec->mem_base + 0x210); 3670 writel(0x0000005a, spec->mem_base + 0x210); 3671 readl(spec->mem_base + 0x210); 3672 readl(spec->mem_base + 0x210); 3673 3674 writel(0x00800005, spec->mem_base + 0x20c); 3675 writel(group, spec->mem_base + 0x804); 3676 3677 writel(0x00800005, spec->mem_base + 0x20c); 3678 write_val = (target & 0xff); 3679 write_val |= (value << 8); 3680 3681 3682 writel(write_val, spec->mem_base + 0x204); 3683 /* 3684 * Need delay here or else it goes too fast and works inconsistently. 3685 */ 3686 msleep(20); 3687 3688 readl(spec->mem_base + 0x860); 3689 readl(spec->mem_base + 0x854); 3690 readl(spec->mem_base + 0x840); 3691 3692 writel(0x00800004, spec->mem_base + 0x20c); 3693 writel(0x00000000, spec->mem_base + 0x210); 3694 readl(spec->mem_base + 0x210); 3695 readl(spec->mem_base + 0x210); 3696 } 3697 3698 /* 3699 * This second type of command is used for setting the sound filter type. 3700 */ 3701 static void ca0113_mmio_command_set_type2(struct hda_codec *codec, 3702 unsigned int group, unsigned int target, unsigned int value) 3703 { 3704 struct ca0132_spec *spec = codec->spec; 3705 unsigned int write_val; 3706 3707 writel(0x0000007e, spec->mem_base + 0x210); 3708 readl(spec->mem_base + 0x210); 3709 writel(0x0000005a, spec->mem_base + 0x210); 3710 readl(spec->mem_base + 0x210); 3711 readl(spec->mem_base + 0x210); 3712 3713 writel(0x00800003, spec->mem_base + 0x20c); 3714 writel(group, spec->mem_base + 0x804); 3715 3716 writel(0x00800005, spec->mem_base + 0x20c); 3717 write_val = (target & 0xff); 3718 write_val |= (value << 8); 3719 3720 3721 writel(write_val, spec->mem_base + 0x204); 3722 msleep(20); 3723 readl(spec->mem_base + 0x860); 3724 readl(spec->mem_base + 0x854); 3725 readl(spec->mem_base + 0x840); 3726 3727 writel(0x00800004, spec->mem_base + 0x20c); 3728 writel(0x00000000, spec->mem_base + 0x210); 3729 readl(spec->mem_base + 0x210); 3730 readl(spec->mem_base + 0x210); 3731 } 3732 3733 /* 3734 * Setup GPIO for the other variants of Core3D. 3735 */ 3736 3737 /* 3738 * Sets up the GPIO pins so that they are discoverable. If this isn't done, 3739 * the card shows as having no GPIO pins. 3740 */ 3741 static void ca0132_gpio_init(struct hda_codec *codec) 3742 { 3743 struct ca0132_spec *spec = codec->spec; 3744 3745 switch (ca0132_quirk(spec)) { 3746 case QUIRK_SBZ: 3747 case QUIRK_AE5: 3748 case QUIRK_AE7: 3749 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); 3750 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); 3751 snd_hda_codec_write(codec, 0x01, 0, 0x790, 0x23); 3752 break; 3753 case QUIRK_R3DI: 3754 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); 3755 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x5B); 3756 break; 3757 default: 3758 break; 3759 } 3760 3761 } 3762 3763 /* Sets the GPIO for audio output. */ 3764 static void ca0132_gpio_setup(struct hda_codec *codec) 3765 { 3766 struct ca0132_spec *spec = codec->spec; 3767 3768 switch (ca0132_quirk(spec)) { 3769 case QUIRK_SBZ: 3770 snd_hda_codec_write(codec, 0x01, 0, 3771 AC_VERB_SET_GPIO_DIRECTION, 0x07); 3772 snd_hda_codec_write(codec, 0x01, 0, 3773 AC_VERB_SET_GPIO_MASK, 0x07); 3774 snd_hda_codec_write(codec, 0x01, 0, 3775 AC_VERB_SET_GPIO_DATA, 0x04); 3776 snd_hda_codec_write(codec, 0x01, 0, 3777 AC_VERB_SET_GPIO_DATA, 0x06); 3778 break; 3779 case QUIRK_R3DI: 3780 snd_hda_codec_write(codec, 0x01, 0, 3781 AC_VERB_SET_GPIO_DIRECTION, 0x1E); 3782 snd_hda_codec_write(codec, 0x01, 0, 3783 AC_VERB_SET_GPIO_MASK, 0x1F); 3784 snd_hda_codec_write(codec, 0x01, 0, 3785 AC_VERB_SET_GPIO_DATA, 0x0C); 3786 break; 3787 default: 3788 break; 3789 } 3790 } 3791 3792 /* 3793 * GPIO control functions for the Recon3D integrated. 3794 */ 3795 3796 enum r3di_gpio_bit { 3797 /* Bit 1 - Switch between front/rear mic. 0 = rear, 1 = front */ 3798 R3DI_MIC_SELECT_BIT = 1, 3799 /* Bit 2 - Switch between headphone/line out. 0 = Headphone, 1 = Line */ 3800 R3DI_OUT_SELECT_BIT = 2, 3801 /* 3802 * I dunno what this actually does, but it stays on until the dsp 3803 * is downloaded. 3804 */ 3805 R3DI_GPIO_DSP_DOWNLOADING = 3, 3806 /* 3807 * Same as above, no clue what it does, but it comes on after the dsp 3808 * is downloaded. 3809 */ 3810 R3DI_GPIO_DSP_DOWNLOADED = 4 3811 }; 3812 3813 enum r3di_mic_select { 3814 /* Set GPIO bit 1 to 0 for rear mic */ 3815 R3DI_REAR_MIC = 0, 3816 /* Set GPIO bit 1 to 1 for front microphone*/ 3817 R3DI_FRONT_MIC = 1 3818 }; 3819 3820 enum r3di_out_select { 3821 /* Set GPIO bit 2 to 0 for headphone */ 3822 R3DI_HEADPHONE_OUT = 0, 3823 /* Set GPIO bit 2 to 1 for speaker */ 3824 R3DI_LINE_OUT = 1 3825 }; 3826 enum r3di_dsp_status { 3827 /* Set GPIO bit 3 to 1 until DSP is downloaded */ 3828 R3DI_DSP_DOWNLOADING = 0, 3829 /* Set GPIO bit 4 to 1 once DSP is downloaded */ 3830 R3DI_DSP_DOWNLOADED = 1 3831 }; 3832 3833 3834 static void r3di_gpio_mic_set(struct hda_codec *codec, 3835 enum r3di_mic_select cur_mic) 3836 { 3837 unsigned int cur_gpio; 3838 3839 /* Get the current GPIO Data setup */ 3840 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); 3841 3842 switch (cur_mic) { 3843 case R3DI_REAR_MIC: 3844 cur_gpio &= ~(1 << R3DI_MIC_SELECT_BIT); 3845 break; 3846 case R3DI_FRONT_MIC: 3847 cur_gpio |= (1 << R3DI_MIC_SELECT_BIT); 3848 break; 3849 } 3850 snd_hda_codec_write(codec, codec->core.afg, 0, 3851 AC_VERB_SET_GPIO_DATA, cur_gpio); 3852 } 3853 3854 static void r3di_gpio_dsp_status_set(struct hda_codec *codec, 3855 enum r3di_dsp_status dsp_status) 3856 { 3857 unsigned int cur_gpio; 3858 3859 /* Get the current GPIO Data setup */ 3860 cur_gpio = snd_hda_codec_read(codec, 0x01, 0, AC_VERB_GET_GPIO_DATA, 0); 3861 3862 switch (dsp_status) { 3863 case R3DI_DSP_DOWNLOADING: 3864 cur_gpio |= (1 << R3DI_GPIO_DSP_DOWNLOADING); 3865 snd_hda_codec_write(codec, codec->core.afg, 0, 3866 AC_VERB_SET_GPIO_DATA, cur_gpio); 3867 break; 3868 case R3DI_DSP_DOWNLOADED: 3869 /* Set DOWNLOADING bit to 0. */ 3870 cur_gpio &= ~(1 << R3DI_GPIO_DSP_DOWNLOADING); 3871 3872 snd_hda_codec_write(codec, codec->core.afg, 0, 3873 AC_VERB_SET_GPIO_DATA, cur_gpio); 3874 3875 cur_gpio |= (1 << R3DI_GPIO_DSP_DOWNLOADED); 3876 break; 3877 } 3878 3879 snd_hda_codec_write(codec, codec->core.afg, 0, 3880 AC_VERB_SET_GPIO_DATA, cur_gpio); 3881 } 3882 3883 /* 3884 * PCM callbacks 3885 */ 3886 static int ca0132_playback_pcm_prepare(struct hda_pcm_stream *hinfo, 3887 struct hda_codec *codec, 3888 unsigned int stream_tag, 3889 unsigned int format, 3890 struct snd_pcm_substream *substream) 3891 { 3892 struct ca0132_spec *spec = codec->spec; 3893 3894 snd_hda_codec_setup_stream(codec, spec->dacs[0], stream_tag, 0, format); 3895 3896 return 0; 3897 } 3898 3899 static int ca0132_playback_pcm_cleanup(struct hda_pcm_stream *hinfo, 3900 struct hda_codec *codec, 3901 struct snd_pcm_substream *substream) 3902 { 3903 struct ca0132_spec *spec = codec->spec; 3904 3905 if (spec->dsp_state == DSP_DOWNLOADING) 3906 return 0; 3907 3908 /*If Playback effects are on, allow stream some time to flush 3909 *effects tail*/ 3910 if (spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID]) 3911 msleep(50); 3912 3913 snd_hda_codec_cleanup_stream(codec, spec->dacs[0]); 3914 3915 return 0; 3916 } 3917 3918 static unsigned int ca0132_playback_pcm_delay(struct hda_pcm_stream *info, 3919 struct hda_codec *codec, 3920 struct snd_pcm_substream *substream) 3921 { 3922 struct ca0132_spec *spec = codec->spec; 3923 unsigned int latency = DSP_PLAYBACK_INIT_LATENCY; 3924 struct snd_pcm_runtime *runtime = substream->runtime; 3925 3926 if (spec->dsp_state != DSP_DOWNLOADED) 3927 return 0; 3928 3929 /* Add latency if playback enhancement and either effect is enabled. */ 3930 if (spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID]) { 3931 if ((spec->effects_switch[SURROUND - EFFECT_START_NID]) || 3932 (spec->effects_switch[DIALOG_PLUS - EFFECT_START_NID])) 3933 latency += DSP_PLAY_ENHANCEMENT_LATENCY; 3934 } 3935 3936 /* Applying Speaker EQ adds latency as well. */ 3937 if (spec->cur_out_type == SPEAKER_OUT) 3938 latency += DSP_SPEAKER_OUT_LATENCY; 3939 3940 return (latency * runtime->rate) / 1000; 3941 } 3942 3943 /* 3944 * Digital out 3945 */ 3946 static int ca0132_dig_playback_pcm_open(struct hda_pcm_stream *hinfo, 3947 struct hda_codec *codec, 3948 struct snd_pcm_substream *substream) 3949 { 3950 struct ca0132_spec *spec = codec->spec; 3951 return snd_hda_multi_out_dig_open(codec, &spec->multiout); 3952 } 3953 3954 static int ca0132_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo, 3955 struct hda_codec *codec, 3956 unsigned int stream_tag, 3957 unsigned int format, 3958 struct snd_pcm_substream *substream) 3959 { 3960 struct ca0132_spec *spec = codec->spec; 3961 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, 3962 stream_tag, format, substream); 3963 } 3964 3965 static int ca0132_dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo, 3966 struct hda_codec *codec, 3967 struct snd_pcm_substream *substream) 3968 { 3969 struct ca0132_spec *spec = codec->spec; 3970 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); 3971 } 3972 3973 static int ca0132_dig_playback_pcm_close(struct hda_pcm_stream *hinfo, 3974 struct hda_codec *codec, 3975 struct snd_pcm_substream *substream) 3976 { 3977 struct ca0132_spec *spec = codec->spec; 3978 return snd_hda_multi_out_dig_close(codec, &spec->multiout); 3979 } 3980 3981 /* 3982 * Analog capture 3983 */ 3984 static int ca0132_capture_pcm_prepare(struct hda_pcm_stream *hinfo, 3985 struct hda_codec *codec, 3986 unsigned int stream_tag, 3987 unsigned int format, 3988 struct snd_pcm_substream *substream) 3989 { 3990 snd_hda_codec_setup_stream(codec, hinfo->nid, 3991 stream_tag, 0, format); 3992 3993 return 0; 3994 } 3995 3996 static int ca0132_capture_pcm_cleanup(struct hda_pcm_stream *hinfo, 3997 struct hda_codec *codec, 3998 struct snd_pcm_substream *substream) 3999 { 4000 struct ca0132_spec *spec = codec->spec; 4001 4002 if (spec->dsp_state == DSP_DOWNLOADING) 4003 return 0; 4004 4005 snd_hda_codec_cleanup_stream(codec, hinfo->nid); 4006 return 0; 4007 } 4008 4009 static unsigned int ca0132_capture_pcm_delay(struct hda_pcm_stream *info, 4010 struct hda_codec *codec, 4011 struct snd_pcm_substream *substream) 4012 { 4013 struct ca0132_spec *spec = codec->spec; 4014 unsigned int latency = DSP_CAPTURE_INIT_LATENCY; 4015 struct snd_pcm_runtime *runtime = substream->runtime; 4016 4017 if (spec->dsp_state != DSP_DOWNLOADED) 4018 return 0; 4019 4020 if (spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID]) 4021 latency += DSP_CRYSTAL_VOICE_LATENCY; 4022 4023 return (latency * runtime->rate) / 1000; 4024 } 4025 4026 /* 4027 * Controls stuffs. 4028 */ 4029 4030 /* 4031 * Mixer controls helpers. 4032 */ 4033 #define CA0132_CODEC_VOL_MONO(xname, nid, channel, dir) \ 4034 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 4035 .name = xname, \ 4036 .subdevice = HDA_SUBDEV_AMP_FLAG, \ 4037 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | \ 4038 SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ 4039 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK, \ 4040 .info = ca0132_volume_info, \ 4041 .get = ca0132_volume_get, \ 4042 .put = ca0132_volume_put, \ 4043 .tlv = { .c = ca0132_volume_tlv }, \ 4044 .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, 0, dir) } 4045 4046 /* 4047 * Creates a mixer control that uses defaults of HDA_CODEC_VOL except for the 4048 * volume put, which is used for setting the DSP volume. This was done because 4049 * the ca0132 functions were taking too much time and causing lag. 4050 */ 4051 #define CA0132_ALT_CODEC_VOL_MONO(xname, nid, channel, dir) \ 4052 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 4053 .name = xname, \ 4054 .subdevice = HDA_SUBDEV_AMP_FLAG, \ 4055 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | \ 4056 SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ 4057 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK, \ 4058 .info = snd_hda_mixer_amp_volume_info, \ 4059 .get = snd_hda_mixer_amp_volume_get, \ 4060 .put = ca0132_alt_volume_put, \ 4061 .tlv = { .c = snd_hda_mixer_amp_tlv }, \ 4062 .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, 0, dir) } 4063 4064 #define CA0132_CODEC_MUTE_MONO(xname, nid, channel, dir) \ 4065 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 4066 .name = xname, \ 4067 .subdevice = HDA_SUBDEV_AMP_FLAG, \ 4068 .info = snd_hda_mixer_amp_switch_info, \ 4069 .get = ca0132_switch_get, \ 4070 .put = ca0132_switch_put, \ 4071 .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, 0, dir) } 4072 4073 /* stereo */ 4074 #define CA0132_CODEC_VOL(xname, nid, dir) \ 4075 CA0132_CODEC_VOL_MONO(xname, nid, 3, dir) 4076 #define CA0132_ALT_CODEC_VOL(xname, nid, dir) \ 4077 CA0132_ALT_CODEC_VOL_MONO(xname, nid, 3, dir) 4078 #define CA0132_CODEC_MUTE(xname, nid, dir) \ 4079 CA0132_CODEC_MUTE_MONO(xname, nid, 3, dir) 4080 4081 /* lookup tables */ 4082 /* 4083 * Lookup table with decibel values for the DSP. When volume is changed in 4084 * Windows, the DSP is also sent the dB value in floating point. In Windows, 4085 * these values have decimal points, probably because the Windows driver 4086 * actually uses floating point. We can't here, so I made a lookup table of 4087 * values -90 to 9. -90 is the lowest decibel value for both the ADC's and the 4088 * DAC's, and 9 is the maximum. 4089 */ 4090 static const unsigned int float_vol_db_lookup[] = { 4091 0xC2B40000, 0xC2B20000, 0xC2B00000, 0xC2AE0000, 0xC2AC0000, 0xC2AA0000, 4092 0xC2A80000, 0xC2A60000, 0xC2A40000, 0xC2A20000, 0xC2A00000, 0xC29E0000, 4093 0xC29C0000, 0xC29A0000, 0xC2980000, 0xC2960000, 0xC2940000, 0xC2920000, 4094 0xC2900000, 0xC28E0000, 0xC28C0000, 0xC28A0000, 0xC2880000, 0xC2860000, 4095 0xC2840000, 0xC2820000, 0xC2800000, 0xC27C0000, 0xC2780000, 0xC2740000, 4096 0xC2700000, 0xC26C0000, 0xC2680000, 0xC2640000, 0xC2600000, 0xC25C0000, 4097 0xC2580000, 0xC2540000, 0xC2500000, 0xC24C0000, 0xC2480000, 0xC2440000, 4098 0xC2400000, 0xC23C0000, 0xC2380000, 0xC2340000, 0xC2300000, 0xC22C0000, 4099 0xC2280000, 0xC2240000, 0xC2200000, 0xC21C0000, 0xC2180000, 0xC2140000, 4100 0xC2100000, 0xC20C0000, 0xC2080000, 0xC2040000, 0xC2000000, 0xC1F80000, 4101 0xC1F00000, 0xC1E80000, 0xC1E00000, 0xC1D80000, 0xC1D00000, 0xC1C80000, 4102 0xC1C00000, 0xC1B80000, 0xC1B00000, 0xC1A80000, 0xC1A00000, 0xC1980000, 4103 0xC1900000, 0xC1880000, 0xC1800000, 0xC1700000, 0xC1600000, 0xC1500000, 4104 0xC1400000, 0xC1300000, 0xC1200000, 0xC1100000, 0xC1000000, 0xC0E00000, 4105 0xC0C00000, 0xC0A00000, 0xC0800000, 0xC0400000, 0xC0000000, 0xBF800000, 4106 0x00000000, 0x3F800000, 0x40000000, 0x40400000, 0x40800000, 0x40A00000, 4107 0x40C00000, 0x40E00000, 0x41000000, 0x41100000 4108 }; 4109 4110 /* 4111 * This table counts from float 0 to 1 in increments of .01, which is 4112 * useful for a few different sliders. 4113 */ 4114 static const unsigned int float_zero_to_one_lookup[] = { 4115 0x00000000, 0x3C23D70A, 0x3CA3D70A, 0x3CF5C28F, 0x3D23D70A, 0x3D4CCCCD, 4116 0x3D75C28F, 0x3D8F5C29, 0x3DA3D70A, 0x3DB851EC, 0x3DCCCCCD, 0x3DE147AE, 4117 0x3DF5C28F, 0x3E051EB8, 0x3E0F5C29, 0x3E19999A, 0x3E23D70A, 0x3E2E147B, 4118 0x3E3851EC, 0x3E428F5C, 0x3E4CCCCD, 0x3E570A3D, 0x3E6147AE, 0x3E6B851F, 4119 0x3E75C28F, 0x3E800000, 0x3E851EB8, 0x3E8A3D71, 0x3E8F5C29, 0x3E947AE1, 4120 0x3E99999A, 0x3E9EB852, 0x3EA3D70A, 0x3EA8F5C3, 0x3EAE147B, 0x3EB33333, 4121 0x3EB851EC, 0x3EBD70A4, 0x3EC28F5C, 0x3EC7AE14, 0x3ECCCCCD, 0x3ED1EB85, 4122 0x3ED70A3D, 0x3EDC28F6, 0x3EE147AE, 0x3EE66666, 0x3EEB851F, 0x3EF0A3D7, 4123 0x3EF5C28F, 0x3EFAE148, 0x3F000000, 0x3F028F5C, 0x3F051EB8, 0x3F07AE14, 4124 0x3F0A3D71, 0x3F0CCCCD, 0x3F0F5C29, 0x3F11EB85, 0x3F147AE1, 0x3F170A3D, 4125 0x3F19999A, 0x3F1C28F6, 0x3F1EB852, 0x3F2147AE, 0x3F23D70A, 0x3F266666, 4126 0x3F28F5C3, 0x3F2B851F, 0x3F2E147B, 0x3F30A3D7, 0x3F333333, 0x3F35C28F, 4127 0x3F3851EC, 0x3F3AE148, 0x3F3D70A4, 0x3F400000, 0x3F428F5C, 0x3F451EB8, 4128 0x3F47AE14, 0x3F4A3D71, 0x3F4CCCCD, 0x3F4F5C29, 0x3F51EB85, 0x3F547AE1, 4129 0x3F570A3D, 0x3F59999A, 0x3F5C28F6, 0x3F5EB852, 0x3F6147AE, 0x3F63D70A, 4130 0x3F666666, 0x3F68F5C3, 0x3F6B851F, 0x3F6E147B, 0x3F70A3D7, 0x3F733333, 4131 0x3F75C28F, 0x3F7851EC, 0x3F7AE148, 0x3F7D70A4, 0x3F800000 4132 }; 4133 4134 /* 4135 * This table counts from float 10 to 1000, which is the range of the x-bass 4136 * crossover slider in Windows. 4137 */ 4138 static const unsigned int float_xbass_xover_lookup[] = { 4139 0x41200000, 0x41A00000, 0x41F00000, 0x42200000, 0x42480000, 0x42700000, 4140 0x428C0000, 0x42A00000, 0x42B40000, 0x42C80000, 0x42DC0000, 0x42F00000, 4141 0x43020000, 0x430C0000, 0x43160000, 0x43200000, 0x432A0000, 0x43340000, 4142 0x433E0000, 0x43480000, 0x43520000, 0x435C0000, 0x43660000, 0x43700000, 4143 0x437A0000, 0x43820000, 0x43870000, 0x438C0000, 0x43910000, 0x43960000, 4144 0x439B0000, 0x43A00000, 0x43A50000, 0x43AA0000, 0x43AF0000, 0x43B40000, 4145 0x43B90000, 0x43BE0000, 0x43C30000, 0x43C80000, 0x43CD0000, 0x43D20000, 4146 0x43D70000, 0x43DC0000, 0x43E10000, 0x43E60000, 0x43EB0000, 0x43F00000, 4147 0x43F50000, 0x43FA0000, 0x43FF0000, 0x44020000, 0x44048000, 0x44070000, 4148 0x44098000, 0x440C0000, 0x440E8000, 0x44110000, 0x44138000, 0x44160000, 4149 0x44188000, 0x441B0000, 0x441D8000, 0x44200000, 0x44228000, 0x44250000, 4150 0x44278000, 0x442A0000, 0x442C8000, 0x442F0000, 0x44318000, 0x44340000, 4151 0x44368000, 0x44390000, 0x443B8000, 0x443E0000, 0x44408000, 0x44430000, 4152 0x44458000, 0x44480000, 0x444A8000, 0x444D0000, 0x444F8000, 0x44520000, 4153 0x44548000, 0x44570000, 0x44598000, 0x445C0000, 0x445E8000, 0x44610000, 4154 0x44638000, 0x44660000, 0x44688000, 0x446B0000, 0x446D8000, 0x44700000, 4155 0x44728000, 0x44750000, 0x44778000, 0x447A0000 4156 }; 4157 4158 /* The following are for tuning of products */ 4159 #ifdef ENABLE_TUNING_CONTROLS 4160 4161 static const unsigned int voice_focus_vals_lookup[] = { 4162 0x41A00000, 0x41A80000, 0x41B00000, 0x41B80000, 0x41C00000, 0x41C80000, 4163 0x41D00000, 0x41D80000, 0x41E00000, 0x41E80000, 0x41F00000, 0x41F80000, 4164 0x42000000, 0x42040000, 0x42080000, 0x420C0000, 0x42100000, 0x42140000, 4165 0x42180000, 0x421C0000, 0x42200000, 0x42240000, 0x42280000, 0x422C0000, 4166 0x42300000, 0x42340000, 0x42380000, 0x423C0000, 0x42400000, 0x42440000, 4167 0x42480000, 0x424C0000, 0x42500000, 0x42540000, 0x42580000, 0x425C0000, 4168 0x42600000, 0x42640000, 0x42680000, 0x426C0000, 0x42700000, 0x42740000, 4169 0x42780000, 0x427C0000, 0x42800000, 0x42820000, 0x42840000, 0x42860000, 4170 0x42880000, 0x428A0000, 0x428C0000, 0x428E0000, 0x42900000, 0x42920000, 4171 0x42940000, 0x42960000, 0x42980000, 0x429A0000, 0x429C0000, 0x429E0000, 4172 0x42A00000, 0x42A20000, 0x42A40000, 0x42A60000, 0x42A80000, 0x42AA0000, 4173 0x42AC0000, 0x42AE0000, 0x42B00000, 0x42B20000, 0x42B40000, 0x42B60000, 4174 0x42B80000, 0x42BA0000, 0x42BC0000, 0x42BE0000, 0x42C00000, 0x42C20000, 4175 0x42C40000, 0x42C60000, 0x42C80000, 0x42CA0000, 0x42CC0000, 0x42CE0000, 4176 0x42D00000, 0x42D20000, 0x42D40000, 0x42D60000, 0x42D80000, 0x42DA0000, 4177 0x42DC0000, 0x42DE0000, 0x42E00000, 0x42E20000, 0x42E40000, 0x42E60000, 4178 0x42E80000, 0x42EA0000, 0x42EC0000, 0x42EE0000, 0x42F00000, 0x42F20000, 4179 0x42F40000, 0x42F60000, 0x42F80000, 0x42FA0000, 0x42FC0000, 0x42FE0000, 4180 0x43000000, 0x43010000, 0x43020000, 0x43030000, 0x43040000, 0x43050000, 4181 0x43060000, 0x43070000, 0x43080000, 0x43090000, 0x430A0000, 0x430B0000, 4182 0x430C0000, 0x430D0000, 0x430E0000, 0x430F0000, 0x43100000, 0x43110000, 4183 0x43120000, 0x43130000, 0x43140000, 0x43150000, 0x43160000, 0x43170000, 4184 0x43180000, 0x43190000, 0x431A0000, 0x431B0000, 0x431C0000, 0x431D0000, 4185 0x431E0000, 0x431F0000, 0x43200000, 0x43210000, 0x43220000, 0x43230000, 4186 0x43240000, 0x43250000, 0x43260000, 0x43270000, 0x43280000, 0x43290000, 4187 0x432A0000, 0x432B0000, 0x432C0000, 0x432D0000, 0x432E0000, 0x432F0000, 4188 0x43300000, 0x43310000, 0x43320000, 0x43330000, 0x43340000 4189 }; 4190 4191 static const unsigned int mic_svm_vals_lookup[] = { 4192 0x00000000, 0x3C23D70A, 0x3CA3D70A, 0x3CF5C28F, 0x3D23D70A, 0x3D4CCCCD, 4193 0x3D75C28F, 0x3D8F5C29, 0x3DA3D70A, 0x3DB851EC, 0x3DCCCCCD, 0x3DE147AE, 4194 0x3DF5C28F, 0x3E051EB8, 0x3E0F5C29, 0x3E19999A, 0x3E23D70A, 0x3E2E147B, 4195 0x3E3851EC, 0x3E428F5C, 0x3E4CCCCD, 0x3E570A3D, 0x3E6147AE, 0x3E6B851F, 4196 0x3E75C28F, 0x3E800000, 0x3E851EB8, 0x3E8A3D71, 0x3E8F5C29, 0x3E947AE1, 4197 0x3E99999A, 0x3E9EB852, 0x3EA3D70A, 0x3EA8F5C3, 0x3EAE147B, 0x3EB33333, 4198 0x3EB851EC, 0x3EBD70A4, 0x3EC28F5C, 0x3EC7AE14, 0x3ECCCCCD, 0x3ED1EB85, 4199 0x3ED70A3D, 0x3EDC28F6, 0x3EE147AE, 0x3EE66666, 0x3EEB851F, 0x3EF0A3D7, 4200 0x3EF5C28F, 0x3EFAE148, 0x3F000000, 0x3F028F5C, 0x3F051EB8, 0x3F07AE14, 4201 0x3F0A3D71, 0x3F0CCCCD, 0x3F0F5C29, 0x3F11EB85, 0x3F147AE1, 0x3F170A3D, 4202 0x3F19999A, 0x3F1C28F6, 0x3F1EB852, 0x3F2147AE, 0x3F23D70A, 0x3F266666, 4203 0x3F28F5C3, 0x3F2B851F, 0x3F2E147B, 0x3F30A3D7, 0x3F333333, 0x3F35C28F, 4204 0x3F3851EC, 0x3F3AE148, 0x3F3D70A4, 0x3F400000, 0x3F428F5C, 0x3F451EB8, 4205 0x3F47AE14, 0x3F4A3D71, 0x3F4CCCCD, 0x3F4F5C29, 0x3F51EB85, 0x3F547AE1, 4206 0x3F570A3D, 0x3F59999A, 0x3F5C28F6, 0x3F5EB852, 0x3F6147AE, 0x3F63D70A, 4207 0x3F666666, 0x3F68F5C3, 0x3F6B851F, 0x3F6E147B, 0x3F70A3D7, 0x3F733333, 4208 0x3F75C28F, 0x3F7851EC, 0x3F7AE148, 0x3F7D70A4, 0x3F800000 4209 }; 4210 4211 static const unsigned int equalizer_vals_lookup[] = { 4212 0xC1C00000, 0xC1B80000, 0xC1B00000, 0xC1A80000, 0xC1A00000, 0xC1980000, 4213 0xC1900000, 0xC1880000, 0xC1800000, 0xC1700000, 0xC1600000, 0xC1500000, 4214 0xC1400000, 0xC1300000, 0xC1200000, 0xC1100000, 0xC1000000, 0xC0E00000, 4215 0xC0C00000, 0xC0A00000, 0xC0800000, 0xC0400000, 0xC0000000, 0xBF800000, 4216 0x00000000, 0x3F800000, 0x40000000, 0x40400000, 0x40800000, 0x40A00000, 4217 0x40C00000, 0x40E00000, 0x41000000, 0x41100000, 0x41200000, 0x41300000, 4218 0x41400000, 0x41500000, 0x41600000, 0x41700000, 0x41800000, 0x41880000, 4219 0x41900000, 0x41980000, 0x41A00000, 0x41A80000, 0x41B00000, 0x41B80000, 4220 0x41C00000 4221 }; 4222 4223 static int tuning_ctl_set(struct hda_codec *codec, hda_nid_t nid, 4224 const unsigned int *lookup, int idx) 4225 { 4226 int i = 0; 4227 4228 for (i = 0; i < TUNING_CTLS_COUNT; i++) 4229 if (nid == ca0132_tuning_ctls[i].nid) 4230 break; 4231 4232 snd_hda_power_up(codec); 4233 dspio_set_param(codec, ca0132_tuning_ctls[i].mid, 0x20, 4234 ca0132_tuning_ctls[i].req, 4235 &(lookup[idx]), sizeof(unsigned int)); 4236 snd_hda_power_down(codec); 4237 4238 return 1; 4239 } 4240 4241 static int tuning_ctl_get(struct snd_kcontrol *kcontrol, 4242 struct snd_ctl_elem_value *ucontrol) 4243 { 4244 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 4245 struct ca0132_spec *spec = codec->spec; 4246 hda_nid_t nid = get_amp_nid(kcontrol); 4247 long *valp = ucontrol->value.integer.value; 4248 int idx = nid - TUNING_CTL_START_NID; 4249 4250 *valp = spec->cur_ctl_vals[idx]; 4251 return 0; 4252 } 4253 4254 static int voice_focus_ctl_info(struct snd_kcontrol *kcontrol, 4255 struct snd_ctl_elem_info *uinfo) 4256 { 4257 int chs = get_amp_channels(kcontrol); 4258 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 4259 uinfo->count = chs == 3 ? 2 : 1; 4260 uinfo->value.integer.min = 20; 4261 uinfo->value.integer.max = 180; 4262 uinfo->value.integer.step = 1; 4263 4264 return 0; 4265 } 4266 4267 static int voice_focus_ctl_put(struct snd_kcontrol *kcontrol, 4268 struct snd_ctl_elem_value *ucontrol) 4269 { 4270 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 4271 struct ca0132_spec *spec = codec->spec; 4272 hda_nid_t nid = get_amp_nid(kcontrol); 4273 long *valp = ucontrol->value.integer.value; 4274 int idx; 4275 4276 idx = nid - TUNING_CTL_START_NID; 4277 /* any change? */ 4278 if (spec->cur_ctl_vals[idx] == *valp) 4279 return 0; 4280 4281 spec->cur_ctl_vals[idx] = *valp; 4282 4283 idx = *valp - 20; 4284 tuning_ctl_set(codec, nid, voice_focus_vals_lookup, idx); 4285 4286 return 1; 4287 } 4288 4289 static int mic_svm_ctl_info(struct snd_kcontrol *kcontrol, 4290 struct snd_ctl_elem_info *uinfo) 4291 { 4292 int chs = get_amp_channels(kcontrol); 4293 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 4294 uinfo->count = chs == 3 ? 2 : 1; 4295 uinfo->value.integer.min = 0; 4296 uinfo->value.integer.max = 100; 4297 uinfo->value.integer.step = 1; 4298 4299 return 0; 4300 } 4301 4302 static int mic_svm_ctl_put(struct snd_kcontrol *kcontrol, 4303 struct snd_ctl_elem_value *ucontrol) 4304 { 4305 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 4306 struct ca0132_spec *spec = codec->spec; 4307 hda_nid_t nid = get_amp_nid(kcontrol); 4308 long *valp = ucontrol->value.integer.value; 4309 int idx; 4310 4311 idx = nid - TUNING_CTL_START_NID; 4312 /* any change? */ 4313 if (spec->cur_ctl_vals[idx] == *valp) 4314 return 0; 4315 4316 spec->cur_ctl_vals[idx] = *valp; 4317 4318 idx = *valp; 4319 tuning_ctl_set(codec, nid, mic_svm_vals_lookup, idx); 4320 4321 return 0; 4322 } 4323 4324 static int equalizer_ctl_info(struct snd_kcontrol *kcontrol, 4325 struct snd_ctl_elem_info *uinfo) 4326 { 4327 int chs = get_amp_channels(kcontrol); 4328 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 4329 uinfo->count = chs == 3 ? 2 : 1; 4330 uinfo->value.integer.min = 0; 4331 uinfo->value.integer.max = 48; 4332 uinfo->value.integer.step = 1; 4333 4334 return 0; 4335 } 4336 4337 static int equalizer_ctl_put(struct snd_kcontrol *kcontrol, 4338 struct snd_ctl_elem_value *ucontrol) 4339 { 4340 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 4341 struct ca0132_spec *spec = codec->spec; 4342 hda_nid_t nid = get_amp_nid(kcontrol); 4343 long *valp = ucontrol->value.integer.value; 4344 int idx; 4345 4346 idx = nid - TUNING_CTL_START_NID; 4347 /* any change? */ 4348 if (spec->cur_ctl_vals[idx] == *valp) 4349 return 0; 4350 4351 spec->cur_ctl_vals[idx] = *valp; 4352 4353 idx = *valp; 4354 tuning_ctl_set(codec, nid, equalizer_vals_lookup, idx); 4355 4356 return 1; 4357 } 4358 4359 static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(voice_focus_db_scale, 2000, 100, 0); 4360 static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(eq_db_scale, -2400, 100, 0); 4361 4362 static int add_tuning_control(struct hda_codec *codec, 4363 hda_nid_t pnid, hda_nid_t nid, 4364 const char *name, int dir) 4365 { 4366 char namestr[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; 4367 int type = dir ? HDA_INPUT : HDA_OUTPUT; 4368 struct snd_kcontrol_new knew = 4369 HDA_CODEC_VOLUME_MONO(namestr, nid, 1, 0, type); 4370 4371 knew.access = SNDRV_CTL_ELEM_ACCESS_READWRITE | 4372 SNDRV_CTL_ELEM_ACCESS_TLV_READ; 4373 knew.tlv.c = 0; 4374 knew.tlv.p = 0; 4375 switch (pnid) { 4376 case VOICE_FOCUS: 4377 knew.info = voice_focus_ctl_info; 4378 knew.get = tuning_ctl_get; 4379 knew.put = voice_focus_ctl_put; 4380 knew.tlv.p = voice_focus_db_scale; 4381 break; 4382 case MIC_SVM: 4383 knew.info = mic_svm_ctl_info; 4384 knew.get = tuning_ctl_get; 4385 knew.put = mic_svm_ctl_put; 4386 break; 4387 case EQUALIZER: 4388 knew.info = equalizer_ctl_info; 4389 knew.get = tuning_ctl_get; 4390 knew.put = equalizer_ctl_put; 4391 knew.tlv.p = eq_db_scale; 4392 break; 4393 default: 4394 return 0; 4395 } 4396 knew.private_value = 4397 HDA_COMPOSE_AMP_VAL(nid, 1, 0, type); 4398 sprintf(namestr, "%s %s Volume", name, dirstr[dir]); 4399 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); 4400 } 4401 4402 static int add_tuning_ctls(struct hda_codec *codec) 4403 { 4404 int i; 4405 int err; 4406 4407 for (i = 0; i < TUNING_CTLS_COUNT; i++) { 4408 err = add_tuning_control(codec, 4409 ca0132_tuning_ctls[i].parent_nid, 4410 ca0132_tuning_ctls[i].nid, 4411 ca0132_tuning_ctls[i].name, 4412 ca0132_tuning_ctls[i].direct); 4413 if (err < 0) 4414 return err; 4415 } 4416 4417 return 0; 4418 } 4419 4420 static void ca0132_init_tuning_defaults(struct hda_codec *codec) 4421 { 4422 struct ca0132_spec *spec = codec->spec; 4423 int i; 4424 4425 /* Wedge Angle defaults to 30. 10 below is 30 - 20. 20 is min. */ 4426 spec->cur_ctl_vals[WEDGE_ANGLE - TUNING_CTL_START_NID] = 10; 4427 /* SVM level defaults to 0.74. */ 4428 spec->cur_ctl_vals[SVM_LEVEL - TUNING_CTL_START_NID] = 74; 4429 4430 /* EQ defaults to 0dB. */ 4431 for (i = 2; i < TUNING_CTLS_COUNT; i++) 4432 spec->cur_ctl_vals[i] = 24; 4433 } 4434 #endif /*ENABLE_TUNING_CONTROLS*/ 4435 4436 /* 4437 * Select the active output. 4438 * If autodetect is enabled, output will be selected based on jack detection. 4439 * If jack inserted, headphone will be selected, else built-in speakers 4440 * If autodetect is disabled, output will be selected based on selection. 4441 */ 4442 static int ca0132_select_out(struct hda_codec *codec) 4443 { 4444 struct ca0132_spec *spec = codec->spec; 4445 unsigned int pin_ctl; 4446 int jack_present; 4447 int auto_jack; 4448 unsigned int tmp; 4449 int err; 4450 4451 codec_dbg(codec, "ca0132_select_out\n"); 4452 4453 snd_hda_power_up_pm(codec); 4454 4455 auto_jack = spec->vnode_lswitch[VNID_HP_ASEL - VNODE_START_NID]; 4456 4457 if (auto_jack) 4458 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp); 4459 else 4460 jack_present = 4461 spec->vnode_lswitch[VNID_HP_SEL - VNODE_START_NID]; 4462 4463 if (jack_present) 4464 spec->cur_out_type = HEADPHONE_OUT; 4465 else 4466 spec->cur_out_type = SPEAKER_OUT; 4467 4468 if (spec->cur_out_type == SPEAKER_OUT) { 4469 codec_dbg(codec, "ca0132_select_out speaker\n"); 4470 /*speaker out config*/ 4471 tmp = FLOAT_ONE; 4472 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); 4473 if (err < 0) 4474 goto exit; 4475 /*enable speaker EQ*/ 4476 tmp = FLOAT_ONE; 4477 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); 4478 if (err < 0) 4479 goto exit; 4480 4481 /* Setup EAPD */ 4482 snd_hda_codec_write(codec, spec->out_pins[1], 0, 4483 VENDOR_CHIPIO_EAPD_SEL_SET, 0x02); 4484 snd_hda_codec_write(codec, spec->out_pins[0], 0, 4485 AC_VERB_SET_EAPD_BTLENABLE, 0x00); 4486 snd_hda_codec_write(codec, spec->out_pins[0], 0, 4487 VENDOR_CHIPIO_EAPD_SEL_SET, 0x00); 4488 snd_hda_codec_write(codec, spec->out_pins[0], 0, 4489 AC_VERB_SET_EAPD_BTLENABLE, 0x02); 4490 4491 /* disable headphone node */ 4492 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, 4493 AC_VERB_GET_PIN_WIDGET_CONTROL, 0); 4494 snd_hda_set_pin_ctl(codec, spec->out_pins[1], 4495 pin_ctl & ~PIN_HP); 4496 /* enable speaker node */ 4497 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, 4498 AC_VERB_GET_PIN_WIDGET_CONTROL, 0); 4499 snd_hda_set_pin_ctl(codec, spec->out_pins[0], 4500 pin_ctl | PIN_OUT); 4501 } else { 4502 codec_dbg(codec, "ca0132_select_out hp\n"); 4503 /*headphone out config*/ 4504 tmp = FLOAT_ZERO; 4505 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); 4506 if (err < 0) 4507 goto exit; 4508 /*disable speaker EQ*/ 4509 tmp = FLOAT_ZERO; 4510 err = dspio_set_uint_param(codec, 0x8f, 0x00, tmp); 4511 if (err < 0) 4512 goto exit; 4513 4514 /* Setup EAPD */ 4515 snd_hda_codec_write(codec, spec->out_pins[0], 0, 4516 VENDOR_CHIPIO_EAPD_SEL_SET, 0x00); 4517 snd_hda_codec_write(codec, spec->out_pins[0], 0, 4518 AC_VERB_SET_EAPD_BTLENABLE, 0x00); 4519 snd_hda_codec_write(codec, spec->out_pins[1], 0, 4520 VENDOR_CHIPIO_EAPD_SEL_SET, 0x02); 4521 snd_hda_codec_write(codec, spec->out_pins[0], 0, 4522 AC_VERB_SET_EAPD_BTLENABLE, 0x02); 4523 4524 /* disable speaker*/ 4525 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0, 4526 AC_VERB_GET_PIN_WIDGET_CONTROL, 0); 4527 snd_hda_set_pin_ctl(codec, spec->out_pins[0], 4528 pin_ctl & ~PIN_HP); 4529 /* enable headphone*/ 4530 pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0, 4531 AC_VERB_GET_PIN_WIDGET_CONTROL, 0); 4532 snd_hda_set_pin_ctl(codec, spec->out_pins[1], 4533 pin_ctl | PIN_HP); 4534 } 4535 4536 exit: 4537 snd_hda_power_down_pm(codec); 4538 4539 return err < 0 ? err : 0; 4540 } 4541 4542 static int ae5_headphone_gain_set(struct hda_codec *codec, long val); 4543 static int zxr_headphone_gain_set(struct hda_codec *codec, long val); 4544 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val); 4545 4546 static void ae5_mmio_select_out(struct hda_codec *codec) 4547 { 4548 struct ca0132_spec *spec = codec->spec; 4549 const struct ae_ca0113_output_set *out_cmds; 4550 unsigned int i; 4551 4552 if (ca0132_quirk(spec) == QUIRK_AE5) 4553 out_cmds = &ae5_ca0113_output_presets; 4554 else 4555 out_cmds = &ae7_ca0113_output_presets; 4556 4557 for (i = 0; i < AE_CA0113_OUT_SET_COMMANDS; i++) 4558 ca0113_mmio_command_set(codec, out_cmds->group[i], 4559 out_cmds->target[i], 4560 out_cmds->vals[spec->cur_out_type][i]); 4561 } 4562 4563 static int ca0132_alt_set_full_range_speaker(struct hda_codec *codec) 4564 { 4565 struct ca0132_spec *spec = codec->spec; 4566 int quirk = ca0132_quirk(spec); 4567 unsigned int tmp; 4568 int err; 4569 4570 /* 2.0/4.0 setup has no LFE channel, so setting full-range does nothing. */ 4571 if (spec->channel_cfg_val == SPEAKER_CHANNELS_4_0 4572 || spec->channel_cfg_val == SPEAKER_CHANNELS_2_0) 4573 return 0; 4574 4575 /* Set front L/R full range. Zero for full-range, one for redirection. */ 4576 tmp = spec->speaker_range_val[0] ? FLOAT_ZERO : FLOAT_ONE; 4577 err = dspio_set_uint_param(codec, 0x96, 4578 SPEAKER_FULL_RANGE_FRONT_L_R, tmp); 4579 if (err < 0) 4580 return err; 4581 4582 /* When setting full-range rear, both rear and center/lfe are set. */ 4583 tmp = spec->speaker_range_val[1] ? FLOAT_ZERO : FLOAT_ONE; 4584 err = dspio_set_uint_param(codec, 0x96, 4585 SPEAKER_FULL_RANGE_CENTER_LFE, tmp); 4586 if (err < 0) 4587 return err; 4588 4589 err = dspio_set_uint_param(codec, 0x96, 4590 SPEAKER_FULL_RANGE_REAR_L_R, tmp); 4591 if (err < 0) 4592 return err; 4593 4594 /* 4595 * Only the AE series cards set this value when setting full-range, 4596 * and it's always 1.0f. 4597 */ 4598 if (quirk == QUIRK_AE5 || quirk == QUIRK_AE7) { 4599 err = dspio_set_uint_param(codec, 0x96, 4600 SPEAKER_FULL_RANGE_SURROUND_L_R, FLOAT_ONE); 4601 if (err < 0) 4602 return err; 4603 } 4604 4605 return 0; 4606 } 4607 4608 static int ca0132_alt_surround_set_bass_redirection(struct hda_codec *codec, 4609 bool val) 4610 { 4611 struct ca0132_spec *spec = codec->spec; 4612 unsigned int tmp; 4613 int err; 4614 4615 if (val && spec->channel_cfg_val != SPEAKER_CHANNELS_4_0 && 4616 spec->channel_cfg_val != SPEAKER_CHANNELS_2_0) 4617 tmp = FLOAT_ONE; 4618 else 4619 tmp = FLOAT_ZERO; 4620 4621 err = dspio_set_uint_param(codec, 0x96, SPEAKER_BASS_REDIRECT, tmp); 4622 if (err < 0) 4623 return err; 4624 4625 /* If it is enabled, make sure to set the crossover frequency. */ 4626 if (tmp) { 4627 tmp = float_xbass_xover_lookup[spec->xbass_xover_freq]; 4628 err = dspio_set_uint_param(codec, 0x96, 4629 SPEAKER_BASS_REDIRECT_XOVER_FREQ, tmp); 4630 if (err < 0) 4631 return err; 4632 } 4633 4634 return 0; 4635 } 4636 4637 /* 4638 * These are the commands needed to setup output on each of the different card 4639 * types. 4640 */ 4641 static void ca0132_alt_select_out_get_quirk_data(struct hda_codec *codec, 4642 const struct ca0132_alt_out_set_quirk_data **quirk_data) 4643 { 4644 struct ca0132_spec *spec = codec->spec; 4645 int quirk = ca0132_quirk(spec); 4646 unsigned int i; 4647 4648 *quirk_data = NULL; 4649 for (i = 0; i < ARRAY_SIZE(quirk_out_set_data); i++) { 4650 if (quirk_out_set_data[i].quirk_id == quirk) { 4651 *quirk_data = &quirk_out_set_data[i]; 4652 return; 4653 } 4654 } 4655 } 4656 4657 static int ca0132_alt_select_out_quirk_set(struct hda_codec *codec) 4658 { 4659 const struct ca0132_alt_out_set_quirk_data *quirk_data; 4660 const struct ca0132_alt_out_set_info *out_info; 4661 struct ca0132_spec *spec = codec->spec; 4662 unsigned int i, gpio_data; 4663 int err; 4664 4665 ca0132_alt_select_out_get_quirk_data(codec, &quirk_data); 4666 if (!quirk_data) 4667 return 0; 4668 4669 out_info = &quirk_data->out_set_info[spec->cur_out_type]; 4670 if (quirk_data->is_ae_series) 4671 ae5_mmio_select_out(codec); 4672 4673 if (out_info->has_hda_gpio) { 4674 gpio_data = snd_hda_codec_read(codec, codec->core.afg, 0, 4675 AC_VERB_GET_GPIO_DATA, 0); 4676 4677 if (out_info->hda_gpio_set) 4678 gpio_data |= (1 << out_info->hda_gpio_pin); 4679 else 4680 gpio_data &= ~(1 << out_info->hda_gpio_pin); 4681 4682 snd_hda_codec_write(codec, codec->core.afg, 0, 4683 AC_VERB_SET_GPIO_DATA, gpio_data); 4684 } 4685 4686 if (out_info->mmio_gpio_count) { 4687 for (i = 0; i < out_info->mmio_gpio_count; i++) { 4688 ca0113_mmio_gpio_set(codec, out_info->mmio_gpio_pin[i], 4689 out_info->mmio_gpio_set[i]); 4690 } 4691 } 4692 4693 if (out_info->scp_cmds_count) { 4694 for (i = 0; i < out_info->scp_cmds_count; i++) { 4695 err = dspio_set_uint_param(codec, 4696 out_info->scp_cmd_mid[i], 4697 out_info->scp_cmd_req[i], 4698 out_info->scp_cmd_val[i]); 4699 if (err < 0) 4700 return err; 4701 } 4702 } 4703 4704 chipio_set_control_param(codec, 0x0d, out_info->dac2port); 4705 4706 if (out_info->has_chipio_write) { 4707 chipio_write(codec, out_info->chipio_write_addr, 4708 out_info->chipio_write_data); 4709 } 4710 4711 if (quirk_data->has_headphone_gain) { 4712 if (spec->cur_out_type != HEADPHONE_OUT) { 4713 if (quirk_data->is_ae_series) 4714 ae5_headphone_gain_set(codec, 2); 4715 else 4716 zxr_headphone_gain_set(codec, 0); 4717 } else { 4718 if (quirk_data->is_ae_series) 4719 ae5_headphone_gain_set(codec, 4720 spec->ae5_headphone_gain_val); 4721 else 4722 zxr_headphone_gain_set(codec, 4723 spec->zxr_gain_set); 4724 } 4725 } 4726 4727 return 0; 4728 } 4729 4730 static void ca0132_set_out_node_pincfg(struct hda_codec *codec, hda_nid_t nid, 4731 bool out_enable, bool hp_enable) 4732 { 4733 unsigned int pin_ctl; 4734 4735 pin_ctl = snd_hda_codec_read(codec, nid, 0, 4736 AC_VERB_GET_PIN_WIDGET_CONTROL, 0); 4737 4738 pin_ctl = hp_enable ? pin_ctl | PIN_HP_AMP : pin_ctl & ~PIN_HP_AMP; 4739 pin_ctl = out_enable ? pin_ctl | PIN_OUT : pin_ctl & ~PIN_OUT; 4740 snd_hda_set_pin_ctl(codec, nid, pin_ctl); 4741 } 4742 4743 /* 4744 * This function behaves similarly to the ca0132_select_out funciton above, 4745 * except with a few differences. It adds the ability to select the current 4746 * output with an enumerated control "output source" if the auto detect 4747 * mute switch is set to off. If the auto detect mute switch is enabled, it 4748 * will detect either headphone or lineout(SPEAKER_OUT) from jack detection. 4749 * It also adds the ability to auto-detect the front headphone port. 4750 */ 4751 static int ca0132_alt_select_out(struct hda_codec *codec) 4752 { 4753 struct ca0132_spec *spec = codec->spec; 4754 unsigned int tmp, outfx_set; 4755 int jack_present; 4756 int auto_jack; 4757 int err; 4758 /* Default Headphone is rear headphone */ 4759 hda_nid_t headphone_nid = spec->out_pins[1]; 4760 4761 codec_dbg(codec, "%s\n", __func__); 4762 4763 snd_hda_power_up_pm(codec); 4764 4765 auto_jack = spec->vnode_lswitch[VNID_HP_ASEL - VNODE_START_NID]; 4766 4767 /* 4768 * If headphone rear or front is plugged in, set to headphone. 4769 * If neither is plugged in, set to rear line out. Only if 4770 * hp/speaker auto detect is enabled. 4771 */ 4772 if (auto_jack) { 4773 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_hp) || 4774 snd_hda_jack_detect(codec, spec->unsol_tag_front_hp); 4775 4776 if (jack_present) 4777 spec->cur_out_type = HEADPHONE_OUT; 4778 else 4779 spec->cur_out_type = SPEAKER_OUT; 4780 } else 4781 spec->cur_out_type = spec->out_enum_val; 4782 4783 outfx_set = spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID]; 4784 4785 /* Begin DSP output switch, mute DSP volume. */ 4786 err = dspio_set_uint_param(codec, 0x96, SPEAKER_TUNING_MUTE, FLOAT_ONE); 4787 if (err < 0) 4788 goto exit; 4789 4790 if (ca0132_alt_select_out_quirk_set(codec) < 0) 4791 goto exit; 4792 4793 switch (spec->cur_out_type) { 4794 case SPEAKER_OUT: 4795 codec_dbg(codec, "%s speaker\n", __func__); 4796 4797 /* Enable EAPD */ 4798 snd_hda_codec_write(codec, spec->out_pins[0], 0, 4799 AC_VERB_SET_EAPD_BTLENABLE, 0x01); 4800 4801 /* Disable headphone node. */ 4802 ca0132_set_out_node_pincfg(codec, spec->out_pins[1], 0, 0); 4803 /* Set front L-R to output. */ 4804 ca0132_set_out_node_pincfg(codec, spec->out_pins[0], 1, 0); 4805 /* Set Center/LFE to output. */ 4806 ca0132_set_out_node_pincfg(codec, spec->out_pins[2], 1, 0); 4807 /* Set rear surround to output. */ 4808 ca0132_set_out_node_pincfg(codec, spec->out_pins[3], 1, 0); 4809 4810 /* 4811 * Without PlayEnhancement being enabled, if we've got a 2.0 4812 * setup, set it to floating point eight to disable any DSP 4813 * processing effects. 4814 */ 4815 if (!outfx_set && spec->channel_cfg_val == SPEAKER_CHANNELS_2_0) 4816 tmp = FLOAT_EIGHT; 4817 else 4818 tmp = speaker_channel_cfgs[spec->channel_cfg_val].val; 4819 4820 err = dspio_set_uint_param(codec, 0x80, 0x04, tmp); 4821 if (err < 0) 4822 goto exit; 4823 4824 break; 4825 case HEADPHONE_OUT: 4826 codec_dbg(codec, "%s hp\n", __func__); 4827 snd_hda_codec_write(codec, spec->out_pins[0], 0, 4828 AC_VERB_SET_EAPD_BTLENABLE, 0x00); 4829 4830 /* Disable all speaker nodes. */ 4831 ca0132_set_out_node_pincfg(codec, spec->out_pins[0], 0, 0); 4832 ca0132_set_out_node_pincfg(codec, spec->out_pins[2], 0, 0); 4833 ca0132_set_out_node_pincfg(codec, spec->out_pins[3], 0, 0); 4834 4835 /* enable headphone, either front or rear */ 4836 if (snd_hda_jack_detect(codec, spec->unsol_tag_front_hp)) 4837 headphone_nid = spec->out_pins[2]; 4838 else if (snd_hda_jack_detect(codec, spec->unsol_tag_hp)) 4839 headphone_nid = spec->out_pins[1]; 4840 4841 ca0132_set_out_node_pincfg(codec, headphone_nid, 1, 1); 4842 4843 if (outfx_set) 4844 err = dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ONE); 4845 else 4846 err = dspio_set_uint_param(codec, 0x80, 0x04, FLOAT_ZERO); 4847 4848 if (err < 0) 4849 goto exit; 4850 break; 4851 } 4852 /* 4853 * If output effects are enabled, set the X-Bass effect value again to 4854 * make sure that it's properly enabled/disabled for speaker 4855 * configurations with an LFE channel. 4856 */ 4857 if (outfx_set) 4858 ca0132_effects_set(codec, X_BASS, 4859 spec->effects_switch[X_BASS - EFFECT_START_NID]); 4860 4861 /* Set speaker EQ bypass attenuation to 0. */ 4862 err = dspio_set_uint_param(codec, 0x8f, 0x01, FLOAT_ZERO); 4863 if (err < 0) 4864 goto exit; 4865 4866 /* 4867 * Although unused on all cards but the AE series, this is always set 4868 * to zero when setting the output. 4869 */ 4870 err = dspio_set_uint_param(codec, 0x96, 4871 SPEAKER_TUNING_USE_SPEAKER_EQ, FLOAT_ZERO); 4872 if (err < 0) 4873 goto exit; 4874 4875 if (spec->cur_out_type == SPEAKER_OUT) 4876 err = ca0132_alt_surround_set_bass_redirection(codec, 4877 spec->bass_redirection_val); 4878 else 4879 err = ca0132_alt_surround_set_bass_redirection(codec, 0); 4880 4881 /* Unmute DSP now that we're done with output selection. */ 4882 err = dspio_set_uint_param(codec, 0x96, 4883 SPEAKER_TUNING_MUTE, FLOAT_ZERO); 4884 if (err < 0) 4885 goto exit; 4886 4887 if (spec->cur_out_type == SPEAKER_OUT) { 4888 err = ca0132_alt_set_full_range_speaker(codec); 4889 if (err < 0) 4890 goto exit; 4891 } 4892 4893 exit: 4894 snd_hda_power_down_pm(codec); 4895 4896 return err < 0 ? err : 0; 4897 } 4898 4899 static void ca0132_unsol_hp_delayed(struct work_struct *work) 4900 { 4901 struct ca0132_spec *spec = container_of( 4902 to_delayed_work(work), struct ca0132_spec, unsol_hp_work); 4903 struct hda_jack_tbl *jack; 4904 4905 if (ca0132_use_alt_functions(spec)) 4906 ca0132_alt_select_out(spec->codec); 4907 else 4908 ca0132_select_out(spec->codec); 4909 4910 jack = snd_hda_jack_tbl_get(spec->codec, spec->unsol_tag_hp); 4911 if (jack) { 4912 jack->block_report = 0; 4913 snd_hda_jack_report_sync(spec->codec); 4914 } 4915 } 4916 4917 static void ca0132_set_dmic(struct hda_codec *codec, int enable); 4918 static int ca0132_mic_boost_set(struct hda_codec *codec, long val); 4919 static void resume_mic1(struct hda_codec *codec, unsigned int oldval); 4920 static int stop_mic1(struct hda_codec *codec); 4921 static int ca0132_cvoice_switch_set(struct hda_codec *codec); 4922 static int ca0132_alt_mic_boost_set(struct hda_codec *codec, long val); 4923 4924 /* 4925 * Select the active VIP source 4926 */ 4927 static int ca0132_set_vipsource(struct hda_codec *codec, int val) 4928 { 4929 struct ca0132_spec *spec = codec->spec; 4930 unsigned int tmp; 4931 4932 if (spec->dsp_state != DSP_DOWNLOADED) 4933 return 0; 4934 4935 /* if CrystalVoice if off, vipsource should be 0 */ 4936 if (!spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID] || 4937 (val == 0)) { 4938 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); 4939 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); 4940 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); 4941 if (spec->cur_mic_type == DIGITAL_MIC) 4942 tmp = FLOAT_TWO; 4943 else 4944 tmp = FLOAT_ONE; 4945 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 4946 tmp = FLOAT_ZERO; 4947 dspio_set_uint_param(codec, 0x80, 0x05, tmp); 4948 } else { 4949 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); 4950 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); 4951 if (spec->cur_mic_type == DIGITAL_MIC) 4952 tmp = FLOAT_TWO; 4953 else 4954 tmp = FLOAT_ONE; 4955 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 4956 tmp = FLOAT_ONE; 4957 dspio_set_uint_param(codec, 0x80, 0x05, tmp); 4958 msleep(20); 4959 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); 4960 } 4961 4962 return 1; 4963 } 4964 4965 static int ca0132_alt_set_vipsource(struct hda_codec *codec, int val) 4966 { 4967 struct ca0132_spec *spec = codec->spec; 4968 unsigned int tmp; 4969 4970 if (spec->dsp_state != DSP_DOWNLOADED) 4971 return 0; 4972 4973 codec_dbg(codec, "%s\n", __func__); 4974 4975 chipio_set_stream_control(codec, 0x03, 0); 4976 chipio_set_stream_control(codec, 0x04, 0); 4977 4978 /* if CrystalVoice is off, vipsource should be 0 */ 4979 if (!spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID] || 4980 (val == 0) || spec->in_enum_val == REAR_LINE_IN) { 4981 codec_dbg(codec, "%s: off.", __func__); 4982 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); 4983 4984 tmp = FLOAT_ZERO; 4985 dspio_set_uint_param(codec, 0x80, 0x05, tmp); 4986 4987 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); 4988 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); 4989 if (ca0132_quirk(spec) == QUIRK_R3DI) 4990 chipio_set_conn_rate(codec, 0x0F, SR_96_000); 4991 4992 4993 if (spec->in_enum_val == REAR_LINE_IN) 4994 tmp = FLOAT_ZERO; 4995 else { 4996 if (ca0132_quirk(spec) == QUIRK_SBZ) 4997 tmp = FLOAT_THREE; 4998 else 4999 tmp = FLOAT_ONE; 5000 } 5001 5002 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 5003 5004 } else { 5005 codec_dbg(codec, "%s: on.", __func__); 5006 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000); 5007 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000); 5008 if (ca0132_quirk(spec) == QUIRK_R3DI) 5009 chipio_set_conn_rate(codec, 0x0F, SR_16_000); 5010 5011 if (spec->effects_switch[VOICE_FOCUS - EFFECT_START_NID]) 5012 tmp = FLOAT_TWO; 5013 else 5014 tmp = FLOAT_ONE; 5015 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 5016 5017 tmp = FLOAT_ONE; 5018 dspio_set_uint_param(codec, 0x80, 0x05, tmp); 5019 5020 msleep(20); 5021 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, val); 5022 } 5023 5024 chipio_set_stream_control(codec, 0x03, 1); 5025 chipio_set_stream_control(codec, 0x04, 1); 5026 5027 return 1; 5028 } 5029 5030 /* 5031 * Select the active microphone. 5032 * If autodetect is enabled, mic will be selected based on jack detection. 5033 * If jack inserted, ext.mic will be selected, else built-in mic 5034 * If autodetect is disabled, mic will be selected based on selection. 5035 */ 5036 static int ca0132_select_mic(struct hda_codec *codec) 5037 { 5038 struct ca0132_spec *spec = codec->spec; 5039 int jack_present; 5040 int auto_jack; 5041 5042 codec_dbg(codec, "ca0132_select_mic\n"); 5043 5044 snd_hda_power_up_pm(codec); 5045 5046 auto_jack = spec->vnode_lswitch[VNID_AMIC1_ASEL - VNODE_START_NID]; 5047 5048 if (auto_jack) 5049 jack_present = snd_hda_jack_detect(codec, spec->unsol_tag_amic1); 5050 else 5051 jack_present = 5052 spec->vnode_lswitch[VNID_AMIC1_SEL - VNODE_START_NID]; 5053 5054 if (jack_present) 5055 spec->cur_mic_type = LINE_MIC_IN; 5056 else 5057 spec->cur_mic_type = DIGITAL_MIC; 5058 5059 if (spec->cur_mic_type == DIGITAL_MIC) { 5060 /* enable digital Mic */ 5061 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_32_000); 5062 ca0132_set_dmic(codec, 1); 5063 ca0132_mic_boost_set(codec, 0); 5064 /* set voice focus */ 5065 ca0132_effects_set(codec, VOICE_FOCUS, 5066 spec->effects_switch 5067 [VOICE_FOCUS - EFFECT_START_NID]); 5068 } else { 5069 /* disable digital Mic */ 5070 chipio_set_conn_rate(codec, MEM_CONNID_DMIC, SR_96_000); 5071 ca0132_set_dmic(codec, 0); 5072 ca0132_mic_boost_set(codec, spec->cur_mic_boost); 5073 /* disable voice focus */ 5074 ca0132_effects_set(codec, VOICE_FOCUS, 0); 5075 } 5076 5077 snd_hda_power_down_pm(codec); 5078 5079 return 0; 5080 } 5081 5082 /* 5083 * Select the active input. 5084 * Mic detection isn't used, because it's kind of pointless on the SBZ. 5085 * The front mic has no jack-detection, so the only way to switch to it 5086 * is to do it manually in alsamixer. 5087 */ 5088 static int ca0132_alt_select_in(struct hda_codec *codec) 5089 { 5090 struct ca0132_spec *spec = codec->spec; 5091 unsigned int tmp; 5092 5093 codec_dbg(codec, "%s\n", __func__); 5094 5095 snd_hda_power_up_pm(codec); 5096 5097 chipio_set_stream_control(codec, 0x03, 0); 5098 chipio_set_stream_control(codec, 0x04, 0); 5099 5100 spec->cur_mic_type = spec->in_enum_val; 5101 5102 switch (spec->cur_mic_type) { 5103 case REAR_MIC: 5104 switch (ca0132_quirk(spec)) { 5105 case QUIRK_SBZ: 5106 case QUIRK_R3D: 5107 ca0113_mmio_gpio_set(codec, 0, false); 5108 tmp = FLOAT_THREE; 5109 break; 5110 case QUIRK_ZXR: 5111 tmp = FLOAT_THREE; 5112 break; 5113 case QUIRK_R3DI: 5114 r3di_gpio_mic_set(codec, R3DI_REAR_MIC); 5115 tmp = FLOAT_ONE; 5116 break; 5117 case QUIRK_AE5: 5118 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); 5119 tmp = FLOAT_THREE; 5120 break; 5121 case QUIRK_AE7: 5122 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); 5123 tmp = FLOAT_THREE; 5124 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, 5125 SR_96_000); 5126 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, 5127 SR_96_000); 5128 dspio_set_uint_param(codec, 0x80, 0x01, FLOAT_ZERO); 5129 break; 5130 default: 5131 tmp = FLOAT_ONE; 5132 break; 5133 } 5134 5135 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); 5136 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); 5137 if (ca0132_quirk(spec) == QUIRK_R3DI) 5138 chipio_set_conn_rate(codec, 0x0F, SR_96_000); 5139 5140 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 5141 5142 chipio_set_stream_control(codec, 0x03, 1); 5143 chipio_set_stream_control(codec, 0x04, 1); 5144 switch (ca0132_quirk(spec)) { 5145 case QUIRK_SBZ: 5146 chipio_write(codec, 0x18B098, 0x0000000C); 5147 chipio_write(codec, 0x18B09C, 0x0000000C); 5148 break; 5149 case QUIRK_ZXR: 5150 chipio_write(codec, 0x18B098, 0x0000000C); 5151 chipio_write(codec, 0x18B09C, 0x000000CC); 5152 break; 5153 case QUIRK_AE5: 5154 chipio_write(codec, 0x18B098, 0x0000000C); 5155 chipio_write(codec, 0x18B09C, 0x0000004C); 5156 break; 5157 default: 5158 break; 5159 } 5160 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); 5161 break; 5162 case REAR_LINE_IN: 5163 ca0132_mic_boost_set(codec, 0); 5164 switch (ca0132_quirk(spec)) { 5165 case QUIRK_SBZ: 5166 case QUIRK_R3D: 5167 ca0113_mmio_gpio_set(codec, 0, false); 5168 break; 5169 case QUIRK_R3DI: 5170 r3di_gpio_mic_set(codec, R3DI_REAR_MIC); 5171 break; 5172 case QUIRK_AE5: 5173 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); 5174 break; 5175 case QUIRK_AE7: 5176 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x3f); 5177 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, 5178 SR_96_000); 5179 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, 5180 SR_96_000); 5181 dspio_set_uint_param(codec, 0x80, 0x01, FLOAT_ZERO); 5182 break; 5183 default: 5184 break; 5185 } 5186 5187 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); 5188 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); 5189 if (ca0132_quirk(spec) == QUIRK_R3DI) 5190 chipio_set_conn_rate(codec, 0x0F, SR_96_000); 5191 5192 if (ca0132_quirk(spec) == QUIRK_AE7) 5193 tmp = FLOAT_THREE; 5194 else 5195 tmp = FLOAT_ZERO; 5196 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 5197 5198 switch (ca0132_quirk(spec)) { 5199 case QUIRK_SBZ: 5200 case QUIRK_AE5: 5201 chipio_write(codec, 0x18B098, 0x00000000); 5202 chipio_write(codec, 0x18B09C, 0x00000000); 5203 break; 5204 default: 5205 break; 5206 } 5207 chipio_set_stream_control(codec, 0x03, 1); 5208 chipio_set_stream_control(codec, 0x04, 1); 5209 break; 5210 case FRONT_MIC: 5211 switch (ca0132_quirk(spec)) { 5212 case QUIRK_SBZ: 5213 case QUIRK_R3D: 5214 ca0113_mmio_gpio_set(codec, 0, true); 5215 ca0113_mmio_gpio_set(codec, 5, false); 5216 tmp = FLOAT_THREE; 5217 break; 5218 case QUIRK_R3DI: 5219 r3di_gpio_mic_set(codec, R3DI_FRONT_MIC); 5220 tmp = FLOAT_ONE; 5221 break; 5222 case QUIRK_AE5: 5223 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x3f); 5224 tmp = FLOAT_THREE; 5225 break; 5226 default: 5227 tmp = FLOAT_ONE; 5228 break; 5229 } 5230 5231 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); 5232 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); 5233 if (ca0132_quirk(spec) == QUIRK_R3DI) 5234 chipio_set_conn_rate(codec, 0x0F, SR_96_000); 5235 5236 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 5237 5238 chipio_set_stream_control(codec, 0x03, 1); 5239 chipio_set_stream_control(codec, 0x04, 1); 5240 5241 switch (ca0132_quirk(spec)) { 5242 case QUIRK_SBZ: 5243 chipio_write(codec, 0x18B098, 0x0000000C); 5244 chipio_write(codec, 0x18B09C, 0x000000CC); 5245 break; 5246 case QUIRK_AE5: 5247 chipio_write(codec, 0x18B098, 0x0000000C); 5248 chipio_write(codec, 0x18B09C, 0x0000004C); 5249 break; 5250 default: 5251 break; 5252 } 5253 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); 5254 break; 5255 } 5256 ca0132_cvoice_switch_set(codec); 5257 5258 snd_hda_power_down_pm(codec); 5259 return 0; 5260 } 5261 5262 /* 5263 * Check if VNODE settings take effect immediately. 5264 */ 5265 static bool ca0132_is_vnode_effective(struct hda_codec *codec, 5266 hda_nid_t vnid, 5267 hda_nid_t *shared_nid) 5268 { 5269 struct ca0132_spec *spec = codec->spec; 5270 hda_nid_t nid; 5271 5272 switch (vnid) { 5273 case VNID_SPK: 5274 nid = spec->shared_out_nid; 5275 break; 5276 case VNID_MIC: 5277 nid = spec->shared_mic_nid; 5278 break; 5279 default: 5280 return false; 5281 } 5282 5283 if (shared_nid) 5284 *shared_nid = nid; 5285 5286 return true; 5287 } 5288 5289 /* 5290 * The following functions are control change helpers. 5291 * They return 0 if no changed. Return 1 if changed. 5292 */ 5293 static int ca0132_voicefx_set(struct hda_codec *codec, int enable) 5294 { 5295 struct ca0132_spec *spec = codec->spec; 5296 unsigned int tmp; 5297 5298 /* based on CrystalVoice state to enable VoiceFX. */ 5299 if (enable) { 5300 tmp = spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID] ? 5301 FLOAT_ONE : FLOAT_ZERO; 5302 } else { 5303 tmp = FLOAT_ZERO; 5304 } 5305 5306 dspio_set_uint_param(codec, ca0132_voicefx.mid, 5307 ca0132_voicefx.reqs[0], tmp); 5308 5309 return 1; 5310 } 5311 5312 /* 5313 * Set the effects parameters 5314 */ 5315 static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val) 5316 { 5317 struct ca0132_spec *spec = codec->spec; 5318 unsigned int on, tmp, channel_cfg; 5319 int num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT; 5320 int err = 0; 5321 int idx = nid - EFFECT_START_NID; 5322 5323 if ((idx < 0) || (idx >= num_fx)) 5324 return 0; /* no changed */ 5325 5326 /* for out effect, qualify with PE */ 5327 if ((nid >= OUT_EFFECT_START_NID) && (nid < OUT_EFFECT_END_NID)) { 5328 /* if PE if off, turn off out effects. */ 5329 if (!spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID]) 5330 val = 0; 5331 if (spec->cur_out_type == SPEAKER_OUT && nid == X_BASS) { 5332 channel_cfg = spec->channel_cfg_val; 5333 if (channel_cfg != SPEAKER_CHANNELS_2_0 && 5334 channel_cfg != SPEAKER_CHANNELS_4_0) 5335 val = 0; 5336 } 5337 } 5338 5339 /* for in effect, qualify with CrystalVoice */ 5340 if ((nid >= IN_EFFECT_START_NID) && (nid < IN_EFFECT_END_NID)) { 5341 /* if CrystalVoice if off, turn off in effects. */ 5342 if (!spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID]) 5343 val = 0; 5344 5345 /* Voice Focus applies to 2-ch Mic, Digital Mic */ 5346 if ((nid == VOICE_FOCUS) && (spec->cur_mic_type != DIGITAL_MIC)) 5347 val = 0; 5348 5349 /* If Voice Focus on SBZ, set to two channel. */ 5350 if ((nid == VOICE_FOCUS) && ca0132_use_pci_mmio(spec) 5351 && (spec->cur_mic_type != REAR_LINE_IN)) { 5352 if (spec->effects_switch[CRYSTAL_VOICE - 5353 EFFECT_START_NID]) { 5354 5355 if (spec->effects_switch[VOICE_FOCUS - 5356 EFFECT_START_NID]) { 5357 tmp = FLOAT_TWO; 5358 val = 1; 5359 } else 5360 tmp = FLOAT_ONE; 5361 5362 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 5363 } 5364 } 5365 /* 5366 * For SBZ noise reduction, there's an extra command 5367 * to module ID 0x47. No clue why. 5368 */ 5369 if ((nid == NOISE_REDUCTION) && ca0132_use_pci_mmio(spec) 5370 && (spec->cur_mic_type != REAR_LINE_IN)) { 5371 if (spec->effects_switch[CRYSTAL_VOICE - 5372 EFFECT_START_NID]) { 5373 if (spec->effects_switch[NOISE_REDUCTION - 5374 EFFECT_START_NID]) 5375 tmp = FLOAT_ONE; 5376 else 5377 tmp = FLOAT_ZERO; 5378 } else 5379 tmp = FLOAT_ZERO; 5380 5381 dspio_set_uint_param(codec, 0x47, 0x00, tmp); 5382 } 5383 5384 /* If rear line in disable effects. */ 5385 if (ca0132_use_alt_functions(spec) && 5386 spec->in_enum_val == REAR_LINE_IN) 5387 val = 0; 5388 } 5389 5390 codec_dbg(codec, "ca0132_effect_set: nid=0x%x, val=%ld\n", 5391 nid, val); 5392 5393 on = (val == 0) ? FLOAT_ZERO : FLOAT_ONE; 5394 err = dspio_set_uint_param(codec, ca0132_effects[idx].mid, 5395 ca0132_effects[idx].reqs[0], on); 5396 5397 if (err < 0) 5398 return 0; /* no changed */ 5399 5400 return 1; 5401 } 5402 5403 /* 5404 * Turn on/off Playback Enhancements 5405 */ 5406 static int ca0132_pe_switch_set(struct hda_codec *codec) 5407 { 5408 struct ca0132_spec *spec = codec->spec; 5409 hda_nid_t nid; 5410 int i, ret = 0; 5411 5412 codec_dbg(codec, "ca0132_pe_switch_set: val=%ld\n", 5413 spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID]); 5414 5415 if (ca0132_use_alt_functions(spec)) 5416 ca0132_alt_select_out(codec); 5417 5418 i = OUT_EFFECT_START_NID - EFFECT_START_NID; 5419 nid = OUT_EFFECT_START_NID; 5420 /* PE affects all out effects */ 5421 for (; nid < OUT_EFFECT_END_NID; nid++, i++) 5422 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); 5423 5424 return ret; 5425 } 5426 5427 /* Check if Mic1 is streaming, if so, stop streaming */ 5428 static int stop_mic1(struct hda_codec *codec) 5429 { 5430 struct ca0132_spec *spec = codec->spec; 5431 unsigned int oldval = snd_hda_codec_read(codec, spec->adcs[0], 0, 5432 AC_VERB_GET_CONV, 0); 5433 if (oldval != 0) 5434 snd_hda_codec_write(codec, spec->adcs[0], 0, 5435 AC_VERB_SET_CHANNEL_STREAMID, 5436 0); 5437 return oldval; 5438 } 5439 5440 /* Resume Mic1 streaming if it was stopped. */ 5441 static void resume_mic1(struct hda_codec *codec, unsigned int oldval) 5442 { 5443 struct ca0132_spec *spec = codec->spec; 5444 /* Restore the previous stream and channel */ 5445 if (oldval != 0) 5446 snd_hda_codec_write(codec, spec->adcs[0], 0, 5447 AC_VERB_SET_CHANNEL_STREAMID, 5448 oldval); 5449 } 5450 5451 /* 5452 * Turn on/off CrystalVoice 5453 */ 5454 static int ca0132_cvoice_switch_set(struct hda_codec *codec) 5455 { 5456 struct ca0132_spec *spec = codec->spec; 5457 hda_nid_t nid; 5458 int i, ret = 0; 5459 unsigned int oldval; 5460 5461 codec_dbg(codec, "ca0132_cvoice_switch_set: val=%ld\n", 5462 spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID]); 5463 5464 i = IN_EFFECT_START_NID - EFFECT_START_NID; 5465 nid = IN_EFFECT_START_NID; 5466 /* CrystalVoice affects all in effects */ 5467 for (; nid < IN_EFFECT_END_NID; nid++, i++) 5468 ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]); 5469 5470 /* including VoiceFX */ 5471 ret |= ca0132_voicefx_set(codec, (spec->voicefx_val ? 1 : 0)); 5472 5473 /* set correct vipsource */ 5474 oldval = stop_mic1(codec); 5475 if (ca0132_use_alt_functions(spec)) 5476 ret |= ca0132_alt_set_vipsource(codec, 1); 5477 else 5478 ret |= ca0132_set_vipsource(codec, 1); 5479 resume_mic1(codec, oldval); 5480 return ret; 5481 } 5482 5483 static int ca0132_mic_boost_set(struct hda_codec *codec, long val) 5484 { 5485 struct ca0132_spec *spec = codec->spec; 5486 int ret = 0; 5487 5488 if (val) /* on */ 5489 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, 5490 HDA_INPUT, 0, HDA_AMP_VOLMASK, 3); 5491 else /* off */ 5492 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, 5493 HDA_INPUT, 0, HDA_AMP_VOLMASK, 0); 5494 5495 return ret; 5496 } 5497 5498 static int ca0132_alt_mic_boost_set(struct hda_codec *codec, long val) 5499 { 5500 struct ca0132_spec *spec = codec->spec; 5501 int ret = 0; 5502 5503 ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0, 5504 HDA_INPUT, 0, HDA_AMP_VOLMASK, val); 5505 return ret; 5506 } 5507 5508 static int ae5_headphone_gain_set(struct hda_codec *codec, long val) 5509 { 5510 unsigned int i; 5511 5512 for (i = 0; i < 4; i++) 5513 ca0113_mmio_command_set(codec, 0x48, 0x11 + i, 5514 ae5_headphone_gain_presets[val].vals[i]); 5515 return 0; 5516 } 5517 5518 /* 5519 * gpio pin 1 is a relay that switches on/off, apparently setting the headphone 5520 * amplifier to handle a 600 ohm load. 5521 */ 5522 static int zxr_headphone_gain_set(struct hda_codec *codec, long val) 5523 { 5524 ca0113_mmio_gpio_set(codec, 1, val); 5525 5526 return 0; 5527 } 5528 5529 static int ca0132_vnode_switch_set(struct snd_kcontrol *kcontrol, 5530 struct snd_ctl_elem_value *ucontrol) 5531 { 5532 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5533 hda_nid_t nid = get_amp_nid(kcontrol); 5534 hda_nid_t shared_nid = 0; 5535 bool effective; 5536 int ret = 0; 5537 struct ca0132_spec *spec = codec->spec; 5538 int auto_jack; 5539 5540 if (nid == VNID_HP_SEL) { 5541 auto_jack = 5542 spec->vnode_lswitch[VNID_HP_ASEL - VNODE_START_NID]; 5543 if (!auto_jack) { 5544 if (ca0132_use_alt_functions(spec)) 5545 ca0132_alt_select_out(codec); 5546 else 5547 ca0132_select_out(codec); 5548 } 5549 return 1; 5550 } 5551 5552 if (nid == VNID_AMIC1_SEL) { 5553 auto_jack = 5554 spec->vnode_lswitch[VNID_AMIC1_ASEL - VNODE_START_NID]; 5555 if (!auto_jack) 5556 ca0132_select_mic(codec); 5557 return 1; 5558 } 5559 5560 if (nid == VNID_HP_ASEL) { 5561 if (ca0132_use_alt_functions(spec)) 5562 ca0132_alt_select_out(codec); 5563 else 5564 ca0132_select_out(codec); 5565 return 1; 5566 } 5567 5568 if (nid == VNID_AMIC1_ASEL) { 5569 ca0132_select_mic(codec); 5570 return 1; 5571 } 5572 5573 /* if effective conditions, then update hw immediately. */ 5574 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); 5575 if (effective) { 5576 int dir = get_amp_direction(kcontrol); 5577 int ch = get_amp_channels(kcontrol); 5578 unsigned long pval; 5579 5580 mutex_lock(&codec->control_mutex); 5581 pval = kcontrol->private_value; 5582 kcontrol->private_value = HDA_COMPOSE_AMP_VAL(shared_nid, ch, 5583 0, dir); 5584 ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol); 5585 kcontrol->private_value = pval; 5586 mutex_unlock(&codec->control_mutex); 5587 } 5588 5589 return ret; 5590 } 5591 /* End of control change helpers. */ 5592 5593 static void ca0132_alt_bass_redirection_xover_set(struct hda_codec *codec, 5594 long idx) 5595 { 5596 snd_hda_power_up(codec); 5597 5598 dspio_set_param(codec, 0x96, 0x20, SPEAKER_BASS_REDIRECT_XOVER_FREQ, 5599 &(float_xbass_xover_lookup[idx]), sizeof(unsigned int)); 5600 5601 snd_hda_power_down(codec); 5602 } 5603 5604 /* 5605 * Below I've added controls to mess with the effect levels, I've only enabled 5606 * them on the Sound Blaster Z, but they would probably also work on the 5607 * Chromebook. I figured they were probably tuned specifically for it, and left 5608 * out for a reason. 5609 */ 5610 5611 /* Sets DSP effect level from the sliders above the controls */ 5612 5613 static int ca0132_alt_slider_ctl_set(struct hda_codec *codec, hda_nid_t nid, 5614 const unsigned int *lookup, int idx) 5615 { 5616 int i = 0; 5617 unsigned int y; 5618 /* 5619 * For X_BASS, req 2 is actually crossover freq instead of 5620 * effect level 5621 */ 5622 if (nid == X_BASS) 5623 y = 2; 5624 else 5625 y = 1; 5626 5627 snd_hda_power_up(codec); 5628 if (nid == XBASS_XOVER) { 5629 for (i = 0; i < OUT_EFFECTS_COUNT; i++) 5630 if (ca0132_effects[i].nid == X_BASS) 5631 break; 5632 5633 dspio_set_param(codec, ca0132_effects[i].mid, 0x20, 5634 ca0132_effects[i].reqs[1], 5635 &(lookup[idx - 1]), sizeof(unsigned int)); 5636 } else { 5637 /* Find the actual effect structure */ 5638 for (i = 0; i < OUT_EFFECTS_COUNT; i++) 5639 if (nid == ca0132_effects[i].nid) 5640 break; 5641 5642 dspio_set_param(codec, ca0132_effects[i].mid, 0x20, 5643 ca0132_effects[i].reqs[y], 5644 &(lookup[idx]), sizeof(unsigned int)); 5645 } 5646 5647 snd_hda_power_down(codec); 5648 5649 return 0; 5650 } 5651 5652 static int ca0132_alt_xbass_xover_slider_ctl_get(struct snd_kcontrol *kcontrol, 5653 struct snd_ctl_elem_value *ucontrol) 5654 { 5655 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5656 struct ca0132_spec *spec = codec->spec; 5657 long *valp = ucontrol->value.integer.value; 5658 hda_nid_t nid = get_amp_nid(kcontrol); 5659 5660 if (nid == BASS_REDIRECTION_XOVER) 5661 *valp = spec->bass_redirect_xover_freq; 5662 else 5663 *valp = spec->xbass_xover_freq; 5664 5665 return 0; 5666 } 5667 5668 static int ca0132_alt_slider_ctl_get(struct snd_kcontrol *kcontrol, 5669 struct snd_ctl_elem_value *ucontrol) 5670 { 5671 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5672 struct ca0132_spec *spec = codec->spec; 5673 hda_nid_t nid = get_amp_nid(kcontrol); 5674 long *valp = ucontrol->value.integer.value; 5675 int idx = nid - OUT_EFFECT_START_NID; 5676 5677 *valp = spec->fx_ctl_val[idx]; 5678 return 0; 5679 } 5680 5681 /* 5682 * The X-bass crossover starts at 10hz, so the min is 1. The 5683 * frequency is set in multiples of 10. 5684 */ 5685 static int ca0132_alt_xbass_xover_slider_info(struct snd_kcontrol *kcontrol, 5686 struct snd_ctl_elem_info *uinfo) 5687 { 5688 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 5689 uinfo->count = 1; 5690 uinfo->value.integer.min = 1; 5691 uinfo->value.integer.max = 100; 5692 uinfo->value.integer.step = 1; 5693 5694 return 0; 5695 } 5696 5697 static int ca0132_alt_effect_slider_info(struct snd_kcontrol *kcontrol, 5698 struct snd_ctl_elem_info *uinfo) 5699 { 5700 int chs = get_amp_channels(kcontrol); 5701 5702 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 5703 uinfo->count = chs == 3 ? 2 : 1; 5704 uinfo->value.integer.min = 0; 5705 uinfo->value.integer.max = 100; 5706 uinfo->value.integer.step = 1; 5707 5708 return 0; 5709 } 5710 5711 static int ca0132_alt_xbass_xover_slider_put(struct snd_kcontrol *kcontrol, 5712 struct snd_ctl_elem_value *ucontrol) 5713 { 5714 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5715 struct ca0132_spec *spec = codec->spec; 5716 hda_nid_t nid = get_amp_nid(kcontrol); 5717 long *valp = ucontrol->value.integer.value; 5718 long *cur_val; 5719 int idx; 5720 5721 if (nid == BASS_REDIRECTION_XOVER) 5722 cur_val = &spec->bass_redirect_xover_freq; 5723 else 5724 cur_val = &spec->xbass_xover_freq; 5725 5726 /* any change? */ 5727 if (*cur_val == *valp) 5728 return 0; 5729 5730 *cur_val = *valp; 5731 5732 idx = *valp; 5733 if (nid == BASS_REDIRECTION_XOVER) 5734 ca0132_alt_bass_redirection_xover_set(codec, *cur_val); 5735 else 5736 ca0132_alt_slider_ctl_set(codec, nid, float_xbass_xover_lookup, idx); 5737 5738 return 0; 5739 } 5740 5741 static int ca0132_alt_effect_slider_put(struct snd_kcontrol *kcontrol, 5742 struct snd_ctl_elem_value *ucontrol) 5743 { 5744 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5745 struct ca0132_spec *spec = codec->spec; 5746 hda_nid_t nid = get_amp_nid(kcontrol); 5747 long *valp = ucontrol->value.integer.value; 5748 int idx; 5749 5750 idx = nid - EFFECT_START_NID; 5751 /* any change? */ 5752 if (spec->fx_ctl_val[idx] == *valp) 5753 return 0; 5754 5755 spec->fx_ctl_val[idx] = *valp; 5756 5757 idx = *valp; 5758 ca0132_alt_slider_ctl_set(codec, nid, float_zero_to_one_lookup, idx); 5759 5760 return 0; 5761 } 5762 5763 5764 /* 5765 * Mic Boost Enum for alternative ca0132 codecs. I didn't like that the original 5766 * only has off or full 30 dB, and didn't like making a volume slider that has 5767 * traditional 0-100 in alsamixer that goes in big steps. I like enum better. 5768 */ 5769 #define MIC_BOOST_NUM_OF_STEPS 4 5770 #define MIC_BOOST_ENUM_MAX_STRLEN 10 5771 5772 static int ca0132_alt_mic_boost_info(struct snd_kcontrol *kcontrol, 5773 struct snd_ctl_elem_info *uinfo) 5774 { 5775 char *sfx = "dB"; 5776 char namestr[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; 5777 5778 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 5779 uinfo->count = 1; 5780 uinfo->value.enumerated.items = MIC_BOOST_NUM_OF_STEPS; 5781 if (uinfo->value.enumerated.item >= MIC_BOOST_NUM_OF_STEPS) 5782 uinfo->value.enumerated.item = MIC_BOOST_NUM_OF_STEPS - 1; 5783 sprintf(namestr, "%d %s", (uinfo->value.enumerated.item * 10), sfx); 5784 strcpy(uinfo->value.enumerated.name, namestr); 5785 return 0; 5786 } 5787 5788 static int ca0132_alt_mic_boost_get(struct snd_kcontrol *kcontrol, 5789 struct snd_ctl_elem_value *ucontrol) 5790 { 5791 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5792 struct ca0132_spec *spec = codec->spec; 5793 5794 ucontrol->value.enumerated.item[0] = spec->mic_boost_enum_val; 5795 return 0; 5796 } 5797 5798 static int ca0132_alt_mic_boost_put(struct snd_kcontrol *kcontrol, 5799 struct snd_ctl_elem_value *ucontrol) 5800 { 5801 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5802 struct ca0132_spec *spec = codec->spec; 5803 int sel = ucontrol->value.enumerated.item[0]; 5804 unsigned int items = MIC_BOOST_NUM_OF_STEPS; 5805 5806 if (sel >= items) 5807 return 0; 5808 5809 codec_dbg(codec, "ca0132_alt_mic_boost: boost=%d\n", 5810 sel); 5811 5812 spec->mic_boost_enum_val = sel; 5813 5814 if (spec->in_enum_val != REAR_LINE_IN) 5815 ca0132_alt_mic_boost_set(codec, spec->mic_boost_enum_val); 5816 5817 return 1; 5818 } 5819 5820 /* 5821 * Sound BlasterX AE-5 Headphone Gain Controls. 5822 */ 5823 #define AE5_HEADPHONE_GAIN_MAX 3 5824 static int ae5_headphone_gain_info(struct snd_kcontrol *kcontrol, 5825 struct snd_ctl_elem_info *uinfo) 5826 { 5827 char *sfx = " Ohms)"; 5828 char namestr[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; 5829 5830 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 5831 uinfo->count = 1; 5832 uinfo->value.enumerated.items = AE5_HEADPHONE_GAIN_MAX; 5833 if (uinfo->value.enumerated.item >= AE5_HEADPHONE_GAIN_MAX) 5834 uinfo->value.enumerated.item = AE5_HEADPHONE_GAIN_MAX - 1; 5835 sprintf(namestr, "%s %s", 5836 ae5_headphone_gain_presets[uinfo->value.enumerated.item].name, 5837 sfx); 5838 strcpy(uinfo->value.enumerated.name, namestr); 5839 return 0; 5840 } 5841 5842 static int ae5_headphone_gain_get(struct snd_kcontrol *kcontrol, 5843 struct snd_ctl_elem_value *ucontrol) 5844 { 5845 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5846 struct ca0132_spec *spec = codec->spec; 5847 5848 ucontrol->value.enumerated.item[0] = spec->ae5_headphone_gain_val; 5849 return 0; 5850 } 5851 5852 static int ae5_headphone_gain_put(struct snd_kcontrol *kcontrol, 5853 struct snd_ctl_elem_value *ucontrol) 5854 { 5855 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5856 struct ca0132_spec *spec = codec->spec; 5857 int sel = ucontrol->value.enumerated.item[0]; 5858 unsigned int items = AE5_HEADPHONE_GAIN_MAX; 5859 5860 if (sel >= items) 5861 return 0; 5862 5863 codec_dbg(codec, "ae5_headphone_gain: boost=%d\n", 5864 sel); 5865 5866 spec->ae5_headphone_gain_val = sel; 5867 5868 if (spec->out_enum_val == HEADPHONE_OUT) 5869 ae5_headphone_gain_set(codec, spec->ae5_headphone_gain_val); 5870 5871 return 1; 5872 } 5873 5874 /* 5875 * Sound BlasterX AE-5 sound filter enumerated control. 5876 */ 5877 #define AE5_SOUND_FILTER_MAX 3 5878 5879 static int ae5_sound_filter_info(struct snd_kcontrol *kcontrol, 5880 struct snd_ctl_elem_info *uinfo) 5881 { 5882 char namestr[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; 5883 5884 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 5885 uinfo->count = 1; 5886 uinfo->value.enumerated.items = AE5_SOUND_FILTER_MAX; 5887 if (uinfo->value.enumerated.item >= AE5_SOUND_FILTER_MAX) 5888 uinfo->value.enumerated.item = AE5_SOUND_FILTER_MAX - 1; 5889 sprintf(namestr, "%s", 5890 ae5_filter_presets[uinfo->value.enumerated.item].name); 5891 strcpy(uinfo->value.enumerated.name, namestr); 5892 return 0; 5893 } 5894 5895 static int ae5_sound_filter_get(struct snd_kcontrol *kcontrol, 5896 struct snd_ctl_elem_value *ucontrol) 5897 { 5898 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5899 struct ca0132_spec *spec = codec->spec; 5900 5901 ucontrol->value.enumerated.item[0] = spec->ae5_filter_val; 5902 return 0; 5903 } 5904 5905 static int ae5_sound_filter_put(struct snd_kcontrol *kcontrol, 5906 struct snd_ctl_elem_value *ucontrol) 5907 { 5908 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5909 struct ca0132_spec *spec = codec->spec; 5910 int sel = ucontrol->value.enumerated.item[0]; 5911 unsigned int items = AE5_SOUND_FILTER_MAX; 5912 5913 if (sel >= items) 5914 return 0; 5915 5916 codec_dbg(codec, "ae5_sound_filter: %s\n", 5917 ae5_filter_presets[sel].name); 5918 5919 spec->ae5_filter_val = sel; 5920 5921 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 5922 ae5_filter_presets[sel].val); 5923 5924 return 1; 5925 } 5926 5927 /* 5928 * Input Select Control for alternative ca0132 codecs. This exists because 5929 * front microphone has no auto-detect, and we need a way to set the rear 5930 * as line-in 5931 */ 5932 static int ca0132_alt_input_source_info(struct snd_kcontrol *kcontrol, 5933 struct snd_ctl_elem_info *uinfo) 5934 { 5935 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 5936 uinfo->count = 1; 5937 uinfo->value.enumerated.items = IN_SRC_NUM_OF_INPUTS; 5938 if (uinfo->value.enumerated.item >= IN_SRC_NUM_OF_INPUTS) 5939 uinfo->value.enumerated.item = IN_SRC_NUM_OF_INPUTS - 1; 5940 strcpy(uinfo->value.enumerated.name, 5941 in_src_str[uinfo->value.enumerated.item]); 5942 return 0; 5943 } 5944 5945 static int ca0132_alt_input_source_get(struct snd_kcontrol *kcontrol, 5946 struct snd_ctl_elem_value *ucontrol) 5947 { 5948 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5949 struct ca0132_spec *spec = codec->spec; 5950 5951 ucontrol->value.enumerated.item[0] = spec->in_enum_val; 5952 return 0; 5953 } 5954 5955 static int ca0132_alt_input_source_put(struct snd_kcontrol *kcontrol, 5956 struct snd_ctl_elem_value *ucontrol) 5957 { 5958 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 5959 struct ca0132_spec *spec = codec->spec; 5960 int sel = ucontrol->value.enumerated.item[0]; 5961 unsigned int items = IN_SRC_NUM_OF_INPUTS; 5962 5963 /* 5964 * The AE-7 has no front microphone, so limit items to 2: rear mic and 5965 * line-in. 5966 */ 5967 if (ca0132_quirk(spec) == QUIRK_AE7) 5968 items = 2; 5969 5970 if (sel >= items) 5971 return 0; 5972 5973 codec_dbg(codec, "ca0132_alt_input_select: sel=%d, preset=%s\n", 5974 sel, in_src_str[sel]); 5975 5976 spec->in_enum_val = sel; 5977 5978 ca0132_alt_select_in(codec); 5979 5980 return 1; 5981 } 5982 5983 /* Sound Blaster Z Output Select Control */ 5984 static int ca0132_alt_output_select_get_info(struct snd_kcontrol *kcontrol, 5985 struct snd_ctl_elem_info *uinfo) 5986 { 5987 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 5988 uinfo->count = 1; 5989 uinfo->value.enumerated.items = NUM_OF_OUTPUTS; 5990 if (uinfo->value.enumerated.item >= NUM_OF_OUTPUTS) 5991 uinfo->value.enumerated.item = NUM_OF_OUTPUTS - 1; 5992 strcpy(uinfo->value.enumerated.name, 5993 out_type_str[uinfo->value.enumerated.item]); 5994 return 0; 5995 } 5996 5997 static int ca0132_alt_output_select_get(struct snd_kcontrol *kcontrol, 5998 struct snd_ctl_elem_value *ucontrol) 5999 { 6000 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6001 struct ca0132_spec *spec = codec->spec; 6002 6003 ucontrol->value.enumerated.item[0] = spec->out_enum_val; 6004 return 0; 6005 } 6006 6007 static int ca0132_alt_output_select_put(struct snd_kcontrol *kcontrol, 6008 struct snd_ctl_elem_value *ucontrol) 6009 { 6010 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6011 struct ca0132_spec *spec = codec->spec; 6012 int sel = ucontrol->value.enumerated.item[0]; 6013 unsigned int items = NUM_OF_OUTPUTS; 6014 unsigned int auto_jack; 6015 6016 if (sel >= items) 6017 return 0; 6018 6019 codec_dbg(codec, "ca0132_alt_output_select: sel=%d, preset=%s\n", 6020 sel, out_type_str[sel]); 6021 6022 spec->out_enum_val = sel; 6023 6024 auto_jack = spec->vnode_lswitch[VNID_HP_ASEL - VNODE_START_NID]; 6025 6026 if (!auto_jack) 6027 ca0132_alt_select_out(codec); 6028 6029 return 1; 6030 } 6031 6032 /* Select surround output type: 2.1, 4.0, 4.1, or 5.1. */ 6033 static int ca0132_alt_speaker_channel_cfg_get_info(struct snd_kcontrol *kcontrol, 6034 struct snd_ctl_elem_info *uinfo) 6035 { 6036 unsigned int items = SPEAKER_CHANNEL_CFG_COUNT; 6037 6038 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 6039 uinfo->count = 1; 6040 uinfo->value.enumerated.items = items; 6041 if (uinfo->value.enumerated.item >= items) 6042 uinfo->value.enumerated.item = items - 1; 6043 strcpy(uinfo->value.enumerated.name, 6044 speaker_channel_cfgs[uinfo->value.enumerated.item].name); 6045 return 0; 6046 } 6047 6048 static int ca0132_alt_speaker_channel_cfg_get(struct snd_kcontrol *kcontrol, 6049 struct snd_ctl_elem_value *ucontrol) 6050 { 6051 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6052 struct ca0132_spec *spec = codec->spec; 6053 6054 ucontrol->value.enumerated.item[0] = spec->channel_cfg_val; 6055 return 0; 6056 } 6057 6058 static int ca0132_alt_speaker_channel_cfg_put(struct snd_kcontrol *kcontrol, 6059 struct snd_ctl_elem_value *ucontrol) 6060 { 6061 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6062 struct ca0132_spec *spec = codec->spec; 6063 int sel = ucontrol->value.enumerated.item[0]; 6064 unsigned int items = SPEAKER_CHANNEL_CFG_COUNT; 6065 6066 if (sel >= items) 6067 return 0; 6068 6069 codec_dbg(codec, "ca0132_alt_speaker_channels: sel=%d, channels=%s\n", 6070 sel, speaker_channel_cfgs[sel].name); 6071 6072 spec->channel_cfg_val = sel; 6073 6074 if (spec->out_enum_val == SPEAKER_OUT) 6075 ca0132_alt_select_out(codec); 6076 6077 return 1; 6078 } 6079 6080 /* 6081 * Smart Volume output setting control. Three different settings, Normal, 6082 * which takes the value from the smart volume slider. The two others, loud 6083 * and night, disregard the slider value and have uneditable values. 6084 */ 6085 #define NUM_OF_SVM_SETTINGS 3 6086 static const char *const out_svm_set_enum_str[3] = {"Normal", "Loud", "Night" }; 6087 6088 static int ca0132_alt_svm_setting_info(struct snd_kcontrol *kcontrol, 6089 struct snd_ctl_elem_info *uinfo) 6090 { 6091 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 6092 uinfo->count = 1; 6093 uinfo->value.enumerated.items = NUM_OF_SVM_SETTINGS; 6094 if (uinfo->value.enumerated.item >= NUM_OF_SVM_SETTINGS) 6095 uinfo->value.enumerated.item = NUM_OF_SVM_SETTINGS - 1; 6096 strcpy(uinfo->value.enumerated.name, 6097 out_svm_set_enum_str[uinfo->value.enumerated.item]); 6098 return 0; 6099 } 6100 6101 static int ca0132_alt_svm_setting_get(struct snd_kcontrol *kcontrol, 6102 struct snd_ctl_elem_value *ucontrol) 6103 { 6104 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6105 struct ca0132_spec *spec = codec->spec; 6106 6107 ucontrol->value.enumerated.item[0] = spec->smart_volume_setting; 6108 return 0; 6109 } 6110 6111 static int ca0132_alt_svm_setting_put(struct snd_kcontrol *kcontrol, 6112 struct snd_ctl_elem_value *ucontrol) 6113 { 6114 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6115 struct ca0132_spec *spec = codec->spec; 6116 int sel = ucontrol->value.enumerated.item[0]; 6117 unsigned int items = NUM_OF_SVM_SETTINGS; 6118 unsigned int idx = SMART_VOLUME - EFFECT_START_NID; 6119 unsigned int tmp; 6120 6121 if (sel >= items) 6122 return 0; 6123 6124 codec_dbg(codec, "ca0132_alt_svm_setting: sel=%d, preset=%s\n", 6125 sel, out_svm_set_enum_str[sel]); 6126 6127 spec->smart_volume_setting = sel; 6128 6129 switch (sel) { 6130 case 0: 6131 tmp = FLOAT_ZERO; 6132 break; 6133 case 1: 6134 tmp = FLOAT_ONE; 6135 break; 6136 case 2: 6137 tmp = FLOAT_TWO; 6138 break; 6139 default: 6140 tmp = FLOAT_ZERO; 6141 break; 6142 } 6143 /* Req 2 is the Smart Volume Setting req. */ 6144 dspio_set_uint_param(codec, ca0132_effects[idx].mid, 6145 ca0132_effects[idx].reqs[2], tmp); 6146 return 1; 6147 } 6148 6149 /* Sound Blaster Z EQ preset controls */ 6150 static int ca0132_alt_eq_preset_info(struct snd_kcontrol *kcontrol, 6151 struct snd_ctl_elem_info *uinfo) 6152 { 6153 unsigned int items = ARRAY_SIZE(ca0132_alt_eq_presets); 6154 6155 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 6156 uinfo->count = 1; 6157 uinfo->value.enumerated.items = items; 6158 if (uinfo->value.enumerated.item >= items) 6159 uinfo->value.enumerated.item = items - 1; 6160 strcpy(uinfo->value.enumerated.name, 6161 ca0132_alt_eq_presets[uinfo->value.enumerated.item].name); 6162 return 0; 6163 } 6164 6165 static int ca0132_alt_eq_preset_get(struct snd_kcontrol *kcontrol, 6166 struct snd_ctl_elem_value *ucontrol) 6167 { 6168 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6169 struct ca0132_spec *spec = codec->spec; 6170 6171 ucontrol->value.enumerated.item[0] = spec->eq_preset_val; 6172 return 0; 6173 } 6174 6175 static int ca0132_alt_eq_preset_put(struct snd_kcontrol *kcontrol, 6176 struct snd_ctl_elem_value *ucontrol) 6177 { 6178 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6179 struct ca0132_spec *spec = codec->spec; 6180 int i, err = 0; 6181 int sel = ucontrol->value.enumerated.item[0]; 6182 unsigned int items = ARRAY_SIZE(ca0132_alt_eq_presets); 6183 6184 if (sel >= items) 6185 return 0; 6186 6187 codec_dbg(codec, "%s: sel=%d, preset=%s\n", __func__, sel, 6188 ca0132_alt_eq_presets[sel].name); 6189 /* 6190 * Idx 0 is default. 6191 * Default needs to qualify with CrystalVoice state. 6192 */ 6193 for (i = 0; i < EQ_PRESET_MAX_PARAM_COUNT; i++) { 6194 err = dspio_set_uint_param(codec, ca0132_alt_eq_enum.mid, 6195 ca0132_alt_eq_enum.reqs[i], 6196 ca0132_alt_eq_presets[sel].vals[i]); 6197 if (err < 0) 6198 break; 6199 } 6200 6201 if (err >= 0) 6202 spec->eq_preset_val = sel; 6203 6204 return 1; 6205 } 6206 6207 static int ca0132_voicefx_info(struct snd_kcontrol *kcontrol, 6208 struct snd_ctl_elem_info *uinfo) 6209 { 6210 unsigned int items = ARRAY_SIZE(ca0132_voicefx_presets); 6211 6212 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 6213 uinfo->count = 1; 6214 uinfo->value.enumerated.items = items; 6215 if (uinfo->value.enumerated.item >= items) 6216 uinfo->value.enumerated.item = items - 1; 6217 strcpy(uinfo->value.enumerated.name, 6218 ca0132_voicefx_presets[uinfo->value.enumerated.item].name); 6219 return 0; 6220 } 6221 6222 static int ca0132_voicefx_get(struct snd_kcontrol *kcontrol, 6223 struct snd_ctl_elem_value *ucontrol) 6224 { 6225 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6226 struct ca0132_spec *spec = codec->spec; 6227 6228 ucontrol->value.enumerated.item[0] = spec->voicefx_val; 6229 return 0; 6230 } 6231 6232 static int ca0132_voicefx_put(struct snd_kcontrol *kcontrol, 6233 struct snd_ctl_elem_value *ucontrol) 6234 { 6235 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6236 struct ca0132_spec *spec = codec->spec; 6237 int i, err = 0; 6238 int sel = ucontrol->value.enumerated.item[0]; 6239 6240 if (sel >= ARRAY_SIZE(ca0132_voicefx_presets)) 6241 return 0; 6242 6243 codec_dbg(codec, "ca0132_voicefx_put: sel=%d, preset=%s\n", 6244 sel, ca0132_voicefx_presets[sel].name); 6245 6246 /* 6247 * Idx 0 is default. 6248 * Default needs to qualify with CrystalVoice state. 6249 */ 6250 for (i = 0; i < VOICEFX_MAX_PARAM_COUNT; i++) { 6251 err = dspio_set_uint_param(codec, ca0132_voicefx.mid, 6252 ca0132_voicefx.reqs[i], 6253 ca0132_voicefx_presets[sel].vals[i]); 6254 if (err < 0) 6255 break; 6256 } 6257 6258 if (err >= 0) { 6259 spec->voicefx_val = sel; 6260 /* enable voice fx */ 6261 ca0132_voicefx_set(codec, (sel ? 1 : 0)); 6262 } 6263 6264 return 1; 6265 } 6266 6267 static int ca0132_switch_get(struct snd_kcontrol *kcontrol, 6268 struct snd_ctl_elem_value *ucontrol) 6269 { 6270 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6271 struct ca0132_spec *spec = codec->spec; 6272 hda_nid_t nid = get_amp_nid(kcontrol); 6273 int ch = get_amp_channels(kcontrol); 6274 long *valp = ucontrol->value.integer.value; 6275 6276 /* vnode */ 6277 if ((nid >= VNODE_START_NID) && (nid < VNODE_END_NID)) { 6278 if (ch & 1) { 6279 *valp = spec->vnode_lswitch[nid - VNODE_START_NID]; 6280 valp++; 6281 } 6282 if (ch & 2) { 6283 *valp = spec->vnode_rswitch[nid - VNODE_START_NID]; 6284 valp++; 6285 } 6286 return 0; 6287 } 6288 6289 /* effects, include PE and CrystalVoice */ 6290 if ((nid >= EFFECT_START_NID) && (nid < EFFECT_END_NID)) { 6291 *valp = spec->effects_switch[nid - EFFECT_START_NID]; 6292 return 0; 6293 } 6294 6295 /* mic boost */ 6296 if (nid == spec->input_pins[0]) { 6297 *valp = spec->cur_mic_boost; 6298 return 0; 6299 } 6300 6301 if (nid == ZXR_HEADPHONE_GAIN) { 6302 *valp = spec->zxr_gain_set; 6303 return 0; 6304 } 6305 6306 if (nid == SPEAKER_FULL_RANGE_FRONT || nid == SPEAKER_FULL_RANGE_REAR) { 6307 *valp = spec->speaker_range_val[nid - SPEAKER_FULL_RANGE_FRONT]; 6308 return 0; 6309 } 6310 6311 if (nid == BASS_REDIRECTION) { 6312 *valp = spec->bass_redirection_val; 6313 return 0; 6314 } 6315 6316 return 0; 6317 } 6318 6319 static int ca0132_switch_put(struct snd_kcontrol *kcontrol, 6320 struct snd_ctl_elem_value *ucontrol) 6321 { 6322 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6323 struct ca0132_spec *spec = codec->spec; 6324 hda_nid_t nid = get_amp_nid(kcontrol); 6325 int ch = get_amp_channels(kcontrol); 6326 long *valp = ucontrol->value.integer.value; 6327 int changed = 1; 6328 6329 codec_dbg(codec, "ca0132_switch_put: nid=0x%x, val=%ld\n", 6330 nid, *valp); 6331 6332 snd_hda_power_up(codec); 6333 /* vnode */ 6334 if ((nid >= VNODE_START_NID) && (nid < VNODE_END_NID)) { 6335 if (ch & 1) { 6336 spec->vnode_lswitch[nid - VNODE_START_NID] = *valp; 6337 valp++; 6338 } 6339 if (ch & 2) { 6340 spec->vnode_rswitch[nid - VNODE_START_NID] = *valp; 6341 valp++; 6342 } 6343 changed = ca0132_vnode_switch_set(kcontrol, ucontrol); 6344 goto exit; 6345 } 6346 6347 /* PE */ 6348 if (nid == PLAY_ENHANCEMENT) { 6349 spec->effects_switch[nid - EFFECT_START_NID] = *valp; 6350 changed = ca0132_pe_switch_set(codec); 6351 goto exit; 6352 } 6353 6354 /* CrystalVoice */ 6355 if (nid == CRYSTAL_VOICE) { 6356 spec->effects_switch[nid - EFFECT_START_NID] = *valp; 6357 changed = ca0132_cvoice_switch_set(codec); 6358 goto exit; 6359 } 6360 6361 /* out and in effects */ 6362 if (((nid >= OUT_EFFECT_START_NID) && (nid < OUT_EFFECT_END_NID)) || 6363 ((nid >= IN_EFFECT_START_NID) && (nid < IN_EFFECT_END_NID))) { 6364 spec->effects_switch[nid - EFFECT_START_NID] = *valp; 6365 changed = ca0132_effects_set(codec, nid, *valp); 6366 goto exit; 6367 } 6368 6369 /* mic boost */ 6370 if (nid == spec->input_pins[0]) { 6371 spec->cur_mic_boost = *valp; 6372 if (ca0132_use_alt_functions(spec)) { 6373 if (spec->in_enum_val != REAR_LINE_IN) 6374 changed = ca0132_mic_boost_set(codec, *valp); 6375 } else { 6376 /* Mic boost does not apply to Digital Mic */ 6377 if (spec->cur_mic_type != DIGITAL_MIC) 6378 changed = ca0132_mic_boost_set(codec, *valp); 6379 } 6380 6381 goto exit; 6382 } 6383 6384 if (nid == ZXR_HEADPHONE_GAIN) { 6385 spec->zxr_gain_set = *valp; 6386 if (spec->cur_out_type == HEADPHONE_OUT) 6387 changed = zxr_headphone_gain_set(codec, *valp); 6388 else 6389 changed = 0; 6390 6391 goto exit; 6392 } 6393 6394 if (nid == SPEAKER_FULL_RANGE_FRONT || nid == SPEAKER_FULL_RANGE_REAR) { 6395 spec->speaker_range_val[nid - SPEAKER_FULL_RANGE_FRONT] = *valp; 6396 if (spec->cur_out_type == SPEAKER_OUT) 6397 ca0132_alt_set_full_range_speaker(codec); 6398 6399 changed = 0; 6400 } 6401 6402 if (nid == BASS_REDIRECTION) { 6403 spec->bass_redirection_val = *valp; 6404 if (spec->cur_out_type == SPEAKER_OUT) 6405 ca0132_alt_surround_set_bass_redirection(codec, *valp); 6406 6407 changed = 0; 6408 } 6409 6410 exit: 6411 snd_hda_power_down(codec); 6412 return changed; 6413 } 6414 6415 /* 6416 * Volume related 6417 */ 6418 /* 6419 * Sets the internal DSP decibel level to match the DAC for output, and the 6420 * ADC for input. Currently only the SBZ sets dsp capture volume level, and 6421 * all alternative codecs set DSP playback volume. 6422 */ 6423 static void ca0132_alt_dsp_volume_put(struct hda_codec *codec, hda_nid_t nid) 6424 { 6425 struct ca0132_spec *spec = codec->spec; 6426 unsigned int dsp_dir; 6427 unsigned int lookup_val; 6428 6429 if (nid == VNID_SPK) 6430 dsp_dir = DSP_VOL_OUT; 6431 else 6432 dsp_dir = DSP_VOL_IN; 6433 6434 lookup_val = spec->vnode_lvol[nid - VNODE_START_NID]; 6435 6436 dspio_set_uint_param(codec, 6437 ca0132_alt_vol_ctls[dsp_dir].mid, 6438 ca0132_alt_vol_ctls[dsp_dir].reqs[0], 6439 float_vol_db_lookup[lookup_val]); 6440 6441 lookup_val = spec->vnode_rvol[nid - VNODE_START_NID]; 6442 6443 dspio_set_uint_param(codec, 6444 ca0132_alt_vol_ctls[dsp_dir].mid, 6445 ca0132_alt_vol_ctls[dsp_dir].reqs[1], 6446 float_vol_db_lookup[lookup_val]); 6447 6448 dspio_set_uint_param(codec, 6449 ca0132_alt_vol_ctls[dsp_dir].mid, 6450 ca0132_alt_vol_ctls[dsp_dir].reqs[2], FLOAT_ZERO); 6451 } 6452 6453 static int ca0132_volume_info(struct snd_kcontrol *kcontrol, 6454 struct snd_ctl_elem_info *uinfo) 6455 { 6456 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6457 struct ca0132_spec *spec = codec->spec; 6458 hda_nid_t nid = get_amp_nid(kcontrol); 6459 int ch = get_amp_channels(kcontrol); 6460 int dir = get_amp_direction(kcontrol); 6461 unsigned long pval; 6462 int err; 6463 6464 switch (nid) { 6465 case VNID_SPK: 6466 /* follow shared_out info */ 6467 nid = spec->shared_out_nid; 6468 mutex_lock(&codec->control_mutex); 6469 pval = kcontrol->private_value; 6470 kcontrol->private_value = HDA_COMPOSE_AMP_VAL(nid, ch, 0, dir); 6471 err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo); 6472 kcontrol->private_value = pval; 6473 mutex_unlock(&codec->control_mutex); 6474 break; 6475 case VNID_MIC: 6476 /* follow shared_mic info */ 6477 nid = spec->shared_mic_nid; 6478 mutex_lock(&codec->control_mutex); 6479 pval = kcontrol->private_value; 6480 kcontrol->private_value = HDA_COMPOSE_AMP_VAL(nid, ch, 0, dir); 6481 err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo); 6482 kcontrol->private_value = pval; 6483 mutex_unlock(&codec->control_mutex); 6484 break; 6485 default: 6486 err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo); 6487 } 6488 return err; 6489 } 6490 6491 static int ca0132_volume_get(struct snd_kcontrol *kcontrol, 6492 struct snd_ctl_elem_value *ucontrol) 6493 { 6494 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6495 struct ca0132_spec *spec = codec->spec; 6496 hda_nid_t nid = get_amp_nid(kcontrol); 6497 int ch = get_amp_channels(kcontrol); 6498 long *valp = ucontrol->value.integer.value; 6499 6500 /* store the left and right volume */ 6501 if (ch & 1) { 6502 *valp = spec->vnode_lvol[nid - VNODE_START_NID]; 6503 valp++; 6504 } 6505 if (ch & 2) { 6506 *valp = spec->vnode_rvol[nid - VNODE_START_NID]; 6507 valp++; 6508 } 6509 return 0; 6510 } 6511 6512 static int ca0132_volume_put(struct snd_kcontrol *kcontrol, 6513 struct snd_ctl_elem_value *ucontrol) 6514 { 6515 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6516 struct ca0132_spec *spec = codec->spec; 6517 hda_nid_t nid = get_amp_nid(kcontrol); 6518 int ch = get_amp_channels(kcontrol); 6519 long *valp = ucontrol->value.integer.value; 6520 hda_nid_t shared_nid = 0; 6521 bool effective; 6522 int changed = 1; 6523 6524 /* store the left and right volume */ 6525 if (ch & 1) { 6526 spec->vnode_lvol[nid - VNODE_START_NID] = *valp; 6527 valp++; 6528 } 6529 if (ch & 2) { 6530 spec->vnode_rvol[nid - VNODE_START_NID] = *valp; 6531 valp++; 6532 } 6533 6534 /* if effective conditions, then update hw immediately. */ 6535 effective = ca0132_is_vnode_effective(codec, nid, &shared_nid); 6536 if (effective) { 6537 int dir = get_amp_direction(kcontrol); 6538 unsigned long pval; 6539 6540 snd_hda_power_up(codec); 6541 mutex_lock(&codec->control_mutex); 6542 pval = kcontrol->private_value; 6543 kcontrol->private_value = HDA_COMPOSE_AMP_VAL(shared_nid, ch, 6544 0, dir); 6545 changed = snd_hda_mixer_amp_volume_put(kcontrol, ucontrol); 6546 kcontrol->private_value = pval; 6547 mutex_unlock(&codec->control_mutex); 6548 snd_hda_power_down(codec); 6549 } 6550 6551 return changed; 6552 } 6553 6554 /* 6555 * This function is the same as the one above, because using an if statement 6556 * inside of the above volume control for the DSP volume would cause too much 6557 * lag. This is a lot more smooth. 6558 */ 6559 static int ca0132_alt_volume_put(struct snd_kcontrol *kcontrol, 6560 struct snd_ctl_elem_value *ucontrol) 6561 { 6562 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6563 struct ca0132_spec *spec = codec->spec; 6564 hda_nid_t nid = get_amp_nid(kcontrol); 6565 int ch = get_amp_channels(kcontrol); 6566 long *valp = ucontrol->value.integer.value; 6567 hda_nid_t vnid = 0; 6568 int changed; 6569 6570 switch (nid) { 6571 case 0x02: 6572 vnid = VNID_SPK; 6573 break; 6574 case 0x07: 6575 vnid = VNID_MIC; 6576 break; 6577 } 6578 6579 /* store the left and right volume */ 6580 if (ch & 1) { 6581 spec->vnode_lvol[vnid - VNODE_START_NID] = *valp; 6582 valp++; 6583 } 6584 if (ch & 2) { 6585 spec->vnode_rvol[vnid - VNODE_START_NID] = *valp; 6586 valp++; 6587 } 6588 6589 snd_hda_power_up(codec); 6590 ca0132_alt_dsp_volume_put(codec, vnid); 6591 mutex_lock(&codec->control_mutex); 6592 changed = snd_hda_mixer_amp_volume_put(kcontrol, ucontrol); 6593 mutex_unlock(&codec->control_mutex); 6594 snd_hda_power_down(codec); 6595 6596 return changed; 6597 } 6598 6599 static int ca0132_volume_tlv(struct snd_kcontrol *kcontrol, int op_flag, 6600 unsigned int size, unsigned int __user *tlv) 6601 { 6602 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 6603 struct ca0132_spec *spec = codec->spec; 6604 hda_nid_t nid = get_amp_nid(kcontrol); 6605 int ch = get_amp_channels(kcontrol); 6606 int dir = get_amp_direction(kcontrol); 6607 unsigned long pval; 6608 int err; 6609 6610 switch (nid) { 6611 case VNID_SPK: 6612 /* follow shared_out tlv */ 6613 nid = spec->shared_out_nid; 6614 mutex_lock(&codec->control_mutex); 6615 pval = kcontrol->private_value; 6616 kcontrol->private_value = HDA_COMPOSE_AMP_VAL(nid, ch, 0, dir); 6617 err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv); 6618 kcontrol->private_value = pval; 6619 mutex_unlock(&codec->control_mutex); 6620 break; 6621 case VNID_MIC: 6622 /* follow shared_mic tlv */ 6623 nid = spec->shared_mic_nid; 6624 mutex_lock(&codec->control_mutex); 6625 pval = kcontrol->private_value; 6626 kcontrol->private_value = HDA_COMPOSE_AMP_VAL(nid, ch, 0, dir); 6627 err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv); 6628 kcontrol->private_value = pval; 6629 mutex_unlock(&codec->control_mutex); 6630 break; 6631 default: 6632 err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv); 6633 } 6634 return err; 6635 } 6636 6637 /* Add volume slider control for effect level */ 6638 static int ca0132_alt_add_effect_slider(struct hda_codec *codec, hda_nid_t nid, 6639 const char *pfx, int dir) 6640 { 6641 char namestr[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; 6642 int type = dir ? HDA_INPUT : HDA_OUTPUT; 6643 struct snd_kcontrol_new knew = 6644 HDA_CODEC_VOLUME_MONO(namestr, nid, 1, 0, type); 6645 6646 sprintf(namestr, "FX: %s %s Volume", pfx, dirstr[dir]); 6647 6648 knew.tlv.c = NULL; 6649 6650 switch (nid) { 6651 case XBASS_XOVER: 6652 knew.info = ca0132_alt_xbass_xover_slider_info; 6653 knew.get = ca0132_alt_xbass_xover_slider_ctl_get; 6654 knew.put = ca0132_alt_xbass_xover_slider_put; 6655 break; 6656 default: 6657 knew.info = ca0132_alt_effect_slider_info; 6658 knew.get = ca0132_alt_slider_ctl_get; 6659 knew.put = ca0132_alt_effect_slider_put; 6660 knew.private_value = 6661 HDA_COMPOSE_AMP_VAL(nid, 1, 0, type); 6662 break; 6663 } 6664 6665 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); 6666 } 6667 6668 /* 6669 * Added FX: prefix for the alternative codecs, because otherwise the surround 6670 * effect would conflict with the Surround sound volume control. Also seems more 6671 * clear as to what the switches do. Left alone for others. 6672 */ 6673 static int add_fx_switch(struct hda_codec *codec, hda_nid_t nid, 6674 const char *pfx, int dir) 6675 { 6676 struct ca0132_spec *spec = codec->spec; 6677 char namestr[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; 6678 int type = dir ? HDA_INPUT : HDA_OUTPUT; 6679 struct snd_kcontrol_new knew = 6680 CA0132_CODEC_MUTE_MONO(namestr, nid, 1, type); 6681 /* If using alt_controls, add FX: prefix. But, don't add FX: 6682 * prefix to OutFX or InFX enable controls. 6683 */ 6684 if (ca0132_use_alt_controls(spec) && (nid <= IN_EFFECT_END_NID)) 6685 sprintf(namestr, "FX: %s %s Switch", pfx, dirstr[dir]); 6686 else 6687 sprintf(namestr, "%s %s Switch", pfx, dirstr[dir]); 6688 6689 return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec)); 6690 } 6691 6692 static int add_voicefx(struct hda_codec *codec) 6693 { 6694 struct snd_kcontrol_new knew = 6695 HDA_CODEC_MUTE_MONO(ca0132_voicefx.name, 6696 VOICEFX, 1, 0, HDA_INPUT); 6697 knew.info = ca0132_voicefx_info; 6698 knew.get = ca0132_voicefx_get; 6699 knew.put = ca0132_voicefx_put; 6700 return snd_hda_ctl_add(codec, VOICEFX, snd_ctl_new1(&knew, codec)); 6701 } 6702 6703 /* Create the EQ Preset control */ 6704 static int add_ca0132_alt_eq_presets(struct hda_codec *codec) 6705 { 6706 struct snd_kcontrol_new knew = 6707 HDA_CODEC_MUTE_MONO(ca0132_alt_eq_enum.name, 6708 EQ_PRESET_ENUM, 1, 0, HDA_OUTPUT); 6709 knew.info = ca0132_alt_eq_preset_info; 6710 knew.get = ca0132_alt_eq_preset_get; 6711 knew.put = ca0132_alt_eq_preset_put; 6712 return snd_hda_ctl_add(codec, EQ_PRESET_ENUM, 6713 snd_ctl_new1(&knew, codec)); 6714 } 6715 6716 /* 6717 * Add enumerated control for the three different settings of the smart volume 6718 * output effect. Normal just uses the slider value, and loud and night are 6719 * their own things that ignore that value. 6720 */ 6721 static int ca0132_alt_add_svm_enum(struct hda_codec *codec) 6722 { 6723 struct snd_kcontrol_new knew = 6724 HDA_CODEC_MUTE_MONO("FX: Smart Volume Setting", 6725 SMART_VOLUME_ENUM, 1, 0, HDA_OUTPUT); 6726 knew.info = ca0132_alt_svm_setting_info; 6727 knew.get = ca0132_alt_svm_setting_get; 6728 knew.put = ca0132_alt_svm_setting_put; 6729 return snd_hda_ctl_add(codec, SMART_VOLUME_ENUM, 6730 snd_ctl_new1(&knew, codec)); 6731 6732 } 6733 6734 /* 6735 * Create an Output Select enumerated control for codecs with surround 6736 * out capabilities. 6737 */ 6738 static int ca0132_alt_add_output_enum(struct hda_codec *codec) 6739 { 6740 struct snd_kcontrol_new knew = 6741 HDA_CODEC_MUTE_MONO("Output Select", 6742 OUTPUT_SOURCE_ENUM, 1, 0, HDA_OUTPUT); 6743 knew.info = ca0132_alt_output_select_get_info; 6744 knew.get = ca0132_alt_output_select_get; 6745 knew.put = ca0132_alt_output_select_put; 6746 return snd_hda_ctl_add(codec, OUTPUT_SOURCE_ENUM, 6747 snd_ctl_new1(&knew, codec)); 6748 } 6749 6750 /* 6751 * Add a control for selecting channel count on speaker output. Setting this 6752 * allows the DSP to do bass redirection and channel upmixing on surround 6753 * configurations. 6754 */ 6755 static int ca0132_alt_add_speaker_channel_cfg_enum(struct hda_codec *codec) 6756 { 6757 struct snd_kcontrol_new knew = 6758 HDA_CODEC_MUTE_MONO("Surround Channel Config", 6759 SPEAKER_CHANNEL_CFG_ENUM, 1, 0, HDA_OUTPUT); 6760 knew.info = ca0132_alt_speaker_channel_cfg_get_info; 6761 knew.get = ca0132_alt_speaker_channel_cfg_get; 6762 knew.put = ca0132_alt_speaker_channel_cfg_put; 6763 return snd_hda_ctl_add(codec, SPEAKER_CHANNEL_CFG_ENUM, 6764 snd_ctl_new1(&knew, codec)); 6765 } 6766 6767 /* 6768 * Full range front stereo and rear surround switches. When these are set to 6769 * full range, the lower frequencies from these channels are no longer 6770 * redirected to the LFE channel. 6771 */ 6772 static int ca0132_alt_add_front_full_range_switch(struct hda_codec *codec) 6773 { 6774 struct snd_kcontrol_new knew = 6775 CA0132_CODEC_MUTE_MONO("Full-Range Front Speakers", 6776 SPEAKER_FULL_RANGE_FRONT, 1, HDA_OUTPUT); 6777 6778 return snd_hda_ctl_add(codec, SPEAKER_FULL_RANGE_FRONT, 6779 snd_ctl_new1(&knew, codec)); 6780 } 6781 6782 static int ca0132_alt_add_rear_full_range_switch(struct hda_codec *codec) 6783 { 6784 struct snd_kcontrol_new knew = 6785 CA0132_CODEC_MUTE_MONO("Full-Range Rear Speakers", 6786 SPEAKER_FULL_RANGE_REAR, 1, HDA_OUTPUT); 6787 6788 return snd_hda_ctl_add(codec, SPEAKER_FULL_RANGE_REAR, 6789 snd_ctl_new1(&knew, codec)); 6790 } 6791 6792 /* 6793 * Bass redirection redirects audio below the crossover frequency to the LFE 6794 * channel on speakers that are set as not being full-range. On configurations 6795 * without an LFE channel, it does nothing. Bass redirection seems to be the 6796 * replacement for X-Bass on configurations with an LFE channel. 6797 */ 6798 static int ca0132_alt_add_bass_redirection_crossover(struct hda_codec *codec) 6799 { 6800 const char *namestr = "Bass Redirection Crossover"; 6801 struct snd_kcontrol_new knew = 6802 HDA_CODEC_VOLUME_MONO(namestr, BASS_REDIRECTION_XOVER, 1, 0, 6803 HDA_OUTPUT); 6804 6805 knew.tlv.c = NULL; 6806 knew.info = ca0132_alt_xbass_xover_slider_info; 6807 knew.get = ca0132_alt_xbass_xover_slider_ctl_get; 6808 knew.put = ca0132_alt_xbass_xover_slider_put; 6809 6810 return snd_hda_ctl_add(codec, BASS_REDIRECTION_XOVER, 6811 snd_ctl_new1(&knew, codec)); 6812 } 6813 6814 static int ca0132_alt_add_bass_redirection_switch(struct hda_codec *codec) 6815 { 6816 const char *namestr = "Bass Redirection"; 6817 struct snd_kcontrol_new knew = 6818 CA0132_CODEC_MUTE_MONO(namestr, BASS_REDIRECTION, 1, 6819 HDA_OUTPUT); 6820 6821 return snd_hda_ctl_add(codec, BASS_REDIRECTION, 6822 snd_ctl_new1(&knew, codec)); 6823 } 6824 6825 /* 6826 * Create an Input Source enumerated control for the alternate ca0132 codecs 6827 * because the front microphone has no auto-detect, and Line-in has to be set 6828 * somehow. 6829 */ 6830 static int ca0132_alt_add_input_enum(struct hda_codec *codec) 6831 { 6832 struct snd_kcontrol_new knew = 6833 HDA_CODEC_MUTE_MONO("Input Source", 6834 INPUT_SOURCE_ENUM, 1, 0, HDA_INPUT); 6835 knew.info = ca0132_alt_input_source_info; 6836 knew.get = ca0132_alt_input_source_get; 6837 knew.put = ca0132_alt_input_source_put; 6838 return snd_hda_ctl_add(codec, INPUT_SOURCE_ENUM, 6839 snd_ctl_new1(&knew, codec)); 6840 } 6841 6842 /* 6843 * Add mic boost enumerated control. Switches through 0dB to 30dB. This adds 6844 * more control than the original mic boost, which is either full 30dB or off. 6845 */ 6846 static int ca0132_alt_add_mic_boost_enum(struct hda_codec *codec) 6847 { 6848 struct snd_kcontrol_new knew = 6849 HDA_CODEC_MUTE_MONO("Mic Boost Capture Switch", 6850 MIC_BOOST_ENUM, 1, 0, HDA_INPUT); 6851 knew.info = ca0132_alt_mic_boost_info; 6852 knew.get = ca0132_alt_mic_boost_get; 6853 knew.put = ca0132_alt_mic_boost_put; 6854 return snd_hda_ctl_add(codec, MIC_BOOST_ENUM, 6855 snd_ctl_new1(&knew, codec)); 6856 6857 } 6858 6859 /* 6860 * Add headphone gain enumerated control for the AE-5. This switches between 6861 * three modes, low, medium, and high. When non-headphone outputs are selected, 6862 * it is automatically set to high. This is the same behavior as Windows. 6863 */ 6864 static int ae5_add_headphone_gain_enum(struct hda_codec *codec) 6865 { 6866 struct snd_kcontrol_new knew = 6867 HDA_CODEC_MUTE_MONO("AE-5: Headphone Gain", 6868 AE5_HEADPHONE_GAIN_ENUM, 1, 0, HDA_OUTPUT); 6869 knew.info = ae5_headphone_gain_info; 6870 knew.get = ae5_headphone_gain_get; 6871 knew.put = ae5_headphone_gain_put; 6872 return snd_hda_ctl_add(codec, AE5_HEADPHONE_GAIN_ENUM, 6873 snd_ctl_new1(&knew, codec)); 6874 } 6875 6876 /* 6877 * Add sound filter enumerated control for the AE-5. This adds three different 6878 * settings: Slow Roll Off, Minimum Phase, and Fast Roll Off. From what I've 6879 * read into it, it changes the DAC's interpolation filter. 6880 */ 6881 static int ae5_add_sound_filter_enum(struct hda_codec *codec) 6882 { 6883 struct snd_kcontrol_new knew = 6884 HDA_CODEC_MUTE_MONO("AE-5: Sound Filter", 6885 AE5_SOUND_FILTER_ENUM, 1, 0, HDA_OUTPUT); 6886 knew.info = ae5_sound_filter_info; 6887 knew.get = ae5_sound_filter_get; 6888 knew.put = ae5_sound_filter_put; 6889 return snd_hda_ctl_add(codec, AE5_SOUND_FILTER_ENUM, 6890 snd_ctl_new1(&knew, codec)); 6891 } 6892 6893 static int zxr_add_headphone_gain_switch(struct hda_codec *codec) 6894 { 6895 struct snd_kcontrol_new knew = 6896 CA0132_CODEC_MUTE_MONO("ZxR: 600 Ohm Gain", 6897 ZXR_HEADPHONE_GAIN, 1, HDA_OUTPUT); 6898 6899 return snd_hda_ctl_add(codec, ZXR_HEADPHONE_GAIN, 6900 snd_ctl_new1(&knew, codec)); 6901 } 6902 6903 /* 6904 * Need to create follower controls for the alternate codecs that have surround 6905 * capabilities. 6906 */ 6907 static const char * const ca0132_alt_follower_pfxs[] = { 6908 "Front", "Surround", "Center", "LFE", NULL, 6909 }; 6910 6911 /* 6912 * Also need special channel map, because the default one is incorrect. 6913 * I think this has to do with the pin for rear surround being 0x11, 6914 * and the center/lfe being 0x10. Usually the pin order is the opposite. 6915 */ 6916 static const struct snd_pcm_chmap_elem ca0132_alt_chmaps[] = { 6917 { .channels = 2, 6918 .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } }, 6919 { .channels = 4, 6920 .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR, 6921 SNDRV_CHMAP_RL, SNDRV_CHMAP_RR } }, 6922 { .channels = 6, 6923 .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR, 6924 SNDRV_CHMAP_FC, SNDRV_CHMAP_LFE, 6925 SNDRV_CHMAP_RL, SNDRV_CHMAP_RR } }, 6926 { } 6927 }; 6928 6929 /* Add the correct chmap for streams with 6 channels. */ 6930 static void ca0132_alt_add_chmap_ctls(struct hda_codec *codec) 6931 { 6932 int err = 0; 6933 struct hda_pcm *pcm; 6934 6935 list_for_each_entry(pcm, &codec->pcm_list_head, list) { 6936 struct hda_pcm_stream *hinfo = 6937 &pcm->stream[SNDRV_PCM_STREAM_PLAYBACK]; 6938 struct snd_pcm_chmap *chmap; 6939 const struct snd_pcm_chmap_elem *elem; 6940 6941 elem = ca0132_alt_chmaps; 6942 if (hinfo->channels_max == 6) { 6943 err = snd_pcm_add_chmap_ctls(pcm->pcm, 6944 SNDRV_PCM_STREAM_PLAYBACK, 6945 elem, hinfo->channels_max, 0, &chmap); 6946 if (err < 0) 6947 codec_dbg(codec, "snd_pcm_add_chmap_ctls failed!"); 6948 } 6949 } 6950 } 6951 6952 /* 6953 * When changing Node IDs for Mixer Controls below, make sure to update 6954 * Node IDs in ca0132_config() as well. 6955 */ 6956 static const struct snd_kcontrol_new ca0132_mixer[] = { 6957 CA0132_CODEC_VOL("Master Playback Volume", VNID_SPK, HDA_OUTPUT), 6958 CA0132_CODEC_MUTE("Master Playback Switch", VNID_SPK, HDA_OUTPUT), 6959 CA0132_CODEC_VOL("Capture Volume", VNID_MIC, HDA_INPUT), 6960 CA0132_CODEC_MUTE("Capture Switch", VNID_MIC, HDA_INPUT), 6961 HDA_CODEC_VOLUME("Analog-Mic2 Capture Volume", 0x08, 0, HDA_INPUT), 6962 HDA_CODEC_MUTE("Analog-Mic2 Capture Switch", 0x08, 0, HDA_INPUT), 6963 HDA_CODEC_VOLUME("What U Hear Capture Volume", 0x0a, 0, HDA_INPUT), 6964 HDA_CODEC_MUTE("What U Hear Capture Switch", 0x0a, 0, HDA_INPUT), 6965 CA0132_CODEC_MUTE_MONO("Mic1-Boost (30dB) Capture Switch", 6966 0x12, 1, HDA_INPUT), 6967 CA0132_CODEC_MUTE_MONO("HP/Speaker Playback Switch", 6968 VNID_HP_SEL, 1, HDA_OUTPUT), 6969 CA0132_CODEC_MUTE_MONO("AMic1/DMic Capture Switch", 6970 VNID_AMIC1_SEL, 1, HDA_INPUT), 6971 CA0132_CODEC_MUTE_MONO("HP/Speaker Auto Detect Playback Switch", 6972 VNID_HP_ASEL, 1, HDA_OUTPUT), 6973 CA0132_CODEC_MUTE_MONO("AMic1/DMic Auto Detect Capture Switch", 6974 VNID_AMIC1_ASEL, 1, HDA_INPUT), 6975 { } /* end */ 6976 }; 6977 6978 /* 6979 * Desktop specific control mixer. Removes auto-detect for mic, and adds 6980 * surround controls. Also sets both the Front Playback and Capture Volume 6981 * controls to alt so they set the DSP's decibel level. 6982 */ 6983 static const struct snd_kcontrol_new desktop_mixer[] = { 6984 CA0132_ALT_CODEC_VOL("Front Playback Volume", 0x02, HDA_OUTPUT), 6985 CA0132_CODEC_MUTE("Front Playback Switch", VNID_SPK, HDA_OUTPUT), 6986 HDA_CODEC_VOLUME("Surround Playback Volume", 0x04, 0, HDA_OUTPUT), 6987 HDA_CODEC_MUTE("Surround Playback Switch", 0x04, 0, HDA_OUTPUT), 6988 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x03, 1, 0, HDA_OUTPUT), 6989 HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x03, 1, 0, HDA_OUTPUT), 6990 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x03, 2, 0, HDA_OUTPUT), 6991 HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x03, 2, 0, HDA_OUTPUT), 6992 CA0132_ALT_CODEC_VOL("Capture Volume", 0x07, HDA_INPUT), 6993 CA0132_CODEC_MUTE("Capture Switch", VNID_MIC, HDA_INPUT), 6994 HDA_CODEC_VOLUME("What U Hear Capture Volume", 0x0a, 0, HDA_INPUT), 6995 HDA_CODEC_MUTE("What U Hear Capture Switch", 0x0a, 0, HDA_INPUT), 6996 CA0132_CODEC_MUTE_MONO("HP/Speaker Auto Detect Playback Switch", 6997 VNID_HP_ASEL, 1, HDA_OUTPUT), 6998 { } /* end */ 6999 }; 7000 7001 /* 7002 * Same as the Sound Blaster Z, except doesn't use the alt volume for capture 7003 * because it doesn't set decibel levels for the DSP for capture. 7004 */ 7005 static const struct snd_kcontrol_new r3di_mixer[] = { 7006 CA0132_ALT_CODEC_VOL("Front Playback Volume", 0x02, HDA_OUTPUT), 7007 CA0132_CODEC_MUTE("Front Playback Switch", VNID_SPK, HDA_OUTPUT), 7008 HDA_CODEC_VOLUME("Surround Playback Volume", 0x04, 0, HDA_OUTPUT), 7009 HDA_CODEC_MUTE("Surround Playback Switch", 0x04, 0, HDA_OUTPUT), 7010 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x03, 1, 0, HDA_OUTPUT), 7011 HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x03, 1, 0, HDA_OUTPUT), 7012 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x03, 2, 0, HDA_OUTPUT), 7013 HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x03, 2, 0, HDA_OUTPUT), 7014 CA0132_CODEC_VOL("Capture Volume", VNID_MIC, HDA_INPUT), 7015 CA0132_CODEC_MUTE("Capture Switch", VNID_MIC, HDA_INPUT), 7016 HDA_CODEC_VOLUME("What U Hear Capture Volume", 0x0a, 0, HDA_INPUT), 7017 HDA_CODEC_MUTE("What U Hear Capture Switch", 0x0a, 0, HDA_INPUT), 7018 CA0132_CODEC_MUTE_MONO("HP/Speaker Auto Detect Playback Switch", 7019 VNID_HP_ASEL, 1, HDA_OUTPUT), 7020 { } /* end */ 7021 }; 7022 7023 static int ca0132_build_controls(struct hda_codec *codec) 7024 { 7025 struct ca0132_spec *spec = codec->spec; 7026 int i, num_fx, num_sliders; 7027 int err = 0; 7028 7029 /* Add Mixer controls */ 7030 for (i = 0; i < spec->num_mixers; i++) { 7031 err = snd_hda_add_new_ctls(codec, spec->mixers[i]); 7032 if (err < 0) 7033 return err; 7034 } 7035 /* Setup vmaster with surround followers for desktop ca0132 devices */ 7036 if (ca0132_use_alt_functions(spec)) { 7037 snd_hda_set_vmaster_tlv(codec, spec->dacs[0], HDA_OUTPUT, 7038 spec->tlv); 7039 snd_hda_add_vmaster(codec, "Master Playback Volume", 7040 spec->tlv, ca0132_alt_follower_pfxs, 7041 "Playback Volume", 0); 7042 err = __snd_hda_add_vmaster(codec, "Master Playback Switch", 7043 NULL, ca0132_alt_follower_pfxs, 7044 "Playback Switch", 7045 true, 0, &spec->vmaster_mute.sw_kctl); 7046 if (err < 0) 7047 return err; 7048 } 7049 7050 /* Add in and out effects controls. 7051 * VoiceFX, PE and CrystalVoice are added separately. 7052 */ 7053 num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT; 7054 for (i = 0; i < num_fx; i++) { 7055 /* Desktop cards break if Echo Cancellation is used. */ 7056 if (ca0132_use_pci_mmio(spec)) { 7057 if (i == (ECHO_CANCELLATION - IN_EFFECT_START_NID + 7058 OUT_EFFECTS_COUNT)) 7059 continue; 7060 } 7061 7062 err = add_fx_switch(codec, ca0132_effects[i].nid, 7063 ca0132_effects[i].name, 7064 ca0132_effects[i].direct); 7065 if (err < 0) 7066 return err; 7067 } 7068 /* 7069 * If codec has use_alt_controls set to true, add effect level sliders, 7070 * EQ presets, and Smart Volume presets. Also, change names to add FX 7071 * prefix, and change PlayEnhancement and CrystalVoice to match. 7072 */ 7073 if (ca0132_use_alt_controls(spec)) { 7074 err = ca0132_alt_add_svm_enum(codec); 7075 if (err < 0) 7076 return err; 7077 7078 err = add_ca0132_alt_eq_presets(codec); 7079 if (err < 0) 7080 return err; 7081 7082 err = add_fx_switch(codec, PLAY_ENHANCEMENT, 7083 "Enable OutFX", 0); 7084 if (err < 0) 7085 return err; 7086 7087 err = add_fx_switch(codec, CRYSTAL_VOICE, 7088 "Enable InFX", 1); 7089 if (err < 0) 7090 return err; 7091 7092 num_sliders = OUT_EFFECTS_COUNT - 1; 7093 for (i = 0; i < num_sliders; i++) { 7094 err = ca0132_alt_add_effect_slider(codec, 7095 ca0132_effects[i].nid, 7096 ca0132_effects[i].name, 7097 ca0132_effects[i].direct); 7098 if (err < 0) 7099 return err; 7100 } 7101 7102 err = ca0132_alt_add_effect_slider(codec, XBASS_XOVER, 7103 "X-Bass Crossover", EFX_DIR_OUT); 7104 7105 if (err < 0) 7106 return err; 7107 } else { 7108 err = add_fx_switch(codec, PLAY_ENHANCEMENT, 7109 "PlayEnhancement", 0); 7110 if (err < 0) 7111 return err; 7112 7113 err = add_fx_switch(codec, CRYSTAL_VOICE, 7114 "CrystalVoice", 1); 7115 if (err < 0) 7116 return err; 7117 } 7118 err = add_voicefx(codec); 7119 if (err < 0) 7120 return err; 7121 7122 /* 7123 * If the codec uses alt_functions, you need the enumerated controls 7124 * to select the new outputs and inputs, plus add the new mic boost 7125 * setting control. 7126 */ 7127 if (ca0132_use_alt_functions(spec)) { 7128 err = ca0132_alt_add_output_enum(codec); 7129 if (err < 0) 7130 return err; 7131 err = ca0132_alt_add_speaker_channel_cfg_enum(codec); 7132 if (err < 0) 7133 return err; 7134 err = ca0132_alt_add_front_full_range_switch(codec); 7135 if (err < 0) 7136 return err; 7137 err = ca0132_alt_add_rear_full_range_switch(codec); 7138 if (err < 0) 7139 return err; 7140 err = ca0132_alt_add_bass_redirection_crossover(codec); 7141 if (err < 0) 7142 return err; 7143 err = ca0132_alt_add_bass_redirection_switch(codec); 7144 if (err < 0) 7145 return err; 7146 err = ca0132_alt_add_mic_boost_enum(codec); 7147 if (err < 0) 7148 return err; 7149 /* 7150 * ZxR only has microphone input, there is no front panel 7151 * header on the card, and aux-in is handled by the DBPro board. 7152 */ 7153 if (ca0132_quirk(spec) != QUIRK_ZXR) { 7154 err = ca0132_alt_add_input_enum(codec); 7155 if (err < 0) 7156 return err; 7157 } 7158 } 7159 7160 switch (ca0132_quirk(spec)) { 7161 case QUIRK_AE5: 7162 case QUIRK_AE7: 7163 err = ae5_add_headphone_gain_enum(codec); 7164 if (err < 0) 7165 return err; 7166 err = ae5_add_sound_filter_enum(codec); 7167 if (err < 0) 7168 return err; 7169 break; 7170 case QUIRK_ZXR: 7171 err = zxr_add_headphone_gain_switch(codec); 7172 if (err < 0) 7173 return err; 7174 break; 7175 default: 7176 break; 7177 } 7178 7179 #ifdef ENABLE_TUNING_CONTROLS 7180 add_tuning_ctls(codec); 7181 #endif 7182 7183 err = snd_hda_jack_add_kctls(codec, &spec->autocfg); 7184 if (err < 0) 7185 return err; 7186 7187 if (spec->dig_out) { 7188 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, 7189 spec->dig_out); 7190 if (err < 0) 7191 return err; 7192 err = snd_hda_create_spdif_share_sw(codec, &spec->multiout); 7193 if (err < 0) 7194 return err; 7195 /* spec->multiout.share_spdif = 1; */ 7196 } 7197 7198 if (spec->dig_in) { 7199 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); 7200 if (err < 0) 7201 return err; 7202 } 7203 7204 if (ca0132_use_alt_functions(spec)) 7205 ca0132_alt_add_chmap_ctls(codec); 7206 7207 return 0; 7208 } 7209 7210 static int dbpro_build_controls(struct hda_codec *codec) 7211 { 7212 struct ca0132_spec *spec = codec->spec; 7213 int err = 0; 7214 7215 if (spec->dig_out) { 7216 err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out, 7217 spec->dig_out); 7218 if (err < 0) 7219 return err; 7220 } 7221 7222 if (spec->dig_in) { 7223 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in); 7224 if (err < 0) 7225 return err; 7226 } 7227 7228 return 0; 7229 } 7230 7231 /* 7232 * PCM 7233 */ 7234 static const struct hda_pcm_stream ca0132_pcm_analog_playback = { 7235 .substreams = 1, 7236 .channels_min = 2, 7237 .channels_max = 6, 7238 .ops = { 7239 .prepare = ca0132_playback_pcm_prepare, 7240 .cleanup = ca0132_playback_pcm_cleanup, 7241 .get_delay = ca0132_playback_pcm_delay, 7242 }, 7243 }; 7244 7245 static const struct hda_pcm_stream ca0132_pcm_analog_capture = { 7246 .substreams = 1, 7247 .channels_min = 2, 7248 .channels_max = 2, 7249 .ops = { 7250 .prepare = ca0132_capture_pcm_prepare, 7251 .cleanup = ca0132_capture_pcm_cleanup, 7252 .get_delay = ca0132_capture_pcm_delay, 7253 }, 7254 }; 7255 7256 static const struct hda_pcm_stream ca0132_pcm_digital_playback = { 7257 .substreams = 1, 7258 .channels_min = 2, 7259 .channels_max = 2, 7260 .ops = { 7261 .open = ca0132_dig_playback_pcm_open, 7262 .close = ca0132_dig_playback_pcm_close, 7263 .prepare = ca0132_dig_playback_pcm_prepare, 7264 .cleanup = ca0132_dig_playback_pcm_cleanup 7265 }, 7266 }; 7267 7268 static const struct hda_pcm_stream ca0132_pcm_digital_capture = { 7269 .substreams = 1, 7270 .channels_min = 2, 7271 .channels_max = 2, 7272 }; 7273 7274 static int ca0132_build_pcms(struct hda_codec *codec) 7275 { 7276 struct ca0132_spec *spec = codec->spec; 7277 struct hda_pcm *info; 7278 7279 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog"); 7280 if (!info) 7281 return -ENOMEM; 7282 if (ca0132_use_alt_functions(spec)) { 7283 info->own_chmap = true; 7284 info->stream[SNDRV_PCM_STREAM_PLAYBACK].chmap 7285 = ca0132_alt_chmaps; 7286 } 7287 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = ca0132_pcm_analog_playback; 7288 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->dacs[0]; 7289 info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max = 7290 spec->multiout.max_channels; 7291 info->stream[SNDRV_PCM_STREAM_CAPTURE] = ca0132_pcm_analog_capture; 7292 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = 1; 7293 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[0]; 7294 7295 /* With the DSP enabled, desktops don't use this ADC. */ 7296 if (!ca0132_use_alt_functions(spec)) { 7297 info = snd_hda_codec_pcm_new(codec, "CA0132 Analog Mic-In2"); 7298 if (!info) 7299 return -ENOMEM; 7300 info->stream[SNDRV_PCM_STREAM_CAPTURE] = 7301 ca0132_pcm_analog_capture; 7302 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = 1; 7303 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[1]; 7304 } 7305 7306 info = snd_hda_codec_pcm_new(codec, "CA0132 What U Hear"); 7307 if (!info) 7308 return -ENOMEM; 7309 info->stream[SNDRV_PCM_STREAM_CAPTURE] = ca0132_pcm_analog_capture; 7310 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = 1; 7311 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[2]; 7312 7313 if (!spec->dig_out && !spec->dig_in) 7314 return 0; 7315 7316 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); 7317 if (!info) 7318 return -ENOMEM; 7319 info->pcm_type = HDA_PCM_TYPE_SPDIF; 7320 if (spec->dig_out) { 7321 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = 7322 ca0132_pcm_digital_playback; 7323 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->dig_out; 7324 } 7325 if (spec->dig_in) { 7326 info->stream[SNDRV_PCM_STREAM_CAPTURE] = 7327 ca0132_pcm_digital_capture; 7328 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in; 7329 } 7330 7331 return 0; 7332 } 7333 7334 static int dbpro_build_pcms(struct hda_codec *codec) 7335 { 7336 struct ca0132_spec *spec = codec->spec; 7337 struct hda_pcm *info; 7338 7339 info = snd_hda_codec_pcm_new(codec, "CA0132 Alt Analog"); 7340 if (!info) 7341 return -ENOMEM; 7342 info->stream[SNDRV_PCM_STREAM_CAPTURE] = ca0132_pcm_analog_capture; 7343 info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = 1; 7344 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[0]; 7345 7346 7347 if (!spec->dig_out && !spec->dig_in) 7348 return 0; 7349 7350 info = snd_hda_codec_pcm_new(codec, "CA0132 Digital"); 7351 if (!info) 7352 return -ENOMEM; 7353 info->pcm_type = HDA_PCM_TYPE_SPDIF; 7354 if (spec->dig_out) { 7355 info->stream[SNDRV_PCM_STREAM_PLAYBACK] = 7356 ca0132_pcm_digital_playback; 7357 info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->dig_out; 7358 } 7359 if (spec->dig_in) { 7360 info->stream[SNDRV_PCM_STREAM_CAPTURE] = 7361 ca0132_pcm_digital_capture; 7362 info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in; 7363 } 7364 7365 return 0; 7366 } 7367 7368 static void init_output(struct hda_codec *codec, hda_nid_t pin, hda_nid_t dac) 7369 { 7370 if (pin) { 7371 snd_hda_set_pin_ctl(codec, pin, PIN_HP); 7372 if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP) 7373 snd_hda_codec_write(codec, pin, 0, 7374 AC_VERB_SET_AMP_GAIN_MUTE, 7375 AMP_OUT_UNMUTE); 7376 } 7377 if (dac && (get_wcaps(codec, dac) & AC_WCAP_OUT_AMP)) 7378 snd_hda_codec_write(codec, dac, 0, 7379 AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO); 7380 } 7381 7382 static void init_input(struct hda_codec *codec, hda_nid_t pin, hda_nid_t adc) 7383 { 7384 if (pin) { 7385 snd_hda_set_pin_ctl(codec, pin, PIN_VREF80); 7386 if (get_wcaps(codec, pin) & AC_WCAP_IN_AMP) 7387 snd_hda_codec_write(codec, pin, 0, 7388 AC_VERB_SET_AMP_GAIN_MUTE, 7389 AMP_IN_UNMUTE(0)); 7390 } 7391 if (adc && (get_wcaps(codec, adc) & AC_WCAP_IN_AMP)) { 7392 snd_hda_codec_write(codec, adc, 0, AC_VERB_SET_AMP_GAIN_MUTE, 7393 AMP_IN_UNMUTE(0)); 7394 7395 /* init to 0 dB and unmute. */ 7396 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, 7397 HDA_AMP_VOLMASK, 0x5a); 7398 snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0, 7399 HDA_AMP_MUTE, 0); 7400 } 7401 } 7402 7403 static void refresh_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir) 7404 { 7405 unsigned int caps; 7406 7407 caps = snd_hda_param_read(codec, nid, dir == HDA_OUTPUT ? 7408 AC_PAR_AMP_OUT_CAP : AC_PAR_AMP_IN_CAP); 7409 snd_hda_override_amp_caps(codec, nid, dir, caps); 7410 } 7411 7412 /* 7413 * Switch between Digital built-in mic and analog mic. 7414 */ 7415 static void ca0132_set_dmic(struct hda_codec *codec, int enable) 7416 { 7417 struct ca0132_spec *spec = codec->spec; 7418 unsigned int tmp; 7419 u8 val; 7420 unsigned int oldval; 7421 7422 codec_dbg(codec, "ca0132_set_dmic: enable=%d\n", enable); 7423 7424 oldval = stop_mic1(codec); 7425 ca0132_set_vipsource(codec, 0); 7426 if (enable) { 7427 /* set DMic input as 2-ch */ 7428 tmp = FLOAT_TWO; 7429 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 7430 7431 val = spec->dmic_ctl; 7432 val |= 0x80; 7433 snd_hda_codec_write(codec, spec->input_pins[0], 0, 7434 VENDOR_CHIPIO_DMIC_CTL_SET, val); 7435 7436 if (!(spec->dmic_ctl & 0x20)) 7437 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 1); 7438 } else { 7439 /* set AMic input as mono */ 7440 tmp = FLOAT_ONE; 7441 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 7442 7443 val = spec->dmic_ctl; 7444 /* clear bit7 and bit5 to disable dmic */ 7445 val &= 0x5f; 7446 snd_hda_codec_write(codec, spec->input_pins[0], 0, 7447 VENDOR_CHIPIO_DMIC_CTL_SET, val); 7448 7449 if (!(spec->dmic_ctl & 0x20)) 7450 chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 0); 7451 } 7452 ca0132_set_vipsource(codec, 1); 7453 resume_mic1(codec, oldval); 7454 } 7455 7456 /* 7457 * Initialization for Digital Mic. 7458 */ 7459 static void ca0132_init_dmic(struct hda_codec *codec) 7460 { 7461 struct ca0132_spec *spec = codec->spec; 7462 u8 val; 7463 7464 /* Setup Digital Mic here, but don't enable. 7465 * Enable based on jack detect. 7466 */ 7467 7468 /* MCLK uses MPIO1, set to enable. 7469 * Bit 2-0: MPIO select 7470 * Bit 3: set to disable 7471 * Bit 7-4: reserved 7472 */ 7473 val = 0x01; 7474 snd_hda_codec_write(codec, spec->input_pins[0], 0, 7475 VENDOR_CHIPIO_DMIC_MCLK_SET, val); 7476 7477 /* Data1 uses MPIO3. Data2 not use 7478 * Bit 2-0: Data1 MPIO select 7479 * Bit 3: set disable Data1 7480 * Bit 6-4: Data2 MPIO select 7481 * Bit 7: set disable Data2 7482 */ 7483 val = 0x83; 7484 snd_hda_codec_write(codec, spec->input_pins[0], 0, 7485 VENDOR_CHIPIO_DMIC_PIN_SET, val); 7486 7487 /* Use Ch-0 and Ch-1. Rate is 48K, mode 1. Disable DMic first. 7488 * Bit 3-0: Channel mask 7489 * Bit 4: set for 48KHz, clear for 32KHz 7490 * Bit 5: mode 7491 * Bit 6: set to select Data2, clear for Data1 7492 * Bit 7: set to enable DMic, clear for AMic 7493 */ 7494 if (ca0132_quirk(spec) == QUIRK_ALIENWARE_M17XR4) 7495 val = 0x33; 7496 else 7497 val = 0x23; 7498 /* keep a copy of dmic ctl val for enable/disable dmic purpuse */ 7499 spec->dmic_ctl = val; 7500 snd_hda_codec_write(codec, spec->input_pins[0], 0, 7501 VENDOR_CHIPIO_DMIC_CTL_SET, val); 7502 } 7503 7504 /* 7505 * Initialization for Analog Mic 2 7506 */ 7507 static void ca0132_init_analog_mic2(struct hda_codec *codec) 7508 { 7509 struct ca0132_spec *spec = codec->spec; 7510 7511 mutex_lock(&spec->chipio_mutex); 7512 7513 chipio_8051_write_exram_no_mutex(codec, 0x1920, 0x00); 7514 chipio_8051_write_exram_no_mutex(codec, 0x192d, 0x00); 7515 7516 mutex_unlock(&spec->chipio_mutex); 7517 } 7518 7519 static void ca0132_refresh_widget_caps(struct hda_codec *codec) 7520 { 7521 struct ca0132_spec *spec = codec->spec; 7522 int i; 7523 7524 codec_dbg(codec, "ca0132_refresh_widget_caps.\n"); 7525 snd_hda_codec_update_widgets(codec); 7526 7527 for (i = 0; i < spec->multiout.num_dacs; i++) 7528 refresh_amp_caps(codec, spec->dacs[i], HDA_OUTPUT); 7529 7530 for (i = 0; i < spec->num_outputs; i++) 7531 refresh_amp_caps(codec, spec->out_pins[i], HDA_OUTPUT); 7532 7533 for (i = 0; i < spec->num_inputs; i++) { 7534 refresh_amp_caps(codec, spec->adcs[i], HDA_INPUT); 7535 refresh_amp_caps(codec, spec->input_pins[i], HDA_INPUT); 7536 } 7537 } 7538 7539 7540 /* If there is an active channel for some reason, find it and free it. */ 7541 static void ca0132_alt_free_active_dma_channels(struct hda_codec *codec) 7542 { 7543 unsigned int i, tmp; 7544 int status; 7545 7546 /* Read active DSPDMAC channel register. */ 7547 status = chipio_read(codec, DSPDMAC_CHNLSTART_MODULE_OFFSET, &tmp); 7548 if (status >= 0) { 7549 /* AND against 0xfff to get the active channel bits. */ 7550 tmp = tmp & 0xfff; 7551 7552 /* If there are no active channels, nothing to free. */ 7553 if (!tmp) 7554 return; 7555 } else { 7556 codec_dbg(codec, "%s: Failed to read active DSP DMA channel register.\n", 7557 __func__); 7558 return; 7559 } 7560 7561 /* 7562 * Check each DSP DMA channel for activity, and if the channel is 7563 * active, free it. 7564 */ 7565 for (i = 0; i < DSPDMAC_DMA_CFG_CHANNEL_COUNT; i++) { 7566 if (dsp_is_dma_active(codec, i)) { 7567 status = dspio_free_dma_chan(codec, i); 7568 if (status < 0) 7569 codec_dbg(codec, "%s: Failed to free active DSP DMA channel %d.\n", 7570 __func__, i); 7571 } 7572 } 7573 } 7574 7575 /* 7576 * In the case of CT_EXTENSIONS_ENABLE being set to 1, and the DSP being in 7577 * use, audio is no longer routed directly to the DAC/ADC from the HDA stream. 7578 * Instead, audio is now routed through the DSP's DMA controllers, which 7579 * the DSP is tasked with setting up itself. Through debugging, it seems the 7580 * cause of most of the no-audio on startup issues were due to improperly 7581 * configured DSP DMA channels. 7582 * 7583 * Normally, the DSP configures these the first time an HDA audio stream is 7584 * started post DSP firmware download. That is why creating a 'dummy' stream 7585 * worked in fixing the audio in some cases. This works most of the time, but 7586 * sometimes if a stream is started/stopped before the DSP can setup the DMA 7587 * configuration registers, it ends up in a broken state. Issues can also 7588 * arise if streams are started in an unusual order, i.e the audio output dma 7589 * channel being sandwiched between the mic1 and mic2 dma channels. 7590 * 7591 * The solution to this is to make sure that the DSP has no DMA channels 7592 * in use post DSP firmware download, and then to manually start each default 7593 * DSP stream that uses the DMA channels. These are 0x0c, the audio output 7594 * stream, 0x03, analog mic 1, and 0x04, analog mic 2. 7595 */ 7596 static void ca0132_alt_start_dsp_audio_streams(struct hda_codec *codec) 7597 { 7598 static const unsigned int dsp_dma_stream_ids[] = { 0x0c, 0x03, 0x04 }; 7599 struct ca0132_spec *spec = codec->spec; 7600 unsigned int i, tmp; 7601 7602 /* 7603 * Check if any of the default streams are active, and if they are, 7604 * stop them. 7605 */ 7606 mutex_lock(&spec->chipio_mutex); 7607 7608 for (i = 0; i < ARRAY_SIZE(dsp_dma_stream_ids); i++) { 7609 chipio_get_stream_control(codec, dsp_dma_stream_ids[i], &tmp); 7610 7611 if (tmp) { 7612 chipio_set_stream_control(codec, 7613 dsp_dma_stream_ids[i], 0); 7614 } 7615 } 7616 7617 mutex_unlock(&spec->chipio_mutex); 7618 7619 /* 7620 * If all DSP streams are inactive, there should be no active DSP DMA 7621 * channels. Check and make sure this is the case, and if it isn't, 7622 * free any active channels. 7623 */ 7624 ca0132_alt_free_active_dma_channels(codec); 7625 7626 mutex_lock(&spec->chipio_mutex); 7627 7628 /* Make sure stream 0x0c is six channels. */ 7629 chipio_set_stream_channels(codec, 0x0c, 6); 7630 7631 for (i = 0; i < ARRAY_SIZE(dsp_dma_stream_ids); i++) { 7632 chipio_set_stream_control(codec, 7633 dsp_dma_stream_ids[i], 1); 7634 7635 /* Give the DSP some time to setup the DMA channel. */ 7636 msleep(75); 7637 } 7638 7639 mutex_unlock(&spec->chipio_mutex); 7640 } 7641 7642 /* 7643 * The region of ChipIO memory from 0x190000-0x1903fc is a sort of 'audio 7644 * router', where each entry represents a 48khz audio channel, with a format 7645 * of an 8-bit destination, an 8-bit source, and an unknown 2-bit number 7646 * value. The 2-bit number value is seemingly 0 if inactive, 1 if active, 7647 * and 3 if it's using Sample Rate Converter ports. 7648 * An example is: 7649 * 0x0001f8c0 7650 * In this case, f8 is the destination, and c0 is the source. The number value 7651 * is 1. 7652 * This region of memory is normally managed internally by the 8051, where 7653 * the region of exram memory from 0x1477-0x1575 has each byte represent an 7654 * entry within the 0x190000 range, and when a range of entries is in use, the 7655 * ending value is overwritten with 0xff. 7656 * 0x1578 in exram is a table of 0x25 entries, corresponding to the ChipIO 7657 * streamID's, where each entry is a starting 0x190000 port offset. 7658 * 0x159d in exram is the same as 0x1578, except it contains the ending port 7659 * offset for the corresponding streamID. 7660 * 7661 * On certain cards, such as the SBZ/ZxR/AE7, these are originally setup by 7662 * the 8051, then manually overwritten to remap the ports to work with the 7663 * new DACs. 7664 * 7665 * Currently known portID's: 7666 * 0x00-0x1f: HDA audio stream input/output ports. 7667 * 0x80-0xbf: Sample rate converter input/outputs. Only valid ports seem to 7668 * have the lower-nibble set to 0x1, 0x2, and 0x9. 7669 * 0xc0-0xdf: DSP DMA input/output ports. Dynamically assigned. 7670 * 0xe0-0xff: DAC/ADC audio input/output ports. 7671 * 7672 * Currently known streamID's: 7673 * 0x03: Mic1 ADC to DSP. 7674 * 0x04: Mic2 ADC to DSP. 7675 * 0x05: HDA node 0x02 audio stream to DSP. 7676 * 0x0f: DSP Mic exit to HDA node 0x07. 7677 * 0x0c: DSP processed audio to DACs. 7678 * 0x14: DAC0, front L/R. 7679 * 7680 * It is possible to route the HDA audio streams directly to the DAC and 7681 * bypass the DSP entirely, with the only downside being that since the DSP 7682 * does volume control, the only volume control you'll get is through PCM on 7683 * the PC side, in the same way volume is handled for optical out. This may be 7684 * useful for debugging. 7685 */ 7686 static void chipio_remap_stream(struct hda_codec *codec, 7687 const struct chipio_stream_remap_data *remap_data) 7688 { 7689 unsigned int i, stream_offset; 7690 7691 /* Get the starting port for the stream to be remapped. */ 7692 chipio_8051_read_exram(codec, 0x1578 + remap_data->stream_id, 7693 &stream_offset); 7694 7695 /* 7696 * Check if the stream's port value is 0xff, because the 8051 may not 7697 * have gotten around to setting up the stream yet. Wait until it's 7698 * setup to remap it's ports. 7699 */ 7700 if (stream_offset == 0xff) { 7701 for (i = 0; i < 5; i++) { 7702 msleep(25); 7703 7704 chipio_8051_read_exram(codec, 0x1578 + remap_data->stream_id, 7705 &stream_offset); 7706 7707 if (stream_offset != 0xff) 7708 break; 7709 } 7710 } 7711 7712 if (stream_offset == 0xff) { 7713 codec_info(codec, "%s: Stream 0x%02x ports aren't allocated, remap failed!\n", 7714 __func__, remap_data->stream_id); 7715 return; 7716 } 7717 7718 /* Offset isn't in bytes, its in 32-bit words, so multiply it by 4. */ 7719 stream_offset *= 0x04; 7720 stream_offset += 0x190000; 7721 7722 for (i = 0; i < remap_data->count; i++) { 7723 chipio_write_no_mutex(codec, 7724 stream_offset + remap_data->offset[i], 7725 remap_data->value[i]); 7726 } 7727 7728 /* Update stream map configuration. */ 7729 chipio_write_no_mutex(codec, 0x19042c, 0x00000001); 7730 } 7731 7732 /* 7733 * Default speaker tuning values setup for alternative codecs. 7734 */ 7735 static const unsigned int sbz_default_delay_values[] = { 7736 /* Non-zero values are floating point 0.000198. */ 7737 0x394f9e38, 0x394f9e38, 0x00000000, 0x00000000, 0x00000000, 0x00000000 7738 }; 7739 7740 static const unsigned int zxr_default_delay_values[] = { 7741 /* Non-zero values are floating point 0.000220. */ 7742 0x00000000, 0x00000000, 0x3966afcd, 0x3966afcd, 0x3966afcd, 0x3966afcd 7743 }; 7744 7745 static const unsigned int ae5_default_delay_values[] = { 7746 /* Non-zero values are floating point 0.000100. */ 7747 0x00000000, 0x00000000, 0x38d1b717, 0x38d1b717, 0x38d1b717, 0x38d1b717 7748 }; 7749 7750 /* 7751 * If we never change these, probably only need them on initialization. 7752 */ 7753 static void ca0132_alt_init_speaker_tuning(struct hda_codec *codec) 7754 { 7755 struct ca0132_spec *spec = codec->spec; 7756 unsigned int i, tmp, start_req, end_req; 7757 const unsigned int *values; 7758 7759 switch (ca0132_quirk(spec)) { 7760 case QUIRK_SBZ: 7761 values = sbz_default_delay_values; 7762 break; 7763 case QUIRK_ZXR: 7764 values = zxr_default_delay_values; 7765 break; 7766 case QUIRK_AE5: 7767 case QUIRK_AE7: 7768 values = ae5_default_delay_values; 7769 break; 7770 default: 7771 values = sbz_default_delay_values; 7772 break; 7773 } 7774 7775 tmp = FLOAT_ZERO; 7776 dspio_set_uint_param(codec, 0x96, SPEAKER_TUNING_ENABLE_CENTER_EQ, tmp); 7777 7778 start_req = SPEAKER_TUNING_FRONT_LEFT_VOL_LEVEL; 7779 end_req = SPEAKER_TUNING_REAR_RIGHT_VOL_LEVEL; 7780 for (i = start_req; i < end_req + 1; i++) 7781 dspio_set_uint_param(codec, 0x96, i, tmp); 7782 7783 start_req = SPEAKER_TUNING_FRONT_LEFT_INVERT; 7784 end_req = SPEAKER_TUNING_REAR_RIGHT_INVERT; 7785 for (i = start_req; i < end_req + 1; i++) 7786 dspio_set_uint_param(codec, 0x96, i, tmp); 7787 7788 7789 for (i = 0; i < 6; i++) 7790 dspio_set_uint_param(codec, 0x96, 7791 SPEAKER_TUNING_FRONT_LEFT_DELAY + i, values[i]); 7792 } 7793 7794 /* 7795 * Initialize mic for non-chromebook ca0132 implementations. 7796 */ 7797 static void ca0132_alt_init_analog_mics(struct hda_codec *codec) 7798 { 7799 struct ca0132_spec *spec = codec->spec; 7800 unsigned int tmp; 7801 7802 /* Mic 1 Setup */ 7803 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); 7804 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); 7805 if (ca0132_quirk(spec) == QUIRK_R3DI) { 7806 chipio_set_conn_rate(codec, 0x0F, SR_96_000); 7807 tmp = FLOAT_ONE; 7808 } else 7809 tmp = FLOAT_THREE; 7810 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 7811 7812 /* Mic 2 setup (not present on desktop cards) */ 7813 chipio_set_conn_rate(codec, MEM_CONNID_MICIN2, SR_96_000); 7814 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2, SR_96_000); 7815 if (ca0132_quirk(spec) == QUIRK_R3DI) 7816 chipio_set_conn_rate(codec, 0x0F, SR_96_000); 7817 tmp = FLOAT_ZERO; 7818 dspio_set_uint_param(codec, 0x80, 0x01, tmp); 7819 } 7820 7821 /* 7822 * Sets the source of stream 0x14 to connpointID 0x48, and the destination 7823 * connpointID to 0x91. If this isn't done, the destination is 0x71, and 7824 * you get no sound. I'm guessing this has to do with the Sound Blaster Z 7825 * having an updated DAC, which changes the destination to that DAC. 7826 */ 7827 static void sbz_connect_streams(struct hda_codec *codec) 7828 { 7829 struct ca0132_spec *spec = codec->spec; 7830 7831 mutex_lock(&spec->chipio_mutex); 7832 7833 codec_dbg(codec, "Connect Streams entered, mutex locked and loaded.\n"); 7834 7835 /* This value is 0x43 for 96khz, and 0x83 for 192khz. */ 7836 chipio_write_no_mutex(codec, 0x18a020, 0x00000043); 7837 7838 /* Setup stream 0x14 with it's source and destination points */ 7839 chipio_set_stream_source_dest(codec, 0x14, 0x48, 0x91); 7840 chipio_set_conn_rate_no_mutex(codec, 0x48, SR_96_000); 7841 chipio_set_conn_rate_no_mutex(codec, 0x91, SR_96_000); 7842 chipio_set_stream_channels(codec, 0x14, 2); 7843 chipio_set_stream_control(codec, 0x14, 1); 7844 7845 codec_dbg(codec, "Connect Streams exited, mutex released.\n"); 7846 7847 mutex_unlock(&spec->chipio_mutex); 7848 } 7849 7850 /* 7851 * Write data through ChipIO to setup proper stream destinations. 7852 * Not sure how it exactly works, but it seems to direct data 7853 * to different destinations. Example is f8 to c0, e0 to c0. 7854 * All I know is, if you don't set these, you get no sound. 7855 */ 7856 static void sbz_chipio_startup_data(struct hda_codec *codec) 7857 { 7858 const struct chipio_stream_remap_data *dsp_out_remap_data; 7859 struct ca0132_spec *spec = codec->spec; 7860 7861 mutex_lock(&spec->chipio_mutex); 7862 codec_dbg(codec, "Startup Data entered, mutex locked and loaded.\n"); 7863 7864 /* Remap DAC0's output ports. */ 7865 chipio_remap_stream(codec, &stream_remap_data[0]); 7866 7867 /* Remap DSP audio output stream ports. */ 7868 switch (ca0132_quirk(spec)) { 7869 case QUIRK_SBZ: 7870 dsp_out_remap_data = &stream_remap_data[1]; 7871 break; 7872 7873 case QUIRK_ZXR: 7874 dsp_out_remap_data = &stream_remap_data[2]; 7875 break; 7876 7877 default: 7878 dsp_out_remap_data = NULL; 7879 break; 7880 } 7881 7882 if (dsp_out_remap_data) 7883 chipio_remap_stream(codec, dsp_out_remap_data); 7884 7885 codec_dbg(codec, "Startup Data exited, mutex released.\n"); 7886 mutex_unlock(&spec->chipio_mutex); 7887 } 7888 7889 static void ca0132_alt_dsp_initial_mic_setup(struct hda_codec *codec) 7890 { 7891 struct ca0132_spec *spec = codec->spec; 7892 unsigned int tmp; 7893 7894 chipio_set_stream_control(codec, 0x03, 0); 7895 chipio_set_stream_control(codec, 0x04, 0); 7896 7897 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); 7898 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); 7899 7900 tmp = FLOAT_THREE; 7901 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 7902 7903 chipio_set_stream_control(codec, 0x03, 1); 7904 chipio_set_stream_control(codec, 0x04, 1); 7905 7906 switch (ca0132_quirk(spec)) { 7907 case QUIRK_SBZ: 7908 chipio_write(codec, 0x18b098, 0x0000000c); 7909 chipio_write(codec, 0x18b09C, 0x0000000c); 7910 break; 7911 case QUIRK_AE5: 7912 chipio_write(codec, 0x18b098, 0x0000000c); 7913 chipio_write(codec, 0x18b09c, 0x0000004c); 7914 break; 7915 default: 7916 break; 7917 } 7918 } 7919 7920 static void ae5_post_dsp_register_set(struct hda_codec *codec) 7921 { 7922 struct ca0132_spec *spec = codec->spec; 7923 7924 chipio_8051_write_direct(codec, 0x93, 0x10); 7925 chipio_8051_write_pll_pmu(codec, 0x44, 0xc2); 7926 7927 writeb(0xff, spec->mem_base + 0x304); 7928 writeb(0xff, spec->mem_base + 0x304); 7929 writeb(0xff, spec->mem_base + 0x304); 7930 writeb(0xff, spec->mem_base + 0x304); 7931 writeb(0x00, spec->mem_base + 0x100); 7932 writeb(0xff, spec->mem_base + 0x304); 7933 writeb(0x00, spec->mem_base + 0x100); 7934 writeb(0xff, spec->mem_base + 0x304); 7935 writeb(0x00, spec->mem_base + 0x100); 7936 writeb(0xff, spec->mem_base + 0x304); 7937 writeb(0x00, spec->mem_base + 0x100); 7938 writeb(0xff, spec->mem_base + 0x304); 7939 7940 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x3f); 7941 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x3f); 7942 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); 7943 } 7944 7945 static void ae5_post_dsp_param_setup(struct hda_codec *codec) 7946 { 7947 /* 7948 * Param3 in the 8051's memory is represented by the ascii string 'mch' 7949 * which seems to be 'multichannel'. This is also mentioned in the 7950 * AE-5's registry values in Windows. 7951 */ 7952 chipio_set_control_param(codec, 3, 0); 7953 /* 7954 * I believe ASI is 'audio serial interface' and that it's used to 7955 * change colors on the external LED strip connected to the AE-5. 7956 */ 7957 chipio_set_control_flag(codec, CONTROL_FLAG_ASI_96KHZ, 1); 7958 7959 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x724, 0x83); 7960 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); 7961 7962 chipio_8051_write_exram(codec, 0xfa92, 0x22); 7963 } 7964 7965 static void ae5_post_dsp_pll_setup(struct hda_codec *codec) 7966 { 7967 chipio_8051_write_pll_pmu(codec, 0x41, 0xc8); 7968 chipio_8051_write_pll_pmu(codec, 0x45, 0xcc); 7969 chipio_8051_write_pll_pmu(codec, 0x40, 0xcb); 7970 chipio_8051_write_pll_pmu(codec, 0x43, 0xc7); 7971 chipio_8051_write_pll_pmu(codec, 0x51, 0x8d); 7972 } 7973 7974 static void ae5_post_dsp_stream_setup(struct hda_codec *codec) 7975 { 7976 struct ca0132_spec *spec = codec->spec; 7977 7978 mutex_lock(&spec->chipio_mutex); 7979 7980 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x725, 0x81); 7981 7982 chipio_set_conn_rate_no_mutex(codec, 0x70, SR_96_000); 7983 7984 chipio_set_stream_source_dest(codec, 0x5, 0x43, 0x0); 7985 7986 chipio_set_stream_source_dest(codec, 0x18, 0x9, 0xd0); 7987 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); 7988 chipio_set_stream_channels(codec, 0x18, 6); 7989 chipio_set_stream_control(codec, 0x18, 1); 7990 7991 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 4); 7992 7993 chipio_8051_write_pll_pmu_no_mutex(codec, 0x43, 0xc7); 7994 7995 ca0113_mmio_command_set(codec, 0x48, 0x01, 0x80); 7996 7997 mutex_unlock(&spec->chipio_mutex); 7998 } 7999 8000 static void ae5_post_dsp_startup_data(struct hda_codec *codec) 8001 { 8002 struct ca0132_spec *spec = codec->spec; 8003 8004 mutex_lock(&spec->chipio_mutex); 8005 8006 chipio_write_no_mutex(codec, 0x189000, 0x0001f101); 8007 chipio_write_no_mutex(codec, 0x189004, 0x0001f101); 8008 chipio_write_no_mutex(codec, 0x189024, 0x00014004); 8009 chipio_write_no_mutex(codec, 0x189028, 0x0002000f); 8010 8011 ca0113_mmio_command_set(codec, 0x48, 0x0a, 0x05); 8012 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); 8013 ca0113_mmio_command_set(codec, 0x48, 0x0b, 0x12); 8014 ca0113_mmio_command_set(codec, 0x48, 0x04, 0x00); 8015 ca0113_mmio_command_set(codec, 0x48, 0x06, 0x48); 8016 ca0113_mmio_command_set(codec, 0x48, 0x0a, 0x05); 8017 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); 8018 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); 8019 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); 8020 ca0113_mmio_gpio_set(codec, 0, true); 8021 ca0113_mmio_gpio_set(codec, 1, true); 8022 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x80); 8023 8024 chipio_write_no_mutex(codec, 0x18b03c, 0x00000012); 8025 8026 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); 8027 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); 8028 8029 mutex_unlock(&spec->chipio_mutex); 8030 } 8031 8032 static void ae7_post_dsp_setup_ports(struct hda_codec *codec) 8033 { 8034 struct ca0132_spec *spec = codec->spec; 8035 8036 mutex_lock(&spec->chipio_mutex); 8037 8038 /* Seems to share the same port remapping as the SBZ. */ 8039 chipio_remap_stream(codec, &stream_remap_data[1]); 8040 8041 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); 8042 ca0113_mmio_command_set(codec, 0x48, 0x0d, 0x40); 8043 ca0113_mmio_command_set(codec, 0x48, 0x17, 0x00); 8044 ca0113_mmio_command_set(codec, 0x48, 0x19, 0x00); 8045 ca0113_mmio_command_set(codec, 0x48, 0x11, 0xff); 8046 ca0113_mmio_command_set(codec, 0x48, 0x12, 0xff); 8047 ca0113_mmio_command_set(codec, 0x48, 0x13, 0xff); 8048 ca0113_mmio_command_set(codec, 0x48, 0x14, 0x7f); 8049 8050 mutex_unlock(&spec->chipio_mutex); 8051 } 8052 8053 static void ae7_post_dsp_asi_stream_setup(struct hda_codec *codec) 8054 { 8055 struct ca0132_spec *spec = codec->spec; 8056 8057 mutex_lock(&spec->chipio_mutex); 8058 8059 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x725, 0x81); 8060 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); 8061 8062 chipio_set_conn_rate_no_mutex(codec, 0x70, SR_96_000); 8063 8064 chipio_set_stream_source_dest(codec, 0x05, 0x43, 0x00); 8065 chipio_set_stream_source_dest(codec, 0x18, 0x09, 0xd0); 8066 8067 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); 8068 chipio_set_stream_channels(codec, 0x18, 6); 8069 chipio_set_stream_control(codec, 0x18, 1); 8070 8071 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 4); 8072 8073 mutex_unlock(&spec->chipio_mutex); 8074 } 8075 8076 static void ae7_post_dsp_pll_setup(struct hda_codec *codec) 8077 { 8078 static const unsigned int addr[] = { 8079 0x41, 0x45, 0x40, 0x43, 0x51 8080 }; 8081 static const unsigned int data[] = { 8082 0xc8, 0xcc, 0xcb, 0xc7, 0x8d 8083 }; 8084 unsigned int i; 8085 8086 for (i = 0; i < ARRAY_SIZE(addr); i++) 8087 chipio_8051_write_pll_pmu_no_mutex(codec, addr[i], data[i]); 8088 } 8089 8090 static void ae7_post_dsp_asi_setup_ports(struct hda_codec *codec) 8091 { 8092 struct ca0132_spec *spec = codec->spec; 8093 static const unsigned int target[] = { 8094 0x0b, 0x04, 0x06, 0x0a, 0x0c, 0x11, 0x12, 0x13, 0x14 8095 }; 8096 static const unsigned int data[] = { 8097 0x12, 0x00, 0x48, 0x05, 0x5f, 0xff, 0xff, 0xff, 0x7f 8098 }; 8099 unsigned int i; 8100 8101 mutex_lock(&spec->chipio_mutex); 8102 8103 chipio_8051_write_pll_pmu_no_mutex(codec, 0x43, 0xc7); 8104 8105 chipio_write_no_mutex(codec, 0x189000, 0x0001f101); 8106 chipio_write_no_mutex(codec, 0x189004, 0x0001f101); 8107 chipio_write_no_mutex(codec, 0x189024, 0x00014004); 8108 chipio_write_no_mutex(codec, 0x189028, 0x0002000f); 8109 8110 ae7_post_dsp_pll_setup(codec); 8111 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); 8112 8113 for (i = 0; i < ARRAY_SIZE(target); i++) 8114 ca0113_mmio_command_set(codec, 0x48, target[i], data[i]); 8115 8116 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); 8117 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); 8118 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); 8119 8120 chipio_set_stream_source_dest(codec, 0x21, 0x64, 0x56); 8121 chipio_set_stream_channels(codec, 0x21, 2); 8122 chipio_set_conn_rate_no_mutex(codec, 0x56, SR_8_000); 8123 8124 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_NODE_ID, 0x09); 8125 /* 8126 * In the 8051's memory, this param is referred to as 'n2sid', which I 8127 * believe is 'node to streamID'. It seems to be a way to assign a 8128 * stream to a given HDA node. 8129 */ 8130 chipio_set_control_param_no_mutex(codec, 0x20, 0x21); 8131 8132 chipio_write_no_mutex(codec, 0x18b038, 0x00000088); 8133 8134 /* 8135 * Now, at this point on Windows, an actual stream is setup and 8136 * seemingly sends data to the HDA node 0x09, which is the digital 8137 * audio input node. This is left out here, because obviously I don't 8138 * know what data is being sent. Interestingly, the AE-5 seems to go 8139 * through the motions of getting here and never actually takes this 8140 * step, but the AE-7 does. 8141 */ 8142 8143 ca0113_mmio_gpio_set(codec, 0, 1); 8144 ca0113_mmio_gpio_set(codec, 1, 1); 8145 8146 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); 8147 chipio_write_no_mutex(codec, 0x18b03c, 0x00000000); 8148 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x00); 8149 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x00); 8150 8151 chipio_set_stream_source_dest(codec, 0x05, 0x43, 0x00); 8152 chipio_set_stream_source_dest(codec, 0x18, 0x09, 0xd0); 8153 8154 chipio_set_conn_rate_no_mutex(codec, 0xd0, SR_96_000); 8155 chipio_set_stream_channels(codec, 0x18, 6); 8156 8157 /* 8158 * Runs again, this has been repeated a few times, but I'm just 8159 * following what the Windows driver does. 8160 */ 8161 ae7_post_dsp_pll_setup(codec); 8162 chipio_set_control_param_no_mutex(codec, CONTROL_PARAM_ASI, 7); 8163 8164 mutex_unlock(&spec->chipio_mutex); 8165 } 8166 8167 /* 8168 * The Windows driver has commands that seem to setup ASI, which I believe to 8169 * be some sort of audio serial interface. My current speculation is that it's 8170 * related to communicating with the new DAC. 8171 */ 8172 static void ae7_post_dsp_asi_setup(struct hda_codec *codec) 8173 { 8174 chipio_8051_write_direct(codec, 0x93, 0x10); 8175 8176 chipio_8051_write_pll_pmu(codec, 0x44, 0xc2); 8177 8178 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); 8179 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); 8180 8181 chipio_set_control_param(codec, 3, 3); 8182 chipio_set_control_flag(codec, CONTROL_FLAG_ASI_96KHZ, 1); 8183 8184 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x724, 0x83); 8185 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); 8186 snd_hda_codec_write(codec, 0x17, 0, 0x794, 0x00); 8187 8188 chipio_8051_write_exram(codec, 0xfa92, 0x22); 8189 8190 ae7_post_dsp_pll_setup(codec); 8191 ae7_post_dsp_asi_stream_setup(codec); 8192 8193 chipio_8051_write_pll_pmu(codec, 0x43, 0xc7); 8194 8195 ae7_post_dsp_asi_setup_ports(codec); 8196 } 8197 8198 /* 8199 * Setup default parameters for DSP 8200 */ 8201 static void ca0132_setup_defaults(struct hda_codec *codec) 8202 { 8203 struct ca0132_spec *spec = codec->spec; 8204 unsigned int tmp; 8205 int num_fx; 8206 int idx, i; 8207 8208 if (spec->dsp_state != DSP_DOWNLOADED) 8209 return; 8210 8211 /* out, in effects + voicefx */ 8212 num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT + 1; 8213 for (idx = 0; idx < num_fx; idx++) { 8214 for (i = 0; i <= ca0132_effects[idx].params; i++) { 8215 dspio_set_uint_param(codec, ca0132_effects[idx].mid, 8216 ca0132_effects[idx].reqs[i], 8217 ca0132_effects[idx].def_vals[i]); 8218 } 8219 } 8220 8221 /*remove DSP headroom*/ 8222 tmp = FLOAT_ZERO; 8223 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); 8224 8225 /*set speaker EQ bypass attenuation*/ 8226 dspio_set_uint_param(codec, 0x8f, 0x01, tmp); 8227 8228 /* set AMic1 and AMic2 as mono mic */ 8229 tmp = FLOAT_ONE; 8230 dspio_set_uint_param(codec, 0x80, 0x00, tmp); 8231 dspio_set_uint_param(codec, 0x80, 0x01, tmp); 8232 8233 /* set AMic1 as CrystalVoice input */ 8234 tmp = FLOAT_ONE; 8235 dspio_set_uint_param(codec, 0x80, 0x05, tmp); 8236 8237 /* set WUH source */ 8238 tmp = FLOAT_TWO; 8239 dspio_set_uint_param(codec, 0x31, 0x00, tmp); 8240 } 8241 8242 /* 8243 * Setup default parameters for Recon3D/Recon3Di DSP. 8244 */ 8245 8246 static void r3d_setup_defaults(struct hda_codec *codec) 8247 { 8248 struct ca0132_spec *spec = codec->spec; 8249 unsigned int tmp; 8250 int num_fx; 8251 int idx, i; 8252 8253 if (spec->dsp_state != DSP_DOWNLOADED) 8254 return; 8255 8256 ca0132_alt_init_analog_mics(codec); 8257 ca0132_alt_start_dsp_audio_streams(codec); 8258 8259 /*remove DSP headroom*/ 8260 tmp = FLOAT_ZERO; 8261 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); 8262 8263 /* set WUH source */ 8264 tmp = FLOAT_TWO; 8265 dspio_set_uint_param(codec, 0x31, 0x00, tmp); 8266 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); 8267 8268 /* Set speaker source? */ 8269 dspio_set_uint_param(codec, 0x32, 0x00, tmp); 8270 8271 if (ca0132_quirk(spec) == QUIRK_R3DI) 8272 r3di_gpio_dsp_status_set(codec, R3DI_DSP_DOWNLOADED); 8273 8274 /* Disable mute on Center/LFE. */ 8275 if (ca0132_quirk(spec) == QUIRK_R3D) { 8276 ca0113_mmio_gpio_set(codec, 2, false); 8277 ca0113_mmio_gpio_set(codec, 4, true); 8278 } 8279 8280 /* Setup effect defaults */ 8281 num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT + 1; 8282 for (idx = 0; idx < num_fx; idx++) { 8283 for (i = 0; i <= ca0132_effects[idx].params; i++) { 8284 dspio_set_uint_param(codec, 8285 ca0132_effects[idx].mid, 8286 ca0132_effects[idx].reqs[i], 8287 ca0132_effects[idx].def_vals[i]); 8288 } 8289 } 8290 } 8291 8292 /* 8293 * Setup default parameters for the Sound Blaster Z DSP. A lot more going on 8294 * than the Chromebook setup. 8295 */ 8296 static void sbz_setup_defaults(struct hda_codec *codec) 8297 { 8298 struct ca0132_spec *spec = codec->spec; 8299 unsigned int tmp; 8300 int num_fx; 8301 int idx, i; 8302 8303 if (spec->dsp_state != DSP_DOWNLOADED) 8304 return; 8305 8306 ca0132_alt_init_analog_mics(codec); 8307 ca0132_alt_start_dsp_audio_streams(codec); 8308 sbz_connect_streams(codec); 8309 sbz_chipio_startup_data(codec); 8310 8311 /* 8312 * Sets internal input loopback to off, used to have a switch to 8313 * enable input loopback, but turned out to be way too buggy. 8314 */ 8315 tmp = FLOAT_ONE; 8316 dspio_set_uint_param(codec, 0x37, 0x08, tmp); 8317 dspio_set_uint_param(codec, 0x37, 0x10, tmp); 8318 8319 /*remove DSP headroom*/ 8320 tmp = FLOAT_ZERO; 8321 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); 8322 8323 /* set WUH source */ 8324 tmp = FLOAT_TWO; 8325 dspio_set_uint_param(codec, 0x31, 0x00, tmp); 8326 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); 8327 8328 /* Set speaker source? */ 8329 dspio_set_uint_param(codec, 0x32, 0x00, tmp); 8330 8331 ca0132_alt_dsp_initial_mic_setup(codec); 8332 8333 /* out, in effects + voicefx */ 8334 num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT + 1; 8335 for (idx = 0; idx < num_fx; idx++) { 8336 for (i = 0; i <= ca0132_effects[idx].params; i++) { 8337 dspio_set_uint_param(codec, 8338 ca0132_effects[idx].mid, 8339 ca0132_effects[idx].reqs[i], 8340 ca0132_effects[idx].def_vals[i]); 8341 } 8342 } 8343 8344 ca0132_alt_init_speaker_tuning(codec); 8345 } 8346 8347 /* 8348 * Setup default parameters for the Sound BlasterX AE-5 DSP. 8349 */ 8350 static void ae5_setup_defaults(struct hda_codec *codec) 8351 { 8352 struct ca0132_spec *spec = codec->spec; 8353 unsigned int tmp; 8354 int num_fx; 8355 int idx, i; 8356 8357 if (spec->dsp_state != DSP_DOWNLOADED) 8358 return; 8359 8360 ca0132_alt_init_analog_mics(codec); 8361 ca0132_alt_start_dsp_audio_streams(codec); 8362 8363 /* New, unknown SCP req's */ 8364 tmp = FLOAT_ZERO; 8365 dspio_set_uint_param(codec, 0x96, 0x29, tmp); 8366 dspio_set_uint_param(codec, 0x96, 0x2a, tmp); 8367 dspio_set_uint_param(codec, 0x80, 0x0d, tmp); 8368 dspio_set_uint_param(codec, 0x80, 0x0e, tmp); 8369 8370 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); 8371 ca0113_mmio_gpio_set(codec, 0, false); 8372 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); 8373 8374 /* Internal loopback off */ 8375 tmp = FLOAT_ONE; 8376 dspio_set_uint_param(codec, 0x37, 0x08, tmp); 8377 dspio_set_uint_param(codec, 0x37, 0x10, tmp); 8378 8379 /*remove DSP headroom*/ 8380 tmp = FLOAT_ZERO; 8381 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); 8382 8383 /* set WUH source */ 8384 tmp = FLOAT_TWO; 8385 dspio_set_uint_param(codec, 0x31, 0x00, tmp); 8386 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); 8387 8388 /* Set speaker source? */ 8389 dspio_set_uint_param(codec, 0x32, 0x00, tmp); 8390 8391 ca0132_alt_dsp_initial_mic_setup(codec); 8392 ae5_post_dsp_register_set(codec); 8393 ae5_post_dsp_param_setup(codec); 8394 ae5_post_dsp_pll_setup(codec); 8395 ae5_post_dsp_stream_setup(codec); 8396 ae5_post_dsp_startup_data(codec); 8397 8398 /* out, in effects + voicefx */ 8399 num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT + 1; 8400 for (idx = 0; idx < num_fx; idx++) { 8401 for (i = 0; i <= ca0132_effects[idx].params; i++) { 8402 dspio_set_uint_param(codec, 8403 ca0132_effects[idx].mid, 8404 ca0132_effects[idx].reqs[i], 8405 ca0132_effects[idx].def_vals[i]); 8406 } 8407 } 8408 8409 ca0132_alt_init_speaker_tuning(codec); 8410 } 8411 8412 /* 8413 * Setup default parameters for the Sound Blaster AE-7 DSP. 8414 */ 8415 static void ae7_setup_defaults(struct hda_codec *codec) 8416 { 8417 struct ca0132_spec *spec = codec->spec; 8418 unsigned int tmp; 8419 int num_fx; 8420 int idx, i; 8421 8422 if (spec->dsp_state != DSP_DOWNLOADED) 8423 return; 8424 8425 ca0132_alt_init_analog_mics(codec); 8426 ca0132_alt_start_dsp_audio_streams(codec); 8427 ae7_post_dsp_setup_ports(codec); 8428 8429 tmp = FLOAT_ZERO; 8430 dspio_set_uint_param(codec, 0x96, 8431 SPEAKER_TUNING_FRONT_LEFT_INVERT, tmp); 8432 dspio_set_uint_param(codec, 0x96, 8433 SPEAKER_TUNING_FRONT_RIGHT_INVERT, tmp); 8434 8435 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); 8436 8437 /* New, unknown SCP req's */ 8438 dspio_set_uint_param(codec, 0x80, 0x0d, tmp); 8439 dspio_set_uint_param(codec, 0x80, 0x0e, tmp); 8440 8441 ca0113_mmio_gpio_set(codec, 0, false); 8442 8443 /* Internal loopback off */ 8444 tmp = FLOAT_ONE; 8445 dspio_set_uint_param(codec, 0x37, 0x08, tmp); 8446 dspio_set_uint_param(codec, 0x37, 0x10, tmp); 8447 8448 /*remove DSP headroom*/ 8449 tmp = FLOAT_ZERO; 8450 dspio_set_uint_param(codec, 0x96, 0x3C, tmp); 8451 8452 /* set WUH source */ 8453 tmp = FLOAT_TWO; 8454 dspio_set_uint_param(codec, 0x31, 0x00, tmp); 8455 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); 8456 8457 /* Set speaker source? */ 8458 dspio_set_uint_param(codec, 0x32, 0x00, tmp); 8459 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00); 8460 8461 /* 8462 * This is the second time we've called this, but this is seemingly 8463 * what Windows does. 8464 */ 8465 ca0132_alt_init_analog_mics(codec); 8466 8467 ae7_post_dsp_asi_setup(codec); 8468 8469 /* 8470 * Not sure why, but these are both set to 1. They're only set to 0 8471 * upon shutdown. 8472 */ 8473 ca0113_mmio_gpio_set(codec, 0, true); 8474 ca0113_mmio_gpio_set(codec, 1, true); 8475 8476 /* Volume control related. */ 8477 ca0113_mmio_command_set(codec, 0x48, 0x0f, 0x04); 8478 ca0113_mmio_command_set(codec, 0x48, 0x10, 0x04); 8479 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x80); 8480 8481 /* out, in effects + voicefx */ 8482 num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT + 1; 8483 for (idx = 0; idx < num_fx; idx++) { 8484 for (i = 0; i <= ca0132_effects[idx].params; i++) { 8485 dspio_set_uint_param(codec, 8486 ca0132_effects[idx].mid, 8487 ca0132_effects[idx].reqs[i], 8488 ca0132_effects[idx].def_vals[i]); 8489 } 8490 } 8491 8492 ca0132_alt_init_speaker_tuning(codec); 8493 } 8494 8495 /* 8496 * Initialization of flags in chip 8497 */ 8498 static void ca0132_init_flags(struct hda_codec *codec) 8499 { 8500 struct ca0132_spec *spec = codec->spec; 8501 8502 if (ca0132_use_alt_functions(spec)) { 8503 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, 1); 8504 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, 1); 8505 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, 1); 8506 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, 1); 8507 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, 1); 8508 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); 8509 chipio_set_control_flag(codec, CONTROL_FLAG_SPDIF2OUT, 0); 8510 chipio_set_control_flag(codec, 8511 CONTROL_FLAG_PORT_D_10KOHM_LOAD, 0); 8512 chipio_set_control_flag(codec, 8513 CONTROL_FLAG_PORT_A_10KOHM_LOAD, 1); 8514 } else { 8515 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); 8516 chipio_set_control_flag(codec, 8517 CONTROL_FLAG_PORT_A_COMMON_MODE, 0); 8518 chipio_set_control_flag(codec, 8519 CONTROL_FLAG_PORT_D_COMMON_MODE, 0); 8520 chipio_set_control_flag(codec, 8521 CONTROL_FLAG_PORT_A_10KOHM_LOAD, 0); 8522 chipio_set_control_flag(codec, 8523 CONTROL_FLAG_PORT_D_10KOHM_LOAD, 0); 8524 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_HIGH_PASS, 1); 8525 } 8526 } 8527 8528 /* 8529 * Initialization of parameters in chip 8530 */ 8531 static void ca0132_init_params(struct hda_codec *codec) 8532 { 8533 struct ca0132_spec *spec = codec->spec; 8534 8535 if (ca0132_use_alt_functions(spec)) { 8536 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); 8537 chipio_set_conn_rate(codec, 0x0B, SR_48_000); 8538 chipio_set_control_param(codec, CONTROL_PARAM_SPDIF1_SOURCE, 0); 8539 chipio_set_control_param(codec, 0, 0); 8540 chipio_set_control_param(codec, CONTROL_PARAM_VIP_SOURCE, 0); 8541 } 8542 8543 chipio_set_control_param(codec, CONTROL_PARAM_PORTA_160OHM_GAIN, 6); 8544 chipio_set_control_param(codec, CONTROL_PARAM_PORTD_160OHM_GAIN, 6); 8545 } 8546 8547 static void ca0132_set_dsp_msr(struct hda_codec *codec, bool is96k) 8548 { 8549 chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, is96k); 8550 chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, is96k); 8551 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, is96k); 8552 chipio_set_control_flag(codec, CONTROL_FLAG_SRC_CLOCK_196MHZ, is96k); 8553 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, is96k); 8554 chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, is96k); 8555 8556 chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_96_000); 8557 chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_96_000); 8558 chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000); 8559 } 8560 8561 static bool ca0132_download_dsp_images(struct hda_codec *codec) 8562 { 8563 bool dsp_loaded = false; 8564 struct ca0132_spec *spec = codec->spec; 8565 const struct dsp_image_seg *dsp_os_image; 8566 const struct firmware *fw_entry = NULL; 8567 /* 8568 * Alternate firmwares for different variants. The Recon3Di apparently 8569 * can use the default firmware, but I'll leave the option in case 8570 * it needs it again. 8571 */ 8572 switch (ca0132_quirk(spec)) { 8573 case QUIRK_SBZ: 8574 case QUIRK_R3D: 8575 case QUIRK_AE5: 8576 if (request_firmware(&fw_entry, DESKTOP_EFX_FILE, 8577 codec->card->dev) != 0) 8578 codec_dbg(codec, "Desktop firmware not found."); 8579 else 8580 codec_dbg(codec, "Desktop firmware selected."); 8581 break; 8582 case QUIRK_R3DI: 8583 if (request_firmware(&fw_entry, R3DI_EFX_FILE, 8584 codec->card->dev) != 0) 8585 codec_dbg(codec, "Recon3Di alt firmware not detected."); 8586 else 8587 codec_dbg(codec, "Recon3Di firmware selected."); 8588 break; 8589 default: 8590 break; 8591 } 8592 /* 8593 * Use default ctefx.bin if no alt firmware is detected, or if none 8594 * exists for your particular codec. 8595 */ 8596 if (!fw_entry) { 8597 codec_dbg(codec, "Default firmware selected."); 8598 if (request_firmware(&fw_entry, EFX_FILE, 8599 codec->card->dev) != 0) 8600 return false; 8601 } 8602 8603 dsp_os_image = (struct dsp_image_seg *)(fw_entry->data); 8604 if (dspload_image(codec, dsp_os_image, 0, 0, true, 0)) { 8605 codec_err(codec, "ca0132 DSP load image failed\n"); 8606 goto exit_download; 8607 } 8608 8609 dsp_loaded = dspload_wait_loaded(codec); 8610 8611 exit_download: 8612 release_firmware(fw_entry); 8613 8614 return dsp_loaded; 8615 } 8616 8617 static void ca0132_download_dsp(struct hda_codec *codec) 8618 { 8619 struct ca0132_spec *spec = codec->spec; 8620 8621 #ifndef CONFIG_SND_HDA_CODEC_CA0132_DSP 8622 return; /* NOP */ 8623 #endif 8624 8625 if (spec->dsp_state == DSP_DOWNLOAD_FAILED) 8626 return; /* don't retry failures */ 8627 8628 chipio_enable_clocks(codec); 8629 if (spec->dsp_state != DSP_DOWNLOADED) { 8630 spec->dsp_state = DSP_DOWNLOADING; 8631 8632 if (!ca0132_download_dsp_images(codec)) 8633 spec->dsp_state = DSP_DOWNLOAD_FAILED; 8634 else 8635 spec->dsp_state = DSP_DOWNLOADED; 8636 } 8637 8638 /* For codecs using alt functions, this is already done earlier */ 8639 if (spec->dsp_state == DSP_DOWNLOADED && !ca0132_use_alt_functions(spec)) 8640 ca0132_set_dsp_msr(codec, true); 8641 } 8642 8643 static void ca0132_process_dsp_response(struct hda_codec *codec, 8644 struct hda_jack_callback *callback) 8645 { 8646 struct ca0132_spec *spec = codec->spec; 8647 8648 codec_dbg(codec, "ca0132_process_dsp_response\n"); 8649 snd_hda_power_up_pm(codec); 8650 if (spec->wait_scp) { 8651 if (dspio_get_response_data(codec) >= 0) 8652 spec->wait_scp = 0; 8653 } 8654 8655 dspio_clear_response_queue(codec); 8656 snd_hda_power_down_pm(codec); 8657 } 8658 8659 static void hp_callback(struct hda_codec *codec, struct hda_jack_callback *cb) 8660 { 8661 struct ca0132_spec *spec = codec->spec; 8662 struct hda_jack_tbl *tbl; 8663 8664 /* Delay enabling the HP amp, to let the mic-detection 8665 * state machine run. 8666 */ 8667 tbl = snd_hda_jack_tbl_get(codec, cb->nid); 8668 if (tbl) 8669 tbl->block_report = 1; 8670 schedule_delayed_work(&spec->unsol_hp_work, msecs_to_jiffies(500)); 8671 } 8672 8673 static void amic_callback(struct hda_codec *codec, struct hda_jack_callback *cb) 8674 { 8675 struct ca0132_spec *spec = codec->spec; 8676 8677 if (ca0132_use_alt_functions(spec)) 8678 ca0132_alt_select_in(codec); 8679 else 8680 ca0132_select_mic(codec); 8681 } 8682 8683 static void ca0132_setup_unsol(struct hda_codec *codec) 8684 { 8685 struct ca0132_spec *spec = codec->spec; 8686 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_hp, hp_callback); 8687 snd_hda_jack_detect_enable_callback(codec, spec->unsol_tag_amic1, 8688 amic_callback); 8689 snd_hda_jack_detect_enable_callback(codec, UNSOL_TAG_DSP, 8690 ca0132_process_dsp_response); 8691 /* Front headphone jack detection */ 8692 if (ca0132_use_alt_functions(spec)) 8693 snd_hda_jack_detect_enable_callback(codec, 8694 spec->unsol_tag_front_hp, hp_callback); 8695 } 8696 8697 /* 8698 * Verbs tables. 8699 */ 8700 8701 /* Sends before DSP download. */ 8702 static const struct hda_verb ca0132_base_init_verbs[] = { 8703 /*enable ct extension*/ 8704 {0x15, VENDOR_CHIPIO_CT_EXTENSIONS_ENABLE, 0x1}, 8705 {} 8706 }; 8707 8708 /* Send at exit. */ 8709 static const struct hda_verb ca0132_base_exit_verbs[] = { 8710 /*set afg to D3*/ 8711 {0x01, AC_VERB_SET_POWER_STATE, 0x03}, 8712 /*disable ct extension*/ 8713 {0x15, VENDOR_CHIPIO_CT_EXTENSIONS_ENABLE, 0}, 8714 {} 8715 }; 8716 8717 /* Other verbs tables. Sends after DSP download. */ 8718 8719 static const struct hda_verb ca0132_init_verbs0[] = { 8720 /* chip init verbs */ 8721 {0x15, 0x70D, 0xF0}, 8722 {0x15, 0x70E, 0xFE}, 8723 {0x15, 0x707, 0x75}, 8724 {0x15, 0x707, 0xD3}, 8725 {0x15, 0x707, 0x09}, 8726 {0x15, 0x707, 0x53}, 8727 {0x15, 0x707, 0xD4}, 8728 {0x15, 0x707, 0xEF}, 8729 {0x15, 0x707, 0x75}, 8730 {0x15, 0x707, 0xD3}, 8731 {0x15, 0x707, 0x09}, 8732 {0x15, 0x707, 0x02}, 8733 {0x15, 0x707, 0x37}, 8734 {0x15, 0x707, 0x78}, 8735 {0x15, 0x53C, 0xCE}, 8736 {0x15, 0x575, 0xC9}, 8737 {0x15, 0x53D, 0xCE}, 8738 {0x15, 0x5B7, 0xC9}, 8739 {0x15, 0x70D, 0xE8}, 8740 {0x15, 0x70E, 0xFE}, 8741 {0x15, 0x707, 0x02}, 8742 {0x15, 0x707, 0x68}, 8743 {0x15, 0x707, 0x62}, 8744 {0x15, 0x53A, 0xCE}, 8745 {0x15, 0x546, 0xC9}, 8746 {0x15, 0x53B, 0xCE}, 8747 {0x15, 0x5E8, 0xC9}, 8748 {} 8749 }; 8750 8751 /* Extra init verbs for desktop cards. */ 8752 static const struct hda_verb ca0132_init_verbs1[] = { 8753 {0x15, 0x70D, 0x20}, 8754 {0x15, 0x70E, 0x19}, 8755 {0x15, 0x707, 0x00}, 8756 {0x15, 0x539, 0xCE}, 8757 {0x15, 0x546, 0xC9}, 8758 {0x15, 0x70D, 0xB7}, 8759 {0x15, 0x70E, 0x09}, 8760 {0x15, 0x707, 0x10}, 8761 {0x15, 0x70D, 0xAF}, 8762 {0x15, 0x70E, 0x09}, 8763 {0x15, 0x707, 0x01}, 8764 {0x15, 0x707, 0x05}, 8765 {0x15, 0x70D, 0x73}, 8766 {0x15, 0x70E, 0x09}, 8767 {0x15, 0x707, 0x14}, 8768 {0x15, 0x6FF, 0xC4}, 8769 {} 8770 }; 8771 8772 static void ca0132_init_chip(struct hda_codec *codec) 8773 { 8774 struct ca0132_spec *spec = codec->spec; 8775 int num_fx; 8776 int i; 8777 unsigned int on; 8778 8779 mutex_init(&spec->chipio_mutex); 8780 8781 /* 8782 * The Windows driver always does this upon startup, which seems to 8783 * clear out any previous configuration. This should help issues where 8784 * a boot into Windows prior to a boot into Linux breaks things. Also, 8785 * Windows always sends the reset twice. 8786 */ 8787 if (ca0132_use_alt_functions(spec)) { 8788 chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0); 8789 chipio_write_no_mutex(codec, 0x18b0a4, 0x000000c2); 8790 8791 snd_hda_codec_write(codec, codec->core.afg, 0, 8792 AC_VERB_SET_CODEC_RESET, 0); 8793 snd_hda_codec_write(codec, codec->core.afg, 0, 8794 AC_VERB_SET_CODEC_RESET, 0); 8795 } 8796 8797 spec->cur_out_type = SPEAKER_OUT; 8798 if (!ca0132_use_alt_functions(spec)) 8799 spec->cur_mic_type = DIGITAL_MIC; 8800 else 8801 spec->cur_mic_type = REAR_MIC; 8802 8803 spec->cur_mic_boost = 0; 8804 8805 for (i = 0; i < VNODES_COUNT; i++) { 8806 spec->vnode_lvol[i] = 0x5a; 8807 spec->vnode_rvol[i] = 0x5a; 8808 spec->vnode_lswitch[i] = 0; 8809 spec->vnode_rswitch[i] = 0; 8810 } 8811 8812 /* 8813 * Default states for effects are in ca0132_effects[]. 8814 */ 8815 num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT; 8816 for (i = 0; i < num_fx; i++) { 8817 on = (unsigned int)ca0132_effects[i].reqs[0]; 8818 spec->effects_switch[i] = on ? 1 : 0; 8819 } 8820 /* 8821 * Sets defaults for the effect slider controls, only for alternative 8822 * ca0132 codecs. Also sets x-bass crossover frequency to 80hz. 8823 */ 8824 if (ca0132_use_alt_controls(spec)) { 8825 /* Set speakers to default to full range. */ 8826 spec->speaker_range_val[0] = 1; 8827 spec->speaker_range_val[1] = 1; 8828 8829 spec->xbass_xover_freq = 8; 8830 for (i = 0; i < EFFECT_LEVEL_SLIDERS; i++) 8831 spec->fx_ctl_val[i] = effect_slider_defaults[i]; 8832 8833 spec->bass_redirect_xover_freq = 8; 8834 } 8835 8836 spec->voicefx_val = 0; 8837 spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID] = 1; 8838 spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID] = 0; 8839 8840 /* 8841 * The ZxR doesn't have a front panel header, and it's line-in is on 8842 * the daughter board. So, there is no input enum control, and we need 8843 * to make sure that spec->in_enum_val is set properly. 8844 */ 8845 if (ca0132_quirk(spec) == QUIRK_ZXR) 8846 spec->in_enum_val = REAR_MIC; 8847 8848 #ifdef ENABLE_TUNING_CONTROLS 8849 ca0132_init_tuning_defaults(codec); 8850 #endif 8851 } 8852 8853 /* 8854 * Recon3Di exit specific commands. 8855 */ 8856 /* prevents popping noise on shutdown */ 8857 static void r3di_gpio_shutdown(struct hda_codec *codec) 8858 { 8859 snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA, 0x00); 8860 } 8861 8862 /* 8863 * Sound Blaster Z exit specific commands. 8864 */ 8865 static void sbz_region2_exit(struct hda_codec *codec) 8866 { 8867 struct ca0132_spec *spec = codec->spec; 8868 unsigned int i; 8869 8870 for (i = 0; i < 4; i++) 8871 writeb(0x0, spec->mem_base + 0x100); 8872 for (i = 0; i < 8; i++) 8873 writeb(0xb3, spec->mem_base + 0x304); 8874 8875 ca0113_mmio_gpio_set(codec, 0, false); 8876 ca0113_mmio_gpio_set(codec, 1, false); 8877 ca0113_mmio_gpio_set(codec, 4, true); 8878 ca0113_mmio_gpio_set(codec, 5, false); 8879 ca0113_mmio_gpio_set(codec, 7, false); 8880 } 8881 8882 static void sbz_set_pin_ctl_default(struct hda_codec *codec) 8883 { 8884 static const hda_nid_t pins[] = {0x0B, 0x0C, 0x0E, 0x12, 0x13}; 8885 unsigned int i; 8886 8887 snd_hda_codec_write(codec, 0x11, 0, 8888 AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40); 8889 8890 for (i = 0; i < ARRAY_SIZE(pins); i++) 8891 snd_hda_codec_write(codec, pins[i], 0, 8892 AC_VERB_SET_PIN_WIDGET_CONTROL, 0x00); 8893 } 8894 8895 static void ca0132_clear_unsolicited(struct hda_codec *codec) 8896 { 8897 static const hda_nid_t pins[] = {0x0B, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13}; 8898 unsigned int i; 8899 8900 for (i = 0; i < ARRAY_SIZE(pins); i++) { 8901 snd_hda_codec_write(codec, pins[i], 0, 8902 AC_VERB_SET_UNSOLICITED_ENABLE, 0x00); 8903 } 8904 } 8905 8906 /* On shutdown, sends commands in sets of three */ 8907 static void sbz_gpio_shutdown_commands(struct hda_codec *codec, int dir, 8908 int mask, int data) 8909 { 8910 if (dir >= 0) 8911 snd_hda_codec_write(codec, 0x01, 0, 8912 AC_VERB_SET_GPIO_DIRECTION, dir); 8913 if (mask >= 0) 8914 snd_hda_codec_write(codec, 0x01, 0, 8915 AC_VERB_SET_GPIO_MASK, mask); 8916 8917 if (data >= 0) 8918 snd_hda_codec_write(codec, 0x01, 0, 8919 AC_VERB_SET_GPIO_DATA, data); 8920 } 8921 8922 static void zxr_dbpro_power_state_shutdown(struct hda_codec *codec) 8923 { 8924 static const hda_nid_t pins[] = {0x05, 0x0c, 0x09, 0x0e, 0x08, 0x11, 0x01}; 8925 unsigned int i; 8926 8927 for (i = 0; i < ARRAY_SIZE(pins); i++) 8928 snd_hda_codec_write(codec, pins[i], 0, 8929 AC_VERB_SET_POWER_STATE, 0x03); 8930 } 8931 8932 static void sbz_exit_chip(struct hda_codec *codec) 8933 { 8934 chipio_set_stream_control(codec, 0x03, 0); 8935 chipio_set_stream_control(codec, 0x04, 0); 8936 8937 /* Mess with GPIO */ 8938 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, -1); 8939 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x05); 8940 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x01); 8941 8942 chipio_set_stream_control(codec, 0x14, 0); 8943 chipio_set_stream_control(codec, 0x0C, 0); 8944 8945 chipio_set_conn_rate(codec, 0x41, SR_192_000); 8946 chipio_set_conn_rate(codec, 0x91, SR_192_000); 8947 8948 chipio_write(codec, 0x18a020, 0x00000083); 8949 8950 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x03); 8951 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x07); 8952 sbz_gpio_shutdown_commands(codec, 0x07, 0x07, 0x06); 8953 8954 chipio_set_stream_control(codec, 0x0C, 0); 8955 8956 chipio_set_control_param(codec, 0x0D, 0x24); 8957 8958 ca0132_clear_unsolicited(codec); 8959 sbz_set_pin_ctl_default(codec); 8960 8961 snd_hda_codec_write(codec, 0x0B, 0, 8962 AC_VERB_SET_EAPD_BTLENABLE, 0x00); 8963 8964 sbz_region2_exit(codec); 8965 } 8966 8967 static void r3d_exit_chip(struct hda_codec *codec) 8968 { 8969 ca0132_clear_unsolicited(codec); 8970 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); 8971 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x5b); 8972 } 8973 8974 static void ae5_exit_chip(struct hda_codec *codec) 8975 { 8976 chipio_set_stream_control(codec, 0x03, 0); 8977 chipio_set_stream_control(codec, 0x04, 0); 8978 8979 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); 8980 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); 8981 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); 8982 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); 8983 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); 8984 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x00); 8985 ca0113_mmio_gpio_set(codec, 0, false); 8986 ca0113_mmio_gpio_set(codec, 1, false); 8987 8988 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); 8989 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); 8990 8991 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); 8992 8993 chipio_set_stream_control(codec, 0x18, 0); 8994 chipio_set_stream_control(codec, 0x0c, 0); 8995 8996 snd_hda_codec_write(codec, 0x01, 0, 0x724, 0x83); 8997 } 8998 8999 static void ae7_exit_chip(struct hda_codec *codec) 9000 { 9001 chipio_set_stream_control(codec, 0x18, 0); 9002 chipio_set_stream_source_dest(codec, 0x21, 0xc8, 0xc8); 9003 chipio_set_stream_channels(codec, 0x21, 0); 9004 chipio_set_control_param(codec, CONTROL_PARAM_NODE_ID, 0x09); 9005 chipio_set_control_param(codec, 0x20, 0x01); 9006 9007 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 0); 9008 9009 chipio_set_stream_control(codec, 0x18, 0); 9010 chipio_set_stream_control(codec, 0x0c, 0); 9011 9012 ca0113_mmio_command_set(codec, 0x30, 0x2b, 0x00); 9013 snd_hda_codec_write(codec, 0x15, 0, 0x724, 0x83); 9014 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); 9015 ca0113_mmio_command_set(codec, 0x30, 0x30, 0x00); 9016 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x00); 9017 ca0113_mmio_gpio_set(codec, 0, false); 9018 ca0113_mmio_gpio_set(codec, 1, false); 9019 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); 9020 9021 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); 9022 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); 9023 } 9024 9025 static void zxr_exit_chip(struct hda_codec *codec) 9026 { 9027 chipio_set_stream_control(codec, 0x03, 0); 9028 chipio_set_stream_control(codec, 0x04, 0); 9029 chipio_set_stream_control(codec, 0x14, 0); 9030 chipio_set_stream_control(codec, 0x0C, 0); 9031 9032 chipio_set_conn_rate(codec, 0x41, SR_192_000); 9033 chipio_set_conn_rate(codec, 0x91, SR_192_000); 9034 9035 chipio_write(codec, 0x18a020, 0x00000083); 9036 9037 snd_hda_codec_write(codec, 0x01, 0, 0x793, 0x00); 9038 snd_hda_codec_write(codec, 0x01, 0, 0x794, 0x53); 9039 9040 ca0132_clear_unsolicited(codec); 9041 sbz_set_pin_ctl_default(codec); 9042 snd_hda_codec_write(codec, 0x0B, 0, AC_VERB_SET_EAPD_BTLENABLE, 0x00); 9043 9044 ca0113_mmio_gpio_set(codec, 5, false); 9045 ca0113_mmio_gpio_set(codec, 2, false); 9046 ca0113_mmio_gpio_set(codec, 3, false); 9047 ca0113_mmio_gpio_set(codec, 0, false); 9048 ca0113_mmio_gpio_set(codec, 4, true); 9049 ca0113_mmio_gpio_set(codec, 0, true); 9050 ca0113_mmio_gpio_set(codec, 5, true); 9051 ca0113_mmio_gpio_set(codec, 2, false); 9052 ca0113_mmio_gpio_set(codec, 3, false); 9053 } 9054 9055 static void ca0132_exit_chip(struct hda_codec *codec) 9056 { 9057 /* put any chip cleanup stuffs here. */ 9058 9059 if (dspload_is_loaded(codec)) 9060 dsp_reset(codec); 9061 } 9062 9063 /* 9064 * This fixes a problem that was hard to reproduce. Very rarely, I would 9065 * boot up, and there would be no sound, but the DSP indicated it had loaded 9066 * properly. I did a few memory dumps to see if anything was different, and 9067 * there were a few areas of memory uninitialized with a1a2a3a4. This function 9068 * checks if those areas are uninitialized, and if they are, it'll attempt to 9069 * reload the card 3 times. Usually it fixes by the second. 9070 */ 9071 static void sbz_dsp_startup_check(struct hda_codec *codec) 9072 { 9073 struct ca0132_spec *spec = codec->spec; 9074 unsigned int dsp_data_check[4]; 9075 unsigned int cur_address = 0x390; 9076 unsigned int i; 9077 unsigned int failure = 0; 9078 unsigned int reload = 3; 9079 9080 if (spec->startup_check_entered) 9081 return; 9082 9083 spec->startup_check_entered = true; 9084 9085 for (i = 0; i < 4; i++) { 9086 chipio_read(codec, cur_address, &dsp_data_check[i]); 9087 cur_address += 0x4; 9088 } 9089 for (i = 0; i < 4; i++) { 9090 if (dsp_data_check[i] == 0xa1a2a3a4) 9091 failure = 1; 9092 } 9093 9094 codec_dbg(codec, "Startup Check: %d ", failure); 9095 if (failure) 9096 codec_info(codec, "DSP not initialized properly. Attempting to fix."); 9097 /* 9098 * While the failure condition is true, and we haven't reached our 9099 * three reload limit, continue trying to reload the driver and 9100 * fix the issue. 9101 */ 9102 while (failure && (reload != 0)) { 9103 codec_info(codec, "Reloading... Tries left: %d", reload); 9104 sbz_exit_chip(codec); 9105 spec->dsp_state = DSP_DOWNLOAD_INIT; 9106 codec->patch_ops.init(codec); 9107 failure = 0; 9108 for (i = 0; i < 4; i++) { 9109 chipio_read(codec, cur_address, &dsp_data_check[i]); 9110 cur_address += 0x4; 9111 } 9112 for (i = 0; i < 4; i++) { 9113 if (dsp_data_check[i] == 0xa1a2a3a4) 9114 failure = 1; 9115 } 9116 reload--; 9117 } 9118 9119 if (!failure && reload < 3) 9120 codec_info(codec, "DSP fixed."); 9121 9122 if (!failure) 9123 return; 9124 9125 codec_info(codec, "DSP failed to initialize properly. Either try a full shutdown or a suspend to clear the internal memory."); 9126 } 9127 9128 /* 9129 * This is for the extra volume verbs 0x797 (left) and 0x798 (right). These add 9130 * extra precision for decibel values. If you had the dB value in floating point 9131 * you would take the value after the decimal point, multiply by 64, and divide 9132 * by 2. So for 8.59, it's (59 * 64) / 100. Useful if someone wanted to 9133 * implement fixed point or floating point dB volumes. For now, I'll set them 9134 * to 0 just incase a value has lingered from a boot into Windows. 9135 */ 9136 static void ca0132_alt_vol_setup(struct hda_codec *codec) 9137 { 9138 snd_hda_codec_write(codec, 0x02, 0, 0x797, 0x00); 9139 snd_hda_codec_write(codec, 0x02, 0, 0x798, 0x00); 9140 snd_hda_codec_write(codec, 0x03, 0, 0x797, 0x00); 9141 snd_hda_codec_write(codec, 0x03, 0, 0x798, 0x00); 9142 snd_hda_codec_write(codec, 0x04, 0, 0x797, 0x00); 9143 snd_hda_codec_write(codec, 0x04, 0, 0x798, 0x00); 9144 snd_hda_codec_write(codec, 0x07, 0, 0x797, 0x00); 9145 snd_hda_codec_write(codec, 0x07, 0, 0x798, 0x00); 9146 } 9147 9148 /* 9149 * Extra commands that don't really fit anywhere else. 9150 */ 9151 static void sbz_pre_dsp_setup(struct hda_codec *codec) 9152 { 9153 struct ca0132_spec *spec = codec->spec; 9154 9155 writel(0x00820680, spec->mem_base + 0x01C); 9156 writel(0x00820680, spec->mem_base + 0x01C); 9157 9158 chipio_write(codec, 0x18b0a4, 0x000000c2); 9159 9160 snd_hda_codec_write(codec, 0x11, 0, 9161 AC_VERB_SET_PIN_WIDGET_CONTROL, 0x44); 9162 } 9163 9164 static void r3d_pre_dsp_setup(struct hda_codec *codec) 9165 { 9166 chipio_write(codec, 0x18b0a4, 0x000000c2); 9167 9168 chipio_8051_write_exram(codec, 0x1c1e, 0x5b); 9169 9170 snd_hda_codec_write(codec, 0x11, 0, 9171 AC_VERB_SET_PIN_WIDGET_CONTROL, 0x44); 9172 } 9173 9174 static void r3di_pre_dsp_setup(struct hda_codec *codec) 9175 { 9176 chipio_write(codec, 0x18b0a4, 0x000000c2); 9177 9178 chipio_8051_write_exram(codec, 0x1c1e, 0x5b); 9179 chipio_8051_write_exram(codec, 0x1920, 0x00); 9180 chipio_8051_write_exram(codec, 0x1921, 0x40); 9181 9182 snd_hda_codec_write(codec, 0x11, 0, 9183 AC_VERB_SET_PIN_WIDGET_CONTROL, 0x04); 9184 } 9185 9186 /* 9187 * The ZxR seems to use alternative DAC's for the surround channels, which 9188 * require PLL PMU setup for the clock rate, I'm guessing. Without setting 9189 * this up, we get no audio out of the surround jacks. 9190 */ 9191 static void zxr_pre_dsp_setup(struct hda_codec *codec) 9192 { 9193 static const unsigned int addr[] = { 0x43, 0x40, 0x41, 0x42, 0x45 }; 9194 static const unsigned int data[] = { 0x08, 0x0c, 0x0b, 0x07, 0x0d }; 9195 unsigned int i; 9196 9197 chipio_write(codec, 0x189000, 0x0001f100); 9198 msleep(50); 9199 chipio_write(codec, 0x18900c, 0x0001f100); 9200 msleep(50); 9201 9202 /* 9203 * This writes a RET instruction at the entry point of the function at 9204 * 0xfa92 in exram. This function seems to have something to do with 9205 * ASI. Might be some way to prevent the card from reconfiguring the 9206 * ASI stuff itself. 9207 */ 9208 chipio_8051_write_exram(codec, 0xfa92, 0x22); 9209 9210 chipio_8051_write_pll_pmu(codec, 0x51, 0x98); 9211 9212 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x725, 0x82); 9213 chipio_set_control_param(codec, CONTROL_PARAM_ASI, 3); 9214 9215 chipio_write(codec, 0x18902c, 0x00000000); 9216 msleep(50); 9217 chipio_write(codec, 0x18902c, 0x00000003); 9218 msleep(50); 9219 9220 for (i = 0; i < ARRAY_SIZE(addr); i++) 9221 chipio_8051_write_pll_pmu(codec, addr[i], data[i]); 9222 } 9223 9224 /* 9225 * These are sent before the DSP is downloaded. Not sure 9226 * what they do, or if they're necessary. Could possibly 9227 * be removed. Figure they're better to leave in. 9228 */ 9229 static const unsigned int ca0113_mmio_init_address_sbz[] = { 9230 0x400, 0x408, 0x40c, 0x01c, 0xc0c, 0xc00, 0xc04, 0xc0c, 0xc0c, 0xc0c, 9231 0xc0c, 0xc08, 0xc08, 0xc08, 0xc08, 0xc08, 0xc04 9232 }; 9233 9234 static const unsigned int ca0113_mmio_init_data_sbz[] = { 9235 0x00000030, 0x00000000, 0x00000003, 0x00000003, 0x00000003, 9236 0x00000003, 0x000000c1, 0x000000f1, 0x00000001, 0x000000c7, 9237 0x000000c1, 0x00000080 9238 }; 9239 9240 static const unsigned int ca0113_mmio_init_data_zxr[] = { 9241 0x00000030, 0x00000000, 0x00000000, 0x00000003, 0x00000003, 9242 0x00000003, 0x00000001, 0x000000f1, 0x00000001, 0x000000c7, 9243 0x000000c1, 0x00000080 9244 }; 9245 9246 static const unsigned int ca0113_mmio_init_address_ae5[] = { 9247 0x400, 0x42c, 0x46c, 0x4ac, 0x4ec, 0x43c, 0x47c, 0x4bc, 0x4fc, 0x408, 9248 0x100, 0x410, 0x40c, 0x100, 0x100, 0x830, 0x86c, 0x800, 0x86c, 0x800, 9249 0x804, 0x20c, 0x01c, 0xc0c, 0xc00, 0xc04, 0xc0c, 0xc0c, 0xc0c, 0xc0c, 9250 0xc08, 0xc08, 0xc08, 0xc08, 0xc08, 0xc04, 0x01c 9251 }; 9252 9253 static const unsigned int ca0113_mmio_init_data_ae5[] = { 9254 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 9255 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 9256 0x00000600, 0x00000014, 0x00000001, 0x0000060f, 0x0000070f, 9257 0x00000aff, 0x00000000, 0x0000006b, 0x00000001, 0x0000006b, 9258 0x00000057, 0x00800000, 0x00880680, 0x00000080, 0x00000030, 9259 0x00000000, 0x00000000, 0x00000003, 0x00000003, 0x00000003, 9260 0x00000001, 0x000000f1, 0x00000001, 0x000000c7, 0x000000c1, 9261 0x00000080, 0x00880680 9262 }; 9263 9264 static void ca0132_mmio_init_sbz(struct hda_codec *codec) 9265 { 9266 struct ca0132_spec *spec = codec->spec; 9267 unsigned int tmp[2], i, count, cur_addr; 9268 const unsigned int *addr, *data; 9269 9270 addr = ca0113_mmio_init_address_sbz; 9271 for (i = 0; i < 3; i++) 9272 writel(0x00000000, spec->mem_base + addr[i]); 9273 9274 cur_addr = i; 9275 switch (ca0132_quirk(spec)) { 9276 case QUIRK_ZXR: 9277 tmp[0] = 0x00880480; 9278 tmp[1] = 0x00000080; 9279 break; 9280 case QUIRK_SBZ: 9281 tmp[0] = 0x00820680; 9282 tmp[1] = 0x00000083; 9283 break; 9284 case QUIRK_R3D: 9285 tmp[0] = 0x00880680; 9286 tmp[1] = 0x00000083; 9287 break; 9288 default: 9289 tmp[0] = 0x00000000; 9290 tmp[1] = 0x00000000; 9291 break; 9292 } 9293 9294 for (i = 0; i < 2; i++) 9295 writel(tmp[i], spec->mem_base + addr[cur_addr + i]); 9296 9297 cur_addr += i; 9298 9299 switch (ca0132_quirk(spec)) { 9300 case QUIRK_ZXR: 9301 count = ARRAY_SIZE(ca0113_mmio_init_data_zxr); 9302 data = ca0113_mmio_init_data_zxr; 9303 break; 9304 default: 9305 count = ARRAY_SIZE(ca0113_mmio_init_data_sbz); 9306 data = ca0113_mmio_init_data_sbz; 9307 break; 9308 } 9309 9310 for (i = 0; i < count; i++) 9311 writel(data[i], spec->mem_base + addr[cur_addr + i]); 9312 } 9313 9314 static void ca0132_mmio_init_ae5(struct hda_codec *codec) 9315 { 9316 struct ca0132_spec *spec = codec->spec; 9317 const unsigned int *addr, *data; 9318 unsigned int i, count; 9319 9320 addr = ca0113_mmio_init_address_ae5; 9321 data = ca0113_mmio_init_data_ae5; 9322 count = ARRAY_SIZE(ca0113_mmio_init_data_ae5); 9323 9324 if (ca0132_quirk(spec) == QUIRK_AE7) { 9325 writel(0x00000680, spec->mem_base + 0x1c); 9326 writel(0x00880680, spec->mem_base + 0x1c); 9327 } 9328 9329 for (i = 0; i < count; i++) { 9330 /* 9331 * AE-7 shares all writes with the AE-5, except that it writes 9332 * a different value to 0x20c. 9333 */ 9334 if (i == 21 && ca0132_quirk(spec) == QUIRK_AE7) { 9335 writel(0x00800001, spec->mem_base + addr[i]); 9336 continue; 9337 } 9338 9339 writel(data[i], spec->mem_base + addr[i]); 9340 } 9341 9342 if (ca0132_quirk(spec) == QUIRK_AE5) 9343 writel(0x00880680, spec->mem_base + 0x1c); 9344 } 9345 9346 static void ca0132_mmio_init(struct hda_codec *codec) 9347 { 9348 struct ca0132_spec *spec = codec->spec; 9349 9350 switch (ca0132_quirk(spec)) { 9351 case QUIRK_R3D: 9352 case QUIRK_SBZ: 9353 case QUIRK_ZXR: 9354 ca0132_mmio_init_sbz(codec); 9355 break; 9356 case QUIRK_AE5: 9357 ca0132_mmio_init_ae5(codec); 9358 break; 9359 default: 9360 break; 9361 } 9362 } 9363 9364 static const unsigned int ca0132_ae5_register_set_addresses[] = { 9365 0x304, 0x304, 0x304, 0x304, 0x100, 0x304, 0x100, 0x304, 0x100, 0x304, 9366 0x100, 0x304, 0x86c, 0x800, 0x86c, 0x800, 0x804 9367 }; 9368 9369 static const unsigned char ca0132_ae5_register_set_data[] = { 9370 0x0f, 0x0e, 0x1f, 0x0c, 0x3f, 0x08, 0x7f, 0x00, 0xff, 0x00, 0x6b, 9371 0x01, 0x6b, 0x57 9372 }; 9373 9374 /* 9375 * This function writes to some SFR's, does some region2 writes, and then 9376 * eventually resets the codec with the 0x7ff verb. Not quite sure why it does 9377 * what it does. 9378 */ 9379 static void ae5_register_set(struct hda_codec *codec) 9380 { 9381 struct ca0132_spec *spec = codec->spec; 9382 unsigned int count = ARRAY_SIZE(ca0132_ae5_register_set_addresses); 9383 const unsigned int *addr = ca0132_ae5_register_set_addresses; 9384 const unsigned char *data = ca0132_ae5_register_set_data; 9385 unsigned int i, cur_addr; 9386 unsigned char tmp[3]; 9387 9388 if (ca0132_quirk(spec) == QUIRK_AE7) 9389 chipio_8051_write_pll_pmu(codec, 0x41, 0xc8); 9390 9391 chipio_8051_write_direct(codec, 0x93, 0x10); 9392 chipio_8051_write_pll_pmu(codec, 0x44, 0xc2); 9393 9394 if (ca0132_quirk(spec) == QUIRK_AE7) { 9395 tmp[0] = 0x03; 9396 tmp[1] = 0x03; 9397 tmp[2] = 0x07; 9398 } else { 9399 tmp[0] = 0x0f; 9400 tmp[1] = 0x0f; 9401 tmp[2] = 0x0f; 9402 } 9403 9404 for (i = cur_addr = 0; i < 3; i++, cur_addr++) 9405 writeb(tmp[i], spec->mem_base + addr[cur_addr]); 9406 9407 /* 9408 * First writes are in single bytes, final are in 4 bytes. So, we use 9409 * writeb, then writel. 9410 */ 9411 for (i = 0; cur_addr < 12; i++, cur_addr++) 9412 writeb(data[i], spec->mem_base + addr[cur_addr]); 9413 9414 for (; cur_addr < count; i++, cur_addr++) 9415 writel(data[i], spec->mem_base + addr[cur_addr]); 9416 9417 writel(0x00800001, spec->mem_base + 0x20c); 9418 9419 if (ca0132_quirk(spec) == QUIRK_AE7) { 9420 ca0113_mmio_command_set_type2(codec, 0x48, 0x07, 0x83); 9421 ca0113_mmio_command_set(codec, 0x30, 0x2e, 0x3f); 9422 } else { 9423 ca0113_mmio_command_set(codec, 0x30, 0x2d, 0x3f); 9424 } 9425 9426 chipio_8051_write_direct(codec, 0x90, 0x00); 9427 chipio_8051_write_direct(codec, 0x90, 0x10); 9428 9429 if (ca0132_quirk(spec) == QUIRK_AE5) 9430 ca0113_mmio_command_set(codec, 0x48, 0x07, 0x83); 9431 } 9432 9433 /* 9434 * Extra init functions for alternative ca0132 codecs. Done 9435 * here so they don't clutter up the main ca0132_init function 9436 * anymore than they have to. 9437 */ 9438 static void ca0132_alt_init(struct hda_codec *codec) 9439 { 9440 struct ca0132_spec *spec = codec->spec; 9441 9442 ca0132_alt_vol_setup(codec); 9443 9444 switch (ca0132_quirk(spec)) { 9445 case QUIRK_SBZ: 9446 codec_dbg(codec, "SBZ alt_init"); 9447 ca0132_gpio_init(codec); 9448 sbz_pre_dsp_setup(codec); 9449 snd_hda_sequence_write(codec, spec->chip_init_verbs); 9450 snd_hda_sequence_write(codec, spec->desktop_init_verbs); 9451 break; 9452 case QUIRK_R3DI: 9453 codec_dbg(codec, "R3DI alt_init"); 9454 ca0132_gpio_init(codec); 9455 ca0132_gpio_setup(codec); 9456 r3di_gpio_dsp_status_set(codec, R3DI_DSP_DOWNLOADING); 9457 r3di_pre_dsp_setup(codec); 9458 snd_hda_sequence_write(codec, spec->chip_init_verbs); 9459 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 0x6FF, 0xC4); 9460 break; 9461 case QUIRK_R3D: 9462 r3d_pre_dsp_setup(codec); 9463 snd_hda_sequence_write(codec, spec->chip_init_verbs); 9464 snd_hda_sequence_write(codec, spec->desktop_init_verbs); 9465 break; 9466 case QUIRK_AE5: 9467 ca0132_gpio_init(codec); 9468 chipio_8051_write_pll_pmu(codec, 0x49, 0x88); 9469 chipio_write(codec, 0x18b030, 0x00000020); 9470 snd_hda_sequence_write(codec, spec->chip_init_verbs); 9471 snd_hda_sequence_write(codec, spec->desktop_init_verbs); 9472 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); 9473 break; 9474 case QUIRK_AE7: 9475 ca0132_gpio_init(codec); 9476 chipio_8051_write_pll_pmu(codec, 0x49, 0x88); 9477 snd_hda_sequence_write(codec, spec->chip_init_verbs); 9478 snd_hda_sequence_write(codec, spec->desktop_init_verbs); 9479 chipio_write(codec, 0x18b008, 0x000000f8); 9480 chipio_write(codec, 0x18b008, 0x000000f0); 9481 chipio_write(codec, 0x18b030, 0x00000020); 9482 ca0113_mmio_command_set(codec, 0x30, 0x32, 0x3f); 9483 break; 9484 case QUIRK_ZXR: 9485 chipio_8051_write_pll_pmu(codec, 0x49, 0x88); 9486 snd_hda_sequence_write(codec, spec->chip_init_verbs); 9487 snd_hda_sequence_write(codec, spec->desktop_init_verbs); 9488 zxr_pre_dsp_setup(codec); 9489 break; 9490 default: 9491 break; 9492 } 9493 } 9494 9495 static int ca0132_init(struct hda_codec *codec) 9496 { 9497 struct ca0132_spec *spec = codec->spec; 9498 struct auto_pin_cfg *cfg = &spec->autocfg; 9499 int i; 9500 bool dsp_loaded; 9501 9502 /* 9503 * If the DSP is already downloaded, and init has been entered again, 9504 * there's only two reasons for it. One, the codec has awaken from a 9505 * suspended state, and in that case dspload_is_loaded will return 9506 * false, and the init will be ran again. The other reason it gets 9507 * re entered is on startup for some reason it triggers a suspend and 9508 * resume state. In this case, it will check if the DSP is downloaded, 9509 * and not run the init function again. For codecs using alt_functions, 9510 * it will check if the DSP is loaded properly. 9511 */ 9512 if (spec->dsp_state == DSP_DOWNLOADED) { 9513 dsp_loaded = dspload_is_loaded(codec); 9514 if (!dsp_loaded) { 9515 spec->dsp_reload = true; 9516 spec->dsp_state = DSP_DOWNLOAD_INIT; 9517 } else { 9518 if (ca0132_quirk(spec) == QUIRK_SBZ) 9519 sbz_dsp_startup_check(codec); 9520 return 0; 9521 } 9522 } 9523 9524 if (spec->dsp_state != DSP_DOWNLOAD_FAILED) 9525 spec->dsp_state = DSP_DOWNLOAD_INIT; 9526 spec->curr_chip_addx = INVALID_CHIP_ADDRESS; 9527 9528 if (ca0132_use_pci_mmio(spec)) 9529 ca0132_mmio_init(codec); 9530 9531 snd_hda_power_up_pm(codec); 9532 9533 if (ca0132_quirk(spec) == QUIRK_AE5 || ca0132_quirk(spec) == QUIRK_AE7) 9534 ae5_register_set(codec); 9535 9536 ca0132_init_params(codec); 9537 ca0132_init_flags(codec); 9538 9539 snd_hda_sequence_write(codec, spec->base_init_verbs); 9540 9541 if (ca0132_use_alt_functions(spec)) 9542 ca0132_alt_init(codec); 9543 9544 ca0132_download_dsp(codec); 9545 9546 ca0132_refresh_widget_caps(codec); 9547 9548 switch (ca0132_quirk(spec)) { 9549 case QUIRK_R3DI: 9550 case QUIRK_R3D: 9551 r3d_setup_defaults(codec); 9552 break; 9553 case QUIRK_SBZ: 9554 case QUIRK_ZXR: 9555 sbz_setup_defaults(codec); 9556 break; 9557 case QUIRK_AE5: 9558 ae5_setup_defaults(codec); 9559 break; 9560 case QUIRK_AE7: 9561 ae7_setup_defaults(codec); 9562 break; 9563 default: 9564 ca0132_setup_defaults(codec); 9565 ca0132_init_analog_mic2(codec); 9566 ca0132_init_dmic(codec); 9567 break; 9568 } 9569 9570 for (i = 0; i < spec->num_outputs; i++) 9571 init_output(codec, spec->out_pins[i], spec->dacs[0]); 9572 9573 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); 9574 9575 for (i = 0; i < spec->num_inputs; i++) 9576 init_input(codec, spec->input_pins[i], spec->adcs[i]); 9577 9578 init_input(codec, cfg->dig_in_pin, spec->dig_in); 9579 9580 if (!ca0132_use_alt_functions(spec)) { 9581 snd_hda_sequence_write(codec, spec->chip_init_verbs); 9582 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 9583 VENDOR_CHIPIO_PARAM_EX_ID_SET, 0x0D); 9584 snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0, 9585 VENDOR_CHIPIO_PARAM_EX_VALUE_SET, 0x20); 9586 } 9587 9588 if (ca0132_quirk(spec) == QUIRK_SBZ) 9589 ca0132_gpio_setup(codec); 9590 9591 snd_hda_sequence_write(codec, spec->spec_init_verbs); 9592 if (ca0132_use_alt_functions(spec)) { 9593 ca0132_alt_select_out(codec); 9594 ca0132_alt_select_in(codec); 9595 } else { 9596 ca0132_select_out(codec); 9597 ca0132_select_mic(codec); 9598 } 9599 9600 snd_hda_jack_report_sync(codec); 9601 9602 /* 9603 * Re set the PlayEnhancement switch on a resume event, because the 9604 * controls will not be reloaded. 9605 */ 9606 if (spec->dsp_reload) { 9607 spec->dsp_reload = false; 9608 ca0132_pe_switch_set(codec); 9609 } 9610 9611 snd_hda_power_down_pm(codec); 9612 9613 return 0; 9614 } 9615 9616 static int dbpro_init(struct hda_codec *codec) 9617 { 9618 struct ca0132_spec *spec = codec->spec; 9619 struct auto_pin_cfg *cfg = &spec->autocfg; 9620 unsigned int i; 9621 9622 init_output(codec, cfg->dig_out_pins[0], spec->dig_out); 9623 init_input(codec, cfg->dig_in_pin, spec->dig_in); 9624 9625 for (i = 0; i < spec->num_inputs; i++) 9626 init_input(codec, spec->input_pins[i], spec->adcs[i]); 9627 9628 return 0; 9629 } 9630 9631 static void ca0132_free(struct hda_codec *codec) 9632 { 9633 struct ca0132_spec *spec = codec->spec; 9634 9635 cancel_delayed_work_sync(&spec->unsol_hp_work); 9636 snd_hda_power_up(codec); 9637 switch (ca0132_quirk(spec)) { 9638 case QUIRK_SBZ: 9639 sbz_exit_chip(codec); 9640 break; 9641 case QUIRK_ZXR: 9642 zxr_exit_chip(codec); 9643 break; 9644 case QUIRK_R3D: 9645 r3d_exit_chip(codec); 9646 break; 9647 case QUIRK_AE5: 9648 ae5_exit_chip(codec); 9649 break; 9650 case QUIRK_AE7: 9651 ae7_exit_chip(codec); 9652 break; 9653 case QUIRK_R3DI: 9654 r3di_gpio_shutdown(codec); 9655 break; 9656 default: 9657 break; 9658 } 9659 9660 snd_hda_sequence_write(codec, spec->base_exit_verbs); 9661 ca0132_exit_chip(codec); 9662 9663 snd_hda_power_down(codec); 9664 #ifdef CONFIG_PCI 9665 if (spec->mem_base) 9666 pci_iounmap(codec->bus->pci, spec->mem_base); 9667 #endif 9668 kfree(spec->spec_init_verbs); 9669 kfree(codec->spec); 9670 } 9671 9672 static void dbpro_free(struct hda_codec *codec) 9673 { 9674 struct ca0132_spec *spec = codec->spec; 9675 9676 zxr_dbpro_power_state_shutdown(codec); 9677 9678 kfree(spec->spec_init_verbs); 9679 kfree(codec->spec); 9680 } 9681 9682 #ifdef CONFIG_PM 9683 static int ca0132_suspend(struct hda_codec *codec) 9684 { 9685 struct ca0132_spec *spec = codec->spec; 9686 9687 cancel_delayed_work_sync(&spec->unsol_hp_work); 9688 return 0; 9689 } 9690 #endif 9691 9692 static const struct hda_codec_ops ca0132_patch_ops = { 9693 .build_controls = ca0132_build_controls, 9694 .build_pcms = ca0132_build_pcms, 9695 .init = ca0132_init, 9696 .free = ca0132_free, 9697 .unsol_event = snd_hda_jack_unsol_event, 9698 #ifdef CONFIG_PM 9699 .suspend = ca0132_suspend, 9700 #endif 9701 }; 9702 9703 static const struct hda_codec_ops dbpro_patch_ops = { 9704 .build_controls = dbpro_build_controls, 9705 .build_pcms = dbpro_build_pcms, 9706 .init = dbpro_init, 9707 .free = dbpro_free, 9708 }; 9709 9710 static void ca0132_config(struct hda_codec *codec) 9711 { 9712 struct ca0132_spec *spec = codec->spec; 9713 9714 spec->dacs[0] = 0x2; 9715 spec->dacs[1] = 0x3; 9716 spec->dacs[2] = 0x4; 9717 9718 spec->multiout.dac_nids = spec->dacs; 9719 spec->multiout.num_dacs = 3; 9720 9721 if (!ca0132_use_alt_functions(spec)) 9722 spec->multiout.max_channels = 2; 9723 else 9724 spec->multiout.max_channels = 6; 9725 9726 switch (ca0132_quirk(spec)) { 9727 case QUIRK_ALIENWARE: 9728 codec_dbg(codec, "%s: QUIRK_ALIENWARE applied.\n", __func__); 9729 snd_hda_apply_pincfgs(codec, alienware_pincfgs); 9730 break; 9731 case QUIRK_SBZ: 9732 codec_dbg(codec, "%s: QUIRK_SBZ applied.\n", __func__); 9733 snd_hda_apply_pincfgs(codec, sbz_pincfgs); 9734 break; 9735 case QUIRK_ZXR: 9736 codec_dbg(codec, "%s: QUIRK_ZXR applied.\n", __func__); 9737 snd_hda_apply_pincfgs(codec, zxr_pincfgs); 9738 break; 9739 case QUIRK_R3D: 9740 codec_dbg(codec, "%s: QUIRK_R3D applied.\n", __func__); 9741 snd_hda_apply_pincfgs(codec, r3d_pincfgs); 9742 break; 9743 case QUIRK_R3DI: 9744 codec_dbg(codec, "%s: QUIRK_R3DI applied.\n", __func__); 9745 snd_hda_apply_pincfgs(codec, r3di_pincfgs); 9746 break; 9747 case QUIRK_AE5: 9748 codec_dbg(codec, "%s: QUIRK_AE5 applied.\n", __func__); 9749 snd_hda_apply_pincfgs(codec, ae5_pincfgs); 9750 break; 9751 case QUIRK_AE7: 9752 codec_dbg(codec, "%s: QUIRK_AE7 applied.\n", __func__); 9753 snd_hda_apply_pincfgs(codec, ae7_pincfgs); 9754 break; 9755 default: 9756 break; 9757 } 9758 9759 switch (ca0132_quirk(spec)) { 9760 case QUIRK_ALIENWARE: 9761 spec->num_outputs = 2; 9762 spec->out_pins[0] = 0x0b; /* speaker out */ 9763 spec->out_pins[1] = 0x0f; 9764 spec->shared_out_nid = 0x2; 9765 spec->unsol_tag_hp = 0x0f; 9766 9767 spec->adcs[0] = 0x7; /* digital mic / analog mic1 */ 9768 spec->adcs[1] = 0x8; /* analog mic2 */ 9769 spec->adcs[2] = 0xa; /* what u hear */ 9770 9771 spec->num_inputs = 3; 9772 spec->input_pins[0] = 0x12; 9773 spec->input_pins[1] = 0x11; 9774 spec->input_pins[2] = 0x13; 9775 spec->shared_mic_nid = 0x7; 9776 spec->unsol_tag_amic1 = 0x11; 9777 break; 9778 case QUIRK_SBZ: 9779 case QUIRK_R3D: 9780 spec->num_outputs = 2; 9781 spec->out_pins[0] = 0x0B; /* Line out */ 9782 spec->out_pins[1] = 0x0F; /* Rear headphone out */ 9783 spec->out_pins[2] = 0x10; /* Front Headphone / Center/LFE*/ 9784 spec->out_pins[3] = 0x11; /* Rear surround */ 9785 spec->shared_out_nid = 0x2; 9786 spec->unsol_tag_hp = spec->out_pins[1]; 9787 spec->unsol_tag_front_hp = spec->out_pins[2]; 9788 9789 spec->adcs[0] = 0x7; /* Rear Mic / Line-in */ 9790 spec->adcs[1] = 0x8; /* Front Mic, but only if no DSP */ 9791 spec->adcs[2] = 0xa; /* what u hear */ 9792 9793 spec->num_inputs = 2; 9794 spec->input_pins[0] = 0x12; /* Rear Mic / Line-in */ 9795 spec->input_pins[1] = 0x13; /* What U Hear */ 9796 spec->shared_mic_nid = 0x7; 9797 spec->unsol_tag_amic1 = spec->input_pins[0]; 9798 9799 /* SPDIF I/O */ 9800 spec->dig_out = 0x05; 9801 spec->multiout.dig_out_nid = spec->dig_out; 9802 spec->dig_in = 0x09; 9803 break; 9804 case QUIRK_ZXR: 9805 spec->num_outputs = 2; 9806 spec->out_pins[0] = 0x0B; /* Line out */ 9807 spec->out_pins[1] = 0x0F; /* Rear headphone out */ 9808 spec->out_pins[2] = 0x10; /* Center/LFE */ 9809 spec->out_pins[3] = 0x11; /* Rear surround */ 9810 spec->shared_out_nid = 0x2; 9811 spec->unsol_tag_hp = spec->out_pins[1]; 9812 spec->unsol_tag_front_hp = spec->out_pins[2]; 9813 9814 spec->adcs[0] = 0x7; /* Rear Mic / Line-in */ 9815 spec->adcs[1] = 0x8; /* Not connected, no front mic */ 9816 spec->adcs[2] = 0xa; /* what u hear */ 9817 9818 spec->num_inputs = 2; 9819 spec->input_pins[0] = 0x12; /* Rear Mic / Line-in */ 9820 spec->input_pins[1] = 0x13; /* What U Hear */ 9821 spec->shared_mic_nid = 0x7; 9822 spec->unsol_tag_amic1 = spec->input_pins[0]; 9823 break; 9824 case QUIRK_ZXR_DBPRO: 9825 spec->adcs[0] = 0x8; /* ZxR DBPro Aux In */ 9826 9827 spec->num_inputs = 1; 9828 spec->input_pins[0] = 0x11; /* RCA Line-in */ 9829 9830 spec->dig_out = 0x05; 9831 spec->multiout.dig_out_nid = spec->dig_out; 9832 9833 spec->dig_in = 0x09; 9834 break; 9835 case QUIRK_AE5: 9836 case QUIRK_AE7: 9837 spec->num_outputs = 2; 9838 spec->out_pins[0] = 0x0B; /* Line out */ 9839 spec->out_pins[1] = 0x11; /* Rear headphone out */ 9840 spec->out_pins[2] = 0x10; /* Front Headphone / Center/LFE*/ 9841 spec->out_pins[3] = 0x0F; /* Rear surround */ 9842 spec->shared_out_nid = 0x2; 9843 spec->unsol_tag_hp = spec->out_pins[1]; 9844 spec->unsol_tag_front_hp = spec->out_pins[2]; 9845 9846 spec->adcs[0] = 0x7; /* Rear Mic / Line-in */ 9847 spec->adcs[1] = 0x8; /* Front Mic, but only if no DSP */ 9848 spec->adcs[2] = 0xa; /* what u hear */ 9849 9850 spec->num_inputs = 2; 9851 spec->input_pins[0] = 0x12; /* Rear Mic / Line-in */ 9852 spec->input_pins[1] = 0x13; /* What U Hear */ 9853 spec->shared_mic_nid = 0x7; 9854 spec->unsol_tag_amic1 = spec->input_pins[0]; 9855 9856 /* SPDIF I/O */ 9857 spec->dig_out = 0x05; 9858 spec->multiout.dig_out_nid = spec->dig_out; 9859 break; 9860 case QUIRK_R3DI: 9861 spec->num_outputs = 2; 9862 spec->out_pins[0] = 0x0B; /* Line out */ 9863 spec->out_pins[1] = 0x0F; /* Rear headphone out */ 9864 spec->out_pins[2] = 0x10; /* Front Headphone / Center/LFE*/ 9865 spec->out_pins[3] = 0x11; /* Rear surround */ 9866 spec->shared_out_nid = 0x2; 9867 spec->unsol_tag_hp = spec->out_pins[1]; 9868 spec->unsol_tag_front_hp = spec->out_pins[2]; 9869 9870 spec->adcs[0] = 0x07; /* Rear Mic / Line-in */ 9871 spec->adcs[1] = 0x08; /* Front Mic, but only if no DSP */ 9872 spec->adcs[2] = 0x0a; /* what u hear */ 9873 9874 spec->num_inputs = 2; 9875 spec->input_pins[0] = 0x12; /* Rear Mic / Line-in */ 9876 spec->input_pins[1] = 0x13; /* What U Hear */ 9877 spec->shared_mic_nid = 0x7; 9878 spec->unsol_tag_amic1 = spec->input_pins[0]; 9879 9880 /* SPDIF I/O */ 9881 spec->dig_out = 0x05; 9882 spec->multiout.dig_out_nid = spec->dig_out; 9883 break; 9884 default: 9885 spec->num_outputs = 2; 9886 spec->out_pins[0] = 0x0b; /* speaker out */ 9887 spec->out_pins[1] = 0x10; /* headphone out */ 9888 spec->shared_out_nid = 0x2; 9889 spec->unsol_tag_hp = spec->out_pins[1]; 9890 9891 spec->adcs[0] = 0x7; /* digital mic / analog mic1 */ 9892 spec->adcs[1] = 0x8; /* analog mic2 */ 9893 spec->adcs[2] = 0xa; /* what u hear */ 9894 9895 spec->num_inputs = 3; 9896 spec->input_pins[0] = 0x12; 9897 spec->input_pins[1] = 0x11; 9898 spec->input_pins[2] = 0x13; 9899 spec->shared_mic_nid = 0x7; 9900 spec->unsol_tag_amic1 = spec->input_pins[0]; 9901 9902 /* SPDIF I/O */ 9903 spec->dig_out = 0x05; 9904 spec->multiout.dig_out_nid = spec->dig_out; 9905 spec->dig_in = 0x09; 9906 break; 9907 } 9908 } 9909 9910 static int ca0132_prepare_verbs(struct hda_codec *codec) 9911 { 9912 /* Verbs + terminator (an empty element) */ 9913 #define NUM_SPEC_VERBS 2 9914 struct ca0132_spec *spec = codec->spec; 9915 9916 spec->chip_init_verbs = ca0132_init_verbs0; 9917 /* 9918 * Since desktop cards use pci_mmio, this can be used to determine 9919 * whether or not to use these verbs instead of a separate bool. 9920 */ 9921 if (ca0132_use_pci_mmio(spec)) 9922 spec->desktop_init_verbs = ca0132_init_verbs1; 9923 spec->spec_init_verbs = kcalloc(NUM_SPEC_VERBS, 9924 sizeof(struct hda_verb), 9925 GFP_KERNEL); 9926 if (!spec->spec_init_verbs) 9927 return -ENOMEM; 9928 9929 /* config EAPD */ 9930 spec->spec_init_verbs[0].nid = 0x0b; 9931 spec->spec_init_verbs[0].param = 0x78D; 9932 spec->spec_init_verbs[0].verb = 0x00; 9933 9934 /* Previously commented configuration */ 9935 /* 9936 spec->spec_init_verbs[2].nid = 0x0b; 9937 spec->spec_init_verbs[2].param = AC_VERB_SET_EAPD_BTLENABLE; 9938 spec->spec_init_verbs[2].verb = 0x02; 9939 9940 spec->spec_init_verbs[3].nid = 0x10; 9941 spec->spec_init_verbs[3].param = 0x78D; 9942 spec->spec_init_verbs[3].verb = 0x02; 9943 9944 spec->spec_init_verbs[4].nid = 0x10; 9945 spec->spec_init_verbs[4].param = AC_VERB_SET_EAPD_BTLENABLE; 9946 spec->spec_init_verbs[4].verb = 0x02; 9947 */ 9948 9949 /* Terminator: spec->spec_init_verbs[NUM_SPEC_VERBS-1] */ 9950 return 0; 9951 } 9952 9953 /* 9954 * The Sound Blaster ZxR shares the same PCI subsystem ID as some regular 9955 * Sound Blaster Z cards. However, they have different HDA codec subsystem 9956 * ID's. So, we check for the ZxR's subsystem ID, as well as the DBPro 9957 * daughter boards ID. 9958 */ 9959 static void sbz_detect_quirk(struct hda_codec *codec) 9960 { 9961 struct ca0132_spec *spec = codec->spec; 9962 9963 switch (codec->core.subsystem_id) { 9964 case 0x11020033: 9965 spec->quirk = QUIRK_ZXR; 9966 break; 9967 case 0x1102003f: 9968 spec->quirk = QUIRK_ZXR_DBPRO; 9969 break; 9970 default: 9971 spec->quirk = QUIRK_SBZ; 9972 break; 9973 } 9974 } 9975 9976 static int patch_ca0132(struct hda_codec *codec) 9977 { 9978 struct ca0132_spec *spec; 9979 int err; 9980 const struct snd_pci_quirk *quirk; 9981 9982 codec_dbg(codec, "patch_ca0132\n"); 9983 9984 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 9985 if (!spec) 9986 return -ENOMEM; 9987 codec->spec = spec; 9988 spec->codec = codec; 9989 9990 /* Detect codec quirk */ 9991 quirk = snd_pci_quirk_lookup(codec->bus->pci, ca0132_quirks); 9992 if (quirk) 9993 spec->quirk = quirk->value; 9994 else 9995 spec->quirk = QUIRK_NONE; 9996 if (ca0132_quirk(spec) == QUIRK_SBZ) 9997 sbz_detect_quirk(codec); 9998 9999 if (ca0132_quirk(spec) == QUIRK_ZXR_DBPRO) 10000 codec->patch_ops = dbpro_patch_ops; 10001 else 10002 codec->patch_ops = ca0132_patch_ops; 10003 10004 codec->pcm_format_first = 1; 10005 codec->no_sticky_stream = 1; 10006 10007 10008 spec->dsp_state = DSP_DOWNLOAD_INIT; 10009 spec->num_mixers = 1; 10010 10011 /* Set which mixers each quirk uses. */ 10012 switch (ca0132_quirk(spec)) { 10013 case QUIRK_SBZ: 10014 spec->mixers[0] = desktop_mixer; 10015 snd_hda_codec_set_name(codec, "Sound Blaster Z"); 10016 break; 10017 case QUIRK_ZXR: 10018 spec->mixers[0] = desktop_mixer; 10019 snd_hda_codec_set_name(codec, "Sound Blaster ZxR"); 10020 break; 10021 case QUIRK_ZXR_DBPRO: 10022 break; 10023 case QUIRK_R3D: 10024 spec->mixers[0] = desktop_mixer; 10025 snd_hda_codec_set_name(codec, "Recon3D"); 10026 break; 10027 case QUIRK_R3DI: 10028 spec->mixers[0] = r3di_mixer; 10029 snd_hda_codec_set_name(codec, "Recon3Di"); 10030 break; 10031 case QUIRK_AE5: 10032 spec->mixers[0] = desktop_mixer; 10033 snd_hda_codec_set_name(codec, "Sound BlasterX AE-5"); 10034 break; 10035 case QUIRK_AE7: 10036 spec->mixers[0] = desktop_mixer; 10037 snd_hda_codec_set_name(codec, "Sound Blaster AE-7"); 10038 break; 10039 default: 10040 spec->mixers[0] = ca0132_mixer; 10041 break; 10042 } 10043 10044 /* Setup whether or not to use alt functions/controls/pci_mmio */ 10045 switch (ca0132_quirk(spec)) { 10046 case QUIRK_SBZ: 10047 case QUIRK_R3D: 10048 case QUIRK_AE5: 10049 case QUIRK_AE7: 10050 case QUIRK_ZXR: 10051 spec->use_alt_controls = true; 10052 spec->use_alt_functions = true; 10053 spec->use_pci_mmio = true; 10054 break; 10055 case QUIRK_R3DI: 10056 spec->use_alt_controls = true; 10057 spec->use_alt_functions = true; 10058 spec->use_pci_mmio = false; 10059 break; 10060 default: 10061 spec->use_alt_controls = false; 10062 spec->use_alt_functions = false; 10063 spec->use_pci_mmio = false; 10064 break; 10065 } 10066 10067 #ifdef CONFIG_PCI 10068 if (spec->use_pci_mmio) { 10069 spec->mem_base = pci_iomap(codec->bus->pci, 2, 0xC20); 10070 if (spec->mem_base == NULL) { 10071 codec_warn(codec, "pci_iomap failed! Setting quirk to QUIRK_NONE."); 10072 spec->quirk = QUIRK_NONE; 10073 } 10074 } 10075 #endif 10076 10077 spec->base_init_verbs = ca0132_base_init_verbs; 10078 spec->base_exit_verbs = ca0132_base_exit_verbs; 10079 10080 INIT_DELAYED_WORK(&spec->unsol_hp_work, ca0132_unsol_hp_delayed); 10081 10082 ca0132_init_chip(codec); 10083 10084 ca0132_config(codec); 10085 10086 err = ca0132_prepare_verbs(codec); 10087 if (err < 0) 10088 goto error; 10089 10090 err = snd_hda_parse_pin_def_config(codec, &spec->autocfg, NULL); 10091 if (err < 0) 10092 goto error; 10093 10094 ca0132_setup_unsol(codec); 10095 10096 return 0; 10097 10098 error: 10099 ca0132_free(codec); 10100 return err; 10101 } 10102 10103 /* 10104 * patch entries 10105 */ 10106 static const struct hda_device_id snd_hda_id_ca0132[] = { 10107 HDA_CODEC_ENTRY(0x11020011, "CA0132", patch_ca0132), 10108 {} /* terminator */ 10109 }; 10110 MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_ca0132); 10111 10112 MODULE_LICENSE("GPL"); 10113 MODULE_DESCRIPTION("Creative Sound Core3D codec"); 10114 10115 static struct hda_codec_driver ca0132_driver = { 10116 .id = snd_hda_id_ca0132, 10117 }; 10118 10119 module_hda_codec_driver(ca0132_driver); 10120