public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Marko Macek <Marko.Macek@gmx.net>
To: Vojtech Pavlik <vojtech@suse.cz>
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, 02 Jul 2006 20:37:45 +0200	[thread overview]
Message-ID: <44A81279.6040309@gmx.net> (raw)
In-Reply-To: <20060628065204.GC5546@suse.cz>

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:

--- 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


  reply	other threads:[~2006-07-02 18:38 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 [this message]
2006-07-02 19:18       ` Vojtech Pavlik

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=44A81279.6040309@gmx.net \
    --to=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 \
    --cc=vojtech@suse.cz \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox