ACPI video: allow events handlers to veto the keypress
authorLuca Tettamanti <kronos.it@gmail.com>
Thu, 2 Aug 2012 13:30:27 +0000 (15:30 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 20 Sep 2012 17:10:36 +0000 (13:10 -0400)
The standard video events may be overloaded for device specific
purposes. For example AMD ACPI interface overloads
ACPI_VIDEO_NOTIFY_PROBE (0x81) to signal AMD-specific events. In such
cases we don't want to send the keypress (KEY_SWITCHVIDEOMODE) to the
userspace because the user did not press the mode switch key (the
spurious keypress confuses the DE which usually changes the
display configuration and messes up a dual-screen setup).
This patch gives the handlers the chance to examine the event and
block the keypress if the event is device specific.
v2: refactor as suggested by Zhang Rui <rui.zhang@intel.com>

Signed-off-by: Luca Tettamanti <kronos.it@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/acpi/video.c

index 1e0a9e1..f94d4c8 100644 (file)
@@ -1448,8 +1448,7 @@ static void acpi_video_bus_notify(struct acpi_device *device, u32 event)
        case ACPI_VIDEO_NOTIFY_SWITCH:  /* User requested a switch,
                                         * most likely via hotkey. */
                acpi_bus_generate_proc_event(device, event, 0);
-               if (!acpi_notifier_call_chain(device, event, 0))
-                       keycode = KEY_SWITCHVIDEOMODE;
+               keycode = KEY_SWITCHVIDEOMODE;
                break;
 
        case ACPI_VIDEO_NOTIFY_PROBE:   /* User plugged in or removed a video
@@ -1479,8 +1478,9 @@ static void acpi_video_bus_notify(struct acpi_device *device, u32 event)
                break;
        }
 
-       if (event != ACPI_VIDEO_NOTIFY_SWITCH)
-               acpi_notifier_call_chain(device, event, 0);
+       if (acpi_notifier_call_chain(device, event, 0))
+               /* Something vetoed the keypress. */
+               keycode = 0;
 
        if (keycode) {
                input_report_key(input, keycode, 1);