diff options
Diffstat (limited to 'sound/soc/codecs/rt5665.c')
-rw-r--r-- | sound/soc/codecs/rt5665.c | 158 |
1 files changed, 86 insertions, 72 deletions
diff --git a/sound/soc/codecs/rt5665.c b/sound/soc/codecs/rt5665.c index 8cd22307f5b6..370ed54d1e15 100644 --- a/sound/soc/codecs/rt5665.c +++ b/sound/soc/codecs/rt5665.c | |||
@@ -70,6 +70,7 @@ struct rt5665_priv { | |||
70 | int jack_type; | 70 | int jack_type; |
71 | int irq_work_delay_time; | 71 | int irq_work_delay_time; |
72 | unsigned int sar_adc_value; | 72 | unsigned int sar_adc_value; |
73 | bool calibration_done; | ||
73 | }; | 74 | }; |
74 | 75 | ||
75 | static const struct reg_default rt5665_reg[] = { | 76 | static const struct reg_default rt5665_reg[] = { |
@@ -912,46 +913,46 @@ static const char * const rt5665_data_select[] = { | |||
912 | "L/R", "R/L", "L/L", "R/R" | 913 | "L/R", "R/L", "L/L", "R/R" |
913 | }; | 914 | }; |
914 | 915 | ||
915 | static const SOC_ENUM_SINGLE_DECL(rt5665_if1_1_01_adc_enum, | 916 | static SOC_ENUM_SINGLE_DECL(rt5665_if1_1_01_adc_enum, |
916 | RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT01_SFT, rt5665_data_select); | 917 | RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT01_SFT, rt5665_data_select); |
917 | 918 | ||
918 | static const SOC_ENUM_SINGLE_DECL(rt5665_if1_1_23_adc_enum, | 919 | static SOC_ENUM_SINGLE_DECL(rt5665_if1_1_23_adc_enum, |
919 | RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT23_SFT, rt5665_data_select); | 920 | RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT23_SFT, rt5665_data_select); |
920 | 921 | ||
921 | static const SOC_ENUM_SINGLE_DECL(rt5665_if1_1_45_adc_enum, | 922 | static SOC_ENUM_SINGLE_DECL(rt5665_if1_1_45_adc_enum, |
922 | RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT45_SFT, rt5665_data_select); | 923 | RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT45_SFT, rt5665_data_select); |
923 | 924 | ||
924 | static const SOC_ENUM_SINGLE_DECL(rt5665_if1_1_67_adc_enum, | 925 | static SOC_ENUM_SINGLE_DECL(rt5665_if1_1_67_adc_enum, |
925 | RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT67_SFT, rt5665_data_select); | 926 | RT5665_TDM_CTRL_2, RT5665_I2S1_1_DS_ADC_SLOT67_SFT, rt5665_data_select); |
926 | 927 | ||
927 | static const SOC_ENUM_SINGLE_DECL(rt5665_if1_2_01_adc_enum, | 928 | static SOC_ENUM_SINGLE_DECL(rt5665_if1_2_01_adc_enum, |
928 | RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT01_SFT, rt5665_data_select); | 929 | RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT01_SFT, rt5665_data_select); |
929 | 930 | ||
930 | static const SOC_ENUM_SINGLE_DECL(rt5665_if1_2_23_adc_enum, | 931 | static SOC_ENUM_SINGLE_DECL(rt5665_if1_2_23_adc_enum, |
931 | RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT23_SFT, rt5665_data_select); | 932 | RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT23_SFT, rt5665_data_select); |
932 | 933 | ||
933 | static const SOC_ENUM_SINGLE_DECL(rt5665_if1_2_45_adc_enum, | 934 | static SOC_ENUM_SINGLE_DECL(rt5665_if1_2_45_adc_enum, |
934 | RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT45_SFT, rt5665_data_select); | 935 | RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT45_SFT, rt5665_data_select); |
935 | 936 | ||
936 | static const SOC_ENUM_SINGLE_DECL(rt5665_if1_2_67_adc_enum, | 937 | static SOC_ENUM_SINGLE_DECL(rt5665_if1_2_67_adc_enum, |
937 | RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT67_SFT, rt5665_data_select); | 938 | RT5665_TDM_CTRL_2, RT5665_I2S1_2_DS_ADC_SLOT67_SFT, rt5665_data_select); |
938 | 939 | ||
939 | static const SOC_ENUM_SINGLE_DECL(rt5665_if2_1_dac_enum, | 940 | static SOC_ENUM_SINGLE_DECL(rt5665_if2_1_dac_enum, |
940 | RT5665_DIG_INF2_DATA, RT5665_IF2_1_DAC_SEL_SFT, rt5665_data_select); | 941 | RT5665_DIG_INF2_DATA, RT5665_IF2_1_DAC_SEL_SFT, rt5665_data_select); |
941 | 942 | ||
942 | static const SOC_ENUM_SINGLE_DECL(rt5665_if2_1_adc_enum, | 943 | static SOC_ENUM_SINGLE_DECL(rt5665_if2_1_adc_enum, |
943 | RT5665_DIG_INF2_DATA, RT5665_IF2_1_ADC_SEL_SFT, rt5665_data_select); | 944 | RT5665_DIG_INF2_DATA, RT5665_IF2_1_ADC_SEL_SFT, rt5665_data_select); |
944 | 945 | ||
945 | static const SOC_ENUM_SINGLE_DECL(rt5665_if2_2_dac_enum, | 946 | static SOC_ENUM_SINGLE_DECL(rt5665_if2_2_dac_enum, |
946 | RT5665_DIG_INF2_DATA, RT5665_IF2_2_DAC_SEL_SFT, rt5665_data_select); | 947 | RT5665_DIG_INF2_DATA, RT5665_IF2_2_DAC_SEL_SFT, rt5665_data_select); |
947 | 948 | ||
948 | static const SOC_ENUM_SINGLE_DECL(rt5665_if2_2_adc_enum, | 949 | static SOC_ENUM_SINGLE_DECL(rt5665_if2_2_adc_enum, |
949 | RT5665_DIG_INF2_DATA, RT5665_IF2_2_ADC_SEL_SFT, rt5665_data_select); | 950 | RT5665_DIG_INF2_DATA, RT5665_IF2_2_ADC_SEL_SFT, rt5665_data_select); |
950 | 951 | ||
951 | static const SOC_ENUM_SINGLE_DECL(rt5665_if3_dac_enum, | 952 | static SOC_ENUM_SINGLE_DECL(rt5665_if3_dac_enum, |
952 | RT5665_DIG_INF3_DATA, RT5665_IF3_DAC_SEL_SFT, rt5665_data_select); | 953 | RT5665_DIG_INF3_DATA, RT5665_IF3_DAC_SEL_SFT, rt5665_data_select); |
953 | 954 | ||
954 | static const SOC_ENUM_SINGLE_DECL(rt5665_if3_adc_enum, | 955 | static SOC_ENUM_SINGLE_DECL(rt5665_if3_adc_enum, |
955 | RT5665_DIG_INF3_DATA, RT5665_IF3_ADC_SEL_SFT, rt5665_data_select); | 956 | RT5665_DIG_INF3_DATA, RT5665_IF3_ADC_SEL_SFT, rt5665_data_select); |
956 | 957 | ||
957 | static const struct snd_kcontrol_new rt5665_if1_1_01_adc_swap_mux = | 958 | static const struct snd_kcontrol_new rt5665_if1_1_01_adc_swap_mux = |
@@ -1305,6 +1306,11 @@ static void rt5665_jack_detect_handler(struct work_struct *work) | |||
1305 | usleep_range(10000, 15000); | 1306 | usleep_range(10000, 15000); |
1306 | } | 1307 | } |
1307 | 1308 | ||
1309 | while (!rt5665->calibration_done) { | ||
1310 | pr_debug("%s calibration not ready\n", __func__); | ||
1311 | usleep_range(10000, 15000); | ||
1312 | } | ||
1313 | |||
1308 | mutex_lock(&rt5665->calibrate_mutex); | 1314 | mutex_lock(&rt5665->calibrate_mutex); |
1309 | 1315 | ||
1310 | val = snd_soc_read(rt5665->codec, RT5665_AJD1_CTRL) & 0x0010; | 1316 | val = snd_soc_read(rt5665->codec, RT5665_AJD1_CTRL) & 0x0010; |
@@ -1819,14 +1825,14 @@ static const char * const rt5665_dac2_src[] = { | |||
1819 | "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC", "Mono ADC MIX" | 1825 | "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC", "Mono ADC MIX" |
1820 | }; | 1826 | }; |
1821 | 1827 | ||
1822 | static const SOC_ENUM_SINGLE_DECL( | 1828 | static SOC_ENUM_SINGLE_DECL( |
1823 | rt5665_dac_l2_enum, RT5665_DAC2_CTRL, | 1829 | rt5665_dac_l2_enum, RT5665_DAC2_CTRL, |
1824 | RT5665_DAC_L2_SEL_SFT, rt5665_dac2_src); | 1830 | RT5665_DAC_L2_SEL_SFT, rt5665_dac2_src); |
1825 | 1831 | ||
1826 | static const struct snd_kcontrol_new rt5665_dac_l2_mux = | 1832 | static const struct snd_kcontrol_new rt5665_dac_l2_mux = |
1827 | SOC_DAPM_ENUM("Digital DAC L2 Source", rt5665_dac_l2_enum); | 1833 | SOC_DAPM_ENUM("Digital DAC L2 Source", rt5665_dac_l2_enum); |
1828 | 1834 | ||
1829 | static const SOC_ENUM_SINGLE_DECL( | 1835 | static SOC_ENUM_SINGLE_DECL( |
1830 | rt5665_dac_r2_enum, RT5665_DAC2_CTRL, | 1836 | rt5665_dac_r2_enum, RT5665_DAC2_CTRL, |
1831 | RT5665_DAC_R2_SEL_SFT, rt5665_dac2_src); | 1837 | RT5665_DAC_R2_SEL_SFT, rt5665_dac2_src); |
1832 | 1838 | ||
@@ -1839,14 +1845,14 @@ static const char * const rt5665_dac3_src[] = { | |||
1839 | "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC", "STO2 ADC MIX" | 1845 | "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC", "STO2 ADC MIX" |
1840 | }; | 1846 | }; |
1841 | 1847 | ||
1842 | static const SOC_ENUM_SINGLE_DECL( | 1848 | static SOC_ENUM_SINGLE_DECL( |
1843 | rt5665_dac_l3_enum, RT5665_DAC3_CTRL, | 1849 | rt5665_dac_l3_enum, RT5665_DAC3_CTRL, |
1844 | RT5665_DAC_L3_SEL_SFT, rt5665_dac3_src); | 1850 | RT5665_DAC_L3_SEL_SFT, rt5665_dac3_src); |
1845 | 1851 | ||
1846 | static const struct snd_kcontrol_new rt5665_dac_l3_mux = | 1852 | static const struct snd_kcontrol_new rt5665_dac_l3_mux = |
1847 | SOC_DAPM_ENUM("Digital DAC L3 Source", rt5665_dac_l3_enum); | 1853 | SOC_DAPM_ENUM("Digital DAC L3 Source", rt5665_dac_l3_enum); |
1848 | 1854 | ||
1849 | static const SOC_ENUM_SINGLE_DECL( | 1855 | static SOC_ENUM_SINGLE_DECL( |
1850 | rt5665_dac_r3_enum, RT5665_DAC3_CTRL, | 1856 | rt5665_dac_r3_enum, RT5665_DAC3_CTRL, |
1851 | RT5665_DAC_R3_SEL_SFT, rt5665_dac3_src); | 1857 | RT5665_DAC_R3_SEL_SFT, rt5665_dac3_src); |
1852 | 1858 | ||
@@ -1859,14 +1865,14 @@ static const char * const rt5665_sto1_adc1_src[] = { | |||
1859 | "DD Mux", "ADC" | 1865 | "DD Mux", "ADC" |
1860 | }; | 1866 | }; |
1861 | 1867 | ||
1862 | static const SOC_ENUM_SINGLE_DECL( | 1868 | static SOC_ENUM_SINGLE_DECL( |
1863 | rt5665_sto1_adc1l_enum, RT5665_STO1_ADC_MIXER, | 1869 | rt5665_sto1_adc1l_enum, RT5665_STO1_ADC_MIXER, |
1864 | RT5665_STO1_ADC1L_SRC_SFT, rt5665_sto1_adc1_src); | 1870 | RT5665_STO1_ADC1L_SRC_SFT, rt5665_sto1_adc1_src); |
1865 | 1871 | ||
1866 | static const struct snd_kcontrol_new rt5665_sto1_adc1l_mux = | 1872 | static const struct snd_kcontrol_new rt5665_sto1_adc1l_mux = |
1867 | SOC_DAPM_ENUM("Stereo1 ADC1L Source", rt5665_sto1_adc1l_enum); | 1873 | SOC_DAPM_ENUM("Stereo1 ADC1L Source", rt5665_sto1_adc1l_enum); |
1868 | 1874 | ||
1869 | static const SOC_ENUM_SINGLE_DECL( | 1875 | static SOC_ENUM_SINGLE_DECL( |
1870 | rt5665_sto1_adc1r_enum, RT5665_STO1_ADC_MIXER, | 1876 | rt5665_sto1_adc1r_enum, RT5665_STO1_ADC_MIXER, |
1871 | RT5665_STO1_ADC1R_SRC_SFT, rt5665_sto1_adc1_src); | 1877 | RT5665_STO1_ADC1R_SRC_SFT, rt5665_sto1_adc1_src); |
1872 | 1878 | ||
@@ -1879,14 +1885,14 @@ static const char * const rt5665_sto1_adc_src[] = { | |||
1879 | "ADC1 L", "ADC1 R", "ADC2 L", "ADC2 R" | 1885 | "ADC1 L", "ADC1 R", "ADC2 L", "ADC2 R" |
1880 | }; | 1886 | }; |
1881 | 1887 | ||
1882 | static const SOC_ENUM_SINGLE_DECL( | 1888 | static SOC_ENUM_SINGLE_DECL( |
1883 | rt5665_sto1_adcl_enum, RT5665_STO1_ADC_MIXER, | 1889 | rt5665_sto1_adcl_enum, RT5665_STO1_ADC_MIXER, |
1884 | RT5665_STO1_ADCL_SRC_SFT, rt5665_sto1_adc_src); | 1890 | RT5665_STO1_ADCL_SRC_SFT, rt5665_sto1_adc_src); |
1885 | 1891 | ||
1886 | static const struct snd_kcontrol_new rt5665_sto1_adcl_mux = | 1892 | static const struct snd_kcontrol_new rt5665_sto1_adcl_mux = |
1887 | SOC_DAPM_ENUM("Stereo1 ADCL Source", rt5665_sto1_adcl_enum); | 1893 | SOC_DAPM_ENUM("Stereo1 ADCL Source", rt5665_sto1_adcl_enum); |
1888 | 1894 | ||
1889 | static const SOC_ENUM_SINGLE_DECL( | 1895 | static SOC_ENUM_SINGLE_DECL( |
1890 | rt5665_sto1_adcr_enum, RT5665_STO1_ADC_MIXER, | 1896 | rt5665_sto1_adcr_enum, RT5665_STO1_ADC_MIXER, |
1891 | RT5665_STO1_ADCR_SRC_SFT, rt5665_sto1_adc_src); | 1897 | RT5665_STO1_ADCR_SRC_SFT, rt5665_sto1_adc_src); |
1892 | 1898 | ||
@@ -1899,14 +1905,14 @@ static const char * const rt5665_sto1_adc2_src[] = { | |||
1899 | "DAC MIX", "DMIC" | 1905 | "DAC MIX", "DMIC" |
1900 | }; | 1906 | }; |
1901 | 1907 | ||
1902 | static const SOC_ENUM_SINGLE_DECL( | 1908 | static SOC_ENUM_SINGLE_DECL( |
1903 | rt5665_sto1_adc2l_enum, RT5665_STO1_ADC_MIXER, | 1909 | rt5665_sto1_adc2l_enum, RT5665_STO1_ADC_MIXER, |
1904 | RT5665_STO1_ADC2L_SRC_SFT, rt5665_sto1_adc2_src); | 1910 | RT5665_STO1_ADC2L_SRC_SFT, rt5665_sto1_adc2_src); |
1905 | 1911 | ||
1906 | static const struct snd_kcontrol_new rt5665_sto1_adc2l_mux = | 1912 | static const struct snd_kcontrol_new rt5665_sto1_adc2l_mux = |
1907 | SOC_DAPM_ENUM("Stereo1 ADC2L Source", rt5665_sto1_adc2l_enum); | 1913 | SOC_DAPM_ENUM("Stereo1 ADC2L Source", rt5665_sto1_adc2l_enum); |
1908 | 1914 | ||
1909 | static const SOC_ENUM_SINGLE_DECL( | 1915 | static SOC_ENUM_SINGLE_DECL( |
1910 | rt5665_sto1_adc2r_enum, RT5665_STO1_ADC_MIXER, | 1916 | rt5665_sto1_adc2r_enum, RT5665_STO1_ADC_MIXER, |
1911 | RT5665_STO1_ADC2R_SRC_SFT, rt5665_sto1_adc2_src); | 1917 | RT5665_STO1_ADC2R_SRC_SFT, rt5665_sto1_adc2_src); |
1912 | 1918 | ||
@@ -1919,7 +1925,7 @@ static const char * const rt5665_sto1_dmic_src[] = { | |||
1919 | "DMIC1", "DMIC2" | 1925 | "DMIC1", "DMIC2" |
1920 | }; | 1926 | }; |
1921 | 1927 | ||
1922 | static const SOC_ENUM_SINGLE_DECL( | 1928 | static SOC_ENUM_SINGLE_DECL( |
1923 | rt5665_sto1_dmic_enum, RT5665_STO1_ADC_MIXER, | 1929 | rt5665_sto1_dmic_enum, RT5665_STO1_ADC_MIXER, |
1924 | RT5665_STO1_DMIC_SRC_SFT, rt5665_sto1_dmic_src); | 1930 | RT5665_STO1_DMIC_SRC_SFT, rt5665_sto1_dmic_src); |
1925 | 1931 | ||
@@ -1931,7 +1937,7 @@ static const char * const rt5665_sto1_dd_l_src[] = { | |||
1931 | "STO2 DAC", "MONO DAC" | 1937 | "STO2 DAC", "MONO DAC" |
1932 | }; | 1938 | }; |
1933 | 1939 | ||
1934 | static const SOC_ENUM_SINGLE_DECL( | 1940 | static SOC_ENUM_SINGLE_DECL( |
1935 | rt5665_sto1_dd_l_enum, RT5665_STO1_ADC_MIXER, | 1941 | rt5665_sto1_dd_l_enum, RT5665_STO1_ADC_MIXER, |
1936 | RT5665_STO1_DD_L_SRC_SFT, rt5665_sto1_dd_l_src); | 1942 | RT5665_STO1_DD_L_SRC_SFT, rt5665_sto1_dd_l_src); |
1937 | 1943 | ||
@@ -1943,7 +1949,7 @@ static const char * const rt5665_sto1_dd_r_src[] = { | |||
1943 | "STO2 DAC", "MONO DAC", "AEC REF" | 1949 | "STO2 DAC", "MONO DAC", "AEC REF" |
1944 | }; | 1950 | }; |
1945 | 1951 | ||
1946 | static const SOC_ENUM_SINGLE_DECL( | 1952 | static SOC_ENUM_SINGLE_DECL( |
1947 | rt5665_sto1_dd_r_enum, RT5665_STO1_ADC_MIXER, | 1953 | rt5665_sto1_dd_r_enum, RT5665_STO1_ADC_MIXER, |
1948 | RT5665_STO1_DD_R_SRC_SFT, rt5665_sto1_dd_r_src); | 1954 | RT5665_STO1_DD_R_SRC_SFT, rt5665_sto1_dd_r_src); |
1949 | 1955 | ||
@@ -1956,7 +1962,7 @@ static const char * const rt5665_mono_adc_l2_src[] = { | |||
1956 | "DAC MIXL", "DMIC" | 1962 | "DAC MIXL", "DMIC" |
1957 | }; | 1963 | }; |
1958 | 1964 | ||
1959 | static const SOC_ENUM_SINGLE_DECL( | 1965 | static SOC_ENUM_SINGLE_DECL( |
1960 | rt5665_mono_adc_l2_enum, RT5665_MONO_ADC_MIXER, | 1966 | rt5665_mono_adc_l2_enum, RT5665_MONO_ADC_MIXER, |
1961 | RT5665_MONO_ADC_L2_SRC_SFT, rt5665_mono_adc_l2_src); | 1967 | RT5665_MONO_ADC_L2_SRC_SFT, rt5665_mono_adc_l2_src); |
1962 | 1968 | ||
@@ -1970,7 +1976,7 @@ static const char * const rt5665_mono_adc_l1_src[] = { | |||
1970 | "DD Mux", "ADC" | 1976 | "DD Mux", "ADC" |
1971 | }; | 1977 | }; |
1972 | 1978 | ||
1973 | static const SOC_ENUM_SINGLE_DECL( | 1979 | static SOC_ENUM_SINGLE_DECL( |
1974 | rt5665_mono_adc_l1_enum, RT5665_MONO_ADC_MIXER, | 1980 | rt5665_mono_adc_l1_enum, RT5665_MONO_ADC_MIXER, |
1975 | RT5665_MONO_ADC_L1_SRC_SFT, rt5665_mono_adc_l1_src); | 1981 | RT5665_MONO_ADC_L1_SRC_SFT, rt5665_mono_adc_l1_src); |
1976 | 1982 | ||
@@ -1982,14 +1988,14 @@ static const char * const rt5665_mono_dd_src[] = { | |||
1982 | "STO2 DAC", "MONO DAC" | 1988 | "STO2 DAC", "MONO DAC" |
1983 | }; | 1989 | }; |
1984 | 1990 | ||
1985 | static const SOC_ENUM_SINGLE_DECL( | 1991 | static SOC_ENUM_SINGLE_DECL( |
1986 | rt5665_mono_dd_l_enum, RT5665_MONO_ADC_MIXER, | 1992 | rt5665_mono_dd_l_enum, RT5665_MONO_ADC_MIXER, |
1987 | RT5665_MONO_DD_L_SRC_SFT, rt5665_mono_dd_src); | 1993 | RT5665_MONO_DD_L_SRC_SFT, rt5665_mono_dd_src); |
1988 | 1994 | ||
1989 | static const struct snd_kcontrol_new rt5665_mono_dd_l_mux = | 1995 | static const struct snd_kcontrol_new rt5665_mono_dd_l_mux = |
1990 | SOC_DAPM_ENUM("Mono DD L Source", rt5665_mono_dd_l_enum); | 1996 | SOC_DAPM_ENUM("Mono DD L Source", rt5665_mono_dd_l_enum); |
1991 | 1997 | ||
1992 | static const SOC_ENUM_SINGLE_DECL( | 1998 | static SOC_ENUM_SINGLE_DECL( |
1993 | rt5665_mono_dd_r_enum, RT5665_MONO_ADC_MIXER, | 1999 | rt5665_mono_dd_r_enum, RT5665_MONO_ADC_MIXER, |
1994 | RT5665_MONO_DD_R_SRC_SFT, rt5665_mono_dd_src); | 2000 | RT5665_MONO_DD_R_SRC_SFT, rt5665_mono_dd_src); |
1995 | 2001 | ||
@@ -2002,14 +2008,14 @@ static const char * const rt5665_mono_adc_src[] = { | |||
2002 | "ADC1 L", "ADC1 R", "ADC2 L", "ADC2 R" | 2008 | "ADC1 L", "ADC1 R", "ADC2 L", "ADC2 R" |
2003 | }; | 2009 | }; |
2004 | 2010 | ||
2005 | static const SOC_ENUM_SINGLE_DECL( | 2011 | static SOC_ENUM_SINGLE_DECL( |
2006 | rt5665_mono_adc_l_enum, RT5665_MONO_ADC_MIXER, | 2012 | rt5665_mono_adc_l_enum, RT5665_MONO_ADC_MIXER, |
2007 | RT5665_MONO_ADC_L_SRC_SFT, rt5665_mono_adc_src); | 2013 | RT5665_MONO_ADC_L_SRC_SFT, rt5665_mono_adc_src); |
2008 | 2014 | ||
2009 | static const struct snd_kcontrol_new rt5665_mono_adc_l_mux = | 2015 | static const struct snd_kcontrol_new rt5665_mono_adc_l_mux = |
2010 | SOC_DAPM_ENUM("Mono ADC L Source", rt5665_mono_adc_l_enum); | 2016 | SOC_DAPM_ENUM("Mono ADC L Source", rt5665_mono_adc_l_enum); |
2011 | 2017 | ||
2012 | static const SOC_ENUM_SINGLE_DECL( | 2018 | static SOC_ENUM_SINGLE_DECL( |
2013 | rt5665_mono_adcr_enum, RT5665_MONO_ADC_MIXER, | 2019 | rt5665_mono_adcr_enum, RT5665_MONO_ADC_MIXER, |
2014 | RT5665_MONO_ADC_R_SRC_SFT, rt5665_mono_adc_src); | 2020 | RT5665_MONO_ADC_R_SRC_SFT, rt5665_mono_adc_src); |
2015 | 2021 | ||
@@ -2022,7 +2028,7 @@ static const char * const rt5665_mono_dmic_l_src[] = { | |||
2022 | "DMIC1 L", "DMIC2 L" | 2028 | "DMIC1 L", "DMIC2 L" |
2023 | }; | 2029 | }; |
2024 | 2030 | ||
2025 | static const SOC_ENUM_SINGLE_DECL( | 2031 | static SOC_ENUM_SINGLE_DECL( |
2026 | rt5665_mono_dmic_l_enum, RT5665_MONO_ADC_MIXER, | 2032 | rt5665_mono_dmic_l_enum, RT5665_MONO_ADC_MIXER, |
2027 | RT5665_MONO_DMIC_L_SRC_SFT, rt5665_mono_dmic_l_src); | 2033 | RT5665_MONO_DMIC_L_SRC_SFT, rt5665_mono_dmic_l_src); |
2028 | 2034 | ||
@@ -2035,7 +2041,7 @@ static const char * const rt5665_mono_adc_r2_src[] = { | |||
2035 | "DAC MIXR", "DMIC" | 2041 | "DAC MIXR", "DMIC" |
2036 | }; | 2042 | }; |
2037 | 2043 | ||
2038 | static const SOC_ENUM_SINGLE_DECL( | 2044 | static SOC_ENUM_SINGLE_DECL( |
2039 | rt5665_mono_adc_r2_enum, RT5665_MONO_ADC_MIXER, | 2045 | rt5665_mono_adc_r2_enum, RT5665_MONO_ADC_MIXER, |
2040 | RT5665_MONO_ADC_R2_SRC_SFT, rt5665_mono_adc_r2_src); | 2046 | RT5665_MONO_ADC_R2_SRC_SFT, rt5665_mono_adc_r2_src); |
2041 | 2047 | ||
@@ -2048,7 +2054,7 @@ static const char * const rt5665_mono_adc_r1_src[] = { | |||
2048 | "DD Mux", "ADC" | 2054 | "DD Mux", "ADC" |
2049 | }; | 2055 | }; |
2050 | 2056 | ||
2051 | static const SOC_ENUM_SINGLE_DECL( | 2057 | static SOC_ENUM_SINGLE_DECL( |
2052 | rt5665_mono_adc_r1_enum, RT5665_MONO_ADC_MIXER, | 2058 | rt5665_mono_adc_r1_enum, RT5665_MONO_ADC_MIXER, |
2053 | RT5665_MONO_ADC_R1_SRC_SFT, rt5665_mono_adc_r1_src); | 2059 | RT5665_MONO_ADC_R1_SRC_SFT, rt5665_mono_adc_r1_src); |
2054 | 2060 | ||
@@ -2061,7 +2067,7 @@ static const char * const rt5665_mono_dmic_r_src[] = { | |||
2061 | "DMIC1 R", "DMIC2 R" | 2067 | "DMIC1 R", "DMIC2 R" |
2062 | }; | 2068 | }; |
2063 | 2069 | ||
2064 | static const SOC_ENUM_SINGLE_DECL( | 2070 | static SOC_ENUM_SINGLE_DECL( |
2065 | rt5665_mono_dmic_r_enum, RT5665_MONO_ADC_MIXER, | 2071 | rt5665_mono_dmic_r_enum, RT5665_MONO_ADC_MIXER, |
2066 | RT5665_MONO_DMIC_R_SRC_SFT, rt5665_mono_dmic_r_src); | 2072 | RT5665_MONO_DMIC_R_SRC_SFT, rt5665_mono_dmic_r_src); |
2067 | 2073 | ||
@@ -2075,14 +2081,14 @@ static const char * const rt5665_sto2_adc1_src[] = { | |||
2075 | "DD Mux", "ADC" | 2081 | "DD Mux", "ADC" |
2076 | }; | 2082 | }; |
2077 | 2083 | ||
2078 | static const SOC_ENUM_SINGLE_DECL( | 2084 | static SOC_ENUM_SINGLE_DECL( |
2079 | rt5665_sto2_adc1l_enum, RT5665_STO2_ADC_MIXER, | 2085 | rt5665_sto2_adc1l_enum, RT5665_STO2_ADC_MIXER, |
2080 | RT5665_STO2_ADC1L_SRC_SFT, rt5665_sto2_adc1_src); | 2086 | RT5665_STO2_ADC1L_SRC_SFT, rt5665_sto2_adc1_src); |
2081 | 2087 | ||
2082 | static const struct snd_kcontrol_new rt5665_sto2_adc1l_mux = | 2088 | static const struct snd_kcontrol_new rt5665_sto2_adc1l_mux = |
2083 | SOC_DAPM_ENUM("Stereo2 ADC1L Source", rt5665_sto2_adc1l_enum); | 2089 | SOC_DAPM_ENUM("Stereo2 ADC1L Source", rt5665_sto2_adc1l_enum); |
2084 | 2090 | ||
2085 | static const SOC_ENUM_SINGLE_DECL( | 2091 | static SOC_ENUM_SINGLE_DECL( |
2086 | rt5665_sto2_adc1r_enum, RT5665_STO2_ADC_MIXER, | 2092 | rt5665_sto2_adc1r_enum, RT5665_STO2_ADC_MIXER, |
2087 | RT5665_STO2_ADC1R_SRC_SFT, rt5665_sto2_adc1_src); | 2093 | RT5665_STO2_ADC1R_SRC_SFT, rt5665_sto2_adc1_src); |
2088 | 2094 | ||
@@ -2095,14 +2101,14 @@ static const char * const rt5665_sto2_adc_src[] = { | |||
2095 | "ADC1 L", "ADC1 R", "ADC2 L" | 2101 | "ADC1 L", "ADC1 R", "ADC2 L" |
2096 | }; | 2102 | }; |
2097 | 2103 | ||
2098 | static const SOC_ENUM_SINGLE_DECL( | 2104 | static SOC_ENUM_SINGLE_DECL( |
2099 | rt5665_sto2_adcl_enum, RT5665_STO2_ADC_MIXER, | 2105 | rt5665_sto2_adcl_enum, RT5665_STO2_ADC_MIXER, |
2100 | RT5665_STO2_ADCL_SRC_SFT, rt5665_sto2_adc_src); | 2106 | RT5665_STO2_ADCL_SRC_SFT, rt5665_sto2_adc_src); |
2101 | 2107 | ||
2102 | static const struct snd_kcontrol_new rt5665_sto2_adcl_mux = | 2108 | static const struct snd_kcontrol_new rt5665_sto2_adcl_mux = |
2103 | SOC_DAPM_ENUM("Stereo2 ADCL Source", rt5665_sto2_adcl_enum); | 2109 | SOC_DAPM_ENUM("Stereo2 ADCL Source", rt5665_sto2_adcl_enum); |
2104 | 2110 | ||
2105 | static const SOC_ENUM_SINGLE_DECL( | 2111 | static SOC_ENUM_SINGLE_DECL( |
2106 | rt5665_sto2_adcr_enum, RT5665_STO2_ADC_MIXER, | 2112 | rt5665_sto2_adcr_enum, RT5665_STO2_ADC_MIXER, |
2107 | RT5665_STO2_ADCR_SRC_SFT, rt5665_sto2_adc_src); | 2113 | RT5665_STO2_ADCR_SRC_SFT, rt5665_sto2_adc_src); |
2108 | 2114 | ||
@@ -2115,14 +2121,14 @@ static const char * const rt5665_sto2_adc2_src[] = { | |||
2115 | "DAC MIX", "DMIC" | 2121 | "DAC MIX", "DMIC" |
2116 | }; | 2122 | }; |
2117 | 2123 | ||
2118 | static const SOC_ENUM_SINGLE_DECL( | 2124 | static SOC_ENUM_SINGLE_DECL( |
2119 | rt5665_sto2_adc2l_enum, RT5665_STO2_ADC_MIXER, | 2125 | rt5665_sto2_adc2l_enum, RT5665_STO2_ADC_MIXER, |
2120 | RT5665_STO2_ADC2L_SRC_SFT, rt5665_sto2_adc2_src); | 2126 | RT5665_STO2_ADC2L_SRC_SFT, rt5665_sto2_adc2_src); |
2121 | 2127 | ||
2122 | static const struct snd_kcontrol_new rt5665_sto2_adc2l_mux = | 2128 | static const struct snd_kcontrol_new rt5665_sto2_adc2l_mux = |
2123 | SOC_DAPM_ENUM("Stereo2 ADC2L Source", rt5665_sto2_adc2l_enum); | 2129 | SOC_DAPM_ENUM("Stereo2 ADC2L Source", rt5665_sto2_adc2l_enum); |
2124 | 2130 | ||
2125 | static const SOC_ENUM_SINGLE_DECL( | 2131 | static SOC_ENUM_SINGLE_DECL( |
2126 | rt5665_sto2_adc2r_enum, RT5665_STO2_ADC_MIXER, | 2132 | rt5665_sto2_adc2r_enum, RT5665_STO2_ADC_MIXER, |
2127 | RT5665_STO2_ADC2R_SRC_SFT, rt5665_sto2_adc2_src); | 2133 | RT5665_STO2_ADC2R_SRC_SFT, rt5665_sto2_adc2_src); |
2128 | 2134 | ||
@@ -2135,7 +2141,7 @@ static const char * const rt5665_sto2_dmic_src[] = { | |||
2135 | "DMIC1", "DMIC2" | 2141 | "DMIC1", "DMIC2" |
2136 | }; | 2142 | }; |
2137 | 2143 | ||
2138 | static const SOC_ENUM_SINGLE_DECL( | 2144 | static SOC_ENUM_SINGLE_DECL( |
2139 | rt5665_sto2_dmic_enum, RT5665_STO2_ADC_MIXER, | 2145 | rt5665_sto2_dmic_enum, RT5665_STO2_ADC_MIXER, |
2140 | RT5665_STO2_DMIC_SRC_SFT, rt5665_sto2_dmic_src); | 2146 | RT5665_STO2_DMIC_SRC_SFT, rt5665_sto2_dmic_src); |
2141 | 2147 | ||
@@ -2147,7 +2153,7 @@ static const char * const rt5665_sto2_dd_l_src[] = { | |||
2147 | "STO2 DAC", "MONO DAC" | 2153 | "STO2 DAC", "MONO DAC" |
2148 | }; | 2154 | }; |
2149 | 2155 | ||
2150 | static const SOC_ENUM_SINGLE_DECL( | 2156 | static SOC_ENUM_SINGLE_DECL( |
2151 | rt5665_sto2_dd_l_enum, RT5665_STO2_ADC_MIXER, | 2157 | rt5665_sto2_dd_l_enum, RT5665_STO2_ADC_MIXER, |
2152 | RT5665_STO2_DD_L_SRC_SFT, rt5665_sto2_dd_l_src); | 2158 | RT5665_STO2_DD_L_SRC_SFT, rt5665_sto2_dd_l_src); |
2153 | 2159 | ||
@@ -2159,7 +2165,7 @@ static const char * const rt5665_sto2_dd_r_src[] = { | |||
2159 | "STO2 DAC", "MONO DAC" | 2165 | "STO2 DAC", "MONO DAC" |
2160 | }; | 2166 | }; |
2161 | 2167 | ||
2162 | static const SOC_ENUM_SINGLE_DECL( | 2168 | static SOC_ENUM_SINGLE_DECL( |
2163 | rt5665_sto2_dd_r_enum, RT5665_STO2_ADC_MIXER, | 2169 | rt5665_sto2_dd_r_enum, RT5665_STO2_ADC_MIXER, |
2164 | RT5665_STO2_DD_R_SRC_SFT, rt5665_sto2_dd_r_src); | 2170 | RT5665_STO2_DD_R_SRC_SFT, rt5665_sto2_dd_r_src); |
2165 | 2171 | ||
@@ -2172,14 +2178,14 @@ static const char * const rt5665_dac1_src[] = { | |||
2172 | "IF1 DAC1", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC" | 2178 | "IF1 DAC1", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC" |
2173 | }; | 2179 | }; |
2174 | 2180 | ||
2175 | static const SOC_ENUM_SINGLE_DECL( | 2181 | static SOC_ENUM_SINGLE_DECL( |
2176 | rt5665_dac_r1_enum, RT5665_AD_DA_MIXER, | 2182 | rt5665_dac_r1_enum, RT5665_AD_DA_MIXER, |
2177 | RT5665_DAC1_R_SEL_SFT, rt5665_dac1_src); | 2183 | RT5665_DAC1_R_SEL_SFT, rt5665_dac1_src); |
2178 | 2184 | ||
2179 | static const struct snd_kcontrol_new rt5665_dac_r1_mux = | 2185 | static const struct snd_kcontrol_new rt5665_dac_r1_mux = |
2180 | SOC_DAPM_ENUM("DAC R1 Source", rt5665_dac_r1_enum); | 2186 | SOC_DAPM_ENUM("DAC R1 Source", rt5665_dac_r1_enum); |
2181 | 2187 | ||
2182 | static const SOC_ENUM_SINGLE_DECL( | 2188 | static SOC_ENUM_SINGLE_DECL( |
2183 | rt5665_dac_l1_enum, RT5665_AD_DA_MIXER, | 2189 | rt5665_dac_l1_enum, RT5665_AD_DA_MIXER, |
2184 | RT5665_DAC1_L_SEL_SFT, rt5665_dac1_src); | 2190 | RT5665_DAC1_L_SEL_SFT, rt5665_dac1_src); |
2185 | 2191 | ||
@@ -2192,14 +2198,14 @@ static const char * const rt5665_dig_dac_mix_src[] = { | |||
2192 | "Stereo1 DAC Mixer", "Stereo2 DAC Mixer", "Mono DAC Mixer" | 2198 | "Stereo1 DAC Mixer", "Stereo2 DAC Mixer", "Mono DAC Mixer" |
2193 | }; | 2199 | }; |
2194 | 2200 | ||
2195 | static const SOC_ENUM_SINGLE_DECL( | 2201 | static SOC_ENUM_SINGLE_DECL( |
2196 | rt5665_dig_dac_mixl_enum, RT5665_A_DAC1_MUX, | 2202 | rt5665_dig_dac_mixl_enum, RT5665_A_DAC1_MUX, |
2197 | RT5665_DAC_MIX_L_SFT, rt5665_dig_dac_mix_src); | 2203 | RT5665_DAC_MIX_L_SFT, rt5665_dig_dac_mix_src); |
2198 | 2204 | ||
2199 | static const struct snd_kcontrol_new rt5665_dig_dac_mixl_mux = | 2205 | static const struct snd_kcontrol_new rt5665_dig_dac_mixl_mux = |
2200 | SOC_DAPM_ENUM("DAC Digital Mixer L Source", rt5665_dig_dac_mixl_enum); | 2206 | SOC_DAPM_ENUM("DAC Digital Mixer L Source", rt5665_dig_dac_mixl_enum); |
2201 | 2207 | ||
2202 | static const SOC_ENUM_SINGLE_DECL( | 2208 | static SOC_ENUM_SINGLE_DECL( |
2203 | rt5665_dig_dac_mixr_enum, RT5665_A_DAC1_MUX, | 2209 | rt5665_dig_dac_mixr_enum, RT5665_A_DAC1_MUX, |
2204 | RT5665_DAC_MIX_R_SFT, rt5665_dig_dac_mix_src); | 2210 | RT5665_DAC_MIX_R_SFT, rt5665_dig_dac_mix_src); |
2205 | 2211 | ||
@@ -2212,14 +2218,14 @@ static const char * const rt5665_alg_dac1_src[] = { | |||
2212 | "Stereo1 DAC Mixer", "DAC1", "DMIC1" | 2218 | "Stereo1 DAC Mixer", "DAC1", "DMIC1" |
2213 | }; | 2219 | }; |
2214 | 2220 | ||
2215 | static const SOC_ENUM_SINGLE_DECL( | 2221 | static SOC_ENUM_SINGLE_DECL( |
2216 | rt5665_alg_dac_l1_enum, RT5665_A_DAC1_MUX, | 2222 | rt5665_alg_dac_l1_enum, RT5665_A_DAC1_MUX, |
2217 | RT5665_A_DACL1_SFT, rt5665_alg_dac1_src); | 2223 | RT5665_A_DACL1_SFT, rt5665_alg_dac1_src); |
2218 | 2224 | ||
2219 | static const struct snd_kcontrol_new rt5665_alg_dac_l1_mux = | 2225 | static const struct snd_kcontrol_new rt5665_alg_dac_l1_mux = |
2220 | SOC_DAPM_ENUM("Analog DAC L1 Source", rt5665_alg_dac_l1_enum); | 2226 | SOC_DAPM_ENUM("Analog DAC L1 Source", rt5665_alg_dac_l1_enum); |
2221 | 2227 | ||
2222 | static const SOC_ENUM_SINGLE_DECL( | 2228 | static SOC_ENUM_SINGLE_DECL( |
2223 | rt5665_alg_dac_r1_enum, RT5665_A_DAC1_MUX, | 2229 | rt5665_alg_dac_r1_enum, RT5665_A_DAC1_MUX, |
2224 | RT5665_A_DACR1_SFT, rt5665_alg_dac1_src); | 2230 | RT5665_A_DACR1_SFT, rt5665_alg_dac1_src); |
2225 | 2231 | ||
@@ -2232,14 +2238,14 @@ static const char * const rt5665_alg_dac2_src[] = { | |||
2232 | "Mono DAC Mixer", "DAC2" | 2238 | "Mono DAC Mixer", "DAC2" |
2233 | }; | 2239 | }; |
2234 | 2240 | ||
2235 | static const SOC_ENUM_SINGLE_DECL( | 2241 | static SOC_ENUM_SINGLE_DECL( |
2236 | rt5665_alg_dac_l2_enum, RT5665_A_DAC2_MUX, | 2242 | rt5665_alg_dac_l2_enum, RT5665_A_DAC2_MUX, |
2237 | RT5665_A_DACL2_SFT, rt5665_alg_dac2_src); | 2243 | RT5665_A_DACL2_SFT, rt5665_alg_dac2_src); |
2238 | 2244 | ||
2239 | static const struct snd_kcontrol_new rt5665_alg_dac_l2_mux = | 2245 | static const struct snd_kcontrol_new rt5665_alg_dac_l2_mux = |
2240 | SOC_DAPM_ENUM("Analog DAC L2 Source", rt5665_alg_dac_l2_enum); | 2246 | SOC_DAPM_ENUM("Analog DAC L2 Source", rt5665_alg_dac_l2_enum); |
2241 | 2247 | ||
2242 | static const SOC_ENUM_SINGLE_DECL( | 2248 | static SOC_ENUM_SINGLE_DECL( |
2243 | rt5665_alg_dac_r2_enum, RT5665_A_DAC2_MUX, | 2249 | rt5665_alg_dac_r2_enum, RT5665_A_DAC2_MUX, |
2244 | RT5665_A_DACR2_SFT, rt5665_alg_dac2_src); | 2250 | RT5665_A_DACR2_SFT, rt5665_alg_dac2_src); |
2245 | 2251 | ||
@@ -2253,7 +2259,7 @@ static const char * const rt5665_if2_1_adc_in_src[] = { | |||
2253 | "IF1 DAC2", "IF2_2 DAC", "IF3 DAC", "DAC1 MIX" | 2259 | "IF1 DAC2", "IF2_2 DAC", "IF3 DAC", "DAC1 MIX" |
2254 | }; | 2260 | }; |
2255 | 2261 | ||
2256 | static const SOC_ENUM_SINGLE_DECL( | 2262 | static SOC_ENUM_SINGLE_DECL( |
2257 | rt5665_if2_1_adc_in_enum, RT5665_DIG_INF2_DATA, | 2263 | rt5665_if2_1_adc_in_enum, RT5665_DIG_INF2_DATA, |
2258 | RT5665_IF2_1_ADC_IN_SFT, rt5665_if2_1_adc_in_src); | 2264 | RT5665_IF2_1_ADC_IN_SFT, rt5665_if2_1_adc_in_src); |
2259 | 2265 | ||
@@ -2266,7 +2272,7 @@ static const char * const rt5665_if2_2_adc_in_src[] = { | |||
2266 | "IF1 DAC2", "IF2_1 DAC", "IF3 DAC", "DAC1 MIX" | 2272 | "IF1 DAC2", "IF2_1 DAC", "IF3 DAC", "DAC1 MIX" |
2267 | }; | 2273 | }; |
2268 | 2274 | ||
2269 | static const SOC_ENUM_SINGLE_DECL( | 2275 | static SOC_ENUM_SINGLE_DECL( |
2270 | rt5665_if2_2_adc_in_enum, RT5665_DIG_INF2_DATA, | 2276 | rt5665_if2_2_adc_in_enum, RT5665_DIG_INF2_DATA, |
2271 | RT5665_IF2_2_ADC_IN_SFT, rt5665_if2_2_adc_in_src); | 2277 | RT5665_IF2_2_ADC_IN_SFT, rt5665_if2_2_adc_in_src); |
2272 | 2278 | ||
@@ -2280,7 +2286,7 @@ static const char * const rt5665_if3_adc_in_src[] = { | |||
2280 | "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "DAC1 MIX" | 2286 | "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "DAC1 MIX" |
2281 | }; | 2287 | }; |
2282 | 2288 | ||
2283 | static const SOC_ENUM_SINGLE_DECL( | 2289 | static SOC_ENUM_SINGLE_DECL( |
2284 | rt5665_if3_adc_in_enum, RT5665_DIG_INF3_DATA, | 2290 | rt5665_if3_adc_in_enum, RT5665_DIG_INF3_DATA, |
2285 | RT5665_IF3_ADC_IN_SFT, rt5665_if3_adc_in_src); | 2291 | RT5665_IF3_ADC_IN_SFT, rt5665_if3_adc_in_src); |
2286 | 2292 | ||
@@ -2293,14 +2299,14 @@ static const char * const rt5665_pdm_src[] = { | |||
2293 | "Stereo1 DAC", "Stereo2 DAC", "Mono DAC" | 2299 | "Stereo1 DAC", "Stereo2 DAC", "Mono DAC" |
2294 | }; | 2300 | }; |
2295 | 2301 | ||
2296 | static const SOC_ENUM_SINGLE_DECL( | 2302 | static SOC_ENUM_SINGLE_DECL( |
2297 | rt5665_pdm_l_enum, RT5665_PDM_OUT_CTRL, | 2303 | rt5665_pdm_l_enum, RT5665_PDM_OUT_CTRL, |
2298 | RT5665_PDM1_L_SFT, rt5665_pdm_src); | 2304 | RT5665_PDM1_L_SFT, rt5665_pdm_src); |
2299 | 2305 | ||
2300 | static const struct snd_kcontrol_new rt5665_pdm_l_mux = | 2306 | static const struct snd_kcontrol_new rt5665_pdm_l_mux = |
2301 | SOC_DAPM_ENUM("PDM L Source", rt5665_pdm_l_enum); | 2307 | SOC_DAPM_ENUM("PDM L Source", rt5665_pdm_l_enum); |
2302 | 2308 | ||
2303 | static const SOC_ENUM_SINGLE_DECL( | 2309 | static SOC_ENUM_SINGLE_DECL( |
2304 | rt5665_pdm_r_enum, RT5665_PDM_OUT_CTRL, | 2310 | rt5665_pdm_r_enum, RT5665_PDM_OUT_CTRL, |
2305 | RT5665_PDM1_R_SFT, rt5665_pdm_src); | 2311 | RT5665_PDM1_R_SFT, rt5665_pdm_src); |
2306 | 2312 | ||
@@ -2314,7 +2320,7 @@ static const char * const rt5665_if1_1_adc1_data_src[] = { | |||
2314 | "STO1 ADC", "IF2_1 DAC", | 2320 | "STO1 ADC", "IF2_1 DAC", |
2315 | }; | 2321 | }; |
2316 | 2322 | ||
2317 | static const SOC_ENUM_SINGLE_DECL( | 2323 | static SOC_ENUM_SINGLE_DECL( |
2318 | rt5665_if1_1_adc1_data_enum, RT5665_TDM_CTRL_3, | 2324 | rt5665_if1_1_adc1_data_enum, RT5665_TDM_CTRL_3, |
2319 | RT5665_IF1_ADC1_SEL_SFT, rt5665_if1_1_adc1_data_src); | 2325 | RT5665_IF1_ADC1_SEL_SFT, rt5665_if1_1_adc1_data_src); |
2320 | 2326 | ||
@@ -2326,7 +2332,7 @@ static const char * const rt5665_if1_1_adc2_data_src[] = { | |||
2326 | "STO2 ADC", "IF2_2 DAC", | 2332 | "STO2 ADC", "IF2_2 DAC", |
2327 | }; | 2333 | }; |
2328 | 2334 | ||
2329 | static const SOC_ENUM_SINGLE_DECL( | 2335 | static SOC_ENUM_SINGLE_DECL( |
2330 | rt5665_if1_1_adc2_data_enum, RT5665_TDM_CTRL_3, | 2336 | rt5665_if1_1_adc2_data_enum, RT5665_TDM_CTRL_3, |
2331 | RT5665_IF1_ADC2_SEL_SFT, rt5665_if1_1_adc2_data_src); | 2337 | RT5665_IF1_ADC2_SEL_SFT, rt5665_if1_1_adc2_data_src); |
2332 | 2338 | ||
@@ -2338,7 +2344,7 @@ static const char * const rt5665_if1_1_adc3_data_src[] = { | |||
2338 | "MONO ADC", "IF3 DAC", | 2344 | "MONO ADC", "IF3 DAC", |
2339 | }; | 2345 | }; |
2340 | 2346 | ||
2341 | static const SOC_ENUM_SINGLE_DECL( | 2347 | static SOC_ENUM_SINGLE_DECL( |
2342 | rt5665_if1_1_adc3_data_enum, RT5665_TDM_CTRL_3, | 2348 | rt5665_if1_1_adc3_data_enum, RT5665_TDM_CTRL_3, |
2343 | RT5665_IF1_ADC3_SEL_SFT, rt5665_if1_1_adc3_data_src); | 2349 | RT5665_IF1_ADC3_SEL_SFT, rt5665_if1_1_adc3_data_src); |
2344 | 2350 | ||
@@ -2350,7 +2356,7 @@ static const char * const rt5665_if1_2_adc1_data_src[] = { | |||
2350 | "STO1 ADC", "IF1 DAC", | 2356 | "STO1 ADC", "IF1 DAC", |
2351 | }; | 2357 | }; |
2352 | 2358 | ||
2353 | static const SOC_ENUM_SINGLE_DECL( | 2359 | static SOC_ENUM_SINGLE_DECL( |
2354 | rt5665_if1_2_adc1_data_enum, RT5665_TDM_CTRL_4, | 2360 | rt5665_if1_2_adc1_data_enum, RT5665_TDM_CTRL_4, |
2355 | RT5665_IF1_ADC1_SEL_SFT, rt5665_if1_2_adc1_data_src); | 2361 | RT5665_IF1_ADC1_SEL_SFT, rt5665_if1_2_adc1_data_src); |
2356 | 2362 | ||
@@ -2362,7 +2368,7 @@ static const char * const rt5665_if1_2_adc2_data_src[] = { | |||
2362 | "STO2 ADC", "IF2_1 DAC", | 2368 | "STO2 ADC", "IF2_1 DAC", |
2363 | }; | 2369 | }; |
2364 | 2370 | ||
2365 | static const SOC_ENUM_SINGLE_DECL( | 2371 | static SOC_ENUM_SINGLE_DECL( |
2366 | rt5665_if1_2_adc2_data_enum, RT5665_TDM_CTRL_4, | 2372 | rt5665_if1_2_adc2_data_enum, RT5665_TDM_CTRL_4, |
2367 | RT5665_IF1_ADC2_SEL_SFT, rt5665_if1_2_adc2_data_src); | 2373 | RT5665_IF1_ADC2_SEL_SFT, rt5665_if1_2_adc2_data_src); |
2368 | 2374 | ||
@@ -2374,7 +2380,7 @@ static const char * const rt5665_if1_2_adc3_data_src[] = { | |||
2374 | "MONO ADC", "IF2_2 DAC", | 2380 | "MONO ADC", "IF2_2 DAC", |
2375 | }; | 2381 | }; |
2376 | 2382 | ||
2377 | static const SOC_ENUM_SINGLE_DECL( | 2383 | static SOC_ENUM_SINGLE_DECL( |
2378 | rt5665_if1_2_adc3_data_enum, RT5665_TDM_CTRL_4, | 2384 | rt5665_if1_2_adc3_data_enum, RT5665_TDM_CTRL_4, |
2379 | RT5665_IF1_ADC3_SEL_SFT, rt5665_if1_2_adc3_data_src); | 2385 | RT5665_IF1_ADC3_SEL_SFT, rt5665_if1_2_adc3_data_src); |
2380 | 2386 | ||
@@ -2386,7 +2392,7 @@ static const char * const rt5665_if1_2_adc4_data_src[] = { | |||
2386 | "DAC1", "IF3 DAC", | 2392 | "DAC1", "IF3 DAC", |
2387 | }; | 2393 | }; |
2388 | 2394 | ||
2389 | static const SOC_ENUM_SINGLE_DECL( | 2395 | static SOC_ENUM_SINGLE_DECL( |
2390 | rt5665_if1_2_adc4_data_enum, RT5665_TDM_CTRL_4, | 2396 | rt5665_if1_2_adc4_data_enum, RT5665_TDM_CTRL_4, |
2391 | RT5665_IF1_ADC4_SEL_SFT, rt5665_if1_2_adc4_data_src); | 2397 | RT5665_IF1_ADC4_SEL_SFT, rt5665_if1_2_adc4_data_src); |
2392 | 2398 | ||
@@ -2401,14 +2407,14 @@ static const char * const rt5665_tdm_adc_data_src[] = { | |||
2401 | "4123", "4132", "4213", "4231", "4312", "4321" | 2407 | "4123", "4132", "4213", "4231", "4312", "4321" |
2402 | }; | 2408 | }; |
2403 | 2409 | ||
2404 | static const SOC_ENUM_SINGLE_DECL( | 2410 | static SOC_ENUM_SINGLE_DECL( |
2405 | rt5665_tdm1_adc_data_enum, RT5665_TDM_CTRL_3, | 2411 | rt5665_tdm1_adc_data_enum, RT5665_TDM_CTRL_3, |
2406 | RT5665_TDM_ADC_SEL_SFT, rt5665_tdm_adc_data_src); | 2412 | RT5665_TDM_ADC_SEL_SFT, rt5665_tdm_adc_data_src); |
2407 | 2413 | ||
2408 | static const struct snd_kcontrol_new rt5665_tdm1_adc_mux = | 2414 | static const struct snd_kcontrol_new rt5665_tdm1_adc_mux = |
2409 | SOC_DAPM_ENUM("TDM1 ADC Mux", rt5665_tdm1_adc_data_enum); | 2415 | SOC_DAPM_ENUM("TDM1 ADC Mux", rt5665_tdm1_adc_data_enum); |
2410 | 2416 | ||
2411 | static const SOC_ENUM_SINGLE_DECL( | 2417 | static SOC_ENUM_SINGLE_DECL( |
2412 | rt5665_tdm2_adc_data_enum, RT5665_TDM_CTRL_4, | 2418 | rt5665_tdm2_adc_data_enum, RT5665_TDM_CTRL_4, |
2413 | RT5665_TDM_ADC_SEL_SFT, rt5665_tdm_adc_data_src); | 2419 | RT5665_TDM_ADC_SEL_SFT, rt5665_tdm_adc_data_src); |
2414 | 2420 | ||
@@ -2607,7 +2613,7 @@ static int rt5665_i2s_pin_event(struct snd_soc_dapm_widget *w, | |||
2607 | struct snd_kcontrol *kcontrol, int event) | 2613 | struct snd_kcontrol *kcontrol, int event) |
2608 | { | 2614 | { |
2609 | struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); | 2615 | struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); |
2610 | unsigned int val1, val2, mask1, mask2 = 0; | 2616 | unsigned int val1, val2, mask1 = 0, mask2 = 0; |
2611 | 2617 | ||
2612 | switch (w->shift) { | 2618 | switch (w->shift) { |
2613 | case RT5665_PWR_I2S2_1_BIT: | 2619 | case RT5665_PWR_I2S2_1_BIT: |
@@ -2635,13 +2641,17 @@ static int rt5665_i2s_pin_event(struct snd_soc_dapm_widget *w, | |||
2635 | } | 2641 | } |
2636 | switch (event) { | 2642 | switch (event) { |
2637 | case SND_SOC_DAPM_PRE_PMU: | 2643 | case SND_SOC_DAPM_PRE_PMU: |
2638 | snd_soc_update_bits(codec, RT5665_GPIO_CTRL_1, mask1, val1); | 2644 | if (mask1) |
2645 | snd_soc_update_bits(codec, RT5665_GPIO_CTRL_1, | ||
2646 | mask1, val1); | ||
2639 | if (mask2) | 2647 | if (mask2) |
2640 | snd_soc_update_bits(codec, RT5665_GPIO_CTRL_2, | 2648 | snd_soc_update_bits(codec, RT5665_GPIO_CTRL_2, |
2641 | mask2, val2); | 2649 | mask2, val2); |
2642 | break; | 2650 | break; |
2643 | case SND_SOC_DAPM_POST_PMD: | 2651 | case SND_SOC_DAPM_POST_PMD: |
2644 | snd_soc_update_bits(codec, RT5665_GPIO_CTRL_1, mask1, 0); | 2652 | if (mask1) |
2653 | snd_soc_update_bits(codec, RT5665_GPIO_CTRL_1, | ||
2654 | mask1, 0); | ||
2645 | if (mask2) | 2655 | if (mask2) |
2646 | snd_soc_update_bits(codec, RT5665_GPIO_CTRL_2, | 2656 | snd_soc_update_bits(codec, RT5665_GPIO_CTRL_2, |
2647 | mask2, 0); | 2657 | mask2, 0); |
@@ -2684,6 +2694,8 @@ static const struct snd_soc_dapm_widget rt5665_dapm_widgets[] = { | |||
2684 | RT5665_DAC_MONO_R_ASRC_SFT, 0, NULL, 0), | 2694 | RT5665_DAC_MONO_R_ASRC_SFT, 0, NULL, 0), |
2685 | SND_SOC_DAPM_SUPPLY_S("ADC STO1 ASRC", 1, RT5665_ASRC_1, | 2695 | SND_SOC_DAPM_SUPPLY_S("ADC STO1 ASRC", 1, RT5665_ASRC_1, |
2686 | RT5665_ADC_STO1_ASRC_SFT, 0, NULL, 0), | 2696 | RT5665_ADC_STO1_ASRC_SFT, 0, NULL, 0), |
2697 | SND_SOC_DAPM_SUPPLY_S("ADC STO2 ASRC", 1, RT5665_ASRC_1, | ||
2698 | RT5665_ADC_STO2_ASRC_SFT, 0, NULL, 0), | ||
2687 | SND_SOC_DAPM_SUPPLY_S("ADC Mono L ASRC", 1, RT5665_ASRC_1, | 2699 | SND_SOC_DAPM_SUPPLY_S("ADC Mono L ASRC", 1, RT5665_ASRC_1, |
2688 | RT5665_ADC_MONO_L_ASRC_SFT, 0, NULL, 0), | 2700 | RT5665_ADC_MONO_L_ASRC_SFT, 0, NULL, 0), |
2689 | SND_SOC_DAPM_SUPPLY_S("ADC Mono R ASRC", 1, RT5665_ASRC_1, | 2701 | SND_SOC_DAPM_SUPPLY_S("ADC Mono R ASRC", 1, RT5665_ASRC_1, |
@@ -3227,6 +3239,7 @@ static const struct snd_soc_dapm_route rt5665_dapm_routes[] = { | |||
3227 | 3239 | ||
3228 | /*ASRC*/ | 3240 | /*ASRC*/ |
3229 | {"ADC Stereo1 Filter", NULL, "ADC STO1 ASRC", is_using_asrc}, | 3241 | {"ADC Stereo1 Filter", NULL, "ADC STO1 ASRC", is_using_asrc}, |
3242 | {"ADC Stereo2 Filter", NULL, "ADC STO2 ASRC", is_using_asrc}, | ||
3230 | {"ADC Mono Left Filter", NULL, "ADC Mono L ASRC", is_using_asrc}, | 3243 | {"ADC Mono Left Filter", NULL, "ADC Mono L ASRC", is_using_asrc}, |
3231 | {"ADC Mono Right Filter", NULL, "ADC Mono R ASRC", is_using_asrc}, | 3244 | {"ADC Mono Right Filter", NULL, "ADC Mono R ASRC", is_using_asrc}, |
3232 | {"DAC Mono Left Filter", NULL, "DAC Mono L ASRC", is_using_asrc}, | 3245 | {"DAC Mono Left Filter", NULL, "DAC Mono L ASRC", is_using_asrc}, |
@@ -4688,6 +4701,7 @@ static void rt5665_calibrate(struct rt5665_priv *rt5665) | |||
4688 | regmap_write(rt5665->regmap, RT5665_ASRC_8, 0x0120); | 4701 | regmap_write(rt5665->regmap, RT5665_ASRC_8, 0x0120); |
4689 | 4702 | ||
4690 | out_unlock: | 4703 | out_unlock: |
4704 | rt5665->calibration_done = true; | ||
4691 | mutex_unlock(&rt5665->calibrate_mutex); | 4705 | mutex_unlock(&rt5665->calibrate_mutex); |
4692 | } | 4706 | } |
4693 | 4707 | ||
@@ -4922,7 +4936,7 @@ static struct acpi_device_id rt5665_acpi_match[] = { | |||
4922 | MODULE_DEVICE_TABLE(acpi, rt5665_acpi_match); | 4936 | MODULE_DEVICE_TABLE(acpi, rt5665_acpi_match); |
4923 | #endif | 4937 | #endif |
4924 | 4938 | ||
4925 | struct i2c_driver rt5665_i2c_driver = { | 4939 | static struct i2c_driver rt5665_i2c_driver = { |
4926 | .driver = { | 4940 | .driver = { |
4927 | .name = "rt5665", | 4941 | .name = "rt5665", |
4928 | .of_match_table = of_match_ptr(rt5665_of_match), | 4942 | .of_match_table = of_match_ptr(rt5665_of_match), |