[PATCH] ASoC: rt5682: add delay time of workqueue to control next IRQ event
Curtis Malainey
cujomalainey at google.com
Tue Mar 9 19:38:37 CET 2021
On Tue, Mar 9, 2021 at 12:58 AM <shumingf at realtek.com> wrote:
>
> From: Shuming Fan <shumingf at realtek.com>
>
> 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: Shuming Fan <shumingf at realtek.com>
Thanks for fixing this up
Tested-by Curtis Malainey <cujomalainey at chromium.org>
> ---
> sound/soc/codecs/rt5682-i2c.c | 2 +-
> sound/soc/codecs/rt5682-sdw.c | 2 +-
> sound/soc/codecs/rt5682.c | 2 ++
> sound/soc/codecs/rt5682.h | 1 +
> 4 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/sound/soc/codecs/rt5682-i2c.c b/sound/soc/codecs/rt5682-i2c.c
> index 93c1603b42f1..8ea9f1d9fec0 100644
> --- a/sound/soc/codecs/rt5682-i2c.c
> +++ b/sound/soc/codecs/rt5682-i2c.c
> @@ -78,7 +78,7 @@ static irqreturn_t rt5682_irq(int irq, void *data)
> struct rt5682_priv *rt5682 = data;
>
> 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;
> }
> diff --git a/sound/soc/codecs/rt5682-sdw.c b/sound/soc/codecs/rt5682-sdw.c
> index 5e097f776561..fed80c8f994f 100644
> --- a/sound/soc/codecs/rt5682-sdw.c
> +++ b/sound/soc/codecs/rt5682-sdw.c
> @@ -677,7 +677,7 @@ static int rt5682_interrupt_callback(struct sdw_slave *slave,
>
> if (status->control_port & 0x4) {
> 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;
> diff --git a/sound/soc/codecs/rt5682.c b/sound/soc/codecs/rt5682.c
> index 559dc6db1f7c..0e2a10ed11da 100644
> --- a/sound/soc/codecs/rt5682.c
> +++ b/sound/soc/codecs/rt5682.c
> @@ -1094,6 +1094,7 @@ void rt5682_jack_detect_handler(struct work_struct *work)
> /* jack was out, report jack type */
> rt5682->jack_type =
> rt5682_headset_detect(rt5682->component, 1);
> + rt5682->irq_work_delay_time = 0;
> } else if ((rt5682->jack_type & SND_JACK_HEADSET) ==
> SND_JACK_HEADSET) {
> /* jack is already in, report button event */
> @@ -1139,6 +1140,7 @@ void rt5682_jack_detect_handler(struct work_struct *work)
> } else {
> /* jack out */
> 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,
> diff --git a/sound/soc/codecs/rt5682.h b/sound/soc/codecs/rt5682.h
> index 1f9c51a5b9bf..74ff66767016 100644
> --- a/sound/soc/codecs/rt5682.h
> +++ b/sound/soc/codecs/rt5682.h
> @@ -1439,6 +1439,7 @@ struct rt5682_priv {
> int pll_out[RT5682_PLLS];
>
> int jack_type;
> + int irq_work_delay_time;
> };
>
> extern const char *rt5682_supply_names[RT5682_NUM_SUPPLIES];
> --
> 2.29.0
>
More information about the Alsa-devel
mailing list