Lines Matching +full:jd +full:- +full:invert

1 // SPDX-License-Identifier: GPL-2.0-only
3 // rt712-sdca.c -- rt712 SDCA ALSA SoC audio driver
24 #include <sound/soc-dapm.h>
26 #include "rt712-sdca.h"
32 struct regmap *regmap = rt712->mbq_regmap; in rt712_sdca_index_write()
37 dev_err(&rt712->slave->dev, in rt712_sdca_index_write()
48 struct regmap *regmap = rt712->mbq_regmap; in rt712_sdca_index_read()
53 dev_err(&rt712->slave->dev, in rt712_sdca_index_read()
78 struct regmap *regmap = rt712->regmap; in rt712_sdca_calibration()
82 mutex_lock(&rt712->calibrate_mutex); in rt712_sdca_calibration()
85 /* Set HP-JD source from JD1 */ in rt712_sdca_calibration()
86 if (rt712->version_id == RT712_VA) in rt712_sdca_calibration()
95 /* W1C Trigger DC calibration (HP & Class-D) */ in rt712_sdca_calibration()
111 dev_err(dev, "%s, calibration time-out!\n", __func__); in rt712_sdca_calibration()
114 ret = -ETIMEDOUT; in rt712_sdca_calibration()
126 /* Release HP-JD, EN_CBJ_TIE_GL/R open, en_osw gating auto done bit */ in rt712_sdca_calibration()
129 mutex_unlock(&rt712->calibrate_mutex); in rt712_sdca_calibration()
141 ret = regmap_read(rt712->regmap, in rt712_sdca_button_detect()
152 ret = regmap_read(rt712->regmap, in rt712_sdca_button_detect()
159 ret = regmap_read(rt712->regmap, in rt712_sdca_button_detect()
205 if (rt712->version_id == RT712_VA) in rt712_sdca_button_detect()
206 regmap_write(rt712->regmap, in rt712_sdca_button_detect()
210 regmap_write(rt712->regmap, in rt712_sdca_button_detect()
224 ret = regmap_read(rt712->regmap, in rt712_sdca_headset_detect()
232 rt712->jack_type = 0; in rt712_sdca_headset_detect()
235 rt712->jack_type = SND_JACK_HEADPHONE; in rt712_sdca_headset_detect()
238 rt712->jack_type = SND_JACK_HEADSET; in rt712_sdca_headset_detect()
244 ret = regmap_write(rt712->regmap, in rt712_sdca_headset_detect()
251 dev_dbg(&rt712->slave->dev, in rt712_sdca_headset_detect()
267 if (!rt712->hs_jack) in rt712_sdca_jack_detect_handler()
270 if (!rt712->component->card || !rt712->component->card->instantiated) in rt712_sdca_jack_detect_handler()
274 if (rt712->scp_sdca_stat1 & SDW_SCP_SDCA_INT_SDCA_0) { in rt712_sdca_jack_detect_handler()
281 if (rt712->scp_sdca_stat2 & SDW_SCP_SDCA_INT_SDCA_8) in rt712_sdca_jack_detect_handler()
284 if (rt712->jack_type == 0) in rt712_sdca_jack_detect_handler()
287 dev_dbg(&rt712->slave->dev, in rt712_sdca_jack_detect_handler()
288 "in %s, jack_type=0x%x\n", __func__, rt712->jack_type); in rt712_sdca_jack_detect_handler()
289 dev_dbg(&rt712->slave->dev, in rt712_sdca_jack_detect_handler()
291 dev_dbg(&rt712->slave->dev, in rt712_sdca_jack_detect_handler()
293 rt712->scp_sdca_stat1, rt712->scp_sdca_stat2); in rt712_sdca_jack_detect_handler()
295 snd_soc_jack_report(rt712->hs_jack, rt712->jack_type | btn_type, in rt712_sdca_jack_detect_handler()
302 snd_soc_jack_report(rt712->hs_jack, rt712->jack_type, in rt712_sdca_jack_detect_handler()
308 &rt712->jack_btn_check_work, msecs_to_jiffies(200)); in rt712_sdca_jack_detect_handler()
320 ret = regmap_read(rt712->regmap, in rt712_sdca_btn_check_handler()
329 ret = regmap_read(rt712->regmap, in rt712_sdca_btn_check_handler()
336 ret = regmap_read(rt712->regmap, in rt712_sdca_btn_check_handler()
378 rt712->jack_type = 0; in rt712_sdca_btn_check_handler()
381 dev_dbg(&rt712->slave->dev, "%s, btn_type=0x%x\n", __func__, btn_type); in rt712_sdca_btn_check_handler()
382 snd_soc_jack_report(rt712->hs_jack, rt712->jack_type | btn_type, in rt712_sdca_btn_check_handler()
389 snd_soc_jack_report(rt712->hs_jack, rt712->jack_type, in rt712_sdca_btn_check_handler()
395 &rt712->jack_btn_check_work, msecs_to_jiffies(200)); in rt712_sdca_btn_check_handler()
406 mutex_lock(&rt712->calibrate_mutex); in rt712_sdca_jack_init()
408 if (rt712->hs_jack) { in rt712_sdca_jack_init()
424 switch (rt712->jd_src) { in rt712_sdca_jack_init()
426 /* Set HP-JD source from JD1, VB uses JD1 in default */ in rt712_sdca_jack_init()
427 if (rt712->version_id == RT712_VA) in rt712_sdca_jack_init()
431 dev_warn(rt712->component->dev, "Wrong JD source\n"); in rt712_sdca_jack_init()
436 sdw_write_no_pm(rt712->slave, SDW_SCP_SDCA_INTMASK1, SDW_SCP_SDCA_INTMASK_SDCA_0); in rt712_sdca_jack_init()
438 sdw_write_no_pm(rt712->slave, SDW_SCP_SDCA_INTMASK2, SDW_SCP_SDCA_INTMASK_SDCA_8); in rt712_sdca_jack_init()
439 dev_dbg(&rt712->slave->dev, "in %s enable\n", __func__); in rt712_sdca_jack_init()
451 dev_dbg(&rt712->slave->dev, "in %s disable\n", __func__); in rt712_sdca_jack_init()
454 mutex_unlock(&rt712->calibrate_mutex); in rt712_sdca_jack_init()
463 rt712->hs_jack = hs_jack; in rt712_sdca_set_jack_detect()
465 if (!rt712->first_hw_init) in rt712_sdca_set_jack_detect()
468 ret = pm_runtime_resume_and_get(component->dev); in rt712_sdca_set_jack_detect()
470 if (ret != -EACCES) { in rt712_sdca_set_jack_detect()
471 dev_err(component->dev, "%s: failed to resume %d\n", __func__, ret); in rt712_sdca_set_jack_detect()
476 dev_dbg(component->dev, "%s: skipping jack init for now\n", __func__); in rt712_sdca_set_jack_detect()
482 pm_runtime_mark_last_busy(component->dev); in rt712_sdca_set_jack_detect()
483 pm_runtime_put_autosuspend(component->dev); in rt712_sdca_set_jack_detect()
494 (struct soc_mixer_control *)kcontrol->private_value; in rt712_sdca_set_gain_put()
502 if (strstr(ucontrol->id.name, "FU0F Capture Volume")) in rt712_sdca_set_gain_put()
505 regmap_read(rt712->mbq_regmap, mc->reg, &lvalue); in rt712_sdca_set_gain_put()
506 regmap_read(rt712->mbq_regmap, mc->rreg, &rvalue); in rt712_sdca_set_gain_put()
509 gain_l_val = ucontrol->value.integer.value[0]; in rt712_sdca_set_gain_put()
510 if (gain_l_val > mc->max) in rt712_sdca_set_gain_put()
511 gain_l_val = mc->max; in rt712_sdca_set_gain_put()
513 if (mc->shift == 8) /* boost gain */ in rt712_sdca_set_gain_put()
518 gain_l_val = 0x1e00 - ((mc->max - gain_l_val) * interval_offset); in rt712_sdca_set_gain_put()
520 gain_l_val = 0 - ((mc->max - gain_l_val) * interval_offset); in rt712_sdca_set_gain_put()
525 gain_r_val = ucontrol->value.integer.value[1]; in rt712_sdca_set_gain_put()
526 if (gain_r_val > mc->max) in rt712_sdca_set_gain_put()
527 gain_r_val = mc->max; in rt712_sdca_set_gain_put()
529 if (mc->shift == 8) /* boost gain */ in rt712_sdca_set_gain_put()
534 gain_r_val = 0x1e00 - ((mc->max - gain_r_val) * interval_offset); in rt712_sdca_set_gain_put()
536 gain_r_val = 0 - ((mc->max - gain_r_val) * interval_offset); in rt712_sdca_set_gain_put()
544 regmap_write(rt712->mbq_regmap, mc->reg, gain_l_val); in rt712_sdca_set_gain_put()
546 regmap_write(rt712->mbq_regmap, mc->rreg, gain_r_val); in rt712_sdca_set_gain_put()
548 regmap_read(rt712->mbq_regmap, mc->reg, &read_l); in rt712_sdca_set_gain_put()
549 regmap_read(rt712->mbq_regmap, mc->rreg, &read_r); in rt712_sdca_set_gain_put()
553 return -EIO; in rt712_sdca_set_gain_put()
562 (struct soc_mixer_control *)kcontrol->private_value; in rt712_sdca_set_gain_get()
568 if (strstr(ucontrol->id.name, "FU0F Capture Volume")) in rt712_sdca_set_gain_get()
571 regmap_read(rt712->mbq_regmap, mc->reg, &read_l); in rt712_sdca_set_gain_get()
572 regmap_read(rt712->mbq_regmap, mc->rreg, &read_r); in rt712_sdca_set_gain_get()
574 if (mc->shift == 8) /* boost gain */ in rt712_sdca_set_gain_get()
578 ctl_l = mc->max - (((0x1e00 - read_l) & 0xffff) / interval_offset); in rt712_sdca_set_gain_get()
580 ctl_l = mc->max - (((0 - read_l) & 0xffff) / interval_offset); in rt712_sdca_set_gain_get()
584 if (mc->shift == 8) /* boost gain */ in rt712_sdca_set_gain_get()
588 ctl_r = mc->max - (((0x1e00 - read_r) & 0xffff) / interval_offset); in rt712_sdca_set_gain_get()
590 ctl_r = mc->max - (((0 - read_r) & 0xffff) / interval_offset); in rt712_sdca_set_gain_get()
595 ucontrol->value.integer.value[0] = ctl_l; in rt712_sdca_set_gain_get()
596 ucontrol->value.integer.value[1] = ctl_r; in rt712_sdca_set_gain_get()
606 ch_01 = (rt712->fu0f_dapm_mute || rt712->fu0f_mixer_l_mute) ? 0x01 : 0x00; in rt712_sdca_set_fu0f_capture_ctl()
607 ch_02 = (rt712->fu0f_dapm_mute || rt712->fu0f_mixer_r_mute) ? 0x01 : 0x00; in rt712_sdca_set_fu0f_capture_ctl()
609 err = regmap_write(rt712->regmap, in rt712_sdca_set_fu0f_capture_ctl()
615 err = regmap_write(rt712->regmap, in rt712_sdca_set_fu0f_capture_ctl()
630 ucontrol->value.integer.value[0] = !rt712->fu0f_mixer_l_mute; in rt712_sdca_fu0f_capture_get()
631 ucontrol->value.integer.value[1] = !rt712->fu0f_mixer_r_mute; in rt712_sdca_fu0f_capture_get()
642 if (rt712->fu0f_mixer_l_mute == !ucontrol->value.integer.value[0] && in rt712_sdca_fu0f_capture_put()
643 rt712->fu0f_mixer_r_mute == !ucontrol->value.integer.value[1]) in rt712_sdca_fu0f_capture_put()
646 rt712->fu0f_mixer_l_mute = !ucontrol->value.integer.value[0]; in rt712_sdca_fu0f_capture_put()
647 rt712->fu0f_mixer_r_mute = !ucontrol->value.integer.value[1]; in rt712_sdca_fu0f_capture_put()
655 static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -6525, 75, 0);
656 static const DECLARE_TLV_DB_SCALE(mic_vol_tlv, -1725, 75, 0);
707 ucontrol->value.enumerated.item[0] = val; in rt712_sdca_mux_get()
720 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; in rt712_sdca_mux_put()
721 unsigned int *item = ucontrol->value.enumerated.item; in rt712_sdca_mux_put()
725 if (item[0] >= e->items) in rt712_sdca_mux_put()
726 return -EINVAL; in rt712_sdca_mux_put()
728 if (ucontrol->value.enumerated.item[0] == 0) in rt712_sdca_mux_put()
730 else if (ucontrol->value.enumerated.item[0] == 1) in rt712_sdca_mux_put()
733 return -EINVAL; in rt712_sdca_mux_put()
767 snd_soc_dapm_to_component(w->dapm); in rt712_sdca_fu05_event()
773 regmap_write(rt712->regmap, in rt712_sdca_fu05_event()
777 regmap_write(rt712->regmap, in rt712_sdca_fu05_event()
783 regmap_write(rt712->regmap, in rt712_sdca_fu05_event()
787 regmap_write(rt712->regmap, in rt712_sdca_fu05_event()
800 snd_soc_dapm_to_component(w->dapm); in rt712_sdca_fu0f_event()
805 rt712->fu0f_dapm_mute = false; in rt712_sdca_fu0f_event()
809 rt712->fu0f_dapm_mute = true; in rt712_sdca_fu0f_event()
820 snd_soc_dapm_to_component(w->dapm); in rt712_sdca_pde40_event()
826 regmap_write(rt712->regmap, in rt712_sdca_pde40_event()
832 regmap_write(rt712->regmap, in rt712_sdca_pde40_event()
845 snd_soc_dapm_to_component(w->dapm); in rt712_sdca_pde12_event()
851 regmap_write(rt712->regmap, in rt712_sdca_pde12_event()
857 regmap_write(rt712->regmap, in rt712_sdca_pde12_event()
870 snd_soc_dapm_to_component(w->dapm); in rt712_sdca_pde23_event()
876 regmap_write(rt712->regmap, in rt712_sdca_pde23_event()
882 regmap_write(rt712->regmap, in rt712_sdca_pde23_event()
970 device_property_read_u32(dev, "realtek,jd-src", &rt712->jd_src); in rt712_sdca_parse_dt()
981 rt712_sdca_parse_dt(rt712, &rt712->slave->dev); in rt712_sdca_probe()
982 rt712->component = component; in rt712_sdca_probe()
985 if (rt712->hw_id != RT712_DEV_ID_713) { in rt712_sdca_probe()
994 if (!rt712->first_hw_init) in rt712_sdca_probe()
997 ret = pm_runtime_resume(component->dev); in rt712_sdca_probe()
998 if (ret < 0 && ret != -EACCES) in rt712_sdca_probe()
1010 (struct rt712_dmic_kctrl_priv *)kcontrol->private_value; in rt712_sdca_dmic_set_gain_get()
1015 if (strstr(ucontrol->id.name, "FU1E Capture Volume")) in rt712_sdca_dmic_set_gain_get()
1019 for (i = 0; i < p->count; i++) { in rt712_sdca_dmic_set_gain_get()
1020 regmap_read(rt712->mbq_regmap, p->reg_base + i, &regvalue); in rt712_sdca_dmic_set_gain_get()
1026 ctl = p->max - (((0x1e00 - regvalue) & 0xffff) / interval_offset); in rt712_sdca_dmic_set_gain_get()
1028 ctl = p->max - (((0 - regvalue) & 0xffff) / interval_offset); in rt712_sdca_dmic_set_gain_get()
1031 ucontrol->value.integer.value[i] = ctl; in rt712_sdca_dmic_set_gain_get()
1042 (struct rt712_dmic_kctrl_priv *)kcontrol->private_value; in rt712_sdca_dmic_set_gain_put()
1050 if (strstr(ucontrol->id.name, "FU1E Capture Volume")) in rt712_sdca_dmic_set_gain_put()
1054 for (i = 0; i < p->count; i++) { in rt712_sdca_dmic_set_gain_put()
1055 regmap_read(rt712->mbq_regmap, p->reg_base + i, &regvalue[i]); in rt712_sdca_dmic_set_gain_put()
1057 gain_val[i] = ucontrol->value.integer.value[i]; in rt712_sdca_dmic_set_gain_put()
1058 if (gain_val[i] > p->max) in rt712_sdca_dmic_set_gain_put()
1059 gain_val[i] = p->max; in rt712_sdca_dmic_set_gain_put()
1064 gain_val[i] = 0x1e00 - ((p->max - gain_val[i]) * interval_offset); in rt712_sdca_dmic_set_gain_put()
1075 for (i = 0; i < p->count; i++) { in rt712_sdca_dmic_set_gain_put()
1076 err = regmap_write(rt712->mbq_regmap, p->reg_base + i, gain_val[i]); in rt712_sdca_dmic_set_gain_put()
1078 dev_err(&rt712->slave->dev, "0x%08x can't be set\n", p->reg_base + i); in rt712_sdca_dmic_set_gain_put()
1089 for (i = 0; i < ARRAY_SIZE(rt712->fu1e_mixer_mute); i++) { in rt712_sdca_set_fu1e_capture_ctl()
1090 ch_mute = (rt712->fu1e_dapm_mute || rt712->fu1e_mixer_mute[i]) ? 0x01 : 0x00; in rt712_sdca_set_fu1e_capture_ctl()
1091 err = regmap_write(rt712->regmap, in rt712_sdca_set_fu1e_capture_ctl()
1107 (struct rt712_dmic_kctrl_priv *)kcontrol->private_value; in rt712_sdca_dmic_fu1e_capture_get()
1110 for (i = 0; i < p->count; i++) in rt712_sdca_dmic_fu1e_capture_get()
1111 ucontrol->value.integer.value[i] = !rt712->fu1e_mixer_mute[i]; in rt712_sdca_dmic_fu1e_capture_get()
1122 (struct rt712_dmic_kctrl_priv *)kcontrol->private_value; in rt712_sdca_dmic_fu1e_capture_put()
1125 for (i = 0; i < p->count; i++) { in rt712_sdca_dmic_fu1e_capture_put()
1126 if (rt712->fu1e_mixer_mute[i] != !ucontrol->value.integer.value[i]) in rt712_sdca_dmic_fu1e_capture_put()
1128 rt712->fu1e_mixer_mute[i] = !ucontrol->value.integer.value[i]; in rt712_sdca_dmic_fu1e_capture_put()
1142 (struct rt712_dmic_kctrl_priv *)kcontrol->private_value; in rt712_sdca_fu_info()
1144 if (p->max == 1) in rt712_sdca_fu_info()
1145 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; in rt712_sdca_fu_info()
1147 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in rt712_sdca_fu_info()
1148 uinfo->count = p->count; in rt712_sdca_fu_info()
1149 uinfo->value.integer.min = 0; in rt712_sdca_fu_info()
1150 uinfo->value.integer.max = p->max; in rt712_sdca_fu_info()
1157 .invert = xinvert})
1176 static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -1725, 75, 0);
1199 if (strstr(ucontrol->id.name, "ADC 0A Mux")) in rt712_sdca_dmic_mux_get()
1201 else if (strstr(ucontrol->id.name, "ADC 0B Mux")) in rt712_sdca_dmic_mux_get()
1204 return -EINVAL; in rt712_sdca_dmic_mux_get()
1209 ucontrol->value.enumerated.item[0] = (((val >> mask_sft) & 0xf) == 0x4) ? 0 : 1; in rt712_sdca_dmic_mux_get()
1222 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; in rt712_sdca_dmic_mux_put()
1223 unsigned int *item = ucontrol->value.enumerated.item; in rt712_sdca_dmic_mux_put()
1226 if (item[0] >= e->items) in rt712_sdca_dmic_mux_put()
1227 return -EINVAL; in rt712_sdca_dmic_mux_put()
1229 if (strstr(ucontrol->id.name, "ADC 0A Mux")) in rt712_sdca_dmic_mux_put()
1231 else if (strstr(ucontrol->id.name, "ADC 0B Mux")) in rt712_sdca_dmic_mux_put()
1234 return -EINVAL; in rt712_sdca_dmic_mux_put()
1236 val = snd_soc_enum_item_to_val(e, item[0]) << e->shift_l; in rt712_sdca_dmic_mux_put()
1285 snd_soc_dapm_to_component(w->dapm); in rt712_sdca_dmic_fu1e_event()
1290 rt712->fu1e_dapm_mute = false; in rt712_sdca_dmic_fu1e_event()
1294 rt712->fu1e_dapm_mute = true; in rt712_sdca_dmic_fu1e_event()
1305 snd_soc_dapm_to_component(w->dapm); in rt712_sdca_dmic_pde11_event()
1311 regmap_write(rt712->regmap, in rt712_sdca_dmic_pde11_event()
1317 regmap_write(rt712->regmap, in rt712_sdca_dmic_pde11_event()
1362 rt712->dmic_component = component; in rt712_sdca_dmic_probe()
1364 if (!rt712->first_hw_init) in rt712_sdca_dmic_probe()
1367 ret = pm_runtime_resume(component->dev); in rt712_sdca_dmic_probe()
1368 if (ret < 0 && ret != -EACCES) in rt712_sdca_dmic_probe()
1418 struct snd_soc_component *component = dai->component; in rt712_sdca_pcm_hw_params()
1427 dev_dbg(dai->dev, "%s %s id %d", __func__, dai->name, dai->id); in rt712_sdca_pcm_hw_params()
1431 return -EINVAL; in rt712_sdca_pcm_hw_params()
1433 if (!rt712->slave) in rt712_sdca_pcm_hw_params()
1434 return -EINVAL; in rt712_sdca_pcm_hw_params()
1437 if (dai->id == RT712_AIF3 && rt712->version_id == RT712_VA) in rt712_sdca_pcm_hw_params()
1438 return -EINVAL; in rt712_sdca_pcm_hw_params()
1441 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in rt712_sdca_pcm_hw_params()
1443 if (dai->id == RT712_AIF1) in rt712_sdca_pcm_hw_params()
1445 else if (dai->id == RT712_AIF2) in rt712_sdca_pcm_hw_params()
1448 return -EINVAL; in rt712_sdca_pcm_hw_params()
1451 if (dai->id == RT712_AIF1) in rt712_sdca_pcm_hw_params()
1453 else if (dai->id == RT712_AIF3) in rt712_sdca_pcm_hw_params()
1456 return -EINVAL; in rt712_sdca_pcm_hw_params()
1465 port_config.ch_mask = GENMASK(num_channels - 1, 0); in rt712_sdca_pcm_hw_params()
1468 retval = sdw_stream_add_slave(rt712->slave, &stream_config, in rt712_sdca_pcm_hw_params()
1471 dev_err(dai->dev, "%s: Unable to configure port\n", __func__); in rt712_sdca_pcm_hw_params()
1476 dev_err(component->dev, "%s: Unsupported channels %d\n", in rt712_sdca_pcm_hw_params()
1478 return -EINVAL; in rt712_sdca_pcm_hw_params()
1496 dev_err(component->dev, "%s: Rate %d is not supported\n", in rt712_sdca_pcm_hw_params()
1498 return -EINVAL; in rt712_sdca_pcm_hw_params()
1502 switch (dai->id) { in rt712_sdca_pcm_hw_params()
1504 regmap_write(rt712->regmap, in rt712_sdca_pcm_hw_params()
1507 regmap_write(rt712->regmap, in rt712_sdca_pcm_hw_params()
1512 regmap_write(rt712->regmap, in rt712_sdca_pcm_hw_params()
1517 regmap_write(rt712->regmap, in rt712_sdca_pcm_hw_params()
1520 regmap_write(rt712->regmap, in rt712_sdca_pcm_hw_params()
1525 dev_err(component->dev, "%s: Wrong DAI id\n", __func__); in rt712_sdca_pcm_hw_params()
1526 return -EINVAL; in rt712_sdca_pcm_hw_params()
1535 struct snd_soc_component *component = dai->component; in rt712_sdca_pcm_hw_free()
1540 if (!rt712->slave) in rt712_sdca_pcm_hw_free()
1541 return -EINVAL; in rt712_sdca_pcm_hw_free()
1543 sdw_stream_remove_slave(rt712->slave, sdw_stream); in rt712_sdca_pcm_hw_free()
1561 .name = "rt712-sdca-aif1",
1580 .name = "rt712-sdca-aif2",
1595 .name = "rt712-sdca-aif3",
1616 return -ENOMEM; in rt712_sdca_init()
1619 rt712->slave = slave; in rt712_sdca_init()
1620 rt712->regmap = regmap; in rt712_sdca_init()
1621 rt712->mbq_regmap = mbq_regmap; in rt712_sdca_init()
1623 regcache_cache_only(rt712->regmap, true); in rt712_sdca_init()
1624 regcache_cache_only(rt712->mbq_regmap, true); in rt712_sdca_init()
1626 mutex_init(&rt712->calibrate_mutex); in rt712_sdca_init()
1627 mutex_init(&rt712->disable_irq_lock); in rt712_sdca_init()
1629 INIT_DELAYED_WORK(&rt712->jack_detect_work, rt712_sdca_jack_detect_handler); in rt712_sdca_init()
1630 INIT_DELAYED_WORK(&rt712->jack_btn_check_work, rt712_sdca_btn_check_handler); in rt712_sdca_init()
1636 rt712->hw_init = false; in rt712_sdca_init()
1637 rt712->first_hw_init = false; in rt712_sdca_init()
1638 rt712->fu0f_dapm_mute = true; in rt712_sdca_init()
1639 rt712->fu0f_mixer_l_mute = rt712->fu0f_mixer_r_mute = true; in rt712_sdca_init()
1640 rt712->fu1e_dapm_mute = true; in rt712_sdca_init()
1641 rt712->fu1e_mixer_mute[0] = rt712->fu1e_mixer_mute[1] = in rt712_sdca_init()
1642 rt712->fu1e_mixer_mute[2] = rt712->fu1e_mixer_mute[3] = true; in rt712_sdca_init()
1644 /* JD source uses JD1 in default */ in rt712_sdca_init()
1645 rt712->jd_src = RT712_JD1; in rt712_sdca_init()
1647 if (slave->id.part_id != RT712_PART_ID_713) in rt712_sdca_init()
1664 rt712->dmic_function_found = true; in rt712_sdca_init()
1679 * fail with -EACCESS because of race conditions between card creation and enumeration in rt712_sdca_init()
1691 struct device *dev = &rt712->slave->dev; in rt712_sdca_va_io_init()
1698 regmap_write(rt712->regmap, RT712_RC_CAL, 0x23); in rt712_sdca_va_io_init()
1719 regmap_write(rt712->regmap, 0x2f50, 0x00); in rt712_sdca_va_io_init()
1720 regmap_write(rt712->regmap, 0x2f54, 0x00); in rt712_sdca_va_io_init()
1721 regmap_write(rt712->regmap, in rt712_sdca_va_io_init()
1725 if (rt712->hw_id != RT712_DEV_ID_713) { in rt712_sdca_va_io_init()
1728 regmap_write(rt712->regmap, in rt712_sdca_va_io_init()
1737 struct device *dev = &rt712->slave->dev; in rt712_sdca_vb_io_init()
1739 regmap_read(rt712->regmap, in rt712_sdca_vb_io_init()
1741 regmap_read(rt712->regmap, in rt712_sdca_vb_io_init()
1743 regmap_read(rt712->regmap, in rt712_sdca_vb_io_init()
1749 if ((mic_func_status & FUNCTION_NEEDS_INITIALIZATION) || (!rt712->first_hw_init)) { in rt712_sdca_vb_io_init()
1755 regmap_write(rt712->regmap, in rt712_sdca_vb_io_init()
1758 regmap_write(rt712->regmap, RT712_RC_CAL, 0x23); in rt712_sdca_vb_io_init()
1761 regmap_write(rt712->regmap, in rt712_sdca_vb_io_init()
1767 if ((jack_func_status & FUNCTION_NEEDS_INITIALIZATION) || (!rt712->first_hw_init)) { in rt712_sdca_vb_io_init()
1775 regmap_write(rt712->regmap, RT712_RC_CAL, 0x23); in rt712_sdca_vb_io_init()
1785 regmap_write(rt712->regmap, in rt712_sdca_vb_io_init()
1790 regmap_write(rt712->regmap, in rt712_sdca_vb_io_init()
1796 if ((amp_func_status & FUNCTION_NEEDS_INITIALIZATION) || (!rt712->first_hw_init)) { in rt712_sdca_vb_io_init()
1797 if (rt712->hw_id != RT712_DEV_ID_713) { in rt712_sdca_vb_io_init()
1801 regmap_write(rt712->regmap, in rt712_sdca_vb_io_init()
1805 regmap_write(rt712->regmap, in rt712_sdca_vb_io_init()
1815 struct sdw_slave_prop *prop = &slave->prop; in rt712_sdca_io_init()
1817 rt712->disable_irq = false; in rt712_sdca_io_init()
1819 if (rt712->hw_init) in rt712_sdca_io_init()
1822 regcache_cache_only(rt712->regmap, false); in rt712_sdca_io_init()
1823 regcache_cache_only(rt712->mbq_regmap, false); in rt712_sdca_io_init()
1824 if (rt712->first_hw_init) { in rt712_sdca_io_init()
1825 regcache_cache_bypass(rt712->regmap, true); in rt712_sdca_io_init()
1826 regcache_cache_bypass(rt712->mbq_regmap, true); in rt712_sdca_io_init()
1833 pm_runtime_set_active(&slave->dev); in rt712_sdca_io_init()
1836 pm_runtime_get_noresume(&slave->dev); in rt712_sdca_io_init()
1839 rt712->hw_id = (val & 0xf000) >> 12; in rt712_sdca_io_init()
1840 rt712->version_id = (val & 0x0f00) >> 8; in rt712_sdca_io_init()
1841 …dev_dbg(&slave->dev, "%s hw_id=0x%x, version_id=0x%x\n", __func__, rt712->hw_id, rt712->version_id… in rt712_sdca_io_init()
1843 if (rt712->version_id == RT712_VA) { in rt712_sdca_io_init()
1844 if (rt712->dmic_function_found) { in rt712_sdca_io_init()
1845 dev_err(&slave->dev, "%s RT712 VA detected but SMART_MIC function exposed in ACPI\n", in rt712_sdca_io_init()
1852 if (!rt712->dmic_function_found) { in rt712_sdca_io_init()
1853 dev_err(&slave->dev, "%s RT712 VB detected but no SMART_MIC function exposed in ACPI\n", in rt712_sdca_io_init()
1859 prop->lane_control_support = true; in rt712_sdca_io_init()
1867 if (rt712->hs_jack) in rt712_sdca_io_init()
1872 if (rt712->first_hw_init) { in rt712_sdca_io_init()
1873 regcache_cache_bypass(rt712->regmap, false); in rt712_sdca_io_init()
1874 regcache_mark_dirty(rt712->regmap); in rt712_sdca_io_init()
1875 regcache_cache_bypass(rt712->mbq_regmap, false); in rt712_sdca_io_init()
1876 regcache_mark_dirty(rt712->mbq_regmap); in rt712_sdca_io_init()
1878 rt712->first_hw_init = true; in rt712_sdca_io_init()
1881 rt712->hw_init = true; in rt712_sdca_io_init()
1883 dev_dbg(&slave->dev, "%s hw_init complete\n", __func__); in rt712_sdca_io_init()
1886 pm_runtime_mark_last_busy(&slave->dev); in rt712_sdca_io_init()
1887 pm_runtime_put_autosuspend(&slave->dev); in rt712_sdca_io_init()