aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/video.c
diff options
context:
space:
mode:
authorLuca Tettamanti <kronos.it@gmail.com>2012-08-02 09:30:27 -0400
committerAlex Deucher <alexander.deucher@amd.com>2012-09-20 13:10:36 -0400
commit8a37c65df9dcbd1c891df2b4a94157999b654841 (patch)
tree9e264f3648cfb9e7d9ee6ee4cfcd882a3755e519 /drivers/acpi/video.c
parentc49170742d6928b16fb3839b47a94cc41630dbe0 (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.c8
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);