All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vojtech Pavlik <vojtech@suse.cz>
To: Marko Macek <Marko.Macek@gmx.net>
Cc: Nish Aravamudan <nish.aravamudan@gmail.com>,
	thoffman@arnor.net, vanackere@lif.univ-mrs.fr,
	linux-kernel@vger.kernel.org
Subject: Re: USB input ati_remote autorepeat problem
Date: Sun, 2 Jul 2006 21:18:47 +0200	[thread overview]
Message-ID: <20060702191846.GA10354@suse.cz> (raw)
In-Reply-To: <44A81279.6040309@gmx.net>

On Sun, Jul 02, 2006 at 08:37:45PM +0200, Marko Macek wrote:
> Vojtech Pavlik wrote:
> >On Tue, Jun 27, 2006 at 02:46:39PM -0700, Nish Aravamudan wrote:
> >  
> >>On 6/27/06, Marko Macek <Marko.Macek@gmx.net> wrote:
> >>    
> >>>Hello!
> >>>
> >>>I have problems with autorepeat in ati_remote (drivers/usb/input) driver
> >>>in "recent" kernels: all keys start repeating immediately without some
> >>>delay.
> >>>
> >>>This makes some things, like changing the channel prev/next or toggling
> >>>fullscreen, etc... impossible/hard.
> >>>
> >>>The problem seems to be related to FILTER_TIME and HZ=250 (which I
> >>>forgot to change).
> >>>
> >>>FILTER_TIME is defined to HZ / 20, and since 250 is not divisible by 20,
> >>>the time will be too short to ignore enough events.
> >>>
> >>>Defining FILTER_TIME to HZ / 20 + 1 seems to fix things, but I'm not
> >>>sure if there are any bad side effects.
> >>>      
> >>Can you try just defining it to msecs_to_jiffies(50)? That should
> >>handle the various HZ cases just fine.
> >>    
> > 
> >Indeed, that would be thr right solution. Even better would be to 
> >
> >	#define	FILTER_TIME	50	/* 50 msec */
> >
> >and later use
> >
> >	msecs_to_jiffies(FILTER_TIME)
> >
> >in the code.
> There is still a problem (reproducible in HZ=100, at least), because 
> msec_to_jiffies
> 
> #if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ)
>        return (m + (MSEC_PER_SEC / HZ) - 1) / (MSEC_PER_SEC / HZ);
> 
> Calculates 5 ticks for 50ms, which might seem to be correct, but it 
> really isn't,  since 5 ticks can happen in as little as 40 (+eps) ms.
> 
> I wonder if this usage of msec_to_jiffies is correct (seems wrong to me).
> 
> A working (but not clean) patch might look like this:

The patch looks OK to me. You could as well use 60 msec to be on the
safe side, and closer to the "/ 16" version.

> --- linux-2.6.17.orig/drivers/usb/input/ati_remote.c    2006-06-29 
> 21:18:15.000000000 +0200
> 
> +++ linux-2.6.17/drivers/usb/input/ati_remote.c    2006-07-02 
> 20:10:17.000000000 +0200
> 
> @@ -155,9 +155,8 @@
> 
>  * events. The hardware generates 5 events for the first keypress
> 
>  * and we have to take this into account for an accurate repeat
> 
>  * behaviour.
> 
> - * (HZ / 20) == 50 ms and works well for me.
> 
>  */
> 
> -#define FILTER_TIME (HZ / 20)
> 
> +#define FILTER_TIME 51 /* msec */
> 
> 
> 
> struct ati_remote {
> 
>     struct input_dev *idev;
> 
> @@ -470,7 +469,7 @@
> 
>         /* Filter duplicate events which happen "too close" together. */
> 
>         if ((ati_remote->old_data[0] == data[1]) &&
> 
>             (ati_remote->old_data[1] == data[2]) &&
> 
> -            time_before(jiffies, ati_remote->old_jiffies + FILTER_TIME)) {
> 
> +            time_before(jiffies, ati_remote->old_jiffies + 
> msecs_to_jiffies(FILTER_TIME))) {
> 
>             ati_remote->repeat_count++;
> 
>         } else {
> 
>             ati_remote->repeat_count = 0;
> 
> 
> Some googling reveals that an old patch used HZ >> 4 (HZ / 16) instead 
> of HZ / 20;
> 
> Perhaps using msec_to_jiffies(50) + 1 would be the correct fix?
> 
>    Mark
> 
> 
> 

-- 
Vojtech Pavlik
Director SuSE Labs

      reply	other threads:[~2006-07-02 19:19 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-27 19:51 USB input ati_remote autorepeat problem Marko Macek
2006-06-27 20:09 ` John Daiker
2006-06-27 21:46 ` Nish Aravamudan
2006-06-28  6:52   ` Vojtech Pavlik
2006-07-02 18:37     ` Marko Macek
2006-07-02 19:18       ` Vojtech Pavlik [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060702191846.GA10354@suse.cz \
    --to=vojtech@suse.cz \
    --cc=Marko.Macek@gmx.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nish.aravamudan@gmail.com \
    --cc=thoffman@arnor.net \
    --cc=vanackere@lif.univ-mrs.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.