diff options
author | Luca Tettamanti <kronos.it@gmail.com> | 2012-08-02 09:30:27 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2012-09-20 13:10:36 -0400 |
commit | 8a37c65df9dcbd1c891df2b4a94157999b654841 (patch) | |
tree | 9e264f3648cfb9e7d9ee6ee4cfcd882a3755e519 /drivers/acpi/video.c | |
parent | c49170742d6928b16fb3839b47a94cc41630dbe0 (diff) |
ACPI video: allow events handlers to veto the keypress
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>
Diffstat (limited to 'drivers/acpi/video.c')
-rw-r--r-- | drivers/acpi/video.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index 1e0a9e17c31d..f94d4c818fc7 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c | |||
@@ -1448,8 +1448,7 @@ static void acpi_video_bus_notify(struct acpi_device *device, u32 event) | |||
1448 | case ACPI_VIDEO_NOTIFY_SWITCH: /* User requested a switch, | 1448 | case ACPI_VIDEO_NOTIFY_SWITCH: /* User requested a switch, |
1449 | * most likely via hotkey. */ | 1449 | * most likely via hotkey. */ |
1450 | acpi_bus_generate_proc_event(device, event, 0); | 1450 | acpi_bus_generate_proc_event(device, event, 0); |
1451 | if (!acpi_notifier_call_chain(device, event, 0)) | 1451 | keycode = KEY_SWITCHVIDEOMODE; |
1452 | keycode = KEY_SWITCHVIDEOMODE; | ||
1453 | break; | 1452 | break; |
1454 | 1453 | ||
1455 | case ACPI_VIDEO_NOTIFY_PROBE: /* User plugged in or removed a video | 1454 | 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) | |||
1479 | break; | 1478 | break; |
1480 | } | 1479 | } |
1481 | 1480 | ||
1482 | if (event != ACPI_VIDEO_NOTIFY_SWITCH) | 1481 | if (acpi_notifier_call_chain(device, event, 0)) |
1483 | acpi_notifier_call_chain(device, event, 0); | 1482 | /* Something vetoed the keypress. */ |
1483 | keycode = 0; | ||
1484 | 1484 | ||
1485 | if (keycode) { | 1485 | if (keycode) { |
1486 | input_report_key(input, keycode, 1); | 1486 | input_report_key(input, keycode, 1); |