]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
fbdev: lcdcfb: Register sysfs groups through driver core
authorShixiong Ou <oushixiong@kylinos.cn>
Wed, 19 Feb 2025 08:44:27 +0000 (16:44 +0800)
committerHelge Deller <deller@gmx.de>
Wed, 26 Mar 2025 21:39:20 +0000 (22:39 +0100)
[WHY]
   1. The driver forgot to call device_remove_file()
   in sh_mobile_lcdc_overlay_fb_unregister(), and there was
   no error handling when calling device_create_file() failed.

   2. This should probably use device_add_group() instead of
   individual files to simplify both creation and removal. [Arnd]

   3. The driver core can register and cleanup sysfs groups already.
   as commit 95cdd538e0e5 ("fbdev: efifb: Register sysfs groups
   through driver core").

[HOW]
   Register sysfs groups through driver core.

Signed-off-by: Shixiong Ou <oushixiong@kylinos.cn>
Signed-off-by: Helge Deller <deller@gmx.de>
drivers/video/fbdev/sh_mobile_lcdcfb.c

index 4715dcb59811507abf801e1dc890c245ba888389..dd950e4ab5cebd6b44bd59f2b00af97c1aa8459d 100644 (file)
@@ -1338,16 +1338,19 @@ overlay_rop3_store(struct device *dev, struct device_attribute *attr,
        return count;
 }
 
-static const struct device_attribute overlay_sysfs_attrs[] = {
-       __ATTR(ovl_alpha, S_IRUGO|S_IWUSR,
-              overlay_alpha_show, overlay_alpha_store),
-       __ATTR(ovl_mode, S_IRUGO|S_IWUSR,
-              overlay_mode_show, overlay_mode_store),
-       __ATTR(ovl_position, S_IRUGO|S_IWUSR,
-              overlay_position_show, overlay_position_store),
-       __ATTR(ovl_rop3, S_IRUGO|S_IWUSR,
-              overlay_rop3_show, overlay_rop3_store),
+static DEVICE_ATTR_RW(overlay_alpha);
+static DEVICE_ATTR_RW(overlay_mode);
+static DEVICE_ATTR_RW(overlay_position);
+static DEVICE_ATTR_RW(overlay_rop3);
+
+static struct attribute *overlay_sysfs_attrs[] = {
+       &dev_attr_overlay_alpha.attr,
+       &dev_attr_overlay_mode.attr,
+       &dev_attr_overlay_position.attr,
+       &dev_attr_overlay_rop3.attr,
+       NULL,
 };
+ATTRIBUTE_GROUPS(overlay_sysfs);
 
 static const struct fb_fix_screeninfo sh_mobile_lcdc_overlay_fix  = {
        .id =           "SH Mobile LCDC",
@@ -1516,7 +1519,6 @@ sh_mobile_lcdc_overlay_fb_register(struct sh_mobile_lcdc_overlay *ovl)
 {
        struct sh_mobile_lcdc_priv *lcdc = ovl->channel->lcdc;
        struct fb_info *info = ovl->info;
-       unsigned int i;
        int ret;
 
        if (info == NULL)
@@ -1530,12 +1532,6 @@ sh_mobile_lcdc_overlay_fb_register(struct sh_mobile_lcdc_overlay *ovl)
                 dev_name(lcdc->dev), ovl->index, info->var.xres,
                 info->var.yres, info->var.bits_per_pixel);
 
-       for (i = 0; i < ARRAY_SIZE(overlay_sysfs_attrs); ++i) {
-               ret = device_create_file(info->dev, &overlay_sysfs_attrs[i]);
-               if (ret < 0)
-                       return ret;
-       }
-
        return 0;
 }
 
@@ -2641,6 +2637,7 @@ err1:
 static struct platform_driver sh_mobile_lcdc_driver = {
        .driver         = {
                .name           = "sh_mobile_lcdc_fb",
+               .dev_groups     = overlay_sysfs_groups,
                .pm             = &sh_mobile_lcdc_dev_pm_ops,
        },
        .probe          = sh_mobile_lcdc_probe,