• Home
  • Raw
  • Download

Lines Matching +full:dmic +full:- +full:ref

2  * rt5682.c  --  RT5682 ALSA SoC audio component driver
30 #include <sound/soc-dapm.h>
753 static const DECLARE_TLV_DB_SCALE(hp_vol_tlv, -2250, 150, 0);
754 static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -6525, 75, 0);
755 static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -1725, 75, 0);
810 * rt5682_sel_asrc_clk_src - select ASRC clock source for a set of filters
834 return -EINVAL; in rt5682_sel_asrc_clk_src()
896 * rt5682_headset_detect - Detect headset.
931 rt5682->jack_type = SND_JACK_HEADSET; in rt5682_headset_detect()
935 rt5682->jack_type = SND_JACK_HEADPHONE; in rt5682_headset_detect()
945 rt5682->jack_type = 0; in rt5682_headset_detect()
948 dev_dbg(component->dev, "jack_type = %d\n", rt5682->jack_type); in rt5682_headset_detect()
949 return rt5682->jack_type; in rt5682_headset_detect()
957 &rt5682->jack_detect_work, msecs_to_jiffies(250)); in rt5682_irq()
967 if (snd_soc_component_read32(rt5682->component, RT5682_AJD1_CTRL) in rt5682_jd_check_handler()
970 rt5682->jack_type = rt5682_headset_detect(rt5682->component, 0); in rt5682_jd_check_handler()
972 snd_soc_jack_report(rt5682->hs_jack, rt5682->jack_type, in rt5682_jd_check_handler()
977 schedule_delayed_work(&rt5682->jd_check_work, 500); in rt5682_jd_check_handler()
986 rt5682->hs_jack = hs_jack; in rt5682_set_jack_detect()
989 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2, in rt5682_set_jack_detect()
991 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL, in rt5682_set_jack_detect()
996 switch (rt5682->pdata.jd_src) { in rt5682_set_jack_detect()
1005 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_set_jack_detect()
1007 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL, in rt5682_set_jack_detect()
1011 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_2, in rt5682_set_jack_detect()
1014 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2, in rt5682_set_jack_detect()
1018 &rt5682->jack_detect_work, msecs_to_jiffies(250)); in rt5682_set_jack_detect()
1022 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2, in rt5682_set_jack_detect()
1024 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL, in rt5682_set_jack_detect()
1029 dev_warn(component->dev, "Wrong JD source\n"); in rt5682_set_jack_detect()
1042 while (!rt5682->component) in rt5682_jack_detect_handler()
1045 while (!rt5682->component->card->instantiated) in rt5682_jack_detect_handler()
1048 mutex_lock(&rt5682->calibrate_mutex); in rt5682_jack_detect_handler()
1050 val = snd_soc_component_read32(rt5682->component, RT5682_AJD1_CTRL) in rt5682_jack_detect_handler()
1054 if (rt5682->jack_type == 0) { in rt5682_jack_detect_handler()
1056 rt5682->jack_type = in rt5682_jack_detect_handler()
1057 rt5682_headset_detect(rt5682->component, 1); in rt5682_jack_detect_handler()
1060 rt5682->jack_type = SND_JACK_HEADSET; in rt5682_jack_detect_handler()
1061 btn_type = rt5682_button_detect(rt5682->component); in rt5682_jack_detect_handler()
1073 rt5682->jack_type |= SND_JACK_BTN_0; in rt5682_jack_detect_handler()
1078 rt5682->jack_type |= SND_JACK_BTN_1; in rt5682_jack_detect_handler()
1083 rt5682->jack_type |= SND_JACK_BTN_2; in rt5682_jack_detect_handler()
1088 rt5682->jack_type |= SND_JACK_BTN_3; in rt5682_jack_detect_handler()
1094 dev_err(rt5682->component->dev, in rt5682_jack_detect_handler()
1102 rt5682->jack_type = rt5682_headset_detect(rt5682->component, 0); in rt5682_jack_detect_handler()
1105 snd_soc_jack_report(rt5682->hs_jack, rt5682->jack_type, in rt5682_jack_detect_handler()
1110 if (rt5682->jack_type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 | in rt5682_jack_detect_handler()
1112 schedule_delayed_work(&rt5682->jd_check_work, 0); in rt5682_jack_detect_handler()
1114 cancel_delayed_work_sync(&rt5682->jd_check_work); in rt5682_jack_detect_handler()
1116 mutex_unlock(&rt5682->calibrate_mutex); in rt5682_jack_detect_handler()
1150 if (rt5682->sysclk < target) { in rt5682_div_sel()
1152 rt5682->sysclk); in rt5682_div_sel()
1156 for (i = 0; i < size - 1; i++) { in rt5682_div_sel()
1158 if (target * div[i] == rt5682->sysclk) in rt5682_div_sel()
1160 if (target * div[i + 1] > rt5682->sysclk) { in rt5682_div_sel()
1162 rt5682->sysclk); in rt5682_div_sel()
1167 if (target * div[i] < rt5682->sysclk) in rt5682_div_sel()
1169 rt5682->sysclk); in rt5682_div_sel()
1171 return size - 1; in rt5682_div_sel()
1176 * set_dmic_clk - Set parameter of dmic.
1182 * Choose dmic clock between 1MHz and 3MHz.
1189 snd_soc_dapm_to_component(w->dapm); in set_dmic_clk()
1191 int idx = -EINVAL; in set_dmic_clk()
1206 snd_soc_dapm_to_component(w->dapm); in set_filter_clk()
1208 int ref, val, reg, idx = -EINVAL; in set_filter_clk() local
1214 if (w->shift == RT5682_PWR_ADC_S1F_BIT && in set_filter_clk()
1216 ref = 256 * rt5682->lrck[RT5682_AIF2]; in set_filter_clk()
1218 ref = 256 * rt5682->lrck[RT5682_AIF1]; in set_filter_clk()
1220 idx = rt5682_div_sel(rt5682, ref, div_f, ARRAY_SIZE(div_f)); in set_filter_clk()
1222 if (w->shift == RT5682_PWR_ADC_S1F_BIT) in set_filter_clk()
1232 if (rt5682->sysclk <= 12288000 * div_o[idx]) in set_filter_clk()
1248 snd_soc_dapm_to_component(w->dapm); in is_sys_clk_from_pll1()
1263 snd_soc_dapm_to_component(w->dapm); in is_using_asrc()
1265 switch (w->shift) { in is_using_asrc()
1339 /* MX-26 [13] [5] */
1359 /* MX-26 [11:10] [3:2] */
1379 /* MX-26 [12] [4] */
1381 "DAC MIX", "DMIC"
1398 /* MX-79 [6:4] I2S1 ADC data location */
1418 /* MX-2B [4], MX-2B [0]*/
1449 snd_soc_dapm_to_component(w->dapm); in rt5682_hp_event()
1502 snd_soc_dapm_to_component(w->dapm); in rt5655_set_verf()
1506 switch (w->shift) { in rt5655_set_verf()
1524 switch (w->shift) { in rt5655_set_verf()
1589 SND_SOC_DAPM_SUPPLY_S("DMIC ASRC", 1, RT5682_PLL_TRACK_1,
1599 SND_SOC_DAPM_INPUT("DMIC L1"),
1600 SND_SOC_DAPM_INPUT("DMIC R1"),
1604 SND_SOC_DAPM_SUPPLY("DMIC CLK", SND_SOC_NOPM, 0, 0,
1796 {"DMIC L1", NULL, "DMIC CLK"},
1797 {"DMIC L1", NULL, "DMIC1 Power"},
1798 {"DMIC R1", NULL, "DMIC CLK"},
1799 {"DMIC R1", NULL, "DMIC1 Power"},
1800 {"DMIC CLK", NULL, "DMIC ASRC"},
1809 {"Stereo1 ADC L2 Mux", "DMIC", "DMIC L1"},
1814 {"Stereo1 ADC R2 Mux", "DMIC", "DMIC R1"},
1908 struct snd_soc_component *component = dai->component; in rt5682_set_tdm_slot()
1934 return -EINVAL; in rt5682_set_tdm_slot()
1943 return -EINVAL; in rt5682_set_tdm_slot()
1963 return -EINVAL; in rt5682_set_tdm_slot()
1978 struct snd_soc_component *component = dai->component; in rt5682_hw_params()
1983 rt5682->lrck[dai->id] = params_rate(params); in rt5682_hw_params()
1984 pre_div = rl6231_get_clk_info(rt5682->sysclk, rt5682->lrck[dai->id]); in rt5682_hw_params()
1988 dev_err(component->dev, "Unsupported frame size: %d\n", in rt5682_hw_params()
1990 return -EINVAL; in rt5682_hw_params()
1993 dev_dbg(dai->dev, "lrck is %dHz and pre_div is %d for iis %d\n", in rt5682_hw_params()
1994 rt5682->lrck[dai->id], pre_div, dai->id); in rt5682_hw_params()
2016 return -EINVAL; in rt5682_hw_params()
2019 switch (dai->id) { in rt5682_hw_params()
2023 if (rt5682->master[RT5682_AIF1]) { in rt5682_hw_params()
2040 if (rt5682->master[RT5682_AIF2]) { in rt5682_hw_params()
2055 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id); in rt5682_hw_params()
2056 return -EINVAL; in rt5682_hw_params()
2064 struct snd_soc_component *component = dai->component; in rt5682_set_dai_fmt()
2070 rt5682->master[dai->id] = 1; in rt5682_set_dai_fmt()
2073 rt5682->master[dai->id] = 0; in rt5682_set_dai_fmt()
2076 return -EINVAL; in rt5682_set_dai_fmt()
2087 if (dai->id == RT5682_AIF1) in rt5682_set_dai_fmt()
2090 return -EINVAL; in rt5682_set_dai_fmt()
2093 if (dai->id == RT5682_AIF1) in rt5682_set_dai_fmt()
2097 return -EINVAL; in rt5682_set_dai_fmt()
2100 return -EINVAL; in rt5682_set_dai_fmt()
2119 return -EINVAL; in rt5682_set_dai_fmt()
2122 switch (dai->id) { in rt5682_set_dai_fmt()
2130 tdm_ctrl | rt5682->master[dai->id]); in rt5682_set_dai_fmt()
2133 if (rt5682->master[dai->id] == 0) in rt5682_set_dai_fmt()
2140 dev_err(component->dev, "Invalid dai->id: %d\n", dai->id); in rt5682_set_dai_fmt()
2141 return -EINVAL; in rt5682_set_dai_fmt()
2152 if (freq == rt5682->sysclk && clk_id == rt5682->sysclk_src) in rt5682_set_component_sysclk()
2173 dev_err(component->dev, "Invalid clock id (%d)\n", clk_id); in rt5682_set_component_sysclk()
2174 return -EINVAL; in rt5682_set_component_sysclk()
2179 if (rt5682->master[RT5682_AIF2]) { in rt5682_set_component_sysclk()
2185 rt5682->sysclk = freq; in rt5682_set_component_sysclk()
2186 rt5682->sysclk_src = clk_id; in rt5682_set_component_sysclk()
2188 dev_dbg(component->dev, "Sysclk is %dHz and clock id is %d\n", in rt5682_set_component_sysclk()
2202 if (source == rt5682->pll_src && freq_in == rt5682->pll_in && in rt5682_set_component_pll()
2203 freq_out == rt5682->pll_out) in rt5682_set_component_pll()
2207 dev_dbg(component->dev, "PLL disabled\n"); in rt5682_set_component_pll()
2209 rt5682->pll_in = 0; in rt5682_set_component_pll()
2210 rt5682->pll_out = 0; in rt5682_set_component_pll()
2226 dev_err(component->dev, "Unknown PLL Source %d\n", source); in rt5682_set_component_pll()
2227 return -EINVAL; in rt5682_set_component_pll()
2232 dev_err(component->dev, "Unsupport input clock %d\n", freq_in); in rt5682_set_component_pll()
2236 dev_dbg(component->dev, "bypass=%d m=%d n=%d k=%d\n", in rt5682_set_component_pll()
2246 rt5682->pll_in = freq_in; in rt5682_set_component_pll()
2247 rt5682->pll_out = freq_out; in rt5682_set_component_pll()
2248 rt5682->pll_src = source; in rt5682_set_component_pll()
2255 struct snd_soc_component *component = dai->component; in rt5682_set_bclk_ratio()
2258 rt5682->bclk[dai->id] = ratio; in rt5682_set_bclk_ratio()
2272 dev_err(dai->dev, "Invalid bclk ratio %d\n", ratio); in rt5682_set_bclk_ratio()
2273 return -EINVAL; in rt5682_set_bclk_ratio()
2286 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1, in rt5682_set_bias_level()
2289 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1, in rt5682_set_bias_level()
2295 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1, in rt5682_set_bias_level()
2297 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1, in rt5682_set_bias_level()
2301 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1, in rt5682_set_bias_level()
2303 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1, in rt5682_set_bias_level()
2318 rt5682->component = component; in rt5682_probe()
2327 rt5682_reset(rt5682->regmap); in rt5682_remove()
2335 regcache_cache_only(rt5682->regmap, true); in rt5682_suspend()
2336 regcache_mark_dirty(rt5682->regmap); in rt5682_suspend()
2344 regcache_cache_only(rt5682->regmap, false); in rt5682_resume()
2345 regcache_sync(rt5682->regmap); in rt5682_resume()
2372 .name = "rt5682-aif1",
2391 .name = "rt5682-aif2",
2445 device_property_read_u32(dev, "realtek,dmic1-data-pin", in rt5682_parse_dt()
2446 &rt5682->pdata.dmic1_data_pin); in rt5682_parse_dt()
2447 device_property_read_u32(dev, "realtek,dmic1-clk-pin", in rt5682_parse_dt()
2448 &rt5682->pdata.dmic1_clk_pin); in rt5682_parse_dt()
2449 device_property_read_u32(dev, "realtek,jd-src", in rt5682_parse_dt()
2450 &rt5682->pdata.jd_src); in rt5682_parse_dt()
2452 rt5682->pdata.ldo1_en = of_get_named_gpio(dev->of_node, in rt5682_parse_dt()
2453 "realtek,ldo1-en-gpios", 0); in rt5682_parse_dt()
2462 mutex_lock(&rt5682->calibrate_mutex); in rt5682_calibrate()
2464 rt5682_reset(rt5682->regmap); in rt5682_calibrate()
2465 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0xa2bf); in rt5682_calibrate()
2467 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0xf2bf); in rt5682_calibrate()
2468 regmap_write(rt5682->regmap, RT5682_MICBIAS_2, 0x0380); in rt5682_calibrate()
2469 regmap_write(rt5682->regmap, RT5682_PWR_DIG_1, 0x8001); in rt5682_calibrate()
2470 regmap_write(rt5682->regmap, RT5682_TEST_MODE_CTRL_1, 0x0000); in rt5682_calibrate()
2471 regmap_write(rt5682->regmap, RT5682_STO1_DAC_MIXER, 0x2080); in rt5682_calibrate()
2472 regmap_write(rt5682->regmap, RT5682_STO1_ADC_MIXER, 0x4040); in rt5682_calibrate()
2473 regmap_write(rt5682->regmap, RT5682_DEPOP_1, 0x0069); in rt5682_calibrate()
2474 regmap_write(rt5682->regmap, RT5682_CHOP_DAC, 0x3000); in rt5682_calibrate()
2475 regmap_write(rt5682->regmap, RT5682_HP_CTRL_2, 0x6000); in rt5682_calibrate()
2476 regmap_write(rt5682->regmap, RT5682_HP_CHARGE_PUMP_1, 0x0f26); in rt5682_calibrate()
2477 regmap_write(rt5682->regmap, RT5682_CALIB_ADC_CTRL, 0x7f05); in rt5682_calibrate()
2478 regmap_write(rt5682->regmap, RT5682_STO1_ADC_MIXER, 0x686c); in rt5682_calibrate()
2479 regmap_write(rt5682->regmap, RT5682_CAL_REC, 0x0d0d); in rt5682_calibrate()
2480 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_9, 0x000f); in rt5682_calibrate()
2481 regmap_write(rt5682->regmap, RT5682_PWR_DIG_1, 0x8d01); in rt5682_calibrate()
2482 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_2, 0x0321); in rt5682_calibrate()
2483 regmap_write(rt5682->regmap, RT5682_HP_LOGIC_CTRL_2, 0x0004); in rt5682_calibrate()
2484 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0x7c00); in rt5682_calibrate()
2485 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_3, 0x06a1); in rt5682_calibrate()
2486 regmap_write(rt5682->regmap, RT5682_A_DAC1_MUX, 0x0311); in rt5682_calibrate()
2487 regmap_write(rt5682->regmap, RT5682_RESET_HPF_CTRL, 0x0000); in rt5682_calibrate()
2488 regmap_write(rt5682->regmap, RT5682_ADC_STO1_HP_CTRL_1, 0x3320); in rt5682_calibrate()
2490 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0xfc00); in rt5682_calibrate()
2493 regmap_read(rt5682->regmap, RT5682_HP_CALIB_STA_1, &value); in rt5682_calibrate()
2504 regmap_write(rt5682->regmap, RT5682_STO1_ADC_MIXER, 0xc0c4); in rt5682_calibrate()
2505 regmap_write(rt5682->regmap, RT5682_PWR_DIG_1, 0x0000); in rt5682_calibrate()
2507 mutex_unlock(&rt5682->calibrate_mutex); in rt5682_calibrate()
2514 struct rt5682_platform_data *pdata = dev_get_platdata(&i2c->dev); in rt5682_i2c_probe()
2519 rt5682 = devm_kzalloc(&i2c->dev, sizeof(struct rt5682_priv), in rt5682_i2c_probe()
2523 return -ENOMEM; in rt5682_i2c_probe()
2528 rt5682->pdata = *pdata; in rt5682_i2c_probe()
2530 rt5682_parse_dt(rt5682, &i2c->dev); in rt5682_i2c_probe()
2532 rt5682->regmap = devm_regmap_init_i2c(i2c, &rt5682_regmap); in rt5682_i2c_probe()
2533 if (IS_ERR(rt5682->regmap)) { in rt5682_i2c_probe()
2534 ret = PTR_ERR(rt5682->regmap); in rt5682_i2c_probe()
2535 dev_err(&i2c->dev, "Failed to allocate register map: %d\n", in rt5682_i2c_probe()
2540 for (i = 0; i < ARRAY_SIZE(rt5682->supplies); i++) in rt5682_i2c_probe()
2541 rt5682->supplies[i].supply = rt5682_supply_names[i]; in rt5682_i2c_probe()
2543 ret = devm_regulator_bulk_get(&i2c->dev, ARRAY_SIZE(rt5682->supplies), in rt5682_i2c_probe()
2544 rt5682->supplies); in rt5682_i2c_probe()
2546 dev_err(&i2c->dev, "Failed to request supplies: %d\n", ret); in rt5682_i2c_probe()
2550 ret = regulator_bulk_enable(ARRAY_SIZE(rt5682->supplies), in rt5682_i2c_probe()
2551 rt5682->supplies); in rt5682_i2c_probe()
2553 dev_err(&i2c->dev, "Failed to enable supplies: %d\n", ret); in rt5682_i2c_probe()
2557 if (gpio_is_valid(rt5682->pdata.ldo1_en)) { in rt5682_i2c_probe()
2558 if (devm_gpio_request_one(&i2c->dev, rt5682->pdata.ldo1_en, in rt5682_i2c_probe()
2560 dev_err(&i2c->dev, "Fail gpio_request gpio_ldo\n"); in rt5682_i2c_probe()
2566 regmap_write(rt5682->regmap, RT5682_I2C_MODE, 0x1); in rt5682_i2c_probe()
2569 regmap_read(rt5682->regmap, RT5682_DEVICE_ID, &val); in rt5682_i2c_probe()
2572 return -ENODEV; in rt5682_i2c_probe()
2575 rt5682_reset(rt5682->regmap); in rt5682_i2c_probe()
2579 ret = regmap_register_patch(rt5682->regmap, patch_list, in rt5682_i2c_probe()
2582 dev_warn(&i2c->dev, "Failed to apply regmap patch: %d\n", ret); in rt5682_i2c_probe()
2584 regmap_write(rt5682->regmap, RT5682_DEPOP_1, 0x0000); in rt5682_i2c_probe()
2586 /* DMIC pin*/ in rt5682_i2c_probe()
2587 if (rt5682->pdata.dmic1_data_pin != RT5682_DMIC1_NULL) { in rt5682_i2c_probe()
2588 switch (rt5682->pdata.dmic1_data_pin) { in rt5682_i2c_probe()
2590 regmap_update_bits(rt5682->regmap, RT5682_DMIC_CTRL_1, in rt5682_i2c_probe()
2592 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_i2c_probe()
2597 regmap_update_bits(rt5682->regmap, RT5682_DMIC_CTRL_1, in rt5682_i2c_probe()
2599 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_i2c_probe()
2604 dev_warn(&i2c->dev, "invalid DMIC_DAT pin\n"); in rt5682_i2c_probe()
2608 switch (rt5682->pdata.dmic1_clk_pin) { in rt5682_i2c_probe()
2610 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_i2c_probe()
2615 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_i2c_probe()
2620 dev_warn(&i2c->dev, "invalid DMIC_CLK pin\n"); in rt5682_i2c_probe()
2625 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1, in rt5682_i2c_probe()
2628 regmap_write(rt5682->regmap, RT5682_MICBIAS_2, 0x0380); in rt5682_i2c_probe()
2629 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_i2c_probe()
2632 regmap_write(rt5682->regmap, RT5682_TEST_MODE_CTRL_1, 0x0000); in rt5682_i2c_probe()
2634 INIT_DELAYED_WORK(&rt5682->jack_detect_work, in rt5682_i2c_probe()
2636 INIT_DELAYED_WORK(&rt5682->jd_check_work, in rt5682_i2c_probe()
2639 mutex_init(&rt5682->calibrate_mutex); in rt5682_i2c_probe()
2641 if (i2c->irq) { in rt5682_i2c_probe()
2642 ret = devm_request_threaded_irq(&i2c->dev, i2c->irq, NULL, in rt5682_i2c_probe()
2646 dev_err(&i2c->dev, "Failed to reguest IRQ: %d\n", ret); in rt5682_i2c_probe()
2650 return devm_snd_soc_register_component(&i2c->dev, in rt5682_i2c_probe()
2659 rt5682_reset(rt5682->regmap); in rt5682_i2c_shutdown()