Lines Matching refs:rt711

3 // rt711.c -- rt711 ALSA SoC audio driver
30 #include "rt711.h"
85 static int rt711_calibration(struct rt711_priv *rt711)
89 struct regmap *regmap = rt711->regmap;
92 mutex_lock(&rt711->calibrate_mutex);
93 regmap_write(rt711->regmap,
129 regmap_write(rt711->regmap,
131 mutex_unlock(&rt711->calibrate_mutex);
137 static unsigned int rt711_button_detect(struct rt711_priv *rt711)
142 ret = rt711_index_read(rt711->regmap, RT711_VENDOR_REG,
146 ret = rt711_index_read(rt711->regmap, RT711_VENDOR_REG,
184 static int rt711_headset_detect(struct rt711_priv *rt711)
190 ret = rt711_index_read(rt711->regmap, RT711_VENDOR_REG,
200 ret = rt711_index_read(rt711->regmap, RT711_VENDOR_REG,
206 ret = regmap_read(rt711->regmap, reg, &jack_status);
217 rt711->jack_type = SND_JACK_HEADPHONE;
220 rt711->jack_type = SND_JACK_HEADSET;
238 struct rt711_priv *rt711 =
243 if (!rt711->hs_jack)
246 if (!snd_soc_card_is_instantiated(rt711->component->card))
249 if (pm_runtime_status_suspended(rt711->slave->dev.parent)) {
250 dev_dbg(&rt711->slave->dev,
257 ret = regmap_read(rt711->regmap, reg, &jack_status);
264 if (rt711->jack_type == 0) {
265 ret = rt711_headset_detect(rt711);
268 if (rt711->jack_type == SND_JACK_HEADSET)
269 btn_type = rt711_button_detect(rt711);
270 } else if (rt711->jack_type == SND_JACK_HEADSET) {
272 btn_type = rt711_button_detect(rt711);
276 rt711->jack_type = 0;
279 dev_dbg(&rt711->slave->dev,
280 "in %s, jack_type=0x%x\n", __func__, rt711->jack_type);
281 dev_dbg(&rt711->slave->dev,
284 snd_soc_jack_report(rt711->hs_jack, rt711->jack_type | btn_type,
291 snd_soc_jack_report(rt711->hs_jack, rt711->jack_type,
297 &rt711->jack_btn_check_work, msecs_to_jiffies(200));
308 struct rt711_priv *rt711 = container_of(work, struct rt711_priv,
314 ret = regmap_read(rt711->regmap, reg, &jack_status);
320 if (rt711->jack_type == SND_JACK_HEADSET) {
322 btn_type = rt711_button_detect(rt711);
325 rt711->jack_type = 0;
329 ret = rt711_index_read(rt711->regmap, RT711_VENDOR_REG,
337 dev_dbg(&rt711->slave->dev,
339 snd_soc_jack_report(rt711->hs_jack, rt711->jack_type | btn_type,
346 snd_soc_jack_report(rt711->hs_jack, rt711->jack_type,
352 &rt711->jack_btn_check_work, msecs_to_jiffies(200));
361 static void rt711_jack_init(struct rt711_priv *rt711)
364 snd_soc_component_get_dapm(rt711->component);
366 mutex_lock(&rt711->calibrate_mutex);
369 regmap_write(rt711->regmap,
372 if (rt711->hs_jack) {
374 regmap_write(rt711->regmap,
376 regmap_write(rt711->regmap,
378 regmap_write(rt711->regmap,
380 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
382 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
385 switch (rt711->jd_src) {
390 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
395 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
401 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
406 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
412 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
415 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
420 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
425 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
431 dev_warn(rt711->component->dev, "%s: Wrong JD source\n", __func__);
435 dev_dbg(&rt711->slave->dev, "in %s enable\n", __func__);
438 &rt711->jack_detect_work, msecs_to_jiffies(250));
440 regmap_write(rt711->regmap,
442 regmap_write(rt711->regmap,
444 regmap_write(rt711->regmap,
447 dev_dbg(&rt711->slave->dev, "in %s disable\n", __func__);
452 regmap_write(rt711->regmap,
454 mutex_unlock(&rt711->calibrate_mutex);
460 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
463 rt711->hs_jack = hs_jack;
466 if (!rt711->first_hw_init)
481 rt711_jack_init(rt711);
489 static void rt711_get_gain(struct rt711_priv *rt711, unsigned int addr_h,
495 regmap_read(rt711->regmap, addr_l, r_val);
500 regmap_read(rt711->regmap, addr_h, l_val);
512 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
517 mutex_lock(&rt711->calibrate_mutex);
527 rt711_get_gain(rt711, addr_h, addr_l, val_h, &read_rl, &read_ll);
548 regmap_write(rt711->regmap,
574 regmap_write(rt711->regmap,
576 regmap_write(rt711->regmap,
581 regmap_write(rt711->regmap,
586 regmap_write(rt711->regmap,
595 rt711_get_gain(rt711, addr_h, addr_l, val_h,
602 regmap_write(rt711->regmap,
605 mutex_unlock(&rt711->calibrate_mutex);
613 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
627 rt711_get_gain(rt711, addr_h, addr_l, val_h, &read_rl, &read_ll);
688 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
701 ret = regmap_read(rt711->regmap, reg, &val);
720 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
740 ret = regmap_read(rt711->regmap, reg, &val2);
754 regmap_write(rt711->regmap, reg, val);
789 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
795 regmap_write(rt711->regmap,
799 regmap_write(rt711->regmap,
804 regmap_write(rt711->regmap,
808 regmap_write(rt711->regmap,
820 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
824 regmap_write(rt711->regmap,
828 regmap_write(rt711->regmap,
840 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
844 regmap_write(rt711->regmap,
848 regmap_write(rt711->regmap,
906 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
911 regmap_write(rt711->regmap,
918 mutex_lock(&rt711->calibrate_mutex);
919 regmap_write(rt711->regmap,
922 mutex_unlock(&rt711->calibrate_mutex);
932 static int rt711_parse_dt(struct rt711_priv *rt711, struct device *dev)
935 &rt711->jd_src);
942 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
945 rt711_parse_dt(rt711, &rt711->slave->dev);
946 rt711->component = component;
948 if (!rt711->first_hw_init)
990 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
1003 if (!rt711->slave)
1020 retval = sdw_stream_add_slave(rt711->slave, &stream_config,
1057 regmap_write(rt711->regmap, RT711_DAC_FORMAT_H, val);
1058 regmap_write(rt711->regmap, RT711_ADC1_FORMAT_H, val);
1059 regmap_write(rt711->regmap, RT711_ADC2_FORMAT_H, val);
1068 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
1072 if (!rt711->slave)
1075 sdw_stream_remove_slave(rt711->slave, sdw_stream);
1092 .name = "rt711-aif1",
1111 .name = "rt711-aif2",
1134 struct rt711_priv *rt711 = dev_get_drvdata(dev);
1137 clk_freq = (rt711->params.curr_dr_freq >> 1);
1162 regmap_write(rt711->regmap, 0xe0, value);
1163 regmap_write(rt711->regmap, 0xf0, value);
1172 struct rt711_priv *rt711 =
1175 rt711_calibration(rt711);
1181 struct rt711_priv *rt711;
1184 rt711 = devm_kzalloc(dev, sizeof(*rt711), GFP_KERNEL);
1185 if (!rt711)
1188 dev_set_drvdata(dev, rt711);
1189 rt711->slave = slave;
1190 rt711->sdw_regmap = sdw_regmap;
1191 rt711->regmap = regmap;
1193 regcache_cache_only(rt711->regmap, true);
1195 mutex_init(&rt711->calibrate_mutex);
1196 mutex_init(&rt711->disable_irq_lock);
1198 INIT_DELAYED_WORK(&rt711->jack_detect_work, rt711_jack_detect_handler);
1199 INIT_DELAYED_WORK(&rt711->jack_btn_check_work, rt711_btn_check_handler);
1200 INIT_WORK(&rt711->calibration_work, rt711_calibration_work);
1206 rt711->hw_init = false;
1207 rt711->first_hw_init = false;
1210 rt711->jd_src = RT711_JD2;
1241 struct rt711_priv *rt711 = dev_get_drvdata(dev);
1243 rt711->disable_irq = false;
1245 if (rt711->hw_init)
1248 regcache_cache_only(rt711->regmap, false);
1249 if (rt711->first_hw_init)
1250 regcache_cache_bypass(rt711->regmap, true);
1255 if (!rt711->first_hw_init)
1261 rt711_reset(rt711->regmap);
1264 regmap_write(rt711->regmap, RT711_SET_AUDIO_POWER_STATE, AC_PWRST_D0);
1267 regmap_write(rt711->regmap, RT711_SET_PIN_MIC2, 0x25);
1268 regmap_write(rt711->regmap, RT711_SET_PIN_HP, 0xc0);
1269 regmap_write(rt711->regmap, RT711_SET_PIN_DMIC1, 0x20);
1270 regmap_write(rt711->regmap, RT711_SET_PIN_DMIC2, 0x20);
1271 regmap_write(rt711->regmap, RT711_SET_PIN_LINE1, 0x20);
1272 regmap_write(rt711->regmap, RT711_SET_PIN_LINE2, 0x20);
1275 regmap_write(rt711->regmap, RT711_SET_GAIN_HP_H, 0xa080);
1276 regmap_write(rt711->regmap, RT711_SET_GAIN_HP_H, 0x9080);
1277 regmap_write(rt711->regmap, RT711_SET_GAIN_ADC2_H, 0x6080);
1278 regmap_write(rt711->regmap, RT711_SET_GAIN_ADC2_H, 0x5080);
1279 regmap_write(rt711->regmap, RT711_SET_GAIN_ADC1_H, 0x6080);
1280 regmap_write(rt711->regmap, RT711_SET_GAIN_ADC1_H, 0x5080);
1283 regmap_write(rt711->regmap, 0x4f12, 0x91);
1284 regmap_write(rt711->regmap, 0x4e12, 0xd6);
1285 regmap_write(rt711->regmap, 0x4d12, 0x11);
1286 regmap_write(rt711->regmap, 0x4c12, 0x20);
1287 regmap_write(rt711->regmap, 0x4f13, 0x91);
1288 regmap_write(rt711->regmap, 0x4e13, 0xd6);
1289 regmap_write(rt711->regmap, 0x4d13, 0x11);
1290 regmap_write(rt711->regmap, 0x4c13, 0x21);
1291 regmap_write(rt711->regmap, 0x4c21, 0xf0);
1292 regmap_write(rt711->regmap, 0x4d21, 0x11);
1293 regmap_write(rt711->regmap, 0x4e21, 0x11);
1294 regmap_write(rt711->regmap, 0x4f21, 0x01);
1297 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
1301 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
1303 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
1305 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
1307 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
1311 regmap_write(rt711->regmap, RT711_SET_AUDIO_POWER_STATE, AC_PWRST_D3);
1313 if (rt711->first_hw_init)
1314 rt711_calibration(rt711);
1316 schedule_work(&rt711->calibration_work);
1322 if (rt711->hs_jack)
1323 rt711_jack_init(rt711);
1325 if (rt711->first_hw_init) {
1326 regcache_cache_bypass(rt711->regmap, false);
1327 regcache_mark_dirty(rt711->regmap);
1329 rt711->first_hw_init = true;
1332 rt711->hw_init = true;