diff --git a/drivers/video/fbdev/core/fb_internal.h b/drivers/video/fbdev/core/fb_internal.h index abe06c9da36e38885ac3504957b9047677dc9860..0b43c0cd50968b557dd394bdaf527fd0f95d9fa3 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 c6c9d040bdec7ca9581faa1656c4c1f892772f43..8e76bc246b3871b016063003f078f3c4459a02a8 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 4edf70241a23c5a35aea5f596badae9f7cccf251..ee44a46a66be1c1037bc47c1ae8049ecac1aaf06 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 47f3cdc104b0ab25dc237f1c73986f31e1807d68..a7f55edca3733517b76d1b9e6dab592147292324 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) {