Lines Matching +full:adc +full:- +full:use +full:- +full:external +full:- +full:triggers

1 // SPDX-License-Identifier: GPL-2.0-only
3 * rt5677.c -- RT5677 ALSA SoC audio codec driver
29 #include <sound/soc-dapm.h>
35 #include "rt5677-spi.h"
552 * rt5677_dsp_mode_i2c_write_addr - Write value to address on DSP mode.
563 struct snd_soc_component *component = rt5677->component; in rt5677_dsp_mode_i2c_write_addr()
566 mutex_lock(&rt5677->dsp_cmd_lock); in rt5677_dsp_mode_i2c_write_addr()
568 ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_ADDR_MSB, in rt5677_dsp_mode_i2c_write_addr()
571 dev_err(component->dev, "Failed to set addr msb value: %d\n", ret); in rt5677_dsp_mode_i2c_write_addr()
575 ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_ADDR_LSB, in rt5677_dsp_mode_i2c_write_addr()
578 dev_err(component->dev, "Failed to set addr lsb value: %d\n", ret); in rt5677_dsp_mode_i2c_write_addr()
582 ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_DATA_MSB, in rt5677_dsp_mode_i2c_write_addr()
585 dev_err(component->dev, "Failed to set data msb value: %d\n", ret); in rt5677_dsp_mode_i2c_write_addr()
589 ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_DATA_LSB, in rt5677_dsp_mode_i2c_write_addr()
592 dev_err(component->dev, "Failed to set data lsb value: %d\n", ret); in rt5677_dsp_mode_i2c_write_addr()
596 ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_OP_CODE, in rt5677_dsp_mode_i2c_write_addr()
599 dev_err(component->dev, "Failed to set op code value: %d\n", ret); in rt5677_dsp_mode_i2c_write_addr()
604 mutex_unlock(&rt5677->dsp_cmd_lock); in rt5677_dsp_mode_i2c_write_addr()
610 * rt5677_dsp_mode_i2c_read_addr - Read value from address on DSP mode.
621 struct snd_soc_component *component = rt5677->component; in rt5677_dsp_mode_i2c_read_addr()
625 mutex_lock(&rt5677->dsp_cmd_lock); in rt5677_dsp_mode_i2c_read_addr()
627 ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_ADDR_MSB, in rt5677_dsp_mode_i2c_read_addr()
630 dev_err(component->dev, "Failed to set addr msb value: %d\n", ret); in rt5677_dsp_mode_i2c_read_addr()
634 ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_ADDR_LSB, in rt5677_dsp_mode_i2c_read_addr()
637 dev_err(component->dev, "Failed to set addr lsb value: %d\n", ret); in rt5677_dsp_mode_i2c_read_addr()
641 ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_OP_CODE, in rt5677_dsp_mode_i2c_read_addr()
644 dev_err(component->dev, "Failed to set op code value: %d\n", ret); in rt5677_dsp_mode_i2c_read_addr()
648 regmap_read(rt5677->regmap_physical, RT5677_DSP_I2C_DATA_MSB, &msb); in rt5677_dsp_mode_i2c_read_addr()
649 regmap_read(rt5677->regmap_physical, RT5677_DSP_I2C_DATA_LSB, &lsb); in rt5677_dsp_mode_i2c_read_addr()
653 mutex_unlock(&rt5677->dsp_cmd_lock); in rt5677_dsp_mode_i2c_read_addr()
659 * rt5677_dsp_mode_i2c_write - Write register on DSP mode.
675 * rt5677_dsp_mode_i2c_read - Read register on DSP mode.
697 regmap_update_bits(rt5677->regmap, RT5677_PWR_DSP1, in rt5677_set_dsp_mode()
699 rt5677->is_dsp_mode = true; in rt5677_set_dsp_mode()
701 regmap_update_bits(rt5677->regmap, RT5677_PWR_DSP1, in rt5677_set_dsp_mode()
703 rt5677->is_dsp_mode = false; in rt5677_set_dsp_mode()
710 snd_soc_component_get_dapm(rt5677->component); in rt5677_set_vad_source()
719 regmap_update_bits(rt5677->regmap, RT5677_DMIC_CTRL1, in rt5677_set_vad_source()
723 regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1, in rt5677_set_vad_source()
727 regmap_write(rt5677->regmap, RT5677_GLB_CLK2, in rt5677_set_vad_source()
731 regmap_write(rt5677->regmap, RT5677_VAD_CTRL2, 0x013f); in rt5677_set_vad_source()
733 regmap_write(rt5677->regmap, RT5677_VAD_CTRL3, 0x0ae5); in rt5677_set_vad_source()
738 regmap_update_bits(rt5677->regmap, RT5677_VAD_CTRL4, in rt5677_set_vad_source()
741 /* Minimum frame level within a pre-determined duration = 32 frames in rt5677_set_vad_source()
744 * SAD Buffer Over-Writing = enable in rt5677_set_vad_source()
751 regmap_write(rt5677->regmap, RT5677_VAD_CTRL1, in rt5677_set_vad_source()
757 /* VAD/SAD is not routed to the IRQ output (i.e. MX-BE[14] = 0), but it in rt5677_set_vad_source()
758 * is routed to DSP_IRQ_0, so DSP firmware may use it to sleep and save in rt5677_set_vad_source()
764 regmap_update_bits(rt5677->regmap, RT5677_PR_BASE + RT5677_BIAS_CUR4, in rt5677_set_vad_source()
770 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG1, in rt5677_set_vad_source()
777 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2, in rt5677_set_vad_source()
787 regmap_write(rt5677->regmap, RT5677_PWR_DSP2, in rt5677_set_vad_source()
800 regmap_write(rt5677->regmap, RT5677_PWR_DSP1, in rt5677_set_vad_source()
814 struct snd_soc_component *component = rt5677->component; in rt5677_parse_and_load_dsp()
821 return -ENOMEM; in rt5677_parse_and_load_dsp()
827 if (strncmp(elf_hdr->e_ident, ELFMAG, sizeof(ELFMAG) - 1)) in rt5677_parse_and_load_dsp()
828 dev_err(component->dev, "Wrong ELF header prefix\n"); in rt5677_parse_and_load_dsp()
829 if (elf_hdr->e_ehsize != sizeof(Elf32_Ehdr)) in rt5677_parse_and_load_dsp()
830 dev_err(component->dev, "Wrong ELF header size\n"); in rt5677_parse_and_load_dsp()
831 if (elf_hdr->e_machine != EM_XTENSA) in rt5677_parse_and_load_dsp()
832 dev_err(component->dev, "Wrong DSP code file\n"); in rt5677_parse_and_load_dsp()
834 if (len < elf_hdr->e_phoff) in rt5677_parse_and_load_dsp()
835 return -ENOMEM; in rt5677_parse_and_load_dsp()
836 pr_hdr = (Elf32_Phdr *)(buf + elf_hdr->e_phoff); in rt5677_parse_and_load_dsp()
837 for (i = 0; i < elf_hdr->e_phnum; i++) { in rt5677_parse_and_load_dsp()
839 if (pr_hdr->p_paddr && pr_hdr->p_filesz) { in rt5677_parse_and_load_dsp()
840 dev_info(component->dev, "Load 0x%x bytes to 0x%x\n", in rt5677_parse_and_load_dsp()
841 pr_hdr->p_filesz, pr_hdr->p_paddr); in rt5677_parse_and_load_dsp()
843 ret = rt5677_spi_write(pr_hdr->p_paddr, in rt5677_parse_and_load_dsp()
844 buf + pr_hdr->p_offset, in rt5677_parse_and_load_dsp()
845 pr_hdr->p_filesz); in rt5677_parse_and_load_dsp()
847 dev_err(component->dev, "Load firmware failed %d\n", in rt5677_parse_and_load_dsp()
858 struct device *dev = rt5677->component->dev; in rt5677_load_dsp_from_file()
867 dev_info(dev, "Requested rt5677_elf_vad (%zu)\n", fwp->size); in rt5677_load_dsp_from_file()
869 ret = rt5677_parse_and_load_dsp(rt5677, fwp->data, fwp->size); in rt5677_load_dsp_from_file()
877 rt5677->dsp_vad_en_request = on; in rt5677_set_dsp_vad()
878 rt5677->dsp_vad_en = on; in rt5677_set_dsp_vad()
881 return -ENXIO; in rt5677_set_dsp_vad()
883 schedule_delayed_work(&rt5677->dsp_work, 0); in rt5677_set_dsp_vad()
892 bool enable = rt5677->dsp_vad_en; in rt5677_dsp_work()
896 dev_info(rt5677->component->dev, "DSP VAD: enable=%d, activity=%d\n", in rt5677_dsp_work()
917 regmap_read(rt5677->regmap, RT5677_PWR_DSP_ST, &val); in rt5677_dsp_work()
923 dev_err(rt5677->component->dev, "DSP Boot Timed Out!"); in rt5677_dsp_work()
938 regmap_update_bits(rt5677->regmap, RT5677_PWR_DSP1, in rt5677_dsp_work()
944 mutex_lock(&rt5677->irq_lock); in rt5677_dsp_work()
946 regmap_update_bits(rt5677->regmap, RT5677_PWR_DSP1, in rt5677_dsp_work()
952 regmap_write(rt5677->regmap, RT5677_VAD_CTRL1, 0x2184); in rt5677_dsp_work()
955 regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL1, in rt5677_dsp_work()
958 mutex_unlock(&rt5677->irq_lock); in rt5677_dsp_work()
962 static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -6525, 75, 0);
963 static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -1725, 75, 0);
965 static const DECLARE_TLV_DB_SCALE(st_vol_tlv, -4650, 150, 0);
984 ucontrol->value.integer.value[0] = rt5677->dsp_vad_en_request; in rt5677_dsp_vad_get()
994 rt5677_set_dsp_vad(component, !!ucontrol->value.integer.value[0]); in rt5677_dsp_vad_put()
1022 /* ADC Digital Volume Control */
1031 SOC_DOUBLE("Mono ADC Capture Switch", RT5677_MONO_ADC_DIG_VOL,
1046 SOC_DOUBLE_TLV("Mono ADC Capture Volume", RT5677_MONO_ADC_DIG_VOL,
1054 /* ADC Boost Volume Control */
1055 SOC_DOUBLE_TLV("STO1 ADC Boost Volume", RT5677_STO1_2_ADC_BST,
1058 SOC_DOUBLE_TLV("STO2 ADC Boost Volume", RT5677_STO1_2_ADC_BST,
1061 SOC_DOUBLE_TLV("STO3 ADC Boost Volume", RT5677_STO3_4_ADC_BST,
1064 SOC_DOUBLE_TLV("STO4 ADC Boost Volume", RT5677_STO3_4_ADC_BST,
1067 SOC_DOUBLE_TLV("Mono ADC Boost Volume", RT5677_ADC_BST_CTRL2,
1076 * set_dmic_clk - Set parameter of dmic.
1088 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in set_dmic_clk()
1092 rate = rt5677->sysclk / rl6231_get_pre_div(rt5677->regmap, in set_dmic_clk()
1096 dev_err(component->dev, "Failed to set DMIC clock\n"); in set_dmic_clk()
1098 regmap_update_bits(rt5677->regmap, RT5677_DMIC_CTRL1, in set_dmic_clk()
1106 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm); in is_sys_clk_from_pll()
1110 regmap_read(rt5677->regmap, RT5677_GLB_CLK1, &val); in is_sys_clk_from_pll()
1121 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm); in is_using_asrc()
1125 if (source->reg == RT5677_ASRC_1) { in is_using_asrc()
1126 switch (source->shift) { in is_using_asrc()
1147 switch (source->shift) { in is_using_asrc()
1189 regmap_read(rt5677->regmap, reg, &val); in is_using_asrc()
1204 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm); in can_use_asrc()
1207 if (rt5677->sysclk > rt5677->lrck[RT5677_AIF1] * 384) in can_use_asrc()
1214 * rt5677_sel_asrc_clk_src - select ASRC clock source for a set of filters
1255 return -EINVAL; in rt5677_sel_asrc_clk_src()
1278 regmap_update_bits(rt5677->regmap, RT5677_ASRC_3, asrc3_mask, in rt5677_sel_asrc_clk_src()
1307 regmap_update_bits(rt5677->regmap, RT5677_ASRC_4, asrc4_mask, in rt5677_sel_asrc_clk_src()
1336 regmap_update_bits(rt5677->regmap, RT5677_ASRC_5, asrc5_mask, in rt5677_sel_asrc_clk_src()
1353 regmap_update_bits(rt5677->regmap, RT5677_ASRC_6, asrc6_mask, in rt5677_sel_asrc_clk_src()
1370 regmap_update_bits(rt5677->regmap, RT5677_ASRC_7, asrc7_mask, in rt5677_sel_asrc_clk_src()
1377 | ((clk_src - 1) << RT5677_I2S1_CLK_SEL_SFT); in rt5677_sel_asrc_clk_src()
1383 | ((clk_src - 1) << RT5677_I2S2_CLK_SEL_SFT); in rt5677_sel_asrc_clk_src()
1389 | ((clk_src - 1) << RT5677_I2S3_CLK_SEL_SFT); in rt5677_sel_asrc_clk_src()
1395 | ((clk_src - 1) << RT5677_I2S4_CLK_SEL_SFT); in rt5677_sel_asrc_clk_src()
1399 regmap_update_bits(rt5677->regmap, RT5677_ASRC_8, asrc8_mask, in rt5677_sel_asrc_clk_src()
1409 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm); in rt5677_dmic_use_asrc()
1413 switch (source->shift) { in rt5677_dmic_use_asrc()
1415 regmap_read(rt5677->regmap, RT5677_ASRC_5, &asrc_setting); in rt5677_dmic_use_asrc()
1421 regmap_read(rt5677->regmap, RT5677_ASRC_5, &asrc_setting); in rt5677_dmic_use_asrc()
1427 regmap_read(rt5677->regmap, RT5677_ASRC_5, &asrc_setting); in rt5677_dmic_use_asrc()
1433 regmap_read(rt5677->regmap, RT5677_ASRC_5, &asrc_setting); in rt5677_dmic_use_asrc()
1439 regmap_read(rt5677->regmap, RT5677_ASRC_6, &asrc_setting); in rt5677_dmic_use_asrc()
1445 regmap_read(rt5677->regmap, RT5677_ASRC_6, &asrc_setting); in rt5677_dmic_use_asrc()
1533 SOC_DAPM_SINGLE("Stereo ADC Switch", RT5677_ADC_IF_DSP_DAC1_MIXER,
1540 SOC_DAPM_SINGLE("Stereo ADC Switch", RT5677_ADC_IF_DSP_DAC1_MIXER,
1738 /* DAC1 L/R Source */ /* MX-29 [10:8] */
1751 /* ADDA1 L/R Source */ /* MX-29 [1:0] */
1753 "STO1 ADC MIX", "STO2 ADC MIX", "OB 67",
1764 /*DAC2 L/R Source*/ /* MX-1B [6:4] [2:0] */
1779 "OB 3", "Haptic Generator", "VAD ADC"
1789 /*DAC3 L/R Source*/ /* MX-16 [6:4] [2:0] */
1814 /*DAC4 L/R Source*/ /* MX-16 [14:12] [10:8] */
1839 /* In/OutBound Source Pass SRC */ /* MX-A5 [3] [4] [0] [1] [2] */
1879 /* Stereo ADC Source 2 */ /* MX-27 MX26 MX25 [11:10] */
1905 /* DMIC Source */ /* MX-28 [9:8][1:0] MX-27 MX-26 MX-25 MX-24 [9:8] */
1952 /* Stereo2 ADC Source */ /* MX-26 [0] */
1962 SOC_DAPM_ENUM("Stereo2 ADC LR Source", rt5677_stereo2_adc_lr_enum);
1964 /* Stereo1 ADC Source 1 */ /* MX-27 MX26 MX25 [13:12] */
1990 /* Mono ADC Left Source 2 */ /* MX-28 [11:10] */
2002 /* Mono ADC Left Source 1 */ /* MX-28 [13:12] */
2014 /* Mono ADC Right Source 2 */ /* MX-28 [3:2] */
2026 /* Mono ADC Right Source 1 */ /* MX-28 [5:4] */
2038 /* Stereo4 ADC Source 2 */ /* MX-24 [11:10] */
2051 /* Stereo4 ADC Source 1 */ /* MX-24 [13:12] */
2063 /* InBound0/1 Source */ /* MX-A3 [14:12] */
2065 "IF1 DAC 01", "IF2 DAC 01", "SLB DAC 01", "STO1 ADC MIX",
2066 "VAD ADC/DAC1 FS"
2076 /* InBound2/3 Source */ /* MX-A3 [10:8] */
2078 "IF1 DAC 23", "IF2 DAC 23", "SLB DAC 23", "STO2 ADC MIX",
2089 /* InBound4/5 Source */ /* MX-A3 [6:4] */
2091 "IF1 DAC 45", "IF2 DAC 45", "SLB DAC 45", "STO3 ADC MIX",
2102 /* InBound6 Source */ /* MX-A3 [2:0] */
2104 "IF1 DAC 6", "IF2 DAC 6", "SLB DAC 6", "STO4 ADC MIX L",
2105 "IF4 DAC L", "STO1 ADC MIX L", "STO2 ADC MIX L", "STO3 ADC MIX L"
2115 /* InBound7 Source */ /* MX-A4 [14:12] */
2117 "IF1 DAC 7", "IF2 DAC 7", "SLB DAC 7", "STO4 ADC MIX R",
2118 "IF4 DAC R", "STO1 ADC MIX R", "STO2 ADC MIX R", "STO3 ADC MIX R"
2128 /* InBound8 Source */ /* MX-A4 [10:8] */
2130 "STO1 ADC MIX L", "STO2 ADC MIX L", "STO3 ADC MIX L", "STO4 ADC MIX L",
2131 "MONO ADC MIX L", "DACL1 FS"
2141 /* InBound9 Source */ /* MX-A4 [6:4] */
2143 "STO1 ADC MIX R", "STO2 ADC MIX R", "STO3 ADC MIX R", "STO4 ADC MIX R",
2144 "MONO ADC MIX R", "DACR1 FS", "DAC1 FS"
2154 /* VAD Source */ /* MX-9F [6:4] */
2156 "STO1 ADC MIX L", "MONO ADC MIX L", "MONO ADC MIX R", "STO2 ADC MIX L",
2157 "STO3 ADC MIX L"
2167 /* Sidetone Source */ /* MX-13 [11:9] */
2179 /* DAC1/2 Source */ /* MX-15 [1:0] */
2191 /* DAC3 Source */ /* MX-15 [5:4] */
2203 /* PDM channel Source */ /* MX-31 [13:12][9:8][5:4][1:0] */
2236 /* TDM IF1/2 SLB ADC1 Data Selection */ /* MX-3C MX-41 [5:4] MX-08 [1:0] */
2238 "STO1 ADC MIX", "OB01", "VAD ADC"
2262 /* TDM IF1/2 SLB ADC2 Data Selection */ /* MX-3C MX-41 [7:6] MX-08 [3:2] */
2264 "STO2 ADC MIX", "OB23"
2288 /* TDM IF1/2 SLB ADC3 Data Selection */ /* MX-3C MX-41 [9:8] MX-08 [5:4] */
2290 "STO3 ADC MIX", "MONO ADC MIX", "OB45"
2314 /* TDM IF1/2 SLB ADC4 Data Selection */ /* MX-3C MX-41 [11:10] MX-08 [7:6] */
2316 "STO4 ADC MIX", "OB67", "OB01"
2340 /* Interface3/4 ADC Data Input */ /* MX-2F [3:0] MX-30 [7:4] */
2342 "STO1 ADC MIX", "STO2 ADC MIX", "STO3 ADC MIX", "STO4 ADC MIX",
2343 "MONO ADC MIX", "OB01", "OB23", "VAD ADC"
2351 SOC_DAPM_ENUM("IF3 ADC Source", rt5677_if3_adc_enum);
2358 SOC_DAPM_ENUM("IF4 ADC Source", rt5677_if4_adc_enum);
2360 /* TDM IF1/2 ADC Data Selection */ /* MX-3B MX-40 [7:6][5:4][3:2][1:0] */
2421 /* TDM IF1 ADC Data Selection */ /* MX-3C [2:0] */
2432 SOC_DAPM_ENUM("IF1 ADC TDM Swap Source", rt5677_if1_adc_tdm_swap_enum);
2434 /* TDM IF2 ADC Data Selection */ /* MX-41[2:0] */
2445 SOC_DAPM_ENUM("IF2 ADC TDM Swap Source", rt5677_if2_adc_tdm_swap_enum);
2447 /* TDM IF1/2 DAC Data Selection */ /* MX-3E[14:12][10:8][6:4][2:0]
2448 MX-3F[14:12][10:8][6:4][2:0]
2449 MX-43[14:12][10:8][6:4][2:0]
2450 MX-44[14:12][10:8][6:4][2:0] */
2570 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5677_bst1_event()
2575 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2, in rt5677_bst1_event()
2580 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2, in rt5677_bst1_event()
2594 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5677_bst2_event()
2599 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2, in rt5677_bst2_event()
2604 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2, in rt5677_bst2_event()
2618 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5677_set_pll1_event()
2623 regmap_update_bits(rt5677->regmap, RT5677_PLL1_CTRL2, 0x2, 0x2); in rt5677_set_pll1_event()
2627 regmap_update_bits(rt5677->regmap, RT5677_PLL1_CTRL2, 0x2, 0x0); in rt5677_set_pll1_event()
2640 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5677_set_pll2_event()
2645 regmap_update_bits(rt5677->regmap, RT5677_PLL2_CTRL2, 0x2, 0x2); in rt5677_set_pll2_event()
2649 regmap_update_bits(rt5677->regmap, RT5677_PLL2_CTRL2, 0x2, 0x0); in rt5677_set_pll2_event()
2662 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5677_set_micbias1_event()
2667 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2, in rt5677_set_micbias1_event()
2674 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2, in rt5677_set_micbias1_event()
2689 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5677_if1_adc_tdm_event()
2695 regmap_read(rt5677->regmap, RT5677_TDM1_CTRL2, &value); in rt5677_if1_adc_tdm_event()
2697 regmap_update_bits(rt5677->regmap, RT5677_TDM1_CTRL1, in rt5677_if1_adc_tdm_event()
2712 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5677_if2_adc_tdm_event()
2718 regmap_read(rt5677->regmap, RT5677_TDM2_CTRL2, &value); in rt5677_if2_adc_tdm_event()
2720 regmap_update_bits(rt5677->regmap, RT5677_TDM2_CTRL1, in rt5677_if2_adc_tdm_event()
2735 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5677_vref_event()
2741 !rt5677->is_vref_slow) { in rt5677_vref_event()
2743 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG1, in rt5677_vref_event()
2746 rt5677->is_vref_slow = true; in rt5677_vref_event()
2811 SND_SOC_DAPM_SUPPLY_S("ADC STO1 ASRC", 1, RT5677_ASRC_2, 5, 0, NULL, 0),
2812 SND_SOC_DAPM_SUPPLY_S("ADC STO2 ASRC", 1, RT5677_ASRC_2, 4, 0, NULL, 0),
2813 SND_SOC_DAPM_SUPPLY_S("ADC STO3 ASRC", 1, RT5677_ASRC_2, 3, 0, NULL, 0),
2814 SND_SOC_DAPM_SUPPLY_S("ADC STO4 ASRC", 1, RT5677_ASRC_2, 2, 0, NULL, 0),
2815 SND_SOC_DAPM_SUPPLY_S("ADC MONO L ASRC", 1, RT5677_ASRC_2, 1, 0, NULL,
2817 SND_SOC_DAPM_SUPPLY_S("ADC MONO R ASRC", 1, RT5677_ASRC_2, 0, 0, NULL,
2869 SND_SOC_DAPM_ADC("ADC 1", NULL, SND_SOC_NOPM,
2871 SND_SOC_DAPM_ADC("ADC 2", NULL, SND_SOC_NOPM,
2873 SND_SOC_DAPM_PGA("ADC 1_2", SND_SOC_NOPM, 0, 0, NULL, 0),
2875 SND_SOC_DAPM_SUPPLY("ADC 1 power", RT5677_PWR_DIG1,
2877 SND_SOC_DAPM_SUPPLY("ADC 2 power", RT5677_PWR_DIG1,
2884 /* ADC Mux */
2897 SND_SOC_DAPM_MUX("Stereo2 ADC LR Mux", SND_SOC_NOPM, 0, 0,
2924 /* ADC Mixer */
2925 SND_SOC_DAPM_SUPPLY("adc stereo1 filter", RT5677_PWR_DIG2,
2927 SND_SOC_DAPM_SUPPLY("adc stereo2 filter", RT5677_PWR_DIG2,
2929 SND_SOC_DAPM_SUPPLY("adc stereo3 filter", RT5677_PWR_DIG2,
2931 SND_SOC_DAPM_SUPPLY("adc stereo4 filter", RT5677_PWR_DIG2,
2933 SND_SOC_DAPM_MIXER("Sto1 ADC MIXL", SND_SOC_NOPM, 0, 0,
2935 SND_SOC_DAPM_MIXER("Sto1 ADC MIXR", SND_SOC_NOPM, 0, 0,
2937 SND_SOC_DAPM_MIXER("Sto2 ADC MIXL", SND_SOC_NOPM, 0, 0,
2939 SND_SOC_DAPM_MIXER("Sto2 ADC MIXR", SND_SOC_NOPM, 0, 0,
2941 SND_SOC_DAPM_MIXER("Sto3 ADC MIXL", SND_SOC_NOPM, 0, 0,
2943 SND_SOC_DAPM_MIXER("Sto3 ADC MIXR", SND_SOC_NOPM, 0, 0,
2945 SND_SOC_DAPM_MIXER("Sto4 ADC MIXL", SND_SOC_NOPM, 0, 0,
2947 SND_SOC_DAPM_MIXER("Sto4 ADC MIXR", SND_SOC_NOPM, 0, 0,
2949 SND_SOC_DAPM_SUPPLY("adc mono left filter", RT5677_PWR_DIG2,
2951 SND_SOC_DAPM_MIXER("Mono ADC MIXL", SND_SOC_NOPM, 0, 0,
2953 SND_SOC_DAPM_SUPPLY("adc mono right filter", RT5677_PWR_DIG2,
2955 SND_SOC_DAPM_MIXER("Mono ADC MIXR", SND_SOC_NOPM, 0, 0,
2958 /* ADC PGA */
2959 SND_SOC_DAPM_PGA("Stereo1 ADC MIXL", SND_SOC_NOPM, 0, 0, NULL, 0),
2960 SND_SOC_DAPM_PGA("Stereo1 ADC MIXR", SND_SOC_NOPM, 0, 0, NULL, 0),
2961 SND_SOC_DAPM_PGA("Stereo1 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
2962 SND_SOC_DAPM_PGA("Stereo2 ADC MIXL", SND_SOC_NOPM, 0, 0, NULL, 0),
2963 SND_SOC_DAPM_PGA("Stereo2 ADC MIXR", SND_SOC_NOPM, 0, 0, NULL, 0),
2964 SND_SOC_DAPM_PGA("Stereo2 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
2965 SND_SOC_DAPM_PGA("Stereo3 ADC MIXL", SND_SOC_NOPM, 0, 0, NULL, 0),
2966 SND_SOC_DAPM_PGA("Stereo3 ADC MIXR", SND_SOC_NOPM, 0, 0, NULL, 0),
2967 SND_SOC_DAPM_PGA("Stereo3 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
2968 SND_SOC_DAPM_PGA("Stereo4 ADC MIXL", SND_SOC_NOPM, 0, 0, NULL, 0),
2969 SND_SOC_DAPM_PGA("Stereo4 ADC MIXR", SND_SOC_NOPM, 0, 0, NULL, 0),
2970 SND_SOC_DAPM_PGA("Stereo4 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
2971 SND_SOC_DAPM_PGA("Sto2 ADC LR MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
2972 SND_SOC_DAPM_PGA("Mono ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
2973 SND_SOC_DAPM_PGA("IF1 ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
2974 SND_SOC_DAPM_PGA("IF2 ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
3056 SND_SOC_DAPM_PGA("IF3 ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
3057 SND_SOC_DAPM_PGA("IF3 ADC L", SND_SOC_NOPM, 0, 0, NULL, 0),
3058 SND_SOC_DAPM_PGA("IF3 ADC R", SND_SOC_NOPM, 0, 0, NULL, 0),
3065 SND_SOC_DAPM_PGA("IF4 ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
3066 SND_SOC_DAPM_PGA("IF4 ADC L", SND_SOC_NOPM, 0, 0, NULL, 0),
3067 SND_SOC_DAPM_PGA("IF4 ADC R", SND_SOC_NOPM, 0, 0, NULL, 0),
3105 SND_SOC_DAPM_MUX_E("IF1 ADC TDM Swap Mux", SND_SOC_NOPM, 0, 0,
3124 SND_SOC_DAPM_MUX_E("IF2 ADC TDM Swap Mux", SND_SOC_NOPM, 0, 0,
3127 SND_SOC_DAPM_MUX("IF3 ADC Mux", SND_SOC_NOPM, 0, 0,
3129 SND_SOC_DAPM_MUX("IF4 ADC Mux", SND_SOC_NOPM, 0, 0,
3194 SND_SOC_DAPM_MUX("VAD ADC Mux", SND_SOC_NOPM, 0, 0,
3360 { "adc stereo1 filter", NULL, "ADC STO1 ASRC", is_using_asrc },
3361 { "adc stereo2 filter", NULL, "ADC STO2 ASRC", is_using_asrc },
3362 { "adc stereo3 filter", NULL, "ADC STO3 ASRC", is_using_asrc },
3363 { "adc stereo4 filter", NULL, "ADC STO4 ASRC", is_using_asrc },
3364 { "adc mono left filter", NULL, "ADC MONO L ASRC", is_using_asrc },
3365 { "adc mono right filter", NULL, "ADC MONO R ASRC", is_using_asrc },
3402 { "ADC 1", NULL, "BST1" },
3403 { "ADC 1", NULL, "ADC 1 power" },
3404 { "ADC 1", NULL, "ADC1 clock" },
3405 { "ADC 2", NULL, "BST2" },
3406 { "ADC 2", NULL, "ADC 2 power" },
3407 { "ADC 2", NULL, "ADC2 clock" },
3439 { "ADC 1_2", NULL, "ADC 1" },
3440 { "ADC 1_2", NULL, "ADC 2" },
3443 { "Stereo1 ADC1 Mux", "ADC1/2", "ADC 1_2" },
3451 { "Stereo2 ADC1 Mux", "ADC1/2", "ADC 1_2" },
3459 { "Stereo3 ADC1 Mux", "ADC1/2", "ADC 1_2" },
3467 { "Stereo4 ADC1 Mux", "ADC1/2", "ADC 1_2" },
3479 { "Mono ADC1 L Mux", "ADC1", "ADC 1" },
3483 { "Mono ADC1 R Mux", "ADC2", "ADC 2" },
3490 { "Sto1 ADC MIXL", "ADC1 Switch", "Stereo1 ADC1 Mux" },
3491 { "Sto1 ADC MIXL", "ADC2 Switch", "Stereo1 ADC2 Mux" },
3492 { "Sto1 ADC MIXR", "ADC1 Switch", "Stereo1 ADC1 Mux" },
3493 { "Sto1 ADC MIXR", "ADC2 Switch", "Stereo1 ADC2 Mux" },
3495 { "Stereo1 ADC MIXL", NULL, "Sto1 ADC MIXL" },
3496 { "Stereo1 ADC MIXL", NULL, "adc stereo1 filter" },
3497 { "Stereo1 ADC MIXR", NULL, "Sto1 ADC MIXR" },
3498 { "Stereo1 ADC MIXR", NULL, "adc stereo1 filter" },
3499 { "adc stereo1 filter", NULL, "PLL1", is_sys_clk_from_pll },
3501 { "Stereo1 ADC MIX", NULL, "Stereo1 ADC MIXL" },
3502 { "Stereo1 ADC MIX", NULL, "Stereo1 ADC MIXR" },
3504 { "Sto2 ADC MIXL", "ADC1 Switch", "Stereo2 ADC1 Mux" },
3505 { "Sto2 ADC MIXL", "ADC2 Switch", "Stereo2 ADC2 Mux" },
3506 { "Sto2 ADC MIXR", "ADC1 Switch", "Stereo2 ADC1 Mux" },
3507 { "Sto2 ADC MIXR", "ADC2 Switch", "Stereo2 ADC2 Mux" },
3509 { "Sto2 ADC LR MIX", NULL, "Sto2 ADC MIXL" },
3510 { "Sto2 ADC LR MIX", NULL, "Sto2 ADC MIXR" },
3512 { "Stereo2 ADC LR Mux", "L", "Sto2 ADC MIXL" },
3513 { "Stereo2 ADC LR Mux", "LR", "Sto2 ADC LR MIX" },
3515 { "Stereo2 ADC MIXL", NULL, "Stereo2 ADC LR Mux" },
3516 { "Stereo2 ADC MIXL", NULL, "adc stereo2 filter" },
3517 { "Stereo2 ADC MIXR", NULL, "Sto2 ADC MIXR" },
3518 { "Stereo2 ADC MIXR", NULL, "adc stereo2 filter" },
3519 { "adc stereo2 filter", NULL, "PLL1", is_sys_clk_from_pll },
3521 { "Stereo2 ADC MIX", NULL, "Stereo2 ADC MIXL" },
3522 { "Stereo2 ADC MIX", NULL, "Stereo2 ADC MIXR" },
3524 { "Sto3 ADC MIXL", "ADC1 Switch", "Stereo3 ADC1 Mux" },
3525 { "Sto3 ADC MIXL", "ADC2 Switch", "Stereo3 ADC2 Mux" },
3526 { "Sto3 ADC MIXR", "ADC1 Switch", "Stereo3 ADC1 Mux" },
3527 { "Sto3 ADC MIXR", "ADC2 Switch", "Stereo3 ADC2 Mux" },
3529 { "Stereo3 ADC MIXL", NULL, "Sto3 ADC MIXL" },
3530 { "Stereo3 ADC MIXL", NULL, "adc stereo3 filter" },
3531 { "Stereo3 ADC MIXR", NULL, "Sto3 ADC MIXR" },
3532 { "Stereo3 ADC MIXR", NULL, "adc stereo3 filter" },
3533 { "adc stereo3 filter", NULL, "PLL1", is_sys_clk_from_pll },
3535 { "Stereo3 ADC MIX", NULL, "Stereo3 ADC MIXL" },
3536 { "Stereo3 ADC MIX", NULL, "Stereo3 ADC MIXR" },
3538 { "Sto4 ADC MIXL", "ADC1 Switch", "Stereo4 ADC1 Mux" },
3539 { "Sto4 ADC MIXL", "ADC2 Switch", "Stereo4 ADC2 Mux" },
3540 { "Sto4 ADC MIXR", "ADC1 Switch", "Stereo4 ADC1 Mux" },
3541 { "Sto4 ADC MIXR", "ADC2 Switch", "Stereo4 ADC2 Mux" },
3543 { "Stereo4 ADC MIXL", NULL, "Sto4 ADC MIXL" },
3544 { "Stereo4 ADC MIXL", NULL, "adc stereo4 filter" },
3545 { "Stereo4 ADC MIXR", NULL, "Sto4 ADC MIXR" },
3546 { "Stereo4 ADC MIXR", NULL, "adc stereo4 filter" },
3547 { "adc stereo4 filter", NULL, "PLL1", is_sys_clk_from_pll },
3549 { "Stereo4 ADC MIX", NULL, "Stereo4 ADC MIXL" },
3550 { "Stereo4 ADC MIX", NULL, "Stereo4 ADC MIXR" },
3552 { "Mono ADC MIXL", "ADC1 Switch", "Mono ADC1 L Mux" },
3553 { "Mono ADC MIXL", "ADC2 Switch", "Mono ADC2 L Mux" },
3554 { "Mono ADC MIXL", NULL, "adc mono left filter" },
3555 { "adc mono left filter", NULL, "PLL1", is_sys_clk_from_pll },
3557 { "Mono ADC MIXR", "ADC1 Switch", "Mono ADC1 R Mux" },
3558 { "Mono ADC MIXR", "ADC2 Switch", "Mono ADC2 R Mux" },
3559 { "Mono ADC MIXR", NULL, "adc mono right filter" },
3560 { "adc mono right filter", NULL, "PLL1", is_sys_clk_from_pll },
3562 { "Mono ADC MIX", NULL, "Mono ADC MIXL" },
3563 { "Mono ADC MIX", NULL, "Mono ADC MIXR" },
3565 { "VAD ADC Mux", "STO1 ADC MIX L", "Stereo1 ADC MIXL" },
3566 { "VAD ADC Mux", "MONO ADC MIX L", "Mono ADC MIXL" },
3567 { "VAD ADC Mux", "MONO ADC MIX R", "Mono ADC MIXR" },
3568 { "VAD ADC Mux", "STO2 ADC MIX L", "Stereo2 ADC MIXL" },
3569 { "VAD ADC Mux", "STO3 ADC MIX L", "Stereo3 ADC MIXL" },
3571 { "IF1 ADC1 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
3573 { "IF1 ADC1 Mux", "VAD ADC", "VAD ADC Mux" },
3575 { "IF1 ADC2 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
3578 { "IF1 ADC3 Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
3579 { "IF1 ADC3 Mux", "MONO ADC MIX", "Mono ADC MIX" },
3582 { "IF1 ADC4 Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
3606 { "IF1 ADC", NULL, "IF1 ADC1 Swap Mux" },
3607 { "IF1 ADC", NULL, "IF1 ADC2 Swap Mux" },
3608 { "IF1 ADC", NULL, "IF1 ADC3 Swap Mux" },
3609 { "IF1 ADC", NULL, "IF1 ADC4 Swap Mux" },
3611 { "IF1 ADC TDM Swap Mux", "1/2/3/4", "IF1 ADC" },
3612 { "IF1 ADC TDM Swap Mux", "2/1/3/4", "IF1 ADC" },
3613 { "IF1 ADC TDM Swap Mux", "2/3/1/4", "IF1 ADC" },
3614 { "IF1 ADC TDM Swap Mux", "4/1/2/3", "IF1 ADC" },
3615 { "IF1 ADC TDM Swap Mux", "1/3/2/4", "IF1 ADC" },
3616 { "IF1 ADC TDM Swap Mux", "1/4/2/3", "IF1 ADC" },
3617 { "IF1 ADC TDM Swap Mux", "3/1/2/4", "IF1 ADC" },
3618 { "IF1 ADC TDM Swap Mux", "3/4/1/2", "IF1 ADC" },
3621 { "AIF1TX", NULL, "IF1 ADC TDM Swap Mux" },
3623 { "IF2 ADC1 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
3625 { "IF2 ADC1 Mux", "VAD ADC", "VAD ADC Mux" },
3627 { "IF2 ADC2 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
3630 { "IF2 ADC3 Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
3631 { "IF2 ADC3 Mux", "MONO ADC MIX", "Mono ADC MIX" },
3634 { "IF2 ADC4 Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
3658 { "IF2 ADC", NULL, "IF2 ADC1 Swap Mux" },
3659 { "IF2 ADC", NULL, "IF2 ADC2 Swap Mux" },
3660 { "IF2 ADC", NULL, "IF2 ADC3 Swap Mux" },
3661 { "IF2 ADC", NULL, "IF2 ADC4 Swap Mux" },
3663 { "IF2 ADC TDM Swap Mux", "1/2/3/4", "IF2 ADC" },
3664 { "IF2 ADC TDM Swap Mux", "2/1/3/4", "IF2 ADC" },
3665 { "IF2 ADC TDM Swap Mux", "3/1/2/4", "IF2 ADC" },
3666 { "IF2 ADC TDM Swap Mux", "4/1/2/3", "IF2 ADC" },
3667 { "IF2 ADC TDM Swap Mux", "1/3/2/4", "IF2 ADC" },
3668 { "IF2 ADC TDM Swap Mux", "1/4/2/3", "IF2 ADC" },
3669 { "IF2 ADC TDM Swap Mux", "2/3/1/4", "IF2 ADC" },
3670 { "IF2 ADC TDM Swap Mux", "3/4/1/2", "IF2 ADC" },
3673 { "AIF2TX", NULL, "IF2 ADC TDM Swap Mux" },
3675 { "IF3 ADC Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
3676 { "IF3 ADC Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
3677 { "IF3 ADC Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
3678 { "IF3 ADC Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
3679 { "IF3 ADC Mux", "MONO ADC MIX", "Mono ADC MIX" },
3680 { "IF3 ADC Mux", "OB01", "OB01 Bypass Mux" },
3681 { "IF3 ADC Mux", "OB23", "OB23 Bypass Mux" },
3682 { "IF3 ADC Mux", "VAD ADC", "VAD ADC Mux" },
3685 { "AIF3TX", NULL, "IF3 ADC Mux" },
3687 { "IF4 ADC Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
3688 { "IF4 ADC Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
3689 { "IF4 ADC Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
3690 { "IF4 ADC Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
3691 { "IF4 ADC Mux", "MONO ADC MIX", "Mono ADC MIX" },
3692 { "IF4 ADC Mux", "OB01", "OB01 Bypass Mux" },
3693 { "IF4 ADC Mux", "OB23", "OB23 Bypass Mux" },
3694 { "IF4 ADC Mux", "VAD ADC", "VAD ADC Mux" },
3697 { "AIF4TX", NULL, "IF4 ADC Mux" },
3699 { "SLB ADC1 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
3701 { "SLB ADC1 Mux", "VAD ADC", "VAD ADC Mux" },
3703 { "SLB ADC2 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
3706 { "SLB ADC3 Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
3707 { "SLB ADC3 Mux", "MONO ADC MIX", "Mono ADC MIX" },
3710 { "SLB ADC4 Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
3725 { "IB01 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
3727 * When the mux option "VAD ADC/DAC1 FS" is selected, "VAD ADC" goes to
3728 * InBound0 and "DAC1 FS" goes to InBound1. "VAD ADC" is used for
3731 * Creating a common widget node for "VAD ADC" + "DAC1 FS" and
3733 * there is an active path going from system playback -> "DAC1 FS" ->
3734 * IB01 Mux -> DSP Buffer -> hotword stream. This wrong path confuses
3737 { "IB01 Mux", "VAD ADC/DAC1 FS", "VAD ADC Mux" },
3745 { "IB23 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
3755 { "IB45 Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
3764 { "IB6 Mux", "STO4 ADC MIX L", "Stereo4 ADC MIXL" },
3766 { "IB6 Mux", "STO1 ADC MIX L", "Stereo1 ADC MIXL" },
3767 { "IB6 Mux", "STO2 ADC MIX L", "Stereo2 ADC MIXL" },
3768 { "IB6 Mux", "STO3 ADC MIX L", "Stereo3 ADC MIXL" },
3773 { "IB7 Mux", "STO4 ADC MIX R", "Stereo4 ADC MIXR" },
3775 { "IB7 Mux", "STO1 ADC MIX R", "Stereo1 ADC MIXR" },
3776 { "IB7 Mux", "STO2 ADC MIX R", "Stereo2 ADC MIXR" },
3777 { "IB7 Mux", "STO3 ADC MIX R", "Stereo3 ADC MIXR" },
3779 { "IB8 Mux", "STO1 ADC MIX L", "Stereo1 ADC MIXL" },
3780 { "IB8 Mux", "STO2 ADC MIX L", "Stereo2 ADC MIXL" },
3781 { "IB8 Mux", "STO3 ADC MIX L", "Stereo3 ADC MIXL" },
3782 { "IB8 Mux", "STO4 ADC MIX L", "Stereo4 ADC MIXL" },
3783 { "IB8 Mux", "MONO ADC MIX L", "Mono ADC MIXL" },
3786 { "IB9 Mux", "STO1 ADC MIX R", "Stereo1 ADC MIXR" },
3787 { "IB9 Mux", "STO2 ADC MIX R", "Stereo2 ADC MIXR" },
3788 { "IB9 Mux", "STO3 ADC MIX R", "Stereo3 ADC MIXR" },
3789 { "IB9 Mux", "STO4 ADC MIX R", "Stereo4 ADC MIXR" },
3790 { "IB9 Mux", "MONO ADC MIX R", "Mono ADC MIXR" },
4093 { "ADDA1 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
4094 { "ADDA1 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
4104 { "DAC1 MIXL", "Stereo ADC Switch", "ADDA1 Mux" },
4106 { "DAC1 MIXR", "Stereo ADC Switch", "ADDA1 Mux" },
4126 { "DAC2 R Mux", "VAD ADC", "VAD ADC Mux" },
4160 { "Sidetone Mux", "ADC1", "ADC 1" },
4161 { "Sidetone Mux", "ADC2", "ADC 2" },
4290 struct snd_soc_component *component = dai->component; in rt5677_hw_params()
4295 rt5677->lrck[dai->id] = params_rate(params); in rt5677_hw_params()
4296 pre_div = rl6231_get_clk_info(rt5677->sysclk, rt5677->lrck[dai->id]); in rt5677_hw_params()
4298 dev_err(component->dev, "Unsupported clock setting: sysclk=%dHz lrck=%dHz\n", in rt5677_hw_params()
4299 rt5677->sysclk, rt5677->lrck[dai->id]); in rt5677_hw_params()
4300 return -EINVAL; in rt5677_hw_params()
4304 dev_err(component->dev, "Unsupported frame size: %d\n", frame_size); in rt5677_hw_params()
4305 return -EINVAL; in rt5677_hw_params()
4308 rt5677->bclk[dai->id] = rt5677->lrck[dai->id] * (32 << bclk_ms); in rt5677_hw_params()
4310 dev_dbg(dai->dev, "bclk is %dHz and lrck is %dHz\n", in rt5677_hw_params()
4311 rt5677->bclk[dai->id], rt5677->lrck[dai->id]); in rt5677_hw_params()
4312 dev_dbg(dai->dev, "bclk_ms is %d and pre_div is %d for iis %d\n", in rt5677_hw_params()
4313 bclk_ms, pre_div, dai->id); in rt5677_hw_params()
4328 return -EINVAL; in rt5677_hw_params()
4331 switch (dai->id) { in rt5677_hw_params()
4335 regmap_update_bits(rt5677->regmap, RT5677_I2S1_SDP, in rt5677_hw_params()
4337 regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1, in rt5677_hw_params()
4343 regmap_update_bits(rt5677->regmap, RT5677_I2S2_SDP, in rt5677_hw_params()
4345 regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1, in rt5677_hw_params()
4352 regmap_update_bits(rt5677->regmap, RT5677_I2S3_SDP, in rt5677_hw_params()
4354 regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1, in rt5677_hw_params()
4361 regmap_update_bits(rt5677->regmap, RT5677_I2S4_SDP, in rt5677_hw_params()
4363 regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1, in rt5677_hw_params()
4375 struct snd_soc_component *component = dai->component; in rt5677_set_dai_fmt()
4381 rt5677->master[dai->id] = 1; in rt5677_set_dai_fmt()
4385 rt5677->master[dai->id] = 0; in rt5677_set_dai_fmt()
4388 return -EINVAL; in rt5677_set_dai_fmt()
4398 return -EINVAL; in rt5677_set_dai_fmt()
4414 return -EINVAL; in rt5677_set_dai_fmt()
4417 switch (dai->id) { in rt5677_set_dai_fmt()
4419 regmap_update_bits(rt5677->regmap, RT5677_I2S1_SDP, in rt5677_set_dai_fmt()
4424 regmap_update_bits(rt5677->regmap, RT5677_I2S2_SDP, in rt5677_set_dai_fmt()
4429 regmap_update_bits(rt5677->regmap, RT5677_I2S3_SDP, in rt5677_set_dai_fmt()
4434 regmap_update_bits(rt5677->regmap, RT5677_I2S4_SDP, in rt5677_set_dai_fmt()
4449 struct snd_soc_component *component = dai->component; in rt5677_set_dai_sysclk()
4453 if (freq == rt5677->sysclk && clk_id == rt5677->sysclk_src) in rt5677_set_dai_sysclk()
4467 dev_err(component->dev, "Invalid clock id (%d)\n", clk_id); in rt5677_set_dai_sysclk()
4468 return -EINVAL; in rt5677_set_dai_sysclk()
4470 regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1, in rt5677_set_dai_sysclk()
4472 rt5677->sysclk = freq; in rt5677_set_dai_sysclk()
4473 rt5677->sysclk_src = clk_id; in rt5677_set_dai_sysclk()
4475 dev_dbg(dai->dev, "Sysclk is %dHz and clock id is %d\n", freq, clk_id); in rt5677_set_dai_sysclk()
4481 * rt5677_pll_calc - Calcualte PLL M/N/K code.
4482 * @freq_in: external clock provided to codec.
4494 return -EINVAL; in rt5677_pll_calc()
4502 struct snd_soc_component *component = dai->component; in rt5677_set_dai_pll()
4507 if (source == rt5677->pll_src && freq_in == rt5677->pll_in && in rt5677_set_dai_pll()
4508 freq_out == rt5677->pll_out) in rt5677_set_dai_pll()
4512 dev_dbg(component->dev, "PLL disabled\n"); in rt5677_set_dai_pll()
4514 rt5677->pll_in = 0; in rt5677_set_dai_pll()
4515 rt5677->pll_out = 0; in rt5677_set_dai_pll()
4516 regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1, in rt5677_set_dai_pll()
4523 regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1, in rt5677_set_dai_pll()
4530 switch (dai->id) { in rt5677_set_dai_pll()
4532 regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1, in rt5677_set_dai_pll()
4536 regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1, in rt5677_set_dai_pll()
4540 regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1, in rt5677_set_dai_pll()
4544 regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1, in rt5677_set_dai_pll()
4552 dev_err(component->dev, "Unknown PLL source %d\n", source); in rt5677_set_dai_pll()
4553 return -EINVAL; in rt5677_set_dai_pll()
4558 dev_err(component->dev, "Unsupported input clock %d\n", freq_in); in rt5677_set_dai_pll()
4562 dev_dbg(component->dev, "m_bypass=%d m=%d n=%d k=%d\n", in rt5677_set_dai_pll()
4566 regmap_write(rt5677->regmap, RT5677_PLL1_CTRL1, in rt5677_set_dai_pll()
4568 regmap_write(rt5677->regmap, RT5677_PLL1_CTRL2, in rt5677_set_dai_pll()
4572 rt5677->pll_in = freq_in; in rt5677_set_dai_pll()
4573 rt5677->pll_out = freq_out; in rt5677_set_dai_pll()
4574 rt5677->pll_src = source; in rt5677_set_dai_pll()
4582 struct snd_soc_component *component = dai->component; in rt5677_set_tdm_slot()
4622 switch (dai->id) { in rt5677_set_tdm_slot()
4624 regmap_update_bits(rt5677->regmap, RT5677_TDM1_CTRL1, 0x1f00, in rt5677_set_tdm_slot()
4626 regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x8000, in rt5677_set_tdm_slot()
4630 regmap_update_bits(rt5677->regmap, RT5677_TDM2_CTRL1, 0x1f00, in rt5677_set_tdm_slot()
4632 regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x80, in rt5677_set_tdm_slot()
4656 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG1, in rt5677_set_bias_level()
4660 regmap_update_bits(rt5677->regmap, in rt5677_set_bias_level()
4663 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG1, in rt5677_set_bias_level()
4669 rt5677->is_vref_slow = false; in rt5677_set_bias_level()
4670 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2, in rt5677_set_bias_level()
4672 regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, in rt5677_set_bias_level()
4679 rt5677->dsp_vad_en_request) { in rt5677_set_bias_level()
4680 /* Re-enable the DSP if it was turned off at suspend */ in rt5677_set_bias_level()
4681 rt5677->dsp_vad_en = true; in rt5677_set_bias_level()
4683 schedule_delayed_work(&rt5677->dsp_work, in rt5677_set_bias_level()
4689 flush_delayed_work(&rt5677->dsp_work); in rt5677_set_bias_level()
4690 if (rt5677->is_dsp_mode) { in rt5677_set_bias_level()
4692 rt5677->dsp_vad_en = false; in rt5677_set_bias_level()
4693 schedule_delayed_work(&rt5677->dsp_work, 0); in rt5677_set_bias_level()
4694 flush_delayed_work(&rt5677->dsp_work); in rt5677_set_bias_level()
4697 regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x1, 0x0); in rt5677_set_bias_level()
4698 regmap_write(rt5677->regmap, RT5677_PWR_DIG1, 0x0000); in rt5677_set_bias_level()
4699 regmap_write(rt5677->regmap, RT5677_PWR_ANLG1, in rt5677_set_bias_level()
4702 regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2, in rt5677_set_bias_level()
4704 regmap_update_bits(rt5677->regmap, in rt5677_set_bias_level()
4707 if (rt5677->dsp_vad_en) in rt5677_set_bias_level()
4724 return regmap_update_bits(rt5677->regmap, reg, m << shift, v << shift); in rt5677_update_gpio_bits()
4753 ret = regmap_read(rt5677->regmap, RT5677_GPIO_ST, &value); in rt5677_gpio_get()
4771 * 0 - floating
4772 * 1 - pull down
4773 * 2 - pull up
4782 shift = 2 * (1 - offset); in rt5677_gpio_config()
4783 regmap_update_bits(rt5677->regmap, in rt5677_gpio_config()
4790 shift = 2 * (9 - offset); in rt5677_gpio_config()
4791 regmap_update_bits(rt5677->regmap, in rt5677_gpio_config()
4807 if ((rt5677->pdata.jd1_gpio == 1 && offset == RT5677_GPIO1) || in rt5677_to_irq()
4808 (rt5677->pdata.jd1_gpio == 2 && in rt5677_to_irq()
4810 (rt5677->pdata.jd1_gpio == 3 && in rt5677_to_irq()
4813 } else if ((rt5677->pdata.jd2_gpio == 1 && offset == RT5677_GPIO4) || in rt5677_to_irq()
4814 (rt5677->pdata.jd2_gpio == 2 && in rt5677_to_irq()
4816 (rt5677->pdata.jd2_gpio == 3 && in rt5677_to_irq()
4819 } else if ((rt5677->pdata.jd3_gpio == 1 && in rt5677_to_irq()
4821 (rt5677->pdata.jd3_gpio == 2 && in rt5677_to_irq()
4823 (rt5677->pdata.jd3_gpio == 3 && in rt5677_to_irq()
4827 return -ENXIO; in rt5677_to_irq()
4830 return irq_create_mapping(rt5677->domain, irq); in rt5677_to_irq()
4849 rt5677->gpio_chip = rt5677_template_chip; in rt5677_init_gpio()
4850 rt5677->gpio_chip.ngpio = RT5677_GPIO_NUM; in rt5677_init_gpio()
4851 rt5677->gpio_chip.parent = &i2c->dev; in rt5677_init_gpio()
4852 rt5677->gpio_chip.base = -1; in rt5677_init_gpio()
4854 ret = gpiochip_add_data(&rt5677->gpio_chip, rt5677); in rt5677_init_gpio()
4856 dev_err(&i2c->dev, "Failed to add GPIOs: %d\n", ret); in rt5677_init_gpio()
4863 gpiochip_remove(&rt5677->gpio_chip); in rt5677_free_gpio()
4886 rt5677->component = component; in rt5677_probe()
4888 if (rt5677->pdata.dmic2_clk_pin == RT5677_DMIC_CLK2) { in rt5677_probe()
4892 } else { /*use dmic1 clock by default*/ in rt5677_probe()
4900 regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, in rt5677_probe()
4902 regmap_write(rt5677->regmap, RT5677_PWR_DSP2, in rt5677_probe()
4906 rt5677_gpio_config(rt5677, i, rt5677->pdata.gpio_config[i]); in rt5677_probe()
4908 mutex_init(&rt5677->dsp_cmd_lock); in rt5677_probe()
4909 mutex_init(&rt5677->dsp_pri_lock); in rt5677_probe()
4918 cancel_delayed_work_sync(&rt5677->dsp_work); in rt5677_remove()
4920 regmap_write(rt5677->regmap, RT5677_RESET, 0x10ec); in rt5677_remove()
4921 gpiod_set_value_cansleep(rt5677->pow_ldo2, 0); in rt5677_remove()
4922 gpiod_set_value_cansleep(rt5677->reset_pin, 1); in rt5677_remove()
4930 if (rt5677->irq) { in rt5677_suspend()
4931 cancel_delayed_work_sync(&rt5677->resume_irq_check); in rt5677_suspend()
4932 disable_irq(rt5677->irq); in rt5677_suspend()
4935 if (!rt5677->dsp_vad_en) { in rt5677_suspend()
4936 regcache_cache_only(rt5677->regmap, true); in rt5677_suspend()
4937 regcache_mark_dirty(rt5677->regmap); in rt5677_suspend()
4939 gpiod_set_value_cansleep(rt5677->pow_ldo2, 0); in rt5677_suspend()
4940 gpiod_set_value_cansleep(rt5677->reset_pin, 1); in rt5677_suspend()
4950 if (!rt5677->dsp_vad_en) { in rt5677_resume()
4951 rt5677->pll_src = 0; in rt5677_resume()
4952 rt5677->pll_in = 0; in rt5677_resume()
4953 rt5677->pll_out = 0; in rt5677_resume()
4954 gpiod_set_value_cansleep(rt5677->pow_ldo2, 1); in rt5677_resume()
4955 gpiod_set_value_cansleep(rt5677->reset_pin, 0); in rt5677_resume()
4956 if (rt5677->pow_ldo2 || rt5677->reset_pin) in rt5677_resume()
4959 regcache_cache_only(rt5677->regmap, false); in rt5677_resume()
4960 regcache_sync(rt5677->regmap); in rt5677_resume()
4963 if (rt5677->irq) { in rt5677_resume()
4964 enable_irq(rt5677->irq); in rt5677_resume()
4965 schedule_delayed_work(&rt5677->resume_irq_check, 0); in rt5677_resume()
4980 if (rt5677->is_dsp_mode) { in rt5677_read()
4982 mutex_lock(&rt5677->dsp_pri_lock); in rt5677_read()
4986 mutex_unlock(&rt5677->dsp_pri_lock); in rt5677_read()
4991 regmap_read(rt5677->regmap_physical, reg, val); in rt5677_read()
5002 if (rt5677->is_dsp_mode) { in rt5677_write()
5004 mutex_lock(&rt5677->dsp_pri_lock); in rt5677_write()
5009 mutex_unlock(&rt5677->dsp_pri_lock); in rt5677_write()
5014 regmap_write(rt5677->regmap_physical, reg, val); in rt5677_write()
5039 .name = "rt5677-aif1",
5058 .name = "rt5677-aif2",
5077 .name = "rt5677-aif3",
5096 .name = "rt5677-aif4",
5115 .name = "rt5677-slimbus",
5134 .name = "rt5677-dspbuffer",
5214 rt5677->pdata.in1_diff = in rt5677_read_device_properties()
5216 device_property_read_bool(dev, "realtek,in1-differential"); in rt5677_read_device_properties()
5218 rt5677->pdata.in2_diff = in rt5677_read_device_properties()
5220 device_property_read_bool(dev, "realtek,in2-differential"); in rt5677_read_device_properties()
5222 rt5677->pdata.lout1_diff = in rt5677_read_device_properties()
5224 device_property_read_bool(dev, "realtek,lout1-differential"); in rt5677_read_device_properties()
5226 rt5677->pdata.lout2_diff = in rt5677_read_device_properties()
5228 device_property_read_bool(dev, "realtek,lout2-differential"); in rt5677_read_device_properties()
5230 rt5677->pdata.lout3_diff = in rt5677_read_device_properties()
5232 device_property_read_bool(dev, "realtek,lout3-differential"); in rt5677_read_device_properties()
5234 device_property_read_u8_array(dev, "realtek,gpio-config", in rt5677_read_device_properties()
5235 rt5677->pdata.gpio_config, in rt5677_read_device_properties()
5240 rt5677->pdata.dmic2_clk_pin = val; in rt5677_read_device_properties()
5243 !device_property_read_u32(dev, "realtek,jd1-gpio", &val)) in rt5677_read_device_properties()
5244 rt5677->pdata.jd1_gpio = val; in rt5677_read_device_properties()
5247 !device_property_read_u32(dev, "realtek,jd2-gpio", &val)) in rt5677_read_device_properties()
5248 rt5677->pdata.jd2_gpio = val; in rt5677_read_device_properties()
5251 !device_property_read_u32(dev, "realtek,jd3-gpio", &val)) in rt5677_read_device_properties()
5252 rt5677->pdata.jd3_gpio = val; in rt5677_read_device_properties()
5283 if (!rt5677->is_dsp_mode) in rt5677_check_hotword()
5286 if (regmap_read(rt5677->regmap, RT5677_GPIO_CTRL1, &reg_gpio)) in rt5677_check_hotword()
5294 regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL1, in rt5677_check_hotword()
5307 mutex_lock(&rt5677->irq_lock); in rt5677_irq()
5325 ret = regmap_read(rt5677->regmap, RT5677_IRQ_CTRL1, &reg_irq); in rt5677_irq()
5327 dev_err(rt5677->dev, "failed reading IRQ status: %d\n", in rt5677_irq()
5336 virq = irq_find_mapping(rt5677->domain, i); in rt5677_irq()
5349 * after that point creates a rising edge that triggers another in rt5677_irq()
5355 ret = regmap_write(rt5677->regmap, RT5677_IRQ_CTRL1, reg_irq); in rt5677_irq()
5357 dev_err(rt5677->dev, "failed updating IRQ status: %d\n", in rt5677_irq()
5364 mutex_unlock(&rt5677->irq_lock); in rt5677_irq()
5387 * scheduled by soc-jack may run and read wrong jack gpio values, since in rt5677_resume_irq_check()
5393 mutex_lock(&rt5677->irq_lock); in rt5677_resume_irq_check()
5395 if (rt5677->irq_en & rt5677_irq_descs[i].enable_mask) { in rt5677_resume_irq_check()
5396 virq = irq_find_mapping(rt5677->domain, i); in rt5677_resume_irq_check()
5401 mutex_unlock(&rt5677->irq_lock); in rt5677_resume_irq_check()
5408 mutex_lock(&rt5677->irq_lock); in rt5677_irq_bus_lock()
5416 regmap_update_bits(rt5677->regmap, RT5677_IRQ_CTRL1, in rt5677_irq_bus_sync_unlock()
5418 RT5677_EN_IRQ_GPIO_JD3, rt5677->irq_en); in rt5677_irq_bus_sync_unlock()
5419 mutex_unlock(&rt5677->irq_lock); in rt5677_irq_bus_sync_unlock()
5426 rt5677->irq_en |= rt5677_irq_descs[data->hwirq].enable_mask; in rt5677_irq_enable()
5433 rt5677->irq_en &= ~rt5677_irq_descs[data->hwirq].enable_mask; in rt5677_irq_disable()
5447 struct rt5677_priv *rt5677 = h->host_data; in rt5677_irq_map()
5468 if (!rt5677->pdata.jd1_gpio && in rt5677_init_irq()
5469 !rt5677->pdata.jd2_gpio && in rt5677_init_irq()
5470 !rt5677->pdata.jd3_gpio) in rt5677_init_irq()
5473 if (!i2c->irq) { in rt5677_init_irq()
5474 dev_err(&i2c->dev, "No interrupt specified\n"); in rt5677_init_irq()
5475 return -EINVAL; in rt5677_init_irq()
5478 mutex_init(&rt5677->irq_lock); in rt5677_init_irq()
5479 INIT_DELAYED_WORK(&rt5677->resume_irq_check, rt5677_resume_irq_check); in rt5677_init_irq()
5486 regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, in rt5677_init_irq()
5490 regmap_update_bits(rt5677->regmap, RT5677_GEN_CTRL1, 0xff, 0xff); in rt5677_init_irq()
5493 if (rt5677->pdata.jd1_gpio) { in rt5677_init_irq()
5495 jd_val |= rt5677->pdata.jd1_gpio << RT5677_SEL_GPIO_JD1_SFT; in rt5677_init_irq()
5497 if (rt5677->pdata.jd2_gpio) { in rt5677_init_irq()
5499 jd_val |= rt5677->pdata.jd2_gpio << RT5677_SEL_GPIO_JD2_SFT; in rt5677_init_irq()
5501 if (rt5677->pdata.jd3_gpio) { in rt5677_init_irq()
5503 jd_val |= rt5677->pdata.jd3_gpio << RT5677_SEL_GPIO_JD3_SFT; in rt5677_init_irq()
5505 regmap_update_bits(rt5677->regmap, RT5677_JD_CTRL1, jd_mask, jd_val); in rt5677_init_irq()
5508 regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL1, in rt5677_init_irq()
5512 rt5677->domain = irq_domain_create_linear(dev_fwnode(&i2c->dev), in rt5677_init_irq()
5514 if (!rt5677->domain) { in rt5677_init_irq()
5515 dev_err(&i2c->dev, "Failed to create IRQ domain\n"); in rt5677_init_irq()
5516 return -ENOMEM; in rt5677_init_irq()
5519 ret = devm_request_threaded_irq(&i2c->dev, i2c->irq, NULL, rt5677_irq, in rt5677_init_irq()
5523 dev_err(&i2c->dev, "Failed to request IRQ: %d\n", ret); in rt5677_init_irq()
5525 rt5677->irq = i2c->irq; in rt5677_init_irq()
5532 struct device *dev = &i2c->dev; in rt5677_i2c_probe()
5537 rt5677 = devm_kzalloc(&i2c->dev, sizeof(struct rt5677_priv), in rt5677_i2c_probe()
5540 return -ENOMEM; in rt5677_i2c_probe()
5542 rt5677->dev = &i2c->dev; in rt5677_i2c_probe()
5543 rt5677->set_dsp_vad = rt5677_set_dsp_vad; in rt5677_i2c_probe()
5544 INIT_DELAYED_WORK(&rt5677->dsp_work, rt5677_dsp_work); in rt5677_i2c_probe()
5547 rt5677->type = (enum rt5677_type)(uintptr_t)device_get_match_data(dev); in rt5677_i2c_probe()
5548 if (rt5677->type == 0) in rt5677_i2c_probe()
5549 return -EINVAL; in rt5677_i2c_probe()
5551 rt5677_read_device_properties(rt5677, &i2c->dev); in rt5677_i2c_probe()
5553 /* pow-ldo2 and reset are optional. The codec pins may be statically in rt5677_i2c_probe()
5557 rt5677->pow_ldo2 = devm_gpiod_get_optional(&i2c->dev, in rt5677_i2c_probe()
5558 "realtek,pow-ldo2", GPIOD_OUT_HIGH); in rt5677_i2c_probe()
5559 if (IS_ERR(rt5677->pow_ldo2)) { in rt5677_i2c_probe()
5560 ret = PTR_ERR(rt5677->pow_ldo2); in rt5677_i2c_probe()
5561 dev_err(&i2c->dev, "Failed to request POW_LDO2: %d\n", ret); in rt5677_i2c_probe()
5564 rt5677->reset_pin = devm_gpiod_get_optional(&i2c->dev, in rt5677_i2c_probe()
5566 if (IS_ERR(rt5677->reset_pin)) { in rt5677_i2c_probe()
5567 ret = PTR_ERR(rt5677->reset_pin); in rt5677_i2c_probe()
5568 dev_err(&i2c->dev, "Failed to request RESET: %d\n", ret); in rt5677_i2c_probe()
5572 if (rt5677->pow_ldo2 || rt5677->reset_pin) { in rt5677_i2c_probe()
5580 rt5677->regmap_physical = devm_regmap_init_i2c(i2c, in rt5677_i2c_probe()
5582 if (IS_ERR(rt5677->regmap_physical)) { in rt5677_i2c_probe()
5583 ret = PTR_ERR(rt5677->regmap_physical); in rt5677_i2c_probe()
5584 dev_err(&i2c->dev, "Failed to allocate register map: %d\n", in rt5677_i2c_probe()
5589 rt5677->regmap = devm_regmap_init(&i2c->dev, NULL, i2c, &rt5677_regmap); in rt5677_i2c_probe()
5590 if (IS_ERR(rt5677->regmap)) { in rt5677_i2c_probe()
5591 ret = PTR_ERR(rt5677->regmap); in rt5677_i2c_probe()
5592 dev_err(&i2c->dev, "Failed to allocate register map: %d\n", in rt5677_i2c_probe()
5597 regmap_read(rt5677->regmap, RT5677_VENDOR_ID2, &val); in rt5677_i2c_probe()
5599 dev_err(&i2c->dev, in rt5677_i2c_probe()
5601 return -ENODEV; in rt5677_i2c_probe()
5604 regmap_write(rt5677->regmap, RT5677_RESET, 0x10ec); in rt5677_i2c_probe()
5606 ret = regmap_register_patch(rt5677->regmap, init_list, in rt5677_i2c_probe()
5609 dev_warn(&i2c->dev, "Failed to apply regmap patch: %d\n", ret); in rt5677_i2c_probe()
5611 if (rt5677->pdata.in1_diff) in rt5677_i2c_probe()
5612 regmap_update_bits(rt5677->regmap, RT5677_IN1, in rt5677_i2c_probe()
5615 if (rt5677->pdata.in2_diff) in rt5677_i2c_probe()
5616 regmap_update_bits(rt5677->regmap, RT5677_IN1, in rt5677_i2c_probe()
5619 if (rt5677->pdata.lout1_diff) in rt5677_i2c_probe()
5620 regmap_update_bits(rt5677->regmap, RT5677_LOUT1, in rt5677_i2c_probe()
5623 if (rt5677->pdata.lout2_diff) in rt5677_i2c_probe()
5624 regmap_update_bits(rt5677->regmap, RT5677_LOUT1, in rt5677_i2c_probe()
5627 if (rt5677->pdata.lout3_diff) in rt5677_i2c_probe()
5628 regmap_update_bits(rt5677->regmap, RT5677_LOUT1, in rt5677_i2c_probe()
5631 if (rt5677->pdata.dmic2_clk_pin == RT5677_DMIC_CLK2) { in rt5677_i2c_probe()
5632 regmap_update_bits(rt5677->regmap, RT5677_GEN_CTRL2, in rt5677_i2c_probe()
5640 if (rt5677->pdata.micbias1_vdd_3v3) in rt5677_i2c_probe()
5641 regmap_update_bits(rt5677->regmap, RT5677_MICBIAS, in rt5677_i2c_probe()
5648 dev_err(&i2c->dev, "Failed to initialize irq: %d\n", ret); in rt5677_i2c_probe()
5650 return devm_snd_soc_register_component(&i2c->dev, in rt5677_i2c_probe()