Commit 54271282 authored by Shuming Fan's avatar Shuming Fan Committed by Mark Brown

ASoC: rt5682: add delay time of workqueue to control next IRQ event

This patch keeps the delay time (50 ms) for jack detection and zero delay time for the button press.
This patch improves the reaction of the button press.
Signed-off-by: default avatarShuming Fan <shumingf@realtek.com>
Link: https://lore.kernel.org/r/20210309085827.32032-1-shumingf@realtek.com
Tested-by Curtis Malainey <cujomalainey@chromium.org>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent d59cfc65
...@@ -78,7 +78,7 @@ static irqreturn_t rt5682_irq(int irq, void *data) ...@@ -78,7 +78,7 @@ static irqreturn_t rt5682_irq(int irq, void *data)
struct rt5682_priv *rt5682 = data; struct rt5682_priv *rt5682 = data;
mod_delayed_work(system_power_efficient_wq, mod_delayed_work(system_power_efficient_wq,
&rt5682->jack_detect_work, msecs_to_jiffies(250)); &rt5682->jack_detect_work, msecs_to_jiffies(rt5682->irq_work_delay_time));
return IRQ_HANDLED; return IRQ_HANDLED;
} }
......
...@@ -677,7 +677,7 @@ static int rt5682_interrupt_callback(struct sdw_slave *slave, ...@@ -677,7 +677,7 @@ static int rt5682_interrupt_callback(struct sdw_slave *slave,
if (status->control_port & 0x4) { if (status->control_port & 0x4) {
mod_delayed_work(system_power_efficient_wq, mod_delayed_work(system_power_efficient_wq,
&rt5682->jack_detect_work, msecs_to_jiffies(250)); &rt5682->jack_detect_work, msecs_to_jiffies(rt5682->irq_work_delay_time));
} }
return 0; return 0;
......
...@@ -1094,6 +1094,7 @@ void rt5682_jack_detect_handler(struct work_struct *work) ...@@ -1094,6 +1094,7 @@ void rt5682_jack_detect_handler(struct work_struct *work)
/* jack was out, report jack type */ /* jack was out, report jack type */
rt5682->jack_type = rt5682->jack_type =
rt5682_headset_detect(rt5682->component, 1); rt5682_headset_detect(rt5682->component, 1);
rt5682->irq_work_delay_time = 0;
} else if ((rt5682->jack_type & SND_JACK_HEADSET) == } else if ((rt5682->jack_type & SND_JACK_HEADSET) ==
SND_JACK_HEADSET) { SND_JACK_HEADSET) {
/* jack is already in, report button event */ /* jack is already in, report button event */
...@@ -1139,6 +1140,7 @@ void rt5682_jack_detect_handler(struct work_struct *work) ...@@ -1139,6 +1140,7 @@ void rt5682_jack_detect_handler(struct work_struct *work)
} else { } else {
/* jack out */ /* jack out */
rt5682->jack_type = rt5682_headset_detect(rt5682->component, 0); rt5682->jack_type = rt5682_headset_detect(rt5682->component, 0);
rt5682->irq_work_delay_time = 50;
} }
snd_soc_jack_report(rt5682->hs_jack, rt5682->jack_type, snd_soc_jack_report(rt5682->hs_jack, rt5682->jack_type,
......
...@@ -1439,6 +1439,7 @@ struct rt5682_priv { ...@@ -1439,6 +1439,7 @@ struct rt5682_priv {
int pll_out[RT5682_PLLS]; int pll_out[RT5682_PLLS];
int jack_type; int jack_type;
int irq_work_delay_time;
}; };
extern const char *rt5682_supply_names[RT5682_NUM_SUPPLIES]; extern const char *rt5682_supply_names[RT5682_NUM_SUPPLIES];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment