public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Thomas Zimmermann <tzimmermann@suse.de>
To: daniel@ffwll.ch, javierm@redhat.com, sam@ravnborg.org,
	deller@gmx.de, geert+renesas@glider.be, lee@kernel.org,
	daniel.thompson@linaro.org, jingoohan1@gmail.com,
	dan.carpenter@linaro.org, michael.j.ruhl@intel.com
Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org,
	linux-sh@vger.kernel.org, linux-omap@vger.kernel.org,
	linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
	Thomas Zimmermann <tzimmermann@suse.de>
Subject: [PATCH v2 37/38] fbdev/core: Rework fb init code
Date: Mon, 12 Jun 2023 16:08:15 +0200	[thread overview]
Message-ID: <20230612141352.29939-38-tzimmermann@suse.de> (raw)
In-Reply-To: <20230612141352.29939-1-tzimmermann@suse.de>

Init the class "graphics" before the rest of fbdev. Later steps, such
as the sysfs code, depend on the class. Also arrange the module's exit
code in reverse order.

Unexport the global variable fb_class, which is only shared internally
within the fbdev core module.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/video/fbdev/core/fb_internal.h |  1 +
 drivers/video/fbdev/core/fbcon.c       |  1 +
 drivers/video/fbdev/core/fbmem.c       | 52 ++++++++++----------------
 include/linux/fb.h                     |  1 -
 4 files changed, 22 insertions(+), 33 deletions(-)

diff --git a/drivers/video/fbdev/core/fb_internal.h b/drivers/video/fbdev/core/fb_internal.h
index abe06c9da36e3..0b43c0cd50968 100644
--- a/drivers/video/fbdev/core/fb_internal.h
+++ b/drivers/video/fbdev/core/fb_internal.h
@@ -11,6 +11,7 @@ int fb_register_chrdev(void);
 void fb_unregister_chrdev(void);
 
 /* fbmem.c */
+extern struct class *fb_class;
 extern struct mutex registration_lock;
 extern struct fb_info *registered_fb[FB_MAX];
 extern int num_registered_fb;
diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index c6c9d040bdec7..8e76bc246b387 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -78,6 +78,7 @@
 #include <asm/irq.h>
 
 #include "fbcon.h"
+#include "fb_internal.h"
 
 /*
  * FIXME: Locking
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 4edf70241a23c..ee44a46a66be1 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -44,6 +44,8 @@
 
 #define FBPIXMAPSIZE	(1024 * 8)
 
+struct class *fb_class;
+
 DEFINE_MUTEX(registration_lock);
 struct fb_info *registered_fb[FB_MAX] __read_mostly;
 int num_registered_fb __read_mostly;
@@ -899,9 +901,6 @@ fb_blank(struct fb_info *info, int blank)
 }
 EXPORT_SYMBOL(fb_blank);
 
-struct class *fb_class;
-EXPORT_SYMBOL(fb_class);
-
 static int fb_check_foreignness(struct fb_info *fi)
 {
 	const bool foreign_endian = fi->flags & FBINFO_FOREIGN_ENDIAN;
@@ -1108,59 +1107,48 @@ void fb_set_suspend(struct fb_info *info, int state)
 }
 EXPORT_SYMBOL(fb_set_suspend);
 
-/**
- *	fbmem_init - init frame buffer subsystem
- *
- *	Initialize the frame buffer subsystem.
- *
- *	NOTE: This function is _only_ to be called by drivers/char/mem.c.
- *
- */
-
-static int __init
-fbmem_init(void)
+static int __init fbmem_init(void)
 {
 	int ret;
 
+	fb_class = class_create("graphics");
+	if (IS_ERR(fb_class)) {
+		ret = PTR_ERR(fb_class);
+		pr_err("Unable to create fb class; errno = %d\n", ret);
+		goto err_fb_class;
+	}
+
 	ret = fb_init_procfs();
 	if (ret)
-		return ret;
+		goto err_class_destroy;
 
 	ret = fb_register_chrdev();
 	if (ret)
-		goto err_chrdev;
-
-	fb_class = class_create("graphics");
-	if (IS_ERR(fb_class)) {
-		ret = PTR_ERR(fb_class);
-		pr_warn("Unable to create fb class; errno = %d\n", ret);
-		fb_class = NULL;
-		goto err_class;
-	}
+		goto err_fb_cleanup_procfs;
 
 	fb_console_init();
 
 	return 0;
 
-err_class:
-	fb_unregister_chrdev();
-err_chrdev:
+err_fb_cleanup_procfs:
 	fb_cleanup_procfs();
+err_class_destroy:
+	class_destroy(fb_class);
+err_fb_class:
+	fb_class = NULL;
 	return ret;
 }
 
 #ifdef MODULE
-module_init(fbmem_init);
-static void __exit
-fbmem_exit(void)
+static void __exit fbmem_exit(void)
 {
 	fb_console_exit();
-
+	fb_unregister_chrdev();
 	fb_cleanup_procfs();
 	class_destroy(fb_class);
-	fb_unregister_chrdev();
 }
 
+module_init(fbmem_init);
 module_exit(fbmem_exit);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Framebuffer base");
diff --git a/include/linux/fb.h b/include/linux/fb.h
index 1988d11f78bcb..541a0e3ce21f4 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -609,7 +609,6 @@ extern int fb_new_modelist(struct fb_info *info);
 
 extern bool fb_center_logo;
 extern int fb_logo_count;
-extern struct class *fb_class;
 
 static inline void lock_fb_info(struct fb_info *info)
 {
-- 
2.41.0


  parent reply	other threads:[~2023-06-12 14:16 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-12 14:07 [PATCH v2 00/38] fbdev: Make userspace interfaces optional Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 01/38] backlight/bd6107: Compare against struct fb_info.device Thomas Zimmermann
2023-06-12 15:00   ` Dan Carpenter
2023-06-12 15:17   ` Ruhl, Michael J
2023-06-13  7:31     ` Thomas Zimmermann
2023-06-13 10:37   ` Daniel Thompson
2023-06-13 10:47     ` Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 02/38] backlight/bd6107: Rename struct bd6107_platform_data.fbdev to 'dev' Thomas Zimmermann
2023-06-13 10:38   ` Daniel Thompson
2023-06-12 14:07 ` [PATCH v2 03/38] backlight/gpio_backlight: Compare against struct fb_info.device Thomas Zimmermann
2023-06-13 10:38   ` Daniel Thompson
2023-06-12 14:07 ` [PATCH v2 04/38] backlight/gpio_backlight: Rename field 'fbdev' to 'dev' Thomas Zimmermann
2023-06-13 10:39   ` Daniel Thompson
2023-06-12 14:07 ` [PATCH v2 05/38] backlight/lv5207lp: Compare against struct fb_info.device Thomas Zimmermann
2023-06-13 10:39   ` Daniel Thompson
2023-06-12 14:07 ` [PATCH v2 06/38] backlight/lv5207lp: Rename struct lv5207lp_platform_data.fbdev to 'dev' Thomas Zimmermann
2023-06-13 10:40   ` Daniel Thompson
2023-06-12 14:07 ` [PATCH v2 07/38] fbdev/atyfb: Reorder backlight and framebuffer init/cleanup Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 08/38] fbdev/atyfb: Use hardware device as backlight parent Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 09/38] fbdev/aty128fb: Reorder backlight and framebuffer init/cleanup Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 10/38] fbdev/aty128fb: Use hardware device as backlight parent Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 11/38] fbdev/broadsheetfb: Call device_remove_file() with hardware device Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 12/38] fbdev/ep93xx-fb: Alloc DMA memory from " Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 13/38] fbdev/ep93xx-fb: Output messages with fb_info() and fb_err() Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 14/38] fbdev/ep93xx-fb: Do not assign to struct fb_info.dev Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 15/38] fbdev/fsl-diu-fb: Output messages with fb_*() helpers Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 16/38] fbdev/mb862xxfb: Output messages with fb_dbg() Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 17/38] fbdev/metronomefb: Use hardware device for dev_err() Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 18/38] fbdev/nvidiafb: Reorder backlight and framebuffer init/cleanup Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 19/38] fbdev/nvidiafb: Use hardware device as backlight parent Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 20/38] fbdev/pxa168fb: Do not assign to struct fb_info.dev Thomas Zimmermann
2023-06-12 14:07 ` [PATCH v2 21/38] fbdev/radeonfb: Reorder backlight and framebuffer cleanup Thomas Zimmermann
2023-06-12 15:51   ` Sam Ravnborg
2023-06-12 14:08 ` [PATCH v2 22/38] fbdev/radeonfb: Use hardware device as backlight parent Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 23/38] fbdev/rivafb: Reorder backlight and framebuffer init/cleanup Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 24/38] fbdev/rivafb: Use hardware device as backlight parent Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 25/38] fbdev/sh7760fb: Use fb_dbg() in sh7760fb_get_color_info() Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 26/38] fbdev/sh7760fb: Output messages with fb_dbg() Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 27/38] fbdev/sh7760fb: Alloc DMA memory from hardware device Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 28/38] fbdev/sh7760fb: Use hardware device with dev_() output during probe Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 29/38] fbdev/sm501fb: Output message with fb_err() Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 30/38] fbdev/smscufx: Detect registered fb_info from refcount Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 31/38] fbdev/tdfxfb: Set i2c adapter parent to hardware device Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 32/38] fbdev/core: Pass Linux device to pm_vt_switch_*() functions Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 33/38] fbdev/core: Move framebuffer and backlight helpers into separate files Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 34/38] fbdev/core: Add fb_device_{create,destroy}() Thomas Zimmermann
2023-06-12 15:43   ` Sam Ravnborg
2023-06-12 14:08 ` [PATCH v2 35/38] fbdev/core: Move procfs code to separate file Thomas Zimmermann
2023-06-12 14:08 ` [PATCH v2 36/38] fbdev/core: Move file-I/O code into " Thomas Zimmermann
2023-06-13  9:17   ` Thomas Zimmermann
2023-06-12 14:08 ` Thomas Zimmermann [this message]
2023-06-12 14:08 ` [PATCH v2 38/38] fbdev: Make support for userspace interfaces configurable Thomas Zimmermann
2023-06-13 10:43   ` Daniel Thompson
2023-06-12 15:56 ` [PATCH v2 00/38] fbdev: Make userspace interfaces optional Sam Ravnborg
2023-06-12 16:04   ` Javier Martinez Canillas
2023-06-13 10:41     ` 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=20230612141352.29939-38-tzimmermann@suse.de \
    --to=tzimmermann@suse.de \
    --cc=dan.carpenter@linaro.org \
    --cc=daniel.thompson@linaro.org \
    --cc=daniel@ffwll.ch \
    --cc=deller@gmx.de \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=geert+renesas@glider.be \
    --cc=javierm@redhat.com \
    --cc=jingoohan1@gmail.com \
    --cc=lee@kernel.org \
    --cc=linux-fbdev@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-sh@vger.kernel.org \
    --cc=linux-staging@lists.linux.dev \
    --cc=michael.j.ruhl@intel.com \
    --cc=sam@ravnborg.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox