diff options
author | Thomas Zimmermann <tzimmermann@suse.de> | 2024-09-06 09:52:15 +0200 |
---|---|---|
committer | Lee Jones <lee@kernel.org> | 2024-09-30 16:49:41 +0100 |
commit | d36870367c187daaa8a2c487d5ff1d57141eb039 (patch) | |
tree | 747412997070d7a23a1dc56199dec24fa9cd5601 | |
parent | 9852d85ec9d492ebef56dc5f229416c925758edc (diff) |
backlight: lcd: Rearrange code in fb_notifier_callback()
First acquire the ops_lock and do all tests while holding it. Rearranges
the code in lcd's fb_notifier_callback() to resemble the callback in
the backlight module. This will simplify later changes to these tests.
v2:
- avoid gotos by using guard(mutex) (Daniel)
- fix typos in commit description (Daniel)
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
Link: https://lore.kernel.org/r/20240906075439.98476-2-tzimmermann@suse.de
Signed-off-by: Lee Jones <lee@kernel.org>
-rw-r--r-- | drivers/video/backlight/lcd.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c index ceec90ca758b..2f57d6867d42 100644 --- a/drivers/video/backlight/lcd.c +++ b/drivers/video/backlight/lcd.c @@ -27,24 +27,25 @@ static int fb_notifier_callback(struct notifier_block *self, unsigned long event, void *data) { - struct lcd_device *ld; + struct lcd_device *ld = container_of(self, struct lcd_device, fb_notif); struct fb_event *evdata = data; + struct fb_info *info = evdata->info; + + guard(mutex)(&ld->ops_lock); - ld = container_of(self, struct lcd_device, fb_notif); if (!ld->ops) return 0; + if (ld->ops->check_fb && !ld->ops->check_fb(ld, info)) + return 0; - mutex_lock(&ld->ops_lock); - if (!ld->ops->check_fb || ld->ops->check_fb(ld, evdata->info)) { - if (event == FB_EVENT_BLANK) { - if (ld->ops->set_power) - ld->ops->set_power(ld, *(int *)evdata->data); - } else { - if (ld->ops->set_mode) - ld->ops->set_mode(ld, evdata->data); - } + if (event == FB_EVENT_BLANK) { + if (ld->ops->set_power) + ld->ops->set_power(ld, *(int *)evdata->data); + } else { + if (ld->ops->set_mode) + ld->ops->set_mode(ld, evdata->data); } - mutex_unlock(&ld->ops_lock); + return 0; } |