diff options
author | Oder Chiou <oder_chiou@realtek.com> | 2014-04-08 07:40:00 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-04-14 12:27:42 -0400 |
commit | 022d21f004c14db2151d08143a544b292324d099 (patch) | |
tree | 086d1e80f956bef74c7b376e7da88049e92b1345 | |
parent | 09caf300540c4a610dbe6e46afdab18f365be7e7 (diff) |
ASoC: rt5640: add rt5639 support
This patch adds the rt5639 support
Signed-off-by: Oder Chiou <oder_chiou@realtek.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r-- | sound/soc/codecs/rt5640.c | 286 | ||||
-rw-r--r-- | sound/soc/codecs/rt5640.h | 3 |
2 files changed, 213 insertions, 76 deletions
diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c index a7db7ef38cfc..a20781eda719 100644 --- a/sound/soc/codecs/rt5640.c +++ b/sound/soc/codecs/rt5640.c | |||
@@ -398,18 +398,13 @@ static const struct snd_kcontrol_new rt5640_snd_controls[] = { | |||
398 | RT5640_VOL_L_SFT, RT5640_VOL_R_SFT, 1, 1), | 398 | RT5640_VOL_L_SFT, RT5640_VOL_R_SFT, 1, 1), |
399 | SOC_DOUBLE_TLV("OUT Playback Volume", RT5640_OUTPUT, | 399 | SOC_DOUBLE_TLV("OUT Playback Volume", RT5640_OUTPUT, |
400 | RT5640_L_VOL_SFT, RT5640_R_VOL_SFT, 39, 1, out_vol_tlv), | 400 | RT5640_L_VOL_SFT, RT5640_R_VOL_SFT, 39, 1, out_vol_tlv), |
401 | /* MONO Output Control */ | 401 | |
402 | SOC_SINGLE("Mono Playback Switch", RT5640_MONO_OUT, | ||
403 | RT5640_L_MUTE_SFT, 1, 1), | ||
404 | /* DAC Digital Volume */ | 402 | /* DAC Digital Volume */ |
405 | SOC_DOUBLE("DAC2 Playback Switch", RT5640_DAC2_CTRL, | 403 | SOC_DOUBLE("DAC2 Playback Switch", RT5640_DAC2_CTRL, |
406 | RT5640_M_DAC_L2_VOL_SFT, RT5640_M_DAC_R2_VOL_SFT, 1, 1), | 404 | RT5640_M_DAC_L2_VOL_SFT, RT5640_M_DAC_R2_VOL_SFT, 1, 1), |
407 | SOC_DOUBLE_TLV("DAC1 Playback Volume", RT5640_DAC1_DIG_VOL, | 405 | SOC_DOUBLE_TLV("DAC1 Playback Volume", RT5640_DAC1_DIG_VOL, |
408 | RT5640_L_VOL_SFT, RT5640_R_VOL_SFT, | 406 | RT5640_L_VOL_SFT, RT5640_R_VOL_SFT, |
409 | 175, 0, dac_vol_tlv), | 407 | 175, 0, dac_vol_tlv), |
410 | SOC_DOUBLE_TLV("Mono DAC Playback Volume", RT5640_DAC2_DIG_VOL, | ||
411 | RT5640_L_VOL_SFT, RT5640_R_VOL_SFT, | ||
412 | 175, 0, dac_vol_tlv), | ||
413 | /* IN1/IN2 Control */ | 408 | /* IN1/IN2 Control */ |
414 | SOC_SINGLE_TLV("IN1 Boost", RT5640_IN1_IN2, | 409 | SOC_SINGLE_TLV("IN1 Boost", RT5640_IN1_IN2, |
415 | RT5640_BST_SFT1, 8, 0, bst_tlv), | 410 | RT5640_BST_SFT1, 8, 0, bst_tlv), |
@@ -441,6 +436,15 @@ static const struct snd_kcontrol_new rt5640_snd_controls[] = { | |||
441 | SOC_ENUM("DAC IF2 Data Switch", rt5640_if2_dac_enum), | 436 | SOC_ENUM("DAC IF2 Data Switch", rt5640_if2_dac_enum), |
442 | }; | 437 | }; |
443 | 438 | ||
439 | static const struct snd_kcontrol_new rt5640_specific_snd_controls[] = { | ||
440 | /* MONO Output Control */ | ||
441 | SOC_SINGLE("Mono Playback Switch", RT5640_MONO_OUT, RT5640_L_MUTE_SFT, | ||
442 | 1, 1), | ||
443 | |||
444 | SOC_DOUBLE_TLV("Mono DAC Playback Volume", RT5640_DAC2_DIG_VOL, | ||
445 | RT5640_L_VOL_SFT, RT5640_R_VOL_SFT, 175, 0, dac_vol_tlv), | ||
446 | }; | ||
447 | |||
444 | /** | 448 | /** |
445 | * set_dmic_clk - Set parameter of dmic. | 449 | * set_dmic_clk - Set parameter of dmic. |
446 | * | 450 | * |
@@ -554,6 +558,20 @@ static const struct snd_kcontrol_new rt5640_sto_dac_r_mix[] = { | |||
554 | RT5640_M_ANC_DAC_R_SFT, 1, 1), | 558 | RT5640_M_ANC_DAC_R_SFT, 1, 1), |
555 | }; | 559 | }; |
556 | 560 | ||
561 | static const struct snd_kcontrol_new rt5639_sto_dac_l_mix[] = { | ||
562 | SOC_DAPM_SINGLE("DAC L1 Switch", RT5640_STO_DAC_MIXER, | ||
563 | RT5640_M_DAC_L1_SFT, 1, 1), | ||
564 | SOC_DAPM_SINGLE("DAC L2 Switch", RT5640_STO_DAC_MIXER, | ||
565 | RT5640_M_DAC_L2_SFT, 1, 1), | ||
566 | }; | ||
567 | |||
568 | static const struct snd_kcontrol_new rt5639_sto_dac_r_mix[] = { | ||
569 | SOC_DAPM_SINGLE("DAC R1 Switch", RT5640_STO_DAC_MIXER, | ||
570 | RT5640_M_DAC_R1_SFT, 1, 1), | ||
571 | SOC_DAPM_SINGLE("DAC R2 Switch", RT5640_STO_DAC_MIXER, | ||
572 | RT5640_M_DAC_R2_SFT, 1, 1), | ||
573 | }; | ||
574 | |||
557 | static const struct snd_kcontrol_new rt5640_mono_dac_l_mix[] = { | 575 | static const struct snd_kcontrol_new rt5640_mono_dac_l_mix[] = { |
558 | SOC_DAPM_SINGLE("DAC L1 Switch", RT5640_MONO_DAC_MIXER, | 576 | SOC_DAPM_SINGLE("DAC L1 Switch", RT5640_MONO_DAC_MIXER, |
559 | RT5640_M_DAC_L1_MONO_L_SFT, 1, 1), | 577 | RT5640_M_DAC_L1_MONO_L_SFT, 1, 1), |
@@ -676,6 +694,30 @@ static const struct snd_kcontrol_new rt5640_out_r_mix[] = { | |||
676 | RT5640_M_DAC_R1_OM_R_SFT, 1, 1), | 694 | RT5640_M_DAC_R1_OM_R_SFT, 1, 1), |
677 | }; | 695 | }; |
678 | 696 | ||
697 | static const struct snd_kcontrol_new rt5639_out_l_mix[] = { | ||
698 | SOC_DAPM_SINGLE("BST1 Switch", RT5640_OUT_L3_MIXER, | ||
699 | RT5640_M_BST1_OM_L_SFT, 1, 1), | ||
700 | SOC_DAPM_SINGLE("INL Switch", RT5640_OUT_L3_MIXER, | ||
701 | RT5640_M_IN_L_OM_L_SFT, 1, 1), | ||
702 | SOC_DAPM_SINGLE("REC MIXL Switch", RT5640_OUT_L3_MIXER, | ||
703 | RT5640_M_RM_L_OM_L_SFT, 1, 1), | ||
704 | SOC_DAPM_SINGLE("DAC L1 Switch", RT5640_OUT_L3_MIXER, | ||
705 | RT5640_M_DAC_L1_OM_L_SFT, 1, 1), | ||
706 | }; | ||
707 | |||
708 | static const struct snd_kcontrol_new rt5639_out_r_mix[] = { | ||
709 | SOC_DAPM_SINGLE("BST2 Switch", RT5640_OUT_R3_MIXER, | ||
710 | RT5640_M_BST4_OM_R_SFT, 1, 1), | ||
711 | SOC_DAPM_SINGLE("BST1 Switch", RT5640_OUT_R3_MIXER, | ||
712 | RT5640_M_BST1_OM_R_SFT, 1, 1), | ||
713 | SOC_DAPM_SINGLE("INR Switch", RT5640_OUT_R3_MIXER, | ||
714 | RT5640_M_IN_R_OM_R_SFT, 1, 1), | ||
715 | SOC_DAPM_SINGLE("REC MIXR Switch", RT5640_OUT_R3_MIXER, | ||
716 | RT5640_M_RM_R_OM_R_SFT, 1, 1), | ||
717 | SOC_DAPM_SINGLE("DAC R1 Switch", RT5640_OUT_R3_MIXER, | ||
718 | RT5640_M_DAC_R1_OM_R_SFT, 1, 1), | ||
719 | }; | ||
720 | |||
679 | static const struct snd_kcontrol_new rt5640_spo_l_mix[] = { | 721 | static const struct snd_kcontrol_new rt5640_spo_l_mix[] = { |
680 | SOC_DAPM_SINGLE("DAC R1 Switch", RT5640_SPO_L_MIXER, | 722 | SOC_DAPM_SINGLE("DAC R1 Switch", RT5640_SPO_L_MIXER, |
681 | RT5640_M_DAC_R1_SPM_L_SFT, 1, 1), | 723 | RT5640_M_DAC_R1_SPM_L_SFT, 1, 1), |
@@ -707,6 +749,13 @@ static const struct snd_kcontrol_new rt5640_hpo_mix[] = { | |||
707 | RT5640_M_HPVOL_HM_SFT, 1, 1), | 749 | RT5640_M_HPVOL_HM_SFT, 1, 1), |
708 | }; | 750 | }; |
709 | 751 | ||
752 | static const struct snd_kcontrol_new rt5639_hpo_mix[] = { | ||
753 | SOC_DAPM_SINGLE("HPO MIX DAC1 Switch", RT5640_HPO_MIXER, | ||
754 | RT5640_M_DAC1_HM_SFT, 1, 1), | ||
755 | SOC_DAPM_SINGLE("HPO MIX HPVOL Switch", RT5640_HPO_MIXER, | ||
756 | RT5640_M_HPVOL_HM_SFT, 1, 1), | ||
757 | }; | ||
758 | |||
710 | static const struct snd_kcontrol_new rt5640_lout_mix[] = { | 759 | static const struct snd_kcontrol_new rt5640_lout_mix[] = { |
711 | SOC_DAPM_SINGLE("DAC L1 Switch", RT5640_LOUT_MIXER, | 760 | SOC_DAPM_SINGLE("DAC L1 Switch", RT5640_LOUT_MIXER, |
712 | RT5640_M_DAC_L1_LM_SFT, 1, 1), | 761 | RT5640_M_DAC_L1_LM_SFT, 1, 1), |
@@ -1096,26 +1145,15 @@ static const struct snd_soc_dapm_widget rt5640_dapm_widgets[] = { | |||
1096 | SND_SOC_DAPM_AIF_OUT("AIF1TX", "AIF1 Capture", 0, SND_SOC_NOPM, 0, 0), | 1145 | SND_SOC_DAPM_AIF_OUT("AIF1TX", "AIF1 Capture", 0, SND_SOC_NOPM, 0, 0), |
1097 | SND_SOC_DAPM_AIF_IN("AIF2RX", "AIF2 Playback", 0, SND_SOC_NOPM, 0, 0), | 1146 | SND_SOC_DAPM_AIF_IN("AIF2RX", "AIF2 Playback", 0, SND_SOC_NOPM, 0, 0), |
1098 | SND_SOC_DAPM_AIF_OUT("AIF2TX", "AIF2 Capture", 0, SND_SOC_NOPM, 0, 0), | 1147 | SND_SOC_DAPM_AIF_OUT("AIF2TX", "AIF2 Capture", 0, SND_SOC_NOPM, 0, 0), |
1099 | /* Audio DSP */ | 1148 | |
1100 | SND_SOC_DAPM_PGA("Audio DSP", SND_SOC_NOPM, 0, 0, NULL, 0), | ||
1101 | /* ANC */ | ||
1102 | SND_SOC_DAPM_PGA("ANC", SND_SOC_NOPM, 0, 0, NULL, 0), | ||
1103 | /* Output Side */ | 1149 | /* Output Side */ |
1104 | /* DAC mixer before sound effect */ | 1150 | /* DAC mixer before sound effect */ |
1105 | SND_SOC_DAPM_MIXER("DAC MIXL", SND_SOC_NOPM, 0, 0, | 1151 | SND_SOC_DAPM_MIXER("DAC MIXL", SND_SOC_NOPM, 0, 0, |
1106 | rt5640_dac_l_mix, ARRAY_SIZE(rt5640_dac_l_mix)), | 1152 | rt5640_dac_l_mix, ARRAY_SIZE(rt5640_dac_l_mix)), |
1107 | SND_SOC_DAPM_MIXER("DAC MIXR", SND_SOC_NOPM, 0, 0, | 1153 | SND_SOC_DAPM_MIXER("DAC MIXR", SND_SOC_NOPM, 0, 0, |
1108 | rt5640_dac_r_mix, ARRAY_SIZE(rt5640_dac_r_mix)), | 1154 | rt5640_dac_r_mix, ARRAY_SIZE(rt5640_dac_r_mix)), |
1109 | /* DAC2 channel Mux */ | 1155 | |
1110 | SND_SOC_DAPM_MUX("DAC L2 Mux", SND_SOC_NOPM, 0, 0, | ||
1111 | &rt5640_dac_l2_mux), | ||
1112 | SND_SOC_DAPM_MUX("DAC R2 Mux", SND_SOC_NOPM, 0, 0, | ||
1113 | &rt5640_dac_r2_mux), | ||
1114 | /* DAC Mixer */ | 1156 | /* DAC Mixer */ |
1115 | SND_SOC_DAPM_MIXER("Stereo DAC MIXL", SND_SOC_NOPM, 0, 0, | ||
1116 | rt5640_sto_dac_l_mix, ARRAY_SIZE(rt5640_sto_dac_l_mix)), | ||
1117 | SND_SOC_DAPM_MIXER("Stereo DAC MIXR", SND_SOC_NOPM, 0, 0, | ||
1118 | rt5640_sto_dac_r_mix, ARRAY_SIZE(rt5640_sto_dac_r_mix)), | ||
1119 | SND_SOC_DAPM_MIXER("Mono DAC MIXL", SND_SOC_NOPM, 0, 0, | 1157 | SND_SOC_DAPM_MIXER("Mono DAC MIXL", SND_SOC_NOPM, 0, 0, |
1120 | rt5640_mono_dac_l_mix, ARRAY_SIZE(rt5640_mono_dac_l_mix)), | 1158 | rt5640_mono_dac_l_mix, ARRAY_SIZE(rt5640_mono_dac_l_mix)), |
1121 | SND_SOC_DAPM_MIXER("Mono DAC MIXR", SND_SOC_NOPM, 0, 0, | 1159 | SND_SOC_DAPM_MIXER("Mono DAC MIXR", SND_SOC_NOPM, 0, 0, |
@@ -1127,21 +1165,14 @@ static const struct snd_soc_dapm_widget rt5640_dapm_widgets[] = { | |||
1127 | /* DACs */ | 1165 | /* DACs */ |
1128 | SND_SOC_DAPM_DAC("DAC L1", NULL, RT5640_PWR_DIG1, | 1166 | SND_SOC_DAPM_DAC("DAC L1", NULL, RT5640_PWR_DIG1, |
1129 | RT5640_PWR_DAC_L1_BIT, 0), | 1167 | RT5640_PWR_DAC_L1_BIT, 0), |
1130 | SND_SOC_DAPM_DAC("DAC L2", NULL, RT5640_PWR_DIG1, | ||
1131 | RT5640_PWR_DAC_L2_BIT, 0), | ||
1132 | SND_SOC_DAPM_DAC("DAC R1", NULL, RT5640_PWR_DIG1, | 1168 | SND_SOC_DAPM_DAC("DAC R1", NULL, RT5640_PWR_DIG1, |
1133 | RT5640_PWR_DAC_R1_BIT, 0), | 1169 | RT5640_PWR_DAC_R1_BIT, 0), |
1134 | SND_SOC_DAPM_DAC("DAC R2", NULL, RT5640_PWR_DIG1, | 1170 | |
1135 | RT5640_PWR_DAC_R2_BIT, 0), | ||
1136 | /* SPK/OUT Mixer */ | 1171 | /* SPK/OUT Mixer */ |
1137 | SND_SOC_DAPM_MIXER("SPK MIXL", RT5640_PWR_MIXER, RT5640_PWR_SM_L_BIT, | 1172 | SND_SOC_DAPM_MIXER("SPK MIXL", RT5640_PWR_MIXER, RT5640_PWR_SM_L_BIT, |
1138 | 0, rt5640_spk_l_mix, ARRAY_SIZE(rt5640_spk_l_mix)), | 1173 | 0, rt5640_spk_l_mix, ARRAY_SIZE(rt5640_spk_l_mix)), |
1139 | SND_SOC_DAPM_MIXER("SPK MIXR", RT5640_PWR_MIXER, RT5640_PWR_SM_R_BIT, | 1174 | SND_SOC_DAPM_MIXER("SPK MIXR", RT5640_PWR_MIXER, RT5640_PWR_SM_R_BIT, |
1140 | 0, rt5640_spk_r_mix, ARRAY_SIZE(rt5640_spk_r_mix)), | 1175 | 0, rt5640_spk_r_mix, ARRAY_SIZE(rt5640_spk_r_mix)), |
1141 | SND_SOC_DAPM_MIXER("OUT MIXL", RT5640_PWR_MIXER, RT5640_PWR_OM_L_BIT, | ||
1142 | 0, rt5640_out_l_mix, ARRAY_SIZE(rt5640_out_l_mix)), | ||
1143 | SND_SOC_DAPM_MIXER("OUT MIXR", RT5640_PWR_MIXER, RT5640_PWR_OM_R_BIT, | ||
1144 | 0, rt5640_out_r_mix, ARRAY_SIZE(rt5640_out_r_mix)), | ||
1145 | /* Ouput Volume */ | 1176 | /* Ouput Volume */ |
1146 | SND_SOC_DAPM_PGA("SPKVOL L", RT5640_PWR_VOL, | 1177 | SND_SOC_DAPM_PGA("SPKVOL L", RT5640_PWR_VOL, |
1147 | RT5640_PWR_SV_L_BIT, 0, NULL, 0), | 1178 | RT5640_PWR_SV_L_BIT, 0, NULL, 0), |
@@ -1160,16 +1191,8 @@ static const struct snd_soc_dapm_widget rt5640_dapm_widgets[] = { | |||
1160 | 0, rt5640_spo_l_mix, ARRAY_SIZE(rt5640_spo_l_mix)), | 1191 | 0, rt5640_spo_l_mix, ARRAY_SIZE(rt5640_spo_l_mix)), |
1161 | SND_SOC_DAPM_MIXER("SPOR MIX", SND_SOC_NOPM, 0, | 1192 | SND_SOC_DAPM_MIXER("SPOR MIX", SND_SOC_NOPM, 0, |
1162 | 0, rt5640_spo_r_mix, ARRAY_SIZE(rt5640_spo_r_mix)), | 1193 | 0, rt5640_spo_r_mix, ARRAY_SIZE(rt5640_spo_r_mix)), |
1163 | SND_SOC_DAPM_MIXER("HPO MIX L", SND_SOC_NOPM, 0, 0, | ||
1164 | rt5640_hpo_mix, ARRAY_SIZE(rt5640_hpo_mix)), | ||
1165 | SND_SOC_DAPM_MIXER("HPO MIX R", SND_SOC_NOPM, 0, 0, | ||
1166 | rt5640_hpo_mix, ARRAY_SIZE(rt5640_hpo_mix)), | ||
1167 | SND_SOC_DAPM_MIXER("LOUT MIX", RT5640_PWR_ANLG1, RT5640_PWR_LM_BIT, 0, | 1194 | SND_SOC_DAPM_MIXER("LOUT MIX", RT5640_PWR_ANLG1, RT5640_PWR_LM_BIT, 0, |
1168 | rt5640_lout_mix, ARRAY_SIZE(rt5640_lout_mix)), | 1195 | rt5640_lout_mix, ARRAY_SIZE(rt5640_lout_mix)), |
1169 | SND_SOC_DAPM_MIXER("Mono MIX", RT5640_PWR_ANLG1, RT5640_PWR_MM_BIT, 0, | ||
1170 | rt5640_mono_mix, ARRAY_SIZE(rt5640_mono_mix)), | ||
1171 | SND_SOC_DAPM_SUPPLY("Improve MONO Amp Drv", RT5640_PWR_ANLG1, | ||
1172 | RT5640_PWR_MA_BIT, 0, NULL, 0), | ||
1173 | SND_SOC_DAPM_SUPPLY_S("Improve HP Amp Drv", 1, SND_SOC_NOPM, | 1196 | SND_SOC_DAPM_SUPPLY_S("Improve HP Amp Drv", 1, SND_SOC_NOPM, |
1174 | 0, 0, rt5640_hp_power_event, SND_SOC_DAPM_POST_PMU), | 1197 | 0, 0, rt5640_hp_power_event, SND_SOC_DAPM_POST_PMU), |
1175 | SND_SOC_DAPM_PGA_S("HP Amp", 1, SND_SOC_NOPM, 0, 0, | 1198 | SND_SOC_DAPM_PGA_S("HP Amp", 1, SND_SOC_NOPM, 0, 0, |
@@ -1201,10 +1224,69 @@ static const struct snd_soc_dapm_widget rt5640_dapm_widgets[] = { | |||
1201 | SND_SOC_DAPM_OUTPUT("HPOR"), | 1224 | SND_SOC_DAPM_OUTPUT("HPOR"), |
1202 | SND_SOC_DAPM_OUTPUT("LOUTL"), | 1225 | SND_SOC_DAPM_OUTPUT("LOUTL"), |
1203 | SND_SOC_DAPM_OUTPUT("LOUTR"), | 1226 | SND_SOC_DAPM_OUTPUT("LOUTR"), |
1227 | }; | ||
1228 | |||
1229 | static const struct snd_soc_dapm_widget rt5640_specific_dapm_widgets[] = { | ||
1230 | /* Audio DSP */ | ||
1231 | SND_SOC_DAPM_PGA("Audio DSP", SND_SOC_NOPM, 0, 0, NULL, 0), | ||
1232 | /* ANC */ | ||
1233 | SND_SOC_DAPM_PGA("ANC", SND_SOC_NOPM, 0, 0, NULL, 0), | ||
1234 | |||
1235 | /* DAC2 channel Mux */ | ||
1236 | SND_SOC_DAPM_MUX("DAC L2 Mux", SND_SOC_NOPM, 0, 0, &rt5640_dac_l2_mux), | ||
1237 | SND_SOC_DAPM_MUX("DAC R2 Mux", SND_SOC_NOPM, 0, 0, &rt5640_dac_r2_mux), | ||
1238 | |||
1239 | SND_SOC_DAPM_MIXER("Stereo DAC MIXL", SND_SOC_NOPM, 0, 0, | ||
1240 | rt5640_sto_dac_l_mix, ARRAY_SIZE(rt5640_sto_dac_l_mix)), | ||
1241 | SND_SOC_DAPM_MIXER("Stereo DAC MIXR", SND_SOC_NOPM, 0, 0, | ||
1242 | rt5640_sto_dac_r_mix, ARRAY_SIZE(rt5640_sto_dac_r_mix)), | ||
1243 | |||
1244 | SND_SOC_DAPM_DAC("DAC R2", NULL, RT5640_PWR_DIG1, RT5640_PWR_DAC_R2_BIT, | ||
1245 | 0), | ||
1246 | SND_SOC_DAPM_DAC("DAC L2", NULL, RT5640_PWR_DIG1, RT5640_PWR_DAC_L2_BIT, | ||
1247 | 0), | ||
1248 | |||
1249 | SND_SOC_DAPM_MIXER("OUT MIXL", RT5640_PWR_MIXER, RT5640_PWR_OM_L_BIT, | ||
1250 | 0, rt5640_out_l_mix, ARRAY_SIZE(rt5640_out_l_mix)), | ||
1251 | SND_SOC_DAPM_MIXER("OUT MIXR", RT5640_PWR_MIXER, RT5640_PWR_OM_R_BIT, | ||
1252 | 0, rt5640_out_r_mix, ARRAY_SIZE(rt5640_out_r_mix)), | ||
1253 | |||
1254 | SND_SOC_DAPM_MIXER("HPO MIX L", SND_SOC_NOPM, 0, 0, | ||
1255 | rt5640_hpo_mix, ARRAY_SIZE(rt5640_hpo_mix)), | ||
1256 | SND_SOC_DAPM_MIXER("HPO MIX R", SND_SOC_NOPM, 0, 0, | ||
1257 | rt5640_hpo_mix, ARRAY_SIZE(rt5640_hpo_mix)), | ||
1258 | |||
1259 | SND_SOC_DAPM_MIXER("Mono MIX", RT5640_PWR_ANLG1, RT5640_PWR_MM_BIT, 0, | ||
1260 | rt5640_mono_mix, ARRAY_SIZE(rt5640_mono_mix)), | ||
1261 | SND_SOC_DAPM_SUPPLY("Improve MONO Amp Drv", RT5640_PWR_ANLG1, | ||
1262 | RT5640_PWR_MA_BIT, 0, NULL, 0), | ||
1263 | |||
1204 | SND_SOC_DAPM_OUTPUT("MONOP"), | 1264 | SND_SOC_DAPM_OUTPUT("MONOP"), |
1205 | SND_SOC_DAPM_OUTPUT("MONON"), | 1265 | SND_SOC_DAPM_OUTPUT("MONON"), |
1206 | }; | 1266 | }; |
1207 | 1267 | ||
1268 | static const struct snd_soc_dapm_widget rt5639_specific_dapm_widgets[] = { | ||
1269 | SND_SOC_DAPM_MIXER("Stereo DAC MIXL", SND_SOC_NOPM, 0, 0, | ||
1270 | rt5639_sto_dac_l_mix, ARRAY_SIZE(rt5639_sto_dac_l_mix)), | ||
1271 | SND_SOC_DAPM_MIXER("Stereo DAC MIXR", SND_SOC_NOPM, 0, 0, | ||
1272 | rt5639_sto_dac_r_mix, ARRAY_SIZE(rt5639_sto_dac_r_mix)), | ||
1273 | |||
1274 | SND_SOC_DAPM_SUPPLY("DAC L2 Filter", RT5640_PWR_DIG1, | ||
1275 | RT5640_PWR_DAC_L2_BIT, 0, NULL, 0), | ||
1276 | SND_SOC_DAPM_SUPPLY("DAC R2 Filter", RT5640_PWR_DIG1, | ||
1277 | RT5640_PWR_DAC_R2_BIT, 0, NULL, 0), | ||
1278 | |||
1279 | SND_SOC_DAPM_MIXER("OUT MIXL", RT5640_PWR_MIXER, RT5640_PWR_OM_L_BIT, | ||
1280 | 0, rt5639_out_l_mix, ARRAY_SIZE(rt5639_out_l_mix)), | ||
1281 | SND_SOC_DAPM_MIXER("OUT MIXR", RT5640_PWR_MIXER, RT5640_PWR_OM_R_BIT, | ||
1282 | 0, rt5639_out_r_mix, ARRAY_SIZE(rt5639_out_r_mix)), | ||
1283 | |||
1284 | SND_SOC_DAPM_MIXER("HPO MIX L", SND_SOC_NOPM, 0, 0, | ||
1285 | rt5639_hpo_mix, ARRAY_SIZE(rt5639_hpo_mix)), | ||
1286 | SND_SOC_DAPM_MIXER("HPO MIX R", SND_SOC_NOPM, 0, 0, | ||
1287 | rt5639_hpo_mix, ARRAY_SIZE(rt5639_hpo_mix)), | ||
1288 | }; | ||
1289 | |||
1208 | static const struct snd_soc_dapm_route rt5640_dapm_routes[] = { | 1290 | static const struct snd_soc_dapm_route rt5640_dapm_routes[] = { |
1209 | {"IN1P", NULL, "LDO2"}, | 1291 | {"IN1P", NULL, "LDO2"}, |
1210 | {"IN2P", NULL, "LDO2"}, | 1292 | {"IN2P", NULL, "LDO2"}, |
@@ -1346,71 +1428,38 @@ static const struct snd_soc_dapm_route rt5640_dapm_routes[] = { | |||
1346 | {"DAC MIXR", "Stereo ADC Switch", "Stereo ADC MIXR"}, | 1428 | {"DAC MIXR", "Stereo ADC Switch", "Stereo ADC MIXR"}, |
1347 | {"DAC MIXR", "INF1 Switch", "IF1 DAC R"}, | 1429 | {"DAC MIXR", "INF1 Switch", "IF1 DAC R"}, |
1348 | 1430 | ||
1349 | {"ANC", NULL, "Stereo ADC MIXL"}, | ||
1350 | {"ANC", NULL, "Stereo ADC MIXR"}, | ||
1351 | |||
1352 | {"Audio DSP", NULL, "DAC MIXL"}, | ||
1353 | {"Audio DSP", NULL, "DAC MIXR"}, | ||
1354 | |||
1355 | {"DAC L2 Mux", "IF2", "IF2 DAC L"}, | ||
1356 | {"DAC L2 Mux", "Base L/R", "Audio DSP"}, | ||
1357 | |||
1358 | {"DAC R2 Mux", "IF2", "IF2 DAC R"}, | ||
1359 | |||
1360 | {"Stereo DAC MIXL", "DAC L1 Switch", "DAC MIXL"}, | 1431 | {"Stereo DAC MIXL", "DAC L1 Switch", "DAC MIXL"}, |
1361 | {"Stereo DAC MIXL", "DAC L2 Switch", "DAC L2 Mux"}, | ||
1362 | {"Stereo DAC MIXL", "ANC Switch", "ANC"}, | ||
1363 | {"Stereo DAC MIXR", "DAC R1 Switch", "DAC MIXR"}, | 1432 | {"Stereo DAC MIXR", "DAC R1 Switch", "DAC MIXR"}, |
1364 | {"Stereo DAC MIXR", "DAC R2 Switch", "DAC R2 Mux"}, | ||
1365 | {"Stereo DAC MIXR", "ANC Switch", "ANC"}, | ||
1366 | 1433 | ||
1367 | {"Mono DAC MIXL", "DAC L1 Switch", "DAC MIXL"}, | 1434 | {"Mono DAC MIXL", "DAC L1 Switch", "DAC MIXL"}, |
1368 | {"Mono DAC MIXL", "DAC L2 Switch", "DAC L2 Mux"}, | ||
1369 | {"Mono DAC MIXL", "DAC R2 Switch", "DAC R2 Mux"}, | ||
1370 | {"Mono DAC MIXR", "DAC R1 Switch", "DAC MIXR"}, | 1435 | {"Mono DAC MIXR", "DAC R1 Switch", "DAC MIXR"}, |
1371 | {"Mono DAC MIXR", "DAC R2 Switch", "DAC R2 Mux"}, | ||
1372 | {"Mono DAC MIXR", "DAC L2 Switch", "DAC L2 Mux"}, | ||
1373 | 1436 | ||
1374 | {"DIG MIXL", "DAC L1 Switch", "DAC MIXL"}, | 1437 | {"DIG MIXL", "DAC L1 Switch", "DAC MIXL"}, |
1375 | {"DIG MIXL", "DAC L2 Switch", "DAC L2 Mux"}, | ||
1376 | {"DIG MIXR", "DAC R1 Switch", "DAC MIXR"}, | 1438 | {"DIG MIXR", "DAC R1 Switch", "DAC MIXR"}, |
1377 | {"DIG MIXR", "DAC R2 Switch", "DAC R2 Mux"}, | ||
1378 | 1439 | ||
1379 | {"DAC L1", NULL, "Stereo DAC MIXL"}, | 1440 | {"DAC L1", NULL, "Stereo DAC MIXL"}, |
1380 | {"DAC L1", NULL, "PLL1", is_sys_clk_from_pll}, | 1441 | {"DAC L1", NULL, "PLL1", is_sys_clk_from_pll}, |
1381 | {"DAC R1", NULL, "Stereo DAC MIXR"}, | 1442 | {"DAC R1", NULL, "Stereo DAC MIXR"}, |
1382 | {"DAC R1", NULL, "PLL1", is_sys_clk_from_pll}, | 1443 | {"DAC R1", NULL, "PLL1", is_sys_clk_from_pll}, |
1383 | {"DAC L2", NULL, "Mono DAC MIXL"}, | ||
1384 | {"DAC L2", NULL, "PLL1", is_sys_clk_from_pll}, | ||
1385 | {"DAC R2", NULL, "Mono DAC MIXR"}, | ||
1386 | {"DAC R2", NULL, "PLL1", is_sys_clk_from_pll}, | ||
1387 | 1444 | ||
1388 | {"SPK MIXL", "REC MIXL Switch", "RECMIXL"}, | 1445 | {"SPK MIXL", "REC MIXL Switch", "RECMIXL"}, |
1389 | {"SPK MIXL", "INL Switch", "INL VOL"}, | 1446 | {"SPK MIXL", "INL Switch", "INL VOL"}, |
1390 | {"SPK MIXL", "DAC L1 Switch", "DAC L1"}, | 1447 | {"SPK MIXL", "DAC L1 Switch", "DAC L1"}, |
1391 | {"SPK MIXL", "DAC L2 Switch", "DAC L2"}, | ||
1392 | {"SPK MIXL", "OUT MIXL Switch", "OUT MIXL"}, | 1448 | {"SPK MIXL", "OUT MIXL Switch", "OUT MIXL"}, |
1393 | {"SPK MIXR", "REC MIXR Switch", "RECMIXR"}, | 1449 | {"SPK MIXR", "REC MIXR Switch", "RECMIXR"}, |
1394 | {"SPK MIXR", "INR Switch", "INR VOL"}, | 1450 | {"SPK MIXR", "INR Switch", "INR VOL"}, |
1395 | {"SPK MIXR", "DAC R1 Switch", "DAC R1"}, | 1451 | {"SPK MIXR", "DAC R1 Switch", "DAC R1"}, |
1396 | {"SPK MIXR", "DAC R2 Switch", "DAC R2"}, | ||
1397 | {"SPK MIXR", "OUT MIXR Switch", "OUT MIXR"}, | 1452 | {"SPK MIXR", "OUT MIXR Switch", "OUT MIXR"}, |
1398 | 1453 | ||
1399 | {"OUT MIXL", "SPK MIXL Switch", "SPK MIXL"}, | ||
1400 | {"OUT MIXL", "BST1 Switch", "BST1"}, | 1454 | {"OUT MIXL", "BST1 Switch", "BST1"}, |
1401 | {"OUT MIXL", "INL Switch", "INL VOL"}, | 1455 | {"OUT MIXL", "INL Switch", "INL VOL"}, |
1402 | {"OUT MIXL", "REC MIXL Switch", "RECMIXL"}, | 1456 | {"OUT MIXL", "REC MIXL Switch", "RECMIXL"}, |
1403 | {"OUT MIXL", "DAC R2 Switch", "DAC R2"}, | ||
1404 | {"OUT MIXL", "DAC L2 Switch", "DAC L2"}, | ||
1405 | {"OUT MIXL", "DAC L1 Switch", "DAC L1"}, | 1457 | {"OUT MIXL", "DAC L1 Switch", "DAC L1"}, |
1406 | 1458 | ||
1407 | {"OUT MIXR", "SPK MIXR Switch", "SPK MIXR"}, | ||
1408 | {"OUT MIXR", "BST2 Switch", "BST2"}, | 1459 | {"OUT MIXR", "BST2 Switch", "BST2"}, |
1409 | {"OUT MIXR", "BST1 Switch", "BST1"}, | 1460 | {"OUT MIXR", "BST1 Switch", "BST1"}, |
1410 | {"OUT MIXR", "INR Switch", "INR VOL"}, | 1461 | {"OUT MIXR", "INR Switch", "INR VOL"}, |
1411 | {"OUT MIXR", "REC MIXR Switch", "RECMIXR"}, | 1462 | {"OUT MIXR", "REC MIXR Switch", "RECMIXR"}, |
1412 | {"OUT MIXR", "DAC L2 Switch", "DAC L2"}, | ||
1413 | {"OUT MIXR", "DAC R2 Switch", "DAC R2"}, | ||
1414 | {"OUT MIXR", "DAC R1 Switch", "DAC R1"}, | 1463 | {"OUT MIXR", "DAC R1 Switch", "DAC R1"}, |
1415 | 1464 | ||
1416 | {"SPKVOL L", NULL, "SPK MIXL"}, | 1465 | {"SPKVOL L", NULL, "SPK MIXL"}, |
@@ -1429,11 +1478,9 @@ static const struct snd_soc_dapm_route rt5640_dapm_routes[] = { | |||
1429 | {"SPOR MIX", "SPKVOL R Switch", "SPKVOL R"}, | 1478 | {"SPOR MIX", "SPKVOL R Switch", "SPKVOL R"}, |
1430 | {"SPOR MIX", "BST1 Switch", "BST1"}, | 1479 | {"SPOR MIX", "BST1 Switch", "BST1"}, |
1431 | 1480 | ||
1432 | {"HPO MIX L", "HPO MIX DAC2 Switch", "DAC L2"}, | ||
1433 | {"HPO MIX L", "HPO MIX DAC1 Switch", "DAC L1"}, | 1481 | {"HPO MIX L", "HPO MIX DAC1 Switch", "DAC L1"}, |
1434 | {"HPO MIX L", "HPO MIX HPVOL Switch", "HPOVOL L"}, | 1482 | {"HPO MIX L", "HPO MIX HPVOL Switch", "HPOVOL L"}, |
1435 | {"HPO MIX L", NULL, "HP L Amp"}, | 1483 | {"HPO MIX L", NULL, "HP L Amp"}, |
1436 | {"HPO MIX R", "HPO MIX DAC2 Switch", "DAC R2"}, | ||
1437 | {"HPO MIX R", "HPO MIX DAC1 Switch", "DAC R1"}, | 1484 | {"HPO MIX R", "HPO MIX DAC1 Switch", "DAC R1"}, |
1438 | {"HPO MIX R", "HPO MIX HPVOL Switch", "HPOVOL R"}, | 1485 | {"HPO MIX R", "HPO MIX HPVOL Switch", "HPOVOL R"}, |
1439 | {"HPO MIX R", NULL, "HP R Amp"}, | 1486 | {"HPO MIX R", NULL, "HP R Amp"}, |
@@ -1443,12 +1490,6 @@ static const struct snd_soc_dapm_route rt5640_dapm_routes[] = { | |||
1443 | {"LOUT MIX", "OUTVOL L Switch", "OUTVOL L"}, | 1490 | {"LOUT MIX", "OUTVOL L Switch", "OUTVOL L"}, |
1444 | {"LOUT MIX", "OUTVOL R Switch", "OUTVOL R"}, | 1491 | {"LOUT MIX", "OUTVOL R Switch", "OUTVOL R"}, |
1445 | 1492 | ||
1446 | {"Mono MIX", "DAC R2 Switch", "DAC R2"}, | ||
1447 | {"Mono MIX", "DAC L2 Switch", "DAC L2"}, | ||
1448 | {"Mono MIX", "OUTVOL R Switch", "OUTVOL R"}, | ||
1449 | {"Mono MIX", "OUTVOL L Switch", "OUTVOL L"}, | ||
1450 | {"Mono MIX", "BST1 Switch", "BST1"}, | ||
1451 | |||
1452 | {"HP Amp", NULL, "HPO MIX L"}, | 1493 | {"HP Amp", NULL, "HPO MIX L"}, |
1453 | {"HP Amp", NULL, "HPO MIX R"}, | 1494 | {"HP Amp", NULL, "HPO MIX R"}, |
1454 | 1495 | ||
@@ -1473,11 +1514,82 @@ static const struct snd_soc_dapm_route rt5640_dapm_routes[] = { | |||
1473 | {"HPOR", NULL, "HP R Playback"}, | 1514 | {"HPOR", NULL, "HP R Playback"}, |
1474 | {"LOUTL", NULL, "LOUT MIX"}, | 1515 | {"LOUTL", NULL, "LOUT MIX"}, |
1475 | {"LOUTR", NULL, "LOUT MIX"}, | 1516 | {"LOUTR", NULL, "LOUT MIX"}, |
1517 | }; | ||
1518 | |||
1519 | static const struct snd_soc_dapm_route rt5640_specific_dapm_routes[] = { | ||
1520 | {"ANC", NULL, "Stereo ADC MIXL"}, | ||
1521 | {"ANC", NULL, "Stereo ADC MIXR"}, | ||
1522 | |||
1523 | {"Audio DSP", NULL, "DAC MIXL"}, | ||
1524 | {"Audio DSP", NULL, "DAC MIXR"}, | ||
1525 | |||
1526 | {"DAC L2 Mux", "IF2", "IF2 DAC L"}, | ||
1527 | {"DAC L2 Mux", "Base L/R", "Audio DSP"}, | ||
1528 | |||
1529 | {"DAC R2 Mux", "IF2", "IF2 DAC R"}, | ||
1530 | |||
1531 | {"Stereo DAC MIXL", "DAC L2 Switch", "DAC L2 Mux"}, | ||
1532 | {"Stereo DAC MIXL", "ANC Switch", "ANC"}, | ||
1533 | {"Stereo DAC MIXR", "DAC R2 Switch", "DAC R2 Mux"}, | ||
1534 | {"Stereo DAC MIXR", "ANC Switch", "ANC"}, | ||
1535 | |||
1536 | {"Mono DAC MIXL", "DAC L2 Switch", "DAC L2 Mux"}, | ||
1537 | {"Mono DAC MIXL", "DAC R2 Switch", "DAC R2 Mux"}, | ||
1538 | |||
1539 | {"Mono DAC MIXR", "DAC R2 Switch", "DAC R2 Mux"}, | ||
1540 | {"Mono DAC MIXR", "DAC L2 Switch", "DAC L2 Mux"}, | ||
1541 | |||
1542 | {"DIG MIXR", "DAC R2 Switch", "DAC R2 Mux"}, | ||
1543 | {"DIG MIXL", "DAC L2 Switch", "DAC L2 Mux"}, | ||
1544 | |||
1545 | {"DAC L2", NULL, "Mono DAC MIXL"}, | ||
1546 | {"DAC L2", NULL, "PLL1", is_sys_clk_from_pll}, | ||
1547 | {"DAC R2", NULL, "Mono DAC MIXR"}, | ||
1548 | {"DAC R2", NULL, "PLL1", is_sys_clk_from_pll}, | ||
1549 | |||
1550 | {"SPK MIXL", "DAC L2 Switch", "DAC L2"}, | ||
1551 | {"SPK MIXR", "DAC R2 Switch", "DAC R2"}, | ||
1552 | |||
1553 | {"OUT MIXL", "SPK MIXL Switch", "SPK MIXL"}, | ||
1554 | {"OUT MIXR", "SPK MIXR Switch", "SPK MIXR"}, | ||
1555 | |||
1556 | {"OUT MIXL", "DAC R2 Switch", "DAC R2"}, | ||
1557 | {"OUT MIXL", "DAC L2 Switch", "DAC L2"}, | ||
1558 | |||
1559 | {"OUT MIXR", "DAC L2 Switch", "DAC L2"}, | ||
1560 | {"OUT MIXR", "DAC R2 Switch", "DAC R2"}, | ||
1561 | |||
1562 | {"HPO MIX L", "HPO MIX DAC2 Switch", "DAC L2"}, | ||
1563 | {"HPO MIX R", "HPO MIX DAC2 Switch", "DAC R2"}, | ||
1564 | |||
1565 | {"Mono MIX", "DAC R2 Switch", "DAC R2"}, | ||
1566 | {"Mono MIX", "DAC L2 Switch", "DAC L2"}, | ||
1567 | {"Mono MIX", "OUTVOL R Switch", "OUTVOL R"}, | ||
1568 | {"Mono MIX", "OUTVOL L Switch", "OUTVOL L"}, | ||
1569 | {"Mono MIX", "BST1 Switch", "BST1"}, | ||
1570 | |||
1476 | {"MONOP", NULL, "Mono MIX"}, | 1571 | {"MONOP", NULL, "Mono MIX"}, |
1477 | {"MONON", NULL, "Mono MIX"}, | 1572 | {"MONON", NULL, "Mono MIX"}, |
1478 | {"MONOP", NULL, "Improve MONO Amp Drv"}, | 1573 | {"MONOP", NULL, "Improve MONO Amp Drv"}, |
1479 | }; | 1574 | }; |
1480 | 1575 | ||
1576 | static const struct snd_soc_dapm_route rt5639_specific_dapm_routes[] = { | ||
1577 | {"Stereo DAC MIXL", "DAC L2 Switch", "IF2 DAC L"}, | ||
1578 | {"Stereo DAC MIXR", "DAC R2 Switch", "IF2 DAC R"}, | ||
1579 | |||
1580 | {"Mono DAC MIXL", "DAC L2 Switch", "IF2 DAC L"}, | ||
1581 | {"Mono DAC MIXL", "DAC R2 Switch", "IF2 DAC R"}, | ||
1582 | |||
1583 | {"Mono DAC MIXR", "DAC R2 Switch", "IF2 DAC R"}, | ||
1584 | {"Mono DAC MIXR", "DAC L2 Switch", "IF2 DAC L"}, | ||
1585 | |||
1586 | {"DIG MIXL", "DAC L2 Switch", "IF2 DAC L"}, | ||
1587 | {"DIG MIXR", "DAC R2 Switch", "IF2 DAC R"}, | ||
1588 | |||
1589 | {"IF2 DAC L", NULL, "DAC L2 Filter"}, | ||
1590 | {"IF2 DAC R", NULL, "DAC R2 Filter"}, | ||
1591 | }; | ||
1592 | |||
1481 | static int get_sdp_info(struct snd_soc_codec *codec, int dai_id) | 1593 | static int get_sdp_info(struct snd_soc_codec *codec, int dai_id) |
1482 | { | 1594 | { |
1483 | int ret = 0, val; | 1595 | int ret = 0, val; |
@@ -1885,6 +1997,28 @@ static int rt5640_probe(struct snd_soc_codec *codec) | |||
1885 | snd_soc_update_bits(codec, RT5640_MICBIAS, 0x0030, 0x0030); | 1997 | snd_soc_update_bits(codec, RT5640_MICBIAS, 0x0030, 0x0030); |
1886 | snd_soc_update_bits(codec, RT5640_DSP_PATH2, 0xfc00, 0x0c00); | 1998 | snd_soc_update_bits(codec, RT5640_DSP_PATH2, 0xfc00, 0x0c00); |
1887 | 1999 | ||
2000 | switch (snd_soc_read(codec, RT5640_RESET)) { | ||
2001 | case RT5640_RESET_ID: | ||
2002 | snd_soc_add_codec_controls(codec, | ||
2003 | rt5640_specific_snd_controls, | ||
2004 | ARRAY_SIZE(rt5640_specific_snd_controls)); | ||
2005 | snd_soc_dapm_new_controls(&codec->dapm, | ||
2006 | rt5640_specific_dapm_widgets, | ||
2007 | ARRAY_SIZE(rt5640_specific_dapm_widgets)); | ||
2008 | snd_soc_dapm_add_routes(&codec->dapm, | ||
2009 | rt5640_specific_dapm_routes, | ||
2010 | ARRAY_SIZE(rt5640_specific_dapm_routes)); | ||
2011 | break; | ||
2012 | case RT5639_RESET_ID: | ||
2013 | snd_soc_dapm_new_controls(&codec->dapm, | ||
2014 | rt5639_specific_dapm_widgets, | ||
2015 | ARRAY_SIZE(rt5639_specific_dapm_widgets)); | ||
2016 | snd_soc_dapm_add_routes(&codec->dapm, | ||
2017 | rt5639_specific_dapm_routes, | ||
2018 | ARRAY_SIZE(rt5639_specific_dapm_routes)); | ||
2019 | break; | ||
2020 | } | ||
2021 | |||
1888 | return 0; | 2022 | return 0; |
1889 | } | 2023 | } |
1890 | 2024 | ||
diff --git a/sound/soc/codecs/rt5640.h b/sound/soc/codecs/rt5640.h index d7bd525caf85..3b50459a83b4 100644 --- a/sound/soc/codecs/rt5640.h +++ b/sound/soc/codecs/rt5640.h | |||
@@ -14,6 +14,9 @@ | |||
14 | 14 | ||
15 | #include <sound/rt5640.h> | 15 | #include <sound/rt5640.h> |
16 | 16 | ||
17 | #define RT5639_RESET_ID 0x0008 | ||
18 | #define RT5640_RESET_ID 0x000c | ||
19 | |||
17 | /* Info */ | 20 | /* Info */ |
18 | #define RT5640_RESET 0x00 | 21 | #define RT5640_RESET 0x00 |
19 | #define RT5640_VENDOR_ID 0xfd | 22 | #define RT5640_VENDOR_ID 0xfd |