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

1 // SPDX-License-Identifier: GPL-2.0-only
3 // rt722-sdca.c -- rt722 SDCA ALSA SoC audio driver
23 #include <sound/soc-dapm.h>
26 #include "rt722-sdca.h"
31 struct regmap *regmap = rt722->mbq_regmap; in rt722_sdca_index_write()
37 dev_err(&rt722->slave->dev, in rt722_sdca_index_write()
48 struct regmap *regmap = rt722->mbq_regmap; in rt722_sdca_index_read()
53 dev_err(&rt722->slave->dev, in rt722_sdca_index_read()
99 ret = regmap_read(rt722->regmap, in rt722_sdca_button_detect()
110 ret = regmap_read(rt722->regmap, in rt722_sdca_button_detect()
117 ret = regmap_read(rt722->regmap, in rt722_sdca_button_detect()
131 regmap_write(rt722->regmap, in rt722_sdca_button_detect()
144 ret = regmap_read(rt722->regmap, in rt722_sdca_headset_detect()
152 rt722->jack_type = 0; in rt722_sdca_headset_detect()
155 rt722->jack_type = SND_JACK_HEADPHONE; in rt722_sdca_headset_detect()
158 rt722->jack_type = SND_JACK_HEADSET; in rt722_sdca_headset_detect()
164 ret = regmap_write(rt722->regmap, in rt722_sdca_headset_detect()
171 dev_dbg(&rt722->slave->dev, in rt722_sdca_headset_detect()
187 if (!rt722->hs_jack) in rt722_sdca_jack_detect_handler()
190 if (!rt722->component->card || !rt722->component->card->instantiated) in rt722_sdca_jack_detect_handler()
194 if (rt722->scp_sdca_stat1 & SDW_SCP_SDCA_INT_SDCA_0) { in rt722_sdca_jack_detect_handler()
201 if (rt722->scp_sdca_stat2 & SDW_SCP_SDCA_INT_SDCA_8) in rt722_sdca_jack_detect_handler()
204 if (rt722->jack_type == 0) in rt722_sdca_jack_detect_handler()
207 dev_dbg(&rt722->slave->dev, in rt722_sdca_jack_detect_handler()
208 "in %s, jack_type=%d\n", __func__, rt722->jack_type); in rt722_sdca_jack_detect_handler()
209 dev_dbg(&rt722->slave->dev, in rt722_sdca_jack_detect_handler()
211 dev_dbg(&rt722->slave->dev, in rt722_sdca_jack_detect_handler()
213 rt722->scp_sdca_stat1, rt722->scp_sdca_stat2); in rt722_sdca_jack_detect_handler()
215 snd_soc_jack_report(rt722->hs_jack, rt722->jack_type | btn_type, in rt722_sdca_jack_detect_handler()
222 snd_soc_jack_report(rt722->hs_jack, rt722->jack_type, in rt722_sdca_jack_detect_handler()
228 &rt722->jack_btn_check_work, msecs_to_jiffies(200)); in rt722_sdca_jack_detect_handler()
240 ret = regmap_read(rt722->regmap, in rt722_sdca_btn_check_handler()
249 ret = regmap_read(rt722->regmap, in rt722_sdca_btn_check_handler()
256 ret = regmap_read(rt722->regmap, in rt722_sdca_btn_check_handler()
266 rt722->jack_type = 0; in rt722_sdca_btn_check_handler()
268 dev_dbg(&rt722->slave->dev, "%s, btn_type=0x%x\n", __func__, btn_type); in rt722_sdca_btn_check_handler()
269 snd_soc_jack_report(rt722->hs_jack, rt722->jack_type | btn_type, in rt722_sdca_btn_check_handler()
276 snd_soc_jack_report(rt722->hs_jack, rt722->jack_type, in rt722_sdca_btn_check_handler()
282 &rt722->jack_btn_check_work, msecs_to_jiffies(200)); in rt722_sdca_btn_check_handler()
293 mutex_lock(&rt722->calibrate_mutex); in rt722_sdca_jack_init()
294 if (rt722->hs_jack) { in rt722_sdca_jack_init()
296 sdw_write_no_pm(rt722->slave, SDW_SCP_SDCA_INTMASK1, in rt722_sdca_jack_init()
299 sdw_write_no_pm(rt722->slave, SDW_SCP_SDCA_INTMASK2, in rt722_sdca_jack_init()
301 dev_dbg(&rt722->slave->dev, "in %s enable\n", __func__); in rt722_sdca_jack_init()
305 regmap_write(rt722->regmap, in rt722_sdca_jack_init()
308 regmap_write(rt722->regmap, in rt722_sdca_jack_init()
316 mutex_unlock(&rt722->calibrate_mutex); in rt722_sdca_jack_init()
325 rt722->hs_jack = hs_jack; in rt722_sdca_set_jack_detect()
327 ret = pm_runtime_resume_and_get(component->dev); in rt722_sdca_set_jack_detect()
329 if (ret != -EACCES) { in rt722_sdca_set_jack_detect()
330 dev_err(component->dev, "%s: failed to resume %d\n", __func__, ret); in rt722_sdca_set_jack_detect()
334 dev_dbg(component->dev, "%s: skipping jack init for now\n", __func__); in rt722_sdca_set_jack_detect()
340 pm_runtime_mark_last_busy(component->dev); in rt722_sdca_set_jack_detect()
341 pm_runtime_put_autosuspend(component->dev); in rt722_sdca_set_jack_detect()
352 (struct soc_mixer_control *)kcontrol->private_value; in rt722_sdca_set_gain_put()
360 if (strstr(ucontrol->id.name, "FU1E Capture Volume") || in rt722_sdca_set_gain_put()
361 strstr(ucontrol->id.name, "FU0F Capture Volume")) in rt722_sdca_set_gain_put()
364 regmap_read(rt722->mbq_regmap, mc->reg, &lvalue); in rt722_sdca_set_gain_put()
365 regmap_read(rt722->mbq_regmap, mc->rreg, &rvalue); in rt722_sdca_set_gain_put()
368 gain_l_val = ucontrol->value.integer.value[0]; in rt722_sdca_set_gain_put()
369 if (gain_l_val > mc->max) in rt722_sdca_set_gain_put()
370 gain_l_val = mc->max; in rt722_sdca_set_gain_put()
372 if (mc->shift == 8) /* boost gain */ in rt722_sdca_set_gain_put()
377 gain_l_val = 0x1e00 - ((mc->max - gain_l_val) * interval_offset); in rt722_sdca_set_gain_put()
379 gain_l_val = 0 - ((mc->max - gain_l_val) * interval_offset); in rt722_sdca_set_gain_put()
384 gain_r_val = ucontrol->value.integer.value[1]; in rt722_sdca_set_gain_put()
385 if (gain_r_val > mc->max) in rt722_sdca_set_gain_put()
386 gain_r_val = mc->max; in rt722_sdca_set_gain_put()
388 if (mc->shift == 8) /* boost gain */ in rt722_sdca_set_gain_put()
393 gain_r_val = 0x1e00 - ((mc->max - gain_r_val) * interval_offset); in rt722_sdca_set_gain_put()
395 gain_r_val = 0 - ((mc->max - gain_r_val) * interval_offset); in rt722_sdca_set_gain_put()
405 regmap_write(rt722->mbq_regmap, mc->reg, gain_l_val); in rt722_sdca_set_gain_put()
408 regmap_write(rt722->mbq_regmap, mc->rreg, gain_r_val); in rt722_sdca_set_gain_put()
410 regmap_read(rt722->mbq_regmap, mc->reg, &read_l); in rt722_sdca_set_gain_put()
411 regmap_read(rt722->mbq_regmap, mc->rreg, &read_r); in rt722_sdca_set_gain_put()
415 return -EIO; in rt722_sdca_set_gain_put()
424 (struct soc_mixer_control *)kcontrol->private_value; in rt722_sdca_set_gain_get()
430 if (strstr(ucontrol->id.name, "FU1E Capture Volume") || in rt722_sdca_set_gain_get()
431 strstr(ucontrol->id.name, "FU0F Capture Volume")) in rt722_sdca_set_gain_get()
434 regmap_read(rt722->mbq_regmap, mc->reg, &read_l); in rt722_sdca_set_gain_get()
435 regmap_read(rt722->mbq_regmap, mc->rreg, &read_r); in rt722_sdca_set_gain_get()
437 if (mc->shift == 8) /* boost gain */ in rt722_sdca_set_gain_get()
441 ctl_l = mc->max - (((0x1e00 - read_l) & 0xffff) / interval_offset); in rt722_sdca_set_gain_get()
443 ctl_l = mc->max - (((0 - read_l) & 0xffff) / interval_offset); in rt722_sdca_set_gain_get()
447 if (mc->shift == 8) /* boost gain */ in rt722_sdca_set_gain_get()
451 ctl_r = mc->max - (((0x1e00 - read_r) & 0xffff) / interval_offset); in rt722_sdca_set_gain_get()
453 ctl_r = mc->max - (((0 - read_r) & 0xffff) / interval_offset); in rt722_sdca_set_gain_get()
459 ucontrol->value.integer.value[0] = ctl_l; in rt722_sdca_set_gain_get()
460 ucontrol->value.integer.value[1] = ctl_r; in rt722_sdca_set_gain_get()
470 for (i = 0; i < ARRAY_SIZE(rt722->fu1e_mixer_mute); i++) { in rt722_sdca_set_fu1e_capture_ctl()
471 ch_mute = rt722->fu1e_dapm_mute || rt722->fu1e_mixer_mute[i]; in rt722_sdca_set_fu1e_capture_ctl()
472 err = regmap_write(rt722->regmap, in rt722_sdca_set_fu1e_capture_ctl()
488 (struct rt722_sdca_dmic_kctrl_priv *)kcontrol->private_value; in rt722_sdca_fu1e_capture_get()
491 for (i = 0; i < p->count; i++) in rt722_sdca_fu1e_capture_get()
492 ucontrol->value.integer.value[i] = !rt722->fu1e_mixer_mute[i]; in rt722_sdca_fu1e_capture_get()
503 (struct rt722_sdca_dmic_kctrl_priv *)kcontrol->private_value; in rt722_sdca_fu1e_capture_put()
506 for (i = 0; i < p->count; i++) { in rt722_sdca_fu1e_capture_put()
507 if (rt722->fu1e_mixer_mute[i] != !ucontrol->value.integer.value[i]) in rt722_sdca_fu1e_capture_put()
509 rt722->fu1e_mixer_mute[i] = !ucontrol->value.integer.value[i]; in rt722_sdca_fu1e_capture_put()
524 ch_l = (rt722->fu0f_dapm_mute || rt722->fu0f_mixer_l_mute) ? 0x01 : 0x00; in rt722_sdca_set_fu0f_capture_ctl()
525 ch_r = (rt722->fu0f_dapm_mute || rt722->fu0f_mixer_r_mute) ? 0x01 : 0x00; in rt722_sdca_set_fu0f_capture_ctl()
527 err = regmap_write(rt722->regmap, in rt722_sdca_set_fu0f_capture_ctl()
533 err = regmap_write(rt722->regmap, in rt722_sdca_set_fu0f_capture_ctl()
548 ucontrol->value.integer.value[0] = !rt722->fu0f_mixer_l_mute; in rt722_sdca_fu0f_capture_get()
549 ucontrol->value.integer.value[1] = !rt722->fu0f_mixer_r_mute; in rt722_sdca_fu0f_capture_get()
560 if (rt722->fu0f_mixer_l_mute != !ucontrol->value.integer.value[0] || in rt722_sdca_fu0f_capture_put()
561 rt722->fu0f_mixer_r_mute != !ucontrol->value.integer.value[1]) in rt722_sdca_fu0f_capture_put()
564 rt722->fu0f_mixer_l_mute = !ucontrol->value.integer.value[0]; in rt722_sdca_fu0f_capture_put()
565 rt722->fu0f_mixer_r_mute = !ucontrol->value.integer.value[1]; in rt722_sdca_fu0f_capture_put()
577 (struct rt722_sdca_dmic_kctrl_priv *)kcontrol->private_value; in rt722_sdca_fu_info()
579 if (p->max == 1) in rt722_sdca_fu_info()
580 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; in rt722_sdca_fu_info()
582 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in rt722_sdca_fu_info()
583 uinfo->count = p->count; in rt722_sdca_fu_info()
584 uinfo->value.integer.min = 0; in rt722_sdca_fu_info()
585 uinfo->value.integer.max = p->max; in rt722_sdca_fu_info()
595 (struct rt722_sdca_dmic_kctrl_priv *)kcontrol->private_value; in rt722_sdca_dmic_set_gain_get()
602 if (strstr(ucontrol->id.name, "FU1E Capture Volume")) in rt722_sdca_dmic_set_gain_get()
606 for (i = 0; i < p->count; i++) { in rt722_sdca_dmic_set_gain_get()
607 regmap_read(rt722->mbq_regmap, p->reg_base + i, &regvalue); in rt722_sdca_dmic_set_gain_get()
612 ctl = p->max - (((vol_max - regvalue) & 0xffff) / interval_offset); in rt722_sdca_dmic_set_gain_get()
614 ucontrol->value.integer.value[i] = ctl; in rt722_sdca_dmic_set_gain_get()
625 (struct rt722_sdca_dmic_kctrl_priv *)kcontrol->private_value; in rt722_sdca_dmic_set_gain_put()
635 if (strstr(ucontrol->id.name, "FU1E Capture Volume")) in rt722_sdca_dmic_set_gain_put()
639 for (i = 0; i < p->count; i++) { in rt722_sdca_dmic_set_gain_put()
640 regmap_read(rt722->mbq_regmap, p->reg_base + i, &regvalue[i]); in rt722_sdca_dmic_set_gain_put()
642 gain_val[i] = ucontrol->value.integer.value[i]; in rt722_sdca_dmic_set_gain_put()
643 if (gain_val[i] > p->max) in rt722_sdca_dmic_set_gain_put()
644 gain_val[i] = p->max; in rt722_sdca_dmic_set_gain_put()
649 gain_val[i] = vol_max - ((p->max - gain_val[i]) * interval_offset); in rt722_sdca_dmic_set_gain_put()
660 for (i = 0; i < p->count; i++) { in rt722_sdca_dmic_set_gain_put()
661 err = regmap_write(rt722->mbq_regmap, p->reg_base + i, gain_val[i]); in rt722_sdca_dmic_set_gain_put()
663 dev_err(&rt722->slave->dev, "%s: %#08x can't be set\n", in rt722_sdca_dmic_set_gain_put()
664 __func__, p->reg_base + i); in rt722_sdca_dmic_set_gain_put()
673 .invert = xinvert})
692 static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -6525, 75, 0);
693 static const DECLARE_TLV_DB_SCALE(mic_vol_tlv, -1725, 75, 0);
750 if (strstr(ucontrol->id.name, "ADC 22 Mux")) in rt722_sdca_adc_mux_get()
752 else if (strstr(ucontrol->id.name, "ADC 24 Mux")) in rt722_sdca_adc_mux_get()
754 else if (strstr(ucontrol->id.name, "ADC 25 Mux")) in rt722_sdca_adc_mux_get()
757 return -EINVAL; in rt722_sdca_adc_mux_get()
762 ucontrol->value.enumerated.item[0] = (val >> mask_sft) & 0x7; in rt722_sdca_adc_mux_get()
775 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; in rt722_sdca_adc_mux_put()
776 unsigned int *item = ucontrol->value.enumerated.item; in rt722_sdca_adc_mux_put()
779 if (item[0] >= e->items) in rt722_sdca_adc_mux_put()
780 return -EINVAL; in rt722_sdca_adc_mux_put()
782 if (strstr(ucontrol->id.name, "ADC 22 Mux")) in rt722_sdca_adc_mux_put()
784 else if (strstr(ucontrol->id.name, "ADC 24 Mux")) in rt722_sdca_adc_mux_put()
786 else if (strstr(ucontrol->id.name, "ADC 25 Mux")) in rt722_sdca_adc_mux_put()
789 return -EINVAL; in rt722_sdca_adc_mux_put()
791 val = snd_soc_enum_item_to_val(e, item[0]) << e->shift_l; in rt722_sdca_adc_mux_put()
849 snd_soc_dapm_to_component(w->dapm); in rt722_sdca_fu42_event()
855 regmap_write(rt722->regmap, in rt722_sdca_fu42_event()
858 regmap_write(rt722->regmap, in rt722_sdca_fu42_event()
863 regmap_write(rt722->regmap, in rt722_sdca_fu42_event()
866 regmap_write(rt722->regmap, in rt722_sdca_fu42_event()
878 snd_soc_dapm_to_component(w->dapm); in rt722_sdca_fu21_event()
884 regmap_write(rt722->regmap, in rt722_sdca_fu21_event()
887 regmap_write(rt722->regmap, in rt722_sdca_fu21_event()
892 regmap_write(rt722->regmap, in rt722_sdca_fu21_event()
895 regmap_write(rt722->regmap, in rt722_sdca_fu21_event()
907 snd_soc_dapm_to_component(w->dapm); in rt722_sdca_fu113_event()
912 rt722->fu1e_dapm_mute = false; in rt722_sdca_fu113_event()
916 rt722->fu1e_dapm_mute = true; in rt722_sdca_fu113_event()
927 snd_soc_dapm_to_component(w->dapm); in rt722_sdca_fu36_event()
932 rt722->fu0f_dapm_mute = false; in rt722_sdca_fu36_event()
936 rt722->fu0f_dapm_mute = true; in rt722_sdca_fu36_event()
947 snd_soc_dapm_to_component(w->dapm); in rt722_sdca_pde47_event()
953 regmap_write(rt722->regmap, in rt722_sdca_pde47_event()
958 regmap_write(rt722->regmap, in rt722_sdca_pde47_event()
970 snd_soc_dapm_to_component(w->dapm); in rt722_sdca_pde23_event()
976 regmap_write(rt722->regmap, in rt722_sdca_pde23_event()
981 regmap_write(rt722->regmap, in rt722_sdca_pde23_event()
993 snd_soc_dapm_to_component(w->dapm); in rt722_sdca_pde11_event()
999 regmap_write(rt722->regmap, in rt722_sdca_pde11_event()
1004 regmap_write(rt722->regmap, in rt722_sdca_pde11_event()
1016 snd_soc_dapm_to_component(w->dapm); in rt722_sdca_pde12_event()
1022 regmap_write(rt722->regmap, in rt722_sdca_pde12_event()
1027 regmap_write(rt722->regmap, in rt722_sdca_pde12_event()
1109 device_property_read_u32(dev, "realtek,jd-src", &rt722->jd_src); in rt722_sdca_parse_dt()
1119 rt722_sdca_parse_dt(rt722, &rt722->slave->dev); in rt722_sdca_probe()
1120 rt722->component = component; in rt722_sdca_probe()
1122 ret = pm_runtime_resume(component->dev); in rt722_sdca_probe()
1123 if (ret < 0 && ret != -EACCES) in rt722_sdca_probe()
1159 struct snd_soc_component *component = dai->component; in rt722_sdca_pcm_hw_params()
1168 dev_dbg(dai->dev, "%s %s", __func__, dai->name); in rt722_sdca_pcm_hw_params()
1172 return -EINVAL; in rt722_sdca_pcm_hw_params()
1174 if (!rt722->slave) in rt722_sdca_pcm_hw_params()
1175 return -EINVAL; in rt722_sdca_pcm_hw_params()
1179 * RT722_AIF1 with port = 2 for headset-mic capture in rt722_sdca_pcm_hw_params()
1181 * RT722_AIF3 with port = 6 for digital-mic capture in rt722_sdca_pcm_hw_params()
1183 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in rt722_sdca_pcm_hw_params()
1185 if (dai->id == RT722_AIF1) in rt722_sdca_pcm_hw_params()
1187 else if (dai->id == RT722_AIF2) in rt722_sdca_pcm_hw_params()
1190 return -EINVAL; in rt722_sdca_pcm_hw_params()
1193 if (dai->id == RT722_AIF1) in rt722_sdca_pcm_hw_params()
1195 else if (dai->id == RT722_AIF3) in rt722_sdca_pcm_hw_params()
1198 return -EINVAL; in rt722_sdca_pcm_hw_params()
1206 port_config.ch_mask = GENMASK(num_channels - 1, 0); in rt722_sdca_pcm_hw_params()
1209 retval = sdw_stream_add_slave(rt722->slave, &stream_config, in rt722_sdca_pcm_hw_params()
1212 dev_err(dai->dev, "%s: Unable to configure port\n", __func__); in rt722_sdca_pcm_hw_params()
1217 dev_err(component->dev, "%s: Unsupported channels %d\n", in rt722_sdca_pcm_hw_params()
1219 return -EINVAL; in rt722_sdca_pcm_hw_params()
1237 dev_err(component->dev, "%s: Rate %d is not supported\n", in rt722_sdca_pcm_hw_params()
1239 return -EINVAL; in rt722_sdca_pcm_hw_params()
1243 if (dai->id == RT722_AIF1) { in rt722_sdca_pcm_hw_params()
1244 regmap_write(rt722->regmap, in rt722_sdca_pcm_hw_params()
1247 regmap_write(rt722->regmap, in rt722_sdca_pcm_hw_params()
1252 if (dai->id == RT722_AIF2) in rt722_sdca_pcm_hw_params()
1253 regmap_write(rt722->regmap, in rt722_sdca_pcm_hw_params()
1257 if (dai->id == RT722_AIF3) in rt722_sdca_pcm_hw_params()
1258 regmap_write(rt722->regmap, in rt722_sdca_pcm_hw_params()
1268 struct snd_soc_component *component = dai->component; in rt722_sdca_pcm_hw_free()
1273 if (!rt722->slave) in rt722_sdca_pcm_hw_free()
1274 return -EINVAL; in rt722_sdca_pcm_hw_free()
1276 sdw_stream_remove_slave(rt722->slave, sdw_stream); in rt722_sdca_pcm_hw_free()
1294 .name = "rt722-sdca-aif1",
1313 .name = "rt722-sdca-aif2",
1325 .name = "rt722-sdca-aif3",
1345 return -ENOMEM; in rt722_sdca_init()
1348 rt722->slave = slave; in rt722_sdca_init()
1349 rt722->regmap = regmap; in rt722_sdca_init()
1350 rt722->mbq_regmap = mbq_regmap; in rt722_sdca_init()
1352 mutex_init(&rt722->calibrate_mutex); in rt722_sdca_init()
1353 mutex_init(&rt722->disable_irq_lock); in rt722_sdca_init()
1355 INIT_DELAYED_WORK(&rt722->jack_detect_work, rt722_sdca_jack_detect_handler); in rt722_sdca_init()
1356 INIT_DELAYED_WORK(&rt722->jack_btn_check_work, rt722_sdca_btn_check_handler); in rt722_sdca_init()
1362 rt722->hw_init = false; in rt722_sdca_init()
1363 rt722->first_hw_init = false; in rt722_sdca_init()
1364 rt722->fu1e_dapm_mute = true; in rt722_sdca_init()
1365 rt722->fu0f_dapm_mute = true; in rt722_sdca_init()
1366 rt722->fu0f_mixer_l_mute = rt722->fu0f_mixer_r_mute = true; in rt722_sdca_init()
1367 rt722->fu1e_mixer_mute[0] = rt722->fu1e_mixer_mute[1] = in rt722_sdca_init()
1368 rt722->fu1e_mixer_mute[2] = rt722->fu1e_mixer_mute[3] = true; in rt722_sdca_init()
1404 regmap_write(rt722->regmap, in rt722_sdca_dmic_preset()
1408 regmap_write(rt722->regmap, 0x2f5c, 0x25); in rt722_sdca_dmic_preset()
1429 regmap_write(rt722->regmap, in rt722_sdca_amp_preset()
1457 /* Set JD de-bounce clock control */ in rt722_sdca_jack_preset()
1475 dev_dbg(&rt722->slave->dev, "calibration failed!, ret=%d\n", ret); in rt722_sdca_jack_preset()
1481 dev_dbg(&rt722->slave->dev, "%s, calibration time-out!\n", __func__); in rt722_sdca_jack_preset()
1500 regmap_write(rt722->regmap, 0x2f58, 0x07); in rt722_sdca_jack_preset()
1501 regmap_write(rt722->regmap, 0x2f03, 0x06); in rt722_sdca_jack_preset()
1507 /* Release HP-JD, EN_CBJ_TIE_GL/R open, en_osw gating auto done bit */ in rt722_sdca_jack_preset()
1516 rt722->disable_irq = false; in rt722_sdca_io_init()
1518 if (rt722->hw_init) in rt722_sdca_io_init()
1521 if (rt722->first_hw_init) { in rt722_sdca_io_init()
1522 regcache_cache_only(rt722->regmap, false); in rt722_sdca_io_init()
1523 regcache_cache_bypass(rt722->regmap, true); in rt722_sdca_io_init()
1524 regcache_cache_only(rt722->mbq_regmap, false); in rt722_sdca_io_init()
1525 regcache_cache_bypass(rt722->mbq_regmap, true); in rt722_sdca_io_init()
1532 pm_runtime_set_autosuspend_delay(&slave->dev, 3000); in rt722_sdca_io_init()
1533 pm_runtime_use_autosuspend(&slave->dev); in rt722_sdca_io_init()
1536 pm_runtime_set_active(&slave->dev); in rt722_sdca_io_init()
1539 pm_runtime_mark_last_busy(&slave->dev); in rt722_sdca_io_init()
1541 pm_runtime_enable(&slave->dev); in rt722_sdca_io_init()
1544 pm_runtime_get_noresume(&slave->dev); in rt722_sdca_io_init()
1550 if (rt722->first_hw_init) { in rt722_sdca_io_init()
1551 regcache_cache_bypass(rt722->regmap, false); in rt722_sdca_io_init()
1552 regcache_mark_dirty(rt722->regmap); in rt722_sdca_io_init()
1553 regcache_cache_bypass(rt722->mbq_regmap, false); in rt722_sdca_io_init()
1554 regcache_mark_dirty(rt722->mbq_regmap); in rt722_sdca_io_init()
1556 rt722->first_hw_init = true; in rt722_sdca_io_init()
1559 rt722->hw_init = true; in rt722_sdca_io_init()
1561 pm_runtime_mark_last_busy(&slave->dev); in rt722_sdca_io_init()
1562 pm_runtime_put_autosuspend(&slave->dev); in rt722_sdca_io_init()
1564 dev_dbg(&slave->dev, "%s hw_init complete\n", __func__); in rt722_sdca_io_init()