Lines Matching defs:rt5682

3 // rt5682.c  --  RT5682 ALSA SoC audio component driver
28 #include <sound/rt5682.h>
31 #include "rt5682.h"
56 void rt5682_apply_patch_list(struct rt5682_priv *rt5682, struct device *dev)
60 ret = regmap_multi_reg_write(rt5682->regmap, patch_list,
815 void rt5682_reset(struct rt5682_priv *rt5682)
817 regmap_write(rt5682->regmap, RT5682_RESET, 0);
818 if (!rt5682->is_sdw)
819 regmap_write(rt5682->regmap, RT5682_I2C_MODE, 1);
883 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
894 if (rt5682->is_sdw)
928 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
966 rt5682->jack_type = SND_JACK_HEADSET;
972 rt5682->jack_type = SND_JACK_HEADPHONE;
1005 rt5682->jack_type = 0;
1008 dev_dbg(component->dev, "jack_type = %d\n", rt5682->jack_type);
1009 return rt5682->jack_type;
1015 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
1017 rt5682->hs_jack = hs_jack;
1019 if (rt5682->is_sdw && !rt5682->first_hw_init)
1023 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2,
1025 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL,
1027 cancel_delayed_work_sync(&rt5682->jack_detect_work);
1032 if (!rt5682->is_sdw) {
1033 switch (rt5682->pdata.jd_src) {
1048 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1,
1050 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL,
1054 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_2,
1056 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2,
1059 regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_4,
1060 0x7f7f, (rt5682->pdata.btndet_delay << 8 |
1061 rt5682->pdata.btndet_delay));
1062 regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_5,
1063 0x7f7f, (rt5682->pdata.btndet_delay << 8 |
1064 rt5682->pdata.btndet_delay));
1065 regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_6,
1066 0x7f7f, (rt5682->pdata.btndet_delay << 8 |
1067 rt5682->pdata.btndet_delay));
1068 regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_7,
1069 0x7f7f, (rt5682->pdata.btndet_delay << 8 |
1070 rt5682->pdata.btndet_delay));
1072 &rt5682->jack_detect_work,
1077 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2,
1079 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL,
1094 struct rt5682_priv *rt5682 =
1099 if (!rt5682->component ||
1100 !snd_soc_card_is_instantiated(rt5682->component->card)) {
1103 &rt5682->jack_detect_work, msecs_to_jiffies(15));
1107 if (rt5682->is_sdw) {
1108 if (pm_runtime_status_suspended(rt5682->slave->dev.parent)) {
1109 dev_dbg(&rt5682->slave->dev,
1116 dapm = snd_soc_component_get_dapm(rt5682->component);
1119 mutex_lock(&rt5682->calibrate_mutex);
1121 val = snd_soc_component_read(rt5682->component, RT5682_AJD1_CTRL)
1125 if (rt5682->jack_type == 0) {
1127 rt5682->jack_type =
1128 rt5682_headset_detect(rt5682->component, 1);
1129 rt5682->irq_work_delay_time = 0;
1130 } else if ((rt5682->jack_type & SND_JACK_HEADSET) ==
1133 rt5682->jack_type = SND_JACK_HEADSET;
1134 btn_type = rt5682_button_detect(rt5682->component);
1136 * rt5682 can report three kinds of button behavior,
1146 rt5682->jack_type |= SND_JACK_BTN_0;
1151 rt5682->jack_type |= SND_JACK_BTN_1;
1156 rt5682->jack_type |= SND_JACK_BTN_2;
1161 rt5682->jack_type |= SND_JACK_BTN_3;
1166 dev_err(rt5682->component->dev,
1174 rt5682->jack_type = rt5682_headset_detect(rt5682->component, 0);
1175 rt5682->irq_work_delay_time = 50;
1178 mutex_unlock(&rt5682->calibrate_mutex);
1181 snd_soc_jack_report(rt5682->hs_jack, rt5682->jack_type,
1186 if (!rt5682->is_sdw) {
1187 if (rt5682->jack_type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 |
1189 schedule_delayed_work(&rt5682->jd_check_work, 0);
1191 cancel_delayed_work_sync(&rt5682->jd_check_work);
1217 static int rt5682_div_sel(struct rt5682_priv *rt5682,
1222 if (rt5682->sysclk < target) {
1223 dev_err(rt5682->component->dev,
1224 "sysclk rate %d is too low\n", rt5682->sysclk);
1229 dev_dbg(rt5682->component->dev, "div[%d]=%d\n", i, div[i]);
1230 if (target * div[i] == rt5682->sysclk)
1232 if (target * div[i + 1] > rt5682->sysclk) {
1233 dev_dbg(rt5682->component->dev,
1235 rt5682->sysclk);
1240 if (target * div[i] < rt5682->sysclk)
1241 dev_err(rt5682->component->dev,
1242 "sysclk rate %d is too high\n", rt5682->sysclk);
1262 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
1266 if (rt5682->pdata.dmic_clk_rate)
1267 dmic_clk_rate = rt5682->pdata.dmic_clk_rate;
1269 idx = rt5682_div_sel(rt5682, dmic_clk_rate, div, ARRAY_SIZE(div));
1282 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
1287 if (rt5682->is_sdw)
1294 ref = 256 * rt5682->lrck[RT5682_AIF2];
1296 ref = 256 * rt5682->lrck[RT5682_AIF1];
1298 idx = rt5682_div_sel(rt5682, ref, div_f, ARRAY_SIZE(div_f));
1310 if (rt5682->sysclk <= 12288000 * div_o[idx])
1581 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
1584 if (rt5682->pdata.dmic_delay)
1585 delay = rt5682->pdata.dmic_delay;
1602 if (!rt5682->jack_type) {
2134 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2138 rt5682->lrck[dai->id] = params_rate(params);
2139 pre_div = rl6231_get_clk_info(rt5682->sysclk, rt5682->lrck[dai->id]);
2149 rt5682->lrck[dai->id], pre_div, dai->id);
2178 if (rt5682->master[RT5682_AIF1]) {
2183 (rt5682->sysclk_src) << RT5682_I2S_CLK_SRC_SFT);
2197 if (rt5682->master[RT5682_AIF2]) {
2222 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2227 rt5682->master[dai->id] = 1;
2230 rt5682->master[dai->id] = 0;
2287 tdm_ctrl | rt5682->master[dai->id]);
2290 if (rt5682->master[dai->id] == 0)
2306 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2309 if (freq == rt5682->sysclk && clk_id == rt5682->sysclk_src)
2336 if (rt5682->master[RT5682_AIF2]) {
2342 rt5682->sysclk = freq;
2343 rt5682->sysclk_src = clk_id;
2355 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2360 if (source == rt5682->pll_src[pll_id] &&
2361 freq_in == rt5682->pll_in[pll_id] &&
2362 freq_out == rt5682->pll_out[pll_id])
2368 rt5682->pll_in[pll_id] = 0;
2369 rt5682->pll_out[pll_id] = 0;
2474 rt5682->pll_in[pll_id] = freq_in;
2475 rt5682->pll_out[pll_id] = freq_out;
2476 rt5682->pll_src[pll_id] = source;
2484 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2486 rt5682->bclk[dai->id] = ratio;
2516 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2518 rt5682->bclk[dai->id] = ratio;
2542 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2546 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1,
2548 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1,
2554 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1,
2558 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1,
2560 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1,
2575 static bool rt5682_clk_check(struct rt5682_priv *rt5682)
2577 if (!rt5682->master[RT5682_AIF1]) {
2578 dev_dbg(rt5682->i2c_dev, "sysclk/dai not set correctly\n");
2586 struct rt5682_priv *rt5682 =
2592 if (!rt5682_clk_check(rt5682))
2595 component = rt5682->component;
2624 struct rt5682_priv *rt5682 =
2630 if (!rt5682_clk_check(rt5682))
2633 component = rt5682->component;
2640 if (!rt5682->jack_type)
2656 struct rt5682_priv *rt5682 =
2661 if (!rt5682_clk_check(rt5682))
2666 if (rt5682->lrck[RT5682_AIF1] != CLK_48 &&
2667 rt5682->lrck[RT5682_AIF1] != CLK_44) {
2668 dev_warn(rt5682->i2c_dev, "%s: clk %s only support %d or %d Hz output\n",
2673 return rt5682->lrck[RT5682_AIF1];
2679 struct rt5682_priv *rt5682 =
2684 if (!rt5682_clk_check(rt5682))
2691 dev_warn(rt5682->i2c_dev, "%s: clk %s only support %d or %d Hz output\n",
2702 struct rt5682_priv *rt5682 =
2711 if (!rt5682_clk_check(rt5682))
2714 component = rt5682->component;
2725 dev_warn(rt5682->i2c_dev,
2730 dev_warn(rt5682->i2c_dev, "clk %s only support %d Hz input\n",
2744 rt5682->lrck[RT5682_AIF1] = rate;
2746 pre_div = rl6231_get_clk_info(rt5682->sysclk, rate);
2751 (rt5682->sysclk_src) << RT5682_I2S_CLK_SRC_SFT);
2759 struct rt5682_priv *rt5682 =
2764 regmap_read(rt5682->regmap, RT5682_TDM_TCON_CTRL, &bclks_per_wclk);
2799 struct rt5682_priv *rt5682 =
2804 if (!*parent_rate || !rt5682_clk_check(rt5682))
2822 struct rt5682_priv *rt5682 =
2829 if (!rt5682_clk_check(rt5682))
2832 component = rt5682->component;
2840 dev_err(rt5682->i2c_dev, "dai %d not found in component\n",
2860 int rt5682_register_dai_clks(struct rt5682_priv *rt5682)
2862 struct device *dev = rt5682->i2c_dev;
2863 struct rt5682_platform_data *pdata = &rt5682->pdata;
2871 dai_clk_hw = &rt5682->dai_clks_hw[i];
2876 if (rt5682->mclk) {
2877 parent = __clk_get_hw(rt5682->mclk);
2884 parent = &rt5682->dai_clks_hw[RT5682_DAI_WCLK_IDX];
2926 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2931 rt5682->component = component;
2933 if (rt5682->is_sdw) {
2934 slave = rt5682->slave;
2952 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2954 rt5682_reset(rt5682);
2960 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
2963 if (rt5682->is_sdw)
2966 if (rt5682->irq)
2967 disable_irq(rt5682->irq);
2969 cancel_delayed_work_sync(&rt5682->jack_detect_work);
2970 cancel_delayed_work_sync(&rt5682->jd_check_work);
2971 if (rt5682->hs_jack && (rt5682->jack_type & SND_JACK_HEADSET) == SND_JACK_HEADSET) {
3006 regcache_cache_only(rt5682->regmap, true);
3007 regcache_mark_dirty(rt5682->regmap);
3013 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
3015 if (rt5682->is_sdw)
3018 regcache_cache_only(rt5682->regmap, false);
3019 regcache_sync(rt5682->regmap);
3021 if (rt5682->hs_jack && (rt5682->jack_type & SND_JACK_HEADSET) == SND_JACK_HEADSET) {
3033 rt5682->jack_type = 0;
3035 &rt5682->jack_detect_work, msecs_to_jiffies(0));
3037 if (rt5682->irq)
3038 enable_irq(rt5682->irq);
3082 int rt5682_parse_dt(struct rt5682_priv *rt5682, struct device *dev)
3086 &rt5682->pdata.dmic1_data_pin);
3088 &rt5682->pdata.dmic1_clk_pin);
3090 &rt5682->pdata.jd_src);
3092 &rt5682->pdata.btndet_delay);
3094 &rt5682->pdata.dmic_clk_rate);
3096 &rt5682->pdata.dmic_delay);
3099 rt5682->pdata.dai_clk_names,
3102 rt5682->pdata.dai_clk_names[RT5682_DAI_WCLK_IDX],
3103 rt5682->pdata.dai_clk_names[RT5682_DAI_BCLK_IDX]);
3105 rt5682->pdata.dmic_clk_driving_high = device_property_read_bool(dev,
3112 int rt5682_get_ldo1(struct rt5682_priv *rt5682, struct device *dev)
3114 rt5682->ldo1_en = devm_gpiod_get_optional(dev,
3117 if (IS_ERR(rt5682->ldo1_en)) {
3119 return PTR_ERR(rt5682->ldo1_en);
3126 void rt5682_calibrate(struct rt5682_priv *rt5682)
3130 mutex_lock(&rt5682->calibrate_mutex);
3132 rt5682_reset(rt5682);
3133 regmap_write(rt5682->regmap, RT5682_I2C_CTRL, 0x000f);
3134 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0xa2af);
3136 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0xf2af);
3137 regmap_write(rt5682->regmap, RT5682_MICBIAS_2, 0x0300);
3138 regmap_write(rt5682->regmap, RT5682_GLB_CLK, 0x8000);
3139 regmap_write(rt5682->regmap, RT5682_PWR_DIG_1, 0x0100);
3140 regmap_write(rt5682->regmap, RT5682_HP_IMP_SENS_CTRL_19, 0x3800);
3141 regmap_write(rt5682->regmap, RT5682_CHOP_DAC, 0x3000);
3142 regmap_write(rt5682->regmap, RT5682_CALIB_ADC_CTRL, 0x7005);
3143 regmap_write(rt5682->regmap, RT5682_STO1_ADC_MIXER, 0x686c);
3144 regmap_write(rt5682->regmap, RT5682_CAL_REC, 0x0d0d);
3145 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_2, 0x0321);
3146 regmap_write(rt5682->regmap, RT5682_HP_LOGIC_CTRL_2, 0x0004);
3147 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0x7c00);
3148 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_3, 0x06a1);
3149 regmap_write(rt5682->regmap, RT5682_A_DAC1_MUX, 0x0311);
3150 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0x7c00);
3152 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0xfc00);
3155 regmap_read(rt5682->regmap, RT5682_HP_CALIB_STA_1, &value);
3163 dev_err(rt5682->component->dev, "HP Calibration Failure\n");
3166 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0x002f);
3167 regmap_write(rt5682->regmap, RT5682_MICBIAS_2, 0x0080);
3168 regmap_write(rt5682->regmap, RT5682_GLB_CLK, 0x0000);
3169 regmap_write(rt5682->regmap, RT5682_PWR_DIG_1, 0x0000);
3170 regmap_write(rt5682->regmap, RT5682_CHOP_DAC, 0x2000);
3171 regmap_write(rt5682->regmap, RT5682_CALIB_ADC_CTRL, 0x2005);
3172 regmap_write(rt5682->regmap, RT5682_STO1_ADC_MIXER, 0xc0c4);
3173 regmap_write(rt5682->regmap, RT5682_CAL_REC, 0x0c0c);
3175 mutex_unlock(&rt5682->calibrate_mutex);