Lines Matching +full:adc +full:- +full:mux

1 // SPDX-License-Identifier: GPL-2.0-only
3 * rt5668.c -- RT5668B ALSA SoC audio component driver
26 #include <sound/soc-dapm.h>
746 static const DECLARE_TLV_DB_SCALE(hp_vol_tlv, -2250, 150, 0);
747 static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0);
748 static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
783 SOC_DAPM_ENUM("IF2 ADC Swap Mux", rt5668_if2_adc_enum);
786 SOC_DAPM_ENUM("IF1 01 ADC Swap Mux", rt5668_if1_01_adc_enum);
789 SOC_DAPM_ENUM("IF1 23 ADC Swap Mux", rt5668_if1_23_adc_enum);
792 SOC_DAPM_ENUM("IF1 45 ADC Swap Mux", rt5668_if1_45_adc_enum);
795 SOC_DAPM_ENUM("IF1 67 ADC Swap Mux", rt5668_if1_67_adc_enum);
844 * rt5668_headset_detect - Detect headset.
879 rt5668->jack_type = SND_JACK_HEADSET; in rt5668_headset_detect()
883 rt5668->jack_type = SND_JACK_HEADPHONE; in rt5668_headset_detect()
893 rt5668->jack_type = 0; in rt5668_headset_detect()
896 dev_dbg(component->dev, "jack_type = %d\n", rt5668->jack_type); in rt5668_headset_detect()
897 return rt5668->jack_type; in rt5668_headset_detect()
905 &rt5668->jack_detect_work, msecs_to_jiffies(250)); in rt5668_irq()
915 if (snd_soc_component_read(rt5668->component, RT5668_AJD1_CTRL) in rt5668_jd_check_handler()
918 rt5668->jack_type = rt5668_headset_detect(rt5668->component, 0); in rt5668_jd_check_handler()
920 snd_soc_jack_report(rt5668->hs_jack, rt5668->jack_type, in rt5668_jd_check_handler()
925 schedule_delayed_work(&rt5668->jd_check_work, 500); in rt5668_jd_check_handler()
934 switch (rt5668->pdata.jd_src) { in rt5668_set_jack_detect()
943 regmap_update_bits(rt5668->regmap, RT5668_GPIO_CTRL_1, in rt5668_set_jack_detect()
945 regmap_update_bits(rt5668->regmap, RT5668_RC_CLK_CTRL, in rt5668_set_jack_detect()
949 regmap_update_bits(rt5668->regmap, RT5668_PWR_ANLG_2, in rt5668_set_jack_detect()
952 regmap_update_bits(rt5668->regmap, RT5668_IRQ_CTRL_2, in rt5668_set_jack_detect()
956 &rt5668->jack_detect_work, msecs_to_jiffies(250)); in rt5668_set_jack_detect()
960 regmap_update_bits(rt5668->regmap, RT5668_IRQ_CTRL_2, in rt5668_set_jack_detect()
962 regmap_update_bits(rt5668->regmap, RT5668_RC_CLK_CTRL, in rt5668_set_jack_detect()
967 dev_warn(component->dev, "Wrong JD source\n"); in rt5668_set_jack_detect()
971 rt5668->hs_jack = hs_jack; in rt5668_set_jack_detect()
982 if (!rt5668->component || in rt5668_jack_detect_handler()
983 !snd_soc_card_is_instantiated(rt5668->component->card)) { in rt5668_jack_detect_handler()
986 &rt5668->jack_detect_work, msecs_to_jiffies(15)); in rt5668_jack_detect_handler()
990 mutex_lock(&rt5668->calibrate_mutex); in rt5668_jack_detect_handler()
992 val = snd_soc_component_read(rt5668->component, RT5668_AJD1_CTRL) in rt5668_jack_detect_handler()
996 if (rt5668->jack_type == 0) { in rt5668_jack_detect_handler()
998 rt5668->jack_type = in rt5668_jack_detect_handler()
999 rt5668_headset_detect(rt5668->component, 1); in rt5668_jack_detect_handler()
1002 rt5668->jack_type = SND_JACK_HEADSET; in rt5668_jack_detect_handler()
1003 btn_type = rt5668_button_detect(rt5668->component); in rt5668_jack_detect_handler()
1015 rt5668->jack_type |= SND_JACK_BTN_0; in rt5668_jack_detect_handler()
1020 rt5668->jack_type |= SND_JACK_BTN_1; in rt5668_jack_detect_handler()
1025 rt5668->jack_type |= SND_JACK_BTN_2; in rt5668_jack_detect_handler()
1030 rt5668->jack_type |= SND_JACK_BTN_3; in rt5668_jack_detect_handler()
1036 dev_err(rt5668->component->dev, in rt5668_jack_detect_handler()
1044 rt5668->jack_type = rt5668_headset_detect(rt5668->component, 0); in rt5668_jack_detect_handler()
1047 snd_soc_jack_report(rt5668->hs_jack, rt5668->jack_type, in rt5668_jack_detect_handler()
1052 if (rt5668->jack_type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 | in rt5668_jack_detect_handler()
1054 schedule_delayed_work(&rt5668->jd_check_work, 0); in rt5668_jack_detect_handler()
1056 cancel_delayed_work_sync(&rt5668->jd_check_work); in rt5668_jack_detect_handler()
1058 mutex_unlock(&rt5668->calibrate_mutex); in rt5668_jack_detect_handler()
1074 /* ADC Digital Volume Control */
1075 SOC_DOUBLE("STO1 ADC Capture Switch", RT5668_STO1_ADC_DIG_VOL,
1077 SOC_DOUBLE_TLV("STO1 ADC Capture Volume", RT5668_STO1_ADC_DIG_VOL,
1080 /* ADC Boost Volume Control */
1081 SOC_DOUBLE_TLV("STO1 ADC Boost Gain Volume", RT5668_STO1_ADC_BOOST,
1092 if (rt5668->sysclk < target) { in rt5668_div_sel()
1094 rt5668->sysclk); in rt5668_div_sel()
1098 for (i = 0; i < size - 1; i++) { in rt5668_div_sel()
1100 if (target * div[i] == rt5668->sysclk) in rt5668_div_sel()
1102 if (target * div[i + 1] > rt5668->sysclk) { in rt5668_div_sel()
1104 rt5668->sysclk); in rt5668_div_sel()
1109 if (target * div[i] < rt5668->sysclk) in rt5668_div_sel()
1111 rt5668->sysclk); in rt5668_div_sel()
1113 return size - 1; in rt5668_div_sel()
1118 * set_dmic_clk - Set parameter of dmic.
1131 snd_soc_dapm_to_component(w->dapm); in set_dmic_clk()
1148 snd_soc_dapm_to_component(w->dapm); in set_filter_clk()
1155 if (w->shift == RT5668_PWR_ADC_S1F_BIT && in set_filter_clk()
1157 ref = 256 * rt5668->lrck[RT5668_AIF2]; in set_filter_clk()
1159 ref = 256 * rt5668->lrck[RT5668_AIF1]; in set_filter_clk()
1163 if (w->shift == RT5668_PWR_ADC_S1F_BIT) in set_filter_clk()
1179 snd_soc_dapm_to_component(w->dapm); in is_sys_clk_from_pll1()
1194 snd_soc_dapm_to_component(w->dapm); in is_using_asrc()
1196 switch (w->shift) { in is_using_asrc()
1236 SOC_DAPM_SINGLE("Stereo ADC Switch", RT5668_AD_DA_MIXER,
1243 SOC_DAPM_SINGLE("Stereo ADC Switch", RT5668_AD_DA_MIXER,
1270 /* MX-26 [13] [5] */
1272 "DAC MIX", "ADC"
1289 /* STO1 ADC Source */
1290 /* MX-26 [11:10] [3:2] */
1310 /* MX-26 [12] [4] */
1329 /* MX-79 [6:4] I2S1 ADC data location */
1346 SOC_DAPM_ENUM("IF1 ADC Slot location", rt5668_if1_adc_slot_enum);
1349 /* MX-2B [4], MX-2B [0]*/
1380 snd_soc_dapm_to_component(w->dapm); in rt5668_hp_event()
1429 snd_soc_dapm_to_component(w->dapm); in rt5655_set_verf()
1433 switch (w->shift) { in rt5655_set_verf()
1451 switch (w->shift) { in rt5655_set_verf()
1510 SND_SOC_DAPM_SUPPLY_S("ADC STO1 ASRC", 1, RT5668_PLL_TRACK_1,
1560 /* ADC Mux */
1561 SND_SOC_DAPM_MUX("Stereo1 ADC L1 Mux", SND_SOC_NOPM, 0, 0,
1563 SND_SOC_DAPM_MUX("Stereo1 ADC R1 Mux", SND_SOC_NOPM, 0, 0,
1565 SND_SOC_DAPM_MUX("Stereo1 ADC L2 Mux", SND_SOC_NOPM, 0, 0,
1567 SND_SOC_DAPM_MUX("Stereo1 ADC R2 Mux", SND_SOC_NOPM, 0, 0,
1569 SND_SOC_DAPM_MUX("Stereo1 ADC L Mux", SND_SOC_NOPM, 0, 0,
1571 SND_SOC_DAPM_MUX("Stereo1 ADC R Mux", SND_SOC_NOPM, 0, 0,
1573 SND_SOC_DAPM_MUX("IF1_ADC Mux", SND_SOC_NOPM, 0, 0,
1576 /* ADC Mixer */
1577 SND_SOC_DAPM_SUPPLY("ADC Stereo1 Filter", RT5668_PWR_DIG_2,
1580 SND_SOC_DAPM_MIXER("Stereo1 ADC MIXL", RT5668_STO1_ADC_DIG_VOL,
1583 SND_SOC_DAPM_MIXER("Stereo1 ADC MIXR", RT5668_STO1_ADC_DIG_VOL,
1587 /* ADC PGA */
1588 SND_SOC_DAPM_PGA("Stereo1 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
1600 SND_SOC_DAPM_MUX("IF1 01 ADC Swap Mux", SND_SOC_NOPM, 0, 0,
1602 SND_SOC_DAPM_MUX("IF1 23 ADC Swap Mux", SND_SOC_NOPM, 0, 0,
1604 SND_SOC_DAPM_MUX("IF1 45 ADC Swap Mux", SND_SOC_NOPM, 0, 0,
1606 SND_SOC_DAPM_MUX("IF1 67 ADC Swap Mux", SND_SOC_NOPM, 0, 0,
1608 SND_SOC_DAPM_MUX("IF2 ADC Swap Mux", SND_SOC_NOPM, 0, 0,
1611 SND_SOC_DAPM_MUX("ADCDAT Mux", SND_SOC_NOPM, 0, 0,
1628 /* DAC channel Mux */
1687 {"ADC Stereo1 Filter", NULL, "PLL1", is_sys_clk_from_pll1},
1691 {"ADC Stereo1 Filter", NULL, "ADC STO1 ASRC", is_using_asrc},
1693 {"ADC STO1 ASRC", NULL, "AD ASRC"},
1723 {"Stereo1 ADC L Mux", "ADC1 L", "ADC1 L"},
1724 {"Stereo1 ADC L Mux", "ADC1 R", "ADC1 R"},
1725 {"Stereo1 ADC R Mux", "ADC1 L", "ADC1 L"},
1726 {"Stereo1 ADC R Mux", "ADC1 R", "ADC1 R"},
1728 {"Stereo1 ADC L1 Mux", "ADC", "Stereo1 ADC L Mux"},
1729 {"Stereo1 ADC L1 Mux", "DAC MIX", "Stereo1 DAC MIXL"},
1730 {"Stereo1 ADC L2 Mux", "DMIC", "DMIC L1"},
1731 {"Stereo1 ADC L2 Mux", "DAC MIX", "Stereo1 DAC MIXL"},
1733 {"Stereo1 ADC R1 Mux", "ADC", "Stereo1 ADC R Mux"},
1734 {"Stereo1 ADC R1 Mux", "DAC MIX", "Stereo1 DAC MIXR"},
1735 {"Stereo1 ADC R2 Mux", "DMIC", "DMIC R1"},
1736 {"Stereo1 ADC R2 Mux", "DAC MIX", "Stereo1 DAC MIXR"},
1738 {"Stereo1 ADC MIXL", "ADC1 Switch", "Stereo1 ADC L1 Mux"},
1739 {"Stereo1 ADC MIXL", "ADC2 Switch", "Stereo1 ADC L2 Mux"},
1740 {"Stereo1 ADC MIXL", NULL, "ADC Stereo1 Filter"},
1742 {"Stereo1 ADC MIXR", "ADC1 Switch", "Stereo1 ADC R1 Mux"},
1743 {"Stereo1 ADC MIXR", "ADC2 Switch", "Stereo1 ADC R2 Mux"},
1744 {"Stereo1 ADC MIXR", NULL, "ADC Stereo1 Filter"},
1746 {"Stereo1 ADC MIX", NULL, "Stereo1 ADC MIXL"},
1747 {"Stereo1 ADC MIX", NULL, "Stereo1 ADC MIXR"},
1749 {"IF1 01 ADC Swap Mux", "L/R", "Stereo1 ADC MIX"},
1750 {"IF1 01 ADC Swap Mux", "L/L", "Stereo1 ADC MIX"},
1751 {"IF1 01 ADC Swap Mux", "R/L", "Stereo1 ADC MIX"},
1752 {"IF1 01 ADC Swap Mux", "R/R", "Stereo1 ADC MIX"},
1753 {"IF1 23 ADC Swap Mux", "L/R", "Stereo1 ADC MIX"},
1754 {"IF1 23 ADC Swap Mux", "R/L", "Stereo1 ADC MIX"},
1755 {"IF1 23 ADC Swap Mux", "L/L", "Stereo1 ADC MIX"},
1756 {"IF1 23 ADC Swap Mux", "R/R", "Stereo1 ADC MIX"},
1757 {"IF1 45 ADC Swap Mux", "L/R", "Stereo1 ADC MIX"},
1758 {"IF1 45 ADC Swap Mux", "R/L", "Stereo1 ADC MIX"},
1759 {"IF1 45 ADC Swap Mux", "L/L", "Stereo1 ADC MIX"},
1760 {"IF1 45 ADC Swap Mux", "R/R", "Stereo1 ADC MIX"},
1761 {"IF1 67 ADC Swap Mux", "L/R", "Stereo1 ADC MIX"},
1762 {"IF1 67 ADC Swap Mux", "R/L", "Stereo1 ADC MIX"},
1763 {"IF1 67 ADC Swap Mux", "L/L", "Stereo1 ADC MIX"},
1764 {"IF1 67 ADC Swap Mux", "R/R", "Stereo1 ADC MIX"},
1766 {"IF1_ADC Mux", "Slot 0", "IF1 01 ADC Swap Mux"},
1767 {"IF1_ADC Mux", "Slot 2", "IF1 23 ADC Swap Mux"},
1768 {"IF1_ADC Mux", "Slot 4", "IF1 45 ADC Swap Mux"},
1769 {"IF1_ADC Mux", "Slot 6", "IF1 67 ADC Swap Mux"},
1770 {"IF1_ADC Mux", NULL, "I2S1"},
1771 {"ADCDAT Mux", "ADCDAT1", "IF1_ADC Mux"},
1772 {"AIF1TX", NULL, "ADCDAT Mux"},
1773 {"IF2 ADC Swap Mux", "L/R", "Stereo1 ADC MIX"},
1774 {"IF2 ADC Swap Mux", "R/L", "Stereo1 ADC MIX"},
1775 {"IF2 ADC Swap Mux", "L/L", "Stereo1 ADC MIX"},
1776 {"IF2 ADC Swap Mux", "R/R", "Stereo1 ADC MIX"},
1777 {"ADCDAT Mux", "ADCDAT2", "IF2 ADC Swap Mux"},
1778 {"AIF2TX", NULL, "ADCDAT Mux"},
1787 {"DAC1 MIXL", "Stereo ADC Switch", "Stereo1 ADC MIXL"},
1789 {"DAC1 MIXR", "Stereo ADC Switch", "Stereo1 ADC MIXR"},
1827 struct snd_soc_component *component = dai->component; in rt5668_set_tdm_slot()
1846 return -EINVAL; in rt5668_set_tdm_slot()
1866 return -EINVAL; in rt5668_set_tdm_slot()
1879 struct snd_soc_component *component = dai->component; in rt5668_hw_params()
1884 rt5668->lrck[dai->id] = params_rate(params); in rt5668_hw_params()
1885 pre_div = rl6231_get_clk_info(rt5668->sysclk, rt5668->lrck[dai->id]); in rt5668_hw_params()
1889 dev_err(component->dev, "Unsupported frame size: %d\n", in rt5668_hw_params()
1891 return -EINVAL; in rt5668_hw_params()
1894 dev_dbg(dai->dev, "lrck is %dHz and pre_div is %d for iis %d\n", in rt5668_hw_params()
1895 rt5668->lrck[dai->id], pre_div, dai->id); in rt5668_hw_params()
1917 return -EINVAL; in rt5668_hw_params()
1920 switch (dai->id) { in rt5668_hw_params()
1924 if (rt5668->master[RT5668_AIF1]) { in rt5668_hw_params()
1941 if (rt5668->master[RT5668_AIF2]) { in rt5668_hw_params()
1956 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id); in rt5668_hw_params()
1957 return -EINVAL; in rt5668_hw_params()
1965 struct snd_soc_component *component = dai->component; in rt5668_set_dai_fmt()
1971 rt5668->master[dai->id] = 1; in rt5668_set_dai_fmt()
1974 rt5668->master[dai->id] = 0; in rt5668_set_dai_fmt()
1977 return -EINVAL; in rt5668_set_dai_fmt()
1988 if (dai->id == RT5668_AIF1) in rt5668_set_dai_fmt()
1991 return -EINVAL; in rt5668_set_dai_fmt()
1994 if (dai->id == RT5668_AIF1) in rt5668_set_dai_fmt()
1998 return -EINVAL; in rt5668_set_dai_fmt()
2001 return -EINVAL; in rt5668_set_dai_fmt()
2020 return -EINVAL; in rt5668_set_dai_fmt()
2023 switch (dai->id) { in rt5668_set_dai_fmt()
2031 tdm_ctrl | rt5668->master[dai->id]); in rt5668_set_dai_fmt()
2034 if (rt5668->master[dai->id] == 0) in rt5668_set_dai_fmt()
2041 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id); in rt5668_set_dai_fmt()
2042 return -EINVAL; in rt5668_set_dai_fmt()
2053 if (freq == rt5668->sysclk && clk_id == rt5668->sysclk_src) in rt5668_set_component_sysclk()
2074 dev_err(component->dev, "Invalid clock id (%d)\n", clk_id); in rt5668_set_component_sysclk()
2075 return -EINVAL; in rt5668_set_component_sysclk()
2080 if (rt5668->master[RT5668_AIF2]) { in rt5668_set_component_sysclk()
2086 rt5668->sysclk = freq; in rt5668_set_component_sysclk()
2087 rt5668->sysclk_src = clk_id; in rt5668_set_component_sysclk()
2089 dev_dbg(component->dev, "Sysclk is %dHz and clock id is %d\n", in rt5668_set_component_sysclk()
2103 if (source == rt5668->pll_src && freq_in == rt5668->pll_in && in rt5668_set_component_pll()
2104 freq_out == rt5668->pll_out) in rt5668_set_component_pll()
2108 dev_dbg(component->dev, "PLL disabled\n"); in rt5668_set_component_pll()
2110 rt5668->pll_in = 0; in rt5668_set_component_pll()
2111 rt5668->pll_out = 0; in rt5668_set_component_pll()
2127 dev_err(component->dev, "Unknown PLL Source %d\n", source); in rt5668_set_component_pll()
2128 return -EINVAL; in rt5668_set_component_pll()
2133 dev_err(component->dev, "Unsupported input clock %d\n", freq_in); in rt5668_set_component_pll()
2137 dev_dbg(component->dev, "bypass=%d m=%d n=%d k=%d\n", in rt5668_set_component_pll()
2147 rt5668->pll_in = freq_in; in rt5668_set_component_pll()
2148 rt5668->pll_out = freq_out; in rt5668_set_component_pll()
2149 rt5668->pll_src = source; in rt5668_set_component_pll()
2156 struct snd_soc_component *component = dai->component; in rt5668_set_bclk_ratio()
2159 rt5668->bclk[dai->id] = ratio; in rt5668_set_bclk_ratio()
2173 dev_err(dai->dev, "Invalid bclk ratio %d\n", ratio); in rt5668_set_bclk_ratio()
2174 return -EINVAL; in rt5668_set_bclk_ratio()
2187 regmap_update_bits(rt5668->regmap, RT5668_PWR_ANLG_1, in rt5668_set_bias_level()
2190 regmap_update_bits(rt5668->regmap, RT5668_PWR_DIG_1, in rt5668_set_bias_level()
2196 regmap_update_bits(rt5668->regmap, RT5668_PWR_ANLG_1, in rt5668_set_bias_level()
2198 regmap_update_bits(rt5668->regmap, RT5668_PWR_DIG_1, in rt5668_set_bias_level()
2202 regmap_update_bits(rt5668->regmap, RT5668_PWR_DIG_1, in rt5668_set_bias_level()
2204 regmap_update_bits(rt5668->regmap, RT5668_PWR_ANLG_1, in rt5668_set_bias_level()
2219 rt5668->component = component; in rt5668_probe()
2228 rt5668_reset(rt5668->regmap); in rt5668_remove()
2236 regcache_cache_only(rt5668->regmap, true); in rt5668_suspend()
2237 regcache_mark_dirty(rt5668->regmap); in rt5668_suspend()
2245 regcache_cache_only(rt5668->regmap, false); in rt5668_resume()
2246 regcache_sync(rt5668->regmap); in rt5668_resume()
2273 .name = "rt5668-aif1",
2292 .name = "rt5668-aif2",
2346 of_property_read_u32(dev->of_node, "realtek,dmic1-data-pin", in rt5668_parse_dt()
2347 &rt5668->pdata.dmic1_data_pin); in rt5668_parse_dt()
2348 of_property_read_u32(dev->of_node, "realtek,dmic1-clk-pin", in rt5668_parse_dt()
2349 &rt5668->pdata.dmic1_clk_pin); in rt5668_parse_dt()
2350 of_property_read_u32(dev->of_node, "realtek,jd-src", in rt5668_parse_dt()
2351 &rt5668->pdata.jd_src); in rt5668_parse_dt()
2360 mutex_lock(&rt5668->calibrate_mutex); in rt5668_calibrate()
2362 rt5668_reset(rt5668->regmap); in rt5668_calibrate()
2363 regmap_write(rt5668->regmap, RT5668_PWR_ANLG_1, 0xa2bf); in rt5668_calibrate()
2365 regmap_write(rt5668->regmap, RT5668_PWR_ANLG_1, 0xf2bf); in rt5668_calibrate()
2366 regmap_write(rt5668->regmap, RT5668_MICBIAS_2, 0x0380); in rt5668_calibrate()
2367 regmap_write(rt5668->regmap, RT5668_PWR_DIG_1, 0x8001); in rt5668_calibrate()
2368 regmap_write(rt5668->regmap, RT5668_TEST_MODE_CTRL_1, 0x0000); in rt5668_calibrate()
2369 regmap_write(rt5668->regmap, RT5668_STO1_DAC_MIXER, 0x2080); in rt5668_calibrate()
2370 regmap_write(rt5668->regmap, RT5668_STO1_ADC_MIXER, 0x4040); in rt5668_calibrate()
2371 regmap_write(rt5668->regmap, RT5668_DEPOP_1, 0x0069); in rt5668_calibrate()
2372 regmap_write(rt5668->regmap, RT5668_CHOP_DAC, 0x3000); in rt5668_calibrate()
2373 regmap_write(rt5668->regmap, RT5668_HP_CTRL_2, 0x6000); in rt5668_calibrate()
2374 regmap_write(rt5668->regmap, RT5668_HP_CHARGE_PUMP_1, 0x0f26); in rt5668_calibrate()
2375 regmap_write(rt5668->regmap, RT5668_CALIB_ADC_CTRL, 0x7f05); in rt5668_calibrate()
2376 regmap_write(rt5668->regmap, RT5668_STO1_ADC_MIXER, 0x686c); in rt5668_calibrate()
2377 regmap_write(rt5668->regmap, RT5668_CAL_REC, 0x0d0d); in rt5668_calibrate()
2378 regmap_write(rt5668->regmap, RT5668_HP_CALIB_CTRL_9, 0x000f); in rt5668_calibrate()
2379 regmap_write(rt5668->regmap, RT5668_PWR_DIG_1, 0x8d01); in rt5668_calibrate()
2380 regmap_write(rt5668->regmap, RT5668_HP_CALIB_CTRL_2, 0x0321); in rt5668_calibrate()
2381 regmap_write(rt5668->regmap, RT5668_HP_LOGIC_CTRL_2, 0x0004); in rt5668_calibrate()
2382 regmap_write(rt5668->regmap, RT5668_HP_CALIB_CTRL_1, 0x7c00); in rt5668_calibrate()
2383 regmap_write(rt5668->regmap, RT5668_HP_CALIB_CTRL_3, 0x06a1); in rt5668_calibrate()
2384 regmap_write(rt5668->regmap, RT5668_A_DAC1_MUX, 0x0311); in rt5668_calibrate()
2385 regmap_write(rt5668->regmap, RT5668_RESET_HPF_CTRL, 0x0000); in rt5668_calibrate()
2386 regmap_write(rt5668->regmap, RT5668_ADC_STO1_HP_CTRL_1, 0x3320); in rt5668_calibrate()
2388 regmap_write(rt5668->regmap, RT5668_HP_CALIB_CTRL_1, 0xfc00); in rt5668_calibrate()
2391 regmap_read(rt5668->regmap, RT5668_HP_CALIB_STA_1, &value); in rt5668_calibrate()
2402 regmap_write(rt5668->regmap, RT5668_STO1_ADC_MIXER, 0xc0c4); in rt5668_calibrate()
2403 regmap_write(rt5668->regmap, RT5668_PWR_DIG_1, 0x0000); in rt5668_calibrate()
2405 mutex_unlock(&rt5668->calibrate_mutex); in rt5668_calibrate()
2411 struct rt5668_platform_data *pdata = dev_get_platdata(&i2c->dev); in rt5668_i2c_probe()
2416 rt5668 = devm_kzalloc(&i2c->dev, sizeof(struct rt5668_priv), in rt5668_i2c_probe()
2420 return -ENOMEM; in rt5668_i2c_probe()
2425 rt5668->pdata = *pdata; in rt5668_i2c_probe()
2427 rt5668_parse_dt(rt5668, &i2c->dev); in rt5668_i2c_probe()
2429 rt5668->regmap = devm_regmap_init_i2c(i2c, &rt5668_regmap); in rt5668_i2c_probe()
2430 if (IS_ERR(rt5668->regmap)) { in rt5668_i2c_probe()
2431 ret = PTR_ERR(rt5668->regmap); in rt5668_i2c_probe()
2432 dev_err(&i2c->dev, "Failed to allocate register map: %d\n", in rt5668_i2c_probe()
2437 for (i = 0; i < ARRAY_SIZE(rt5668->supplies); i++) in rt5668_i2c_probe()
2438 rt5668->supplies[i].supply = rt5668_supply_names[i]; in rt5668_i2c_probe()
2440 ret = devm_regulator_bulk_get(&i2c->dev, ARRAY_SIZE(rt5668->supplies), in rt5668_i2c_probe()
2441 rt5668->supplies); in rt5668_i2c_probe()
2443 dev_err(&i2c->dev, "Failed to request supplies: %d\n", ret); in rt5668_i2c_probe()
2447 ret = regulator_bulk_enable(ARRAY_SIZE(rt5668->supplies), in rt5668_i2c_probe()
2448 rt5668->supplies); in rt5668_i2c_probe()
2450 dev_err(&i2c->dev, "Failed to enable supplies: %d\n", ret); in rt5668_i2c_probe()
2454 rt5668->ldo1_en = devm_gpiod_get_optional(&i2c->dev, in rt5668_i2c_probe()
2455 "realtek,ldo1-en", in rt5668_i2c_probe()
2457 if (IS_ERR(rt5668->ldo1_en)) { in rt5668_i2c_probe()
2458 dev_err(&i2c->dev, "Fail gpio request ldo1_en\n"); in rt5668_i2c_probe()
2459 return PTR_ERR(rt5668->ldo1_en); in rt5668_i2c_probe()
2465 regmap_write(rt5668->regmap, RT5668_I2C_MODE, 0x1); in rt5668_i2c_probe()
2468 regmap_read(rt5668->regmap, RT5668_DEVICE_ID, &val); in rt5668_i2c_probe()
2471 return -ENODEV; in rt5668_i2c_probe()
2474 rt5668_reset(rt5668->regmap); in rt5668_i2c_probe()
2478 regmap_write(rt5668->regmap, RT5668_DEPOP_1, 0x0000); in rt5668_i2c_probe()
2481 if (rt5668->pdata.dmic1_data_pin != RT5668_DMIC1_NULL) { in rt5668_i2c_probe()
2482 switch (rt5668->pdata.dmic1_data_pin) { in rt5668_i2c_probe()
2484 regmap_update_bits(rt5668->regmap, RT5668_DMIC_CTRL_1, in rt5668_i2c_probe()
2486 regmap_update_bits(rt5668->regmap, RT5668_GPIO_CTRL_1, in rt5668_i2c_probe()
2491 regmap_update_bits(rt5668->regmap, RT5668_DMIC_CTRL_1, in rt5668_i2c_probe()
2493 regmap_update_bits(rt5668->regmap, RT5668_GPIO_CTRL_1, in rt5668_i2c_probe()
2498 dev_dbg(&i2c->dev, "invalid DMIC_DAT pin\n"); in rt5668_i2c_probe()
2502 switch (rt5668->pdata.dmic1_clk_pin) { in rt5668_i2c_probe()
2504 regmap_update_bits(rt5668->regmap, RT5668_GPIO_CTRL_1, in rt5668_i2c_probe()
2509 regmap_update_bits(rt5668->regmap, RT5668_GPIO_CTRL_1, in rt5668_i2c_probe()
2514 dev_dbg(&i2c->dev, "invalid DMIC_CLK pin\n"); in rt5668_i2c_probe()
2519 regmap_update_bits(rt5668->regmap, RT5668_PWR_ANLG_1, in rt5668_i2c_probe()
2522 regmap_write(rt5668->regmap, RT5668_MICBIAS_2, 0x0380); in rt5668_i2c_probe()
2523 regmap_update_bits(rt5668->regmap, RT5668_GPIO_CTRL_1, in rt5668_i2c_probe()
2526 regmap_write(rt5668->regmap, RT5668_TEST_MODE_CTRL_1, 0x0000); in rt5668_i2c_probe()
2528 INIT_DELAYED_WORK(&rt5668->jack_detect_work, in rt5668_i2c_probe()
2530 INIT_DELAYED_WORK(&rt5668->jd_check_work, in rt5668_i2c_probe()
2533 mutex_init(&rt5668->calibrate_mutex); in rt5668_i2c_probe()
2535 if (i2c->irq) { in rt5668_i2c_probe()
2536 ret = devm_request_threaded_irq(&i2c->dev, i2c->irq, NULL, in rt5668_i2c_probe()
2540 dev_err(&i2c->dev, "Failed to request IRQ: %d\n", ret); in rt5668_i2c_probe()
2544 return devm_snd_soc_register_component(&i2c->dev, &soc_component_dev_rt5668, in rt5668_i2c_probe()
2552 rt5668_reset(rt5668->regmap); in rt5668_i2c_shutdown()