Lines Matching defs:rt712
3 // rt712-sdca.c -- rt712 SDCA ALSA SoC audio driver
25 #include "rt712-sdca.h"
27 static int rt712_sdca_index_write(struct rt712_sdca_priv *rt712,
31 struct regmap *regmap = rt712->mbq_regmap;
36 dev_err(&rt712->slave->dev,
43 static int rt712_sdca_index_read(struct rt712_sdca_priv *rt712,
47 struct regmap *regmap = rt712->mbq_regmap;
52 dev_err(&rt712->slave->dev,
59 static int rt712_sdca_index_update_bits(struct rt712_sdca_priv *rt712,
65 ret = rt712_sdca_index_read(rt712, nid, reg, &tmp);
70 return rt712_sdca_index_write(rt712, nid, reg, tmp);
73 static int rt712_sdca_calibration(struct rt712_sdca_priv *rt712)
77 struct regmap *regmap = rt712->regmap;
81 mutex_lock(&rt712->calibrate_mutex);
85 rt712_sdca_index_write(rt712, RT712_VENDOR_REG, RT712_CC_DET1, 0x043a);
88 rt712_sdca_index_write(rt712, RT712_VENDOR_REG, RT712_FSM_CTL, 0x4100);
91 rt712_sdca_index_write(rt712, RT712_VENDOR_CALI, RT712_DAC_DC_CALI_CTL1, 0x7883);
94 rt712_sdca_index_write(rt712, RT712_VENDOR_CALI, RT712_DAC_DC_CALI_CTL1, 0xf893);
97 rt712_sdca_index_read(rt712, RT712_VENDOR_CALI,
103 ret = rt712_sdca_index_read(rt712, RT712_VENDOR_CALI,
116 rt712_sdca_index_write(rt712, RT712_VENDOR_REG, RT712_FSM_CTL, 0x4500);
119 rt712_sdca_index_write(rt712, RT712_VENDOR_IMS_DRE, RT712_IMS_DIGITAL_CTL1, 0x040f);
122 rt712_sdca_index_write(rt712, RT712_VENDOR_IMS_DRE, RT712_IMS_DIGITAL_CTL5, 0x0000);
125 rt712_sdca_index_write(rt712, RT712_VENDOR_REG, RT712_DIGITAL_MISC_CTRL4, 0x0010);
127 mutex_unlock(&rt712->calibrate_mutex);
132 static unsigned int rt712_sdca_button_detect(struct rt712_sdca_priv *rt712)
139 ret = regmap_read(rt712->regmap,
150 ret = regmap_read(rt712->regmap,
157 ret = regmap_read(rt712->regmap,
203 regmap_write(rt712->regmap,
210 static int rt712_sdca_headset_detect(struct rt712_sdca_priv *rt712)
216 ret = regmap_read(rt712->regmap,
224 rt712->jack_type = 0;
227 rt712->jack_type = SND_JACK_HEADPHONE;
230 rt712->jack_type = SND_JACK_HEADSET;
236 ret = regmap_write(rt712->regmap,
243 dev_dbg(&rt712->slave->dev,
255 struct rt712_sdca_priv *rt712 =
259 if (!rt712->hs_jack)
262 if (!rt712->component->card || !rt712->component->card->instantiated)
266 if (rt712->scp_sdca_stat1 & SDW_SCP_SDCA_INT_SDCA_0) {
267 ret = rt712_sdca_headset_detect(rt712);
273 if (rt712->scp_sdca_stat2 & SDW_SCP_SDCA_INT_SDCA_8)
274 btn_type = rt712_sdca_button_detect(rt712);
276 if (rt712->jack_type == 0)
279 dev_dbg(&rt712->slave->dev,
280 "in %s, jack_type=0x%x\n", __func__, rt712->jack_type);
281 dev_dbg(&rt712->slave->dev,
283 dev_dbg(&rt712->slave->dev,
285 rt712->scp_sdca_stat1, rt712->scp_sdca_stat2);
287 snd_soc_jack_report(rt712->hs_jack, rt712->jack_type | btn_type,
294 snd_soc_jack_report(rt712->hs_jack, rt712->jack_type,
300 &rt712->jack_btn_check_work, msecs_to_jiffies(200));
306 struct rt712_sdca_priv *rt712 =
312 ret = regmap_read(rt712->regmap,
321 ret = regmap_read(rt712->regmap,
328 ret = regmap_read(rt712->regmap,
370 rt712->jack_type = 0;
373 dev_dbg(&rt712->slave->dev, "%s, btn_type=0x%x\n", __func__, btn_type);
374 snd_soc_jack_report(rt712->hs_jack, rt712->jack_type | btn_type,
381 snd_soc_jack_report(rt712->hs_jack, rt712->jack_type,
387 &rt712->jack_btn_check_work, msecs_to_jiffies(200));
396 static void rt712_sdca_jack_init(struct rt712_sdca_priv *rt712)
398 mutex_lock(&rt712->calibrate_mutex);
400 if (rt712->hs_jack) {
402 rt712_sdca_index_write(rt712, RT712_VENDOR_HDA_CTL,
404 rt712_sdca_index_update_bits(rt712, RT712_VENDOR_HDA_CTL,
406 rt712_sdca_index_update_bits(rt712, RT712_VENDOR_HDA_CTL,
410 rt712_sdca_index_update_bits(rt712, RT712_VENDOR_HDA_CTL,
413 rt712_sdca_index_update_bits(rt712, RT712_VENDOR_HDA_CTL,
416 switch (rt712->jd_src) {
419 rt712_sdca_index_write(rt712, RT712_VENDOR_REG, RT712_CC_DET1, 0x043a);
422 dev_warn(rt712->component->dev, "Wrong JD source\n");
427 sdw_write_no_pm(rt712->slave, SDW_SCP_SDCA_INTMASK1, SDW_SCP_SDCA_INTMASK_SDCA_0);
429 sdw_write_no_pm(rt712->slave, SDW_SCP_SDCA_INTMASK2, SDW_SCP_SDCA_INTMASK_SDCA_8);
430 dev_dbg(&rt712->slave->dev, "in %s enable\n", __func__);
433 rt712_sdca_index_update_bits(rt712, RT712_VENDOR_HDA_CTL,
435 rt712_sdca_index_update_bits(rt712, RT712_VENDOR_HDA_CTL,
439 rt712_sdca_index_update_bits(rt712, RT712_VENDOR_HDA_CTL,
442 dev_dbg(&rt712->slave->dev, "in %s disable\n", __func__);
445 mutex_unlock(&rt712->calibrate_mutex);
451 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
454 rt712->hs_jack = hs_jack;
456 if (!rt712->first_hw_init)
471 rt712_sdca_jack_init(rt712);
486 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
496 regmap_read(rt712->mbq_regmap, mc->reg, &lvalue);
497 regmap_read(rt712->mbq_regmap, mc->rreg, &rvalue);
535 regmap_write(rt712->mbq_regmap, mc->reg, gain_l_val);
537 regmap_write(rt712->mbq_regmap, mc->rreg, gain_r_val);
539 regmap_read(rt712->mbq_regmap, mc->reg, &read_l);
540 regmap_read(rt712->mbq_regmap, mc->rreg, &read_r);
551 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
562 regmap_read(rt712->mbq_regmap, mc->reg, &read_l);
563 regmap_read(rt712->mbq_regmap, mc->rreg, &read_r);
592 static int rt712_sdca_set_fu0f_capture_ctl(struct rt712_sdca_priv *rt712)
597 ch_l = (rt712->fu0f_dapm_mute || rt712->fu0f_mixer_l_mute) ? 0x01 : 0x00;
598 ch_r = (rt712->fu0f_dapm_mute || rt712->fu0f_mixer_r_mute) ? 0x01 : 0x00;
600 err = regmap_write(rt712->regmap,
606 err = regmap_write(rt712->regmap,
619 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
621 ucontrol->value.integer.value[0] = !rt712->fu0f_mixer_l_mute;
622 ucontrol->value.integer.value[1] = !rt712->fu0f_mixer_r_mute;
630 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
633 if (rt712->fu0f_mixer_l_mute == !ucontrol->value.integer.value[0] &&
634 rt712->fu0f_mixer_r_mute == !ucontrol->value.integer.value[1])
637 rt712->fu0f_mixer_l_mute = !ucontrol->value.integer.value[0];
638 rt712->fu0f_mixer_r_mute = !ucontrol->value.integer.value[1];
639 err = rt712_sdca_set_fu0f_capture_ctl(rt712);
683 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
686 rt712_sdca_index_read(rt712, RT712_VENDOR_HDA_CTL, RT712_MIXER_CTL1, &val);
710 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
726 rt712_sdca_index_read(rt712, RT712_VENDOR_HDA_CTL, RT712_MIXER_CTL1, &val);
731 rt712_sdca_index_write(rt712, RT712_VENDOR_HDA_CTL,
733 rt712_sdca_index_update_bits(rt712, RT712_VENDOR_HDA_CTL,
759 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
764 regmap_write(rt712->regmap,
768 regmap_write(rt712->regmap,
774 regmap_write(rt712->regmap,
778 regmap_write(rt712->regmap,
792 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
796 rt712->fu0f_dapm_mute = false;
797 rt712_sdca_set_fu0f_capture_ctl(rt712);
800 rt712->fu0f_dapm_mute = true;
801 rt712_sdca_set_fu0f_capture_ctl(rt712);
812 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
817 regmap_write(rt712->regmap,
823 regmap_write(rt712->regmap,
837 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
842 regmap_write(rt712->regmap,
848 regmap_write(rt712->regmap,
862 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
867 regmap_write(rt712->regmap,
873 regmap_write(rt712->regmap,
950 static int rt712_sdca_parse_dt(struct rt712_sdca_priv *rt712, struct device *dev)
952 device_property_read_u32(dev, "realtek,jd-src", &rt712->jd_src);
960 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
963 rt712_sdca_parse_dt(rt712, &rt712->slave->dev);
964 rt712->component = component;
967 if (rt712->hw_id != RT712_DEV_ID_713) {
976 if (!rt712->first_hw_init)
1017 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
1031 if (!rt712->slave)
1060 retval = sdw_stream_add_slave(rt712->slave, &stream_config,
1096 regmap_write(rt712->regmap,
1099 regmap_write(rt712->regmap,
1104 regmap_write(rt712->regmap,
1120 struct rt712_sdca_priv *rt712 = snd_soc_component_get_drvdata(component);
1124 if (!rt712->slave)
1127 sdw_stream_remove_slave(rt712->slave, sdw_stream);
1145 .name = "rt712-sdca-aif1",
1164 .name = "rt712-sdca-aif2",
1180 struct rt712_sdca_priv *rt712;
1183 rt712 = devm_kzalloc(dev, sizeof(*rt712), GFP_KERNEL);
1184 if (!rt712)
1187 dev_set_drvdata(dev, rt712);
1188 rt712->slave = slave;
1189 rt712->regmap = regmap;
1190 rt712->mbq_regmap = mbq_regmap;
1192 regcache_cache_only(rt712->regmap, true);
1193 regcache_cache_only(rt712->mbq_regmap, true);
1195 mutex_init(&rt712->calibrate_mutex);
1196 mutex_init(&rt712->disable_irq_lock);
1198 INIT_DELAYED_WORK(&rt712->jack_detect_work, rt712_sdca_jack_detect_handler);
1199 INIT_DELAYED_WORK(&rt712->jack_btn_check_work, rt712_sdca_btn_check_handler);
1205 rt712->hw_init = false;
1206 rt712->first_hw_init = false;
1207 rt712->fu0f_dapm_mute = true;
1208 rt712->fu0f_mixer_l_mute = rt712->fu0f_mixer_r_mute = true;
1211 rt712->jd_src = RT712_JD1;
1244 struct rt712_sdca_priv *rt712 = dev_get_drvdata(dev);
1248 rt712->disable_irq = false;
1250 if (rt712->hw_init)
1253 regcache_cache_only(rt712->regmap, false);
1254 regcache_cache_only(rt712->mbq_regmap, false);
1255 if (rt712->first_hw_init) {
1256 regcache_cache_bypass(rt712->regmap, true);
1257 regcache_cache_bypass(rt712->mbq_regmap, true);
1269 rt712_sdca_index_read(rt712, RT712_VENDOR_REG, RT712_JD_PRODUCT_NUM, &val);
1270 rt712->hw_id = (val & 0xf000) >> 12;
1272 rt712_sdca_index_write(rt712, RT712_VENDOR_REG, RT712_ANALOG_BIAS_CTL3, 0xaa81);
1273 rt712_sdca_index_write(rt712, RT712_VENDOR_REG, RT712_LDO2_3_CTL1, 0xa1e0);
1274 rt712_sdca_index_write(rt712, RT712_VENDOR_IMS_DRE, RT712_HP_DETECT_RLDET_CTL1, 0x0000);
1275 rt712_sdca_index_write(rt712, RT712_VENDOR_IMS_DRE, RT712_HP_DETECT_RLDET_CTL2, 0x0000);
1276 rt712_sdca_index_write(rt712, RT712_VENDOR_ANALOG_CTL, RT712_MISC_POWER_CTL7, 0x0000);
1277 regmap_write(rt712->regmap, RT712_RC_CAL, 0x23);
1280 rt712_sdca_index_read(rt712, RT712_VENDOR_REG, RT712_SW_CONFIG1, &hibernation_flag);
1282 ret = rt712_sdca_calibration(rt712);
1287 rt712_sdca_index_update_bits(rt712, RT712_VENDOR_HDA_CTL,
1289 rt712_sdca_index_write(rt712, RT712_VENDOR_HDA_CTL,
1291 rt712_sdca_index_write(rt712, RT712_VENDOR_HDA_CTL,
1293 rt712_sdca_index_write(rt712, RT712_VENDOR_HDA_CTL,
1296 rt712_sdca_index_update_bits(rt712, RT712_VENDOR_HDA_CTL,
1298 regmap_write(rt712->regmap, 0x2f50, 0x00);
1299 regmap_write(rt712->regmap, 0x2f54, 0x00);
1300 regmap_write(rt712->regmap,
1304 if (rt712->hw_id != RT712_DEV_ID_713) {
1305 rt712_sdca_index_write(rt712, RT712_VENDOR_HDA_CTL, RT712_AMP_PDE_FLOAT_CTL, 0x2323);
1306 rt712_sdca_index_write(rt712, RT712_VENDOR_HDA_CTL, RT712_EAPD_CTL, 0x0002);
1307 regmap_write(rt712->regmap,
1315 if (rt712->hs_jack)
1316 rt712_sdca_jack_init(rt712);
1319 rt712_sdca_index_write(rt712, RT712_VENDOR_REG, RT712_SW_CONFIG1, 0x0001);
1321 if (rt712->first_hw_init) {
1322 regcache_cache_bypass(rt712->regmap, false);
1323 regcache_mark_dirty(rt712->regmap);
1324 regcache_cache_bypass(rt712->mbq_regmap, false);
1325 regcache_mark_dirty(rt712->mbq_regmap);
1327 rt712->first_hw_init = true;
1330 rt712->hw_init = true;