summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorThomas Zimmermann <tzimmermann@suse.de>2025-03-21 10:54:03 +0100
committerLee Jones <lee@kernel.org>2025-04-10 10:39:13 +0100
commitdc2139c0aa3283e5749109641af1878ed7bf7371 (patch)
treeaaa0aefc0bb2bee94c34bde0ba187cef1e6c3da2 /drivers/video/fbdev
parent28f8bab711c0984005a6dd4cc980b4ba8409b817 (diff)
leds: backlight trigger: Replace fb events with a dedicated function call
Remove support for fb events from the led backlight trigger. Provide the helper ledtrig_backlight_blank() instead. Call it from fbdev to inform the trigger of changes to a display's blank state. Fbdev maintains a list of all installed notifiers. Instead of the fbdev notifiers, maintain an internal list of led backlight triggers. v3: - export ledtrig_backlight_blank() v2: - maintain global list of led backlight triggers (Lee) - avoid IS_REACHABLE() in source file (Lee) - notify on changes to blank state instead of display state - use lock guards - initialize led list and list mutex Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Acked-by: Simona Vetter <simona.vetter@ffwll.ch> Link: https://lore.kernel.org/r/20250321095517.313713-11-tzimmermann@suse.de Signed-off-by: Lee Jones <lee@kernel.org>
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/core/fbmem.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 001662c606d7..f089f72ec75a 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -16,6 +16,7 @@
#include <linux/fb.h>
#include <linux/fbcon.h>
#include <linux/lcd.h>
+#include <linux/leds.h>
#include <video/nomodeset.h>
@@ -369,11 +370,17 @@ static void fb_lcd_notify_blank(struct fb_info *info)
lcd_notify_blank_all(info->device, power);
}
+static void fb_ledtrig_backlight_notify_blank(struct fb_info *info)
+{
+ if (info->blank == FB_BLANK_UNBLANK)
+ ledtrig_backlight_blank(false);
+ else
+ ledtrig_backlight_blank(true);
+}
+
int fb_blank(struct fb_info *info, int blank)
{
int old_blank = info->blank;
- struct fb_event event;
- int data[2];
int ret;
if (!info->fbops->fb_blank)
@@ -382,11 +389,6 @@ int fb_blank(struct fb_info *info, int blank)
if (blank > FB_BLANK_POWERDOWN)
blank = FB_BLANK_POWERDOWN;
- data[0] = blank;
- data[1] = old_blank;
- event.info = info;
- event.data = data;
-
info->blank = blank;
ret = info->fbops->fb_blank(blank, info);
@@ -395,8 +397,7 @@ int fb_blank(struct fb_info *info, int blank)
fb_bl_notify_blank(info, old_blank);
fb_lcd_notify_blank(info);
-
- fb_notifier_call_chain(FB_EVENT_BLANK, &event);
+ fb_ledtrig_backlight_notify_blank(info);
return 0;