Lines Matching refs:rt5682
51 void rt5682_apply_patch_list(struct rt5682_priv *rt5682, struct device *dev) in rt5682_apply_patch_list() argument
55 ret = regmap_multi_reg_write(rt5682->regmap, patch_list, in rt5682_apply_patch_list()
810 void rt5682_reset(struct rt5682_priv *rt5682) in rt5682_reset() argument
812 regmap_write(rt5682->regmap, RT5682_RESET, 0); in rt5682_reset()
813 if (!rt5682->is_sdw) in rt5682_reset()
814 regmap_write(rt5682->regmap, RT5682_I2C_MODE, 1); in rt5682_reset()
878 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_enable_push_button_irq() local
889 if (rt5682->is_sdw) in rt5682_enable_push_button_irq()
923 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_headset_detect() local
957 rt5682->jack_type = SND_JACK_HEADSET; in rt5682_headset_detect()
963 rt5682->jack_type = SND_JACK_HEADPHONE; in rt5682_headset_detect()
996 rt5682->jack_type = 0; in rt5682_headset_detect()
999 dev_dbg(component->dev, "jack_type = %d\n", rt5682->jack_type); in rt5682_headset_detect()
1000 return rt5682->jack_type; in rt5682_headset_detect()
1007 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_jack_detect() local
1009 rt5682->hs_jack = hs_jack; in rt5682_set_jack_detect()
1012 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2, in rt5682_set_jack_detect()
1014 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL, in rt5682_set_jack_detect()
1016 cancel_delayed_work_sync(&rt5682->jack_detect_work); in rt5682_set_jack_detect()
1021 if (!rt5682->is_sdw) { in rt5682_set_jack_detect()
1022 switch (rt5682->pdata.jd_src) { in rt5682_set_jack_detect()
1037 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_set_jack_detect()
1039 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL, in rt5682_set_jack_detect()
1043 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_2, in rt5682_set_jack_detect()
1045 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2, in rt5682_set_jack_detect()
1048 regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_4, in rt5682_set_jack_detect()
1049 0x7f7f, (rt5682->pdata.btndet_delay << 8 | in rt5682_set_jack_detect()
1050 rt5682->pdata.btndet_delay)); in rt5682_set_jack_detect()
1051 regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_5, in rt5682_set_jack_detect()
1052 0x7f7f, (rt5682->pdata.btndet_delay << 8 | in rt5682_set_jack_detect()
1053 rt5682->pdata.btndet_delay)); in rt5682_set_jack_detect()
1054 regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_6, in rt5682_set_jack_detect()
1055 0x7f7f, (rt5682->pdata.btndet_delay << 8 | in rt5682_set_jack_detect()
1056 rt5682->pdata.btndet_delay)); in rt5682_set_jack_detect()
1057 regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_7, in rt5682_set_jack_detect()
1058 0x7f7f, (rt5682->pdata.btndet_delay << 8 | in rt5682_set_jack_detect()
1059 rt5682->pdata.btndet_delay)); in rt5682_set_jack_detect()
1061 &rt5682->jack_detect_work, in rt5682_set_jack_detect()
1066 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2, in rt5682_set_jack_detect()
1068 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL, in rt5682_set_jack_detect()
1083 struct rt5682_priv *rt5682 = in rt5682_jack_detect_handler() local
1087 while (!rt5682->component) in rt5682_jack_detect_handler()
1090 while (!rt5682->component->card->instantiated) in rt5682_jack_detect_handler()
1093 mutex_lock(&rt5682->calibrate_mutex); in rt5682_jack_detect_handler()
1095 val = snd_soc_component_read(rt5682->component, RT5682_AJD1_CTRL) in rt5682_jack_detect_handler()
1099 if (rt5682->jack_type == 0) { in rt5682_jack_detect_handler()
1101 rt5682->jack_type = in rt5682_jack_detect_handler()
1102 rt5682_headset_detect(rt5682->component, 1); in rt5682_jack_detect_handler()
1103 rt5682->irq_work_delay_time = 0; in rt5682_jack_detect_handler()
1104 } else if ((rt5682->jack_type & SND_JACK_HEADSET) == in rt5682_jack_detect_handler()
1107 rt5682->jack_type = SND_JACK_HEADSET; in rt5682_jack_detect_handler()
1108 btn_type = rt5682_button_detect(rt5682->component); in rt5682_jack_detect_handler()
1120 rt5682->jack_type |= SND_JACK_BTN_0; in rt5682_jack_detect_handler()
1125 rt5682->jack_type |= SND_JACK_BTN_1; in rt5682_jack_detect_handler()
1130 rt5682->jack_type |= SND_JACK_BTN_2; in rt5682_jack_detect_handler()
1135 rt5682->jack_type |= SND_JACK_BTN_3; in rt5682_jack_detect_handler()
1140 dev_err(rt5682->component->dev, in rt5682_jack_detect_handler()
1148 rt5682->jack_type = rt5682_headset_detect(rt5682->component, 0); in rt5682_jack_detect_handler()
1149 rt5682->irq_work_delay_time = 50; in rt5682_jack_detect_handler()
1152 snd_soc_jack_report(rt5682->hs_jack, rt5682->jack_type, in rt5682_jack_detect_handler()
1157 if (!rt5682->is_sdw) { in rt5682_jack_detect_handler()
1158 if (rt5682->jack_type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 | in rt5682_jack_detect_handler()
1160 schedule_delayed_work(&rt5682->jd_check_work, 0); in rt5682_jack_detect_handler()
1162 cancel_delayed_work_sync(&rt5682->jd_check_work); in rt5682_jack_detect_handler()
1165 mutex_unlock(&rt5682->calibrate_mutex); in rt5682_jack_detect_handler()
1190 static int rt5682_div_sel(struct rt5682_priv *rt5682, in rt5682_div_sel() argument
1195 if (rt5682->sysclk < target) { in rt5682_div_sel()
1196 dev_err(rt5682->component->dev, in rt5682_div_sel()
1197 "sysclk rate %d is too low\n", rt5682->sysclk); in rt5682_div_sel()
1202 dev_dbg(rt5682->component->dev, "div[%d]=%d\n", i, div[i]); in rt5682_div_sel()
1203 if (target * div[i] == rt5682->sysclk) in rt5682_div_sel()
1205 if (target * div[i + 1] > rt5682->sysclk) { in rt5682_div_sel()
1206 dev_dbg(rt5682->component->dev, in rt5682_div_sel()
1208 rt5682->sysclk); in rt5682_div_sel()
1213 if (target * div[i] < rt5682->sysclk) in rt5682_div_sel()
1214 dev_err(rt5682->component->dev, in rt5682_div_sel()
1215 "sysclk rate %d is too high\n", rt5682->sysclk); in rt5682_div_sel()
1235 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in set_dmic_clk() local
1239 if (rt5682->pdata.dmic_clk_rate) in set_dmic_clk()
1240 dmic_clk_rate = rt5682->pdata.dmic_clk_rate; in set_dmic_clk()
1242 idx = rt5682_div_sel(rt5682, dmic_clk_rate, div, ARRAY_SIZE(div)); in set_dmic_clk()
1255 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in set_filter_clk() local
1260 if (rt5682->is_sdw) in set_filter_clk()
1267 ref = 256 * rt5682->lrck[RT5682_AIF2]; in set_filter_clk()
1269 ref = 256 * rt5682->lrck[RT5682_AIF1]; in set_filter_clk()
1271 idx = rt5682_div_sel(rt5682, ref, div_f, ARRAY_SIZE(div_f)); in set_filter_clk()
1283 if (rt5682->sysclk <= 12288000 * div_o[idx]) in set_filter_clk()
1546 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in set_dmic_power() local
1549 if (rt5682->pdata.dmic_delay) in set_dmic_power()
1550 delay = rt5682->pdata.dmic_delay; in set_dmic_power()
1567 if (!rt5682->jack_type) { in set_dmic_power()
2069 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_hw_params() local
2073 rt5682->lrck[dai->id] = params_rate(params); in rt5682_hw_params()
2074 pre_div = rl6231_get_clk_info(rt5682->sysclk, rt5682->lrck[dai->id]); in rt5682_hw_params()
2084 rt5682->lrck[dai->id], pre_div, dai->id); in rt5682_hw_params()
2113 if (rt5682->master[RT5682_AIF1]) { in rt5682_hw_params()
2118 (rt5682->sysclk_src) << RT5682_I2S_CLK_SRC_SFT); in rt5682_hw_params()
2132 if (rt5682->master[RT5682_AIF2]) { in rt5682_hw_params()
2157 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_dai_fmt() local
2162 rt5682->master[dai->id] = 1; in rt5682_set_dai_fmt()
2165 rt5682->master[dai->id] = 0; in rt5682_set_dai_fmt()
2222 tdm_ctrl | rt5682->master[dai->id]); in rt5682_set_dai_fmt()
2225 if (rt5682->master[dai->id] == 0) in rt5682_set_dai_fmt()
2241 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_component_sysclk() local
2244 if (freq == rt5682->sysclk && clk_id == rt5682->sysclk_src) in rt5682_set_component_sysclk()
2271 if (rt5682->master[RT5682_AIF2]) { in rt5682_set_component_sysclk()
2277 rt5682->sysclk = freq; in rt5682_set_component_sysclk()
2278 rt5682->sysclk_src = clk_id; in rt5682_set_component_sysclk()
2290 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_component_pll() local
2295 if (source == rt5682->pll_src[pll_id] && in rt5682_set_component_pll()
2296 freq_in == rt5682->pll_in[pll_id] && in rt5682_set_component_pll()
2297 freq_out == rt5682->pll_out[pll_id]) in rt5682_set_component_pll()
2303 rt5682->pll_in[pll_id] = 0; in rt5682_set_component_pll()
2304 rt5682->pll_out[pll_id] = 0; in rt5682_set_component_pll()
2409 rt5682->pll_in[pll_id] = freq_in; in rt5682_set_component_pll()
2410 rt5682->pll_out[pll_id] = freq_out; in rt5682_set_component_pll()
2411 rt5682->pll_src[pll_id] = source; in rt5682_set_component_pll()
2419 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_bclk1_ratio() local
2421 rt5682->bclk[dai->id] = ratio; in rt5682_set_bclk1_ratio()
2451 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_bclk2_ratio() local
2453 rt5682->bclk[dai->id] = ratio; in rt5682_set_bclk2_ratio()
2477 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_bias_level() local
2481 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1, in rt5682_set_bias_level()
2483 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1, in rt5682_set_bias_level()
2489 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1, in rt5682_set_bias_level()
2493 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1, in rt5682_set_bias_level()
2495 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1, in rt5682_set_bias_level()
2510 static bool rt5682_clk_check(struct rt5682_priv *rt5682) in rt5682_clk_check() argument
2512 if (!rt5682->master[RT5682_AIF1]) { in rt5682_clk_check()
2513 dev_dbg(rt5682->component->dev, "sysclk/dai not set correctly\n"); in rt5682_clk_check()
2521 struct rt5682_priv *rt5682 = in rt5682_wclk_prepare() local
2524 struct snd_soc_component *component = rt5682->component; in rt5682_wclk_prepare()
2528 if (!rt5682_clk_check(rt5682)) in rt5682_wclk_prepare()
2557 struct rt5682_priv *rt5682 = in rt5682_wclk_unprepare() local
2560 struct snd_soc_component *component = rt5682->component; in rt5682_wclk_unprepare()
2564 if (!rt5682_clk_check(rt5682)) in rt5682_wclk_unprepare()
2571 if (!rt5682->jack_type) in rt5682_wclk_unprepare()
2587 struct rt5682_priv *rt5682 = in rt5682_wclk_recalc_rate() local
2590 struct snd_soc_component *component = rt5682->component; in rt5682_wclk_recalc_rate()
2593 if (!rt5682_clk_check(rt5682)) in rt5682_wclk_recalc_rate()
2598 if (rt5682->lrck[RT5682_AIF1] != CLK_48 && in rt5682_wclk_recalc_rate()
2599 rt5682->lrck[RT5682_AIF1] != CLK_44) { in rt5682_wclk_recalc_rate()
2605 return rt5682->lrck[RT5682_AIF1]; in rt5682_wclk_recalc_rate()
2611 struct rt5682_priv *rt5682 = in rt5682_wclk_round_rate() local
2614 struct snd_soc_component *component = rt5682->component; in rt5682_wclk_round_rate()
2617 if (!rt5682_clk_check(rt5682)) in rt5682_wclk_round_rate()
2635 struct rt5682_priv *rt5682 = in rt5682_wclk_set_rate() local
2638 struct snd_soc_component *component = rt5682->component; in rt5682_wclk_set_rate()
2644 if (!rt5682_clk_check(rt5682)) in rt5682_wclk_set_rate()
2675 rt5682->lrck[RT5682_AIF1] = rate; in rt5682_wclk_set_rate()
2677 pre_div = rl6231_get_clk_info(rt5682->sysclk, rate); in rt5682_wclk_set_rate()
2682 (rt5682->sysclk_src) << RT5682_I2S_CLK_SRC_SFT); in rt5682_wclk_set_rate()
2690 struct rt5682_priv *rt5682 = in rt5682_bclk_recalc_rate() local
2693 struct snd_soc_component *component = rt5682->component; in rt5682_bclk_recalc_rate()
2731 struct rt5682_priv *rt5682 = in rt5682_bclk_round_rate() local
2736 if (!*parent_rate || !rt5682_clk_check(rt5682)) in rt5682_bclk_round_rate()
2754 struct rt5682_priv *rt5682 = in rt5682_bclk_set_rate() local
2757 struct snd_soc_component *component = rt5682->component; in rt5682_bclk_set_rate()
2761 if (!rt5682_clk_check(rt5682)) in rt5682_bclk_set_rate()
2796 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_register_dai_clks() local
2797 struct rt5682_platform_data *pdata = &rt5682->pdata; in rt5682_register_dai_clks()
2804 dai_clk_hw = &rt5682->dai_clks_hw[i]; in rt5682_register_dai_clks()
2809 if (rt5682->mclk) { in rt5682_register_dai_clks()
2819 &rt5682->dai_clks_hw[RT5682_DAI_WCLK_IDX] in rt5682_register_dai_clks()
2858 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_probe() local
2866 rt5682->component = component; in rt5682_probe()
2868 if (rt5682->is_sdw) { in rt5682_probe()
2869 slave = rt5682->slave; in rt5682_probe()
2880 rt5682->mclk = devm_clk_get(component->dev, "mclk"); in rt5682_probe()
2881 if (IS_ERR(rt5682->mclk)) { in rt5682_probe()
2882 if (PTR_ERR(rt5682->mclk) != -ENOENT) { in rt5682_probe()
2883 ret = PTR_ERR(rt5682->mclk); in rt5682_probe()
2886 rt5682->mclk = NULL; in rt5682_probe()
2895 rt5682->lrck[RT5682_AIF1] = CLK_48; in rt5682_probe()
2907 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_remove() local
2909 rt5682_reset(rt5682); in rt5682_remove()
2915 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_suspend() local
2918 if (rt5682->is_sdw) in rt5682_suspend()
2921 cancel_delayed_work_sync(&rt5682->jack_detect_work); in rt5682_suspend()
2922 cancel_delayed_work_sync(&rt5682->jd_check_work); in rt5682_suspend()
2923 if (rt5682->hs_jack && rt5682->jack_type == SND_JACK_HEADSET) { in rt5682_suspend()
2954 regcache_cache_only(rt5682->regmap, true); in rt5682_suspend()
2955 regcache_mark_dirty(rt5682->regmap); in rt5682_suspend()
2961 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_resume() local
2963 if (rt5682->is_sdw) in rt5682_resume()
2966 regcache_cache_only(rt5682->regmap, false); in rt5682_resume()
2967 regcache_sync(rt5682->regmap); in rt5682_resume()
2969 if (rt5682->hs_jack && rt5682->jack_type == SND_JACK_HEADSET) { in rt5682_resume()
2981 &rt5682->jack_detect_work, msecs_to_jiffies(250)); in rt5682_resume()
3026 int rt5682_parse_dt(struct rt5682_priv *rt5682, struct device *dev) in rt5682_parse_dt() argument
3030 &rt5682->pdata.dmic1_data_pin); in rt5682_parse_dt()
3032 &rt5682->pdata.dmic1_clk_pin); in rt5682_parse_dt()
3034 &rt5682->pdata.jd_src); in rt5682_parse_dt()
3036 &rt5682->pdata.btndet_delay); in rt5682_parse_dt()
3038 &rt5682->pdata.dmic_clk_rate); in rt5682_parse_dt()
3040 &rt5682->pdata.dmic_delay); in rt5682_parse_dt()
3042 rt5682->pdata.ldo1_en = of_get_named_gpio(dev->of_node, in rt5682_parse_dt()
3046 rt5682->pdata.dai_clk_names, in rt5682_parse_dt()
3049 rt5682->pdata.dai_clk_names[RT5682_DAI_WCLK_IDX], in rt5682_parse_dt()
3050 rt5682->pdata.dai_clk_names[RT5682_DAI_BCLK_IDX]); in rt5682_parse_dt()
3052 rt5682->pdata.dmic_clk_driving_high = device_property_read_bool(dev, in rt5682_parse_dt()
3059 void rt5682_calibrate(struct rt5682_priv *rt5682) in rt5682_calibrate() argument
3063 mutex_lock(&rt5682->calibrate_mutex); in rt5682_calibrate()
3065 rt5682_reset(rt5682); in rt5682_calibrate()
3066 regmap_write(rt5682->regmap, RT5682_I2C_CTRL, 0x000f); in rt5682_calibrate()
3067 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0xa2af); in rt5682_calibrate()
3069 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0xf2af); in rt5682_calibrate()
3070 regmap_write(rt5682->regmap, RT5682_MICBIAS_2, 0x0300); in rt5682_calibrate()
3071 regmap_write(rt5682->regmap, RT5682_GLB_CLK, 0x8000); in rt5682_calibrate()
3072 regmap_write(rt5682->regmap, RT5682_PWR_DIG_1, 0x0100); in rt5682_calibrate()
3073 regmap_write(rt5682->regmap, RT5682_HP_IMP_SENS_CTRL_19, 0x3800); in rt5682_calibrate()
3074 regmap_write(rt5682->regmap, RT5682_CHOP_DAC, 0x3000); in rt5682_calibrate()
3075 regmap_write(rt5682->regmap, RT5682_CALIB_ADC_CTRL, 0x7005); in rt5682_calibrate()
3076 regmap_write(rt5682->regmap, RT5682_STO1_ADC_MIXER, 0x686c); in rt5682_calibrate()
3077 regmap_write(rt5682->regmap, RT5682_CAL_REC, 0x0d0d); in rt5682_calibrate()
3078 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_2, 0x0321); in rt5682_calibrate()
3079 regmap_write(rt5682->regmap, RT5682_HP_LOGIC_CTRL_2, 0x0004); in rt5682_calibrate()
3080 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0x7c00); in rt5682_calibrate()
3081 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_3, 0x06a1); in rt5682_calibrate()
3082 regmap_write(rt5682->regmap, RT5682_A_DAC1_MUX, 0x0311); in rt5682_calibrate()
3083 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0x7c00); in rt5682_calibrate()
3085 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0xfc00); in rt5682_calibrate()
3088 regmap_read(rt5682->regmap, RT5682_HP_CALIB_STA_1, &value); in rt5682_calibrate()
3096 dev_err(rt5682->component->dev, "HP Calibration Failure\n"); in rt5682_calibrate()
3099 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0x002f); in rt5682_calibrate()
3100 regmap_write(rt5682->regmap, RT5682_MICBIAS_2, 0x0080); in rt5682_calibrate()
3101 regmap_write(rt5682->regmap, RT5682_GLB_CLK, 0x0000); in rt5682_calibrate()
3102 regmap_write(rt5682->regmap, RT5682_PWR_DIG_1, 0x0000); in rt5682_calibrate()
3103 regmap_write(rt5682->regmap, RT5682_CHOP_DAC, 0x2000); in rt5682_calibrate()
3104 regmap_write(rt5682->regmap, RT5682_CALIB_ADC_CTRL, 0x2005); in rt5682_calibrate()
3105 regmap_write(rt5682->regmap, RT5682_STO1_ADC_MIXER, 0xc0c4); in rt5682_calibrate()
3106 regmap_write(rt5682->regmap, RT5682_CAL_REC, 0x0c0c); in rt5682_calibrate()
3108 mutex_unlock(&rt5682->calibrate_mutex); in rt5682_calibrate()