Lines Matching refs:rt5651

3  * rt5651.c  --  RT5651 ALSA SoC audio codec driver
29 #include "rt5651.h"
380 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
383 rate = rt5651->sysclk / rl6231_get_pre_div(rt5651->regmap,
685 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
690 regmap_update_bits(rt5651->regmap, RT5651_PR_BASE +
692 regmap_update_bits(rt5651->regmap, RT5651_DEPOP_M2,
694 regmap_update_bits(rt5651->regmap, RT5651_DEPOP_M1,
698 regmap_write(rt5651->regmap, RT5651_PR_BASE +
701 regmap_update_bits(rt5651->regmap, RT5651_PWR_ANLG1,
703 regmap_update_bits(rt5651->regmap, RT5651_PWR_ANLG1,
707 regmap_update_bits(rt5651->regmap, RT5651_PWR_ANLG1,
723 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
728 regmap_update_bits(rt5651->regmap, RT5651_DEPOP_M2,
731 regmap_update_bits(rt5651->regmap, RT5651_CHARGE_PUMP,
734 regmap_update_bits(rt5651->regmap, RT5651_DEPOP_M3,
741 regmap_write(rt5651->regmap, RT5651_PR_BASE +
743 regmap_update_bits(rt5651->regmap, RT5651_DEPOP_M1,
746 regmap_update_bits(rt5651->regmap, RT5651_PR_BASE +
748 rt5651->hp_mute = false;
752 rt5651->hp_mute = true;
768 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
772 if (!rt5651->hp_mute)
1285 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
1289 rt5651->lrck[dai->id] = params_rate(params);
1290 pre_div = rl6231_get_clk_info(rt5651->sysclk, rt5651->lrck[dai->id]);
1302 rt5651->bclk[dai->id] = rt5651->lrck[dai->id] * (32 << bclk_ms);
1305 rt5651->bclk[dai->id], rt5651->lrck[dai->id]);
1351 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
1356 rt5651->master[dai->id] = 1;
1360 rt5651->master[dai->id] = 0;
1414 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
1418 if (freq == rt5651->sysclk && clk_id == rt5651->sysclk_src)
1440 rt5651->sysclk = freq;
1441 rt5651->sysclk_src = clk_id;
1452 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
1456 if (source == rt5651->pll_src && freq_in == rt5651->pll_in &&
1457 freq_out == rt5651->pll_out)
1463 rt5651->pll_in = 0;
1464 rt5651->pll_out = 0;
1504 rt5651->pll_in = freq_in;
1505 rt5651->pll_out = freq_out;
1506 rt5651->pll_src = source;
1585 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
1589 rt5651->ovcd_irq_enabled = true;
1594 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
1598 rt5651->ovcd_irq_enabled = false;
1619 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
1622 if (rt5651->gpiod_hp_det) {
1623 val = gpiod_get_value_cansleep(rt5651->gpiod_hp_det);
1631 switch (rt5651->jd_src) {
1645 if (rt5651->jd_active_high)
1662 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
1664 rt5651->poll_count = 0;
1665 rt5651->press_count = 0;
1666 rt5651->release_count = 0;
1667 rt5651->pressed = false;
1668 rt5651->press_reported = false;
1670 schedule_delayed_work(&rt5651->bp_work, msecs_to_jiffies(BP_POLL_TIME));
1675 struct rt5651_priv *rt5651 =
1677 struct snd_soc_component *component = rt5651->component;
1684 rt5651->release_count = 0;
1685 rt5651->press_count++;
1687 if (rt5651->press_count >= BP_THRESHOLD)
1688 rt5651->pressed = true;
1691 rt5651->press_count = 0;
1692 rt5651->release_count++;
1699 rt5651->poll_count++;
1700 if (rt5651->poll_count < (JACK_UNPLUG_TIME / BP_POLL_TIME)) {
1701 schedule_delayed_work(&rt5651->bp_work,
1706 if (rt5651->pressed && !rt5651->press_reported) {
1708 snd_soc_jack_report(rt5651->hp_jack, SND_JACK_BTN_0,
1710 rt5651->press_reported = true;
1713 if (rt5651->release_count >= BP_THRESHOLD) {
1714 if (rt5651->press_reported) {
1716 snd_soc_jack_report(rt5651->hp_jack, 0, SND_JACK_BTN_0);
1723 schedule_delayed_work(&rt5651->bp_work, msecs_to_jiffies(BP_POLL_TIME));
1771 static bool rt5651_support_button_press(struct rt5651_priv *rt5651)
1773 if (!rt5651->hp_jack)
1777 return (rt5651->hp_jack->status & SND_JACK_MICROPHONE) &&
1778 rt5651->gpiod_hp_det == NULL;
1783 struct rt5651_priv *rt5651 =
1785 struct snd_soc_component *component = rt5651->component;
1790 if (rt5651->hp_jack->status & SND_JACK_HEADPHONE) {
1791 if (rt5651->hp_jack->status & SND_JACK_MICROPHONE) {
1792 cancel_delayed_work_sync(&rt5651->bp_work);
1796 snd_soc_jack_report(rt5651->hp_jack, 0,
1800 } else if (!(rt5651->hp_jack->status & SND_JACK_HEADPHONE)) {
1802 WARN_ON(rt5651->ovcd_irq_enabled);
1806 snd_soc_jack_report(rt5651->hp_jack, report, SND_JACK_HEADSET);
1807 if (rt5651_support_button_press(rt5651)) {
1814 } else if (rt5651->ovcd_irq_enabled && rt5651_micbias1_ovcd(component)) {
1835 queue_work(system_long_wq, &rt5651->jack_detect_work);
1841 struct rt5651_priv *rt5651 = data;
1843 queue_work(system_power_efficient_wq, &rt5651->jack_detect_work);
1850 struct rt5651_priv *rt5651 = data;
1852 cancel_work_sync(&rt5651->jack_detect_work);
1853 cancel_delayed_work_sync(&rt5651->bp_work);
1860 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
1864 switch (rt5651->jd_src) {
1866 rt5651->gpiod_hp_det = gpiod_hp_det;
1867 if (!rt5651->gpiod_hp_det)
1875 if (rt5651->jd_active_high)
1890 if (rt5651->jd_active_high)
1905 if (rt5651->jd_active_high)
1933 0xa800 | rt5651->ovcd_sf);
1941 rt5651->ovcd_th |
1957 rt5651->hp_jack = hp_jack;
1958 if (rt5651_support_button_press(rt5651)) {
1963 enable_irq(rt5651->irq);
1965 queue_work(system_power_efficient_wq, &rt5651->jack_detect_work);
1970 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
1972 disable_irq(rt5651->irq);
1973 rt5651_cancel_work(rt5651);
1975 if (rt5651_support_button_press(rt5651)) {
1978 snd_soc_jack_report(rt5651->hp_jack, 0, SND_JACK_BTN_0);
1981 rt5651->hp_jack = NULL;
2004 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
2017 rt5651->jd_src = val;
2020 rt5651->jd_active_high = true;
2027 rt5651->ovcd_th = RT5651_MIC1_OVTH_2000UA;
2028 rt5651->ovcd_sf = RT5651_MIC_OVCD_SF_0P75;
2034 rt5651->ovcd_th = RT5651_MIC1_OVTH_600UA;
2037 rt5651->ovcd_th = RT5651_MIC1_OVTH_1500UA;
2040 rt5651->ovcd_th = RT5651_MIC1_OVTH_2000UA;
2051 rt5651->ovcd_sf = val << RT5651_MIC_OVCD_SF_SFT;
2060 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
2062 rt5651->component = component;
2077 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
2079 regcache_cache_only(rt5651->regmap, true);
2080 regcache_mark_dirty(rt5651->regmap);
2086 struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
2088 regcache_cache_only(rt5651->regmap, false);
2111 .name = "rt5651-aif1",
2130 .name = "rt5651-aif2",
2186 { .compatible = "realtek,rt5651", },
2202 { "rt5651" },
2213 struct rt5651_priv *rt5651;
2217 rt5651 = devm_kzalloc(&i2c->dev, sizeof(*rt5651),
2219 if (NULL == rt5651)
2222 i2c_set_clientdata(i2c, rt5651);
2224 rt5651->regmap = devm_regmap_init_i2c(i2c, &rt5651_regmap);
2225 if (IS_ERR(rt5651->regmap)) {
2226 ret = PTR_ERR(rt5651->regmap);
2232 err = regmap_read(rt5651->regmap, RT5651_DEVICE_ID, &ret);
2238 "Device with ID register %#x is not rt5651\n", ret);
2242 regmap_write(rt5651->regmap, RT5651_RESET, 0);
2244 ret = regmap_register_patch(rt5651->regmap, init_list,
2249 rt5651->irq = i2c->irq;
2250 rt5651->hp_mute = true;
2252 INIT_DELAYED_WORK(&rt5651->bp_work, rt5651_button_press_work);
2253 INIT_WORK(&rt5651->jack_detect_work, rt5651_jack_detect_work);
2256 ret = devm_add_action_or_reset(&i2c->dev, rt5651_cancel_work, rt5651);
2260 ret = devm_request_irq(&i2c->dev, rt5651->irq, rt5651_irq,
2262 | IRQF_ONESHOT | IRQF_NO_AUTOEN, "rt5651", rt5651);
2265 rt5651->irq, ret);
2266 rt5651->irq = -ENXIO;
2278 .name = "rt5651",