Lines Matching refs:rt711

3 // rt711.c -- rt711 ALSA SoC audio driver
29 #include "rt711.h"
84 static int rt711_calibration(struct rt711_priv *rt711)
88 struct regmap *regmap = rt711->regmap;
91 mutex_lock(&rt711->calibrate_mutex);
92 regmap_write(rt711->regmap,
128 regmap_write(rt711->regmap,
130 mutex_unlock(&rt711->calibrate_mutex);
136 static unsigned int rt711_button_detect(struct rt711_priv *rt711)
141 ret = rt711_index_read(rt711->regmap, RT711_VENDOR_REG,
145 ret = rt711_index_read(rt711->regmap, RT711_VENDOR_REG,
183 static int rt711_headset_detect(struct rt711_priv *rt711)
189 ret = rt711_index_read(rt711->regmap, RT711_VENDOR_REG,
199 ret = rt711_index_read(rt711->regmap, RT711_VENDOR_REG,
205 ret = regmap_read(rt711->regmap, reg, &jack_status);
216 rt711->jack_type = SND_JACK_HEADPHONE;
219 rt711->jack_type = SND_JACK_HEADSET;
237 struct rt711_priv *rt711 =
242 if (!rt711->hs_jack)
245 if (!rt711->component->card->instantiated)
249 ret = regmap_read(rt711->regmap, reg, &jack_status);
256 if (rt711->jack_type == 0) {
257 ret = rt711_headset_detect(rt711);
260 if (rt711->jack_type == SND_JACK_HEADSET)
261 btn_type = rt711_button_detect(rt711);
262 } else if (rt711->jack_type == SND_JACK_HEADSET) {
264 btn_type = rt711_button_detect(rt711);
268 rt711->jack_type = 0;
271 dev_dbg(&rt711->slave->dev,
272 "in %s, jack_type=0x%x\n", __func__, rt711->jack_type);
273 dev_dbg(&rt711->slave->dev,
276 snd_soc_jack_report(rt711->hs_jack, rt711->jack_type | btn_type,
283 snd_soc_jack_report(rt711->hs_jack, rt711->jack_type,
289 &rt711->jack_btn_check_work, msecs_to_jiffies(200));
300 struct rt711_priv *rt711 = container_of(work, struct rt711_priv,
306 ret = regmap_read(rt711->regmap, reg, &jack_status);
312 if (rt711->jack_type == SND_JACK_HEADSET) {
314 btn_type = rt711_button_detect(rt711);
317 rt711->jack_type = 0;
321 ret = rt711_index_read(rt711->regmap, RT711_VENDOR_REG,
329 dev_dbg(&rt711->slave->dev,
331 snd_soc_jack_report(rt711->hs_jack, rt711->jack_type | btn_type,
338 snd_soc_jack_report(rt711->hs_jack, rt711->jack_type,
344 &rt711->jack_btn_check_work, msecs_to_jiffies(200));
353 static void rt711_jack_init(struct rt711_priv *rt711)
356 snd_soc_component_get_dapm(rt711->component);
358 mutex_lock(&rt711->calibrate_mutex);
361 regmap_write(rt711->regmap,
364 if (rt711->hs_jack) {
366 regmap_write(rt711->regmap,
368 regmap_write(rt711->regmap,
370 regmap_write(rt711->regmap,
372 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
374 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
377 switch (rt711->jd_src) {
382 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
387 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
393 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
398 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
404 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
407 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
412 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
417 rt711_index_update_bits(rt711->regmap, RT711_VENDOR_REG,
423 dev_warn(rt711->component->dev, "Wrong JD source\n");
427 dev_dbg(&rt711->slave->dev, "in %s enable\n", __func__);
430 &rt711->jack_detect_work, msecs_to_jiffies(250));
432 regmap_write(rt711->regmap,
434 regmap_write(rt711->regmap,
436 regmap_write(rt711->regmap,
439 dev_dbg(&rt711->slave->dev, "in %s disable\n", __func__);
444 regmap_write(rt711->regmap,
446 mutex_unlock(&rt711->calibrate_mutex);
452 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
454 rt711->hs_jack = hs_jack;
456 if (!rt711->hw_init) {
457 dev_dbg(&rt711->slave->dev,
462 rt711_jack_init(rt711);
467 static void rt711_get_gain(struct rt711_priv *rt711, unsigned int addr_h,
473 regmap_read(rt711->regmap, addr_l, r_val);
478 regmap_read(rt711->regmap, addr_h, l_val);
490 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
495 mutex_lock(&rt711->calibrate_mutex);
505 rt711_get_gain(rt711, addr_h, addr_l, val_h, &read_rl, &read_ll);
526 regmap_write(rt711->regmap,
552 regmap_write(rt711->regmap,
554 regmap_write(rt711->regmap,
559 regmap_write(rt711->regmap,
564 regmap_write(rt711->regmap,
573 rt711_get_gain(rt711, addr_h, addr_l, val_h,
580 regmap_write(rt711->regmap,
583 mutex_unlock(&rt711->calibrate_mutex);
591 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
605 rt711_get_gain(rt711, addr_h, addr_l, val_h, &read_rl, &read_ll);
666 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
679 ret = regmap_read(rt711->regmap, reg, &val);
698 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
718 ret = regmap_read(rt711->regmap, reg, &val2);
732 regmap_write(rt711->regmap, reg, val);
767 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
773 regmap_write(rt711->regmap,
777 regmap_write(rt711->regmap,
782 regmap_write(rt711->regmap,
786 regmap_write(rt711->regmap,
798 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
802 regmap_write(rt711->regmap,
806 regmap_write(rt711->regmap,
818 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
822 regmap_write(rt711->regmap,
826 regmap_write(rt711->regmap,
884 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
889 regmap_write(rt711->regmap,
896 mutex_lock(&rt711->calibrate_mutex);
897 regmap_write(rt711->regmap,
900 mutex_unlock(&rt711->calibrate_mutex);
910 static int rt711_parse_dt(struct rt711_priv *rt711, struct device *dev)
913 &rt711->jd_src);
920 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
922 rt711_parse_dt(rt711, &rt711->slave->dev);
923 rt711->component = component;
930 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
932 regcache_cache_only(rt711->regmap, true);
986 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
1000 if (!rt711->slave)
1026 retval = sdw_stream_add_slave(rt711->slave, &stream_config,
1063 regmap_write(rt711->regmap, RT711_DAC_FORMAT_H, val);
1064 regmap_write(rt711->regmap, RT711_ADC1_FORMAT_H, val);
1065 regmap_write(rt711->regmap, RT711_ADC2_FORMAT_H, val);
1074 struct rt711_priv *rt711 = snd_soc_component_get_drvdata(component);
1078 if (!rt711->slave)
1081 sdw_stream_remove_slave(rt711->slave, stream->sdw_stream);
1098 .name = "rt711-aif1",
1117 .name = "rt711-aif2",
1140 struct rt711_priv *rt711 = dev_get_drvdata(dev);
1143 clk_freq = (rt711->params.curr_dr_freq >> 1);
1168 regmap_write(rt711->regmap, 0xe0, value);
1169 regmap_write(rt711->regmap, 0xf0, value);
1178 struct rt711_priv *rt711 =
1181 rt711_calibration(rt711);
1187 struct rt711_priv *rt711;
1190 rt711 = devm_kzalloc(dev, sizeof(*rt711), GFP_KERNEL);
1191 if (!rt711)
1194 dev_set_drvdata(dev, rt711);
1195 rt711->slave = slave;
1196 rt711->sdw_regmap = sdw_regmap;
1197 rt711->regmap = regmap;
1203 rt711->hw_init = false;
1204 rt711->first_hw_init = false;
1207 rt711->jd_src = RT711_JD2;
1221 struct rt711_priv *rt711 = dev_get_drvdata(dev);
1223 if (rt711->hw_init)
1226 if (rt711->first_hw_init) {
1227 regcache_cache_only(rt711->regmap, false);
1228 regcache_cache_bypass(rt711->regmap, true);
1234 if (!rt711->first_hw_init) {
1250 rt711_reset(rt711->regmap);
1253 regmap_write(rt711->regmap, RT711_SET_AUDIO_POWER_STATE, AC_PWRST_D0);
1256 regmap_write(rt711->regmap, RT711_SET_PIN_MIC2, 0x25);
1257 regmap_write(rt711->regmap, RT711_SET_PIN_HP, 0xc0);
1258 regmap_write(rt711->regmap, RT711_SET_PIN_DMIC1, 0x20);
1259 regmap_write(rt711->regmap, RT711_SET_PIN_DMIC2, 0x20);
1260 regmap_write(rt711->regmap, RT711_SET_PIN_LINE1, 0x20);
1261 regmap_write(rt711->regmap, RT711_SET_PIN_LINE2, 0x20);
1264 regmap_write(rt711->regmap, RT711_SET_GAIN_HP_H, 0xa080);
1265 regmap_write(rt711->regmap, RT711_SET_GAIN_HP_H, 0x9080);
1266 regmap_write(rt711->regmap, RT711_SET_GAIN_ADC2_H, 0x6080);
1267 regmap_write(rt711->regmap, RT711_SET_GAIN_ADC2_H, 0x5080);
1268 regmap_write(rt711->regmap, RT711_SET_GAIN_ADC1_H, 0x6080);
1269 regmap_write(rt711->regmap, RT711_SET_GAIN_ADC1_H, 0x5080);
1272 regmap_write(rt711->regmap, 0x4f12, 0x91);
1273 regmap_write(rt711->regmap, 0x4e12, 0xd6);
1274 regmap_write(rt711->regmap, 0x4d12, 0x11);
1275 regmap_write(rt711->regmap, 0x4c12, 0x20);
1276 regmap_write(rt711->regmap, 0x4f13, 0x91);
1277 regmap_write(rt711->regmap, 0x4e13, 0xd6);
1278 regmap_write(rt711->regmap, 0x4d13, 0x11);
1279 regmap_write(rt711->regmap, 0x4c13, 0x21);
1280 regmap_write(rt711->regmap, 0x4c21, 0xf0);
1281 regmap_write(rt711->regmap, 0x4d21, 0x11);
1282 regmap_write(rt711->regmap, 0x4e21, 0x11);
1283 regmap_write(rt711->regmap, 0x4f21, 0x01);
1286 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
1290 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
1292 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
1294 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
1296 rt711_index_write(rt711->regmap, RT711_VENDOR_REG,
1300 regmap_write(rt711->regmap, RT711_SET_AUDIO_POWER_STATE, AC_PWRST_D3);
1302 if (rt711->first_hw_init)
1303 rt711_calibration(rt711);
1305 INIT_DELAYED_WORK(&rt711->jack_detect_work,
1307 INIT_DELAYED_WORK(&rt711->jack_btn_check_work,
1309 mutex_init(&rt711->calibrate_mutex);
1310 INIT_WORK(&rt711->calibration_work, rt711_calibration_work);
1311 schedule_work(&rt711->calibration_work);
1318 if (rt711->hs_jack)
1319 rt711_jack_init(rt711);
1321 if (rt711->first_hw_init) {
1322 regcache_cache_bypass(rt711->regmap, false);
1323 regcache_mark_dirty(rt711->regmap);
1325 rt711->first_hw_init = true;
1328 rt711->hw_init = true;