From: "Ricardo B. Marliere" <rica...@marliere.net>

Since commit 43a7206b0963 ("driver core: class: make class_register() take
a const *"), the driver core allows for struct class to be in read-only
memory, so move the lcd_class structure to be declared at build time
placing it into read-only memory, instead of having to be dynamically
allocated at boot time.

Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
Suggested-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>
Signed-off-by: "Ricardo B. Marliere" <rica...@marliere.net>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
v2: rebased on 6.9-rc1

 drivers/video/backlight/lcd.c | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c
index 77c5cb2a44e2..ba4771cbd781 100644
--- a/drivers/video/backlight/lcd.c
+++ b/drivers/video/backlight/lcd.c
@@ -159,8 +159,6 @@ static ssize_t max_contrast_show(struct device *dev,
 }
 static DEVICE_ATTR_RO(max_contrast);
 
-static struct class *lcd_class;
-
 static void lcd_device_release(struct device *dev)
 {
        struct lcd_device *ld = to_lcd_device(dev);
@@ -175,6 +173,11 @@ static struct attribute *lcd_device_attrs[] = {
 };
 ATTRIBUTE_GROUPS(lcd_device);
 
+static const struct class lcd_class = {
+       .name = "lcd",
+       .dev_groups = lcd_device_groups,
+};
+
 /**
  * lcd_device_register - register a new object of lcd_device class.
  * @name: the name of the new object(must be the same as the name of the
@@ -202,7 +205,7 @@ struct lcd_device *lcd_device_register(const char *name, 
struct device *parent,
        mutex_init(&new_ld->ops_lock);
        mutex_init(&new_ld->update_lock);
 
-       new_ld->dev.class = lcd_class;
+       new_ld->dev.class = &lcd_class;
        new_ld->dev.parent = parent;
        new_ld->dev.release = lcd_device_release;
        dev_set_name(&new_ld->dev, "%s", name);
@@ -318,19 +321,19 @@ EXPORT_SYMBOL(devm_lcd_device_unregister);
 
 static void __exit lcd_class_exit(void)
 {
-       class_destroy(lcd_class);
+       class_unregister(&lcd_class);
 }
 
 static int __init lcd_class_init(void)
 {
-       lcd_class = class_create("lcd");
-       if (IS_ERR(lcd_class)) {
-               pr_warn("Unable to create backlight class; errno = %ld\n",
-                       PTR_ERR(lcd_class));
-               return PTR_ERR(lcd_class);
+       int ret;
+
+       ret = class_register(&lcd_class);
+       if (ret) {
+               pr_warn("Unable to create backlight class; errno = %d\n", ret);
+               return ret;
        }
 
-       lcd_class->dev_groups = lcd_device_groups;
        return 0;
 }
 
-- 
2.44.0

Reply via email to