All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lee Jones <lee@kernel.org>
To: Thomas Zimmermann <tzimmermann@suse.de>
Cc: pavel@ucw.cz, danielt@kernel.org, jingoohan1@gmail.com,
	deller@gmx.de, simona@ffwll.ch, linux-leds@vger.kernel.org,
	dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org
Subject: Re: [PATCH 12/13] leds: backlight trigger: Replace fb events with a dedicated function call
Date: Tue, 11 Feb 2025 13:57:52 +0000	[thread overview]
Message-ID: <20250211135752.GT1868108@google.com> (raw)
In-Reply-To: <20250206154033.697495-13-tzimmermann@suse.de>

On Thu, 06 Feb 2025, Thomas Zimmermann wrote:

> 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.
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>  drivers/leds/trigger/ledtrig-backlight.c | 31 +++++-------------------
>  drivers/video/fbdev/core/fbmem.c         | 21 +++++++++-------
>  include/linux/leds.h                     |  6 +++++
>  3 files changed, 24 insertions(+), 34 deletions(-)
> 
> diff --git a/drivers/leds/trigger/ledtrig-backlight.c b/drivers/leds/trigger/ledtrig-backlight.c
> index f9317f93483b..e3ae4adc29e3 100644
> --- a/drivers/leds/trigger/ledtrig-backlight.c
> +++ b/drivers/leds/trigger/ledtrig-backlight.c
> @@ -10,7 +10,6 @@
>  #include <linux/kernel.h>
>  #include <linux/slab.h>
>  #include <linux/init.h>
> -#include <linux/fb.h>
>  #include <linux/leds.h>
>  #include "../leds.h"
>  
> @@ -21,7 +20,6 @@ struct bl_trig_notifier {
>  	struct led_classdev *led;
>  	int brightness;
>  	int old_status;
> -	struct notifier_block notifier;
>  	unsigned invert;
>  
>  	struct list_head entry;
> @@ -30,7 +28,7 @@ struct bl_trig_notifier {
>  static struct list_head ledtrig_backlight_list;
>  static struct mutex ledtrig_backlight_list_mutex;
>  
> -static void ledtrig_backlight_blank(struct bl_trig_notifier *n, bool on)
> +static void __ledtrig_backlight_blank(struct bl_trig_notifier *n, bool on)

I'm confused.  Didn't you just introduce this?

>  {
>  	struct led_classdev *led = n->led;
>  	int new_status = !on ? BLANK : UNBLANK;
> @@ -48,23 +46,14 @@ static void ledtrig_backlight_blank(struct bl_trig_notifier *n, bool on)
>  	n->old_status = new_status;
>  }
>  
> -static int fb_notifier_callback(struct notifier_block *p,
> -				unsigned long event, void *data)
> +void ledtrig_backlight_blank(bool on)
>  {
> -	struct bl_trig_notifier *n = container_of(p,
> -					struct bl_trig_notifier, notifier);
> -	struct fb_event *fb_event = data;
> -	int *blank;
> -
> -	/* If we aren't interested in this event, skip it immediately ... */
> -	if (event != FB_EVENT_BLANK)
> -		return 0;
> -
> -	blank = fb_event->data;
> +	struct bl_trig_notifier *n;
>  
> -	ledtrig_backlight_blank(n, !blank[0]);
> +	guard(mutex)(&ledtrig_backlight_list_mutex);
>  
> -	return 0;
> +	list_for_each_entry(n, &ledtrig_backlight_list, entry)
> +		__ledtrig_backlight_blank(n, on);
>  }
>  
>  static ssize_t bl_trig_invert_show(struct device *dev,
> @@ -110,8 +99,6 @@ ATTRIBUTE_GROUPS(bl_trig);
>  
>  static int bl_trig_activate(struct led_classdev *led)
>  {
> -	int ret;
> -
>  	struct bl_trig_notifier *n;
>  
>  	n = kzalloc(sizeof(struct bl_trig_notifier), GFP_KERNEL);
> @@ -122,11 +109,6 @@ static int bl_trig_activate(struct led_classdev *led)
>  	n->led = led;
>  	n->brightness = led->brightness;
>  	n->old_status = UNBLANK;
> -	n->notifier.notifier_call = fb_notifier_callback;
> -
> -	ret = fb_register_client(&n->notifier);
> -	if (ret)
> -		dev_err(led->dev, "unable to register backlight trigger\n");
>  
>  	mutex_lock(&ledtrig_backlight_list_mutex);
>  	list_add(&n->entry, &ledtrig_backlight_list);
> @@ -143,7 +125,6 @@ static void bl_trig_deactivate(struct led_classdev *led)
>  	list_del(&n->entry);
>  	mutex_unlock(&ledtrig_backlight_list_mutex);
>  
> -	fb_unregister_client(&n->notifier);
>  	kfree(n);
>  }
>  
> diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
> index fb7ca143a996..92c3fe2a7aff 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>
>  
> @@ -373,11 +374,19 @@ static void fb_lcd_notify_blank(struct fb_info *info)
>  #endif
>  }
>  
> +static void fb_ledtrig_backlight_notify_blank(struct fb_info *info)
> +{
> +#if IS_REACHABLE(CONFIG_LEDS_TRIGGER_BACKLIGHT)

#iferry is generally discouraged in C files.

Does is_defined() work for you?
/
> +	if (info->blank == FB_BLANK_UNBLANK)
> +		ledtrig_backlight_blank(true);

If !CONFIG_LEDS_TRIGGER_BACKLIGHT(), then ledtrig_backlight_blank() is a
noop anyway, right?  So why encompass it in the #if at all?

> +	else
> +		ledtrig_backlight_blank(false);
> +#endif
> +}
> +
>  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)
> @@ -386,11 +395,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);
> @@ -399,8 +403,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;
>  
> diff --git a/include/linux/leds.h b/include/linux/leds.h
> index 98f9719c924c..8c7c41888f7d 100644
> --- a/include/linux/leds.h
> +++ b/include/linux/leds.h
> @@ -640,6 +640,12 @@ static inline void ledtrig_flash_ctrl(bool on) {}
>  static inline void ledtrig_torch_ctrl(bool on) {}
>  #endif
>  
> +#if IS_ENABLED(CONFIG_LEDS_TRIGGER_BACKLIGHT)
> +void ledtrig_backlight_blank(bool on);
> +#else
> +static inline void ledtrig_backlight_blank(bool on) {}
> +#endif
> +
>  /*
>   * Generic LED platform data for describing LED names and default triggers.
>   */
> -- 
> 2.48.1
> 

-- 
/fb_ledtrig_backlight_notify_blankLee Jones [李琼斯]

  reply	other threads:[~2025-02-11 13:57 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-06 15:30 [RFC PATCH 00/13] backlight, lcd, led: Remove fbdev dependencies Thomas Zimmermann
2025-02-06 15:30 ` [PATCH 01/13] fbdev: Rework fb_blank() Thomas Zimmermann
2025-02-06 15:30 ` [PATCH 02/13] fbdev: Track display blanking state Thomas Zimmermann
2025-02-06 15:30 ` [PATCH 03/13] fbdev: Send old blank state in FB_EVENT_BLANK Thomas Zimmermann
2025-02-06 15:30 ` [PATCH 04/13] backlight: Implement fbdev tracking with blank state from event Thomas Zimmermann
2025-02-06 15:30 ` [PATCH 05/13] backlight: Move blank-state handling into helper Thomas Zimmermann
2025-02-06 15:30 ` [PATCH 06/13] backlight: Replace fb events with a dedicated function call Thomas Zimmermann
2025-02-06 15:30 ` [PATCH 07/13] backlight: lcd: Maintain global list of lcd devices Thomas Zimmermann
2025-02-06 15:30 ` [PATCH 08/13] backlight: lcd: Move event handling into helpers Thomas Zimmermann
2025-02-06 15:30 ` [PATCH 09/13] backlight: lcd: Replace fb events with a dedicated function call Thomas Zimmermann
2025-02-06 15:30 ` [PATCH 10/13] leds: backlight trigger: Maintain global list of led backlight triggers Thomas Zimmermann
2025-02-11 14:00   ` Lee Jones
2025-02-13 14:23     ` Thomas Zimmermann
2025-02-06 15:30 ` [PATCH 11/13] leds: backlight trigger: Move blank-state handling into helper Thomas Zimmermann
2025-02-06 15:30 ` [PATCH 12/13] leds: backlight trigger: Replace fb events with a dedicated function call Thomas Zimmermann
2025-02-11 13:57   ` Lee Jones [this message]
2025-02-13 14:34     ` Thomas Zimmermann
2025-02-20 15:00       ` Lee Jones
2025-02-06 15:30 ` [PATCH 13/13] fbdev: Remove constants of unused events Thomas Zimmermann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250211135752.GT1868108@google.com \
    --to=lee@kernel.org \
    --cc=danielt@kernel.org \
    --cc=deller@gmx.de \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jingoohan1@gmail.com \
    --cc=linux-fbdev@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=pavel@ucw.cz \
    --cc=simona@ffwll.ch \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.