diff options
| -rw-r--r-- | sound/soc/codecs/max98090.c | 172 |
1 files changed, 97 insertions, 75 deletions
diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c index 51f9b3d16b41..c7b9e901bdac 100644 --- a/sound/soc/codecs/max98090.c +++ b/sound/soc/codecs/max98090.c | |||
| @@ -512,65 +512,75 @@ static const char *max98090_perf_pwr_text[] = | |||
| 512 | static const char *max98090_pwr_perf_text[] = | 512 | static const char *max98090_pwr_perf_text[] = |
| 513 | { "Low Power", "High Performance" }; | 513 | { "Low Power", "High Performance" }; |
| 514 | 514 | ||
| 515 | static const struct soc_enum max98090_vcmbandgap_enum = | 515 | static SOC_ENUM_SINGLE_DECL(max98090_vcmbandgap_enum, |
| 516 | SOC_ENUM_SINGLE(M98090_REG_BIAS_CONTROL, M98090_VCM_MODE_SHIFT, | 516 | M98090_REG_BIAS_CONTROL, |
| 517 | ARRAY_SIZE(max98090_pwr_perf_text), max98090_pwr_perf_text); | 517 | M98090_VCM_MODE_SHIFT, |
| 518 | max98090_pwr_perf_text); | ||
| 518 | 519 | ||
| 519 | static const char *max98090_osr128_text[] = { "64*fs", "128*fs" }; | 520 | static const char *max98090_osr128_text[] = { "64*fs", "128*fs" }; |
| 520 | 521 | ||
| 521 | static const struct soc_enum max98090_osr128_enum = | 522 | static SOC_ENUM_SINGLE_DECL(max98090_osr128_enum, |
| 522 | SOC_ENUM_SINGLE(M98090_REG_ADC_CONTROL, M98090_OSR128_SHIFT, | 523 | M98090_REG_ADC_CONTROL, |
| 523 | ARRAY_SIZE(max98090_osr128_text), max98090_osr128_text); | 524 | M98090_OSR128_SHIFT, |
| 525 | max98090_osr128_text); | ||
| 524 | 526 | ||
| 525 | static const char *max98090_mode_text[] = { "Voice", "Music" }; | 527 | static const char *max98090_mode_text[] = { "Voice", "Music" }; |
| 526 | 528 | ||
| 527 | static const struct soc_enum max98090_mode_enum = | 529 | static SOC_ENUM_SINGLE_DECL(max98090_mode_enum, |
| 528 | SOC_ENUM_SINGLE(M98090_REG_FILTER_CONFIG, M98090_MODE_SHIFT, | 530 | M98090_REG_FILTER_CONFIG, |
| 529 | ARRAY_SIZE(max98090_mode_text), max98090_mode_text); | 531 | M98090_MODE_SHIFT, |
| 532 | max98090_mode_text); | ||
| 530 | 533 | ||
| 531 | static const struct soc_enum max98090_filter_dmic34mode_enum = | 534 | static SOC_ENUM_SINGLE_DECL(max98090_filter_dmic34mode_enum, |
| 532 | SOC_ENUM_SINGLE(M98090_REG_FILTER_CONFIG, | 535 | M98090_REG_FILTER_CONFIG, |
| 533 | M98090_FLT_DMIC34MODE_SHIFT, | 536 | M98090_FLT_DMIC34MODE_SHIFT, |
| 534 | ARRAY_SIZE(max98090_mode_text), max98090_mode_text); | 537 | max98090_mode_text); |
| 535 | 538 | ||
| 536 | static const char *max98090_drcatk_text[] = | 539 | static const char *max98090_drcatk_text[] = |
| 537 | { "0.5ms", "1ms", "5ms", "10ms", "25ms", "50ms", "100ms", "200ms" }; | 540 | { "0.5ms", "1ms", "5ms", "10ms", "25ms", "50ms", "100ms", "200ms" }; |
| 538 | 541 | ||
| 539 | static const struct soc_enum max98090_drcatk_enum = | 542 | static SOC_ENUM_SINGLE_DECL(max98090_drcatk_enum, |
| 540 | SOC_ENUM_SINGLE(M98090_REG_DRC_TIMING, M98090_DRCATK_SHIFT, | 543 | M98090_REG_DRC_TIMING, |
| 541 | ARRAY_SIZE(max98090_drcatk_text), max98090_drcatk_text); | 544 | M98090_DRCATK_SHIFT, |
| 545 | max98090_drcatk_text); | ||
| 542 | 546 | ||
| 543 | static const char *max98090_drcrls_text[] = | 547 | static const char *max98090_drcrls_text[] = |
| 544 | { "8s", "4s", "2s", "1s", "0.5s", "0.25s", "0.125s", "0.0625s" }; | 548 | { "8s", "4s", "2s", "1s", "0.5s", "0.25s", "0.125s", "0.0625s" }; |
| 545 | 549 | ||
| 546 | static const struct soc_enum max98090_drcrls_enum = | 550 | static SOC_ENUM_SINGLE_DECL(max98090_drcrls_enum, |
| 547 | SOC_ENUM_SINGLE(M98090_REG_DRC_TIMING, M98090_DRCRLS_SHIFT, | 551 | M98090_REG_DRC_TIMING, |
| 548 | ARRAY_SIZE(max98090_drcrls_text), max98090_drcrls_text); | 552 | M98090_DRCRLS_SHIFT, |
| 553 | max98090_drcrls_text); | ||
| 549 | 554 | ||
| 550 | static const char *max98090_alccmp_text[] = | 555 | static const char *max98090_alccmp_text[] = |
| 551 | { "1:1", "1:1.5", "1:2", "1:4", "1:INF" }; | 556 | { "1:1", "1:1.5", "1:2", "1:4", "1:INF" }; |
| 552 | 557 | ||
| 553 | static const struct soc_enum max98090_alccmp_enum = | 558 | static SOC_ENUM_SINGLE_DECL(max98090_alccmp_enum, |
| 554 | SOC_ENUM_SINGLE(M98090_REG_DRC_COMPRESSOR, M98090_DRCCMP_SHIFT, | 559 | M98090_REG_DRC_COMPRESSOR, |
| 555 | ARRAY_SIZE(max98090_alccmp_text), max98090_alccmp_text); | 560 | M98090_DRCCMP_SHIFT, |
| 561 | max98090_alccmp_text); | ||
| 556 | 562 | ||
| 557 | static const char *max98090_drcexp_text[] = { "1:1", "2:1", "3:1" }; | 563 | static const char *max98090_drcexp_text[] = { "1:1", "2:1", "3:1" }; |
| 558 | 564 | ||
| 559 | static const struct soc_enum max98090_drcexp_enum = | 565 | static SOC_ENUM_SINGLE_DECL(max98090_drcexp_enum, |
| 560 | SOC_ENUM_SINGLE(M98090_REG_DRC_EXPANDER, M98090_DRCEXP_SHIFT, | 566 | M98090_REG_DRC_EXPANDER, |
| 561 | ARRAY_SIZE(max98090_drcexp_text), max98090_drcexp_text); | 567 | M98090_DRCEXP_SHIFT, |
| 568 | max98090_drcexp_text); | ||
| 562 | 569 | ||
| 563 | static const struct soc_enum max98090_dac_perfmode_enum = | 570 | static SOC_ENUM_SINGLE_DECL(max98090_dac_perfmode_enum, |
| 564 | SOC_ENUM_SINGLE(M98090_REG_DAC_CONTROL, M98090_PERFMODE_SHIFT, | 571 | M98090_REG_DAC_CONTROL, |
| 565 | ARRAY_SIZE(max98090_perf_pwr_text), max98090_perf_pwr_text); | 572 | M98090_PERFMODE_SHIFT, |
| 573 | max98090_perf_pwr_text); | ||
| 566 | 574 | ||
| 567 | static const struct soc_enum max98090_dachp_enum = | 575 | static SOC_ENUM_SINGLE_DECL(max98090_dachp_enum, |
| 568 | SOC_ENUM_SINGLE(M98090_REG_DAC_CONTROL, M98090_DACHP_SHIFT, | 576 | M98090_REG_DAC_CONTROL, |
| 569 | ARRAY_SIZE(max98090_pwr_perf_text), max98090_pwr_perf_text); | 577 | M98090_DACHP_SHIFT, |
| 578 | max98090_pwr_perf_text); | ||
| 570 | 579 | ||
| 571 | static const struct soc_enum max98090_adchp_enum = | 580 | static SOC_ENUM_SINGLE_DECL(max98090_adchp_enum, |
| 572 | SOC_ENUM_SINGLE(M98090_REG_ADC_CONTROL, M98090_ADCHP_SHIFT, | 581 | M98090_REG_ADC_CONTROL, |
| 573 | ARRAY_SIZE(max98090_pwr_perf_text), max98090_pwr_perf_text); | 582 | M98090_ADCHP_SHIFT, |
| 583 | max98090_pwr_perf_text); | ||
| 574 | 584 | ||
| 575 | static const struct snd_kcontrol_new max98090_snd_controls[] = { | 585 | static const struct snd_kcontrol_new max98090_snd_controls[] = { |
| 576 | SOC_ENUM("MIC Bias VCM Bandgap", max98090_vcmbandgap_enum), | 586 | SOC_ENUM("MIC Bias VCM Bandgap", max98090_vcmbandgap_enum), |
| @@ -841,39 +851,42 @@ static int max98090_micinput_event(struct snd_soc_dapm_widget *w, | |||
| 841 | 851 | ||
| 842 | static const char *mic1_mux_text[] = { "IN12", "IN56" }; | 852 | static const char *mic1_mux_text[] = { "IN12", "IN56" }; |
| 843 | 853 | ||
| 844 | static const struct soc_enum mic1_mux_enum = | 854 | static SOC_ENUM_SINGLE_DECL(mic1_mux_enum, |
| 845 | SOC_ENUM_SINGLE(M98090_REG_INPUT_MODE, M98090_EXTMIC1_SHIFT, | 855 | M98090_REG_INPUT_MODE, |
| 846 | ARRAY_SIZE(mic1_mux_text), mic1_mux_text); | 856 | M98090_EXTMIC1_SHIFT, |
| 857 | mic1_mux_text); | ||
| 847 | 858 | ||
| 848 | static const struct snd_kcontrol_new max98090_mic1_mux = | 859 | static const struct snd_kcontrol_new max98090_mic1_mux = |
| 849 | SOC_DAPM_ENUM("MIC1 Mux", mic1_mux_enum); | 860 | SOC_DAPM_ENUM("MIC1 Mux", mic1_mux_enum); |
| 850 | 861 | ||
| 851 | static const char *mic2_mux_text[] = { "IN34", "IN56" }; | 862 | static const char *mic2_mux_text[] = { "IN34", "IN56" }; |
| 852 | 863 | ||
| 853 | static const struct soc_enum mic2_mux_enum = | 864 | static SOC_ENUM_SINGLE_DECL(mic2_mux_enum, |
| 854 | SOC_ENUM_SINGLE(M98090_REG_INPUT_MODE, M98090_EXTMIC2_SHIFT, | 865 | M98090_REG_INPUT_MODE, |
| 855 | ARRAY_SIZE(mic2_mux_text), mic2_mux_text); | 866 | M98090_EXTMIC2_SHIFT, |
| 867 | mic2_mux_text); | ||
| 856 | 868 | ||
| 857 | static const struct snd_kcontrol_new max98090_mic2_mux = | 869 | static const struct snd_kcontrol_new max98090_mic2_mux = |
| 858 | SOC_DAPM_ENUM("MIC2 Mux", mic2_mux_enum); | 870 | SOC_DAPM_ENUM("MIC2 Mux", mic2_mux_enum); |
| 859 | 871 | ||
| 860 | static const char *dmic_mux_text[] = { "ADC", "DMIC" }; | 872 | static const char *dmic_mux_text[] = { "ADC", "DMIC" }; |
| 861 | 873 | ||
| 862 | static const struct soc_enum dmic_mux_enum = | 874 | static SOC_ENUM_SINGLE_EXT_DECL(dmic_mux_enum, dmic_mux_text); |
| 863 | SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(dmic_mux_text), dmic_mux_text); | ||
| 864 | 875 | ||
| 865 | static const struct snd_kcontrol_new max98090_dmic_mux = | 876 | static const struct snd_kcontrol_new max98090_dmic_mux = |
| 866 | SOC_DAPM_ENUM_VIRT("DMIC Mux", dmic_mux_enum); | 877 | SOC_DAPM_ENUM_VIRT("DMIC Mux", dmic_mux_enum); |
| 867 | 878 | ||
| 868 | static const char *max98090_micpre_text[] = { "Off", "On" }; | 879 | static const char *max98090_micpre_text[] = { "Off", "On" }; |
| 869 | 880 | ||
| 870 | static const struct soc_enum max98090_pa1en_enum = | 881 | static SOC_ENUM_SINGLE_DECL(max98090_pa1en_enum, |
| 871 | SOC_ENUM_SINGLE(M98090_REG_MIC1_INPUT_LEVEL, M98090_MIC_PA1EN_SHIFT, | 882 | M98090_REG_MIC1_INPUT_LEVEL, |
| 872 | ARRAY_SIZE(max98090_micpre_text), max98090_micpre_text); | 883 | M98090_MIC_PA1EN_SHIFT, |
| 884 | max98090_micpre_text); | ||
| 873 | 885 | ||
| 874 | static const struct soc_enum max98090_pa2en_enum = | 886 | static SOC_ENUM_SINGLE_DECL(max98090_pa2en_enum, |
| 875 | SOC_ENUM_SINGLE(M98090_REG_MIC2_INPUT_LEVEL, M98090_MIC_PA2EN_SHIFT, | 887 | M98090_REG_MIC2_INPUT_LEVEL, |
| 876 | ARRAY_SIZE(max98090_micpre_text), max98090_micpre_text); | 888 | M98090_MIC_PA2EN_SHIFT, |
| 889 | max98090_micpre_text); | ||
| 877 | 890 | ||
| 878 | /* LINEA mixer switch */ | 891 | /* LINEA mixer switch */ |
| 879 | static const struct snd_kcontrol_new max98090_linea_mixer_controls[] = { | 892 | static const struct snd_kcontrol_new max98090_linea_mixer_controls[] = { |
| @@ -937,13 +950,15 @@ static const struct snd_kcontrol_new max98090_right_adc_mixer_controls[] = { | |||
| 937 | 950 | ||
| 938 | static const char *lten_mux_text[] = { "Normal", "Loopthrough" }; | 951 | static const char *lten_mux_text[] = { "Normal", "Loopthrough" }; |
| 939 | 952 | ||
| 940 | static const struct soc_enum ltenl_mux_enum = | 953 | static SOC_ENUM_SINGLE_DECL(ltenl_mux_enum, |
| 941 | SOC_ENUM_SINGLE(M98090_REG_IO_CONFIGURATION, M98090_LTEN_SHIFT, | 954 | M98090_REG_IO_CONFIGURATION, |
| 942 | ARRAY_SIZE(lten_mux_text), lten_mux_text); | 955 | M98090_LTEN_SHIFT, |
| 956 | lten_mux_text); | ||
| 943 | 957 | ||
| 944 | static const struct soc_enum ltenr_mux_enum = | 958 | static SOC_ENUM_SINGLE_DECL(ltenr_mux_enum, |
| 945 | SOC_ENUM_SINGLE(M98090_REG_IO_CONFIGURATION, M98090_LTEN_SHIFT, | 959 | M98090_REG_IO_CONFIGURATION, |
| 946 | ARRAY_SIZE(lten_mux_text), lten_mux_text); | 960 | M98090_LTEN_SHIFT, |
| 961 | lten_mux_text); | ||
| 947 | 962 | ||
| 948 | static const struct snd_kcontrol_new max98090_ltenl_mux = | 963 | static const struct snd_kcontrol_new max98090_ltenl_mux = |
| 949 | SOC_DAPM_ENUM("LTENL Mux", ltenl_mux_enum); | 964 | SOC_DAPM_ENUM("LTENL Mux", ltenl_mux_enum); |
| @@ -953,13 +968,15 @@ static const struct snd_kcontrol_new max98090_ltenr_mux = | |||
| 953 | 968 | ||
| 954 | static const char *lben_mux_text[] = { "Normal", "Loopback" }; | 969 | static const char *lben_mux_text[] = { "Normal", "Loopback" }; |
| 955 | 970 | ||
| 956 | static const struct soc_enum lbenl_mux_enum = | 971 | static SOC_ENUM_SINGLE_DECL(lbenl_mux_enum, |
| 957 | SOC_ENUM_SINGLE(M98090_REG_IO_CONFIGURATION, M98090_LBEN_SHIFT, | 972 | M98090_REG_IO_CONFIGURATION, |
| 958 | ARRAY_SIZE(lben_mux_text), lben_mux_text); | 973 | M98090_LBEN_SHIFT, |
| 974 | lben_mux_text); | ||
| 959 | 975 | ||
| 960 | static const struct soc_enum lbenr_mux_enum = | 976 | static SOC_ENUM_SINGLE_DECL(lbenr_mux_enum, |
| 961 | SOC_ENUM_SINGLE(M98090_REG_IO_CONFIGURATION, M98090_LBEN_SHIFT, | 977 | M98090_REG_IO_CONFIGURATION, |
| 962 | ARRAY_SIZE(lben_mux_text), lben_mux_text); | 978 | M98090_LBEN_SHIFT, |
| 979 | lben_mux_text); | ||
| 963 | 980 | ||
| 964 | static const struct snd_kcontrol_new max98090_lbenl_mux = | 981 | static const struct snd_kcontrol_new max98090_lbenl_mux = |
| 965 | SOC_DAPM_ENUM("LBENL Mux", lbenl_mux_enum); | 982 | SOC_DAPM_ENUM("LBENL Mux", lbenl_mux_enum); |
| @@ -971,13 +988,15 @@ static const char *stenl_mux_text[] = { "Normal", "Sidetone Left" }; | |||
| 971 | 988 | ||
| 972 | static const char *stenr_mux_text[] = { "Normal", "Sidetone Right" }; | 989 | static const char *stenr_mux_text[] = { "Normal", "Sidetone Right" }; |
| 973 | 990 | ||
| 974 | static const struct soc_enum stenl_mux_enum = | 991 | static SOC_ENUM_SINGLE_DECL(stenl_mux_enum, |
| 975 | SOC_ENUM_SINGLE(M98090_REG_ADC_SIDETONE, M98090_DSTSL_SHIFT, | 992 | M98090_REG_ADC_SIDETONE, |
| 976 | ARRAY_SIZE(stenl_mux_text), stenl_mux_text); | 993 | M98090_DSTSL_SHIFT, |
| 994 | stenl_mux_text); | ||
| 977 | 995 | ||
| 978 | static const struct soc_enum stenr_mux_enum = | 996 | static SOC_ENUM_SINGLE_DECL(stenr_mux_enum, |
| 979 | SOC_ENUM_SINGLE(M98090_REG_ADC_SIDETONE, M98090_DSTSR_SHIFT, | 997 | M98090_REG_ADC_SIDETONE, |
| 980 | ARRAY_SIZE(stenr_mux_text), stenr_mux_text); | 998 | M98090_DSTSR_SHIFT, |
| 999 | stenr_mux_text); | ||
| 981 | 1000 | ||
| 982 | static const struct snd_kcontrol_new max98090_stenl_mux = | 1001 | static const struct snd_kcontrol_new max98090_stenl_mux = |
| 983 | SOC_DAPM_ENUM("STENL Mux", stenl_mux_enum); | 1002 | SOC_DAPM_ENUM("STENL Mux", stenl_mux_enum); |
| @@ -1085,9 +1104,10 @@ static const struct snd_kcontrol_new max98090_right_rcv_mixer_controls[] = { | |||
| 1085 | 1104 | ||
| 1086 | static const char *linmod_mux_text[] = { "Left Only", "Left and Right" }; | 1105 | static const char *linmod_mux_text[] = { "Left Only", "Left and Right" }; |
| 1087 | 1106 | ||
| 1088 | static const struct soc_enum linmod_mux_enum = | 1107 | static SOC_ENUM_SINGLE_DECL(linmod_mux_enum, |
| 1089 | SOC_ENUM_SINGLE(M98090_REG_LOUTR_MIXER, M98090_LINMOD_SHIFT, | 1108 | M98090_REG_LOUTR_MIXER, |
| 1090 | ARRAY_SIZE(linmod_mux_text), linmod_mux_text); | 1109 | M98090_LINMOD_SHIFT, |
| 1110 | linmod_mux_text); | ||
| 1091 | 1111 | ||
| 1092 | static const struct snd_kcontrol_new max98090_linmod_mux = | 1112 | static const struct snd_kcontrol_new max98090_linmod_mux = |
| 1093 | SOC_DAPM_ENUM("LINMOD Mux", linmod_mux_enum); | 1113 | SOC_DAPM_ENUM("LINMOD Mux", linmod_mux_enum); |
| @@ -1097,16 +1117,18 @@ static const char *mixhpsel_mux_text[] = { "DAC Only", "HP Mixer" }; | |||
| 1097 | /* | 1117 | /* |
| 1098 | * This is a mux as it selects the HP output, but to DAPM it is a Mixer enable | 1118 | * This is a mux as it selects the HP output, but to DAPM it is a Mixer enable |
| 1099 | */ | 1119 | */ |
| 1100 | static const struct soc_enum mixhplsel_mux_enum = | 1120 | static SOC_ENUM_SINGLE_DECL(mixhplsel_mux_enum, |
| 1101 | SOC_ENUM_SINGLE(M98090_REG_HP_CONTROL, M98090_MIXHPLSEL_SHIFT, | 1121 | M98090_REG_HP_CONTROL, |
| 1102 | ARRAY_SIZE(mixhpsel_mux_text), mixhpsel_mux_text); | 1122 | M98090_MIXHPLSEL_SHIFT, |
| 1123 | mixhpsel_mux_text); | ||
| 1103 | 1124 | ||
| 1104 | static const struct snd_kcontrol_new max98090_mixhplsel_mux = | 1125 | static const struct snd_kcontrol_new max98090_mixhplsel_mux = |
| 1105 | SOC_DAPM_ENUM("MIXHPLSEL Mux", mixhplsel_mux_enum); | 1126 | SOC_DAPM_ENUM("MIXHPLSEL Mux", mixhplsel_mux_enum); |
| 1106 | 1127 | ||
| 1107 | static const struct soc_enum mixhprsel_mux_enum = | 1128 | static SOC_ENUM_SINGLE_DECL(mixhprsel_mux_enum, |
| 1108 | SOC_ENUM_SINGLE(M98090_REG_HP_CONTROL, M98090_MIXHPRSEL_SHIFT, | 1129 | M98090_REG_HP_CONTROL, |
| 1109 | ARRAY_SIZE(mixhpsel_mux_text), mixhpsel_mux_text); | 1130 | M98090_MIXHPRSEL_SHIFT, |
| 1131 | mixhpsel_mux_text); | ||
| 1110 | 1132 | ||
| 1111 | static const struct snd_kcontrol_new max98090_mixhprsel_mux = | 1133 | static const struct snd_kcontrol_new max98090_mixhprsel_mux = |
| 1112 | SOC_DAPM_ENUM("MIXHPRSEL Mux", mixhprsel_mux_enum); | 1134 | SOC_DAPM_ENUM("MIXHPRSEL Mux", mixhprsel_mux_enum); |
