Lines Matching refs:rt766

36 	struct rt766_sdca_priv *rt766 = interrupt->priv;  in rt766_sdca_btn_detect()  local
42 ret = regmap_read(rt766->regmap, in rt766_sdca_btn_detect()
49 ret = regmap_read(rt766->regmap, in rt766_sdca_btn_detect()
61 ret = regmap_read(rt766->regmap, in rt766_sdca_btn_detect()
68 ret = regmap_read(rt766->regmap, in rt766_sdca_btn_detect()
74 buf = devm_kzalloc(&rt766->slave->dev, length, GFP_KERNEL); in rt766_sdca_btn_detect()
76 dev_err(&rt766->slave->dev, "%s: alloc buf failed\n", __func__); in rt766_sdca_btn_detect()
81 ret = regmap_read(rt766->regmap, in rt766_sdca_btn_detect()
88 if (rt766->hid) in rt766_sdca_btn_detect()
89 hid_input_report(rt766->hid, HID_INPUT_REPORT, in rt766_sdca_btn_detect()
95 devm_kfree(&rt766->slave->dev, buf); in rt766_sdca_btn_detect()
99 regmap_write(rt766->regmap, in rt766_sdca_btn_detect()
113 struct rt766_sdca_priv *rt766 = interrupt->priv; in rt766_sdca_irq_btn_handler() local
115 if (!rt766->hs_jack) in rt766_sdca_irq_btn_handler()
118 if (!rt766->component->card || !rt766->component->card->instantiated) in rt766_sdca_irq_btn_handler()
121 mutex_lock(&rt766->disable_irq_lock); in rt766_sdca_irq_btn_handler()
122 if (!rt766->disable_irq) in rt766_sdca_irq_btn_handler()
124 mutex_unlock(&rt766->disable_irq_lock); in rt766_sdca_irq_btn_handler()
128 static int rt766_sdca_headset_detect(struct rt766_sdca_priv *rt766) in rt766_sdca_headset_detect() argument
134 ret = regmap_read(rt766->regmap, in rt766_sdca_headset_detect()
142 rt766->jack_type = 0; in rt766_sdca_headset_detect()
145 rt766->jack_type = SND_JACK_HEADPHONE; in rt766_sdca_headset_detect()
148 rt766->jack_type = SND_JACK_HEADSET; in rt766_sdca_headset_detect()
154 ret = regmap_write(rt766->regmap, in rt766_sdca_headset_detect()
161 dev_dbg(&rt766->slave->dev, in rt766_sdca_headset_detect()
174 struct rt766_sdca_priv *rt766 = interrupt->priv; in rt766_sdca_irq_jd_handler() local
176 if (!rt766->hs_jack) in rt766_sdca_irq_jd_handler()
179 if (!rt766->component->card || !rt766->component->card->instantiated) in rt766_sdca_irq_jd_handler()
182 mutex_lock(&rt766->disable_irq_lock); in rt766_sdca_irq_jd_handler()
183 if (!rt766->disable_irq) in rt766_sdca_irq_jd_handler()
184 rt766_sdca_headset_detect(rt766); in rt766_sdca_irq_jd_handler()
185 mutex_unlock(&rt766->disable_irq_lock); in rt766_sdca_irq_jd_handler()
187 dev_dbg(&rt766->slave->dev, in rt766_sdca_irq_jd_handler()
188 "in %s, jack_type=%d\n", __func__, rt766->jack_type); in rt766_sdca_irq_jd_handler()
190 snd_soc_jack_report(rt766->hs_jack, rt766->jack_type, SND_JACK_HEADSET); in rt766_sdca_irq_jd_handler()
196 struct rt766_sdca_priv *rt766 = interrupt->priv; in rt766_sdca_destroy_hid_device() local
198 hid_destroy_device(rt766->hid); in rt766_sdca_destroy_hid_device()
201 static int rt766_sdca_irq_ctl(struct rt766_sdca_priv *rt766, in rt766_sdca_irq_ctl() argument
207 struct device *dev = &rt766->slave->dev; in rt766_sdca_irq_ctl()
235 ret = sdca_irq_data_populate(dev, rt766->regmap, component, in rt766_sdca_irq_ctl()
247 rt766->hid = interrupt->priv; in rt766_sdca_irq_ctl()
250 interrupt->priv = rt766; in rt766_sdca_irq_ctl()
273 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_set_jack_detect() local
276 if (!rt766->uaj_func_data) { in rt766_sdca_set_jack_detect()
277 dev_err(&rt766->slave->dev, "The SDCA UAJ function is not supported.\n"); in rt766_sdca_set_jack_detect()
281 rt766->hs_jack = hs_jack; in rt766_sdca_set_jack_detect()
283 if (!rt766->first_hw_init) in rt766_sdca_set_jack_detect()
299 if (!rt766->hs_jack) { in rt766_sdca_set_jack_detect()
300 if (rt766->uaj_func_data) in rt766_sdca_set_jack_detect()
301 rt766_sdca_irq_ctl(rt766, rt766->uaj_func_data, in rt766_sdca_set_jack_detect()
302 rt766->component, rt766->irq_info, false); in rt766_sdca_set_jack_detect()
304 if (rt766->hid_func_data) in rt766_sdca_set_jack_detect()
305 rt766_sdca_irq_ctl(rt766, rt766->hid_func_data, in rt766_sdca_set_jack_detect()
306 rt766->component, rt766->irq_info, false); in rt766_sdca_set_jack_detect()
314 static int rt766_sdca_set_fu_ctl(struct rt766_sdca_priv *rt766, int func_num, int fu_num) in rt766_sdca_set_fu_ctl() argument
324 ch_01 = (rt766->fu41_dapm_mute || rt766->fu41_mixer_l_mute) ? 0x01 : 0x00; in rt766_sdca_set_fu_ctl()
325 ch_02 = (rt766->fu41_dapm_mute || rt766->fu41_mixer_r_mute) ? 0x01 : 0x00; in rt766_sdca_set_fu_ctl()
328 ch_01 = (rt766->fu36_dapm_mute || rt766->fu36_mixer_l_mute) ? 0x01 : 0x00; in rt766_sdca_set_fu_ctl()
329 ch_02 = (rt766->fu36_dapm_mute || rt766->fu36_mixer_r_mute) ? 0x01 : 0x00; in rt766_sdca_set_fu_ctl()
332 ch_01 = (rt766->fu21_dapm_mute || rt766->fu21_mixer_l_mute) ? 0x01 : 0x00; in rt766_sdca_set_fu_ctl()
333 ch_02 = (rt766->fu21_dapm_mute || rt766->fu21_mixer_r_mute) ? 0x01 : 0x00; in rt766_sdca_set_fu_ctl()
336 for (i = 0; i < ARRAY_SIZE(rt766->fu113_mixer_mute); i++) { in rt766_sdca_set_fu_ctl()
337 ch_mute = (rt766->fu113_dapm_mute || rt766->fu113_mixer_mute[i]) ? 0x01 : 0x00; in rt766_sdca_set_fu_ctl()
339 err = regmap_write(rt766->regmap, fu_reg, ch_mute); in rt766_sdca_set_fu_ctl()
348 err = regmap_write(rt766->regmap, fu01_reg, ch_01); in rt766_sdca_set_fu_ctl()
351 err = regmap_write(rt766->regmap, fu02_reg, ch_02); in rt766_sdca_set_fu_ctl()
362 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_fu41_playback_get() local
364 ucontrol->value.integer.value[0] = !rt766->fu41_mixer_l_mute; in rt766_sdca_fu41_playback_get()
365 ucontrol->value.integer.value[1] = !rt766->fu41_mixer_r_mute; in rt766_sdca_fu41_playback_get()
373 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_fu41_playback_put() local
376 if (rt766->fu41_mixer_l_mute == !ucontrol->value.integer.value[0] && in rt766_sdca_fu41_playback_put()
377 rt766->fu41_mixer_r_mute == !ucontrol->value.integer.value[1]) in rt766_sdca_fu41_playback_put()
380 rt766->fu41_mixer_l_mute = !ucontrol->value.integer.value[0]; in rt766_sdca_fu41_playback_put()
381 rt766->fu41_mixer_r_mute = !ucontrol->value.integer.value[1]; in rt766_sdca_fu41_playback_put()
383 err = rt766_sdca_set_fu_ctl(rt766, RT766_FUNC_NUM_UAJ, RT766_SDCA_ENT_USER_FU41); in rt766_sdca_fu41_playback_put()
394 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_fu36_capture_get() local
396 ucontrol->value.integer.value[0] = !rt766->fu36_mixer_l_mute; in rt766_sdca_fu36_capture_get()
397 ucontrol->value.integer.value[1] = !rt766->fu36_mixer_r_mute; in rt766_sdca_fu36_capture_get()
405 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_fu36_capture_put() local
408 if (rt766->fu36_mixer_l_mute == !ucontrol->value.integer.value[0] && in rt766_sdca_fu36_capture_put()
409 rt766->fu36_mixer_r_mute == !ucontrol->value.integer.value[1]) in rt766_sdca_fu36_capture_put()
412 rt766->fu36_mixer_l_mute = !ucontrol->value.integer.value[0]; in rt766_sdca_fu36_capture_put()
413 rt766->fu36_mixer_r_mute = !ucontrol->value.integer.value[1]; in rt766_sdca_fu36_capture_put()
414 err = rt766_sdca_set_fu_ctl(rt766, RT766_FUNC_NUM_UAJ, RT766_SDCA_ENT_USER_FU36); in rt766_sdca_fu36_capture_put()
425 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_fu21_playback_get() local
427 ucontrol->value.integer.value[0] = !rt766->fu21_mixer_l_mute; in rt766_sdca_fu21_playback_get()
428 ucontrol->value.integer.value[1] = !rt766->fu21_mixer_r_mute; in rt766_sdca_fu21_playback_get()
436 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_fu21_playback_put() local
439 if (rt766->fu21_mixer_l_mute == !ucontrol->value.integer.value[0] && in rt766_sdca_fu21_playback_put()
440 rt766->fu21_mixer_r_mute == !ucontrol->value.integer.value[1]) in rt766_sdca_fu21_playback_put()
443 rt766->fu21_mixer_l_mute = !ucontrol->value.integer.value[0]; in rt766_sdca_fu21_playback_put()
444 rt766->fu21_mixer_r_mute = !ucontrol->value.integer.value[1]; in rt766_sdca_fu21_playback_put()
446 err = rt766_sdca_set_fu_ctl(rt766, RT766_FUNC_NUM_AMP, RT766_SDCA_ENT_USER_FU21); in rt766_sdca_fu21_playback_put()
458 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_fu113_event() local
462 rt766->fu113_dapm_mute = false; in rt766_sdca_fu113_event()
463 rt766_sdca_set_fu_ctl(rt766, RT766_FUNC_NUM_MIC, RT766_SDCA_ENT_USER_FU113); in rt766_sdca_fu113_event()
466 rt766->fu113_dapm_mute = true; in rt766_sdca_fu113_event()
467 rt766_sdca_set_fu_ctl(rt766, RT766_FUNC_NUM_MIC, RT766_SDCA_ENT_USER_FU113); in rt766_sdca_fu113_event()
477 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_dmic_set_gain_get() local
485 regmap_read(rt766->regmap, p->reg_base + i, &regvalue); in rt766_sdca_dmic_set_gain_get()
500 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_dmic_set_gain_put() local
509 regmap_read(rt766->regmap, p->reg_base + i, &regvalue[i]); in rt766_sdca_dmic_set_gain_put()
526 err = regmap_write(rt766->regmap, p->reg_base + i, gain_val[i]); in rt766_sdca_dmic_set_gain_put()
528 dev_err(&rt766->slave->dev, "0x%08x can't be set\n", p->reg_base + i); in rt766_sdca_dmic_set_gain_put()
538 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_dmic_fu113_capture_get() local
542 ucontrol->value.integer.value[i] = !rt766->fu113_mixer_mute[i]; in rt766_sdca_dmic_fu113_capture_get()
550 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_dmic_fu113_capture_put() local
554 if (rt766->fu113_mixer_mute[i] != !ucontrol->value.integer.value[i]) in rt766_sdca_dmic_fu113_capture_put()
556 rt766->fu113_mixer_mute[i] = !ucontrol->value.integer.value[i]; in rt766_sdca_dmic_fu113_capture_put()
559 err = rt766_sdca_set_fu_ctl(rt766, RT766_FUNC_NUM_MIC, RT766_SDCA_ENT_USER_FU113); in rt766_sdca_dmic_fu113_capture_put()
570 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_fu41_event() local
574 rt766->fu41_dapm_mute = false; in rt766_sdca_fu41_event()
575 rt766_sdca_set_fu_ctl(rt766, RT766_FUNC_NUM_UAJ, RT766_SDCA_ENT_USER_FU41); in rt766_sdca_fu41_event()
578 rt766->fu41_dapm_mute = true; in rt766_sdca_fu41_event()
579 rt766_sdca_set_fu_ctl(rt766, RT766_FUNC_NUM_UAJ, RT766_SDCA_ENT_USER_FU41); in rt766_sdca_fu41_event()
589 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_pde_event() local
601 func_data = rt766->uaj_func_data; in rt766_sdca_pde_event()
604 func_data = rt766->sa_func_data; in rt766_sdca_pde_event()
607 func_data = rt766->sm_func_data; in rt766_sdca_pde_event()
617 regmap_write(rt766->regmap, pde_req_reg, ps0); in rt766_sdca_pde_event()
622 regmap_write(rt766->regmap, pde_req_reg, ps3); in rt766_sdca_pde_event()
635 ret = sdca_asoc_pde_poll_actual_ps(rt766->regmap, in rt766_sdca_pde_event()
660 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_fu36_event() local
664 rt766->fu36_dapm_mute = false; in rt766_sdca_fu36_event()
665 rt766_sdca_set_fu_ctl(rt766, RT766_FUNC_NUM_UAJ, RT766_SDCA_ENT_USER_FU36); in rt766_sdca_fu36_event()
668 rt766->fu36_dapm_mute = true; in rt766_sdca_fu36_event()
669 rt766_sdca_set_fu_ctl(rt766, RT766_FUNC_NUM_UAJ, RT766_SDCA_ENT_USER_FU36); in rt766_sdca_fu36_event()
687 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_fu21_event() local
691 rt766->fu21_dapm_mute = false; in rt766_sdca_fu21_event()
692 rt766_sdca_set_fu_ctl(rt766, RT766_FUNC_NUM_AMP, RT766_SDCA_ENT_USER_FU21); in rt766_sdca_fu21_event()
695 rt766->fu21_dapm_mute = true; in rt766_sdca_fu21_event()
696 rt766_sdca_set_fu_ctl(rt766, RT766_FUNC_NUM_AMP, RT766_SDCA_ENT_USER_FU21); in rt766_sdca_fu21_event()
861 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_probe() local
862 struct device *dev = &rt766->slave->dev; in rt766_sdca_probe()
865 rt766->component = component; in rt766_sdca_probe()
871 if (rt766->uaj_func_data) { in rt766_sdca_probe()
872 dev_dbg(dev, "%s : irq %d\n", __func__, rt766->slave->irq); in rt766_sdca_probe()
874 rt766->irq_info = devm_sdca_irq_allocate(dev, rt766->regmap, rt766->slave->irq); in rt766_sdca_probe()
875 if (IS_ERR(rt766->irq_info)) in rt766_sdca_probe()
876 return PTR_ERR(rt766->irq_info); in rt766_sdca_probe()
878 ret = rt766_sdca_irq_ctl(rt766, rt766->uaj_func_data, in rt766_sdca_probe()
879 component, rt766->irq_info, true); in rt766_sdca_probe()
885 if (rt766->hid_func_data) { in rt766_sdca_probe()
886 ret = rt766_sdca_irq_ctl(rt766, rt766->hid_func_data, in rt766_sdca_probe()
887 component, rt766->irq_info, true); in rt766_sdca_probe()
900 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_remove() local
902 sdca_irq_cleanup_late(component->dev, rt766->uaj_func_data, rt766->irq_info); in rt766_sdca_remove()
903 sdca_irq_cleanup_late(component->dev, rt766->hid_func_data, rt766->irq_info); in rt766_sdca_remove()
938 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_pcm_hw_params() local
951 if (!rt766->slave) in rt766_sdca_pcm_hw_params()
975 retval = sdw_stream_add_slave(rt766->slave, &stream_config, in rt766_sdca_pcm_hw_params()
1011 regmap_write(rt766->regmap, in rt766_sdca_pcm_hw_params()
1014 regmap_write(rt766->regmap, in rt766_sdca_pcm_hw_params()
1019 regmap_write(rt766->regmap, in rt766_sdca_pcm_hw_params()
1024 regmap_write(rt766->regmap, in rt766_sdca_pcm_hw_params()
1040 struct rt766_sdca_priv *rt766 = snd_soc_component_get_drvdata(component); in rt766_sdca_pcm_hw_free() local
1044 if (!rt766->slave) in rt766_sdca_pcm_hw_free()
1047 sdw_stream_remove_slave(rt766->slave, sdw_stream); in rt766_sdca_pcm_hw_free()
1145 struct rt766_sdca_priv *rt766; in rt766_sdca_init() local
1150 rt766 = devm_kzalloc(dev, sizeof(*rt766), GFP_KERNEL); in rt766_sdca_init()
1151 if (!rt766) in rt766_sdca_init()
1154 dev_set_drvdata(dev, rt766); in rt766_sdca_init()
1155 rt766->slave = slave; in rt766_sdca_init()
1156 rt766->regmap = regmap; in rt766_sdca_init()
1158 regcache_cache_only(rt766->regmap, true); in rt766_sdca_init()
1160 ret = devm_mutex_init(dev, &rt766->disable_irq_lock); in rt766_sdca_init()
1170 rt766->hw_init = false; in rt766_sdca_init()
1171 rt766->first_hw_init = false; in rt766_sdca_init()
1172 rt766->fu41_dapm_mute = true; in rt766_sdca_init()
1173 rt766->fu41_mixer_l_mute = rt766->fu41_mixer_r_mute = false; in rt766_sdca_init()
1174 rt766->fu36_dapm_mute = true; in rt766_sdca_init()
1175 rt766->fu36_mixer_l_mute = rt766->fu36_mixer_r_mute = true; in rt766_sdca_init()
1176 rt766->fu21_dapm_mute = true; in rt766_sdca_init()
1177 rt766->fu21_mixer_l_mute = rt766->fu21_mixer_r_mute = false; in rt766_sdca_init()
1178 rt766->fu113_dapm_mute = true; in rt766_sdca_init()
1179 rt766->fu113_mixer_mute[0] = rt766->fu113_mixer_mute[1] = in rt766_sdca_init()
1180 rt766->fu113_mixer_mute[2] = rt766->fu113_mixer_mute[3] = true; in rt766_sdca_init()
1211 rt766->uaj_func_data = func_data_ptr; in rt766_sdca_init()
1227 rt766->sa_func_data = func_data_ptr; in rt766_sdca_init()
1233 rt766->sm_func_data = func_data_ptr; in rt766_sdca_init()
1239 rt766->hid_func_data = func_data_ptr; in rt766_sdca_init()
1271 static int rt766_func_initialize(struct rt766_sdca_priv *rt766, struct sdca_function_data *func_dat… in rt766_func_initialize() argument
1273 struct device *dev = &rt766->slave->dev; in rt766_func_initialize()
1297 regmap_read(rt766->regmap, func_status_reg, &func_status); in rt766_func_initialize()
1300 if ((func_status & SDCA_CTL_ENTITY_0_FUNCTION_NEEDS_INITIALIZATION) || (!rt766->first_hw_init)) { in rt766_func_initialize()
1301 ret = sdca_regmap_write_init(dev, rt766->regmap, func_data); in rt766_func_initialize()
1307 regmap_write(rt766->regmap, func_status_reg, in rt766_func_initialize()
1320 struct rt766_sdca_priv *rt766 = dev_get_drvdata(dev); in rt766_sdca_io_init() local
1323 rt766->disable_irq = false; in rt766_sdca_io_init()
1325 if (rt766->hw_init) in rt766_sdca_io_init()
1328 regcache_cache_only(rt766->regmap, false); in rt766_sdca_io_init()
1329 if (rt766->first_hw_init) { in rt766_sdca_io_init()
1330 regcache_cache_bypass(rt766->regmap, true); in rt766_sdca_io_init()
1342 regmap_read(rt766->regmap, RT766_BOND_LATCH_ID, &val); in rt766_sdca_io_init()
1346 if (rt766->uaj_func_data) in rt766_sdca_io_init()
1347 rt766_func_initialize(rt766, rt766->uaj_func_data); in rt766_sdca_io_init()
1348 if (rt766->sa_func_data) in rt766_sdca_io_init()
1349 rt766_func_initialize(rt766, rt766->sa_func_data); in rt766_sdca_io_init()
1350 if (rt766->sm_func_data) in rt766_sdca_io_init()
1351 rt766_func_initialize(rt766, rt766->sm_func_data); in rt766_sdca_io_init()
1352 if (rt766->hid_func_data) in rt766_sdca_io_init()
1353 rt766_func_initialize(rt766, rt766->hid_func_data); in rt766_sdca_io_init()
1355 if (rt766->first_hw_init) { in rt766_sdca_io_init()
1356 regcache_cache_bypass(rt766->regmap, false); in rt766_sdca_io_init()
1357 regcache_mark_dirty(rt766->regmap); in rt766_sdca_io_init()
1359 rt766->first_hw_init = true; in rt766_sdca_io_init()
1363 rt766->hw_init = true; in rt766_sdca_io_init()