diff options
Diffstat (limited to 'sound/soc/codecs/rt5677.c')
-rw-r--r-- | sound/soc/codecs/rt5677.c | 272 |
1 files changed, 91 insertions, 181 deletions
diff --git a/sound/soc/codecs/rt5677.c b/sound/soc/codecs/rt5677.c index 833231e27340..67f14556462f 100644 --- a/sound/soc/codecs/rt5677.c +++ b/sound/soc/codecs/rt5677.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <sound/initval.h> | 27 | #include <sound/initval.h> |
28 | #include <sound/tlv.h> | 28 | #include <sound/tlv.h> |
29 | 29 | ||
30 | #include "rl6231.h" | ||
30 | #include "rt5677.h" | 31 | #include "rt5677.h" |
31 | 32 | ||
32 | #define RT5677_DEVICE_ID 0x6327 | 33 | #define RT5677_DEVICE_ID 0x6327 |
@@ -604,19 +605,19 @@ static const struct snd_kcontrol_new rt5677_snd_controls[] = { | |||
604 | adc_vol_tlv), | 605 | adc_vol_tlv), |
605 | 606 | ||
606 | /* ADC Boost Volume Control */ | 607 | /* ADC Boost Volume Control */ |
607 | SOC_DOUBLE_TLV("STO1 ADC Boost Gain", RT5677_STO1_2_ADC_BST, | 608 | SOC_DOUBLE_TLV("STO1 ADC Boost Volume", RT5677_STO1_2_ADC_BST, |
608 | RT5677_STO1_ADC_L_BST_SFT, RT5677_STO1_ADC_R_BST_SFT, 3, 0, | 609 | RT5677_STO1_ADC_L_BST_SFT, RT5677_STO1_ADC_R_BST_SFT, 3, 0, |
609 | adc_bst_tlv), | 610 | adc_bst_tlv), |
610 | SOC_DOUBLE_TLV("STO2 ADC Boost Gain", RT5677_STO1_2_ADC_BST, | 611 | SOC_DOUBLE_TLV("STO2 ADC Boost Volume", RT5677_STO1_2_ADC_BST, |
611 | RT5677_STO2_ADC_L_BST_SFT, RT5677_STO2_ADC_R_BST_SFT, 3, 0, | 612 | RT5677_STO2_ADC_L_BST_SFT, RT5677_STO2_ADC_R_BST_SFT, 3, 0, |
612 | adc_bst_tlv), | 613 | adc_bst_tlv), |
613 | SOC_DOUBLE_TLV("STO3 ADC Boost Gain", RT5677_STO3_4_ADC_BST, | 614 | SOC_DOUBLE_TLV("STO3 ADC Boost Volume", RT5677_STO3_4_ADC_BST, |
614 | RT5677_STO3_ADC_L_BST_SFT, RT5677_STO3_ADC_R_BST_SFT, 3, 0, | 615 | RT5677_STO3_ADC_L_BST_SFT, RT5677_STO3_ADC_R_BST_SFT, 3, 0, |
615 | adc_bst_tlv), | 616 | adc_bst_tlv), |
616 | SOC_DOUBLE_TLV("STO4 ADC Boost Gain", RT5677_STO3_4_ADC_BST, | 617 | SOC_DOUBLE_TLV("STO4 ADC Boost Volume", RT5677_STO3_4_ADC_BST, |
617 | RT5677_STO4_ADC_L_BST_SFT, RT5677_STO4_ADC_R_BST_SFT, 3, 0, | 618 | RT5677_STO4_ADC_L_BST_SFT, RT5677_STO4_ADC_R_BST_SFT, 3, 0, |
618 | adc_bst_tlv), | 619 | adc_bst_tlv), |
619 | SOC_DOUBLE_TLV("Mono ADC Boost Gain", RT5677_ADC_BST_CTRL2, | 620 | SOC_DOUBLE_TLV("Mono ADC Boost Volume", RT5677_ADC_BST_CTRL2, |
620 | RT5677_MONO_ADC_L_BST_SFT, RT5677_MONO_ADC_R_BST_SFT, 3, 0, | 621 | RT5677_MONO_ADC_L_BST_SFT, RT5677_MONO_ADC_R_BST_SFT, 3, 0, |
621 | adc_bst_tlv), | 622 | adc_bst_tlv), |
622 | }; | 623 | }; |
@@ -636,21 +637,7 @@ static int set_dmic_clk(struct snd_soc_dapm_widget *w, | |||
636 | { | 637 | { |
637 | struct snd_soc_codec *codec = w->codec; | 638 | struct snd_soc_codec *codec = w->codec; |
638 | struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec); | 639 | struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec); |
639 | int div[] = {2, 3, 4, 6, 8, 12}, idx = -EINVAL, i; | 640 | int idx = rl6231_calc_dmic_clk(rt5677->sysclk); |
640 | int rate, red, bound, temp; | ||
641 | |||
642 | rate = rt5677->sysclk; | ||
643 | red = 3000000 * 12; | ||
644 | for (i = 0; i < ARRAY_SIZE(div); i++) { | ||
645 | bound = div[i] * 3000000; | ||
646 | if (rate > bound) | ||
647 | continue; | ||
648 | temp = bound - rate; | ||
649 | if (temp < red) { | ||
650 | red = temp; | ||
651 | idx = i; | ||
652 | } | ||
653 | } | ||
654 | 641 | ||
655 | if (idx < 0) | 642 | if (idx < 0) |
656 | dev_err(codec->dev, "Failed to set DMIC clock\n"); | 643 | dev_err(codec->dev, "Failed to set DMIC clock\n"); |
@@ -951,7 +938,7 @@ static const struct snd_kcontrol_new rt5677_ob_7_mix[] = { | |||
951 | 938 | ||
952 | 939 | ||
953 | /* Mux */ | 940 | /* Mux */ |
954 | /* DAC1 L/R source */ /* MX-29 [10:8] */ | 941 | /* DAC1 L/R Source */ /* MX-29 [10:8] */ |
955 | static const char * const rt5677_dac1_src[] = { | 942 | static const char * const rt5677_dac1_src[] = { |
956 | "IF1 DAC 01", "IF2 DAC 01", "IF3 DAC LR", "IF4 DAC LR", "SLB DAC 01", | 943 | "IF1 DAC 01", "IF2 DAC 01", "IF3 DAC LR", "IF4 DAC LR", "SLB DAC 01", |
957 | "OB 01" | 944 | "OB 01" |
@@ -962,9 +949,9 @@ static SOC_ENUM_SINGLE_DECL( | |||
962 | RT5677_DAC1_L_SEL_SFT, rt5677_dac1_src); | 949 | RT5677_DAC1_L_SEL_SFT, rt5677_dac1_src); |
963 | 950 | ||
964 | static const struct snd_kcontrol_new rt5677_dac1_mux = | 951 | static const struct snd_kcontrol_new rt5677_dac1_mux = |
965 | SOC_DAPM_ENUM("DAC1 source", rt5677_dac1_enum); | 952 | SOC_DAPM_ENUM("DAC1 Source", rt5677_dac1_enum); |
966 | 953 | ||
967 | /* ADDA1 L/R source */ /* MX-29 [1:0] */ | 954 | /* ADDA1 L/R Source */ /* MX-29 [1:0] */ |
968 | static const char * const rt5677_adda1_src[] = { | 955 | static const char * const rt5677_adda1_src[] = { |
969 | "STO1 ADC MIX", "STO2 ADC MIX", "OB 67", | 956 | "STO1 ADC MIX", "STO2 ADC MIX", "OB 67", |
970 | }; | 957 | }; |
@@ -974,10 +961,10 @@ static SOC_ENUM_SINGLE_DECL( | |||
974 | RT5677_ADDA1_SEL_SFT, rt5677_adda1_src); | 961 | RT5677_ADDA1_SEL_SFT, rt5677_adda1_src); |
975 | 962 | ||
976 | static const struct snd_kcontrol_new rt5677_adda1_mux = | 963 | static const struct snd_kcontrol_new rt5677_adda1_mux = |
977 | SOC_DAPM_ENUM("ADDA1 source", rt5677_adda1_enum); | 964 | SOC_DAPM_ENUM("ADDA1 Source", rt5677_adda1_enum); |
978 | 965 | ||
979 | 966 | ||
980 | /*DAC2 L/R source*/ /* MX-1B [6:4] [2:0] */ | 967 | /*DAC2 L/R Source*/ /* MX-1B [6:4] [2:0] */ |
981 | static const char * const rt5677_dac2l_src[] = { | 968 | static const char * const rt5677_dac2l_src[] = { |
982 | "IF1 DAC 2", "IF2 DAC 2", "IF3 DAC L", "IF4 DAC L", "SLB DAC 2", | 969 | "IF1 DAC 2", "IF2 DAC 2", "IF3 DAC L", "IF4 DAC L", "SLB DAC 2", |
983 | "OB 2", | 970 | "OB 2", |
@@ -988,7 +975,7 @@ static SOC_ENUM_SINGLE_DECL( | |||
988 | RT5677_SEL_DAC2_L_SRC_SFT, rt5677_dac2l_src); | 975 | RT5677_SEL_DAC2_L_SRC_SFT, rt5677_dac2l_src); |
989 | 976 | ||
990 | static const struct snd_kcontrol_new rt5677_dac2_l_mux = | 977 | static const struct snd_kcontrol_new rt5677_dac2_l_mux = |
991 | SOC_DAPM_ENUM("DAC2 L source", rt5677_dac2l_enum); | 978 | SOC_DAPM_ENUM("DAC2 L Source", rt5677_dac2l_enum); |
992 | 979 | ||
993 | static const char * const rt5677_dac2r_src[] = { | 980 | static const char * const rt5677_dac2r_src[] = { |
994 | "IF1 DAC 3", "IF2 DAC 3", "IF3 DAC R", "IF4 DAC R", "SLB DAC 3", | 981 | "IF1 DAC 3", "IF2 DAC 3", "IF3 DAC R", "IF4 DAC R", "SLB DAC 3", |
@@ -1000,9 +987,9 @@ static SOC_ENUM_SINGLE_DECL( | |||
1000 | RT5677_SEL_DAC2_R_SRC_SFT, rt5677_dac2r_src); | 987 | RT5677_SEL_DAC2_R_SRC_SFT, rt5677_dac2r_src); |
1001 | 988 | ||
1002 | static const struct snd_kcontrol_new rt5677_dac2_r_mux = | 989 | static const struct snd_kcontrol_new rt5677_dac2_r_mux = |
1003 | SOC_DAPM_ENUM("DAC2 R source", rt5677_dac2r_enum); | 990 | SOC_DAPM_ENUM("DAC2 R Source", rt5677_dac2r_enum); |
1004 | 991 | ||
1005 | /*DAC3 L/R source*/ /* MX-16 [6:4] [2:0] */ | 992 | /*DAC3 L/R Source*/ /* MX-16 [6:4] [2:0] */ |
1006 | static const char * const rt5677_dac3l_src[] = { | 993 | static const char * const rt5677_dac3l_src[] = { |
1007 | "IF1 DAC 4", "IF2 DAC 4", "IF3 DAC L", "IF4 DAC L", | 994 | "IF1 DAC 4", "IF2 DAC 4", "IF3 DAC L", "IF4 DAC L", |
1008 | "SLB DAC 4", "OB 4" | 995 | "SLB DAC 4", "OB 4" |
@@ -1013,7 +1000,7 @@ static SOC_ENUM_SINGLE_DECL( | |||
1013 | RT5677_SEL_DAC3_L_SRC_SFT, rt5677_dac3l_src); | 1000 | RT5677_SEL_DAC3_L_SRC_SFT, rt5677_dac3l_src); |
1014 | 1001 | ||
1015 | static const struct snd_kcontrol_new rt5677_dac3_l_mux = | 1002 | static const struct snd_kcontrol_new rt5677_dac3_l_mux = |
1016 | SOC_DAPM_ENUM("DAC3 L source", rt5677_dac3l_enum); | 1003 | SOC_DAPM_ENUM("DAC3 L Source", rt5677_dac3l_enum); |
1017 | 1004 | ||
1018 | static const char * const rt5677_dac3r_src[] = { | 1005 | static const char * const rt5677_dac3r_src[] = { |
1019 | "IF1 DAC 5", "IF2 DAC 5", "IF3 DAC R", "IF4 DAC R", | 1006 | "IF1 DAC 5", "IF2 DAC 5", "IF3 DAC R", "IF4 DAC R", |
@@ -1025,9 +1012,9 @@ static SOC_ENUM_SINGLE_DECL( | |||
1025 | RT5677_SEL_DAC3_R_SRC_SFT, rt5677_dac3r_src); | 1012 | RT5677_SEL_DAC3_R_SRC_SFT, rt5677_dac3r_src); |
1026 | 1013 | ||
1027 | static const struct snd_kcontrol_new rt5677_dac3_r_mux = | 1014 | static const struct snd_kcontrol_new rt5677_dac3_r_mux = |
1028 | SOC_DAPM_ENUM("DAC3 R source", rt5677_dac3r_enum); | 1015 | SOC_DAPM_ENUM("DAC3 R Source", rt5677_dac3r_enum); |
1029 | 1016 | ||
1030 | /*DAC4 L/R source*/ /* MX-16 [14:12] [10:8] */ | 1017 | /*DAC4 L/R Source*/ /* MX-16 [14:12] [10:8] */ |
1031 | static const char * const rt5677_dac4l_src[] = { | 1018 | static const char * const rt5677_dac4l_src[] = { |
1032 | "IF1 DAC 6", "IF2 DAC 6", "IF3 DAC L", "IF4 DAC L", | 1019 | "IF1 DAC 6", "IF2 DAC 6", "IF3 DAC L", "IF4 DAC L", |
1033 | "SLB DAC 6", "OB 6" | 1020 | "SLB DAC 6", "OB 6" |
@@ -1038,7 +1025,7 @@ static SOC_ENUM_SINGLE_DECL( | |||
1038 | RT5677_SEL_DAC4_L_SRC_SFT, rt5677_dac4l_src); | 1025 | RT5677_SEL_DAC4_L_SRC_SFT, rt5677_dac4l_src); |
1039 | 1026 | ||
1040 | static const struct snd_kcontrol_new rt5677_dac4_l_mux = | 1027 | static const struct snd_kcontrol_new rt5677_dac4_l_mux = |
1041 | SOC_DAPM_ENUM("DAC4 L source", rt5677_dac4l_enum); | 1028 | SOC_DAPM_ENUM("DAC4 L Source", rt5677_dac4l_enum); |
1042 | 1029 | ||
1043 | static const char * const rt5677_dac4r_src[] = { | 1030 | static const char * const rt5677_dac4r_src[] = { |
1044 | "IF1 DAC 7", "IF2 DAC 7", "IF3 DAC R", "IF4 DAC R", | 1031 | "IF1 DAC 7", "IF2 DAC 7", "IF3 DAC R", "IF4 DAC R", |
@@ -1050,7 +1037,7 @@ static SOC_ENUM_SINGLE_DECL( | |||
1050 | RT5677_SEL_DAC4_R_SRC_SFT, rt5677_dac4r_src); | 1037 | RT5677_SEL_DAC4_R_SRC_SFT, rt5677_dac4r_src); |
1051 | 1038 | ||
1052 | static const struct snd_kcontrol_new rt5677_dac4_r_mux = | 1039 | static const struct snd_kcontrol_new rt5677_dac4_r_mux = |
1053 | SOC_DAPM_ENUM("DAC4 R source", rt5677_dac4r_enum); | 1040 | SOC_DAPM_ENUM("DAC4 R Source", rt5677_dac4r_enum); |
1054 | 1041 | ||
1055 | /* In/OutBound Source Pass SRC */ /* MX-A5 [3] [4] [0] [1] [2] */ | 1042 | /* In/OutBound Source Pass SRC */ /* MX-A5 [3] [4] [0] [1] [2] */ |
1056 | static const char * const rt5677_iob_bypass_src[] = { | 1043 | static const char * const rt5677_iob_bypass_src[] = { |
@@ -1062,35 +1049,35 @@ static SOC_ENUM_SINGLE_DECL( | |||
1062 | RT5677_SEL_SRC_OB01_SFT, rt5677_iob_bypass_src); | 1049 | RT5677_SEL_SRC_OB01_SFT, rt5677_iob_bypass_src); |
1063 | 1050 | ||
1064 | static const struct snd_kcontrol_new rt5677_ob01_bypass_src_mux = | 1051 | static const struct snd_kcontrol_new rt5677_ob01_bypass_src_mux = |
1065 | SOC_DAPM_ENUM("OB01 Bypass source", rt5677_ob01_bypass_src_enum); | 1052 | SOC_DAPM_ENUM("OB01 Bypass Source", rt5677_ob01_bypass_src_enum); |
1066 | 1053 | ||
1067 | static SOC_ENUM_SINGLE_DECL( | 1054 | static SOC_ENUM_SINGLE_DECL( |
1068 | rt5677_ob23_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL, | 1055 | rt5677_ob23_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL, |
1069 | RT5677_SEL_SRC_OB23_SFT, rt5677_iob_bypass_src); | 1056 | RT5677_SEL_SRC_OB23_SFT, rt5677_iob_bypass_src); |
1070 | 1057 | ||
1071 | static const struct snd_kcontrol_new rt5677_ob23_bypass_src_mux = | 1058 | static const struct snd_kcontrol_new rt5677_ob23_bypass_src_mux = |
1072 | SOC_DAPM_ENUM("OB23 Bypass source", rt5677_ob23_bypass_src_enum); | 1059 | SOC_DAPM_ENUM("OB23 Bypass Source", rt5677_ob23_bypass_src_enum); |
1073 | 1060 | ||
1074 | static SOC_ENUM_SINGLE_DECL( | 1061 | static SOC_ENUM_SINGLE_DECL( |
1075 | rt5677_ib01_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL, | 1062 | rt5677_ib01_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL, |
1076 | RT5677_SEL_SRC_IB01_SFT, rt5677_iob_bypass_src); | 1063 | RT5677_SEL_SRC_IB01_SFT, rt5677_iob_bypass_src); |
1077 | 1064 | ||
1078 | static const struct snd_kcontrol_new rt5677_ib01_bypass_src_mux = | 1065 | static const struct snd_kcontrol_new rt5677_ib01_bypass_src_mux = |
1079 | SOC_DAPM_ENUM("IB01 Bypass source", rt5677_ib01_bypass_src_enum); | 1066 | SOC_DAPM_ENUM("IB01 Bypass Source", rt5677_ib01_bypass_src_enum); |
1080 | 1067 | ||
1081 | static SOC_ENUM_SINGLE_DECL( | 1068 | static SOC_ENUM_SINGLE_DECL( |
1082 | rt5677_ib23_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL, | 1069 | rt5677_ib23_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL, |
1083 | RT5677_SEL_SRC_IB23_SFT, rt5677_iob_bypass_src); | 1070 | RT5677_SEL_SRC_IB23_SFT, rt5677_iob_bypass_src); |
1084 | 1071 | ||
1085 | static const struct snd_kcontrol_new rt5677_ib23_bypass_src_mux = | 1072 | static const struct snd_kcontrol_new rt5677_ib23_bypass_src_mux = |
1086 | SOC_DAPM_ENUM("IB23 Bypass source", rt5677_ib23_bypass_src_enum); | 1073 | SOC_DAPM_ENUM("IB23 Bypass Source", rt5677_ib23_bypass_src_enum); |
1087 | 1074 | ||
1088 | static SOC_ENUM_SINGLE_DECL( | 1075 | static SOC_ENUM_SINGLE_DECL( |
1089 | rt5677_ib45_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL, | 1076 | rt5677_ib45_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL, |
1090 | RT5677_SEL_SRC_IB45_SFT, rt5677_iob_bypass_src); | 1077 | RT5677_SEL_SRC_IB45_SFT, rt5677_iob_bypass_src); |
1091 | 1078 | ||
1092 | static const struct snd_kcontrol_new rt5677_ib45_bypass_src_mux = | 1079 | static const struct snd_kcontrol_new rt5677_ib45_bypass_src_mux = |
1093 | SOC_DAPM_ENUM("IB45 Bypass source", rt5677_ib45_bypass_src_enum); | 1080 | SOC_DAPM_ENUM("IB45 Bypass Source", rt5677_ib45_bypass_src_enum); |
1094 | 1081 | ||
1095 | /* Stereo ADC Source 2 */ /* MX-27 MX26 MX25 [11:10] */ | 1082 | /* Stereo ADC Source 2 */ /* MX-27 MX26 MX25 [11:10] */ |
1096 | static const char * const rt5677_stereo_adc2_src[] = { | 1083 | static const char * const rt5677_stereo_adc2_src[] = { |
@@ -1102,21 +1089,21 @@ static SOC_ENUM_SINGLE_DECL( | |||
1102 | RT5677_SEL_STO1_ADC2_SFT, rt5677_stereo_adc2_src); | 1089 | RT5677_SEL_STO1_ADC2_SFT, rt5677_stereo_adc2_src); |
1103 | 1090 | ||
1104 | static const struct snd_kcontrol_new rt5677_sto1_adc2_mux = | 1091 | static const struct snd_kcontrol_new rt5677_sto1_adc2_mux = |
1105 | SOC_DAPM_ENUM("Stereo1 ADC2 source", rt5677_stereo1_adc2_enum); | 1092 | SOC_DAPM_ENUM("Stereo1 ADC2 Source", rt5677_stereo1_adc2_enum); |
1106 | 1093 | ||
1107 | static SOC_ENUM_SINGLE_DECL( | 1094 | static SOC_ENUM_SINGLE_DECL( |
1108 | rt5677_stereo2_adc2_enum, RT5677_STO2_ADC_MIXER, | 1095 | rt5677_stereo2_adc2_enum, RT5677_STO2_ADC_MIXER, |
1109 | RT5677_SEL_STO2_ADC2_SFT, rt5677_stereo_adc2_src); | 1096 | RT5677_SEL_STO2_ADC2_SFT, rt5677_stereo_adc2_src); |
1110 | 1097 | ||
1111 | static const struct snd_kcontrol_new rt5677_sto2_adc2_mux = | 1098 | static const struct snd_kcontrol_new rt5677_sto2_adc2_mux = |
1112 | SOC_DAPM_ENUM("Stereo2 ADC2 source", rt5677_stereo2_adc2_enum); | 1099 | SOC_DAPM_ENUM("Stereo2 ADC2 Source", rt5677_stereo2_adc2_enum); |
1113 | 1100 | ||
1114 | static SOC_ENUM_SINGLE_DECL( | 1101 | static SOC_ENUM_SINGLE_DECL( |
1115 | rt5677_stereo3_adc2_enum, RT5677_STO3_ADC_MIXER, | 1102 | rt5677_stereo3_adc2_enum, RT5677_STO3_ADC_MIXER, |
1116 | RT5677_SEL_STO3_ADC2_SFT, rt5677_stereo_adc2_src); | 1103 | RT5677_SEL_STO3_ADC2_SFT, rt5677_stereo_adc2_src); |
1117 | 1104 | ||
1118 | static const struct snd_kcontrol_new rt5677_sto3_adc2_mux = | 1105 | static const struct snd_kcontrol_new rt5677_sto3_adc2_mux = |
1119 | SOC_DAPM_ENUM("Stereo3 ADC2 source", rt5677_stereo3_adc2_enum); | 1106 | SOC_DAPM_ENUM("Stereo3 ADC2 Source", rt5677_stereo3_adc2_enum); |
1120 | 1107 | ||
1121 | /* DMIC Source */ /* MX-28 [9:8][1:0] MX-27 MX-26 MX-25 MX-24 [9:8] */ | 1108 | /* DMIC Source */ /* MX-28 [9:8][1:0] MX-27 MX-26 MX-25 MX-24 [9:8] */ |
1122 | static const char * const rt5677_dmic_src[] = { | 1109 | static const char * const rt5677_dmic_src[] = { |
@@ -1128,44 +1115,44 @@ static SOC_ENUM_SINGLE_DECL( | |||
1128 | RT5677_SEL_MONO_DMIC_L_SFT, rt5677_dmic_src); | 1115 | RT5677_SEL_MONO_DMIC_L_SFT, rt5677_dmic_src); |
1129 | 1116 | ||
1130 | static const struct snd_kcontrol_new rt5677_mono_dmic_l_mux = | 1117 | static const struct snd_kcontrol_new rt5677_mono_dmic_l_mux = |
1131 | SOC_DAPM_ENUM("Mono DMIC L source", rt5677_mono_dmic_l_enum); | 1118 | SOC_DAPM_ENUM("Mono DMIC L Source", rt5677_mono_dmic_l_enum); |
1132 | 1119 | ||
1133 | static SOC_ENUM_SINGLE_DECL( | 1120 | static SOC_ENUM_SINGLE_DECL( |
1134 | rt5677_mono_dmic_r_enum, RT5677_MONO_ADC_MIXER, | 1121 | rt5677_mono_dmic_r_enum, RT5677_MONO_ADC_MIXER, |
1135 | RT5677_SEL_MONO_DMIC_R_SFT, rt5677_dmic_src); | 1122 | RT5677_SEL_MONO_DMIC_R_SFT, rt5677_dmic_src); |
1136 | 1123 | ||
1137 | static const struct snd_kcontrol_new rt5677_mono_dmic_r_mux = | 1124 | static const struct snd_kcontrol_new rt5677_mono_dmic_r_mux = |
1138 | SOC_DAPM_ENUM("Mono DMIC R source", rt5677_mono_dmic_r_enum); | 1125 | SOC_DAPM_ENUM("Mono DMIC R Source", rt5677_mono_dmic_r_enum); |
1139 | 1126 | ||
1140 | static SOC_ENUM_SINGLE_DECL( | 1127 | static SOC_ENUM_SINGLE_DECL( |
1141 | rt5677_stereo1_dmic_enum, RT5677_STO1_ADC_MIXER, | 1128 | rt5677_stereo1_dmic_enum, RT5677_STO1_ADC_MIXER, |
1142 | RT5677_SEL_STO1_DMIC_SFT, rt5677_dmic_src); | 1129 | RT5677_SEL_STO1_DMIC_SFT, rt5677_dmic_src); |
1143 | 1130 | ||
1144 | static const struct snd_kcontrol_new rt5677_sto1_dmic_mux = | 1131 | static const struct snd_kcontrol_new rt5677_sto1_dmic_mux = |
1145 | SOC_DAPM_ENUM("Stereo1 DMIC source", rt5677_stereo1_dmic_enum); | 1132 | SOC_DAPM_ENUM("Stereo1 DMIC Source", rt5677_stereo1_dmic_enum); |
1146 | 1133 | ||
1147 | static SOC_ENUM_SINGLE_DECL( | 1134 | static SOC_ENUM_SINGLE_DECL( |
1148 | rt5677_stereo2_dmic_enum, RT5677_STO2_ADC_MIXER, | 1135 | rt5677_stereo2_dmic_enum, RT5677_STO2_ADC_MIXER, |
1149 | RT5677_SEL_STO2_DMIC_SFT, rt5677_dmic_src); | 1136 | RT5677_SEL_STO2_DMIC_SFT, rt5677_dmic_src); |
1150 | 1137 | ||
1151 | static const struct snd_kcontrol_new rt5677_sto2_dmic_mux = | 1138 | static const struct snd_kcontrol_new rt5677_sto2_dmic_mux = |
1152 | SOC_DAPM_ENUM("Stereo2 DMIC source", rt5677_stereo2_dmic_enum); | 1139 | SOC_DAPM_ENUM("Stereo2 DMIC Source", rt5677_stereo2_dmic_enum); |
1153 | 1140 | ||
1154 | static SOC_ENUM_SINGLE_DECL( | 1141 | static SOC_ENUM_SINGLE_DECL( |
1155 | rt5677_stereo3_dmic_enum, RT5677_STO3_ADC_MIXER, | 1142 | rt5677_stereo3_dmic_enum, RT5677_STO3_ADC_MIXER, |
1156 | RT5677_SEL_STO3_DMIC_SFT, rt5677_dmic_src); | 1143 | RT5677_SEL_STO3_DMIC_SFT, rt5677_dmic_src); |
1157 | 1144 | ||
1158 | static const struct snd_kcontrol_new rt5677_sto3_dmic_mux = | 1145 | static const struct snd_kcontrol_new rt5677_sto3_dmic_mux = |
1159 | SOC_DAPM_ENUM("Stereo3 DMIC source", rt5677_stereo3_dmic_enum); | 1146 | SOC_DAPM_ENUM("Stereo3 DMIC Source", rt5677_stereo3_dmic_enum); |
1160 | 1147 | ||
1161 | static SOC_ENUM_SINGLE_DECL( | 1148 | static SOC_ENUM_SINGLE_DECL( |
1162 | rt5677_stereo4_dmic_enum, RT5677_STO4_ADC_MIXER, | 1149 | rt5677_stereo4_dmic_enum, RT5677_STO4_ADC_MIXER, |
1163 | RT5677_SEL_STO4_DMIC_SFT, rt5677_dmic_src); | 1150 | RT5677_SEL_STO4_DMIC_SFT, rt5677_dmic_src); |
1164 | 1151 | ||
1165 | static const struct snd_kcontrol_new rt5677_sto4_dmic_mux = | 1152 | static const struct snd_kcontrol_new rt5677_sto4_dmic_mux = |
1166 | SOC_DAPM_ENUM("Stereo4 DMIC source", rt5677_stereo4_dmic_enum); | 1153 | SOC_DAPM_ENUM("Stereo4 DMIC Source", rt5677_stereo4_dmic_enum); |
1167 | 1154 | ||
1168 | /* Stereo2 ADC source */ /* MX-26 [0] */ | 1155 | /* Stereo2 ADC Source */ /* MX-26 [0] */ |
1169 | static const char * const rt5677_stereo2_adc_lr_src[] = { | 1156 | static const char * const rt5677_stereo2_adc_lr_src[] = { |
1170 | "L", "LR" | 1157 | "L", "LR" |
1171 | }; | 1158 | }; |
@@ -1175,7 +1162,7 @@ static SOC_ENUM_SINGLE_DECL( | |||
1175 | RT5677_SEL_STO2_LR_MIX_SFT, rt5677_stereo2_adc_lr_src); | 1162 | RT5677_SEL_STO2_LR_MIX_SFT, rt5677_stereo2_adc_lr_src); |
1176 | 1163 | ||
1177 | static const struct snd_kcontrol_new rt5677_sto2_adc_lr_mux = | 1164 | static const struct snd_kcontrol_new rt5677_sto2_adc_lr_mux = |
1178 | SOC_DAPM_ENUM("Stereo2 ADC LR source", rt5677_stereo2_adc_lr_enum); | 1165 | SOC_DAPM_ENUM("Stereo2 ADC LR Source", rt5677_stereo2_adc_lr_enum); |
1179 | 1166 | ||
1180 | /* Stereo1 ADC Source 1 */ /* MX-27 MX26 MX25 [13:12] */ | 1167 | /* Stereo1 ADC Source 1 */ /* MX-27 MX26 MX25 [13:12] */ |
1181 | static const char * const rt5677_stereo_adc1_src[] = { | 1168 | static const char * const rt5677_stereo_adc1_src[] = { |
@@ -1187,23 +1174,23 @@ static SOC_ENUM_SINGLE_DECL( | |||
1187 | RT5677_SEL_STO1_ADC1_SFT, rt5677_stereo_adc1_src); | 1174 | RT5677_SEL_STO1_ADC1_SFT, rt5677_stereo_adc1_src); |
1188 | 1175 | ||
1189 | static const struct snd_kcontrol_new rt5677_sto1_adc1_mux = | 1176 | static const struct snd_kcontrol_new rt5677_sto1_adc1_mux = |
1190 | SOC_DAPM_ENUM("Stereo1 ADC1 source", rt5677_stereo1_adc1_enum); | 1177 | SOC_DAPM_ENUM("Stereo1 ADC1 Source", rt5677_stereo1_adc1_enum); |
1191 | 1178 | ||
1192 | static SOC_ENUM_SINGLE_DECL( | 1179 | static SOC_ENUM_SINGLE_DECL( |
1193 | rt5677_stereo2_adc1_enum, RT5677_STO2_ADC_MIXER, | 1180 | rt5677_stereo2_adc1_enum, RT5677_STO2_ADC_MIXER, |
1194 | RT5677_SEL_STO2_ADC1_SFT, rt5677_stereo_adc1_src); | 1181 | RT5677_SEL_STO2_ADC1_SFT, rt5677_stereo_adc1_src); |
1195 | 1182 | ||
1196 | static const struct snd_kcontrol_new rt5677_sto2_adc1_mux = | 1183 | static const struct snd_kcontrol_new rt5677_sto2_adc1_mux = |
1197 | SOC_DAPM_ENUM("Stereo2 ADC1 source", rt5677_stereo2_adc1_enum); | 1184 | SOC_DAPM_ENUM("Stereo2 ADC1 Source", rt5677_stereo2_adc1_enum); |
1198 | 1185 | ||
1199 | static SOC_ENUM_SINGLE_DECL( | 1186 | static SOC_ENUM_SINGLE_DECL( |
1200 | rt5677_stereo3_adc1_enum, RT5677_STO3_ADC_MIXER, | 1187 | rt5677_stereo3_adc1_enum, RT5677_STO3_ADC_MIXER, |
1201 | RT5677_SEL_STO3_ADC1_SFT, rt5677_stereo_adc1_src); | 1188 | RT5677_SEL_STO3_ADC1_SFT, rt5677_stereo_adc1_src); |
1202 | 1189 | ||
1203 | static const struct snd_kcontrol_new rt5677_sto3_adc1_mux = | 1190 | static const struct snd_kcontrol_new rt5677_sto3_adc1_mux = |
1204 | SOC_DAPM_ENUM("Stereo3 ADC1 source", rt5677_stereo3_adc1_enum); | 1191 | SOC_DAPM_ENUM("Stereo3 ADC1 Source", rt5677_stereo3_adc1_enum); |
1205 | 1192 | ||
1206 | /* Mono ADC Left source 2 */ /* MX-28 [11:10] */ | 1193 | /* Mono ADC Left Source 2 */ /* MX-28 [11:10] */ |
1207 | static const char * const rt5677_mono_adc2_l_src[] = { | 1194 | static const char * const rt5677_mono_adc2_l_src[] = { |
1208 | "DD MIX1L", "DMIC", "MONO DAC MIXL" | 1195 | "DD MIX1L", "DMIC", "MONO DAC MIXL" |
1209 | }; | 1196 | }; |
@@ -1213,9 +1200,9 @@ static SOC_ENUM_SINGLE_DECL( | |||
1213 | RT5677_SEL_MONO_ADC_L2_SFT, rt5677_mono_adc2_l_src); | 1200 | RT5677_SEL_MONO_ADC_L2_SFT, rt5677_mono_adc2_l_src); |
1214 | 1201 | ||
1215 | static const struct snd_kcontrol_new rt5677_mono_adc2_l_mux = | 1202 | static const struct snd_kcontrol_new rt5677_mono_adc2_l_mux = |
1216 | SOC_DAPM_ENUM("Mono ADC2 L source", rt5677_mono_adc2_l_enum); | 1203 | SOC_DAPM_ENUM("Mono ADC2 L Source", rt5677_mono_adc2_l_enum); |
1217 | 1204 | ||
1218 | /* Mono ADC Left source 1 */ /* MX-28 [13:12] */ | 1205 | /* Mono ADC Left Source 1 */ /* MX-28 [13:12] */ |
1219 | static const char * const rt5677_mono_adc1_l_src[] = { | 1206 | static const char * const rt5677_mono_adc1_l_src[] = { |
1220 | "DD MIX1L", "ADC1", "MONO DAC MIXL" | 1207 | "DD MIX1L", "ADC1", "MONO DAC MIXL" |
1221 | }; | 1208 | }; |
@@ -1225,9 +1212,9 @@ static SOC_ENUM_SINGLE_DECL( | |||
1225 | RT5677_SEL_MONO_ADC_L1_SFT, rt5677_mono_adc1_l_src); | 1212 | RT5677_SEL_MONO_ADC_L1_SFT, rt5677_mono_adc1_l_src); |
1226 | 1213 | ||
1227 | static const struct snd_kcontrol_new rt5677_mono_adc1_l_mux = | 1214 | static const struct snd_kcontrol_new rt5677_mono_adc1_l_mux = |
1228 | SOC_DAPM_ENUM("Mono ADC1 L source", rt5677_mono_adc1_l_enum); | 1215 | SOC_DAPM_ENUM("Mono ADC1 L Source", rt5677_mono_adc1_l_enum); |
1229 | 1216 | ||
1230 | /* Mono ADC Right source 2 */ /* MX-28 [3:2] */ | 1217 | /* Mono ADC Right Source 2 */ /* MX-28 [3:2] */ |
1231 | static const char * const rt5677_mono_adc2_r_src[] = { | 1218 | static const char * const rt5677_mono_adc2_r_src[] = { |
1232 | "DD MIX1R", "DMIC", "MONO DAC MIXR" | 1219 | "DD MIX1R", "DMIC", "MONO DAC MIXR" |
1233 | }; | 1220 | }; |
@@ -1237,9 +1224,9 @@ static SOC_ENUM_SINGLE_DECL( | |||
1237 | RT5677_SEL_MONO_ADC_R2_SFT, rt5677_mono_adc2_r_src); | 1224 | RT5677_SEL_MONO_ADC_R2_SFT, rt5677_mono_adc2_r_src); |
1238 | 1225 | ||
1239 | static const struct snd_kcontrol_new rt5677_mono_adc2_r_mux = | 1226 | static const struct snd_kcontrol_new rt5677_mono_adc2_r_mux = |
1240 | SOC_DAPM_ENUM("Mono ADC2 R source", rt5677_mono_adc2_r_enum); | 1227 | SOC_DAPM_ENUM("Mono ADC2 R Source", rt5677_mono_adc2_r_enum); |
1241 | 1228 | ||
1242 | /* Mono ADC Right source 1 */ /* MX-28 [5:4] */ | 1229 | /* Mono ADC Right Source 1 */ /* MX-28 [5:4] */ |
1243 | static const char * const rt5677_mono_adc1_r_src[] = { | 1230 | static const char * const rt5677_mono_adc1_r_src[] = { |
1244 | "DD MIX1R", "ADC2", "MONO DAC MIXR" | 1231 | "DD MIX1R", "ADC2", "MONO DAC MIXR" |
1245 | }; | 1232 | }; |
@@ -1249,7 +1236,7 @@ static SOC_ENUM_SINGLE_DECL( | |||
1249 | RT5677_SEL_MONO_ADC_R1_SFT, rt5677_mono_adc1_r_src); | 1236 | RT5677_SEL_MONO_ADC_R1_SFT, rt5677_mono_adc1_r_src); |
1250 | 1237 | ||
1251 | static const struct snd_kcontrol_new rt5677_mono_adc1_r_mux = | 1238 | static const struct snd_kcontrol_new rt5677_mono_adc1_r_mux = |
1252 | SOC_DAPM_ENUM("Mono ADC1 R source", rt5677_mono_adc1_r_enum); | 1239 | SOC_DAPM_ENUM("Mono ADC1 R Source", rt5677_mono_adc1_r_enum); |
1253 | 1240 | ||
1254 | /* Stereo4 ADC Source 2 */ /* MX-24 [11:10] */ | 1241 | /* Stereo4 ADC Source 2 */ /* MX-24 [11:10] */ |
1255 | static const char * const rt5677_stereo4_adc2_src[] = { | 1242 | static const char * const rt5677_stereo4_adc2_src[] = { |
@@ -1261,7 +1248,7 @@ static SOC_ENUM_SINGLE_DECL( | |||
1261 | RT5677_SEL_STO4_ADC2_SFT, rt5677_stereo4_adc2_src); | 1248 | RT5677_SEL_STO4_ADC2_SFT, rt5677_stereo4_adc2_src); |
1262 | 1249 | ||
1263 | static const struct snd_kcontrol_new rt5677_sto4_adc2_mux = | 1250 | static const struct snd_kcontrol_new rt5677_sto4_adc2_mux = |
1264 | SOC_DAPM_ENUM("Stereo4 ADC2 source", rt5677_stereo4_adc2_enum); | 1251 | SOC_DAPM_ENUM("Stereo4 ADC2 Source", rt5677_stereo4_adc2_enum); |
1265 | 1252 | ||
1266 | 1253 | ||
1267 | /* Stereo4 ADC Source 1 */ /* MX-24 [13:12] */ | 1254 | /* Stereo4 ADC Source 1 */ /* MX-24 [13:12] */ |
@@ -1274,7 +1261,7 @@ static SOC_ENUM_SINGLE_DECL( | |||
1274 | RT5677_SEL_STO4_ADC1_SFT, rt5677_stereo4_adc1_src); | 1261 | RT5677_SEL_STO4_ADC1_SFT, rt5677_stereo4_adc1_src); |
1275 | 1262 | ||
1276 | static const struct snd_kcontrol_new rt5677_sto4_adc1_mux = | 1263 | static const struct snd_kcontrol_new rt5677_sto4_adc1_mux = |
1277 | SOC_DAPM_ENUM("Stereo4 ADC1 source", rt5677_stereo4_adc1_enum); | 1264 | SOC_DAPM_ENUM("Stereo4 ADC1 Source", rt5677_stereo4_adc1_enum); |
1278 | 1265 | ||
1279 | /* InBound0/1 Source */ /* MX-A3 [14:12] */ | 1266 | /* InBound0/1 Source */ /* MX-A3 [14:12] */ |
1280 | static const char * const rt5677_inbound01_src[] = { | 1267 | static const char * const rt5677_inbound01_src[] = { |
@@ -1416,7 +1403,7 @@ static SOC_ENUM_SINGLE_DECL( | |||
1416 | static const struct snd_kcontrol_new rt5677_dac3_mux = | 1403 | static const struct snd_kcontrol_new rt5677_dac3_mux = |
1417 | SOC_DAPM_ENUM("Analog DAC3 Source", rt5677_dac3_enum); | 1404 | SOC_DAPM_ENUM("Analog DAC3 Source", rt5677_dac3_enum); |
1418 | 1405 | ||
1419 | /* PDM channel source */ /* MX-31 [13:12][9:8][5:4][1:0] */ | 1406 | /* PDM channel Source */ /* MX-31 [13:12][9:8][5:4][1:0] */ |
1420 | static const char * const rt5677_pdm_src[] = { | 1407 | static const char * const rt5677_pdm_src[] = { |
1421 | "STO1 DAC MIX", "MONO DAC MIX", "DD MIX1", "DD MIX2" | 1408 | "STO1 DAC MIX", "MONO DAC MIX", "DD MIX1", "DD MIX2" |
1422 | }; | 1409 | }; |
@@ -1426,28 +1413,28 @@ static SOC_ENUM_SINGLE_DECL( | |||
1426 | RT5677_SEL_PDM1_L_SFT, rt5677_pdm_src); | 1413 | RT5677_SEL_PDM1_L_SFT, rt5677_pdm_src); |
1427 | 1414 | ||
1428 | static const struct snd_kcontrol_new rt5677_pdm1_l_mux = | 1415 | static const struct snd_kcontrol_new rt5677_pdm1_l_mux = |
1429 | SOC_DAPM_ENUM("PDM1 source", rt5677_pdm1_l_enum); | 1416 | SOC_DAPM_ENUM("PDM1 Source", rt5677_pdm1_l_enum); |
1430 | 1417 | ||
1431 | static SOC_ENUM_SINGLE_DECL( | 1418 | static SOC_ENUM_SINGLE_DECL( |
1432 | rt5677_pdm2_l_enum, RT5677_PDM_OUT_CTRL, | 1419 | rt5677_pdm2_l_enum, RT5677_PDM_OUT_CTRL, |
1433 | RT5677_SEL_PDM2_L_SFT, rt5677_pdm_src); | 1420 | RT5677_SEL_PDM2_L_SFT, rt5677_pdm_src); |
1434 | 1421 | ||
1435 | static const struct snd_kcontrol_new rt5677_pdm2_l_mux = | 1422 | static const struct snd_kcontrol_new rt5677_pdm2_l_mux = |
1436 | SOC_DAPM_ENUM("PDM2 source", rt5677_pdm2_l_enum); | 1423 | SOC_DAPM_ENUM("PDM2 Source", rt5677_pdm2_l_enum); |
1437 | 1424 | ||
1438 | static SOC_ENUM_SINGLE_DECL( | 1425 | static SOC_ENUM_SINGLE_DECL( |
1439 | rt5677_pdm1_r_enum, RT5677_PDM_OUT_CTRL, | 1426 | rt5677_pdm1_r_enum, RT5677_PDM_OUT_CTRL, |
1440 | RT5677_SEL_PDM1_R_SFT, rt5677_pdm_src); | 1427 | RT5677_SEL_PDM1_R_SFT, rt5677_pdm_src); |
1441 | 1428 | ||
1442 | static const struct snd_kcontrol_new rt5677_pdm1_r_mux = | 1429 | static const struct snd_kcontrol_new rt5677_pdm1_r_mux = |
1443 | SOC_DAPM_ENUM("PDM1 source", rt5677_pdm1_r_enum); | 1430 | SOC_DAPM_ENUM("PDM1 Source", rt5677_pdm1_r_enum); |
1444 | 1431 | ||
1445 | static SOC_ENUM_SINGLE_DECL( | 1432 | static SOC_ENUM_SINGLE_DECL( |
1446 | rt5677_pdm2_r_enum, RT5677_PDM_OUT_CTRL, | 1433 | rt5677_pdm2_r_enum, RT5677_PDM_OUT_CTRL, |
1447 | RT5677_SEL_PDM2_R_SFT, rt5677_pdm_src); | 1434 | RT5677_SEL_PDM2_R_SFT, rt5677_pdm_src); |
1448 | 1435 | ||
1449 | static const struct snd_kcontrol_new rt5677_pdm2_r_mux = | 1436 | static const struct snd_kcontrol_new rt5677_pdm2_r_mux = |
1450 | SOC_DAPM_ENUM("PDM2 source", rt5677_pdm2_r_enum); | 1437 | SOC_DAPM_ENUM("PDM2 Source", rt5677_pdm2_r_enum); |
1451 | 1438 | ||
1452 | /* TDM IF1/2 SLB ADC1 Data Selection */ /* MX-3C MX-41 [5:4] MX-08 [1:0]*/ | 1439 | /* TDM IF1/2 SLB ADC1 Data Selection */ /* MX-3C MX-41 [5:4] MX-08 [1:0]*/ |
1453 | static const char * const rt5677_if12_adc1_src[] = { | 1440 | static const char * const rt5677_if12_adc1_src[] = { |
@@ -1459,21 +1446,21 @@ static SOC_ENUM_SINGLE_DECL( | |||
1459 | RT5677_IF1_ADC1_SFT, rt5677_if12_adc1_src); | 1446 | RT5677_IF1_ADC1_SFT, rt5677_if12_adc1_src); |
1460 | 1447 | ||
1461 | static const struct snd_kcontrol_new rt5677_if1_adc1_mux = | 1448 | static const struct snd_kcontrol_new rt5677_if1_adc1_mux = |
1462 | SOC_DAPM_ENUM("IF1 ADC1 source", rt5677_if1_adc1_enum); | 1449 | SOC_DAPM_ENUM("IF1 ADC1 Source", rt5677_if1_adc1_enum); |
1463 | 1450 | ||
1464 | static SOC_ENUM_SINGLE_DECL( | 1451 | static SOC_ENUM_SINGLE_DECL( |
1465 | rt5677_if2_adc1_enum, RT5677_TDM2_CTRL2, | 1452 | rt5677_if2_adc1_enum, RT5677_TDM2_CTRL2, |
1466 | RT5677_IF2_ADC1_SFT, rt5677_if12_adc1_src); | 1453 | RT5677_IF2_ADC1_SFT, rt5677_if12_adc1_src); |
1467 | 1454 | ||
1468 | static const struct snd_kcontrol_new rt5677_if2_adc1_mux = | 1455 | static const struct snd_kcontrol_new rt5677_if2_adc1_mux = |
1469 | SOC_DAPM_ENUM("IF2 ADC1 source", rt5677_if2_adc1_enum); | 1456 | SOC_DAPM_ENUM("IF2 ADC1 Source", rt5677_if2_adc1_enum); |
1470 | 1457 | ||
1471 | static SOC_ENUM_SINGLE_DECL( | 1458 | static SOC_ENUM_SINGLE_DECL( |
1472 | rt5677_slb_adc1_enum, RT5677_SLIMBUS_RX, | 1459 | rt5677_slb_adc1_enum, RT5677_SLIMBUS_RX, |
1473 | RT5677_SLB_ADC1_SFT, rt5677_if12_adc1_src); | 1460 | RT5677_SLB_ADC1_SFT, rt5677_if12_adc1_src); |
1474 | 1461 | ||
1475 | static const struct snd_kcontrol_new rt5677_slb_adc1_mux = | 1462 | static const struct snd_kcontrol_new rt5677_slb_adc1_mux = |
1476 | SOC_DAPM_ENUM("SLB ADC1 source", rt5677_slb_adc1_enum); | 1463 | SOC_DAPM_ENUM("SLB ADC1 Source", rt5677_slb_adc1_enum); |
1477 | 1464 | ||
1478 | /* TDM IF1/2 SLB ADC2 Data Selection */ /* MX-3C MX-41 [7:6] MX-08 [3:2] */ | 1465 | /* TDM IF1/2 SLB ADC2 Data Selection */ /* MX-3C MX-41 [7:6] MX-08 [3:2] */ |
1479 | static const char * const rt5677_if12_adc2_src[] = { | 1466 | static const char * const rt5677_if12_adc2_src[] = { |
@@ -1485,21 +1472,21 @@ static SOC_ENUM_SINGLE_DECL( | |||
1485 | RT5677_IF1_ADC2_SFT, rt5677_if12_adc2_src); | 1472 | RT5677_IF1_ADC2_SFT, rt5677_if12_adc2_src); |
1486 | 1473 | ||
1487 | static const struct snd_kcontrol_new rt5677_if1_adc2_mux = | 1474 | static const struct snd_kcontrol_new rt5677_if1_adc2_mux = |
1488 | SOC_DAPM_ENUM("IF1 ADC2 source", rt5677_if1_adc2_enum); | 1475 | SOC_DAPM_ENUM("IF1 ADC2 Source", rt5677_if1_adc2_enum); |
1489 | 1476 | ||
1490 | static SOC_ENUM_SINGLE_DECL( | 1477 | static SOC_ENUM_SINGLE_DECL( |
1491 | rt5677_if2_adc2_enum, RT5677_TDM2_CTRL2, | 1478 | rt5677_if2_adc2_enum, RT5677_TDM2_CTRL2, |
1492 | RT5677_IF2_ADC2_SFT, rt5677_if12_adc2_src); | 1479 | RT5677_IF2_ADC2_SFT, rt5677_if12_adc2_src); |
1493 | 1480 | ||
1494 | static const struct snd_kcontrol_new rt5677_if2_adc2_mux = | 1481 | static const struct snd_kcontrol_new rt5677_if2_adc2_mux = |
1495 | SOC_DAPM_ENUM("IF2 ADC2 source", rt5677_if2_adc2_enum); | 1482 | SOC_DAPM_ENUM("IF2 ADC2 Source", rt5677_if2_adc2_enum); |
1496 | 1483 | ||
1497 | static SOC_ENUM_SINGLE_DECL( | 1484 | static SOC_ENUM_SINGLE_DECL( |
1498 | rt5677_slb_adc2_enum, RT5677_SLIMBUS_RX, | 1485 | rt5677_slb_adc2_enum, RT5677_SLIMBUS_RX, |
1499 | RT5677_SLB_ADC2_SFT, rt5677_if12_adc2_src); | 1486 | RT5677_SLB_ADC2_SFT, rt5677_if12_adc2_src); |
1500 | 1487 | ||
1501 | static const struct snd_kcontrol_new rt5677_slb_adc2_mux = | 1488 | static const struct snd_kcontrol_new rt5677_slb_adc2_mux = |
1502 | SOC_DAPM_ENUM("SLB ADC2 source", rt5677_slb_adc2_enum); | 1489 | SOC_DAPM_ENUM("SLB ADC2 Source", rt5677_slb_adc2_enum); |
1503 | 1490 | ||
1504 | /* TDM IF1/2 SLB ADC3 Data Selection */ /* MX-3C MX-41 [9:8] MX-08 [5:4] */ | 1491 | /* TDM IF1/2 SLB ADC3 Data Selection */ /* MX-3C MX-41 [9:8] MX-08 [5:4] */ |
1505 | static const char * const rt5677_if12_adc3_src[] = { | 1492 | static const char * const rt5677_if12_adc3_src[] = { |
@@ -1511,21 +1498,21 @@ static SOC_ENUM_SINGLE_DECL( | |||
1511 | RT5677_IF1_ADC3_SFT, rt5677_if12_adc3_src); | 1498 | RT5677_IF1_ADC3_SFT, rt5677_if12_adc3_src); |
1512 | 1499 | ||
1513 | static const struct snd_kcontrol_new rt5677_if1_adc3_mux = | 1500 | static const struct snd_kcontrol_new rt5677_if1_adc3_mux = |
1514 | SOC_DAPM_ENUM("IF1 ADC3 source", rt5677_if1_adc3_enum); | 1501 | SOC_DAPM_ENUM("IF1 ADC3 Source", rt5677_if1_adc3_enum); |
1515 | 1502 | ||
1516 | static SOC_ENUM_SINGLE_DECL( | 1503 | static SOC_ENUM_SINGLE_DECL( |
1517 | rt5677_if2_adc3_enum, RT5677_TDM2_CTRL2, | 1504 | rt5677_if2_adc3_enum, RT5677_TDM2_CTRL2, |
1518 | RT5677_IF2_ADC3_SFT, rt5677_if12_adc3_src); | 1505 | RT5677_IF2_ADC3_SFT, rt5677_if12_adc3_src); |
1519 | 1506 | ||
1520 | static const struct snd_kcontrol_new rt5677_if2_adc3_mux = | 1507 | static const struct snd_kcontrol_new rt5677_if2_adc3_mux = |
1521 | SOC_DAPM_ENUM("IF2 ADC3 source", rt5677_if2_adc3_enum); | 1508 | SOC_DAPM_ENUM("IF2 ADC3 Source", rt5677_if2_adc3_enum); |
1522 | 1509 | ||
1523 | static SOC_ENUM_SINGLE_DECL( | 1510 | static SOC_ENUM_SINGLE_DECL( |
1524 | rt5677_slb_adc3_enum, RT5677_SLIMBUS_RX, | 1511 | rt5677_slb_adc3_enum, RT5677_SLIMBUS_RX, |
1525 | RT5677_SLB_ADC3_SFT, rt5677_if12_adc3_src); | 1512 | RT5677_SLB_ADC3_SFT, rt5677_if12_adc3_src); |
1526 | 1513 | ||
1527 | static const struct snd_kcontrol_new rt5677_slb_adc3_mux = | 1514 | static const struct snd_kcontrol_new rt5677_slb_adc3_mux = |
1528 | SOC_DAPM_ENUM("SLB ADC3 source", rt5677_slb_adc3_enum); | 1515 | SOC_DAPM_ENUM("SLB ADC3 Source", rt5677_slb_adc3_enum); |
1529 | 1516 | ||
1530 | /* TDM IF1/2 SLB ADC4 Data Selection */ /* MX-3C MX-41 [11:10] MX-08 [7:6] */ | 1517 | /* TDM IF1/2 SLB ADC4 Data Selection */ /* MX-3C MX-41 [11:10] MX-08 [7:6] */ |
1531 | static const char * const rt5677_if12_adc4_src[] = { | 1518 | static const char * const rt5677_if12_adc4_src[] = { |
@@ -1537,21 +1524,21 @@ static SOC_ENUM_SINGLE_DECL( | |||
1537 | RT5677_IF1_ADC4_SFT, rt5677_if12_adc4_src); | 1524 | RT5677_IF1_ADC4_SFT, rt5677_if12_adc4_src); |
1538 | 1525 | ||
1539 | static const struct snd_kcontrol_new rt5677_if1_adc4_mux = | 1526 | static const struct snd_kcontrol_new rt5677_if1_adc4_mux = |
1540 | SOC_DAPM_ENUM("IF1 ADC4 source", rt5677_if1_adc4_enum); | 1527 | SOC_DAPM_ENUM("IF1 ADC4 Source", rt5677_if1_adc4_enum); |
1541 | 1528 | ||
1542 | static SOC_ENUM_SINGLE_DECL( | 1529 | static SOC_ENUM_SINGLE_DECL( |
1543 | rt5677_if2_adc4_enum, RT5677_TDM2_CTRL2, | 1530 | rt5677_if2_adc4_enum, RT5677_TDM2_CTRL2, |
1544 | RT5677_IF2_ADC4_SFT, rt5677_if12_adc4_src); | 1531 | RT5677_IF2_ADC4_SFT, rt5677_if12_adc4_src); |
1545 | 1532 | ||
1546 | static const struct snd_kcontrol_new rt5677_if2_adc4_mux = | 1533 | static const struct snd_kcontrol_new rt5677_if2_adc4_mux = |
1547 | SOC_DAPM_ENUM("IF2 ADC4 source", rt5677_if2_adc4_enum); | 1534 | SOC_DAPM_ENUM("IF2 ADC4 Source", rt5677_if2_adc4_enum); |
1548 | 1535 | ||
1549 | static SOC_ENUM_SINGLE_DECL( | 1536 | static SOC_ENUM_SINGLE_DECL( |
1550 | rt5677_slb_adc4_enum, RT5677_SLIMBUS_RX, | 1537 | rt5677_slb_adc4_enum, RT5677_SLIMBUS_RX, |
1551 | RT5677_SLB_ADC4_SFT, rt5677_if12_adc4_src); | 1538 | RT5677_SLB_ADC4_SFT, rt5677_if12_adc4_src); |
1552 | 1539 | ||
1553 | static const struct snd_kcontrol_new rt5677_slb_adc4_mux = | 1540 | static const struct snd_kcontrol_new rt5677_slb_adc4_mux = |
1554 | SOC_DAPM_ENUM("SLB ADC4 source", rt5677_slb_adc4_enum); | 1541 | SOC_DAPM_ENUM("SLB ADC4 Source", rt5677_slb_adc4_enum); |
1555 | 1542 | ||
1556 | /* Interface3/4 ADC Data Input */ /* MX-2F [3:0] MX-30 [7:4]*/ | 1543 | /* Interface3/4 ADC Data Input */ /* MX-2F [3:0] MX-30 [7:4]*/ |
1557 | static const char * const rt5677_if34_adc_src[] = { | 1544 | static const char * const rt5677_if34_adc_src[] = { |
@@ -1564,14 +1551,14 @@ static SOC_ENUM_SINGLE_DECL( | |||
1564 | RT5677_IF3_ADC_IN_SFT, rt5677_if34_adc_src); | 1551 | RT5677_IF3_ADC_IN_SFT, rt5677_if34_adc_src); |
1565 | 1552 | ||
1566 | static const struct snd_kcontrol_new rt5677_if3_adc_mux = | 1553 | static const struct snd_kcontrol_new rt5677_if3_adc_mux = |
1567 | SOC_DAPM_ENUM("IF3 ADC source", rt5677_if3_adc_enum); | 1554 | SOC_DAPM_ENUM("IF3 ADC Source", rt5677_if3_adc_enum); |
1568 | 1555 | ||
1569 | static SOC_ENUM_SINGLE_DECL( | 1556 | static SOC_ENUM_SINGLE_DECL( |
1570 | rt5677_if4_adc_enum, RT5677_IF4_DATA, | 1557 | rt5677_if4_adc_enum, RT5677_IF4_DATA, |
1571 | RT5677_IF4_ADC_IN_SFT, rt5677_if34_adc_src); | 1558 | RT5677_IF4_ADC_IN_SFT, rt5677_if34_adc_src); |
1572 | 1559 | ||
1573 | static const struct snd_kcontrol_new rt5677_if4_adc_mux = | 1560 | static const struct snd_kcontrol_new rt5677_if4_adc_mux = |
1574 | SOC_DAPM_ENUM("IF4 ADC source", rt5677_if4_adc_enum); | 1561 | SOC_DAPM_ENUM("IF4 ADC Source", rt5677_if4_adc_enum); |
1575 | 1562 | ||
1576 | static int rt5677_bst1_event(struct snd_soc_dapm_widget *w, | 1563 | static int rt5677_bst1_event(struct snd_soc_dapm_widget *w, |
1577 | struct snd_kcontrol *kcontrol, int event) | 1564 | struct snd_kcontrol *kcontrol, int event) |
@@ -1670,6 +1657,13 @@ static int rt5677_set_micbias1_event(struct snd_soc_dapm_widget *w, | |||
1670 | RT5677_PWR_CLK_MB, RT5677_PWR_CLK_MB1 | | 1657 | RT5677_PWR_CLK_MB, RT5677_PWR_CLK_MB1 | |
1671 | RT5677_PWR_PP_MB1 | RT5677_PWR_CLK_MB); | 1658 | RT5677_PWR_PP_MB1 | RT5677_PWR_CLK_MB); |
1672 | break; | 1659 | break; |
1660 | |||
1661 | case SND_SOC_DAPM_PRE_PMD: | ||
1662 | regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2, | ||
1663 | RT5677_PWR_CLK_MB1 | RT5677_PWR_PP_MB1 | | ||
1664 | RT5677_PWR_CLK_MB, 0); | ||
1665 | break; | ||
1666 | |||
1673 | default: | 1667 | default: |
1674 | return 0; | 1668 | return 0; |
1675 | } | 1669 | } |
@@ -1685,8 +1679,9 @@ static const struct snd_soc_dapm_widget rt5677_dapm_widgets[] = { | |||
1685 | 1679 | ||
1686 | /* Input Side */ | 1680 | /* Input Side */ |
1687 | /* micbias */ | 1681 | /* micbias */ |
1688 | SND_SOC_DAPM_SUPPLY("micbias1", RT5677_PWR_ANLG2, RT5677_PWR_MB1_BIT, | 1682 | SND_SOC_DAPM_SUPPLY("MICBIAS1", RT5677_PWR_ANLG2, RT5677_PWR_MB1_BIT, |
1689 | 0, rt5677_set_micbias1_event, SND_SOC_DAPM_POST_PMU), | 1683 | 0, rt5677_set_micbias1_event, SND_SOC_DAPM_PRE_PMD | |
1684 | SND_SOC_DAPM_POST_PMU), | ||
1690 | 1685 | ||
1691 | /* Input Lines */ | 1686 | /* Input Lines */ |
1692 | SND_SOC_DAPM_INPUT("DMIC L1"), | 1687 | SND_SOC_DAPM_INPUT("DMIC L1"), |
@@ -2798,21 +2793,6 @@ static const struct snd_soc_dapm_route rt5677_dapm_routes[] = { | |||
2798 | { "PDM2R", NULL, "PDM2 R Mux" }, | 2793 | { "PDM2R", NULL, "PDM2 R Mux" }, |
2799 | }; | 2794 | }; |
2800 | 2795 | ||
2801 | static int get_clk_info(int sclk, int rate) | ||
2802 | { | ||
2803 | int i, pd[] = {1, 2, 3, 4, 6, 8, 12, 16}; | ||
2804 | |||
2805 | if (sclk <= 0 || rate <= 0) | ||
2806 | return -EINVAL; | ||
2807 | |||
2808 | rate = rate << 8; | ||
2809 | for (i = 0; i < ARRAY_SIZE(pd); i++) | ||
2810 | if (sclk == rate * pd[i]) | ||
2811 | return i; | ||
2812 | |||
2813 | return -EINVAL; | ||
2814 | } | ||
2815 | |||
2816 | static int rt5677_hw_params(struct snd_pcm_substream *substream, | 2796 | static int rt5677_hw_params(struct snd_pcm_substream *substream, |
2817 | struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) | 2797 | struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) |
2818 | { | 2798 | { |
@@ -2822,7 +2802,7 @@ static int rt5677_hw_params(struct snd_pcm_substream *substream, | |||
2822 | int pre_div, bclk_ms, frame_size; | 2802 | int pre_div, bclk_ms, frame_size; |
2823 | 2803 | ||
2824 | rt5677->lrck[dai->id] = params_rate(params); | 2804 | rt5677->lrck[dai->id] = params_rate(params); |
2825 | pre_div = get_clk_info(rt5677->sysclk, rt5677->lrck[dai->id]); | 2805 | pre_div = rl6231_get_clk_info(rt5677->sysclk, rt5677->lrck[dai->id]); |
2826 | if (pre_div < 0) { | 2806 | if (pre_div < 0) { |
2827 | dev_err(codec->dev, "Unsupported clock setting\n"); | 2807 | dev_err(codec->dev, "Unsupported clock setting\n"); |
2828 | return -EINVAL; | 2808 | return -EINVAL; |
@@ -3016,62 +2996,12 @@ static int rt5677_set_dai_sysclk(struct snd_soc_dai *dai, | |||
3016 | * Returns 0 for success or negative error code. | 2996 | * Returns 0 for success or negative error code. |
3017 | */ | 2997 | */ |
3018 | static int rt5677_pll_calc(const unsigned int freq_in, | 2998 | static int rt5677_pll_calc(const unsigned int freq_in, |
3019 | const unsigned int freq_out, struct rt5677_pll_code *pll_code) | 2999 | const unsigned int freq_out, struct rl6231_pll_code *pll_code) |
3020 | { | 3000 | { |
3021 | int max_n = RT5677_PLL_N_MAX, max_m = RT5677_PLL_M_MAX; | 3001 | if (RT5677_PLL_INP_MIN > freq_in) |
3022 | int k, red, n_t, pll_out, in_t; | ||
3023 | int n = 0, m = 0, m_t = 0; | ||
3024 | int out_t, red_t = abs(freq_out - freq_in); | ||
3025 | bool m_bp = false, k_bp = false; | ||
3026 | |||
3027 | if (RT5677_PLL_INP_MAX < freq_in || RT5677_PLL_INP_MIN > freq_in) | ||
3028 | return -EINVAL; | 3002 | return -EINVAL; |
3029 | 3003 | ||
3030 | k = 100000000 / freq_out - 2; | 3004 | return rl6231_pll_calc(freq_in, freq_out, pll_code); |
3031 | if (k > RT5677_PLL_K_MAX) | ||
3032 | k = RT5677_PLL_K_MAX; | ||
3033 | for (n_t = 0; n_t <= max_n; n_t++) { | ||
3034 | in_t = freq_in / (k + 2); | ||
3035 | pll_out = freq_out / (n_t + 2); | ||
3036 | if (in_t < 0) | ||
3037 | continue; | ||
3038 | if (in_t == pll_out) { | ||
3039 | m_bp = true; | ||
3040 | n = n_t; | ||
3041 | goto code_find; | ||
3042 | } | ||
3043 | red = abs(in_t - pll_out); | ||
3044 | if (red < red_t) { | ||
3045 | m_bp = true; | ||
3046 | n = n_t; | ||
3047 | m = m_t; | ||
3048 | if (red == 0) | ||
3049 | goto code_find; | ||
3050 | red_t = red; | ||
3051 | } | ||
3052 | for (m_t = 0; m_t <= max_m; m_t++) { | ||
3053 | out_t = in_t / (m_t + 2); | ||
3054 | red = abs(out_t - pll_out); | ||
3055 | if (red < red_t) { | ||
3056 | m_bp = false; | ||
3057 | n = n_t; | ||
3058 | m = m_t; | ||
3059 | if (red == 0) | ||
3060 | goto code_find; | ||
3061 | red_t = red; | ||
3062 | } | ||
3063 | } | ||
3064 | } | ||
3065 | pr_debug("Only get approximation about PLL\n"); | ||
3066 | |||
3067 | code_find: | ||
3068 | |||
3069 | pll_code->m_bp = m_bp; | ||
3070 | pll_code->k_bp = k_bp; | ||
3071 | pll_code->m_code = m; | ||
3072 | pll_code->n_code = n; | ||
3073 | pll_code->k_code = k; | ||
3074 | return 0; | ||
3075 | } | 3005 | } |
3076 | 3006 | ||
3077 | static int rt5677_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source, | 3007 | static int rt5677_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source, |
@@ -3079,7 +3009,7 @@ static int rt5677_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source, | |||
3079 | { | 3009 | { |
3080 | struct snd_soc_codec *codec = dai->codec; | 3010 | struct snd_soc_codec *codec = dai->codec; |
3081 | struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec); | 3011 | struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec); |
3082 | struct rt5677_pll_code pll_code; | 3012 | struct rl6231_pll_code pll_code; |
3083 | int ret; | 3013 | int ret; |
3084 | 3014 | ||
3085 | if (source == rt5677->pll_src && freq_in == rt5677->pll_in && | 3015 | if (source == rt5677->pll_src && freq_in == rt5677->pll_in && |
@@ -3137,15 +3067,12 @@ static int rt5677_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source, | |||
3137 | return ret; | 3067 | return ret; |
3138 | } | 3068 | } |
3139 | 3069 | ||
3140 | dev_dbg(codec->dev, "m_bypass=%d k_bypass=%d m=%d n=%d k=%d\n", | 3070 | dev_dbg(codec->dev, "m_bypass=%d m=%d n=%d k=%d\n", |
3141 | pll_code.m_bp, pll_code.k_bp, | 3071 | pll_code.m_bp, (pll_code.m_bp ? 0 : pll_code.m_code), |
3142 | (pll_code.m_bp ? 0 : pll_code.m_code), pll_code.n_code, | 3072 | pll_code.n_code, pll_code.k_code); |
3143 | (pll_code.k_bp ? 0 : pll_code.k_code)); | ||
3144 | 3073 | ||
3145 | regmap_write(rt5677->regmap, RT5677_PLL1_CTRL1, | 3074 | regmap_write(rt5677->regmap, RT5677_PLL1_CTRL1, |
3146 | pll_code.n_code << RT5677_PLL_N_SFT | | 3075 | pll_code.n_code << RT5677_PLL_N_SFT | pll_code.k_code); |
3147 | pll_code.k_bp << RT5677_PLL_K_BP_SFT | | ||
3148 | (pll_code.k_bp ? 0 : pll_code.k_code)); | ||
3149 | regmap_write(rt5677->regmap, RT5677_PLL1_CTRL2, | 3076 | regmap_write(rt5677->regmap, RT5677_PLL1_CTRL2, |
3150 | (pll_code.m_bp ? 0 : pll_code.m_code) << RT5677_PLL_M_SFT | | 3077 | (pll_code.m_bp ? 0 : pll_code.m_code) << RT5677_PLL_M_SFT | |
3151 | pll_code.m_bp << RT5677_PLL_M_BP_SFT); | 3078 | pll_code.m_bp << RT5677_PLL_M_BP_SFT); |
@@ -3197,7 +3124,7 @@ static int rt5677_set_bias_level(struct snd_soc_codec *codec, | |||
3197 | regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x1, 0x0); | 3124 | regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x1, 0x0); |
3198 | regmap_write(rt5677->regmap, RT5677_PWR_DIG1, 0x0000); | 3125 | regmap_write(rt5677->regmap, RT5677_PWR_DIG1, 0x0000); |
3199 | regmap_write(rt5677->regmap, RT5677_PWR_DIG2, 0x0000); | 3126 | regmap_write(rt5677->regmap, RT5677_PWR_DIG2, 0x0000); |
3200 | regmap_write(rt5677->regmap, RT5677_PWR_ANLG1, 0x0000); | 3127 | regmap_write(rt5677->regmap, RT5677_PWR_ANLG1, 0x0022); |
3201 | regmap_write(rt5677->regmap, RT5677_PWR_ANLG2, 0x0000); | 3128 | regmap_write(rt5677->regmap, RT5677_PWR_ANLG2, 0x0000); |
3202 | regmap_update_bits(rt5677->regmap, | 3129 | regmap_update_bits(rt5677->regmap, |
3203 | RT5677_PR_BASE + RT5677_BIAS_CUR4, 0x0f00, 0x0000); | 3130 | RT5677_PR_BASE + RT5677_BIAS_CUR4, 0x0f00, 0x0000); |
@@ -3454,14 +3381,8 @@ static int rt5677_i2c_probe(struct i2c_client *i2c, | |||
3454 | regmap_update_bits(rt5677->regmap, RT5677_IN1, | 3381 | regmap_update_bits(rt5677->regmap, RT5677_IN1, |
3455 | RT5677_IN_DF2, RT5677_IN_DF2); | 3382 | RT5677_IN_DF2, RT5677_IN_DF2); |
3456 | 3383 | ||
3457 | ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5677, | 3384 | return snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5677, |
3458 | rt5677_dai, ARRAY_SIZE(rt5677_dai)); | 3385 | rt5677_dai, ARRAY_SIZE(rt5677_dai)); |
3459 | if (ret < 0) | ||
3460 | goto err; | ||
3461 | |||
3462 | return 0; | ||
3463 | err: | ||
3464 | return ret; | ||
3465 | } | 3386 | } |
3466 | 3387 | ||
3467 | static int rt5677_i2c_remove(struct i2c_client *i2c) | 3388 | static int rt5677_i2c_remove(struct i2c_client *i2c) |
@@ -3480,18 +3401,7 @@ static struct i2c_driver rt5677_i2c_driver = { | |||
3480 | .remove = rt5677_i2c_remove, | 3401 | .remove = rt5677_i2c_remove, |
3481 | .id_table = rt5677_i2c_id, | 3402 | .id_table = rt5677_i2c_id, |
3482 | }; | 3403 | }; |
3483 | 3404 | module_i2c_driver(rt5677_i2c_driver); | |
3484 | static int __init rt5677_modinit(void) | ||
3485 | { | ||
3486 | return i2c_add_driver(&rt5677_i2c_driver); | ||
3487 | } | ||
3488 | module_init(rt5677_modinit); | ||
3489 | |||
3490 | static void __exit rt5677_modexit(void) | ||
3491 | { | ||
3492 | i2c_del_driver(&rt5677_i2c_driver); | ||
3493 | } | ||
3494 | module_exit(rt5677_modexit); | ||
3495 | 3405 | ||
3496 | MODULE_DESCRIPTION("ASoC RT5677 driver"); | 3406 | MODULE_DESCRIPTION("ASoC RT5677 driver"); |
3497 | MODULE_AUTHOR("Oder Chiou <oder_chiou@realtek.com>"); | 3407 | MODULE_AUTHOR("Oder Chiou <oder_chiou@realtek.com>"); |