Lines Matching refs:rt5682
909 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_headset_detect() local
941 rt5682->jack_type = SND_JACK_HEADSET; in rt5682_headset_detect()
945 rt5682->jack_type = SND_JACK_HEADPHONE; in rt5682_headset_detect()
957 rt5682->jack_type = 0; in rt5682_headset_detect()
960 dev_dbg(component->dev, "jack_type = %d\n", rt5682->jack_type); in rt5682_headset_detect()
961 return rt5682->jack_type; in rt5682_headset_detect()
966 struct rt5682_priv *rt5682 = data; in rt5682_irq() local
969 &rt5682->jack_detect_work, msecs_to_jiffies(250)); in rt5682_irq()
976 struct rt5682_priv *rt5682 = container_of(work, struct rt5682_priv, in rt5682_jd_check_handler() local
979 if (snd_soc_component_read32(rt5682->component, RT5682_AJD1_CTRL) in rt5682_jd_check_handler()
982 rt5682->jack_type = rt5682_headset_detect(rt5682->component, 0); in rt5682_jd_check_handler()
984 snd_soc_jack_report(rt5682->hs_jack, rt5682->jack_type, in rt5682_jd_check_handler()
989 schedule_delayed_work(&rt5682->jd_check_work, 500); in rt5682_jd_check_handler()
996 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_jack_detect() local
998 rt5682->hs_jack = hs_jack; in rt5682_set_jack_detect()
1001 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2, in rt5682_set_jack_detect()
1003 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL, in rt5682_set_jack_detect()
1008 switch (rt5682->pdata.jd_src) { in rt5682_set_jack_detect()
1017 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_set_jack_detect()
1019 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL, in rt5682_set_jack_detect()
1023 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_2, in rt5682_set_jack_detect()
1026 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2, in rt5682_set_jack_detect()
1030 &rt5682->jack_detect_work, msecs_to_jiffies(250)); in rt5682_set_jack_detect()
1034 regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2, in rt5682_set_jack_detect()
1036 regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL, in rt5682_set_jack_detect()
1050 struct rt5682_priv *rt5682 = in rt5682_jack_detect_handler() local
1054 while (!rt5682->component) in rt5682_jack_detect_handler()
1057 while (!rt5682->component->card->instantiated) in rt5682_jack_detect_handler()
1060 mutex_lock(&rt5682->calibrate_mutex); in rt5682_jack_detect_handler()
1062 val = snd_soc_component_read32(rt5682->component, RT5682_AJD1_CTRL) in rt5682_jack_detect_handler()
1066 if (rt5682->jack_type == 0) { in rt5682_jack_detect_handler()
1068 rt5682->jack_type = in rt5682_jack_detect_handler()
1069 rt5682_headset_detect(rt5682->component, 1); in rt5682_jack_detect_handler()
1072 rt5682->jack_type = SND_JACK_HEADSET; in rt5682_jack_detect_handler()
1073 btn_type = rt5682_button_detect(rt5682->component); in rt5682_jack_detect_handler()
1085 rt5682->jack_type |= SND_JACK_BTN_0; in rt5682_jack_detect_handler()
1090 rt5682->jack_type |= SND_JACK_BTN_1; in rt5682_jack_detect_handler()
1095 rt5682->jack_type |= SND_JACK_BTN_2; in rt5682_jack_detect_handler()
1100 rt5682->jack_type |= SND_JACK_BTN_3; in rt5682_jack_detect_handler()
1106 dev_err(rt5682->component->dev, in rt5682_jack_detect_handler()
1114 rt5682->jack_type = rt5682_headset_detect(rt5682->component, 0); in rt5682_jack_detect_handler()
1117 snd_soc_jack_report(rt5682->hs_jack, rt5682->jack_type, in rt5682_jack_detect_handler()
1122 if (rt5682->jack_type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 | in rt5682_jack_detect_handler()
1124 schedule_delayed_work(&rt5682->jd_check_work, 0); in rt5682_jack_detect_handler()
1126 cancel_delayed_work_sync(&rt5682->jd_check_work); in rt5682_jack_detect_handler()
1128 mutex_unlock(&rt5682->calibrate_mutex); in rt5682_jack_detect_handler()
1153 static int rt5682_div_sel(struct rt5682_priv *rt5682, in rt5682_div_sel() argument
1158 if (rt5682->sysclk < target) { in rt5682_div_sel()
1160 rt5682->sysclk); in rt5682_div_sel()
1166 if (target * div[i] == rt5682->sysclk) in rt5682_div_sel()
1168 if (target * div[i + 1] > rt5682->sysclk) { in rt5682_div_sel()
1170 rt5682->sysclk); in rt5682_div_sel()
1175 if (target * div[i] < rt5682->sysclk) in rt5682_div_sel()
1177 rt5682->sysclk); in rt5682_div_sel()
1198 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in set_dmic_clk() local
1202 idx = rt5682_div_sel(rt5682, 1500000, div, ARRAY_SIZE(div)); in set_dmic_clk()
1215 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in set_filter_clk() local
1224 ref = 256 * rt5682->lrck[RT5682_AIF2]; in set_filter_clk()
1226 ref = 256 * rt5682->lrck[RT5682_AIF1]; in set_filter_clk()
1228 idx = rt5682_div_sel(rt5682, ref, div_f, ARRAY_SIZE(div_f)); in set_filter_clk()
1240 if (rt5682->sysclk <= 12288000 * div_o[idx]) in set_filter_clk()
1998 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_hw_params() local
2002 rt5682->lrck[dai->id] = params_rate(params); in rt5682_hw_params()
2003 pre_div = rl6231_get_clk_info(rt5682->sysclk, rt5682->lrck[dai->id]); in rt5682_hw_params()
2013 rt5682->lrck[dai->id], pre_div, dai->id); in rt5682_hw_params()
2042 if (rt5682->master[RT5682_AIF1]) { in rt5682_hw_params()
2059 if (rt5682->master[RT5682_AIF2]) { in rt5682_hw_params()
2084 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_dai_fmt() local
2089 rt5682->master[dai->id] = 1; in rt5682_set_dai_fmt()
2092 rt5682->master[dai->id] = 0; in rt5682_set_dai_fmt()
2149 tdm_ctrl | rt5682->master[dai->id]); in rt5682_set_dai_fmt()
2152 if (rt5682->master[dai->id] == 0) in rt5682_set_dai_fmt()
2168 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_component_sysclk() local
2171 if (freq == rt5682->sysclk && clk_id == rt5682->sysclk_src) in rt5682_set_component_sysclk()
2198 if (rt5682->master[RT5682_AIF2]) { in rt5682_set_component_sysclk()
2204 rt5682->sysclk = freq; in rt5682_set_component_sysclk()
2205 rt5682->sysclk_src = clk_id; in rt5682_set_component_sysclk()
2217 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_component_pll() local
2221 if (source == rt5682->pll_src && freq_in == rt5682->pll_in && in rt5682_set_component_pll()
2222 freq_out == rt5682->pll_out) in rt5682_set_component_pll()
2228 rt5682->pll_in = 0; in rt5682_set_component_pll()
2229 rt5682->pll_out = 0; in rt5682_set_component_pll()
2265 rt5682->pll_in = freq_in; in rt5682_set_component_pll()
2266 rt5682->pll_out = freq_out; in rt5682_set_component_pll()
2267 rt5682->pll_src = source; in rt5682_set_component_pll()
2275 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_bclk_ratio() local
2277 rt5682->bclk[dai->id] = ratio; in rt5682_set_bclk_ratio()
2301 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_set_bias_level() local
2305 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1, in rt5682_set_bias_level()
2307 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1, in rt5682_set_bias_level()
2313 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1, in rt5682_set_bias_level()
2317 regmap_update_bits(rt5682->regmap, RT5682_PWR_DIG_1, in rt5682_set_bias_level()
2319 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1, in rt5682_set_bias_level()
2332 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_probe() local
2334 rt5682->component = component; in rt5682_probe()
2341 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_remove() local
2343 rt5682_reset(rt5682->regmap); in rt5682_remove()
2349 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_suspend() local
2351 regcache_cache_only(rt5682->regmap, true); in rt5682_suspend()
2352 regcache_mark_dirty(rt5682->regmap); in rt5682_suspend()
2358 struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component); in rt5682_resume() local
2360 regcache_cache_only(rt5682->regmap, false); in rt5682_resume()
2361 regcache_sync(rt5682->regmap); in rt5682_resume()
2363 rt5682_irq(0, rt5682); in rt5682_resume()
2461 static int rt5682_parse_dt(struct rt5682_priv *rt5682, struct device *dev) in rt5682_parse_dt() argument
2465 &rt5682->pdata.dmic1_data_pin); in rt5682_parse_dt()
2467 &rt5682->pdata.dmic1_clk_pin); in rt5682_parse_dt()
2469 &rt5682->pdata.jd_src); in rt5682_parse_dt()
2471 rt5682->pdata.ldo1_en = of_get_named_gpio(dev->of_node, in rt5682_parse_dt()
2477 static void rt5682_calibrate(struct rt5682_priv *rt5682) in rt5682_calibrate() argument
2481 mutex_lock(&rt5682->calibrate_mutex); in rt5682_calibrate()
2483 rt5682_reset(rt5682->regmap); in rt5682_calibrate()
2484 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0xa2af); in rt5682_calibrate()
2486 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0xf2af); in rt5682_calibrate()
2487 regmap_write(rt5682->regmap, RT5682_MICBIAS_2, 0x0300); in rt5682_calibrate()
2488 regmap_write(rt5682->regmap, RT5682_GLB_CLK, 0x8000); in rt5682_calibrate()
2489 regmap_write(rt5682->regmap, RT5682_PWR_DIG_1, 0x0100); in rt5682_calibrate()
2490 regmap_write(rt5682->regmap, RT5682_HP_IMP_SENS_CTRL_19, 0x3800); in rt5682_calibrate()
2491 regmap_write(rt5682->regmap, RT5682_CHOP_DAC, 0x3000); in rt5682_calibrate()
2492 regmap_write(rt5682->regmap, RT5682_CALIB_ADC_CTRL, 0x7005); in rt5682_calibrate()
2493 regmap_write(rt5682->regmap, RT5682_STO1_ADC_MIXER, 0x686c); in rt5682_calibrate()
2494 regmap_write(rt5682->regmap, RT5682_CAL_REC, 0x0d0d); in rt5682_calibrate()
2495 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_2, 0x0321); in rt5682_calibrate()
2496 regmap_write(rt5682->regmap, RT5682_HP_LOGIC_CTRL_2, 0x0004); in rt5682_calibrate()
2497 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0x7c00); in rt5682_calibrate()
2498 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_3, 0x06a1); in rt5682_calibrate()
2499 regmap_write(rt5682->regmap, RT5682_A_DAC1_MUX, 0x0311); in rt5682_calibrate()
2500 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0x7c00); in rt5682_calibrate()
2502 regmap_write(rt5682->regmap, RT5682_HP_CALIB_CTRL_1, 0xfc00); in rt5682_calibrate()
2505 regmap_read(rt5682->regmap, RT5682_HP_CALIB_STA_1, &value); in rt5682_calibrate()
2516 regmap_write(rt5682->regmap, RT5682_PWR_ANLG_1, 0x02af); in rt5682_calibrate()
2517 regmap_write(rt5682->regmap, RT5682_MICBIAS_2, 0x0080); in rt5682_calibrate()
2518 regmap_write(rt5682->regmap, RT5682_GLB_CLK, 0x0000); in rt5682_calibrate()
2519 regmap_write(rt5682->regmap, RT5682_PWR_DIG_1, 0x0000); in rt5682_calibrate()
2520 regmap_write(rt5682->regmap, RT5682_CHOP_DAC, 0x2000); in rt5682_calibrate()
2521 regmap_write(rt5682->regmap, RT5682_CALIB_ADC_CTRL, 0x2005); in rt5682_calibrate()
2522 regmap_write(rt5682->regmap, RT5682_STO1_ADC_MIXER, 0xc0c4); in rt5682_calibrate()
2524 mutex_unlock(&rt5682->calibrate_mutex); in rt5682_calibrate()
2532 struct rt5682_priv *rt5682; in rt5682_i2c_probe() local
2536 rt5682 = devm_kzalloc(&i2c->dev, sizeof(struct rt5682_priv), in rt5682_i2c_probe()
2539 if (rt5682 == NULL) in rt5682_i2c_probe()
2542 i2c_set_clientdata(i2c, rt5682); in rt5682_i2c_probe()
2544 rt5682->pdata = i2s_default_platform_data; in rt5682_i2c_probe()
2547 rt5682->pdata = *pdata; in rt5682_i2c_probe()
2549 rt5682_parse_dt(rt5682, &i2c->dev); in rt5682_i2c_probe()
2551 rt5682->regmap = devm_regmap_init_i2c(i2c, &rt5682_regmap); in rt5682_i2c_probe()
2552 if (IS_ERR(rt5682->regmap)) { in rt5682_i2c_probe()
2553 ret = PTR_ERR(rt5682->regmap); in rt5682_i2c_probe()
2559 for (i = 0; i < ARRAY_SIZE(rt5682->supplies); i++) in rt5682_i2c_probe()
2560 rt5682->supplies[i].supply = rt5682_supply_names[i]; in rt5682_i2c_probe()
2562 ret = devm_regulator_bulk_get(&i2c->dev, ARRAY_SIZE(rt5682->supplies), in rt5682_i2c_probe()
2563 rt5682->supplies); in rt5682_i2c_probe()
2569 ret = regulator_bulk_enable(ARRAY_SIZE(rt5682->supplies), in rt5682_i2c_probe()
2570 rt5682->supplies); in rt5682_i2c_probe()
2576 if (gpio_is_valid(rt5682->pdata.ldo1_en)) { in rt5682_i2c_probe()
2577 if (devm_gpio_request_one(&i2c->dev, rt5682->pdata.ldo1_en, in rt5682_i2c_probe()
2585 regmap_write(rt5682->regmap, RT5682_I2C_MODE, 0x1); in rt5682_i2c_probe()
2588 regmap_read(rt5682->regmap, RT5682_DEVICE_ID, &val); in rt5682_i2c_probe()
2594 rt5682_reset(rt5682->regmap); in rt5682_i2c_probe()
2596 mutex_init(&rt5682->calibrate_mutex); in rt5682_i2c_probe()
2597 rt5682_calibrate(rt5682); in rt5682_i2c_probe()
2599 ret = regmap_multi_reg_write(rt5682->regmap, patch_list, in rt5682_i2c_probe()
2604 regmap_write(rt5682->regmap, RT5682_DEPOP_1, 0x0000); in rt5682_i2c_probe()
2607 if (rt5682->pdata.dmic1_data_pin != RT5682_DMIC1_NULL) { in rt5682_i2c_probe()
2608 switch (rt5682->pdata.dmic1_data_pin) { in rt5682_i2c_probe()
2610 regmap_update_bits(rt5682->regmap, RT5682_DMIC_CTRL_1, in rt5682_i2c_probe()
2612 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_i2c_probe()
2617 regmap_update_bits(rt5682->regmap, RT5682_DMIC_CTRL_1, in rt5682_i2c_probe()
2619 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_i2c_probe()
2628 switch (rt5682->pdata.dmic1_clk_pin) { in rt5682_i2c_probe()
2630 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_i2c_probe()
2635 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_i2c_probe()
2645 regmap_update_bits(rt5682->regmap, RT5682_PWR_ANLG_1, in rt5682_i2c_probe()
2648 regmap_write(rt5682->regmap, RT5682_MICBIAS_2, 0x0380); in rt5682_i2c_probe()
2649 regmap_update_bits(rt5682->regmap, RT5682_GPIO_CTRL_1, in rt5682_i2c_probe()
2652 regmap_write(rt5682->regmap, RT5682_TEST_MODE_CTRL_1, 0x0000); in rt5682_i2c_probe()
2653 regmap_update_bits(rt5682->regmap, RT5682_BIAS_CUR_CTRL_8, in rt5682_i2c_probe()
2655 regmap_update_bits(rt5682->regmap, RT5682_CHARGE_PUMP_1, in rt5682_i2c_probe()
2658 INIT_DELAYED_WORK(&rt5682->jack_detect_work, in rt5682_i2c_probe()
2660 INIT_DELAYED_WORK(&rt5682->jd_check_work, in rt5682_i2c_probe()
2667 | IRQF_ONESHOT, "rt5682", rt5682); in rt5682_i2c_probe()
2680 struct rt5682_priv *rt5682 = i2c_get_clientdata(client); in rt5682_i2c_shutdown() local
2682 rt5682_reset(rt5682->regmap); in rt5682_i2c_shutdown()