Lines Matching +full:out +full:- +full:mono
1 // SPDX-License-Identifier: GPL-2.0-only
3 * rt5665.c -- RT5665/RT5658 ALSA SoC audio codec driver
26 #include <sound/soc-dapm.h>
884 static const DECLARE_TLV_DB_SCALE(hp_vol_tlv, -2250, 150, 0);
885 static const DECLARE_TLV_DB_SCALE(mono_vol_tlv, -1400, 150, 0);
886 static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
887 static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0);
888 static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0);
889 static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
891 static const DECLARE_TLV_DB_SCALE(in_bst_tlv, -1200, 75, 0);
1026 * rt5665_sel_asrc_clk_src - select ASRC clock source for a set of filters
1058 return -EINVAL; in rt5665_sel_asrc_clk_src()
1155 * rt5665_headset_detect - Detect headset.
1173 regmap_update_bits(rt5665->regmap, RT5665_MICBIAS_2, 0x100, in rt5665_headset_detect()
1176 regmap_read(rt5665->regmap, RT5665_GPIO_STA, &val); in rt5665_headset_detect()
1178 regmap_update_bits(rt5665->regmap, RT5665_EJD_CTRL_1, in rt5665_headset_detect()
1181 regmap_read(rt5665->regmap, RT5665_GPIO_STA, &val); in rt5665_headset_detect()
1184 regmap_read(rt5665->regmap, RT5665_GPIO_STA, in rt5665_headset_detect()
1189 regmap_update_bits(rt5665->regmap, RT5665_EJD_CTRL_1, in rt5665_headset_detect()
1191 regmap_write(rt5665->regmap, RT5665_EJD_CTRL_3, 0x3424); in rt5665_headset_detect()
1192 regmap_write(rt5665->regmap, RT5665_IL_CMD_1, 0x0048); in rt5665_headset_detect()
1193 regmap_write(rt5665->regmap, RT5665_SAR_IL_CMD_1, 0xa291); in rt5665_headset_detect()
1197 rt5665->sar_adc_value = snd_soc_component_read(rt5665->component, in rt5665_headset_detect()
1200 sar_hs_type = rt5665->pdata.sar_hs_type ? in rt5665_headset_detect()
1201 rt5665->pdata.sar_hs_type : 729; in rt5665_headset_detect()
1203 if (rt5665->sar_adc_value > sar_hs_type) { in rt5665_headset_detect()
1204 rt5665->jack_type = SND_JACK_HEADSET; in rt5665_headset_detect()
1207 rt5665->jack_type = SND_JACK_HEADPHONE; in rt5665_headset_detect()
1208 regmap_write(rt5665->regmap, RT5665_SAR_IL_CMD_1, in rt5665_headset_detect()
1210 regmap_update_bits(rt5665->regmap, RT5665_MICBIAS_2, in rt5665_headset_detect()
1216 regmap_write(rt5665->regmap, RT5665_SAR_IL_CMD_1, 0x2291); in rt5665_headset_detect()
1217 regmap_update_bits(rt5665->regmap, RT5665_MICBIAS_2, 0x100, 0); in rt5665_headset_detect()
1220 if (rt5665->jack_type == SND_JACK_HEADSET) in rt5665_headset_detect()
1222 rt5665->jack_type = 0; in rt5665_headset_detect()
1225 dev_dbg(component->dev, "jack_type = %d\n", rt5665->jack_type); in rt5665_headset_detect()
1226 return rt5665->jack_type; in rt5665_headset_detect()
1234 &rt5665->jack_detect_work, msecs_to_jiffies(250)); in rt5665_irq()
1244 if (snd_soc_component_read(rt5665->component, RT5665_AJD1_CTRL) & 0x0010) { in rt5665_jd_check_handler()
1245 /* jack out */ in rt5665_jd_check_handler()
1246 rt5665->jack_type = rt5665_headset_detect(rt5665->component, 0); in rt5665_jd_check_handler()
1248 snd_soc_jack_report(rt5665->hs_jack, rt5665->jack_type, in rt5665_jd_check_handler()
1253 schedule_delayed_work(&rt5665->jd_check_work, 500); in rt5665_jd_check_handler()
1262 switch (rt5665->pdata.jd_src) { in rt5665_set_jack_detect()
1264 regmap_update_bits(rt5665->regmap, RT5665_GPIO_CTRL_1, in rt5665_set_jack_detect()
1266 regmap_update_bits(rt5665->regmap, RT5665_RC_CLK_CTRL, in rt5665_set_jack_detect()
1268 regmap_update_bits(rt5665->regmap, RT5665_PWR_ANLG_2, in rt5665_set_jack_detect()
1270 regmap_update_bits(rt5665->regmap, RT5665_IRQ_CTRL_1, 0x8, 0x8); in rt5665_set_jack_detect()
1277 dev_warn(component->dev, "Wrong JD source\n"); in rt5665_set_jack_detect()
1281 rt5665->hs_jack = hs_jack; in rt5665_set_jack_detect()
1292 while (!rt5665->component) { in rt5665_jack_detect_handler()
1297 while (!snd_soc_card_is_instantiated(rt5665->component->card)) { in rt5665_jack_detect_handler()
1302 while (!rt5665->calibration_done) { in rt5665_jack_detect_handler()
1307 mutex_lock(&rt5665->calibrate_mutex); in rt5665_jack_detect_handler()
1309 val = snd_soc_component_read(rt5665->component, RT5665_AJD1_CTRL) & 0x0010; in rt5665_jack_detect_handler()
1312 if (rt5665->jack_type == 0) { in rt5665_jack_detect_handler()
1313 /* jack was out, report jack type */ in rt5665_jack_detect_handler()
1314 rt5665->jack_type = in rt5665_jack_detect_handler()
1315 rt5665_headset_detect(rt5665->component, 1); in rt5665_jack_detect_handler()
1318 rt5665->jack_type = SND_JACK_HEADSET; in rt5665_jack_detect_handler()
1319 btn_type = rt5665_button_detect(rt5665->component); in rt5665_jack_detect_handler()
1331 rt5665->jack_type |= SND_JACK_BTN_0; in rt5665_jack_detect_handler()
1336 rt5665->jack_type |= SND_JACK_BTN_1; in rt5665_jack_detect_handler()
1341 rt5665->jack_type |= SND_JACK_BTN_2; in rt5665_jack_detect_handler()
1346 rt5665->jack_type |= SND_JACK_BTN_3; in rt5665_jack_detect_handler()
1352 dev_err(rt5665->component->dev, in rt5665_jack_detect_handler()
1359 /* jack out */ in rt5665_jack_detect_handler()
1360 rt5665->jack_type = rt5665_headset_detect(rt5665->component, 0); in rt5665_jack_detect_handler()
1363 snd_soc_jack_report(rt5665->hs_jack, rt5665->jack_type, in rt5665_jack_detect_handler()
1368 if (rt5665->jack_type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 | in rt5665_jack_detect_handler()
1370 schedule_delayed_work(&rt5665->jd_check_work, 0); in rt5665_jack_detect_handler()
1372 cancel_delayed_work_sync(&rt5665->jd_check_work); in rt5665_jack_detect_handler()
1374 mutex_unlock(&rt5665->calibrate_mutex); in rt5665_jack_detect_handler()
1393 /* Mono Output Volume */
1394 SOC_SINGLE_EXT_TLV("Mono Playback Volume", RT5665_MONO_GAIN,
1402 SOC_DOUBLE_TLV("OUT Playback Volume", RT5665_LOUT, RT5665_L_VOL_SFT,
1434 SOC_DOUBLE("Mono ADC Capture Switch", RT5665_MONO_ADC_DIG_VOL,
1436 SOC_DOUBLE_TLV("Mono ADC Capture Volume", RT5665_MONO_ADC_DIG_VOL,
1448 SOC_DOUBLE_TLV("Mono ADC Boost Gain Volume", RT5665_MONO_ADC_BOOST,
1463 * set_dmic_clk - Set parameter of dmic.
1475 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in set_dmic_clk()
1479 pd = rl6231_get_pre_div(rt5665->regmap, in set_dmic_clk()
1481 idx = rl6231_calc_dmic_clk(rt5665->sysclk / pd); in set_dmic_clk()
1484 dev_err(component->dev, "Failed to set DMIC clock\n"); in set_dmic_clk()
1495 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5665_charge_pump_event()
1519 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in is_sys_clk_from_pll()
1533 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in is_using_asrc()
1535 switch (w->shift) { in is_using_asrc()
1834 /*MX-17 [6:4], MX-17 [2:0]*/
1836 "IF1 DAC2", "IF2_1 DAC", "IF2_2 DAC", "IF3 DAC", "Mono ADC MIX"
1854 /*MX-1B [6:4], MX-1B [2:0]*/
1874 /* MX-26 [13] [5] */
1894 /* MX-26 [11:10] [3:2] */
1914 /* MX-26 [12] [4] */
1934 /* MX-26 [8] */
1946 /* MX-26 [9] */
1948 "STO2 DAC", "MONO DAC"
1958 /* MX-26 [1:0] */
1960 "STO2 DAC", "MONO DAC", "AEC REF"
1970 /* MONO ADC L2 Source */
1971 /* MX-27 [12] */
1981 SOC_DAPM_ENUM("Mono ADC L2 Source", rt5665_mono_adc_l2_enum);
1984 /* MONO ADC L1 Source */
1985 /* MX-27 [13] */
1995 SOC_DAPM_ENUM("Mono ADC L1 Source", rt5665_mono_adc_l1_enum);
1997 /* MX-27 [9][1]*/
1999 "STO2 DAC", "MONO DAC"
2007 SOC_DAPM_ENUM("Mono DD L Source", rt5665_mono_dd_l_enum);
2014 SOC_DAPM_ENUM("Mono DD R Source", rt5665_mono_dd_r_enum);
2016 /* MONO ADC L Source, MONO ADC R Source*/
2017 /* MX-27 [11:10], MX-27 [3:2] */
2027 SOC_DAPM_ENUM("Mono ADC L Source", rt5665_mono_adc_l_enum);
2034 SOC_DAPM_ENUM("Mono ADC R Source", rt5665_mono_adcr_enum);
2036 /* MONO DMIC L Source */
2037 /* MX-27 [8] */
2047 SOC_DAPM_ENUM("Mono DMIC L Source", rt5665_mono_dmic_l_enum);
2049 /* MONO ADC R2 Source */
2050 /* MX-27 [4] */
2060 SOC_DAPM_ENUM("Mono ADC R2 Source", rt5665_mono_adc_r2_enum);
2062 /* MONO ADC R1 Source */
2063 /* MX-27 [5] */
2073 SOC_DAPM_ENUM("Mono ADC R1 Source", rt5665_mono_adc_r1_enum);
2075 /* MONO DMIC R Source */
2076 /* MX-27 [0] */
2086 SOC_DAPM_ENUM("Mono DMIC R Source", rt5665_mono_dmic_r_enum);
2090 /* MX-28 [13] [5] */
2110 /* MX-28 [11:10] [3:2] */
2130 /* MX-28 [12] [4] */
2150 /* MX-28 [8] */
2162 /* MX-28 [9] */
2164 "STO2 DAC", "MONO DAC"
2174 /* MX-28 [1] */
2176 "STO2 DAC", "MONO DAC"
2187 /* MX-29 [11:10], MX-29 [9:8]*/
2207 /* MX-2D [13:12], MX-2D [9:8]*/
2209 "Stereo1 DAC Mixer", "Stereo2 DAC Mixer", "Mono DAC Mixer"
2227 /* MX-2D [5:4], MX-2D [1:0]*/
2247 /* MX-2E [5:4], MX-2E [0]*/
2249 "Mono DAC Mixer", "DAC2"
2267 /* MX-2F [14:12] */
2269 "STO1 ADC", "STO2 ADC", "MONO ADC", "IF1 DAC1",
2280 /* MX-2F [6:4] */
2282 "STO1 ADC", "STO2 ADC", "MONO ADC", "IF1 DAC1",
2294 /* MX-30 [6:4] */
2296 "STO1 ADC", "STO2 ADC", "MONO ADC", "IF1 DAC1",
2308 /* MX-31 [11:10] [9:8] */
2310 "Stereo1 DAC", "Stereo2 DAC", "Mono DAC"
2329 /* MX-7a[10] */
2341 /* MX-7a[9] */
2353 /* MX-7a[8] */
2355 "MONO ADC", "IF3 DAC",
2365 /* MX-7b[10] */
2377 /* MX-7b[9] */
2389 /* MX-7b[8] */
2391 "MONO ADC", "IF2_2 DAC",
2401 /* MX-7b[7] */
2413 /* MX-7a[4:0] MX-7b[4:0] */
2435 /* Out Volume Switch */
2445 /* Out Switch */
2470 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5665_mono_event()
2502 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5665_hp_event()
2528 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5665_lout_event()
2568 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5665_set_verf()
2572 switch (w->shift) { in rt5665_set_verf()
2595 switch (w->shift) { in rt5665_set_verf()
2626 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rt5665_i2s_pin_event()
2629 switch (w->shift) { in rt5665_i2s_pin_event()
2702 SND_SOC_DAPM_SUPPLY_S("DAC Mono L ASRC", 1, RT5665_ASRC_1,
2704 SND_SOC_DAPM_SUPPLY_S("DAC Mono R ASRC", 1, RT5665_ASRC_1,
2710 SND_SOC_DAPM_SUPPLY_S("ADC Mono L ASRC", 1, RT5665_ASRC_1,
2712 SND_SOC_DAPM_SUPPLY_S("ADC Mono R ASRC", 1, RT5665_ASRC_1,
2718 SND_SOC_DAPM_SUPPLY_S("DMIC MONO L ASRC", 1, RT5665_ASRC_1,
2720 SND_SOC_DAPM_SUPPLY_S("DMIC MONO R ASRC", 1, RT5665_ASRC_1,
2851 SND_SOC_DAPM_MUX("Mono ADC L2 Mux", SND_SOC_NOPM, 0, 0,
2853 SND_SOC_DAPM_MUX("Mono ADC R2 Mux", SND_SOC_NOPM, 0, 0,
2855 SND_SOC_DAPM_MUX("Mono ADC L1 Mux", SND_SOC_NOPM, 0, 0,
2857 SND_SOC_DAPM_MUX("Mono ADC R1 Mux", SND_SOC_NOPM, 0, 0,
2859 SND_SOC_DAPM_MUX("Mono DMIC L Mux", SND_SOC_NOPM, 0, 0,
2861 SND_SOC_DAPM_MUX("Mono DMIC R Mux", SND_SOC_NOPM, 0, 0,
2863 SND_SOC_DAPM_MUX("Mono ADC L Mux", SND_SOC_NOPM, 0, 0,
2865 SND_SOC_DAPM_MUX("Mono ADC R Mux", SND_SOC_NOPM, 0, 0,
2867 SND_SOC_DAPM_MUX("Mono DD L Mux", SND_SOC_NOPM, 0, 0,
2869 SND_SOC_DAPM_MUX("Mono DD R Mux", SND_SOC_NOPM, 0, 0,
2908 SND_SOC_DAPM_SUPPLY("ADC Mono Left Filter", RT5665_PWR_DIG_2,
2910 SND_SOC_DAPM_MIXER("Mono ADC MIXL", RT5665_MONO_ADC_DIG_VOL,
2913 SND_SOC_DAPM_SUPPLY("ADC Mono Right Filter", RT5665_PWR_DIG_2,
2915 SND_SOC_DAPM_MIXER("Mono ADC MIXR", RT5665_MONO_ADC_DIG_VOL,
2922 SND_SOC_DAPM_PGA("Mono ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
3122 SND_SOC_DAPM_SUPPLY("DAC Mono Left Filter", RT5665_PWR_DIG_2,
3124 SND_SOC_DAPM_SUPPLY("DAC Mono Right Filter", RT5665_PWR_DIG_2,
3134 SND_SOC_DAPM_MIXER("Mono DAC MIXL", SND_SOC_NOPM, 0, 0,
3136 SND_SOC_DAPM_MIXER("Mono DAC MIXR", SND_SOC_NOPM, 0, 0,
3160 /* OUT Mixer */
3163 SND_SOC_DAPM_MIXER("OUT MIXL", RT5665_PWR_MIXER, RT5665_PWR_OM_L_BIT,
3165 SND_SOC_DAPM_MIXER("OUT MIXR", RT5665_PWR_MIXER, RT5665_PWR_OM_R_BIT,
3176 /* MONO/HPO/LOUT */
3177 SND_SOC_DAPM_MIXER("Mono MIX", SND_SOC_NOPM, 0, 0, rt5665_mono_mix,
3183 SND_SOC_DAPM_PGA_S("Mono Amp", 1, RT5665_PWR_ANLG_1, RT5665_PWR_MA_BIT,
3197 SND_SOC_DAPM_SWITCH("Mono Playback", SND_SOC_NOPM, 0, 0,
3223 SND_SOC_DAPM_SUPPLY("CLKDET MONO", RT5665_CLK_DET, RT5665_MONO_CLK_DET,
3244 {"ADC Mono Left Filter", NULL, "PLL", is_sys_clk_from_pll},
3245 {"ADC Mono Right Filter", NULL, "PLL", is_sys_clk_from_pll},
3248 {"DAC Mono Left Filter", NULL, "PLL", is_sys_clk_from_pll},
3249 {"DAC Mono Right Filter", NULL, "PLL", is_sys_clk_from_pll},
3254 {"ADC Mono Left Filter", NULL, "ADC Mono L ASRC", is_using_asrc},
3255 {"ADC Mono Right Filter", NULL, "ADC Mono R ASRC", is_using_asrc},
3256 {"DAC Mono Left Filter", NULL, "DAC Mono L ASRC", is_using_asrc},
3257 {"DAC Mono Right Filter", NULL, "DAC Mono R ASRC", is_using_asrc},
3277 {"Mono DMIC L Mux", NULL, "DMIC MONO L ASRC"},
3278 {"Mono DMIC R Mux", NULL, "DMIC MONO R ASRC"},
3288 {"CLKDET MONO", NULL, "CLKDET"},
3389 {"Mono DMIC L Mux", "DMIC1 L", "DMIC L1"},
3390 {"Mono DMIC L Mux", "DMIC2 L", "DMIC L2"},
3392 {"Mono DMIC R Mux", "DMIC1 R", "DMIC R1"},
3393 {"Mono DMIC R Mux", "DMIC2 R", "DMIC R2"},
3411 {"Stereo1 DD L Mux", "MONO DAC", "Mono DAC MIXL"},
3414 {"Stereo1 DD R Mux", "MONO DAC", "Mono DAC MIXR"},
3426 {"Mono ADC L Mux", "ADC1 L", "ADC1 L"},
3427 {"Mono ADC L Mux", "ADC1 R", "ADC1 R"},
3428 {"Mono ADC L Mux", "ADC2 L", "ADC2 L"},
3429 {"Mono ADC L Mux", "ADC2 R", "ADC2 R"},
3431 {"Mono ADC R Mux", "ADC1 L", "ADC1 L"},
3432 {"Mono ADC R Mux", "ADC1 R", "ADC1 R"},
3433 {"Mono ADC R Mux", "ADC2 L", "ADC2 L"},
3434 {"Mono ADC R Mux", "ADC2 R", "ADC2 R"},
3436 {"Mono DD L Mux", "STO2 DAC", "Stereo2 DAC MIXL"},
3437 {"Mono DD L Mux", "MONO DAC", "Mono DAC MIXL"},
3439 {"Mono DD R Mux", "STO2 DAC", "Stereo2 DAC MIXR"},
3440 {"Mono DD R Mux", "MONO DAC", "Mono DAC MIXR"},
3442 {"Mono ADC L2 Mux", "DMIC", "Mono DMIC L Mux"},
3443 {"Mono ADC L2 Mux", "DAC MIXL", "DAC MIXL"},
3444 {"Mono ADC L1 Mux", "DD Mux", "Mono DD L Mux"},
3445 {"Mono ADC L1 Mux", "ADC", "Mono ADC L Mux"},
3447 {"Mono ADC R1 Mux", "DD Mux", "Mono DD R Mux"},
3448 {"Mono ADC R1 Mux", "ADC", "Mono ADC R Mux"},
3449 {"Mono ADC R2 Mux", "DMIC", "Mono DMIC R Mux"},
3450 {"Mono ADC R2 Mux", "DAC MIXR", "DAC MIXR"},
3460 {"Stereo2 DD L Mux", "MONO DAC", "Mono DAC MIXL"},
3463 {"Stereo2 DD R Mux", "MONO DAC", "Mono DAC MIXR"},
3483 {"Mono ADC MIXL", "ADC1 Switch", "Mono ADC L1 Mux"},
3484 {"Mono ADC MIXL", "ADC2 Switch", "Mono ADC L2 Mux"},
3485 {"Mono ADC MIXL", NULL, "ADC Mono Left Filter"},
3487 {"Mono ADC MIXR", "ADC1 Switch", "Mono ADC R1 Mux"},
3488 {"Mono ADC MIXR", "ADC2 Switch", "Mono ADC R2 Mux"},
3489 {"Mono ADC MIXR", NULL, "ADC Mono Right Filter"},
3503 {"Mono ADC MIX", NULL, "Mono ADC MIXL"},
3504 {"Mono ADC MIX", NULL, "Mono ADC MIXR"},
3510 {"IF1_1_ADC3 Mux", "MONO ADC", "Mono ADC MIX"},
3518 {"IF1_2_ADC3 Mux", "MONO ADC", "Mono ADC MIX"},
3767 {"IF2_1 ADC Mux", "MONO ADC", "Mono ADC MIX"},
3778 {"IF2_2 ADC Mux", "MONO ADC", "Mono ADC MIX"},
3789 {"IF3 ADC Mux", "MONO ADC", "Mono ADC MIX"},
3893 {"DAC L2 Mux", "Mono ADC MIX", "Mono ADC MIXL"},
3894 {"DAC L2 Mux", NULL, "DAC Mono Left Filter"},
3900 {"DAC R2 Mux", "Mono ADC MIX", "Mono ADC MIXR"},
3901 {"DAC R2 Mux", NULL, "DAC Mono Right Filter"},
3935 {"Mono DAC MIXL", "DAC L1 Switch", "DAC1 MIXL"},
3936 {"Mono DAC MIXL", "DAC R1 Switch", "DAC1 MIXR"},
3937 {"Mono DAC MIXL", "DAC L2 Switch", "DAC L2 Mux"},
3938 {"Mono DAC MIXL", "DAC R2 Switch", "DAC R2 Mux"},
3939 {"Mono DAC MIXR", "DAC L1 Switch", "DAC1 MIXL"},
3940 {"Mono DAC MIXR", "DAC R1 Switch", "DAC1 MIXR"},
3941 {"Mono DAC MIXR", "DAC L2 Switch", "DAC L2 Mux"},
3942 {"Mono DAC MIXR", "DAC R2 Switch", "DAC R2 Mux"},
3946 {"DAC MIXL", "Mono DAC Mixer", "Mono DAC MIXL"},
3949 {"DAC MIXR", "Mono DAC Mixer", "Mono DAC MIXR"},
3959 {"DAC L2 Source", "Mono DAC Mixer", "Mono DAC MIXL"},
3962 {"DAC R2 Source", "Mono DAC Mixer", "Mono DAC MIXR"},
3981 {"OUT MIXL", "DAC L2 Switch", "DAC L2"},
3982 {"OUT MIXL", "INL Switch", "INL VOL"},
3983 {"OUT MIXL", "BST1 Switch", "BST1"},
3984 {"OUT MIXL", "BST2 Switch", "BST2"},
3985 {"OUT MIXL", "BST3 Switch", "BST3"},
3986 {"OUT MIXR", "DAC R2 Switch", "DAC R2"},
3987 {"OUT MIXR", "INR Switch", "INR VOL"},
3988 {"OUT MIXR", "BST2 Switch", "BST2"},
3989 {"OUT MIXR", "BST3 Switch", "BST3"},
3990 {"OUT MIXR", "BST4 Switch", "BST4"},
3993 {"Mono MIX", "DAC L2 Switch", "DAC L2"},
3994 {"Mono MIX", "MONOVOL Switch", "MONOVOL"},
3995 {"Mono Amp", NULL, "Mono MIX"},
3996 {"Mono Amp", NULL, "Vref2"},
3997 {"Mono Amp", NULL, "Vref3"},
3998 {"Mono Amp", NULL, "CLKDET SYS"},
3999 {"Mono Amp", NULL, "CLKDET MONO"},
4000 {"Mono Playback", "Switch", "Mono Amp"},
4001 {"MONOOUT", NULL, "Mono Playback"},
4014 {"OUTVOL L", "Switch", "OUT MIXL"},
4015 {"OUTVOL R", "Switch", "OUT MIXR"},
4031 {"PDM L Mux", "Mono DAC", "Mono DAC MIXL"},
4035 {"PDM R Mux", "Mono DAC", "Mono DAC MIXR"},
4048 struct snd_soc_component *component = dai->component; in rt5665_set_tdm_slot()
4070 return -EINVAL; in rt5665_set_tdm_slot()
4089 return -EINVAL; in rt5665_set_tdm_slot()
4104 struct snd_soc_component *component = dai->component; in rt5665_hw_params()
4109 rt5665->lrck[dai->id] = params_rate(params); in rt5665_hw_params()
4110 pre_div = rl6231_get_clk_info(rt5665->sysclk, rt5665->lrck[dai->id]); in rt5665_hw_params()
4112 dev_warn(component->dev, "Force using PLL"); in rt5665_hw_params()
4114 rt5665->sysclk, rt5665->lrck[dai->id] * 512); in rt5665_hw_params()
4116 rt5665->lrck[dai->id] * 512, 0); in rt5665_hw_params()
4121 dev_err(component->dev, "Unsupported frame size: %d\n", frame_size); in rt5665_hw_params()
4122 return -EINVAL; in rt5665_hw_params()
4125 dev_dbg(dai->dev, "lrck is %dHz and pre_div is %d for iis %d\n", in rt5665_hw_params()
4126 rt5665->lrck[dai->id], pre_div, dai->id); in rt5665_hw_params()
4144 return -EINVAL; in rt5665_hw_params()
4147 switch (dai->id) { in rt5665_hw_params()
4175 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id); in rt5665_hw_params()
4176 return -EINVAL; in rt5665_hw_params()
4182 switch (rt5665->lrck[dai->id]) { in rt5665_hw_params()
4200 if (rt5665->master[RT5665_AIF2_1] || rt5665->master[RT5665_AIF2_2]) { in rt5665_hw_params()
4204 if (rt5665->master[RT5665_AIF3]) { in rt5665_hw_params()
4214 struct snd_soc_component *component = dai->component; in rt5665_set_dai_fmt()
4220 rt5665->master[dai->id] = 1; in rt5665_set_dai_fmt()
4224 rt5665->master[dai->id] = 0; in rt5665_set_dai_fmt()
4227 return -EINVAL; in rt5665_set_dai_fmt()
4237 return -EINVAL; in rt5665_set_dai_fmt()
4253 return -EINVAL; in rt5665_set_dai_fmt()
4256 switch (dai->id) { in rt5665_set_dai_fmt()
4275 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id); in rt5665_set_dai_fmt()
4276 return -EINVAL; in rt5665_set_dai_fmt()
4287 if (freq == rt5665->sysclk && clk_id == rt5665->sysclk_src) in rt5665_set_component_sysclk()
4304 dev_err(component->dev, "Invalid clock id (%d)\n", clk_id); in rt5665_set_component_sysclk()
4305 return -EINVAL; in rt5665_set_component_sysclk()
4310 if (rt5665->master[RT5665_AIF2_1] || rt5665->master[RT5665_AIF2_2]) { in rt5665_set_component_sysclk()
4314 if (rt5665->master[RT5665_AIF3]) { in rt5665_set_component_sysclk()
4319 rt5665->sysclk = freq; in rt5665_set_component_sysclk()
4320 rt5665->sysclk_src = clk_id; in rt5665_set_component_sysclk()
4322 dev_dbg(component->dev, "Sysclk is %dHz and clock id is %d\n", freq, clk_id); in rt5665_set_component_sysclk()
4335 if (source == rt5665->pll_src && freq_in == rt5665->pll_in && in rt5665_set_component_pll()
4336 freq_out == rt5665->pll_out) in rt5665_set_component_pll()
4340 dev_dbg(component->dev, "PLL disabled\n"); in rt5665_set_component_pll()
4342 rt5665->pll_in = 0; in rt5665_set_component_pll()
4343 rt5665->pll_out = 0; in rt5665_set_component_pll()
4367 dev_err(component->dev, "Unknown PLL Source %d\n", source); in rt5665_set_component_pll()
4368 return -EINVAL; in rt5665_set_component_pll()
4373 dev_err(component->dev, "Unsupported input clock %d\n", freq_in); in rt5665_set_component_pll()
4377 dev_dbg(component->dev, "bypass=%d m=%d n=%d k=%d\n", in rt5665_set_component_pll()
4387 rt5665->pll_in = freq_in; in rt5665_set_component_pll()
4388 rt5665->pll_out = freq_out; in rt5665_set_component_pll()
4389 rt5665->pll_src = source; in rt5665_set_component_pll()
4396 struct snd_soc_component *component = dai->component; in rt5665_set_bclk_ratio()
4399 dev_dbg(component->dev, "%s ratio=%d\n", __func__, ratio); in rt5665_set_bclk_ratio()
4401 rt5665->bclk[dai->id] = ratio; in rt5665_set_bclk_ratio()
4404 switch (dai->id) { in rt5665_set_bclk_ratio()
4429 regmap_update_bits(rt5665->regmap, RT5665_DIG_MISC, in rt5665_set_bias_level()
4434 regmap_update_bits(rt5665->regmap, RT5665_PWR_DIG_1, in rt5665_set_bias_level()
4436 regmap_update_bits(rt5665->regmap, RT5665_PWR_ANLG_1, in rt5665_set_bias_level()
4438 regmap_update_bits(rt5665->regmap, RT5665_DIG_MISC, in rt5665_set_bias_level()
4442 regmap_update_bits(rt5665->regmap, RT5665_PWR_DIG_1, in rt5665_set_bias_level()
4444 regmap_update_bits(rt5665->regmap, RT5665_PWR_ANLG_1, in rt5665_set_bias_level()
4459 rt5665->component = component; in rt5665_probe()
4461 schedule_delayed_work(&rt5665->calibrate_work, msecs_to_jiffies(100)); in rt5665_probe()
4470 regmap_write(rt5665->regmap, RT5665_RESET, 0); in rt5665_remove()
4478 regcache_cache_only(rt5665->regmap, true); in rt5665_suspend()
4479 regcache_mark_dirty(rt5665->regmap); in rt5665_suspend()
4487 regcache_cache_only(rt5665->regmap, false); in rt5665_resume()
4488 regcache_sync(rt5665->regmap); in rt5665_resume()
4510 .name = "rt5665-aif1_1",
4529 .name = "rt5665-aif1_2",
4541 .name = "rt5665-aif2_1",
4560 .name = "rt5665-aif2_2",
4579 .name = "rt5665-aif3",
4640 rt5665->pdata.in1_diff = of_property_read_bool(dev->of_node, in rt5665_parse_dt()
4641 "realtek,in1-differential"); in rt5665_parse_dt()
4642 rt5665->pdata.in2_diff = of_property_read_bool(dev->of_node, in rt5665_parse_dt()
4643 "realtek,in2-differential"); in rt5665_parse_dt()
4644 rt5665->pdata.in3_diff = of_property_read_bool(dev->of_node, in rt5665_parse_dt()
4645 "realtek,in3-differential"); in rt5665_parse_dt()
4646 rt5665->pdata.in4_diff = of_property_read_bool(dev->of_node, in rt5665_parse_dt()
4647 "realtek,in4-differential"); in rt5665_parse_dt()
4649 of_property_read_u32(dev->of_node, "realtek,dmic1-data-pin", in rt5665_parse_dt()
4650 &rt5665->pdata.dmic1_data_pin); in rt5665_parse_dt()
4651 of_property_read_u32(dev->of_node, "realtek,dmic2-data-pin", in rt5665_parse_dt()
4652 &rt5665->pdata.dmic2_data_pin); in rt5665_parse_dt()
4653 of_property_read_u32(dev->of_node, "realtek,jd-src", in rt5665_parse_dt()
4654 &rt5665->pdata.jd_src); in rt5665_parse_dt()
4663 mutex_lock(&rt5665->calibrate_mutex); in rt5665_calibrate()
4665 regcache_cache_bypass(rt5665->regmap, true); in rt5665_calibrate()
4667 regmap_write(rt5665->regmap, RT5665_RESET, 0); in rt5665_calibrate()
4668 regmap_write(rt5665->regmap, RT5665_BIAS_CUR_CTRL_8, 0xa602); in rt5665_calibrate()
4669 regmap_write(rt5665->regmap, RT5665_HP_CHARGE_PUMP_1, 0x0c26); in rt5665_calibrate()
4670 regmap_write(rt5665->regmap, RT5665_MONOMIX_IN_GAIN, 0x021f); in rt5665_calibrate()
4671 regmap_write(rt5665->regmap, RT5665_MONO_OUT, 0x480a); in rt5665_calibrate()
4672 regmap_write(rt5665->regmap, RT5665_PWR_MIXER, 0x083f); in rt5665_calibrate()
4673 regmap_write(rt5665->regmap, RT5665_PWR_DIG_1, 0x0180); in rt5665_calibrate()
4674 regmap_write(rt5665->regmap, RT5665_EJD_CTRL_1, 0x4040); in rt5665_calibrate()
4675 regmap_write(rt5665->regmap, RT5665_HP_LOGIC_CTRL_2, 0x0000); in rt5665_calibrate()
4676 regmap_write(rt5665->regmap, RT5665_DIG_MISC, 0x0001); in rt5665_calibrate()
4677 regmap_write(rt5665->regmap, RT5665_MICBIAS_2, 0x0380); in rt5665_calibrate()
4678 regmap_write(rt5665->regmap, RT5665_GLB_CLK, 0x8000); in rt5665_calibrate()
4679 regmap_write(rt5665->regmap, RT5665_ADDA_CLK_1, 0x1000); in rt5665_calibrate()
4680 regmap_write(rt5665->regmap, RT5665_CHOP_DAC, 0x3030); in rt5665_calibrate()
4681 regmap_write(rt5665->regmap, RT5665_CALIB_ADC_CTRL, 0x3c05); in rt5665_calibrate()
4682 regmap_write(rt5665->regmap, RT5665_PWR_ANLG_1, 0xaa3e); in rt5665_calibrate()
4684 regmap_write(rt5665->regmap, RT5665_PWR_ANLG_1, 0xfe7e); in rt5665_calibrate()
4685 regmap_write(rt5665->regmap, RT5665_HP_CALIB_CTRL_2, 0x0321); in rt5665_calibrate()
4687 regmap_write(rt5665->regmap, RT5665_HP_CALIB_CTRL_1, 0xfc00); in rt5665_calibrate()
4690 regmap_read(rt5665->regmap, RT5665_HP_CALIB_STA_1, &value); in rt5665_calibrate()
4698 regmap_write(rt5665->regmap, RT5665_RESET, 0); in rt5665_calibrate()
4699 regcache_cache_bypass(rt5665->regmap, false); in rt5665_calibrate()
4706 regmap_write(rt5665->regmap, RT5665_MONO_AMP_CALIB_CTRL_1, 0x9e24); in rt5665_calibrate()
4709 regmap_read(rt5665->regmap, RT5665_MONO_AMP_CALIB_STA1, &value); in rt5665_calibrate()
4716 pr_err("MONO Calibration Failure\n"); in rt5665_calibrate()
4717 regmap_write(rt5665->regmap, RT5665_RESET, 0); in rt5665_calibrate()
4718 regcache_cache_bypass(rt5665->regmap, false); in rt5665_calibrate()
4725 regmap_write(rt5665->regmap, RT5665_RESET, 0); in rt5665_calibrate()
4726 regcache_cache_bypass(rt5665->regmap, false); in rt5665_calibrate()
4728 regcache_mark_dirty(rt5665->regmap); in rt5665_calibrate()
4729 regcache_sync(rt5665->regmap); in rt5665_calibrate()
4731 regmap_write(rt5665->regmap, RT5665_BIAS_CUR_CTRL_8, 0xa602); in rt5665_calibrate()
4732 regmap_write(rt5665->regmap, RT5665_ASRC_8, 0x0120); in rt5665_calibrate()
4735 rt5665->calibration_done = true; in rt5665_calibrate()
4736 mutex_unlock(&rt5665->calibrate_mutex); in rt5665_calibrate()
4744 while (!snd_soc_card_is_instantiated(rt5665->component->card)) { in rt5665_calibrate_handler()
4754 struct rt5665_platform_data *pdata = dev_get_platdata(&i2c->dev); in rt5665_i2c_probe()
4759 rt5665 = devm_kzalloc(&i2c->dev, sizeof(struct rt5665_priv), in rt5665_i2c_probe()
4763 return -ENOMEM; in rt5665_i2c_probe()
4768 rt5665->pdata = *pdata; in rt5665_i2c_probe()
4770 rt5665_parse_dt(rt5665, &i2c->dev); in rt5665_i2c_probe()
4772 ret = devm_regulator_bulk_get_enable(&i2c->dev, ARRAY_SIZE(rt5665_supply_names), in rt5665_i2c_probe()
4775 dev_err(&i2c->dev, "Failed to request supplies: %d\n", ret); in rt5665_i2c_probe()
4779 rt5665->gpiod_ldo1_en = devm_gpiod_get_optional(&i2c->dev, in rt5665_i2c_probe()
4780 "realtek,ldo1-en", in rt5665_i2c_probe()
4782 if (IS_ERR(rt5665->gpiod_ldo1_en)) { in rt5665_i2c_probe()
4783 dev_err(&i2c->dev, "Failed gpio request ldo1_en\n"); in rt5665_i2c_probe()
4784 return PTR_ERR(rt5665->gpiod_ldo1_en); in rt5665_i2c_probe()
4790 rt5665->regmap = devm_regmap_init_i2c(i2c, &rt5665_regmap); in rt5665_i2c_probe()
4791 if (IS_ERR(rt5665->regmap)) { in rt5665_i2c_probe()
4792 ret = PTR_ERR(rt5665->regmap); in rt5665_i2c_probe()
4793 dev_err(&i2c->dev, "Failed to allocate register map: %d\n", in rt5665_i2c_probe()
4798 regmap_read(rt5665->regmap, RT5665_DEVICE_ID, &val); in rt5665_i2c_probe()
4800 dev_err(&i2c->dev, in rt5665_i2c_probe()
4802 return -ENODEV; in rt5665_i2c_probe()
4805 regmap_read(rt5665->regmap, RT5665_RESET, &val); in rt5665_i2c_probe()
4808 rt5665->id = CODEC_5666; in rt5665_i2c_probe()
4812 rt5665->id = CODEC_5665; in rt5665_i2c_probe()
4816 regmap_write(rt5665->regmap, RT5665_RESET, 0); in rt5665_i2c_probe()
4819 if (rt5665->pdata.in1_diff) in rt5665_i2c_probe()
4820 regmap_update_bits(rt5665->regmap, RT5665_IN1_IN2, in rt5665_i2c_probe()
4822 if (rt5665->pdata.in2_diff) in rt5665_i2c_probe()
4823 regmap_update_bits(rt5665->regmap, RT5665_IN1_IN2, in rt5665_i2c_probe()
4825 if (rt5665->pdata.in3_diff) in rt5665_i2c_probe()
4826 regmap_update_bits(rt5665->regmap, RT5665_IN3_IN4, in rt5665_i2c_probe()
4828 if (rt5665->pdata.in4_diff) in rt5665_i2c_probe()
4829 regmap_update_bits(rt5665->regmap, RT5665_IN3_IN4, in rt5665_i2c_probe()
4833 if (rt5665->pdata.dmic1_data_pin != RT5665_DMIC1_NULL || in rt5665_i2c_probe()
4834 rt5665->pdata.dmic2_data_pin != RT5665_DMIC2_NULL) { in rt5665_i2c_probe()
4835 regmap_update_bits(rt5665->regmap, RT5665_GPIO_CTRL_2, in rt5665_i2c_probe()
4837 regmap_update_bits(rt5665->regmap, RT5665_GPIO_CTRL_1, in rt5665_i2c_probe()
4839 switch (rt5665->pdata.dmic1_data_pin) { in rt5665_i2c_probe()
4841 regmap_update_bits(rt5665->regmap, RT5665_DMIC_CTRL_1, in rt5665_i2c_probe()
4846 regmap_update_bits(rt5665->regmap, RT5665_DMIC_CTRL_1, in rt5665_i2c_probe()
4848 regmap_update_bits(rt5665->regmap, RT5665_GPIO_CTRL_1, in rt5665_i2c_probe()
4853 dev_dbg(&i2c->dev, "no DMIC1\n"); in rt5665_i2c_probe()
4857 switch (rt5665->pdata.dmic2_data_pin) { in rt5665_i2c_probe()
4859 regmap_update_bits(rt5665->regmap, RT5665_DMIC_CTRL_1, in rt5665_i2c_probe()
4864 regmap_update_bits(rt5665->regmap, in rt5665_i2c_probe()
4868 regmap_update_bits(rt5665->regmap, RT5665_GPIO_CTRL_1, in rt5665_i2c_probe()
4873 dev_dbg(&i2c->dev, "no DMIC2\n"); in rt5665_i2c_probe()
4879 regmap_write(rt5665->regmap, RT5665_HP_LOGIC_CTRL_2, 0x0002); in rt5665_i2c_probe()
4880 regmap_update_bits(rt5665->regmap, RT5665_EJD_CTRL_1, in rt5665_i2c_probe()
4883 regmap_update_bits(rt5665->regmap, RT5665_STO1_DAC_SIL_DET, in rt5665_i2c_probe()
4886 regmap_update_bits(rt5665->regmap, RT5665_HP_CHARGE_PUMP_1, in rt5665_i2c_probe()
4890 if (rt5665->id == CODEC_5666) { in rt5665_i2c_probe()
4891 regmap_update_bits(rt5665->regmap, RT5665_GPIO_CTRL_2, in rt5665_i2c_probe()
4893 regmap_update_bits(rt5665->regmap, RT5665_GPIO_CTRL_3, in rt5665_i2c_probe()
4898 regmap_update_bits(rt5665->regmap, RT5665_PWR_ANLG_1, in rt5665_i2c_probe()
4902 INIT_DELAYED_WORK(&rt5665->jack_detect_work, in rt5665_i2c_probe()
4904 INIT_DELAYED_WORK(&rt5665->calibrate_work, in rt5665_i2c_probe()
4906 INIT_DELAYED_WORK(&rt5665->jd_check_work, in rt5665_i2c_probe()
4909 mutex_init(&rt5665->calibrate_mutex); in rt5665_i2c_probe()
4911 if (i2c->irq) { in rt5665_i2c_probe()
4912 ret = devm_request_threaded_irq(&i2c->dev, i2c->irq, NULL, in rt5665_i2c_probe()
4916 dev_err(&i2c->dev, "Failed to reguest IRQ: %d\n", ret); in rt5665_i2c_probe()
4920 return devm_snd_soc_register_component(&i2c->dev, in rt5665_i2c_probe()
4929 regmap_write(rt5665->regmap, RT5665_RESET, 0); in rt5665_i2c_shutdown()