Lines Matching defs:rt5640

3  * rt5640.c  --  RT5640/RT5639 ALSA SoC audio codec driver
32 #include "rt5640.h"
462 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
465 rate = rt5640->sysclk / rl6231_get_pre_div(rt5640->regmap,
480 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
482 if (!rt5640->asrc_en)
918 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
921 regmap_update_bits(rt5640->regmap, RT5640_PR_BASE +
923 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M2,
925 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M1,
928 regmap_write(rt5640->regmap, RT5640_PR_BASE + RT5640_HP_DCC_INT1,
931 regmap_update_bits(rt5640->regmap, RT5640_PWR_ANLG1,
933 regmap_update_bits(rt5640->regmap, RT5640_PWR_ANLG1,
937 regmap_update_bits(rt5640->regmap, RT5640_PWR_ANLG1,
944 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
946 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M2,
949 regmap_update_bits(rt5640->regmap, RT5640_CHARGE_PUMP,
952 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M3,
958 regmap_write(rt5640->regmap, RT5640_PR_BASE +
960 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M1,
963 regmap_update_bits(rt5640->regmap, RT5640_PR_BASE +
971 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
976 rt5640->hp_mute = false;
980 rt5640->hp_mute = true;
1040 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1044 if (!rt5640->hp_mute)
1700 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1704 rt5640->lrck[dai->id] = params_rate(params);
1705 pre_div = rl6231_get_clk_info(rt5640->sysclk, rt5640->lrck[dai->id]);
1708 rt5640->lrck[dai->id], dai->id);
1720 rt5640->bclk[dai->id] = rt5640->lrck[dai->id] * (32 << bclk_ms);
1723 rt5640->bclk[dai->id], rt5640->lrck[dai->id]);
1771 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1777 rt5640->master[dai->id] = 1;
1781 rt5640->master[dai->id] = 0;
1836 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1843 ret = clk_set_rate(rt5640->mclk, freq);
1864 rt5640->sysclk = freq;
1865 rt5640->sysclk_src = clk_id;
1875 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1879 if (source == rt5640->pll_src && freq_in == rt5640->pll_in &&
1880 freq_out == rt5640->pll_out)
1886 rt5640->pll_in = 0;
1887 rt5640->pll_out = 0;
1927 rt5640->pll_in = freq_in;
1928 rt5640->pll_out = freq_out;
1929 rt5640->pll_src = source;
1937 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1952 if (IS_ERR(rt5640->mclk))
1956 clk_disable_unprepare(rt5640->mclk);
1958 ret = clk_prepare_enable(rt5640->mclk);
1990 if (rt5640->jd_src == RT5640_JD_SRC_HDA_HEADER)
2009 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2011 regmap_update_bits(rt5640->regmap, RT5640_GPIO_CTRL1,
2015 regmap_update_bits(rt5640->regmap, RT5640_DMIC,
2017 regmap_update_bits(rt5640->regmap, RT5640_GPIO_CTRL1,
2022 regmap_update_bits(rt5640->regmap, RT5640_DMIC,
2024 regmap_update_bits(rt5640->regmap, RT5640_GPIO_CTRL1,
2035 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2091 rt5640->asrc_en = true;
2094 rt5640->asrc_en = false;
2105 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2111 if (rt5640->use_platform_clock)
2121 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2124 if (rt5640->use_platform_clock)
2135 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2139 rt5640->ovcd_irq_enabled = true;
2144 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2148 rt5640->ovcd_irq_enabled = false;
2169 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2172 if (rt5640->jd_gpio)
2173 val = gpiod_get_value(rt5640->jd_gpio) ? RT5640_JD_STATUS : 0;
2179 if (rt5640->jd_inverted)
2196 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2198 rt5640->poll_count = 0;
2199 rt5640->press_count = 0;
2200 rt5640->release_count = 0;
2201 rt5640->pressed = false;
2202 rt5640->press_reported = false;
2204 schedule_delayed_work(&rt5640->bp_work, msecs_to_jiffies(BP_POLL_TIME));
2209 struct rt5640_priv *rt5640 =
2211 struct snd_soc_component *component = rt5640->component;
2218 rt5640->release_count = 0;
2219 rt5640->press_count++;
2221 if (rt5640->press_count >= BP_THRESHOLD)
2222 rt5640->pressed = true;
2225 rt5640->press_count = 0;
2226 rt5640->release_count++;
2233 rt5640->poll_count++;
2234 if (rt5640->poll_count < (JACK_UNPLUG_TIME / BP_POLL_TIME)) {
2235 schedule_delayed_work(&rt5640->bp_work,
2240 if (rt5640->pressed && !rt5640->press_reported) {
2242 snd_soc_jack_report(rt5640->jack, SND_JACK_BTN_0,
2244 rt5640->press_reported = true;
2247 if (rt5640->release_count >= BP_THRESHOLD) {
2248 if (rt5640->press_reported) {
2250 snd_soc_jack_report(rt5640->jack, 0, SND_JACK_BTN_0);
2257 schedule_delayed_work(&rt5640->bp_work, msecs_to_jiffies(BP_POLL_TIME));
2313 struct rt5640_priv *rt5640 =
2315 struct snd_soc_component *component = rt5640->component;
2318 if (rt5640->jd_src == RT5640_JD_SRC_HDA_HEADER) {
2345 snd_soc_jack_report(rt5640->jack, jack_type, SND_JACK_HEADSET);
2352 if (rt5640->jack->status & SND_JACK_HEADPHONE) {
2353 if (rt5640->jack->status & SND_JACK_MICROPHONE) {
2354 cancel_delayed_work_sync(&rt5640->bp_work);
2358 snd_soc_jack_report(rt5640->jack, 0,
2362 } else if (!(rt5640->jack->status & SND_JACK_HEADPHONE)) {
2364 WARN_ON(rt5640->ovcd_irq_enabled);
2375 snd_soc_jack_report(rt5640->jack, status, SND_JACK_HEADSET);
2376 } else if (rt5640->ovcd_irq_enabled && rt5640_micbias1_ovcd(component)) {
2397 queue_delayed_work(system_long_wq, &rt5640->jack_work, 0);
2403 struct rt5640_priv *rt5640 = data;
2406 if (rt5640->jd_src == RT5640_JD_SRC_HDA_HEADER)
2409 if (rt5640->jack)
2410 mod_delayed_work(system_long_wq, &rt5640->jack_work, delay);
2417 struct rt5640_priv *rt5640 = data;
2419 queue_delayed_work(system_long_wq, &rt5640->jack_work,
2427 struct rt5640_priv *rt5640 = data;
2429 cancel_delayed_work_sync(&rt5640->jack_work);
2430 cancel_delayed_work_sync(&rt5640->bp_work);
2435 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2438 0xa800 | rt5640->ovcd_sf);
2442 rt5640->ovcd_th | RT5640_MIC1_OVCD_EN);
2460 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2463 * soc_remove_component() force-disables jack and thus rt5640->jack
2466 if (!rt5640->jack)
2469 if (rt5640->jd_gpio_irq_requested)
2470 free_irq(rt5640->jd_gpio_irq, rt5640);
2472 if (rt5640->irq_requested)
2473 free_irq(rt5640->irq, rt5640);
2475 rt5640_cancel_work(rt5640);
2477 if (rt5640->jack->status & SND_JACK_MICROPHONE) {
2480 snd_soc_jack_report(rt5640->jack, 0, SND_JACK_BTN_0);
2483 rt5640->jd_gpio_irq_requested = false;
2484 rt5640->irq_requested = false;
2485 rt5640->jd_gpio = NULL;
2486 rt5640->jack = NULL;
2493 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2498 RT5640_JD_MASK, rt5640->jd_src << RT5640_JD_SFT);
2518 if (rt5640->jd_inverted) {
2519 if (rt5640->jd_src == RT5640_JD_SRC_JD1_IN4P)
2522 else if (rt5640->jd_src == RT5640_JD_SRC_JD2_IN4N)
2527 if (rt5640->jd_src == RT5640_JD_SRC_JD1_IN4P)
2530 else if (rt5640->jd_src == RT5640_JD_SRC_JD2_IN4N)
2538 rt5640->jack = jack;
2539 if (rt5640->jack->status & SND_JACK_MICROPHONE) {
2545 rt5640->irq = jack_data->codec_irq_override;
2548 rt5640->jd_gpio = jack_data->jd_gpio;
2549 rt5640->jd_gpio_irq = gpiod_to_irq(rt5640->jd_gpio);
2551 ret = request_irq(rt5640->jd_gpio_irq, rt5640_jd_gpio_irq,
2553 "rt5640-jd-gpio", rt5640);
2556 rt5640->jd_gpio_irq, ret);
2560 rt5640->jd_gpio_irq_requested = true;
2564 rt5640->use_platform_clock = jack_data->use_platform_clock;
2566 ret = request_irq(rt5640->irq, rt5640_irq,
2568 "rt5640", rt5640);
2570 dev_warn(component->dev, "Failed to request IRQ %d: %d\n", rt5640->irq, ret);
2574 rt5640->irq_requested = true;
2577 queue_delayed_work(system_long_wq, &rt5640->jack_work, 0);
2589 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2619 rt5640->jack = jack;
2621 ret = request_irq(rt5640->irq, rt5640_irq,
2622 IRQF_TRIGGER_RISING | IRQF_ONESHOT, "rt5640", rt5640);
2624 dev_warn(component->dev, "Failed to request IRQ %d: %d\n", rt5640->irq, ret);
2625 rt5640->jack = NULL;
2628 rt5640->irq_requested = true;
2631 queue_delayed_work(system_long_wq, &rt5640->jack_work, 0);
2640 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2643 if (rt5640->jd_src == RT5640_JD_SRC_HDA_HEADER)
2657 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2664 rt5640->mclk = devm_clk_get(component->dev, "mclk");
2665 if (PTR_ERR(rt5640->mclk) == -EPROBE_DEFER)
2668 rt5640->component = component;
2744 rt5640->jd_src = val;
2751 rt5640->jd_inverted = true;
2758 rt5640->ovcd_th = RT5640_MIC1_OVTH_2000UA;
2759 rt5640->ovcd_sf = RT5640_MIC_OVCD_SF_0P75;
2765 rt5640->ovcd_th = RT5640_MIC1_OVTH_600UA;
2768 rt5640->ovcd_th = RT5640_MIC1_OVTH_1500UA;
2771 rt5640->ovcd_th = RT5640_MIC1_OVTH_2000UA;
2782 rt5640->ovcd_sf = val << RT5640_MIC_OVCD_SF_SFT;
2799 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2801 if (rt5640->jack) {
2803 disable_irq(rt5640->irq);
2804 rt5640_cancel_work(rt5640);
2809 regcache_cache_only(rt5640->regmap, true);
2810 regcache_mark_dirty(rt5640->regmap);
2811 if (rt5640->ldo1_en)
2812 gpiod_set_value_cansleep(rt5640->ldo1_en, 0);
2819 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2821 if (rt5640->ldo1_en) {
2822 gpiod_set_value_cansleep(rt5640->ldo1_en, 1);
2826 regcache_cache_only(rt5640->regmap, false);
2827 regcache_sync(rt5640->regmap);
2829 if (rt5640->jack) {
2830 if (rt5640->jd_src == RT5640_JD_SRC_HDA_HEADER) {
2834 if (rt5640->jd_inverted) {
2835 if (rt5640->jd_src == RT5640_JD_SRC_JD2_IN4N)
2844 if (rt5640->jd_src == RT5640_JD_SRC_JD2_IN4N)
2856 enable_irq(rt5640->irq);
2857 queue_delayed_work(system_long_wq, &rt5640->jack_work, 0);
2880 .name = "rt5640-aif1",
2899 .name = "rt5640-aif2",
2955 { "rt5640", 0 },
2965 { .compatible = "realtek,rt5640", },
2985 struct rt5640_priv *rt5640;
2989 rt5640 = devm_kzalloc(&i2c->dev,
2992 if (NULL == rt5640)
2994 i2c_set_clientdata(i2c, rt5640);
2996 rt5640->ldo1_en = devm_gpiod_get_optional(&i2c->dev,
2999 if (IS_ERR(rt5640->ldo1_en))
3000 return PTR_ERR(rt5640->ldo1_en);
3002 if (rt5640->ldo1_en) {
3003 gpiod_set_consumer_name(rt5640->ldo1_en, "RT5640 LDO1_EN");
3007 rt5640->regmap = devm_regmap_init_i2c(i2c, &rt5640_regmap);
3008 if (IS_ERR(rt5640->regmap)) {
3009 ret = PTR_ERR(rt5640->regmap);
3015 regmap_read(rt5640->regmap, RT5640_VENDOR_ID2, &val);
3018 "Device with ID register %#x is not rt5640/39\n", val);
3022 regmap_write(rt5640->regmap, RT5640_RESET, 0);
3024 ret = regmap_register_patch(rt5640->regmap, init_list,
3029 regmap_update_bits(rt5640->regmap, RT5640_DUMMY1,
3032 rt5640->hp_mute = true;
3033 rt5640->irq = i2c->irq;
3034 INIT_DELAYED_WORK(&rt5640->bp_work, rt5640_button_press_work);
3035 INIT_DELAYED_WORK(&rt5640->jack_work, rt5640_jack_work);
3038 ret = devm_add_action_or_reset(&i2c->dev, rt5640_cancel_work, rt5640);
3049 .name = "rt5640",