mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
backlight: lcd: Test against struct fb_info.lcd_dev
Add struct fb_info.lcd_dev for fbdev drivers to store a reference to their lcd device. Update the lcd's fb_notifier_callback() to test for this field. The lcd module can now detect if an lcd device belongs to an fbdev device. This works similar to the bl_dev for backlights and will allow for the removal of the check_fb callback from several fbdev driver's lcd devices. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org> Link: https://lore.kernel.org/r/20240906075439.98476-3-tzimmermann@suse.de Signed-off-by: Lee Jones <lee@kernel.org>
This commit is contained in:
parent
d36870367c
commit
26228256b7
@ -30,6 +30,7 @@ static int fb_notifier_callback(struct notifier_block *self,
|
||||
struct lcd_device *ld = container_of(self, struct lcd_device, fb_notif);
|
||||
struct fb_event *evdata = data;
|
||||
struct fb_info *info = evdata->info;
|
||||
struct lcd_device *fb_lcd = fb_lcd_device(info);
|
||||
|
||||
guard(mutex)(&ld->ops_lock);
|
||||
|
||||
@ -37,6 +38,8 @@ static int fb_notifier_callback(struct notifier_block *self,
|
||||
return 0;
|
||||
if (ld->ops->check_fb && !ld->ops->check_fb(ld, info))
|
||||
return 0;
|
||||
if (fb_lcd && fb_lcd != ld)
|
||||
return 0;
|
||||
|
||||
if (event == FB_EVENT_BLANK) {
|
||||
if (ld->ops->set_power)
|
||||
|
@ -21,6 +21,7 @@ struct fb_info;
|
||||
struct file;
|
||||
struct i2c_adapter;
|
||||
struct inode;
|
||||
struct lcd_device;
|
||||
struct module;
|
||||
struct notifier_block;
|
||||
struct page;
|
||||
@ -480,6 +481,13 @@ struct fb_info {
|
||||
struct mutex bl_curve_mutex;
|
||||
u8 bl_curve[FB_BACKLIGHT_LEVELS];
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Assigned LCD device; set before framebuffer
|
||||
* registration, remove after unregister
|
||||
*/
|
||||
struct lcd_device *lcd_dev;
|
||||
|
||||
#ifdef CONFIG_FB_DEFERRED_IO
|
||||
struct delayed_work deferred_work;
|
||||
unsigned long npagerefs;
|
||||
@ -754,6 +762,11 @@ static inline struct backlight_device *fb_bl_device(struct fb_info *info)
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline struct lcd_device *fb_lcd_device(struct fb_info *info)
|
||||
{
|
||||
return info->lcd_dev;
|
||||
}
|
||||
|
||||
/* fbmon.c */
|
||||
#define FB_MAXTIMINGS 0
|
||||
#define FB_VSYNCTIMINGS 1
|
||||
|
Loading…
Reference in New Issue
Block a user