Commit 05bc59a0 authored by Hans de Goede's avatar Hans de Goede Committed by Rafael J. Wysocki

ACPI / video: Add a module option to disable the reporting of keypresses

Add a module option to disable the reporting of keypresses, in some buggy
firmware implementatinon, the reported events are wrong. E.g. they lag
reality by one event in the case triggering the writing of this patch.

In this case it is better to not forward these wrong events to userspace
(esp.) when there is another source of the same events which is not buggy.

Note this is only intended to work around implementations which send
events which are plain wrong. In some cases we get double events, e.g.
from both acpi-video and the atkbd driver, in this case acpi-video is
considered the canonical source, and the events from the other source
should be filtered (using e.g. /lib/udev/hwdb.d/60-keyboard.hwdb).
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 7714687a
...@@ -77,6 +77,13 @@ module_param(allow_duplicates, bool, 0644); ...@@ -77,6 +77,13 @@ module_param(allow_duplicates, bool, 0644);
static int disable_backlight_sysfs_if = -1; static int disable_backlight_sysfs_if = -1;
module_param(disable_backlight_sysfs_if, int, 0444); module_param(disable_backlight_sysfs_if, int, 0444);
#define REPORT_OUTPUT_KEY_EVENTS 0x01
#define REPORT_BRIGHTNESS_KEY_EVENTS 0x02
static int report_key_events = -1;
module_param(report_key_events, int, 0644);
MODULE_PARM_DESC(report_key_events,
"0: none, 1: output changes, 2: brightness changes, 3: all");
static bool device_id_scheme = false; static bool device_id_scheme = false;
module_param(device_id_scheme, bool, 0444); module_param(device_id_scheme, bool, 0444);
...@@ -1480,7 +1487,7 @@ static void acpi_video_bus_notify(struct acpi_device *device, u32 event) ...@@ -1480,7 +1487,7 @@ static void acpi_video_bus_notify(struct acpi_device *device, u32 event)
/* Something vetoed the keypress. */ /* Something vetoed the keypress. */
keycode = 0; keycode = 0;
if (keycode) { if (keycode && (report_key_events & REPORT_OUTPUT_KEY_EVENTS)) {
input_report_key(input, keycode, 1); input_report_key(input, keycode, 1);
input_sync(input); input_sync(input);
input_report_key(input, keycode, 0); input_report_key(input, keycode, 0);
...@@ -1544,7 +1551,7 @@ static void acpi_video_device_notify(acpi_handle handle, u32 event, void *data) ...@@ -1544,7 +1551,7 @@ static void acpi_video_device_notify(acpi_handle handle, u32 event, void *data)
acpi_notifier_call_chain(device, event, 0); acpi_notifier_call_chain(device, event, 0);
if (keycode) { if (keycode && (report_key_events & REPORT_BRIGHTNESS_KEY_EVENTS)) {
input_report_key(input, keycode, 1); input_report_key(input, keycode, 1);
input_sync(input); input_sync(input);
input_report_key(input, keycode, 0); input_report_key(input, keycode, 0);
...@@ -2080,7 +2087,8 @@ bool acpi_video_handles_brightness_key_presses(void) ...@@ -2080,7 +2087,8 @@ bool acpi_video_handles_brightness_key_presses(void)
have_video_busses = !list_empty(&video_bus_head); have_video_busses = !list_empty(&video_bus_head);
mutex_unlock(&video_list_lock); mutex_unlock(&video_list_lock);
return have_video_busses; return have_video_busses &&
(report_key_events & REPORT_BRIGHTNESS_KEY_EVENTS);
} }
EXPORT_SYMBOL(acpi_video_handles_brightness_key_presses); EXPORT_SYMBOL(acpi_video_handles_brightness_key_presses);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment