Patch "ACPI: video: Fix acpi_video_handles_brightness_key_presses()" has been added to the 5.18-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ACPI: video: Fix acpi_video_handles_brightness_key_presses()

to the 5.18-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     acpi-video-fix-acpi_video_handles_brightness_key_pre.patch
and it can be found in the queue-5.18 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit d986c87f7e648b55df6ab3ba9bbbb8eb64acda3c
Author: Hans de Goede <hdegoede@xxxxxxxxxx>
Date:   Wed Jul 13 23:11:01 2022 +0200

    ACPI: video: Fix acpi_video_handles_brightness_key_presses()
    
    [ Upstream commit 5ad26161a371e4aa2d2553286f0cac580987a493 ]
    
    Commit 3a0cf7ab8df3 ("ACPI: video: Change how we determine if brightness
    key-presses are handled") made acpi_video_handles_brightness_key_presses()
    report false when none of the ACPI Video Devices support backlight control.
    
    But it turns out that at least on a Dell Inspiron N4010 there is no ACPI
    backlight control, yet brightness hotkeys are still reported through
    the ACPI Video Bus; and since acpi_video_handles_brightness_key_presses()
    now returns false, brightness keypresses are now reported twice.
    
    To fix this rename the has_backlight flag to may_report_brightness_keys and
    also set it the first time a brightness key press event is received.
    
    Depending on the delivery of the other ACPI (WMI) event vs the ACPI Video
    Bus event this means that the first brightness key press might still get
    reported twice, but all further keypresses will be filtered as before.
    
    Note that this relies on other drivers reporting brightness key events
    calling acpi_video_handles_brightness_key_presses() when delivering
    the events (rather then once during driver probe). This is already
    required and documented in include/acpi/video.h:
    
    /*
     * Note: The value returned by acpi_video_handles_brightness_key_presses()
     * may change over time and should not be cached.
     */
    
    Fixes: 3a0cf7ab8df3 ("ACPI: video: Change how we determine if brightness key-presses are handled")
    Link: https://lore.kernel.org/regressions/CALF=6jEe5G8+r1Wo0vvz4GjNQQhdkLT5p8uCHn6ZXhg4nsOWow@xxxxxxxxxxxxxx/
    Reported-and-tested-by: Ben Greening <bgreening@xxxxxxxxx>
    Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
    Acked-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20220713211101.85547-2-hdegoede@xxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
index e4ea42b83b51..3bd0de69aa11 100644
--- a/drivers/acpi/acpi_video.c
+++ b/drivers/acpi/acpi_video.c
@@ -73,7 +73,7 @@ module_param(device_id_scheme, bool, 0444);
 static int only_lcd = -1;
 module_param(only_lcd, int, 0444);
 
-static bool has_backlight;
+static bool may_report_brightness_keys;
 static int register_count;
 static DEFINE_MUTEX(register_count_mutex);
 static DEFINE_MUTEX(video_list_lock);
@@ -1224,7 +1224,7 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
 	acpi_video_device_find_cap(data);
 
 	if (data->cap._BCM && data->cap._BCL)
-		has_backlight = true;
+		may_report_brightness_keys = true;
 
 	mutex_lock(&video->device_list_lock);
 	list_add_tail(&data->entry, &video->video_device_list);
@@ -1693,6 +1693,9 @@ static void acpi_video_device_notify(acpi_handle handle, u32 event, void *data)
 		break;
 	}
 
+	if (keycode)
+		may_report_brightness_keys = true;
+
 	acpi_notifier_call_chain(device, event, 0);
 
 	if (keycode && (report_key_events & REPORT_BRIGHTNESS_KEY_EVENTS)) {
@@ -2254,7 +2257,7 @@ void acpi_video_unregister(void)
 	if (register_count) {
 		acpi_bus_unregister_driver(&acpi_video_bus);
 		register_count = 0;
-		has_backlight = false;
+		may_report_brightness_keys = false;
 	}
 	mutex_unlock(&register_count_mutex);
 }
@@ -2276,7 +2279,7 @@ void acpi_video_unregister_backlight(void)
 
 bool acpi_video_handles_brightness_key_presses(void)
 {
-	return has_backlight &&
+	return may_report_brightness_keys &&
 	       (report_key_events & REPORT_BRIGHTNESS_KEY_EVENTS);
 }
 EXPORT_SYMBOL(acpi_video_handles_brightness_key_presses);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux