Re: [PATCH 1/2] fbcon: Register sysfs groups through device_add_group

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Tue, Mar 11, 2025 at 07:28:55PM +0800, oushixiong1025@xxxxxxx wrote:
> From: Shixiong Ou <oushixiong@xxxxxxxxxx>
> 
> Use device_add_group() to simplify creation and removal.
> 
> Signed-off-by: Shixiong Ou <oushixiong@xxxxxxxxxx>
> ---
>  drivers/video/fbdev/core/fbcon.c | 48 +++++++++++++++-----------------
>  1 file changed, 22 insertions(+), 26 deletions(-)
> 
> diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
> index 07d127110ca4..51c3e8a5a092 100644
> --- a/drivers/video/fbdev/core/fbcon.c
> +++ b/drivers/video/fbdev/core/fbcon.c
> @@ -3159,7 +3159,7 @@ static const struct consw fb_con = {
>  	.con_debug_leave	= fbcon_debug_leave,
>  };
>  
> -static ssize_t store_rotate(struct device *device,
> +static ssize_t rotate_store(struct device *device,
>  			    struct device_attribute *attr, const char *buf,
>  			    size_t count)
>  {
> @@ -3181,7 +3181,7 @@ static ssize_t store_rotate(struct device *device,
>  	return count;
>  }
>  
> -static ssize_t store_rotate_all(struct device *device,
> +static ssize_t rotate_all_store(struct device *device,
>  				struct device_attribute *attr,const char *buf,
>  				size_t count)
>  {
> @@ -3203,7 +3203,7 @@ static ssize_t store_rotate_all(struct device *device,
>  	return count;
>  }
>  
> -static ssize_t show_rotate(struct device *device,
> +static ssize_t rotate_show(struct device *device,
>  			   struct device_attribute *attr,char *buf)
>  {
>  	struct fb_info *info;
> @@ -3222,7 +3222,7 @@ static ssize_t show_rotate(struct device *device,
>  	return sysfs_emit(buf, "%d\n", rotate);
>  }
>  
> -static ssize_t show_cursor_blink(struct device *device,
> +static ssize_t cursor_blink_show(struct device *device,
>  				 struct device_attribute *attr, char *buf)
>  {
>  	struct fb_info *info;
> @@ -3247,7 +3247,7 @@ static ssize_t show_cursor_blink(struct device *device,
>  	return sysfs_emit(buf, "%d\n", blink);
>  }
>  
> -static ssize_t store_cursor_blink(struct device *device,
> +static ssize_t cursor_blink_store(struct device *device,
>  				  struct device_attribute *attr,
>  				  const char *buf, size_t count)
>  {
> @@ -3281,32 +3281,30 @@ static ssize_t store_cursor_blink(struct device *device,
>  	return count;
>  }
>  
> -static struct device_attribute device_attrs[] = {
> -	__ATTR(rotate, S_IRUGO|S_IWUSR, show_rotate, store_rotate),
> -	__ATTR(rotate_all, S_IWUSR, NULL, store_rotate_all),
> -	__ATTR(cursor_blink, S_IRUGO|S_IWUSR, show_cursor_blink,
> -	       store_cursor_blink),
> +static DEVICE_ATTR_RW(rotate);
> +static DEVICE_ATTR_WO(rotate_all);
> +static DEVICE_ATTR_RW(cursor_blink);
> +
> +static struct attribute *fbcon_device_attrs[] = {
> +	&dev_attr_rotate.attr,
> +	&dev_attr_rotate_all.attr,
> +	&dev_attr_cursor_blink.attr,
> +	NULL,

No trailing commas after sentinel values.

> +};
> +
> +static const struct attribute_group fbcon_device_attr_group = {
> +	.attrs		= fbcon_device_attrs,
>  };
>  
>  static int fbcon_init_device(void)
>  {
> -	int i, error = 0;
> +	int ret;
>  
>  	fbcon_has_sysfs = 1;
>  
> -	for (i = 0; i < ARRAY_SIZE(device_attrs); i++) {
> -		error = device_create_file(fbcon_device, &device_attrs[i]);
> -
> -		if (error)
> -			break;
> -	}
> -
> -	if (error) {
> -		while (--i >= 0)
> -			device_remove_file(fbcon_device, &device_attrs[i]);
> -
> +	ret = device_add_group(fbcon_device, &fbcon_device_attr_group);
> +	if (ret)
>  		fbcon_has_sysfs = 0;
> -	}
>  
>  	return 0;
>  }
> @@ -3389,11 +3387,9 @@ void __init fb_console_init(void)
>  
>  static void __exit fbcon_deinit_device(void)
>  {
> -	int i;
>  
>  	if (fbcon_has_sysfs) {
> -		for (i = 0; i < ARRAY_SIZE(device_attrs); i++)
> -			device_remove_file(fbcon_device, &device_attrs[i]);
> +		device_remove_group(fb_info->dev, &fbcon_device_attr_group);

Please at least compile-test your changes before submission.

>  
>  		fbcon_has_sysfs = 0;
>  	}

All of this can be simplified even more:

* fbcon_deinit_device() can be removed easily, as the attributes are
  automatically removed when the device is destroyed.
* Using device_create_with_groups() the device core will take complete care of
  the attribute lifecycle, also allowing to remove fbcon_init_device()


Thomas



[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux