[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