Re: [PATCH] ASoC: rt5682: remove jack detect delay
On Thu, 18 Feb 2021 09:38:53 +0100, Shuming [范書銘] shumingf@realtek.com wrote:
There is a 250ms delay on the jack detect interrupt currently, this delay is observable to users who are using inline controls. It can also mask multiple presses which is a negative experience.
Cc: Bard liao yung-chuan.liao@linux.intel.com Cc: Shuming Fan shumingf@realtek.com
Signed-off-by: Curtis Malainey cujomalainey@chromium.org
sound/soc/codecs/rt5682-i2c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/codecs/rt5682-i2c.c b/sound/soc/codecs/rt5682-i2c.c index 93c1603b42f1..b15c3e7d1f59 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, 0);
How about using the device property to adjust the delay time? I think it should keep the workqueue to do the jack/button detection because the jack type detection will take some times to do.
One might check twice (or more) if it's not certain, too. That is, check the jack immediately, and if the jack state really changed, report it so. OTOH, if the jack state doesn't change from the old state, it can retry after some delay.
thanks,
Takashi
Thanks Takashi and Shuming
On Thu, Feb 18, 2021 at 12:44 AM Takashi Iwai tiwai@suse.de wrote:
On Thu, 18 Feb 2021 09:38:53 +0100, Shuming [范書銘] shumingf@realtek.com wrote:
There is a 250ms delay on the jack detect interrupt currently, this
delay is
observable to users who are using inline controls. It can also mask
multiple
presses which is a negative experience.
Cc: Bard liao yung-chuan.liao@linux.intel.com Cc: Shuming Fan shumingf@realtek.com
Signed-off-by: Curtis Malainey cujomalainey@chromium.org
sound/soc/codecs/rt5682-i2c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/codecs/rt5682-i2c.c
b/sound/soc/codecs/rt5682-i2c.c
index 93c1603b42f1..b15c3e7d1f59 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, 0);
How about using the device property to adjust the delay time? I think it should keep the workqueue to do the jack/button detection
because the jack type detection will take some times to do.
I am trying to understand the purpose of this delay currently, won't the press already be registered since we have an interrupt? Or does it need to stabilize? The reason is 250ms is well within human perception or even double tap time, which results in users possibly double tapping buttons but only seeing one press come through.
One might check twice (or more) if it's not certain, too. That is, check the jack immediately, and if the jack state really changed, report it so. OTOH, if the jack state doesn't change from the old state, it can retry after some delay.
I feel like this logic would cause more problems with fast presses unless the window was restricted down to sub 50ms.
thanks,
Takashi
On Thu, Feb 18, 2021 at 01:06:27PM -0800, Curtis Malainey wrote:
I am trying to understand the purpose of this delay currently, won't the press already be registered since we have an interrupt? Or does it need to stabilize? The reason is 250ms is well within human perception or even double tap time, which results in users possibly double tapping buttons but only seeing one press come through.
It's quite common to have lots of issues with debounce on jacks, especially around insert/removal - it looks like this delay covers both insert/removal and button presses so it may well be needed for robust handling of the actual jack insert.
On Mon, Feb 22, 2021 at 5:46 AM Mark Brown broonie@kernel.org wrote:
On Thu, Feb 18, 2021 at 01:06:27PM -0800, Curtis Malainey wrote:
I am trying to understand the purpose of this delay currently, won't the press already be registered since we have an interrupt? Or does it
need
to stabilize? The reason is 250ms is well within human perception or even double tap time, which results in users possibly double tapping buttons
but
only seeing one press come through.
Would a acceptable solution to everyone be
if inserted && buttonAction respond now else run workqueue
It's quite common to have lots of issues with debounce on jacks, especially around insert/removal - it looks like this delay covers both insert/removal and button presses so it may well be needed for robust handling of the actual jack insert.
On Mon, Feb 22, 2021 at 10:59:34AM -0800, Curtis Malainey wrote:
if inserted && buttonAction respond now else run workqueue
Are you sure that *zero* debounce is needed for the button presses? 250ms does look like a lot of time but zero might be going from one extreme to the other.
Are you sure that *zero* debounce is needed for the button presses? 250ms does look like a lot of time but zero might be going from one extreme to the other.
Fair point, I was looking at some other codecs and why they respond so quickly, it appears they have no fixed delay and just call schedule work. That being said, I can easily double tap <100ms. So Ideally i would like to keep this on the order of ~50ms at most. I am guessing Realtek will want to keep the 250ms for jack detect still.
Would queueing two separate jobs with two different delays be the simple way to go? Realtek does this sound fine to you?
Curtis
On Tue, Feb 23, 2021 at 10:50:18AM -0800, Curtis Malainey wrote:
Are you sure that *zero* debounce is needed for the button presses? 250ms does look like a lot of time but zero might be going from one extreme to the other.
Fair point, I was looking at some other codecs and why they respond so quickly, it appears they have no fixed delay and just call schedule work. That being said, I can easily double tap <100ms. So Ideally i would like to keep this on the order of ~50ms at most. I am guessing Realtek will want to keep the 250ms for jack detect still.
Those feel like plausible numbers to me assuming there's no hardware debounce.
Would queueing two separate jobs with two different delays be the simple way to go? Realtek does this sound fine to you?
Possibly just queuing the same job with different timeouts? I don't have particularly strong feelings assuming the resulting code make sense.
Would queueing two separate jobs with two different delays be the simple way to go? Realtek does this sound fine to you?
Possibly just queuing the same job with different timeouts? I don't have particularly strong feelings assuming the resulting code make sense.
And just track how we were last scheduled so we only check the correct thing? Sure that works too.
participants (3)
-
Curtis Malainey
-
Mark Brown
-
Takashi Iwai