Lines Matching refs:rt5682
3 // rt5682.c -- RT5682 ALSA SoC audio component driver
29 #include <sound/rt5682.h>
32 #include "rt5682.h"
50 void rt5682_apply_patch_list(struct rt5682_priv *rt5682, struct device *dev)
54 ret = regmap_multi_reg_write(rt5682->regmap, patch_list,
809 void rt5682_reset(struct rt5682_priv *rt5682)
811 regmap_write(rt5682->regmap, RT5682_RESET, 0);
812 if (!rt5682->is_sdw)
813 regmap_write(rt5682->regmap, RT5682_I2C_MODE, 1);
877 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
888 if (rt5682->is_sdw)
922 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
958 rt5682->jack_type = SND_JACK_HEADSET;
962 rt5682->jack_type = SND_JACK_HEADPHONE;
995 rt5682->jack_type = 0;
998 dev_dbg(component->dev, "jack_type = %d\n", rt5682->jack_type);
999 return rt5682->jack_type;
1006 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
1008 rt5682->hs_jack = hs_jack;
1011 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2,
1013 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL,
1015 cancel_delayed_work_sync(&rt5682->jack_detect_work);
1020 if (!rt5682->is_sdw) {
1021 switch (rt5682->pdata.jd_src) {
1034 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1,
1036 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL,
1040 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_2,
1042 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2,
1045 regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_4,
1046 0x7f7f, (rt5682->pdata.btndet_delay << 8 |
1047 rt5682->pdata.btndet_delay));
1048 regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_5,
1049 0x7f7f, (rt5682->pdata.btndet_delay << 8 |
1050 rt5682->pdata.btndet_delay));
1051 regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_6,
1052 0x7f7f, (rt5682->pdata.btndet_delay << 8 |
1053 rt5682->pdata.btndet_delay));
1054 regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_7,
1055 0x7f7f, (rt5682->pdata.btndet_delay << 8 |
1056 rt5682->pdata.btndet_delay));
1058 &rt5682->jack_detect_work,
1063 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2,
1065 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL,
1080 struct rt5682_priv *rt5682 =
1084 if (!rt5682->component || !rt5682->component->card ||
1085 !rt5682->component->card->instantiated) {
1088 &rt5682->jack_detect_work, msecs_to_jiffies(15));
1092 mutex_lock(&rt5682->calibrate_mutex);
1094 val = snd_soc_component_read(rt5682->component, RT5682_AJD1_CTRL)
1098 if (rt5682->jack_type == 0) {
1100 rt5682->jack_type =
1101 rt5682_headset_detect(rt5682->component, 1);
1102 } else if ((rt5682->jack_type & SND_JACK_HEADSET) ==
1105 rt5682->jack_type = SND_JACK_HEADSET;
1106 btn_type = rt5682_button_detect(rt5682->component);
1108 * rt5682 can report three kinds of button behavior,
1118 rt5682->jack_type |= SND_JACK_BTN_0;
1123 rt5682->jack_type |= SND_JACK_BTN_1;
1128 rt5682->jack_type |= SND_JACK_BTN_2;
1133 rt5682->jack_type |= SND_JACK_BTN_3;
1138 dev_err(rt5682->component->dev,
1146 rt5682->jack_type = rt5682_headset_detect(rt5682->component, 0);
1149 snd_soc_jack_report(rt5682->hs_jack, rt5682->jack_type,
1154 if (!rt5682->is_sdw) {
1155 if (rt5682->jack_type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 |
1157 schedule_delayed_work(&rt5682->jd_check_work, 0);
1159 cancel_delayed_work_sync(&rt5682->jd_check_work);
1162 mutex_unlock(&rt5682->calibrate_mutex);
1187 static int rt5682_div_sel(struct rt5682_priv *rt5682,
1192 if (rt5682->sysclk < target) {
1193 dev_err(rt5682->component->dev,
1194 "sysclk rate %d is too low\n", rt5682->sysclk);
1199 dev_dbg(rt5682->component->dev, "div[%d]=%d\n", i, div[i]);
1200 if (target * div[i] == rt5682->sysclk)
1202 if (target * div[i + 1] > rt5682->sysclk) {
1203 dev_dbg(rt5682->component->dev,
1205 rt5682->sysclk);
1210 if (target * div[i] < rt5682->sysclk)
1211 dev_err(rt5682->component->dev,
1212 "sysclk rate %d is too high\n", rt5682->sysclk);
1232 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
1236 if (rt5682->pdata.dmic_clk_rate)
1237 dmic_clk_rate = rt5682->pdata.dmic_clk_rate;
1239 idx = rt5682_div_sel(rt5682, dmic_clk_rate, div, ARRAY_SIZE(div));
1252 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
1257 if (rt5682->is_sdw)
1264 ref = 256 * rt5682->lrck[RT5682_AIF2];
1266 ref = 256 * rt5682->lrck[RT5682_AIF1];
1268 idx = rt5682_div_sel(rt5682, ref, div_f, ARRAY_SIZE(div_f));
1280 if (rt5682->sysclk <= 12288000 * div_o[idx])
1543 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
1546 if (rt5682->pdata.dmic_delay)
1547 delay = rt5682->pdata.dmic_delay;
1564 if (!rt5682->jack_type) {
2072 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2076 rt5682->lrck[dai->id] = params_rate(params);
2077 pre_div = rl6231_get_clk_info(rt5682->sysclk, rt5682->lrck[dai->id]);
2087 rt5682->lrck[dai->id], pre_div, dai->id);
2116 if (rt5682->master[RT5682_AIF1]) {
2121 (rt5682->sysclk_src) << RT5682_I2S_CLK_SRC_SFT);
2135 if (rt5682->master[RT5682_AIF2]) {
2160 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2165 rt5682->master[dai->id] = 1;
2168 rt5682->master[dai->id] = 0;
2225 tdm_ctrl | rt5682->master[dai->id]);
2228 if (rt5682->master[dai->id] == 0)
2244 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2247 if (freq == rt5682->sysclk && clk_id == rt5682->sysclk_src)
2274 if (rt5682->master[RT5682_AIF2]) {
2280 rt5682->sysclk = freq;
2281 rt5682->sysclk_src = clk_id;
2293 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2298 if (source == rt5682->pll_src[pll_id] &&
2299 freq_in == rt5682->pll_in[pll_id] &&
2300 freq_out == rt5682->pll_out[pll_id])
2306 rt5682->pll_in[pll_id] = 0;
2307 rt5682->pll_out[pll_id] = 0;
2412 rt5682->pll_in[pll_id] = freq_in;
2413 rt5682->pll_out[pll_id] = freq_out;
2414 rt5682->pll_src[pll_id] = source;
2422 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2424 rt5682->bclk[dai->id] = ratio;
2454 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2456 rt5682->bclk[dai->id] = ratio;
2480 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2484 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1,
2486 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1,
2492 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1,
2496 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1,
2498 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1,
2513 static bool rt5682_clk_check(struct rt5682_priv *rt5682)
2515 if (!rt5682->master[RT5682_AIF1]) {
2516 dev_dbg(rt5682->component->dev, "sysclk/dai not set correctly\n");
2524 struct rt5682_priv *rt5682 =
2527 struct snd_soc_component *component = rt5682->component;
2531 if (!rt5682_clk_check(rt5682))
2560 struct rt5682_priv *rt5682 =
2563 struct snd_soc_component *component = rt5682->component;
2567 if (!rt5682_clk_check(rt5682))
2574 if (!rt5682->jack_type)
2590 struct rt5682_priv *rt5682 =
2593 struct snd_soc_component *component = rt5682->component;
2596 if (!rt5682_clk_check(rt5682))
2601 if (rt5682->lrck[RT5682_AIF1] != CLK_48 &&
2602 rt5682->lrck[RT5682_AIF1] != CLK_44) {
2608 return rt5682->lrck[RT5682_AIF1];
2614 struct rt5682_priv *rt5682 =
2617 struct snd_soc_component *component = rt5682->component;
2620 if (!rt5682_clk_check(rt5682))
2638 struct rt5682_priv *rt5682 =
2641 struct snd_soc_component *component = rt5682->component;
2647 if (!rt5682_clk_check(rt5682))
2678 rt5682->lrck[RT5682_AIF1] = rate;
2680 pre_div = rl6231_get_clk_info(rt5682->sysclk, rate);
2685 (rt5682->sysclk_src) << RT5682_I2S_CLK_SRC_SFT);
2693 struct rt5682_priv *rt5682 =
2696 struct snd_soc_component *component = rt5682->component;
2734 struct rt5682_priv *rt5682 =
2739 if (!*parent_rate || !rt5682_clk_check(rt5682))
2757 struct rt5682_priv *rt5682 =
2760 struct snd_soc_component *component = rt5682->component;
2764 if (!rt5682_clk_check(rt5682))
2799 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2800 struct rt5682_platform_data *pdata = &rt5682->pdata;
2809 dai_clk_hw = &rt5682->dai_clks_hw[i];
2814 if (rt5682->mclk) {
2824 parent = &rt5682->dai_clks_hw[RT5682_DAI_WCLK_IDX];
2863 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2871 rt5682->component = component;
2873 if (rt5682->is_sdw) {
2874 slave = rt5682->slave;
2885 rt5682->mclk = devm_clk_get(component->dev, "mclk");
2886 if (IS_ERR(rt5682->mclk)) {
2887 if (PTR_ERR(rt5682->mclk) != -ENOENT) {
2888 ret = PTR_ERR(rt5682->mclk);
2891 rt5682->mclk = NULL;
2900 rt5682->lrck[RT5682_AIF1] = CLK_48;
2912 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2914 rt5682_reset(rt5682);
2920 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2922 regcache_cache_only(rt5682->regmap, true);
2923 regcache_mark_dirty(rt5682->regmap);
2929 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2931 regcache_cache_only(rt5682->regmap, false);
2932 regcache_sync(rt5682->regmap);
2935 &rt5682->jack_detect_work, msecs_to_jiffies(250));
2980 int rt5682_parse_dt(struct rt5682_priv *rt5682, struct device *dev)
2984 &rt5682->pdata.dmic1_data_pin);
2986 &rt5682->pdata.dmic1_clk_pin);
2988 &rt5682->pdata.jd_src);
2990 &rt5682->pdata.btndet_delay);
2992 &rt5682->pdata.dmic_clk_rate);
2994 &rt5682->pdata.dmic_delay);
2996 rt5682->pdata.ldo1_en = of_get_named_gpio(dev->of_node,
3000 rt5682->pdata.dai_clk_names,
3003 rt5682->pdata.dai_clk_names[RT5682_DAI_WCLK_IDX],
3004 rt5682->pdata.dai_clk_names[RT5682_DAI_BCLK_IDX]);
3010 void rt5682_calibrate(struct rt5682_priv *rt5682)
3014 mutex_lock(&rt5682->calibrate_mutex);
3016 rt5682_reset(rt5682);
3017 regmap_write(rt5682->regmap, RT5682_I2C_CTRL, 0x000f);
3018 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0xa2af);
3020 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0xf2af);
3021 regmap_write(rt5682->regmap, RT5682_MICBIAS_2, 0x0300);
3022 regmap_write(rt5682->regmap, RT5682_GLB_CLK, 0x8000);
3023 regmap_write(rt5682->regmap, RT5682_PWR_DIG_1, 0x0100);
3024 regmap_write(rt5682->regmap, RT5682_HP_IMP_SENS_CTRL_19, 0x3800);
3025 regmap_write(rt5682->regmap, RT5682_CHOP_DAC, 0x3000);
3026 regmap_write(rt5682->regmap, RT5682_CALIB_ADC_CTRL, 0x7005);
3027 regmap_write(rt5682->regmap, RT5682_STO1_ADC_MIXER, 0x686c);
3028 regmap_write(rt5682->regmap, RT5682_CAL_REC, 0x0d0d);
3029 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_2, 0x0321);
3030 regmap_write(rt5682->regmap, RT5682_HP_LOGIC_CTRL_2, 0x0004);
3031 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0x7c00);
3032 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_3, 0x06a1);
3033 regmap_write(rt5682->regmap, RT5682_A_DAC1_MUX, 0x0311);
3034 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0x7c00);
3036 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0xfc00);
3039 regmap_read(rt5682->regmap, RT5682_HP_CALIB_STA_1, &value);
3047 dev_err(rt5682->component->dev, "HP Calibration Failure\n");
3050 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0x002f);
3051 regmap_write(rt5682->regmap, RT5682_MICBIAS_2, 0x0080);
3052 regmap_write(rt5682->regmap, RT5682_GLB_CLK, 0x0000);
3053 regmap_write(rt5682->regmap, RT5682_PWR_DIG_1, 0x0000);
3054 regmap_write(rt5682->regmap, RT5682_CHOP_DAC, 0x2000);
3055 regmap_write(rt5682->regmap, RT5682_CALIB_ADC_CTRL, 0x2005);
3056 regmap_write(rt5682->regmap, RT5682_STO1_ADC_MIXER, 0xc0c4);
3057 regmap_write(rt5682->regmap, RT5682_CAL_REC, 0x0c0c);
3059 mutex_unlock(&rt5682->calibrate_mutex);