backlight: lcd: Rearrange code in fb_notifier_callback()
authorThomas Zimmermann <tzimmermann@suse.de>
Fri, 6 Sep 2024 07:52:15 +0000 (09:52 +0200)
committerLee Jones <lee@kernel.org>
Mon, 30 Sep 2024 15:49:41 +0000 (16:49 +0100)
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>
drivers/video/backlight/lcd.c

index ceec90c..2f57d68 100644 (file)
 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;
 }