Lines Matching refs:rt5670
3 * rt5670.c -- RT5670 ALSA SoC audio codec driver
30 #include "rt5670.h"
31 #include "rt5670-dsp.h"
435 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
457 rt5670->jack_type = SND_JACK_HEADSET;
464 rt5670->jack_type = SND_JACK_HEADPHONE;
471 rt5670->jack_type = 0;
476 return rt5670->jack_type;
481 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
483 rt5670->jack_type_saved = rt5670->jack_type;
490 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
492 if (rt5670->jack_type_saved)
515 struct rt5670_priv *rt5670 = (struct rt5670_priv *)data;
516 struct snd_soc_jack_gpio *gpio = &rt5670->hp_gpio;
517 struct snd_soc_jack *jack = rt5670->jack;
520 if (rt5670->jd_mode == 1) /* 2 port */
521 val = snd_soc_component_read(rt5670->component, RT5670_A_JD_CTRL1) & 0x0070;
523 val = snd_soc_component_read(rt5670->component, RT5670_A_JD_CTRL1) & 0x0020;
529 if (rt5670->jack_type == 0) {
530 report = rt5670_headset_detect(rt5670->component, 1);
536 if (snd_soc_component_read(rt5670->component, RT5670_INT_IRQ_ST) & 0x4) {
539 btn_type = rt5670_button_detect(rt5670->component);
551 dev_err(rt5670->component->dev,
558 report = rt5670->jack_type;
566 snd_soc_component_update_bits(rt5670->component, RT5670_INT_IRQ_ST, 0x1, 0x0);
567 rt5670_headset_detect(rt5670->component, 0);
580 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
583 rt5670->jack = jack;
584 rt5670->hp_gpio.gpiod_dev = component->dev;
585 rt5670->hp_gpio.name = "headset";
586 rt5670->hp_gpio.report = SND_JACK_HEADSET |
588 rt5670->hp_gpio.debounce_time = 150;
589 rt5670->hp_gpio.wake = true;
590 rt5670->hp_gpio.data = (struct rt5670_priv *)rt5670;
591 rt5670->hp_gpio.jack_status_check = rt5670_irq_detection;
593 ret = snd_soc_jack_add_gpios(rt5670->jack, 1,
594 &rt5670->hp_gpio);
638 static void rt5670_update_ad_da_mixer_dac1_m_bits(struct rt5670_priv *rt5670)
642 if (rt5670->dac1_mixl_dac1_switch && rt5670->dac1_playback_switch_l)
645 if (rt5670->dac1_mixr_dac1_switch && rt5670->dac1_playback_switch_r)
648 regmap_update_bits(rt5670->regmap, RT5670_AD_DA_MIXER,
656 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
658 ucontrol->value.integer.value[0] = rt5670->dac1_playback_switch_l;
659 ucontrol->value.integer.value[1] = rt5670->dac1_playback_switch_r;
668 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
670 if (rt5670->dac1_playback_switch_l == ucontrol->value.integer.value[0] &&
671 rt5670->dac1_playback_switch_r == ucontrol->value.integer.value[1])
674 rt5670->dac1_playback_switch_l = ucontrol->value.integer.value[0];
675 rt5670->dac1_playback_switch_r = ucontrol->value.integer.value[1];
677 rt5670_update_ad_da_mixer_dac1_m_bits(rt5670);
748 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
751 rate = rt5670->sysclk / rl6231_get_pre_div(rt5670->regmap,
766 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
768 if (rt5670->sysclk_src == RT5670_SCLK_S_PLL1)
830 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
832 if (rt5670->sysclk > rt5670->lrck[RT5670_AIF1] * 384)
970 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
974 rt5670->dac1_mixl_dac1_switch = ucontrol->value.integer.value[0];
976 rt5670->dac1_mixr_dac1_switch = ucontrol->value.integer.value[0];
983 rt5670_update_ad_da_mixer_dac1_m_bits(rt5670);
1442 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
1446 regmap_update_bits(rt5670->regmap, RT5670_CHARGE_PUMP,
1448 regmap_update_bits(rt5670->regmap, RT5670_GEN_CTRL2,
1451 regmap_update_bits(rt5670->regmap, RT5670_PWR_ANLG1,
1456 regmap_write(rt5670->regmap, RT5670_DEPOP_M2, 0x3100);
1457 regmap_write(rt5670->regmap, RT5670_DEPOP_M1, 0x8009);
1458 regmap_write(rt5670->regmap, RT5670_PR_BASE +
1461 regmap_write(rt5670->regmap, RT5670_DEPOP_M1, 0x8019);
1464 regmap_write(rt5670->regmap, RT5670_DEPOP_M1, 0x0004);
1478 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
1483 regmap_write(rt5670->regmap, RT5670_PR_BASE +
1485 regmap_write(rt5670->regmap, RT5670_DEPOP_M3, 0x0772);
1486 regmap_write(rt5670->regmap, RT5670_DEPOP_M1, 0x805d);
1487 regmap_write(rt5670->regmap, RT5670_DEPOP_M1, 0x831d);
1488 regmap_update_bits(rt5670->regmap, RT5670_GEN_CTRL2,
1490 regmap_update_bits(rt5670->regmap, RT5670_HP_VOL,
1493 regmap_write(rt5670->regmap, RT5670_DEPOP_M1, 0x8019);
1498 regmap_write(rt5670->regmap, RT5670_PR_BASE +
1500 regmap_write(rt5670->regmap, RT5670_DEPOP_M3, 0x0772);
1501 regmap_write(rt5670->regmap, RT5670_DEPOP_M1, 0x803d);
1503 regmap_write(rt5670->regmap, RT5670_DEPOP_M1, 0x831d);
1505 regmap_update_bits(rt5670->regmap, RT5670_HP_VOL,
1509 regmap_update_bits(rt5670->regmap,
1511 regmap_write(rt5670->regmap, RT5670_DEPOP_M1, 0x8019);
1512 regmap_write(rt5670->regmap, RT5670_DEPOP_M3, 0x0707);
1513 regmap_write(rt5670->regmap, RT5670_PR_BASE +
1528 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
1530 if (!rt5670->gpio1_is_ext_spk_en)
1535 regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL2,
1540 regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL2,
2370 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
2374 rt5670->lrck[dai->id] = params_rate(params);
2375 pre_div = rl6231_get_clk_info(rt5670->sysclk, rt5670->lrck[dai->id]);
2378 rt5670->lrck[dai->id], dai->id);
2387 rt5670->bclk[dai->id] = rt5670->lrck[dai->id] * (32 << bclk_ms);
2390 rt5670->bclk[dai->id], rt5670->lrck[dai->id]);
2438 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
2443 rt5670->master[dai->id] = 1;
2447 rt5670->master[dai->id] = 0;
2500 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
2519 rt5670->sysclk = freq;
2521 rt5670->sysclk_src = clk_id;
2532 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
2536 if (source == rt5670->pll_src && freq_in == rt5670->pll_in &&
2537 freq_out == rt5670->pll_out)
2543 rt5670->pll_in = 0;
2544 rt5670->pll_out = 0;
2594 rt5670->pll_in = freq_in;
2595 rt5670->pll_out = freq_out;
2596 rt5670->pll_src = source;
2668 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
2698 if (rt5670->jd_mode)
2723 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
2748 rt5670->component = component;
2755 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
2757 regmap_write(rt5670->regmap, RT5670_RESET, 0);
2758 snd_soc_jack_free_gpios(rt5670->jack, 1, &rt5670->hp_gpio);
2764 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
2766 regcache_cache_only(rt5670->regmap, true);
2767 regcache_mark_dirty(rt5670->regmap);
2773 struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
2775 regcache_cache_only(rt5670->regmap, false);
2776 regcache_sync(rt5670->regmap);
2799 .name = "rt5670-aif1",
2819 .name = "rt5670-aif2",
2874 { "rt5670", 0 },
3050 struct rt5670_priv *rt5670;
3054 rt5670 = devm_kzalloc(&i2c->dev,
3057 if (NULL == rt5670)
3060 i2c_set_clientdata(i2c, rt5670);
3070 rt5670->gpio1_is_irq = true;
3074 rt5670->gpio1_is_ext_spk_en = true;
3078 rt5670->in2_diff = true;
3082 rt5670->dmic_en = true;
3086 rt5670->dmic1_data_pin = RT5670_DMIC_DATA_IN2P;
3090 rt5670->dmic1_data_pin = RT5670_DMIC_DATA_GPIO6;
3094 rt5670->dmic1_data_pin = RT5670_DMIC_DATA_GPIO7;
3098 rt5670->dmic2_data_pin = RT5670_DMIC_DATA_IN3N;
3102 rt5670->dmic2_data_pin = RT5670_DMIC_DATA_GPIO8;
3106 rt5670->dmic3_data_pin = RT5670_DMIC_DATA_GPIO5;
3111 rt5670->jd_mode = 1;
3115 rt5670->jd_mode = 2;
3119 rt5670->jd_mode = 3;
3127 rt5670->dac1_playback_switch_l = true;
3128 rt5670->dac1_playback_switch_r = true;
3130 rt5670->dac1_mixl_dac1_switch = true;
3131 rt5670->dac1_mixr_dac1_switch = true;
3133 rt5670->regmap = devm_regmap_init_i2c(i2c, &rt5670_regmap);
3134 if (IS_ERR(rt5670->regmap)) {
3135 ret = PTR_ERR(rt5670->regmap);
3141 regmap_read(rt5670->regmap, RT5670_VENDOR_ID2, &val);
3144 "Device with ID register %#x is not rt5670/72\n", val);
3148 regmap_write(rt5670->regmap, RT5670_RESET, 0);
3149 regmap_update_bits(rt5670->regmap, RT5670_PWR_ANLG1,
3154 regmap_write(rt5670->regmap, RT5670_RESET, 0);
3156 regmap_read(rt5670->regmap, RT5670_VENDOR_ID, &val);
3158 regmap_write(rt5670->regmap, RT5670_GPIO_CTRL3, 0x0980);
3160 regmap_write(rt5670->regmap, RT5670_GPIO_CTRL3, 0x0d00);
3162 ret = regmap_register_patch(rt5670->regmap, init_list,
3167 regmap_update_bits(rt5670->regmap, RT5670_DIG_MISC,
3170 if (rt5670->in2_diff)
3171 regmap_update_bits(rt5670->regmap, RT5670_IN2,
3174 if (rt5670->gpio1_is_irq) {
3176 regmap_write(rt5670->regmap, RT5670_IL_CMD, 0x0000);
3177 regmap_write(rt5670->regmap, RT5670_IL_CMD2, 0x0010);
3178 regmap_write(rt5670->regmap, RT5670_IL_CMD3, 0x0014);
3180 regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL1,
3182 regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL2,
3186 if (rt5670->gpio1_is_ext_spk_en) {
3187 regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL1,
3189 regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL2,
3193 if (rt5670->jd_mode) {
3194 regmap_update_bits(rt5670->regmap, RT5670_GLB_CLK,
3196 rt5670->sysclk = 0;
3197 rt5670->sysclk_src = RT5670_SCLK_S_RCCLK;
3198 regmap_update_bits(rt5670->regmap, RT5670_PWR_ANLG1,
3200 regmap_update_bits(rt5670->regmap, RT5670_PWR_ANLG2,
3202 regmap_update_bits(rt5670->regmap, RT5670_IRQ_CTRL1,
3204 regmap_update_bits(rt5670->regmap, RT5670_JD_CTRL3,
3208 switch (rt5670->jd_mode) {
3210 regmap_update_bits(rt5670->regmap, RT5670_A_JD_CTRL1,
3215 regmap_update_bits(rt5670->regmap, RT5670_A_JD_CTRL1,
3220 regmap_update_bits(rt5670->regmap, RT5670_A_JD_CTRL1,
3229 if (rt5670->dmic_en) {
3230 regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL1,
3234 switch (rt5670->dmic1_data_pin) {
3236 regmap_update_bits(rt5670->regmap, RT5670_DMIC_CTRL1,
3242 regmap_update_bits(rt5670->regmap, RT5670_DMIC_CTRL1,
3245 regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL1,
3251 regmap_update_bits(rt5670->regmap, RT5670_DMIC_CTRL1,
3254 regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL1,
3263 switch (rt5670->dmic2_data_pin) {
3265 regmap_update_bits(rt5670->regmap, RT5670_DMIC_CTRL1,
3271 regmap_update_bits(rt5670->regmap, RT5670_DMIC_CTRL1,
3274 regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL1,
3283 switch (rt5670->dmic3_data_pin) {
3285 regmap_update_bits(rt5670->regmap, RT5670_DMIC_CTRL2,
3288 regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL1,
3328 .name = "rt5670",