Hi,

On Tue, Mar 11, 2025 at 07:28:55PM +0800, [email protected] wrote:
> From: Shixiong Ou <[email protected]>
> 
> Use device_add_group() to simplify creation and removal.
> 
> Signed-off-by: Shixiong Ou <[email protected]>
> ---
>  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

Reply via email to