Input: keyboard - don't override beep with a bell
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 16 Dec 2009 00:26:53 +0000 (16:26 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 16 Dec 2009 05:48:55 +0000 (21:48 -0800)
The commit 66d2a5952eab875f1286e04f738ef029afdaf013 introduces a bug:
for every beep requested, a bell is also generated.

Reported-by: Paul Martin <pm@debian.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/char/keyboard.c

index 5619007e7e050bc996182232c50cd3f1bbb68960..f706b1dffdb31f082144f419fb5d28d6d8ccbbfc 100644 (file)
@@ -233,7 +233,8 @@ int setkeycode(unsigned int scancode, unsigned int keycode)
 }
 
 /*
- * Making beeps and bells.
+ * Making beeps and bells. Note that we prefer beeps to bells, but when
+ * shutting the sound off we do both.
  */
 
 static int kd_sound_helper(struct input_handle *handle, void *data)
@@ -242,9 +243,12 @@ static int kd_sound_helper(struct input_handle *handle, void *data)
        struct input_dev *dev = handle->dev;
 
        if (test_bit(EV_SND, dev->evbit)) {
-               if (test_bit(SND_TONE, dev->sndbit))
+               if (test_bit(SND_TONE, dev->sndbit)) {
                        input_inject_event(handle, EV_SND, SND_TONE, *hz);
-               if (test_bit(SND_BELL, handle->dev->sndbit))
+                       if (*hz)
+                               return 0;
+               }
+               if (test_bit(SND_BELL, dev->sndbit))
                        input_inject_event(handle, EV_SND, SND_BELL, *hz ? 1 : 0);
        }