mirror of
https://github.com/torvalds/linux.git
synced 2024-12-02 00:51:44 +00:00
ASoC: rt5645: improve the depop sequences of CBJ detection
This patch will improve the depop function of CBJ detection before the headphone playback when the system resumes. We also want to complete the CBJ detection in the system-level resume function. It could avoid triggering the detection at the playing state of headphones. Signed-off-by: Shuming Fan <shumingf@realtek.com> Link: https://lore.kernel.org/r/20230818023732.2153170-1-shumingf@realtek.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
cfee987c92
commit
aa98697c7d
@ -80,6 +80,7 @@ static const struct reg_sequence init_list[] = {
|
||||
|
||||
static const struct reg_sequence rt5650_init_list[] = {
|
||||
{0xf6, 0x0100},
|
||||
{RT5645_PWR_ANLG1, 0x02},
|
||||
};
|
||||
|
||||
static const struct reg_default rt5645_reg[] = {
|
||||
@ -1696,6 +1697,9 @@ static void hp_amp_power(struct snd_soc_component *component, int on)
|
||||
regmap_write(rt5645->regmap, RT5645_PR_BASE +
|
||||
RT5645_MAMP_INT_REG2, 0xfc00);
|
||||
snd_soc_component_write(component, RT5645_DEPOP_M2, 0x1140);
|
||||
snd_soc_component_update_bits(component, RT5645_PWR_ANLG1,
|
||||
RT5645_PWR_HP_L | RT5645_PWR_HP_R,
|
||||
RT5645_PWR_HP_L | RT5645_PWR_HP_R);
|
||||
msleep(90);
|
||||
} else {
|
||||
/* depop parameters */
|
||||
@ -1743,7 +1747,8 @@ static void hp_amp_power(struct snd_soc_component *component, int on)
|
||||
snd_soc_component_write(component, RT5645_DEPOP_M2, 0x1140);
|
||||
msleep(100);
|
||||
snd_soc_component_write(component, RT5645_DEPOP_M1, 0x0001);
|
||||
|
||||
snd_soc_component_update_bits(component, RT5645_PWR_ANLG1,
|
||||
RT5645_PWR_HP_L | RT5645_PWR_HP_R, 0);
|
||||
} else {
|
||||
snd_soc_component_update_bits(component, RT5645_DEPOP_M1,
|
||||
RT5645_HP_SG_MASK |
|
||||
@ -3150,7 +3155,7 @@ static int rt5645_jack_detect(struct snd_soc_component *component, int jack_inse
|
||||
unsigned int val;
|
||||
|
||||
if (jack_insert) {
|
||||
regmap_write(rt5645->regmap, RT5645_CHARGE_PUMP, 0x0e06);
|
||||
regmap_write(rt5645->regmap, RT5645_CHARGE_PUMP, 0x0206);
|
||||
|
||||
/* for jack type detect */
|
||||
snd_soc_dapm_force_enable_pin(dapm, "LDO2");
|
||||
@ -3195,6 +3200,8 @@ static int rt5645_jack_detect(struct snd_soc_component *component, int jack_inse
|
||||
if (rt5645->pdata.level_trigger_irq)
|
||||
regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
|
||||
RT5645_JD_1_1_MASK, RT5645_JD_1_1_NOR);
|
||||
|
||||
regmap_write(rt5645->regmap, RT5645_CHARGE_PUMP, 0x0e06);
|
||||
} else { /* jack out */
|
||||
rt5645->jack_type = 0;
|
||||
|
||||
@ -4003,13 +4010,13 @@ static int rt5645_i2c_probe(struct i2c_client *i2c)
|
||||
|
||||
regmap_write(rt5645->regmap, RT5645_AD_DA_MIXER, 0x8080);
|
||||
|
||||
ret = regmap_register_patch(rt5645->regmap, init_list,
|
||||
ret = regmap_multi_reg_write(rt5645->regmap, init_list,
|
||||
ARRAY_SIZE(init_list));
|
||||
if (ret != 0)
|
||||
dev_warn(&i2c->dev, "Failed to apply regmap patch: %d\n", ret);
|
||||
|
||||
if (rt5645->codec_type == CODEC_TYPE_RT5650) {
|
||||
ret = regmap_register_patch(rt5645->regmap, rt5650_init_list,
|
||||
ret = regmap_multi_reg_write(rt5645->regmap, rt5650_init_list,
|
||||
ARRAY_SIZE(rt5650_init_list));
|
||||
if (ret != 0)
|
||||
dev_warn(&i2c->dev, "Apply rt5650 patch failed: %d\n",
|
||||
@ -4220,8 +4227,7 @@ static int __maybe_unused rt5645_sys_resume(struct device *dev)
|
||||
|
||||
if (rt5645->hp_jack) {
|
||||
rt5645->jack_type = 0;
|
||||
queue_delayed_work(system_power_efficient_wq,
|
||||
&rt5645->jack_detect_work, msecs_to_jiffies(0));
|
||||
rt5645_jack_detect_work(&rt5645->jack_detect_work.work);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user