Lines Matching +full:adc +full:- +full:dev

1 // SPDX-License-Identifier: GPL-2.0-only
3 // rt5682s.c -- RT5682I-VS ALSA SoC audio component driver
25 #include <sound/soc-dapm.h>
38 .dai_clk_names[RT5682S_DAI_WCLK_IDX] = "rt5682-dai-wclk",
39 .dai_clk_names[RT5682S_DAI_BCLK_IDX] = "rt5682-dai-bclk",
46 [RT5682S_SUPPLY_LDO1_IN] = "LDO1-IN",
65 struct device *dev) in rt5682s_apply_patch_list() argument
69 ret = regmap_multi_reg_write(rt5682s->regmap, patch_list, ARRAY_SIZE(patch_list)); in rt5682s_apply_patch_list()
71 dev_warn(dev, "Failed to apply regmap patch: %d\n", ret); in rt5682s_apply_patch_list()
440 static bool rt5682s_volatile_register(struct device *dev, unsigned int reg) in rt5682s_volatile_register() argument
482 static bool rt5682s_readable_register(struct device *dev, unsigned int reg) in rt5682s_readable_register() argument
624 regmap_write(rt5682s->regmap, RT5682S_RESET, 0); in rt5682s_reset()
634 dev_dbg(component->dev, "%s btn_type=%x\n", __func__, btn_type); in rt5682s_button_detect()
651 mutex_lock(&rt5682s->sar_mutex); in rt5682s_sar_power_mode()
695 dev_err(component->dev, "Invalid SAR Power mode: %d\n", mode); in rt5682s_sar_power_mode()
699 mutex_unlock(&rt5682s->sar_mutex); in rt5682s_sar_power_mode()
733 * rt5682s_headset_detect - Detect headset.
782 dev_dbg(component->dev, "%s, val=%d, count=%d\n", __func__, val, count); in rt5682s_headset_detect()
810 if (!rt5682s->wclk_enabled) { in rt5682s_headset_detect()
824 dev_dbg(component->dev, "jack_type = %d\n", jack_type); in rt5682s_headset_detect()
836 if (!rt5682s->component || in rt5682s_jack_detect_handler()
837 !snd_soc_card_is_instantiated(rt5682s->component->card)) { in rt5682s_jack_detect_handler()
840 &rt5682s->jack_detect_work, msecs_to_jiffies(15)); in rt5682s_jack_detect_handler()
844 dapm = snd_soc_component_get_dapm(rt5682s->component); in rt5682s_jack_detect_handler()
847 mutex_lock(&rt5682s->calibrate_mutex); in rt5682s_jack_detect_handler()
848 mutex_lock(&rt5682s->wclk_mutex); in rt5682s_jack_detect_handler()
850 val = snd_soc_component_read(rt5682s->component, RT5682S_AJD1_CTRL) in rt5682s_jack_detect_handler()
854 if (rt5682s->jack_type == 0) { in rt5682s_jack_detect_handler()
856 rt5682s->jack_type = rt5682s_headset_detect(rt5682s->component, 1); in rt5682s_jack_detect_handler()
857 rt5682s->irq_work_delay_time = 0; in rt5682s_jack_detect_handler()
858 } else if ((rt5682s->jack_type & SND_JACK_HEADSET) == SND_JACK_HEADSET) { in rt5682s_jack_detect_handler()
860 rt5682s->jack_type = SND_JACK_HEADSET; in rt5682s_jack_detect_handler()
861 btn_type = rt5682s_button_detect(rt5682s->component); in rt5682s_jack_detect_handler()
873 rt5682s->jack_type |= SND_JACK_BTN_0; in rt5682s_jack_detect_handler()
878 rt5682s->jack_type |= SND_JACK_BTN_1; in rt5682s_jack_detect_handler()
883 rt5682s->jack_type |= SND_JACK_BTN_2; in rt5682s_jack_detect_handler()
888 rt5682s->jack_type |= SND_JACK_BTN_3; in rt5682s_jack_detect_handler()
893 dev_err(rt5682s->component->dev, in rt5682s_jack_detect_handler()
900 rt5682s->jack_type = rt5682s_headset_detect(rt5682s->component, 0); in rt5682s_jack_detect_handler()
901 rt5682s->irq_work_delay_time = 50; in rt5682s_jack_detect_handler()
904 mutex_unlock(&rt5682s->wclk_mutex); in rt5682s_jack_detect_handler()
905 mutex_unlock(&rt5682s->calibrate_mutex); in rt5682s_jack_detect_handler()
908 snd_soc_jack_report(rt5682s->hs_jack, rt5682s->jack_type, in rt5682s_jack_detect_handler()
912 if (rt5682s->jack_type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 | in rt5682s_jack_detect_handler()
914 schedule_delayed_work(&rt5682s->jd_check_work, 0); in rt5682s_jack_detect_handler()
916 cancel_delayed_work_sync(&rt5682s->jd_check_work); in rt5682s_jack_detect_handler()
924 if (snd_soc_component_read(rt5682s->component, RT5682S_AJD1_CTRL) & RT5682S_JDH_RS_MASK) { in rt5682s_jd_check_handler()
926 schedule_delayed_work(&rt5682s->jack_detect_work, 0); in rt5682s_jd_check_handler()
928 schedule_delayed_work(&rt5682s->jd_check_work, 500); in rt5682s_jd_check_handler()
936 mod_delayed_work(system_power_efficient_wq, &rt5682s->jack_detect_work, in rt5682s_irq()
937 msecs_to_jiffies(rt5682s->irq_work_delay_time)); in rt5682s_irq()
948 rt5682s->hs_jack = hs_jack; in rt5682s_set_jack_detect()
951 regmap_update_bits(rt5682s->regmap, RT5682S_IRQ_CTRL_2, in rt5682s_set_jack_detect()
953 regmap_update_bits(rt5682s->regmap, RT5682S_RC_CLK_CTRL, in rt5682s_set_jack_detect()
955 cancel_delayed_work_sync(&rt5682s->jack_detect_work); in rt5682s_set_jack_detect()
960 switch (rt5682s->pdata.jd_src) { in rt5682s_set_jack_detect()
962 regmap_update_bits(rt5682s->regmap, RT5682S_CBJ_CTRL_5, in rt5682s_set_jack_detect()
964 regmap_update_bits(rt5682s->regmap, RT5682S_CBJ_CTRL_2, in rt5682s_set_jack_detect()
966 regmap_update_bits(rt5682s->regmap, RT5682S_CBJ_CTRL_1, in rt5682s_set_jack_detect()
971 regmap_update_bits(rt5682s->regmap, RT5682S_SAR_IL_CMD_1, in rt5682s_set_jack_detect()
973 regmap_update_bits(rt5682s->regmap, RT5682S_GPIO_CTRL_1, in rt5682s_set_jack_detect()
975 regmap_update_bits(rt5682s->regmap, RT5682S_PWR_ANLG_3, in rt5682s_set_jack_detect()
977 regmap_update_bits(rt5682s->regmap, RT5682S_PWR_ANLG_2, in rt5682s_set_jack_detect()
979 regmap_update_bits(rt5682s->regmap, RT5682S_RC_CLK_CTRL, in rt5682s_set_jack_detect()
981 regmap_update_bits(rt5682s->regmap, RT5682S_IRQ_CTRL_2, in rt5682s_set_jack_detect()
984 regmap_update_bits(rt5682s->regmap, RT5682S_4BTN_IL_CMD_4, in rt5682s_set_jack_detect()
987 regmap_update_bits(rt5682s->regmap, RT5682S_4BTN_IL_CMD_5, in rt5682s_set_jack_detect()
990 regmap_update_bits(rt5682s->regmap, RT5682S_4BTN_IL_CMD_6, in rt5682s_set_jack_detect()
993 regmap_update_bits(rt5682s->regmap, RT5682S_4BTN_IL_CMD_7, in rt5682s_set_jack_detect()
998 &rt5682s->jack_detect_work, msecs_to_jiffies(250)); in rt5682s_set_jack_detect()
1002 regmap_update_bits(rt5682s->regmap, RT5682S_IRQ_CTRL_2, in rt5682s_set_jack_detect()
1004 regmap_update_bits(rt5682s->regmap, RT5682S_RC_CLK_CTRL, in rt5682s_set_jack_detect()
1009 dev_warn(component->dev, "Wrong JD source\n"); in rt5682s_set_jack_detect()
1016 static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -9562, 75, 0);
1017 static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -1725, 75, 0);
1019 static const DECLARE_TLV_DB_SCALE(cbj_bst_tlv, -1200, 150, 0);
1030 /* ADC Digital Volume Control */
1031 SOC_DOUBLE("STO1 ADC Capture Switch", RT5682S_STO1_ADC_DIG_VOL,
1033 SOC_DOUBLE_TLV("STO1 ADC Capture Volume", RT5682S_STO1_ADC_DIG_VOL,
1036 /* ADC Boost Volume Control */
1037 SOC_DOUBLE_TLV("STO1 ADC Boost Gain Volume", RT5682S_STO1_ADC_BOOST,
1042 * rt5682s_sel_asrc_clk_src - select ASRC clock source for a set of filters
1065 return -EINVAL; in rt5682s_sel_asrc_clk_src()
1090 if (rt5682s->sysclk < target) { in rt5682s_div_sel()
1091 dev_err(rt5682s->component->dev, in rt5682s_div_sel()
1092 "sysclk rate %d is too low\n", rt5682s->sysclk); in rt5682s_div_sel()
1096 for (i = 0; i < size - 1; i++) { in rt5682s_div_sel()
1097 dev_dbg(rt5682s->component->dev, "div[%d]=%d\n", i, div[i]); in rt5682s_div_sel()
1098 if (target * div[i] == rt5682s->sysclk) in rt5682s_div_sel()
1100 if (target * div[i + 1] > rt5682s->sysclk) { in rt5682s_div_sel()
1101 dev_dbg(rt5682s->component->dev, in rt5682s_div_sel()
1102 "can't find div for sysclk %d\n", rt5682s->sysclk); in rt5682s_div_sel()
1107 if (target * div[i] < rt5682s->sysclk) in rt5682s_div_sel()
1108 dev_err(rt5682s->component->dev, in rt5682s_div_sel()
1109 "sysclk rate %d is too high\n", rt5682s->sysclk); in rt5682s_div_sel()
1111 return size - 1; in rt5682s_div_sel()
1120 return -EINVAL; in get_clk_info()
1127 return -EINVAL; in get_clk_info()
1131 * set_dmic_clk - Set parameter of dmic.
1143 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in set_dmic_clk()
1148 if (rt5682s->pdata.dmic_clk_rate) in set_dmic_clk()
1149 dmic_clk_rate = rt5682s->pdata.dmic_clk_rate; in set_dmic_clk()
1162 struct snd_soc_component *component = rt5682s->component; in rt5682s_set_pllb_power()
1182 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in set_pllb_event()
1186 if (rt5682s->wclk_enabled) in set_pllb_event()
1199 struct snd_soc_component *component = rt5682s->component; in rt5682s_set_filter_clk()
1211 if (rt5682s->sysclk <= 12288000 * div_o[idx]) in rt5682s_set_filter_clk()
1223 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in set_filter_clk()
1230 if (w->shift == RT5682S_PWR_ADC_S1F_BIT && val == RT5682S_GP4_PIN_ADCDAT2) in set_filter_clk()
1231 ref = 256 * rt5682s->lrck[RT5682S_AIF2]; in set_filter_clk()
1233 ref = 256 * rt5682s->lrck[RT5682S_AIF1]; in set_filter_clk()
1235 if (w->shift == RT5682S_PWR_ADC_S1F_BIT) in set_filter_clk()
1248 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in set_dmic_power()
1252 if (rt5682s->pdata.dmic_delay) in set_dmic_power()
1253 delay = rt5682s->pdata.dmic_delay; in set_dmic_power()
1269 if (!rt5682s->jack_type && !rt5682s->wclk_enabled) { in set_dmic_power()
1281 struct snd_soc_component *component = rt5682s->component; in rt5682s_set_i2s()
1302 if (on && rt5682s->master[id]) { in rt5682s_set_i2s()
1303 pre_div = get_clk_info(rt5682s->sysclk, rt5682s->lrck[id]); in rt5682s_set_i2s()
1305 dev_err(component->dev, "get pre_div failed\n"); in rt5682s_set_i2s()
1309 dev_dbg(component->dev, "lrck is %dHz and pre_div is %d for iis %d master\n", in rt5682s_set_i2s()
1310 rt5682s->lrck[id], pre_div, id); in rt5682s_set_i2s()
1320 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in set_i2s_event()
1327 if (!snd_soc_dapm_widget_name_cmp(w, "I2S1") && !rt5682s->wclk_enabled) in set_i2s_event()
1338 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in is_sys_clk_from_plla()
1341 if ((rt5682s->sysclk_src == RT5682S_CLK_SRC_PLL1) || in is_sys_clk_from_plla()
1342 (rt5682s->sysclk_src == RT5682S_CLK_SRC_PLL2 && rt5682s->pll_comb == USE_PLLAB)) in is_sys_clk_from_plla()
1351 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in is_sys_clk_from_pllb()
1354 if (rt5682s->sysclk_src == RT5682S_CLK_SRC_PLL2) in is_sys_clk_from_pllb()
1364 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in is_using_asrc()
1366 switch (w->shift) { in is_using_asrc()
1392 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5682s_hp_amp_event()
1437 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5682s_stereo1_adc_mixl_event()
1441 if (rt5682s->pdata.amic_delay) in rt5682s_stereo1_adc_mixl_event()
1442 delay = rt5682s->pdata.amic_delay; in rt5682s_stereo1_adc_mixl_event()
1462 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in sar_power_event()
1465 if ((rt5682s->jack_type & SND_JACK_HEADSET) != SND_JACK_HEADSET) in sar_power_event()
1501 SOC_DAPM_ENUM("IF2 ADC Swap Mux", rt5682s_if2_adc_enum);
1504 SOC_DAPM_ENUM("IF1 01 ADC Swap Mux", rt5682s_if1_01_adc_enum);
1507 SOC_DAPM_ENUM("IF1 23 ADC Swap Mux", rt5682s_if1_23_adc_enum);
1510 SOC_DAPM_ENUM("IF1 45 ADC Swap Mux", rt5682s_if1_45_adc_enum);
1513 SOC_DAPM_ENUM("IF1 67 ADC Swap Mux", rt5682s_if1_67_adc_enum);
1531 SOC_DAPM_SINGLE("Stereo ADC Switch", RT5682S_AD_DA_MIXER,
1538 SOC_DAPM_SINGLE("Stereo ADC Switch", RT5682S_AD_DA_MIXER,
1570 /* MX-26 [13] [5] */
1572 "DAC MIX", "ADC"
1587 /* STO1 ADC Source */
1588 /* MX-26 [11:10] [3:2] */
1606 /* MX-26 [12] [4] */
1623 /* MX-79 [6:4] I2S1 ADC data location */
1637 SOC_DAPM_ENUM("IF1 ADC Slot location", rt5682s_if1_adc_slot_enum);
1640 /* MX-2B [4], MX-2B [0]*/
1695 SND_SOC_DAPM_SUPPLY_S("ADC STO1 ASRC", 1, RT5682S_PLL_TRACK_1,
1745 /* ADC Mux */
1746 SND_SOC_DAPM_MUX("Stereo1 ADC L1 Mux", SND_SOC_NOPM, 0, 0,
1748 SND_SOC_DAPM_MUX("Stereo1 ADC R1 Mux", SND_SOC_NOPM, 0, 0,
1750 SND_SOC_DAPM_MUX("Stereo1 ADC L2 Mux", SND_SOC_NOPM, 0, 0,
1752 SND_SOC_DAPM_MUX("Stereo1 ADC R2 Mux", SND_SOC_NOPM, 0, 0,
1754 SND_SOC_DAPM_MUX("Stereo1 ADC L Mux", SND_SOC_NOPM, 0, 0,
1756 SND_SOC_DAPM_MUX("Stereo1 ADC R Mux", SND_SOC_NOPM, 0, 0,
1761 /* ADC Mixer */
1762 SND_SOC_DAPM_SUPPLY("ADC Stereo1 Filter", RT5682S_PWR_DIG_2,
1764 SND_SOC_DAPM_MIXER_E("Stereo1 ADC MIXL", SND_SOC_NOPM, 0, 0,
1768 SND_SOC_DAPM_MIXER("Stereo1 ADC MIXR", RT5682S_STO1_ADC_DIG_VOL,
1772 /* ADC PGA */
1773 SND_SOC_DAPM_PGA("Stereo1 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
1784 SND_SOC_DAPM_MUX("IF1 01 ADC Swap Mux", SND_SOC_NOPM, 0, 0,
1786 SND_SOC_DAPM_MUX("IF1 23 ADC Swap Mux", SND_SOC_NOPM, 0, 0,
1788 SND_SOC_DAPM_MUX("IF1 45 ADC Swap Mux", SND_SOC_NOPM, 0, 0,
1790 SND_SOC_DAPM_MUX("IF1 67 ADC Swap Mux", SND_SOC_NOPM, 0, 0,
1792 SND_SOC_DAPM_MUX("IF2 ADC Swap Mux", SND_SOC_NOPM, 0, 0,
1850 {"ADC Stereo1 Filter", NULL, "PLLA", is_sys_clk_from_plla},
1851 {"ADC Stereo1 Filter", NULL, "PLLB", is_sys_clk_from_pllb},
1859 {"ADC Stereo1 Filter", NULL, "ADC STO1 ASRC", is_using_asrc},
1861 {"ADC STO1 ASRC", NULL, "AD ASRC"},
1862 {"ADC STO1 ASRC", NULL, "DA ASRC"},
1889 {"Stereo1 ADC L Mux", "ADC1 L", "ADC1 L"},
1890 {"Stereo1 ADC L Mux", "ADC1 R", "ADC1 R"},
1891 {"Stereo1 ADC R Mux", "ADC1 L", "ADC1 L"},
1892 {"Stereo1 ADC R Mux", "ADC1 R", "ADC1 R"},
1894 {"Stereo1 ADC L1 Mux", "ADC", "Stereo1 ADC L Mux"},
1895 {"Stereo1 ADC L1 Mux", "DAC MIX", "Stereo1 DAC MIXL"},
1896 {"Stereo1 ADC L2 Mux", "DMIC", "DMIC L1"},
1897 {"Stereo1 ADC L2 Mux", "DAC MIX", "Stereo1 DAC MIXL"},
1899 {"Stereo1 ADC R1 Mux", "ADC", "Stereo1 ADC R Mux"},
1900 {"Stereo1 ADC R1 Mux", "DAC MIX", "Stereo1 DAC MIXR"},
1901 {"Stereo1 ADC R2 Mux", "DMIC", "DMIC R1"},
1902 {"Stereo1 ADC R2 Mux", "DAC MIX", "Stereo1 DAC MIXR"},
1904 {"Stereo1 ADC MIXL", "ADC1 Switch", "Stereo1 ADC L1 Mux"},
1905 {"Stereo1 ADC MIXL", "ADC2 Switch", "Stereo1 ADC L2 Mux"},
1906 {"Stereo1 ADC MIXL", NULL, "ADC Stereo1 Filter"},
1908 {"Stereo1 ADC MIXR", "ADC1 Switch", "Stereo1 ADC R1 Mux"},
1909 {"Stereo1 ADC MIXR", "ADC2 Switch", "Stereo1 ADC R2 Mux"},
1910 {"Stereo1 ADC MIXR", NULL, "ADC Stereo1 Filter"},
1912 {"Stereo1 ADC MIX", NULL, "Stereo1 ADC MIXL"},
1913 {"Stereo1 ADC MIX", NULL, "Stereo1 ADC MIXR"},
1915 {"IF1 01 ADC Swap Mux", "L/R", "Stereo1 ADC MIX"},
1916 {"IF1 01 ADC Swap Mux", "L/L", "Stereo1 ADC MIX"},
1917 {"IF1 01 ADC Swap Mux", "R/L", "Stereo1 ADC MIX"},
1918 {"IF1 01 ADC Swap Mux", "R/R", "Stereo1 ADC MIX"},
1919 {"IF1 23 ADC Swap Mux", "L/R", "Stereo1 ADC MIX"},
1920 {"IF1 23 ADC Swap Mux", "R/L", "Stereo1 ADC MIX"},
1921 {"IF1 23 ADC Swap Mux", "L/L", "Stereo1 ADC MIX"},
1922 {"IF1 23 ADC Swap Mux", "R/R", "Stereo1 ADC MIX"},
1923 {"IF1 45 ADC Swap Mux", "L/R", "Stereo1 ADC MIX"},
1924 {"IF1 45 ADC Swap Mux", "R/L", "Stereo1 ADC MIX"},
1925 {"IF1 45 ADC Swap Mux", "L/L", "Stereo1 ADC MIX"},
1926 {"IF1 45 ADC Swap Mux", "R/R", "Stereo1 ADC MIX"},
1927 {"IF1 67 ADC Swap Mux", "L/R", "Stereo1 ADC MIX"},
1928 {"IF1 67 ADC Swap Mux", "R/L", "Stereo1 ADC MIX"},
1929 {"IF1 67 ADC Swap Mux", "L/L", "Stereo1 ADC MIX"},
1930 {"IF1 67 ADC Swap Mux", "R/R", "Stereo1 ADC MIX"},
1932 {"IF1_ADC Mux", "Slot 0", "IF1 01 ADC Swap Mux"},
1933 {"IF1_ADC Mux", "Slot 2", "IF1 23 ADC Swap Mux"},
1934 {"IF1_ADC Mux", "Slot 4", "IF1 45 ADC Swap Mux"},
1935 {"IF1_ADC Mux", "Slot 6", "IF1 67 ADC Swap Mux"},
1939 {"IF2 ADC Swap Mux", "L/R", "Stereo1 ADC MIX"},
1940 {"IF2 ADC Swap Mux", "R/L", "Stereo1 ADC MIX"},
1941 {"IF2 ADC Swap Mux", "L/L", "Stereo1 ADC MIX"},
1942 {"IF2 ADC Swap Mux", "R/R", "Stereo1 ADC MIX"},
1943 {"ADCDAT Mux", "ADCDAT2", "IF2 ADC Swap Mux"},
1953 {"DAC1 MIXL", "Stereo ADC Switch", "Stereo1 ADC MIXL"},
1955 {"DAC1 MIXR", "Stereo ADC Switch", "Stereo1 ADC MIXR"},
1984 struct snd_soc_component *component = dai->component; in rt5682s_set_tdm_slot()
1998 dev_err(component->dev, "Invalid or oversized Tx slots.\n"); in rt5682s_set_tdm_slot()
1999 return -EINVAL; in rt5682s_set_tdm_slot()
2001 val |= (tx_slotnum - 1) << RT5682S_TDM_ADC_DL_SFT; in rt5682s_set_tdm_slot()
2020 return -EINVAL; in rt5682s_set_tdm_slot()
2030 return -EINVAL; in rt5682s_set_tdm_slot()
2050 return -EINVAL; in rt5682s_set_tdm_slot()
2064 struct snd_soc_component *component = dai->component; in rt5682s_hw_params()
2069 rt5682s->lrck[dai->id] = params_rate(params); in rt5682s_hw_params()
2073 dev_err(component->dev, "Unsupported frame size: %d\n", frame_size); in rt5682s_hw_params()
2074 return -EINVAL; in rt5682s_hw_params()
2097 return -EINVAL; in rt5682s_hw_params()
2100 switch (dai->id) { in rt5682s_hw_params()
2122 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id); in rt5682s_hw_params()
2123 return -EINVAL; in rt5682s_hw_params()
2131 struct snd_soc_component *component = dai->component; in rt5682s_set_dai_fmt()
2137 rt5682s->master[dai->id] = 1; in rt5682s_set_dai_fmt()
2140 rt5682s->master[dai->id] = 0; in rt5682s_set_dai_fmt()
2143 return -EINVAL; in rt5682s_set_dai_fmt()
2154 if (dai->id == RT5682S_AIF1) in rt5682s_set_dai_fmt()
2157 return -EINVAL; in rt5682s_set_dai_fmt()
2160 if (dai->id == RT5682S_AIF1) in rt5682s_set_dai_fmt()
2164 return -EINVAL; in rt5682s_set_dai_fmt()
2167 return -EINVAL; in rt5682s_set_dai_fmt()
2186 return -EINVAL; in rt5682s_set_dai_fmt()
2189 switch (dai->id) { in rt5682s_set_dai_fmt()
2197 tdm_ctrl | rt5682s->master[dai->id]); in rt5682s_set_dai_fmt()
2200 if (rt5682s->master[dai->id] == 0) in rt5682s_set_dai_fmt()
2207 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id); in rt5682s_set_dai_fmt()
2208 return -EINVAL; in rt5682s_set_dai_fmt()
2219 if (freq == rt5682s->sysclk && clk_id == rt5682s->sysclk_src) in rt5682s_set_component_sysclk()
2236 dev_err(component->dev, "Invalid clock id (%d)\n", clk_id); in rt5682s_set_component_sysclk()
2237 return -EINVAL; in rt5682s_set_component_sysclk()
2247 rt5682s->sysclk = freq; in rt5682s_set_component_sysclk()
2248 rt5682s->sysclk_src = clk_id; in rt5682s_set_component_sysclk()
2250 dev_dbg(component->dev, "Sysclk is %dHz and clock id is %d\n", in rt5682s_set_component_sysclk()
2314 for (i = ARRAY_SIZE(plla_table) - 1; i >= 0; i--) { in find_pll_inter_combination()
2316 for (j = ARRAY_SIZE(pllb_table) - 1; j >= 0; j--) { in find_pll_inter_combination()
2327 return -EINVAL; in find_pll_inter_combination()
2337 if (source == rt5682s->pll_src[pll_id] && freq_in == rt5682s->pll_in[pll_id] && in rt5682s_set_component_pll()
2338 freq_out == rt5682s->pll_out[pll_id]) in rt5682s_set_component_pll()
2342 dev_dbg(component->dev, "PLL disabled\n"); in rt5682s_set_component_pll()
2343 rt5682s->pll_in[pll_id] = 0; in rt5682s_set_component_pll()
2344 rt5682s->pll_out[pll_id] = 0; in rt5682s_set_component_pll()
2360 dev_err(component->dev, "Unknown PLL Source %d\n", source); in rt5682s_set_component_pll()
2361 return -EINVAL; in rt5682s_set_component_pll()
2364 rt5682s->pll_comb = find_pll_inter_combination(freq_in, freq_out, in rt5682s_set_component_pll()
2367 if ((pll_id == RT5682S_PLL1 && rt5682s->pll_comb == USE_PLLA) || in rt5682s_set_component_pll()
2368 (pll_id == RT5682S_PLL2 && (rt5682s->pll_comb == USE_PLLB || in rt5682s_set_component_pll()
2369 rt5682s->pll_comb == USE_PLLAB))) { in rt5682s_set_component_pll()
2370 dev_dbg(component->dev, in rt5682s_set_component_pll()
2371 "Supported freq conversion for PLL%d:(%d->%d): %d\n", in rt5682s_set_component_pll()
2372 pll_id + 1, freq_in, freq_out, rt5682s->pll_comb); in rt5682s_set_component_pll()
2374 dev_err(component->dev, in rt5682s_set_component_pll()
2375 "Unsupported freq conversion for PLL%d:(%d->%d): %d\n", in rt5682s_set_component_pll()
2376 pll_id + 1, freq_in, freq_out, rt5682s->pll_comb); in rt5682s_set_component_pll()
2377 return -EINVAL; in rt5682s_set_component_pll()
2380 if (rt5682s->pll_comb == USE_PLLA || rt5682s->pll_comb == USE_PLLAB) { in rt5682s_set_component_pll()
2381 dev_dbg(component->dev, in rt5682s_set_component_pll()
2396 if (rt5682s->pll_comb == USE_PLLB || rt5682s->pll_comb == USE_PLLAB) { in rt5682s_set_component_pll()
2397 dev_dbg(component->dev, in rt5682s_set_component_pll()
2416 if (rt5682s->pll_comb == USE_PLLB) in rt5682s_set_component_pll()
2420 rt5682s->pll_in[pll_id] = freq_in; in rt5682s_set_component_pll()
2421 rt5682s->pll_out[pll_id] = freq_out; in rt5682s_set_component_pll()
2422 rt5682s->pll_src[pll_id] = source; in rt5682s_set_component_pll()
2430 struct snd_soc_component *component = dai->component; in rt5682s_set_bclk1_ratio()
2433 rt5682s->bclk[dai->id] = ratio; in rt5682s_set_bclk1_ratio()
2453 dev_err(dai->dev, "Invalid bclk1 ratio %d\n", ratio); in rt5682s_set_bclk1_ratio()
2454 return -EINVAL; in rt5682s_set_bclk1_ratio()
2462 struct snd_soc_component *component = dai->component; in rt5682s_set_bclk2_ratio()
2465 rt5682s->bclk[dai->id] = ratio; in rt5682s_set_bclk2_ratio()
2477 dev_err(dai->dev, "Invalid bclk2 ratio %d\n", ratio); in rt5682s_set_bclk2_ratio()
2478 return -EINVAL; in rt5682s_set_bclk2_ratio()
2491 regmap_update_bits(rt5682s->regmap, RT5682S_PWR_DIG_1, in rt5682s_set_bias_level()
2496 regmap_update_bits(rt5682s->regmap, RT5682S_PWR_DIG_1, in rt5682s_set_bias_level()
2500 regmap_update_bits(rt5682s->regmap, RT5682S_PWR_DIG_1, RT5682S_PWR_LDO, 0); in rt5682s_set_bias_level()
2501 if (!rt5682s->wclk_enabled) in rt5682s_set_bias_level()
2502 regmap_update_bits(rt5682s->regmap, RT5682S_PWR_DIG_1, in rt5682s_set_bias_level()
2519 if (!rt5682s->master[RT5682S_AIF1]) { in rt5682s_clk_check()
2520 dev_dbg(rt5682s->component->dev, "dai clk fmt not set correctly\n"); in rt5682s_clk_check()
2530 struct snd_soc_component *component = rt5682s->component; in rt5682s_wclk_prepare()
2534 return -EINVAL; in rt5682s_wclk_prepare()
2536 mutex_lock(&rt5682s->wclk_mutex); in rt5682s_wclk_prepare()
2552 ref = 256 * rt5682s->lrck[RT5682S_AIF1]; in rt5682s_wclk_prepare()
2556 rt5682s->wclk_enabled = 1; in rt5682s_wclk_prepare()
2558 mutex_unlock(&rt5682s->wclk_mutex); in rt5682s_wclk_prepare()
2567 struct snd_soc_component *component = rt5682s->component; in rt5682s_wclk_unprepare()
2572 mutex_lock(&rt5682s->wclk_mutex); in rt5682s_wclk_unprepare()
2574 if (!rt5682s->jack_type) in rt5682s_wclk_unprepare()
2586 rt5682s->wclk_enabled = 0; in rt5682s_wclk_unprepare()
2588 mutex_unlock(&rt5682s->wclk_mutex); in rt5682s_wclk_unprepare()
2596 struct snd_soc_component *component = rt5682s->component; in rt5682s_wclk_recalc_rate()
2604 if (rt5682s->lrck[RT5682S_AIF1] != CLK_48 && in rt5682s_wclk_recalc_rate()
2605 rt5682s->lrck[RT5682S_AIF1] != CLK_44) { in rt5682s_wclk_recalc_rate()
2606 dev_warn(component->dev, "%s: clk %s only support %d or %d Hz output\n", in rt5682s_wclk_recalc_rate()
2611 return rt5682s->lrck[RT5682S_AIF1]; in rt5682s_wclk_recalc_rate()
2619 struct snd_soc_component *component = rt5682s->component; in rt5682s_wclk_determine_rate()
2623 return -EINVAL; in rt5682s_wclk_determine_rate()
2628 if (req->rate != CLK_48 && req->rate != CLK_44) { in rt5682s_wclk_determine_rate()
2629 dev_warn(component->dev, "%s: clk %s only support %d or %d Hz output\n", in rt5682s_wclk_determine_rate()
2631 req->rate = CLK_48; in rt5682s_wclk_determine_rate()
2642 struct snd_soc_component *component = rt5682s->component; in rt5682s_wclk_set_rate()
2648 return -EINVAL; in rt5682s_wclk_set_rate()
2657 parent_clk = clk_get_parent(hw->clk); in rt5682s_wclk_set_rate()
2659 dev_warn(component->dev, in rt5682s_wclk_set_rate()
2664 dev_warn(component->dev, "clk %s only support %d Hz input\n", in rt5682s_wclk_set_rate()
2678 rt5682s->lrck[RT5682S_AIF1] = rate; in rt5682s_wclk_set_rate()
2688 struct snd_soc_component *component = rt5682s->component; in rt5682s_bclk_recalc_rate()
2730 if (!req->best_parent_rate || !rt5682s_clk_check(rt5682s)) in rt5682s_bclk_determine_rate()
2731 return -EINVAL; in rt5682s_bclk_determine_rate()
2740 factor = rt5682s_bclk_get_factor(req->rate, req->best_parent_rate); in rt5682s_bclk_determine_rate()
2742 req->rate = req->best_parent_rate * factor; in rt5682s_bclk_determine_rate()
2752 struct snd_soc_component *component = rt5682s->component; in rt5682s_bclk_set_rate()
2757 return -EINVAL; in rt5682s_bclk_set_rate()
2762 if (dai->id == RT5682S_AIF1) in rt5682s_bclk_set_rate()
2765 dev_err(component->dev, "dai %d not found in component\n", in rt5682s_bclk_set_rate()
2767 return -ENODEV; in rt5682s_bclk_set_rate()
2787 struct device *dev = component->dev; in rt5682s_register_dai_clks() local
2789 struct rt5682s_platform_data *pdata = &rt5682s->pdata; in rt5682s_register_dai_clks()
2798 dai_clk_hw = &rt5682s->dai_clks_hw[i]; in rt5682s_register_dai_clks()
2803 if (rt5682s->mclk) { in rt5682s_register_dai_clks()
2813 parent = &rt5682s->dai_clks_hw[RT5682S_DAI_WCLK_IDX]; in rt5682s_register_dai_clks()
2818 dev_err(dev, "Invalid clock index\n"); in rt5682s_register_dai_clks()
2819 return -EINVAL; in rt5682s_register_dai_clks()
2822 init.name = pdata->dai_clk_names[i]; in rt5682s_register_dai_clks()
2825 dai_clk_hw->init = &init; in rt5682s_register_dai_clks()
2827 ret = devm_clk_hw_register(dev, dai_clk_hw); in rt5682s_register_dai_clks()
2829 dev_warn(dev, "Failed to register %s: %d\n", init.name, ret); in rt5682s_register_dai_clks()
2833 if (dev->of_node) { in rt5682s_register_dai_clks()
2834 ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get, dai_clk_hw); in rt5682s_register_dai_clks()
2838 ret = devm_clk_hw_register_clkdev(dev, dai_clk_hw, in rt5682s_register_dai_clks()
2839 init.name, dev_name(dev)); in rt5682s_register_dai_clks()
2854 rt5682s->mclk = devm_clk_get_optional(component->dev, "mclk"); in rt5682s_dai_probe_clks()
2855 if (IS_ERR(rt5682s->mclk)) in rt5682s_dai_probe_clks()
2856 return PTR_ERR(rt5682s->mclk); in rt5682s_dai_probe_clks()
2864 rt5682s->lrck[RT5682S_AIF1] = CLK_48; in rt5682s_dai_probe_clks()
2879 rt5682s->component = component; in rt5682s_probe()
2896 if (rt5682s->irq) in rt5682s_suspend()
2897 disable_irq(rt5682s->irq); in rt5682s_suspend()
2899 cancel_delayed_work_sync(&rt5682s->jack_detect_work); in rt5682s_suspend()
2900 cancel_delayed_work_sync(&rt5682s->jd_check_work); in rt5682s_suspend()
2902 if (rt5682s->hs_jack) in rt5682s_suspend()
2903 rt5682s->jack_type = rt5682s_headset_detect(component, 0); in rt5682s_suspend()
2905 regcache_cache_only(rt5682s->regmap, true); in rt5682s_suspend()
2906 regcache_mark_dirty(rt5682s->regmap); in rt5682s_suspend()
2915 regcache_cache_only(rt5682s->regmap, false); in rt5682s_resume()
2916 regcache_sync(rt5682s->regmap); in rt5682s_resume()
2918 if (rt5682s->hs_jack) { in rt5682s_resume()
2920 &rt5682s->jack_detect_work, msecs_to_jiffies(0)); in rt5682s_resume()
2923 if (rt5682s->irq) in rt5682s_resume()
2924 enable_irq(rt5682s->irq); in rt5682s_resume()
2965 static int rt5682s_parse_dt(struct rt5682s_priv *rt5682s, struct device *dev) in rt5682s_parse_dt() argument
2967 device_property_read_u32(dev, "realtek,dmic1-data-pin", in rt5682s_parse_dt()
2968 &rt5682s->pdata.dmic1_data_pin); in rt5682s_parse_dt()
2969 device_property_read_u32(dev, "realtek,dmic1-clk-pin", in rt5682s_parse_dt()
2970 &rt5682s->pdata.dmic1_clk_pin); in rt5682s_parse_dt()
2971 device_property_read_u32(dev, "realtek,jd-src", in rt5682s_parse_dt()
2972 &rt5682s->pdata.jd_src); in rt5682s_parse_dt()
2973 device_property_read_u32(dev, "realtek,dmic-clk-rate-hz", in rt5682s_parse_dt()
2974 &rt5682s->pdata.dmic_clk_rate); in rt5682s_parse_dt()
2975 device_property_read_u32(dev, "realtek,dmic-delay-ms", in rt5682s_parse_dt()
2976 &rt5682s->pdata.dmic_delay); in rt5682s_parse_dt()
2977 device_property_read_u32(dev, "realtek,amic-delay-ms", in rt5682s_parse_dt()
2978 &rt5682s->pdata.amic_delay); in rt5682s_parse_dt()
2979 device_property_read_u32(dev, "realtek,ldo-sel", in rt5682s_parse_dt()
2980 &rt5682s->pdata.ldo_dacref); in rt5682s_parse_dt()
2982 if (device_property_read_string_array(dev, "clock-output-names", in rt5682s_parse_dt()
2983 rt5682s->pdata.dai_clk_names, in rt5682s_parse_dt()
2985 dev_warn(dev, "Using default DAI clk names: %s, %s\n", in rt5682s_parse_dt()
2986 rt5682s->pdata.dai_clk_names[RT5682S_DAI_WCLK_IDX], in rt5682s_parse_dt()
2987 rt5682s->pdata.dai_clk_names[RT5682S_DAI_BCLK_IDX]); in rt5682s_parse_dt()
2989 rt5682s->pdata.dmic_clk_driving_high = device_property_read_bool(dev, in rt5682s_parse_dt()
2990 "realtek,dmic-clk-driving-high"); in rt5682s_parse_dt()
2999 mutex_lock(&rt5682s->calibrate_mutex); in rt5682s_calibrate()
3001 regmap_write(rt5682s->regmap, RT5682S_PWR_ANLG_1, 0xaa80); in rt5682s_calibrate()
3003 regmap_write(rt5682s->regmap, RT5682S_PWR_ANLG_1, 0xfa80); in rt5682s_calibrate()
3004 regmap_write(rt5682s->regmap, RT5682S_PWR_DIG_1, 0x01c0); in rt5682s_calibrate()
3005 regmap_write(rt5682s->regmap, RT5682S_MICBIAS_2, 0x0380); in rt5682s_calibrate()
3006 regmap_write(rt5682s->regmap, RT5682S_GLB_CLK, 0x8000); in rt5682s_calibrate()
3007 regmap_write(rt5682s->regmap, RT5682S_ADDA_CLK_1, 0x1001); in rt5682s_calibrate()
3008 regmap_write(rt5682s->regmap, RT5682S_CHOP_DAC_2, 0x3030); in rt5682s_calibrate()
3009 regmap_write(rt5682s->regmap, RT5682S_CHOP_ADC, 0xb000); in rt5682s_calibrate()
3010 regmap_write(rt5682s->regmap, RT5682S_STO1_ADC_MIXER, 0x686c); in rt5682s_calibrate()
3011 regmap_write(rt5682s->regmap, RT5682S_CAL_REC, 0x5151); in rt5682s_calibrate()
3012 regmap_write(rt5682s->regmap, RT5682S_HP_CALIB_CTRL_2, 0x0321); in rt5682s_calibrate()
3013 regmap_write(rt5682s->regmap, RT5682S_HP_LOGIC_CTRL_2, 0x0004); in rt5682s_calibrate()
3014 regmap_write(rt5682s->regmap, RT5682S_HP_CALIB_CTRL_1, 0x7c00); in rt5682s_calibrate()
3015 regmap_write(rt5682s->regmap, RT5682S_HP_CALIB_CTRL_1, 0xfc00); in rt5682s_calibrate()
3018 regmap_read(rt5682s->regmap, RT5682S_HP_CALIB_ST_1, &value); in rt5682s_calibrate()
3026 dev_err(rt5682s->component->dev, "HP Calibration Failure\n"); in rt5682s_calibrate()
3029 regmap_write(rt5682s->regmap, RT5682S_MICBIAS_2, 0x0180); in rt5682s_calibrate()
3030 regmap_write(rt5682s->regmap, RT5682S_CAL_REC, 0x5858); in rt5682s_calibrate()
3031 regmap_write(rt5682s->regmap, RT5682S_STO1_ADC_MIXER, 0xc0c4); in rt5682s_calibrate()
3032 regmap_write(rt5682s->regmap, RT5682S_HP_CALIB_CTRL_2, 0x0320); in rt5682s_calibrate()
3033 regmap_write(rt5682s->regmap, RT5682S_PWR_DIG_1, 0x00c0); in rt5682s_calibrate()
3034 regmap_write(rt5682s->regmap, RT5682S_PWR_ANLG_1, 0x0800); in rt5682s_calibrate()
3035 regmap_write(rt5682s->regmap, RT5682S_GLB_CLK, 0x0000); in rt5682s_calibrate()
3037 mutex_unlock(&rt5682s->calibrate_mutex); in rt5682s_calibrate()
3055 .name = "rt5682s-aif1",
3074 .name = "rt5682s-aif2",
3090 struct device *dev = regmap_get_device(rt5682s->regmap); in rt5682s_i2c_disable_regulators() local
3093 ret = regulator_disable(rt5682s->supplies[RT5682S_SUPPLY_AVDD].consumer); in rt5682s_i2c_disable_regulators()
3095 dev_err(dev, "Failed to disable supply AVDD: %d\n", ret); in rt5682s_i2c_disable_regulators()
3097 ret = regulator_disable(rt5682s->supplies[RT5682S_SUPPLY_DBVDD].consumer); in rt5682s_i2c_disable_regulators()
3099 dev_err(dev, "Failed to disable supply DBVDD: %d\n", ret); in rt5682s_i2c_disable_regulators()
3101 ret = regulator_disable(rt5682s->supplies[RT5682S_SUPPLY_LDO1_IN].consumer); in rt5682s_i2c_disable_regulators()
3103 dev_err(dev, "Failed to disable supply LDO1-IN: %d\n", ret); in rt5682s_i2c_disable_regulators()
3107 ret = regulator_disable(rt5682s->supplies[RT5682S_SUPPLY_MICVDD].consumer); in rt5682s_i2c_disable_regulators()
3109 dev_err(dev, "Failed to disable supply MICVDD: %d\n", ret); in rt5682s_i2c_disable_regulators()
3114 struct rt5682s_platform_data *pdata = dev_get_platdata(&i2c->dev); in rt5682s_i2c_probe()
3119 rt5682s = devm_kzalloc(&i2c->dev, sizeof(struct rt5682s_priv), GFP_KERNEL); in rt5682s_i2c_probe()
3121 return -ENOMEM; in rt5682s_i2c_probe()
3125 rt5682s->pdata = i2s_default_platform_data; in rt5682s_i2c_probe()
3128 rt5682s->pdata = *pdata; in rt5682s_i2c_probe()
3130 rt5682s_parse_dt(rt5682s, &i2c->dev); in rt5682s_i2c_probe()
3132 rt5682s->regmap = devm_regmap_init_i2c(i2c, &rt5682s_regmap); in rt5682s_i2c_probe()
3133 if (IS_ERR(rt5682s->regmap)) { in rt5682s_i2c_probe()
3134 ret = PTR_ERR(rt5682s->regmap); in rt5682s_i2c_probe()
3135 dev_err(&i2c->dev, "Failed to allocate register map: %d\n", ret); in rt5682s_i2c_probe()
3139 for (i = 0; i < ARRAY_SIZE(rt5682s->supplies); i++) in rt5682s_i2c_probe()
3140 rt5682s->supplies[i].supply = rt5682s_supply_names[i]; in rt5682s_i2c_probe()
3142 ret = devm_regulator_bulk_get(&i2c->dev, in rt5682s_i2c_probe()
3143 ARRAY_SIZE(rt5682s->supplies), rt5682s->supplies); in rt5682s_i2c_probe()
3145 dev_err(&i2c->dev, "Failed to request supplies: %d\n", ret); in rt5682s_i2c_probe()
3149 ret = devm_add_action_or_reset(&i2c->dev, rt5682s_i2c_disable_regulators, rt5682s); in rt5682s_i2c_probe()
3153 ret = regulator_enable(rt5682s->supplies[RT5682S_SUPPLY_MICVDD].consumer); in rt5682s_i2c_probe()
3155 dev_err(&i2c->dev, "Failed to enable supply MICVDD: %d\n", ret); in rt5682s_i2c_probe()
3160 ret = regulator_enable(rt5682s->supplies[RT5682S_SUPPLY_AVDD].consumer); in rt5682s_i2c_probe()
3162 dev_err(&i2c->dev, "Failed to enable supply AVDD: %d\n", ret); in rt5682s_i2c_probe()
3166 ret = regulator_enable(rt5682s->supplies[RT5682S_SUPPLY_DBVDD].consumer); in rt5682s_i2c_probe()
3168 dev_err(&i2c->dev, "Failed to enable supply DBVDD: %d\n", ret); in rt5682s_i2c_probe()
3172 ret = regulator_enable(rt5682s->supplies[RT5682S_SUPPLY_LDO1_IN].consumer); in rt5682s_i2c_probe()
3174 dev_err(&i2c->dev, "Failed to enable supply LDO1-IN: %d\n", ret); in rt5682s_i2c_probe()
3178 rt5682s->ldo1_en = devm_gpiod_get_optional(&i2c->dev, in rt5682s_i2c_probe()
3179 "realtek,ldo1-en", in rt5682s_i2c_probe()
3181 if (IS_ERR(rt5682s->ldo1_en)) { in rt5682s_i2c_probe()
3182 dev_err(&i2c->dev, "Fail gpio request ldo1_en\n"); in rt5682s_i2c_probe()
3183 return PTR_ERR(rt5682s->ldo1_en); in rt5682s_i2c_probe()
3189 regmap_read(rt5682s->regmap, RT5682S_DEVICE_ID, &val); in rt5682s_i2c_probe()
3191 dev_err(&i2c->dev, "Device with ID register %x is not rt5682s\n", val); in rt5682s_i2c_probe()
3192 return -ENODEV; in rt5682s_i2c_probe()
3196 rt5682s_apply_patch_list(rt5682s, &i2c->dev); in rt5682s_i2c_probe()
3198 regmap_update_bits(rt5682s->regmap, RT5682S_PWR_DIG_2, in rt5682s_i2c_probe()
3202 mutex_init(&rt5682s->calibrate_mutex); in rt5682s_i2c_probe()
3203 mutex_init(&rt5682s->sar_mutex); in rt5682s_i2c_probe()
3204 mutex_init(&rt5682s->wclk_mutex); in rt5682s_i2c_probe()
3207 regmap_update_bits(rt5682s->regmap, RT5682S_MICBIAS_2, in rt5682s_i2c_probe()
3210 regmap_update_bits(rt5682s->regmap, RT5682S_PWR_ANLG_1, in rt5682s_i2c_probe()
3212 regmap_update_bits(rt5682s->regmap, RT5682S_HP_LOGIC_CTRL_2, in rt5682s_i2c_probe()
3214 regmap_update_bits(rt5682s->regmap, RT5682S_HP_CHARGE_PUMP_2, in rt5682s_i2c_probe()
3216 regmap_update_bits(rt5682s->regmap, RT5682S_HP_AMP_DET_CTL_1, in rt5682s_i2c_probe()
3220 switch (rt5682s->pdata.dmic1_data_pin) { in rt5682s_i2c_probe()
3224 regmap_update_bits(rt5682s->regmap, RT5682S_DMIC_CTRL_1, in rt5682s_i2c_probe()
3226 regmap_update_bits(rt5682s->regmap, RT5682S_GPIO_CTRL_1, in rt5682s_i2c_probe()
3230 regmap_update_bits(rt5682s->regmap, RT5682S_DMIC_CTRL_1, in rt5682s_i2c_probe()
3232 regmap_update_bits(rt5682s->regmap, RT5682S_GPIO_CTRL_1, in rt5682s_i2c_probe()
3236 dev_warn(&i2c->dev, "invalid DMIC_DAT pin\n"); in rt5682s_i2c_probe()
3241 switch (rt5682s->pdata.dmic1_clk_pin) { in rt5682s_i2c_probe()
3245 regmap_update_bits(rt5682s->regmap, RT5682S_GPIO_CTRL_1, in rt5682s_i2c_probe()
3249 regmap_update_bits(rt5682s->regmap, RT5682S_GPIO_CTRL_1, in rt5682s_i2c_probe()
3251 if (rt5682s->pdata.dmic_clk_driving_high) in rt5682s_i2c_probe()
3252 regmap_update_bits(rt5682s->regmap, RT5682S_PAD_DRIVING_CTRL, in rt5682s_i2c_probe()
3256 dev_warn(&i2c->dev, "invalid DMIC_CLK pin\n"); in rt5682s_i2c_probe()
3261 switch (rt5682s->pdata.ldo_dacref) { in rt5682s_i2c_probe()
3265 regmap_update_bits(rt5682s->regmap, RT5682S_BIAS_CUR_CTRL_7, in rt5682s_i2c_probe()
3269 regmap_update_bits(rt5682s->regmap, RT5682S_BIAS_CUR_CTRL_7, in rt5682s_i2c_probe()
3273 regmap_update_bits(rt5682s->regmap, RT5682S_BIAS_CUR_CTRL_7, in rt5682s_i2c_probe()
3277 dev_warn(&i2c->dev, "invalid LDO output setting.\n"); in rt5682s_i2c_probe()
3281 INIT_DELAYED_WORK(&rt5682s->jack_detect_work, rt5682s_jack_detect_handler); in rt5682s_i2c_probe()
3282 INIT_DELAYED_WORK(&rt5682s->jd_check_work, rt5682s_jd_check_handler); in rt5682s_i2c_probe()
3284 if (i2c->irq) { in rt5682s_i2c_probe()
3285 ret = devm_request_threaded_irq(&i2c->dev, i2c->irq, NULL, rt5682s_irq, in rt5682s_i2c_probe()
3289 rt5682s->irq = i2c->irq; in rt5682s_i2c_probe()
3291 dev_err(&i2c->dev, "Failed to request IRQ: %d\n", ret); in rt5682s_i2c_probe()
3294 return devm_snd_soc_register_component(&i2c->dev, &rt5682s_soc_component_dev, in rt5682s_i2c_probe()
3302 disable_irq(client->irq); in rt5682s_i2c_shutdown()
3303 cancel_delayed_work_sync(&rt5682s->jack_detect_work); in rt5682s_i2c_shutdown()
3304 cancel_delayed_work_sync(&rt5682s->jd_check_work); in rt5682s_i2c_shutdown()
3346 MODULE_DESCRIPTION("ASoC RT5682I-VS driver");