aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/twl4030.c
diff options
context:
space:
mode:
authorJoonyoung Shim <jy0922.shim@samsung.com>2009-04-22 00:13:34 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2009-04-23 05:15:08 -0400
commit1a787e7ad242312af0afb2156596d42ee5e0c6bc (patch)
tree251fca85f426f995504e92ab25719ae4e0043ff5 /sound/soc/codecs/twl4030.c
parent291ce18ceb84aca79368369885eec2d329ae16c5 (diff)
ASoC: TWL4030: Add VDL path support
Add DAPMs for VDL(Voice Down Link) path. To support VDL path, we have to change DAPMs of outputs(Earpiece, PreDrive Left/Right, Headset Left/Right, Carkit Left/Right) from mux to mixer. Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com> Acked-by: Peter Ujfalusi <peter.ujfalusi@nokia.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/twl4030.c')
-rw-r--r--sound/soc/codecs/twl4030.c256
1 files changed, 126 insertions, 130 deletions
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
index cc2968cf640..fdf88dfbcff 100644
--- a/sound/soc/codecs/twl4030.c
+++ b/sound/soc/codecs/twl4030.c
@@ -321,104 +321,60 @@ static void twl4030_power_down(struct snd_soc_codec *codec)
321} 321}
322 322
323/* Earpiece */ 323/* Earpiece */
324static const char *twl4030_earpiece_texts[] = 324static const struct snd_kcontrol_new twl4030_dapm_earpiece_controls[] = {
325 {"Off", "DACL1", "DACL2", "DACR1"}; 325 SOC_DAPM_SINGLE("Voice", TWL4030_REG_EAR_CTL, 0, 1, 0),
326 326 SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_EAR_CTL, 1, 1, 0),
327static const unsigned int twl4030_earpiece_values[] = 327 SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_EAR_CTL, 2, 1, 0),
328 {0x0, 0x1, 0x2, 0x4}; 328 SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_EAR_CTL, 3, 1, 0),
329 329};
330static const struct soc_enum twl4030_earpiece_enum =
331 SOC_VALUE_ENUM_SINGLE(TWL4030_REG_EAR_CTL, 1, 0x7,
332 ARRAY_SIZE(twl4030_earpiece_texts),
333 twl4030_earpiece_texts,
334 twl4030_earpiece_values);
335
336static const struct snd_kcontrol_new twl4030_dapm_earpiece_control =
337SOC_DAPM_VALUE_ENUM("Route", twl4030_earpiece_enum);
338 330
339/* PreDrive Left */ 331/* PreDrive Left */
340static const char *twl4030_predrivel_texts[] = 332static const struct snd_kcontrol_new twl4030_dapm_predrivel_controls[] = {
341 {"Off", "DACL1", "DACL2", "DACR2"}; 333 SOC_DAPM_SINGLE("Voice", TWL4030_REG_PREDL_CTL, 0, 1, 0),
342 334 SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_PREDL_CTL, 1, 1, 0),
343static const unsigned int twl4030_predrivel_values[] = 335 SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_PREDL_CTL, 2, 1, 0),
344 {0x0, 0x1, 0x2, 0x4}; 336 SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_PREDL_CTL, 3, 1, 0),
345 337};
346static const struct soc_enum twl4030_predrivel_enum =
347 SOC_VALUE_ENUM_SINGLE(TWL4030_REG_PREDL_CTL, 1, 0x7,
348 ARRAY_SIZE(twl4030_predrivel_texts),
349 twl4030_predrivel_texts,
350 twl4030_predrivel_values);
351
352static const struct snd_kcontrol_new twl4030_dapm_predrivel_control =
353SOC_DAPM_VALUE_ENUM("Route", twl4030_predrivel_enum);
354 338
355/* PreDrive Right */ 339/* PreDrive Right */
356static const char *twl4030_predriver_texts[] = 340static const struct snd_kcontrol_new twl4030_dapm_predriver_controls[] = {
357 {"Off", "DACR1", "DACR2", "DACL2"}; 341 SOC_DAPM_SINGLE("Voice", TWL4030_REG_PREDR_CTL, 0, 1, 0),
358 342 SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_PREDR_CTL, 1, 1, 0),
359static const unsigned int twl4030_predriver_values[] = 343 SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_PREDR_CTL, 2, 1, 0),
360 {0x0, 0x1, 0x2, 0x4}; 344 SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_PREDR_CTL, 3, 1, 0),
361 345};
362static const struct soc_enum twl4030_predriver_enum =
363 SOC_VALUE_ENUM_SINGLE(TWL4030_REG_PREDR_CTL, 1, 0x7,
364 ARRAY_SIZE(twl4030_predriver_texts),
365 twl4030_predriver_texts,
366 twl4030_predriver_values);
367
368static const struct snd_kcontrol_new twl4030_dapm_predriver_control =
369SOC_DAPM_VALUE_ENUM("Route", twl4030_predriver_enum);
370 346
371/* Headset Left */ 347/* Headset Left */
372static const char *twl4030_hsol_texts[] = 348static const struct snd_kcontrol_new twl4030_dapm_hsol_controls[] = {
373 {"Off", "DACL1", "DACL2"}; 349 SOC_DAPM_SINGLE("Voice", TWL4030_REG_HS_SEL, 0, 1, 0),
374 350 SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_HS_SEL, 1, 1, 0),
375static const struct soc_enum twl4030_hsol_enum = 351 SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_HS_SEL, 2, 1, 0),
376 SOC_ENUM_SINGLE(TWL4030_REG_HS_SEL, 1, 352};
377 ARRAY_SIZE(twl4030_hsol_texts),
378 twl4030_hsol_texts);
379
380static const struct snd_kcontrol_new twl4030_dapm_hsol_control =
381SOC_DAPM_ENUM("Route", twl4030_hsol_enum);
382 353
383/* Headset Right */ 354/* Headset Right */
384static const char *twl4030_hsor_texts[] = 355static const struct snd_kcontrol_new twl4030_dapm_hsor_controls[] = {
385 {"Off", "DACR1", "DACR2"}; 356 SOC_DAPM_SINGLE("Voice", TWL4030_REG_HS_SEL, 3, 1, 0),
386 357 SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_HS_SEL, 4, 1, 0),
387static const struct soc_enum twl4030_hsor_enum = 358 SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_HS_SEL, 5, 1, 0),
388 SOC_ENUM_SINGLE(TWL4030_REG_HS_SEL, 4, 359};
389 ARRAY_SIZE(twl4030_hsor_texts),
390 twl4030_hsor_texts);
391
392static const struct snd_kcontrol_new twl4030_dapm_hsor_control =
393SOC_DAPM_ENUM("Route", twl4030_hsor_enum);
394 360
395/* Carkit Left */ 361/* Carkit Left */
396static const char *twl4030_carkitl_texts[] = 362static const struct snd_kcontrol_new twl4030_dapm_carkitl_controls[] = {
397 {"Off", "DACL1", "DACL2"}; 363 SOC_DAPM_SINGLE("Voice", TWL4030_REG_PRECKL_CTL, 0, 1, 0),
398 364 SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_PRECKL_CTL, 1, 1, 0),
399static const struct soc_enum twl4030_carkitl_enum = 365 SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_PRECKL_CTL, 2, 1, 0),
400 SOC_ENUM_SINGLE(TWL4030_REG_PRECKL_CTL, 1, 366};
401 ARRAY_SIZE(twl4030_carkitl_texts),
402 twl4030_carkitl_texts);
403
404static const struct snd_kcontrol_new twl4030_dapm_carkitl_control =
405SOC_DAPM_ENUM("Route", twl4030_carkitl_enum);
406 367
407/* Carkit Right */ 368/* Carkit Right */
408static const char *twl4030_carkitr_texts[] = 369static const struct snd_kcontrol_new twl4030_dapm_carkitr_controls[] = {
409 {"Off", "DACR1", "DACR2"}; 370 SOC_DAPM_SINGLE("Voice", TWL4030_REG_PRECKR_CTL, 0, 1, 0),
410 371 SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_PRECKR_CTL, 1, 1, 0),
411static const struct soc_enum twl4030_carkitr_enum = 372 SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_PRECKR_CTL, 2, 1, 0),
412 SOC_ENUM_SINGLE(TWL4030_REG_PRECKR_CTL, 1, 373};
413 ARRAY_SIZE(twl4030_carkitr_texts),
414 twl4030_carkitr_texts);
415
416static const struct snd_kcontrol_new twl4030_dapm_carkitr_control =
417SOC_DAPM_ENUM("Route", twl4030_carkitr_enum);
418 374
419/* Handsfree Left */ 375/* Handsfree Left */
420static const char *twl4030_handsfreel_texts[] = 376static const char *twl4030_handsfreel_texts[] =
421 {"Voice", "DACL1", "DACL2", "DACR2"}; 377 {"Voice", "AudioL1", "AudioL2", "AudioR2"};
422 378
423static const struct soc_enum twl4030_handsfreel_enum = 379static const struct soc_enum twl4030_handsfreel_enum =
424 SOC_ENUM_SINGLE(TWL4030_REG_HFL_CTL, 0, 380 SOC_ENUM_SINGLE(TWL4030_REG_HFL_CTL, 0,
@@ -430,7 +386,7 @@ SOC_DAPM_ENUM("Route", twl4030_handsfreel_enum);
430 386
431/* Handsfree Right */ 387/* Handsfree Right */
432static const char *twl4030_handsfreer_texts[] = 388static const char *twl4030_handsfreer_texts[] =
433 {"Voice", "DACR1", "DACR2", "DACL2"}; 389 {"Voice", "AudioR1", "AudioR2", "AudioL2"};
434 390
435static const struct soc_enum twl4030_handsfreer_enum = 391static const struct soc_enum twl4030_handsfreer_enum =
436 SOC_ENUM_SINGLE(TWL4030_REG_HFR_CTL, 0, 392 SOC_ENUM_SINGLE(TWL4030_REG_HFR_CTL, 0,
@@ -829,6 +785,12 @@ static DECLARE_TLV_DB_SCALE(digital_fine_tlv, -6300, 100, 1);
829static DECLARE_TLV_DB_SCALE(digital_coarse_tlv, 0, 600, 0); 785static DECLARE_TLV_DB_SCALE(digital_coarse_tlv, 0, 600, 0);
830 786
831/* 787/*
788 * Voice Downlink GAIN volume control:
789 * from -37 to 12 dB in 1 dB steps (mute instead of -37 dB)
790 */
791static DECLARE_TLV_DB_SCALE(digital_voice_downlink_tlv, -3700, 100, 1);
792
793/*
832 * Analog playback gain 794 * Analog playback gain
833 * -24 dB to 12 dB in 2 dB steps 795 * -24 dB to 12 dB in 2 dB steps
834 */ 796 */
@@ -892,6 +854,16 @@ static const struct snd_kcontrol_new twl4030_snd_controls[] = {
892 TWL4030_REG_ARXL2_APGA_CTL, TWL4030_REG_ARXR2_APGA_CTL, 854 TWL4030_REG_ARXL2_APGA_CTL, TWL4030_REG_ARXR2_APGA_CTL,
893 1, 1, 0), 855 1, 1, 0),
894 856
857 /* Common voice downlink gain controls */
858 SOC_SINGLE_TLV("DAC Voice Digital Downlink Volume",
859 TWL4030_REG_VRXPGA, 0, 0x31, 0, digital_voice_downlink_tlv),
860
861 SOC_SINGLE_TLV("DAC Voice Analog Downlink Volume",
862 TWL4030_REG_VDL_APGA_CTL, 3, 0x12, 1, analog_tlv),
863
864 SOC_SINGLE("DAC Voice Analog Downlink Switch",
865 TWL4030_REG_VDL_APGA_CTL, 1, 1, 0),
866
895 /* Separate output gain controls */ 867 /* Separate output gain controls */
896 SOC_DOUBLE_R_TLV_TWL4030("PreDriv Playback Volume", 868 SOC_DOUBLE_R_TLV_TWL4030("PreDriv Playback Volume",
897 TWL4030_REG_PREDL_CTL, TWL4030_REG_PREDR_CTL, 869 TWL4030_REG_PREDL_CTL, TWL4030_REG_PREDR_CTL,
@@ -956,6 +928,8 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = {
956 SND_SOC_NOPM, 0, 0), 928 SND_SOC_NOPM, 0, 0),
957 SND_SOC_DAPM_DAC("DAC Left2", "Left Rear Playback", 929 SND_SOC_DAPM_DAC("DAC Left2", "Left Rear Playback",
958 SND_SOC_NOPM, 0, 0), 930 SND_SOC_NOPM, 0, 0),
931 SND_SOC_DAPM_DAC("DAC Voice", "Voice Playback",
932 TWL4030_REG_AVDAC_CTL, 4, 0),
959 933
960 /* Analog PGAs */ 934 /* Analog PGAs */
961 SND_SOC_DAPM_PGA("ARXR1_APGA", TWL4030_REG_ARXR1_APGA_CTL, 935 SND_SOC_DAPM_PGA("ARXR1_APGA", TWL4030_REG_ARXR1_APGA_CTL,
@@ -966,6 +940,8 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = {
966 0, 0, NULL, 0), 940 0, 0, NULL, 0),
967 SND_SOC_DAPM_PGA("ARXL2_APGA", TWL4030_REG_ARXL2_APGA_CTL, 941 SND_SOC_DAPM_PGA("ARXL2_APGA", TWL4030_REG_ARXL2_APGA_CTL,
968 0, 0, NULL, 0), 942 0, 0, NULL, 0),
943 SND_SOC_DAPM_PGA("VDL_APGA", TWL4030_REG_VDL_APGA_CTL,
944 0, 0, NULL, 0),
969 945
970 /* Analog bypasses */ 946 /* Analog bypasses */
971 SND_SOC_DAPM_SWITCH_E("Right1 Analog Loopback", SND_SOC_NOPM, 0, 0, 947 SND_SOC_DAPM_SWITCH_E("Right1 Analog Loopback", SND_SOC_NOPM, 0, 0,
@@ -998,26 +974,35 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = {
998 SND_SOC_DAPM_MIXER("Analog L2 Playback Mixer", TWL4030_REG_AVDAC_CTL, 974 SND_SOC_DAPM_MIXER("Analog L2 Playback Mixer", TWL4030_REG_AVDAC_CTL,
999 3, 0, NULL, 0), 975 3, 0, NULL, 0),
1000 976
1001 /* Output MUX controls */ 977 /* Output MIXER controls */
1002 /* Earpiece */ 978 /* Earpiece */
1003 SND_SOC_DAPM_VALUE_MUX("Earpiece Mux", SND_SOC_NOPM, 0, 0, 979 SND_SOC_DAPM_MIXER("Earpiece Mixer", SND_SOC_NOPM, 0, 0,
1004 &twl4030_dapm_earpiece_control), 980 &twl4030_dapm_earpiece_controls[0],
981 ARRAY_SIZE(twl4030_dapm_earpiece_controls)),
1005 /* PreDrivL/R */ 982 /* PreDrivL/R */
1006 SND_SOC_DAPM_VALUE_MUX("PredriveL Mux", SND_SOC_NOPM, 0, 0, 983 SND_SOC_DAPM_MIXER("PredriveL Mixer", SND_SOC_NOPM, 0, 0,
1007 &twl4030_dapm_predrivel_control), 984 &twl4030_dapm_predrivel_controls[0],
1008 SND_SOC_DAPM_VALUE_MUX("PredriveR Mux", SND_SOC_NOPM, 0, 0, 985 ARRAY_SIZE(twl4030_dapm_predrivel_controls)),
1009 &twl4030_dapm_predriver_control), 986 SND_SOC_DAPM_MIXER("PredriveR Mixer", SND_SOC_NOPM, 0, 0,
987 &twl4030_dapm_predriver_controls[0],
988 ARRAY_SIZE(twl4030_dapm_predriver_controls)),
1010 /* HeadsetL/R */ 989 /* HeadsetL/R */
1011 SND_SOC_DAPM_MUX_E("HeadsetL Mux", SND_SOC_NOPM, 0, 0, 990 SND_SOC_DAPM_MIXER_E("HeadsetL Mixer", SND_SOC_NOPM, 0, 0,
1012 &twl4030_dapm_hsol_control, headsetl_event, 991 &twl4030_dapm_hsol_controls[0],
1013 SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD), 992 ARRAY_SIZE(twl4030_dapm_hsol_controls), headsetl_event,
1014 SND_SOC_DAPM_MUX("HeadsetR Mux", SND_SOC_NOPM, 0, 0, 993 SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
1015 &twl4030_dapm_hsor_control), 994 SND_SOC_DAPM_MIXER("HeadsetR Mixer", SND_SOC_NOPM, 0, 0,
995 &twl4030_dapm_hsor_controls[0],
996 ARRAY_SIZE(twl4030_dapm_hsor_controls)),
1016 /* CarkitL/R */ 997 /* CarkitL/R */
1017 SND_SOC_DAPM_MUX("CarkitL Mux", SND_SOC_NOPM, 0, 0, 998 SND_SOC_DAPM_MIXER("CarkitL Mixer", SND_SOC_NOPM, 0, 0,
1018 &twl4030_dapm_carkitl_control), 999 &twl4030_dapm_carkitl_controls[0],
1019 SND_SOC_DAPM_MUX("CarkitR Mux", SND_SOC_NOPM, 0, 0, 1000 ARRAY_SIZE(twl4030_dapm_carkitl_controls)),
1020 &twl4030_dapm_carkitr_control), 1001 SND_SOC_DAPM_MIXER("CarkitR Mixer", SND_SOC_NOPM, 0, 0,
1002 &twl4030_dapm_carkitr_controls[0],
1003 ARRAY_SIZE(twl4030_dapm_carkitr_controls)),
1004
1005 /* Output MUX controls */
1021 /* HandsfreeL/R */ 1006 /* HandsfreeL/R */
1022 SND_SOC_DAPM_MUX_E("HandsfreeL Mux", TWL4030_REG_HFL_CTL, 5, 0, 1007 SND_SOC_DAPM_MUX_E("HandsfreeL Mux", TWL4030_REG_HFL_CTL, 5, 0,
1023 &twl4030_dapm_handsfreel_control, handsfree_event, 1008 &twl4030_dapm_handsfreel_control, handsfree_event,
@@ -1082,50 +1067,61 @@ static const struct snd_soc_dapm_route intercon[] = {
1082 {"ARXL2_APGA", NULL, "Analog L2 Playback Mixer"}, 1067 {"ARXL2_APGA", NULL, "Analog L2 Playback Mixer"},
1083 {"ARXR2_APGA", NULL, "Analog R2 Playback Mixer"}, 1068 {"ARXR2_APGA", NULL, "Analog R2 Playback Mixer"},
1084 1069
1070 {"VDL_APGA", NULL, "DAC Voice"},
1071
1085 /* Internal playback routings */ 1072 /* Internal playback routings */
1086 /* Earpiece */ 1073 /* Earpiece */
1087 {"Earpiece Mux", "DACL1", "ARXL1_APGA"}, 1074 {"Earpiece Mixer", "Voice", "VDL_APGA"},
1088 {"Earpiece Mux", "DACL2", "ARXL2_APGA"}, 1075 {"Earpiece Mixer", "AudioL1", "ARXL1_APGA"},
1089 {"Earpiece Mux", "DACR1", "ARXR1_APGA"}, 1076 {"Earpiece Mixer", "AudioL2", "ARXL2_APGA"},
1077 {"Earpiece Mixer", "AudioR1", "ARXR1_APGA"},
1090 /* PreDrivL */ 1078 /* PreDrivL */
1091 {"PredriveL Mux", "DACL1", "ARXL1_APGA"}, 1079 {"PredriveL Mixer", "Voice", "VDL_APGA"},
1092 {"PredriveL Mux", "DACL2", "ARXL2_APGA"}, 1080 {"PredriveL Mixer", "AudioL1", "ARXL1_APGA"},
1093 {"PredriveL Mux", "DACR2", "ARXR2_APGA"}, 1081 {"PredriveL Mixer", "AudioL2", "ARXL2_APGA"},
1082 {"PredriveL Mixer", "AudioR2", "ARXR2_APGA"},
1094 /* PreDrivR */ 1083 /* PreDrivR */
1095 {"PredriveR Mux", "DACR1", "ARXR1_APGA"}, 1084 {"PredriveR Mixer", "Voice", "VDL_APGA"},
1096 {"PredriveR Mux", "DACR2", "ARXR2_APGA"}, 1085 {"PredriveR Mixer", "AudioR1", "ARXR1_APGA"},
1097 {"PredriveR Mux", "DACL2", "ARXL2_APGA"}, 1086 {"PredriveR Mixer", "AudioR2", "ARXR2_APGA"},
1087 {"PredriveR Mixer", "AudioL2", "ARXL2_APGA"},
1098 /* HeadsetL */ 1088 /* HeadsetL */
1099 {"HeadsetL Mux", "DACL1", "ARXL1_APGA"}, 1089 {"HeadsetL Mixer", "Voice", "VDL_APGA"},
1100 {"HeadsetL Mux", "DACL2", "ARXL2_APGA"}, 1090 {"HeadsetL Mixer", "AudioL1", "ARXL1_APGA"},
1091 {"HeadsetL Mixer", "AudioL2", "ARXL2_APGA"},
1101 /* HeadsetR */ 1092 /* HeadsetR */
1102 {"HeadsetR Mux", "DACR1", "ARXR1_APGA"}, 1093 {"HeadsetR Mixer", "Voice", "VDL_APGA"},
1103 {"HeadsetR Mux", "DACR2", "ARXR2_APGA"}, 1094 {"HeadsetR Mixer", "AudioR1", "ARXR1_APGA"},
1095 {"HeadsetR Mixer", "AudioR2", "ARXR2_APGA"},
1104 /* CarkitL */ 1096 /* CarkitL */
1105 {"CarkitL Mux", "DACL1", "ARXL1_APGA"}, 1097 {"CarkitL Mixer", "Voice", "VDL_APGA"},
1106 {"CarkitL Mux", "DACL2", "ARXL2_APGA"}, 1098 {"CarkitL Mixer", "AudioL1", "ARXL1_APGA"},
1099 {"CarkitL Mixer", "AudioL2", "ARXL2_APGA"},
1107 /* CarkitR */ 1100 /* CarkitR */
1108 {"CarkitR Mux", "DACR1", "ARXR1_APGA"}, 1101 {"CarkitR Mixer", "Voice", "VDL_APGA"},
1109 {"CarkitR Mux", "DACR2", "ARXR2_APGA"}, 1102 {"CarkitR Mixer", "AudioR1", "ARXR1_APGA"},
1103 {"CarkitR Mixer", "AudioR2", "ARXR2_APGA"},
1110 /* HandsfreeL */ 1104 /* HandsfreeL */
1111 {"HandsfreeL Mux", "DACL1", "ARXL1_APGA"}, 1105 {"HandsfreeL Mux", "Voice", "VDL_APGA"},
1112 {"HandsfreeL Mux", "DACL2", "ARXL2_APGA"}, 1106 {"HandsfreeL Mux", "AudioL1", "ARXL1_APGA"},
1113 {"HandsfreeL Mux", "DACR2", "ARXR2_APGA"}, 1107 {"HandsfreeL Mux", "AudioL2", "ARXL2_APGA"},
1108 {"HandsfreeL Mux", "AudioR2", "ARXR2_APGA"},
1114 /* HandsfreeR */ 1109 /* HandsfreeR */
1115 {"HandsfreeR Mux", "DACR1", "ARXR1_APGA"}, 1110 {"HandsfreeR Mux", "Voice", "VDL_APGA"},
1116 {"HandsfreeR Mux", "DACR2", "ARXR2_APGA"}, 1111 {"HandsfreeR Mux", "AudioR1", "ARXR1_APGA"},
1117 {"HandsfreeR Mux", "DACL2", "ARXL2_APGA"}, 1112 {"HandsfreeR Mux", "AudioR2", "ARXR2_APGA"},
1113 {"HandsfreeR Mux", "AudioL2", "ARXL2_APGA"},
1118 1114
1119 /* outputs */ 1115 /* outputs */
1120 {"OUTL", NULL, "ARXL2_APGA"}, 1116 {"OUTL", NULL, "ARXL2_APGA"},
1121 {"OUTR", NULL, "ARXR2_APGA"}, 1117 {"OUTR", NULL, "ARXR2_APGA"},
1122 {"EARPIECE", NULL, "Earpiece Mux"}, 1118 {"EARPIECE", NULL, "Earpiece Mixer"},
1123 {"PREDRIVEL", NULL, "PredriveL Mux"}, 1119 {"PREDRIVEL", NULL, "PredriveL Mixer"},
1124 {"PREDRIVER", NULL, "PredriveR Mux"}, 1120 {"PREDRIVER", NULL, "PredriveR Mixer"},
1125 {"HSOL", NULL, "HeadsetL Mux"}, 1121 {"HSOL", NULL, "HeadsetL Mixer"},
1126 {"HSOR", NULL, "HeadsetR Mux"}, 1122 {"HSOR", NULL, "HeadsetR Mixer"},
1127 {"CARKITL", NULL, "CarkitL Mux"}, 1123 {"CARKITL", NULL, "CarkitL Mixer"},
1128 {"CARKITR", NULL, "CarkitR Mux"}, 1124 {"CARKITR", NULL, "CarkitR Mixer"},
1129 {"HFL", NULL, "HandsfreeL Mux"}, 1125 {"HFL", NULL, "HandsfreeL Mux"},
1130 {"HFR", NULL, "HandsfreeR Mux"}, 1126 {"HFR", NULL, "HandsfreeR Mux"},
1131 1127