Lines Matching defs:rt5640

3  * rt5640.c  --  RT5640/RT5639 ALSA SoC audio codec driver
33 #include "rt5640.h"
463 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
466 rate = rt5640->sysclk / rl6231_get_pre_div(rt5640->regmap,
481 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
483 if (!rt5640->asrc_en)
919 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
922 regmap_update_bits(rt5640->regmap, RT5640_PR_BASE +
924 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M2,
926 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M1,
929 regmap_write(rt5640->regmap, RT5640_PR_BASE + RT5640_HP_DCC_INT1,
932 regmap_update_bits(rt5640->regmap, RT5640_PWR_ANLG1,
934 regmap_update_bits(rt5640->regmap, RT5640_PWR_ANLG1,
938 regmap_update_bits(rt5640->regmap, RT5640_PWR_ANLG1,
945 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
947 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M2,
950 regmap_update_bits(rt5640->regmap, RT5640_CHARGE_PUMP,
953 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M3,
959 regmap_write(rt5640->regmap, RT5640_PR_BASE +
961 regmap_update_bits(rt5640->regmap, RT5640_DEPOP_M1,
964 regmap_update_bits(rt5640->regmap, RT5640_PR_BASE +
972 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
977 rt5640->hp_mute = false;
981 rt5640->hp_mute = true;
1041 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1045 if (!rt5640->hp_mute)
1701 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1705 rt5640->lrck[dai->id] = params_rate(params);
1706 pre_div = rl6231_get_clk_info(rt5640->sysclk, rt5640->lrck[dai->id]);
1709 rt5640->lrck[dai->id], dai->id);
1721 rt5640->bclk[dai->id] = rt5640->lrck[dai->id] * (32 << bclk_ms);
1724 rt5640->bclk[dai->id], rt5640->lrck[dai->id]);
1772 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1778 rt5640->master[dai->id] = 1;
1782 rt5640->master[dai->id] = 0;
1837 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1841 if (freq == rt5640->sysclk && clk_id == rt5640->sysclk_src)
1863 rt5640->sysclk = freq;
1864 rt5640->sysclk_src = clk_id;
1874 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1878 if (source == rt5640->pll_src && freq_in == rt5640->pll_in &&
1879 freq_out == rt5640->pll_out)
1885 rt5640->pll_in = 0;
1886 rt5640->pll_out = 0;
1926 rt5640->pll_in = freq_in;
1927 rt5640->pll_out = freq_out;
1928 rt5640->pll_src = source;
1936 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
1951 if (IS_ERR(rt5640->mclk))
1955 clk_disable_unprepare(rt5640->mclk);
1957 ret = clk_prepare_enable(rt5640->mclk);
2003 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2005 regmap_update_bits(rt5640->regmap, RT5640_GPIO_CTRL1,
2009 regmap_update_bits(rt5640->regmap, RT5640_DMIC,
2011 regmap_update_bits(rt5640->regmap, RT5640_GPIO_CTRL1,
2016 regmap_update_bits(rt5640->regmap, RT5640_DMIC,
2018 regmap_update_bits(rt5640->regmap, RT5640_GPIO_CTRL1,
2029 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2085 rt5640->asrc_en = true;
2088 rt5640->asrc_en = false;
2123 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2127 rt5640->ovcd_irq_enabled = true;
2132 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2136 rt5640->ovcd_irq_enabled = false;
2157 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2163 if (rt5640->jd_inverted)
2180 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2182 rt5640->poll_count = 0;
2183 rt5640->press_count = 0;
2184 rt5640->release_count = 0;
2185 rt5640->pressed = false;
2186 rt5640->press_reported = false;
2188 schedule_delayed_work(&rt5640->bp_work, msecs_to_jiffies(BP_POLL_TIME));
2193 struct rt5640_priv *rt5640 =
2195 struct snd_soc_component *component = rt5640->component;
2202 rt5640->release_count = 0;
2203 rt5640->press_count++;
2205 if (rt5640->press_count >= BP_THRESHOLD)
2206 rt5640->pressed = true;
2209 rt5640->press_count = 0;
2210 rt5640->release_count++;
2217 rt5640->poll_count++;
2218 if (rt5640->poll_count < (JACK_UNPLUG_TIME / BP_POLL_TIME)) {
2219 schedule_delayed_work(&rt5640->bp_work,
2224 if (rt5640->pressed && !rt5640->press_reported) {
2226 snd_soc_jack_report(rt5640->jack, SND_JACK_BTN_0,
2228 rt5640->press_reported = true;
2231 if (rt5640->release_count >= BP_THRESHOLD) {
2232 if (rt5640->press_reported) {
2234 snd_soc_jack_report(rt5640->jack, 0, SND_JACK_BTN_0);
2241 schedule_delayed_work(&rt5640->bp_work, msecs_to_jiffies(BP_POLL_TIME));
2291 struct rt5640_priv *rt5640 =
2293 struct snd_soc_component *component = rt5640->component;
2298 if (rt5640->jack->status & SND_JACK_HEADPHONE) {
2299 if (rt5640->jack->status & SND_JACK_MICROPHONE) {
2300 cancel_delayed_work_sync(&rt5640->bp_work);
2304 snd_soc_jack_report(rt5640->jack, 0,
2308 } else if (!(rt5640->jack->status & SND_JACK_HEADPHONE)) {
2310 WARN_ON(rt5640->ovcd_irq_enabled);
2321 snd_soc_jack_report(rt5640->jack, status, SND_JACK_HEADSET);
2322 } else if (rt5640->ovcd_irq_enabled && rt5640_micbias1_ovcd(component)) {
2343 queue_work(system_long_wq, &rt5640->jack_work);
2349 struct rt5640_priv *rt5640 = data;
2351 if (rt5640->jack)
2352 queue_work(system_long_wq, &rt5640->jack_work);
2359 struct rt5640_priv *rt5640 = data;
2361 cancel_work_sync(&rt5640->jack_work);
2362 cancel_delayed_work_sync(&rt5640->bp_work);
2368 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2372 RT5640_JD_MASK, rt5640->jd_src);
2389 0xa800 | rt5640->ovcd_sf);
2393 rt5640->ovcd_th | RT5640_MIC1_OVCD_EN);
2413 if (rt5640->jd_inverted)
2420 rt5640->jack = jack;
2421 if (rt5640->jack->status & SND_JACK_MICROPHONE) {
2426 enable_irq(rt5640->irq);
2428 queue_work(system_long_wq, &rt5640->jack_work);
2433 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2436 * soc_remove_component() force-disables jack and thus rt5640->jack
2439 if (!rt5640->jack)
2442 disable_irq(rt5640->irq);
2443 rt5640_cancel_work(rt5640);
2445 if (rt5640->jack->status & SND_JACK_MICROPHONE) {
2448 snd_soc_jack_report(rt5640->jack, 0, SND_JACK_BTN_0);
2451 rt5640->jack = NULL;
2468 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2475 rt5640->mclk = devm_clk_get(component->dev, "mclk");
2476 if (PTR_ERR(rt5640->mclk) == -EPROBE_DEFER)
2479 rt5640->component = component;
2551 rt5640->jd_src = val << RT5640_JD_SFT;
2558 rt5640->jd_inverted = true;
2565 rt5640->ovcd_th = RT5640_MIC1_OVTH_2000UA;
2566 rt5640->ovcd_sf = RT5640_MIC_OVCD_SF_0P75;
2572 rt5640->ovcd_th = RT5640_MIC1_OVTH_600UA;
2575 rt5640->ovcd_th = RT5640_MIC1_OVTH_1500UA;
2578 rt5640->ovcd_th = RT5640_MIC1_OVTH_2000UA;
2589 rt5640->ovcd_sf = val << RT5640_MIC_OVCD_SF_SFT;
2606 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2610 regcache_cache_only(rt5640->regmap, true);
2611 regcache_mark_dirty(rt5640->regmap);
2612 if (gpio_is_valid(rt5640->ldo1_en))
2613 gpio_set_value_cansleep(rt5640->ldo1_en, 0);
2620 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
2622 if (gpio_is_valid(rt5640->ldo1_en)) {
2623 gpio_set_value_cansleep(rt5640->ldo1_en, 1);
2627 regcache_cache_only(rt5640->regmap, false);
2628 regcache_sync(rt5640->regmap);
2650 .name = "rt5640-aif1",
2669 .name = "rt5640-aif2",
2727 { "rt5640", 0 },
2737 { .compatible = "realtek,rt5640", },
2755 static int rt5640_parse_dt(struct rt5640_priv *rt5640, struct device_node *np)
2757 rt5640->ldo1_en = of_get_named_gpio(np, "realtek,ldo1-en-gpios", 0);
2764 if (!gpio_is_valid(rt5640->ldo1_en) &&
2765 (rt5640->ldo1_en != -ENOENT))
2766 return rt5640->ldo1_en;
2774 struct rt5640_priv *rt5640;
2778 rt5640 = devm_kzalloc(&i2c->dev,
2781 if (NULL == rt5640)
2783 i2c_set_clientdata(i2c, rt5640);
2786 ret = rt5640_parse_dt(rt5640, i2c->dev.of_node);
2790 rt5640->ldo1_en = -EINVAL;
2792 rt5640->regmap = devm_regmap_init_i2c(i2c, &rt5640_regmap);
2793 if (IS_ERR(rt5640->regmap)) {
2794 ret = PTR_ERR(rt5640->regmap);
2800 if (gpio_is_valid(rt5640->ldo1_en)) {
2801 ret = devm_gpio_request_one(&i2c->dev, rt5640->ldo1_en,
2806 rt5640->ldo1_en, ret);
2812 regmap_read(rt5640->regmap, RT5640_VENDOR_ID2, &val);
2815 "Device with ID register %#x is not rt5640/39\n", val);
2819 regmap_write(rt5640->regmap, RT5640_RESET, 0);
2821 ret = regmap_register_patch(rt5640->regmap, init_list,
2826 regmap_update_bits(rt5640->regmap, RT5640_DUMMY1,
2829 rt5640->hp_mute = true;
2830 rt5640->irq = i2c->irq;
2831 INIT_DELAYED_WORK(&rt5640->bp_work, rt5640_button_press_work);
2832 INIT_WORK(&rt5640->jack_work, rt5640_jack_work);
2835 ret = devm_add_action_or_reset(&i2c->dev, rt5640_cancel_work, rt5640);
2839 ret = devm_request_irq(&i2c->dev, rt5640->irq, rt5640_irq,
2841 | IRQF_ONESHOT, "rt5640", rt5640);
2844 disable_irq(rt5640->irq);
2847 rt5640->irq, ret);
2848 rt5640->irq = -ENXIO;
2858 .name = "rt5640",