Lines Matching defs:rt722

3 // rt722-sdca.c -- rt722 SDCA ALSA SoC audio driver
26 #include "rt722-sdca.h"
28 int rt722_sdca_index_write(struct rt722_sdca_priv *rt722,
31 struct regmap *regmap = rt722->mbq_regmap;
37 dev_err(&rt722->slave->dev,
44 int rt722_sdca_index_read(struct rt722_sdca_priv *rt722,
48 struct regmap *regmap = rt722->mbq_regmap;
53 dev_err(&rt722->slave->dev,
60 static int rt722_sdca_index_update_bits(struct rt722_sdca_priv *rt722,
66 ret = rt722_sdca_index_read(rt722, nid, reg, &tmp);
71 return rt722_sdca_index_write(rt722, nid, reg, tmp);
92 static unsigned int rt722_sdca_button_detect(struct rt722_sdca_priv *rt722)
99 ret = regmap_read(rt722->regmap,
110 ret = regmap_read(rt722->regmap,
117 ret = regmap_read(rt722->regmap,
131 regmap_write(rt722->regmap,
138 static int rt722_sdca_headset_detect(struct rt722_sdca_priv *rt722)
144 ret = regmap_read(rt722->regmap,
152 rt722->jack_type = 0;
155 rt722->jack_type = SND_JACK_HEADPHONE;
158 rt722->jack_type = SND_JACK_HEADSET;
164 ret = regmap_write(rt722->regmap,
171 dev_dbg(&rt722->slave->dev,
183 struct rt722_sdca_priv *rt722 =
187 if (!rt722->hs_jack)
190 if (!rt722->component->card || !rt722->component->card->instantiated)
194 if (rt722->scp_sdca_stat1 & SDW_SCP_SDCA_INT_SDCA_6) {
195 ret = rt722_sdca_headset_detect(rt722);
201 if (rt722->scp_sdca_stat2 & SDW_SCP_SDCA_INT_SDCA_8)
202 btn_type = rt722_sdca_button_detect(rt722);
204 if (rt722->jack_type == 0)
207 dev_dbg(&rt722->slave->dev,
208 "in %s, jack_type=%d\n", __func__, rt722->jack_type);
209 dev_dbg(&rt722->slave->dev,
211 dev_dbg(&rt722->slave->dev,
213 rt722->scp_sdca_stat1, rt722->scp_sdca_stat2);
215 snd_soc_jack_report(rt722->hs_jack, rt722->jack_type | btn_type,
222 snd_soc_jack_report(rt722->hs_jack, rt722->jack_type,
228 &rt722->jack_btn_check_work, msecs_to_jiffies(200));
234 struct rt722_sdca_priv *rt722 =
240 ret = regmap_read(rt722->regmap,
249 ret = regmap_read(rt722->regmap,
256 ret = regmap_read(rt722->regmap,
266 rt722->jack_type = 0;
268 dev_dbg(&rt722->slave->dev, "%s, btn_type=0x%x\n", __func__, btn_type);
269 snd_soc_jack_report(rt722->hs_jack, rt722->jack_type | btn_type,
276 snd_soc_jack_report(rt722->hs_jack, rt722->jack_type,
282 &rt722->jack_btn_check_work, msecs_to_jiffies(200));
291 static void rt722_sdca_jack_init(struct rt722_sdca_priv *rt722)
293 mutex_lock(&rt722->calibrate_mutex);
294 if (rt722->hs_jack) {
296 sdw_write_no_pm(rt722->slave, SDW_SCP_SDCA_INTMASK1,
299 sdw_write_no_pm(rt722->slave, SDW_SCP_SDCA_INTMASK2,
301 dev_dbg(&rt722->slave->dev, "in %s enable\n", __func__);
302 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL,
305 regmap_write(rt722->regmap,
308 regmap_write(rt722->regmap,
312 rt722_sdca_index_update_bits(rt722, RT722_VENDOR_HDA_CTL,
315 mutex_unlock(&rt722->calibrate_mutex);
321 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
324 rt722->hs_jack = hs_jack;
337 rt722_sdca_jack_init(rt722);
352 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
363 regmap_read(rt722->mbq_regmap, mc->reg, &lvalue);
364 regmap_read(rt722->mbq_regmap, mc->rreg, &rvalue);
404 regmap_write(rt722->mbq_regmap, mc->reg, gain_l_val);
407 regmap_write(rt722->mbq_regmap, mc->rreg, gain_r_val);
409 regmap_read(rt722->mbq_regmap, mc->reg, &read_l);
410 regmap_read(rt722->mbq_regmap, mc->rreg, &read_r);
421 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
433 regmap_read(rt722->mbq_regmap, mc->reg, &read_l);
434 regmap_read(rt722->mbq_regmap, mc->rreg, &read_r);
464 static int rt722_sdca_set_fu1e_capture_ctl(struct rt722_sdca_priv *rt722)
469 for (i = 0; i < ARRAY_SIZE(rt722->fu1e_mixer_mute); i++) {
470 ch_mute = rt722->fu1e_dapm_mute || rt722->fu1e_mixer_mute[i];
471 err = regmap_write(rt722->regmap,
485 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
491 ucontrol->value.integer.value[i] = !rt722->fu1e_mixer_mute[i];
500 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
506 if (rt722->fu1e_mixer_mute[i] != !ucontrol->value.integer.value[i])
508 rt722->fu1e_mixer_mute[i] = !ucontrol->value.integer.value[i];
511 err = rt722_sdca_set_fu1e_capture_ctl(rt722);
518 static int rt722_sdca_set_fu0f_capture_ctl(struct rt722_sdca_priv *rt722)
523 ch_l = (rt722->fu0f_dapm_mute || rt722->fu0f_mixer_l_mute) ? 0x01 : 0x00;
524 ch_r = (rt722->fu0f_dapm_mute || rt722->fu0f_mixer_r_mute) ? 0x01 : 0x00;
526 err = regmap_write(rt722->regmap,
532 err = regmap_write(rt722->regmap,
545 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
547 ucontrol->value.integer.value[0] = !rt722->fu0f_mixer_l_mute;
548 ucontrol->value.integer.value[1] = !rt722->fu0f_mixer_r_mute;
556 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
559 if (rt722->fu0f_mixer_l_mute != !ucontrol->value.integer.value[0] ||
560 rt722->fu0f_mixer_r_mute != !ucontrol->value.integer.value[1])
563 rt722->fu0f_mixer_l_mute = !ucontrol->value.integer.value[0];
564 rt722->fu0f_mixer_r_mute = !ucontrol->value.integer.value[1];
565 err = rt722_sdca_set_fu0f_capture_ctl(rt722);
592 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
606 regmap_read(rt722->mbq_regmap, p->reg_base + i, &regvalue);
629 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
643 regmap_read(rt722->mbq_regmap, p->reg_base + i, &regvalue[i]);
664 err = regmap_write(rt722->mbq_regmap, p->reg_base + i, gain_val[i]);
666 dev_err(&rt722->slave->dev, "%s: %#08x can't be set\n",
750 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
762 rt722_sdca_index_read(rt722, RT722_VENDOR_HDA_CTL,
777 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
796 rt722_sdca_index_read(rt722, RT722_VENDOR_HDA_CTL,
806 rt722_sdca_index_update_bits(rt722, RT722_VENDOR_HDA_CTL,
853 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
858 regmap_write(rt722->regmap,
861 regmap_write(rt722->regmap,
866 regmap_write(rt722->regmap,
869 regmap_write(rt722->regmap,
882 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
887 regmap_write(rt722->regmap,
890 regmap_write(rt722->regmap,
895 regmap_write(rt722->regmap,
898 regmap_write(rt722->regmap,
911 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
915 rt722->fu1e_dapm_mute = false;
916 rt722_sdca_set_fu1e_capture_ctl(rt722);
919 rt722->fu1e_dapm_mute = true;
920 rt722_sdca_set_fu1e_capture_ctl(rt722);
931 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
935 rt722->fu0f_dapm_mute = false;
936 rt722_sdca_set_fu0f_capture_ctl(rt722);
939 rt722->fu0f_dapm_mute = true;
940 rt722_sdca_set_fu0f_capture_ctl(rt722);
951 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
956 regmap_write(rt722->regmap,
961 regmap_write(rt722->regmap,
974 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
979 regmap_write(rt722->regmap,
984 regmap_write(rt722->regmap,
997 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
1002 regmap_write(rt722->regmap,
1007 regmap_write(rt722->regmap,
1020 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
1025 regmap_write(rt722->regmap,
1030 regmap_write(rt722->regmap,
1110 static int rt722_sdca_parse_dt(struct rt722_sdca_priv *rt722, struct device *dev)
1112 device_property_read_u32(dev, "realtek,jd-src", &rt722->jd_src);
1119 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
1122 rt722_sdca_parse_dt(rt722, &rt722->slave->dev);
1123 rt722->component = component;
1163 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
1177 if (!rt722->slave)
1212 retval = sdw_stream_add_slave(rt722->slave, &stream_config,
1247 regmap_write(rt722->regmap,
1250 regmap_write(rt722->regmap,
1256 regmap_write(rt722->regmap,
1261 regmap_write(rt722->regmap,
1272 struct rt722_sdca_priv *rt722 = snd_soc_component_get_drvdata(component);
1276 if (!rt722->slave)
1279 sdw_stream_remove_slave(rt722->slave, sdw_stream);
1297 .name = "rt722-sdca-aif1",
1316 .name = "rt722-sdca-aif2",
1328 .name = "rt722-sdca-aif3",
1344 struct rt722_sdca_priv *rt722;
1346 rt722 = devm_kzalloc(dev, sizeof(*rt722), GFP_KERNEL);
1347 if (!rt722)
1350 dev_set_drvdata(dev, rt722);
1351 rt722->slave = slave;
1352 rt722->regmap = regmap;
1353 rt722->mbq_regmap = mbq_regmap;
1355 mutex_init(&rt722->calibrate_mutex);
1356 mutex_init(&rt722->disable_irq_lock);
1358 INIT_DELAYED_WORK(&rt722->jack_detect_work, rt722_sdca_jack_detect_handler);
1359 INIT_DELAYED_WORK(&rt722->jack_btn_check_work, rt722_sdca_btn_check_handler);
1365 rt722->hw_init = false;
1366 rt722->first_hw_init = false;
1367 rt722->fu1e_dapm_mute = true;
1368 rt722->fu0f_dapm_mute = true;
1369 rt722->fu0f_mixer_l_mute = rt722->fu0f_mixer_r_mute = true;
1370 rt722->fu1e_mixer_mute[0] = rt722->fu1e_mixer_mute[1] =
1371 rt722->fu1e_mixer_mute[2] = rt722->fu1e_mixer_mute[3] = true;
1377 static void rt722_sdca_dmic_preset(struct rt722_sdca_priv *rt722)
1380 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL,
1383 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL,
1386 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL,
1389 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL,
1392 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL,
1395 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL,
1398 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL,
1401 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL,
1404 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL,
1407 regmap_write(rt722->regmap,
1411 regmap_write(rt722->regmap, 0x2f5c, 0x25);
1414 static void rt722_sdca_amp_preset(struct rt722_sdca_priv *rt722)
1417 rt722_sdca_index_write(rt722, RT722_VENDOR_REG, RT722_CLSD_CTRL6,
1420 rt722_sdca_index_write(rt722, RT722_VENDOR_CALI, RT722_DC_CALIB_CTRL,
1423 rt722_sdca_index_write(rt722, RT722_VENDOR_CALI, RT722_DC_CALIB_CTRL,
1426 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_AMP_PDE_FLOAT_CTL,
1429 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_EAPD_CTL,
1432 regmap_write(rt722->regmap,
1437 static void rt722_sdca_jack_preset(struct rt722_sdca_priv *rt722)
1443 rt722_sdca_index_write(rt722, RT722_VENDOR_REG, RT722_ANALOG_BIAS_CTL3,
1446 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_GE_RELATED_CTL2,
1449 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_UMP_HID_CTL4,
1452 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_UMP_HID_CTL5,
1455 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_UMP_HID_CTL0,
1458 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_UMP_HID_CTL7,
1461 rt722_sdca_index_write(rt722, RT722_VENDOR_REG, RT722_JD_CTRL1,
1464 rt722_sdca_index_write(rt722, RT722_VENDOR_REG, RT722_CLSD_CTRL6,
1467 rt722_sdca_index_write(rt722, RT722_VENDOR_REG, RT722_FSM_CTL,
1470 rt722_sdca_index_write(rt722, RT722_VENDOR_CALI, RT722_DAC_DC_CALI_CTL3,
1474 ret = rt722_sdca_index_read(rt722, RT722_VENDOR_CALI,
1477 dev_dbg(&rt722->slave->dev, "calibration failed!, ret=%d\n", ret);
1482 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_ADC0A_08_PDE_FLOAT_CTL,
1485 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_MIC2_LINE2_PDE_FLOAT_CTL,
1488 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_ET41_LINE2_PDE_FLOAT_CTL,
1491 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_DAC03_HP_PDE_FLOAT_CTL,
1493 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_ENT_FLOAT_CTRL_1,
1495 rt722_sdca_index_write(rt722, RT722_VENDOR_HDA_CTL, RT722_FLOAT_CTRL_1,
1498 regmap_write(rt722->regmap, 0x2f58, 0x07);
1499 regmap_write(rt722->regmap, 0x2f03, 0x06);
1501 rt722_sdca_index_update_bits(rt722, RT722_VENDOR_REG,
1503 rt722_sdca_index_update_bits(rt722, RT722_VENDOR_REG,
1506 rt722_sdca_index_write(rt722, RT722_VENDOR_REG, RT722_DIGITAL_MISC_CTRL4,
1512 struct rt722_sdca_priv *rt722 = dev_get_drvdata(dev);
1514 rt722->disable_irq = false;
1516 if (rt722->hw_init)
1519 if (rt722->first_hw_init) {
1520 regcache_cache_only(rt722->regmap, false);
1521 regcache_cache_bypass(rt722->regmap, true);
1522 regcache_cache_only(rt722->mbq_regmap, false);
1523 regcache_cache_bypass(rt722->mbq_regmap, true);
1544 rt722_sdca_dmic_preset(rt722);
1545 rt722_sdca_amp_preset(rt722);
1546 rt722_sdca_jack_preset(rt722);
1548 if (rt722->first_hw_init) {
1549 regcache_cache_bypass(rt722->regmap, false);
1550 regcache_mark_dirty(rt722->regmap);
1551 regcache_cache_bypass(rt722->mbq_regmap, false);
1552 regcache_mark_dirty(rt722->mbq_regmap);
1554 rt722->first_hw_init = true;
1557 rt722->hw_init = true;