Handle fbcon during blanking in fb_blank_from_user(). First blank the hardware, then blank fbcon. Same for unblanking. Update all callers and resolve the duplicated logic. With the new helper, fbdev's sysfb code no longer maintains fbcon state by itself. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Helge Deller <deller@gmx.de>
86 lines
1.9 KiB
C
86 lines
1.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
|
#ifndef _FB_INTERNAL_H
|
|
#define _FB_INTERNAL_H
|
|
|
|
#include <linux/device.h>
|
|
#include <linux/fb.h>
|
|
#include <linux/mutex.h>
|
|
|
|
/* fb_devfs.c */
|
|
#if defined(CONFIG_FB_DEVICE)
|
|
int fb_register_chrdev(void);
|
|
void fb_unregister_chrdev(void);
|
|
#else
|
|
static inline int fb_register_chrdev(void)
|
|
{
|
|
return 0;
|
|
}
|
|
static inline void fb_unregister_chrdev(void)
|
|
{ }
|
|
#endif
|
|
|
|
/* fb_logo.c */
|
|
#if defined(CONFIG_LOGO)
|
|
extern bool fb_center_logo;
|
|
extern int fb_logo_count;
|
|
int fb_prepare_logo(struct fb_info *fb_info, int rotate);
|
|
int fb_show_logo(struct fb_info *fb_info, int rotate);
|
|
#else
|
|
static inline int fb_prepare_logo(struct fb_info *info, int rotate)
|
|
{
|
|
return 0;
|
|
}
|
|
static inline int fb_show_logo(struct fb_info *info, int rotate)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif /* CONFIG_LOGO */
|
|
|
|
/* 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;
|
|
struct fb_info *get_fb_info(unsigned int idx);
|
|
void put_fb_info(struct fb_info *fb_info);
|
|
int fb_blank_from_user(struct fb_info *info, int blank);
|
|
|
|
/* fb_procfs.c */
|
|
#if defined(CONFIG_FB_DEVICE)
|
|
int fb_init_procfs(void);
|
|
void fb_cleanup_procfs(void);
|
|
#else
|
|
static inline int fb_init_procfs(void)
|
|
{
|
|
return 0;
|
|
}
|
|
static inline void fb_cleanup_procfs(void)
|
|
{ }
|
|
#endif
|
|
|
|
/* fbsysfs.c */
|
|
#if defined(CONFIG_FB_DEVICE)
|
|
int fb_device_create(struct fb_info *fb_info);
|
|
void fb_device_destroy(struct fb_info *fb_info);
|
|
#else
|
|
static inline int fb_device_create(struct fb_info *fb_info)
|
|
{
|
|
/*
|
|
* Acquire a reference on the parent device to avoid
|
|
* unplug operations behind our back. With the fbdev
|
|
* device enabled, this is performed within register_device().
|
|
*/
|
|
get_device(fb_info->device);
|
|
|
|
return 0;
|
|
}
|
|
static inline void fb_device_destroy(struct fb_info *fb_info)
|
|
{
|
|
/* Undo the get_device() from fb_device_create() */
|
|
put_device(fb_info->device);
|
|
}
|
|
#endif
|
|
|
|
#endif
|