Re: [PATCH 001/001] INPUT: new ioctl's to retrieve values of EV_REP and EV_SND event codes

Dmitry Torokhov
2006-04-26T14:24:36Z

[-- Attachment #1: Type: text/plain, Size: 1396 bytes --]

On 4/26/06, bjdouma <bjdouma@xs4all.nl> wrote:
> On Wed, Apr 26, 2006 at 01:06:38AM -0400, Dmitry Torokhov wrote:
>
> > What do you gius think about the patch below?
>
> Works like a charm.
> Why is it though that we need EVIOCSREP, when I can set PERIOD and
> DELAY through writing a struct input_event directly to the file
> descriptor? I've been doing that for quite some time, having
> softrepeat=1 (I need a quick keyboard, DELAY=120, PERIOD=18).
>
> One typo in the patch:
> +#define EVIOCSREP _IOW('E', 0x03, int[2]) /* get repeat settings */
> should be:
> +#define EVIOCSREP _IOW('E', 0x03, int[2]) /* set repeat settings */
>

Ah, OK, thanks, I will fix that.

> Now, the EV_SND bitmap is still broken.
> I don't think it's simply a matter of adding change_bit(code,dev->snd)
> in the EV_SND part of input.c. During a quick test the bitmap
> became confused, after setting both bell and tone through writing
> a struct input_event to the file descriptor of the pcspkr's event
> file in /dev/input/, then setting just bell to 0.
>

Are you saying that both bits were set to 0 or that you could not hear
the tone after killing bell? If latter then it is sort of pcspkr
problem as from input core POV tone is still active.

Btw, your patch - did it resemble something like attached?

--
Dmitry

[-- Attachment #2: input-fix-EVIOCGSND.patch --]
[-- Type: text/plain, Size: 619 bytes --]

Input: make EVIOCGSND return meaningful data

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
---
drivers/input/input.c | 3 +++
1 file changed, 3 insertions(+)

Index: linux/drivers/input/input.c
===================================================================
--- linux.orig/drivers/input/input.c
+++ linux/drivers/input/input.c
@@ -155,6 +155,9 @@ void input_event(struct input_dev *dev,
if (code > SND_MAX || !test_bit(code, dev->sndbit))
return;

+ if (!!test_bit(code, dev->snd) != !!value)
+ change_bit(code, dev->snd);
+
if (dev->event) dev->event(dev, type, code, value);

break;