* [RFC PATCH 3/4] fbdev: Split frame buffer support in FB and FB_CORE symbols
@ 2021-08-27 10:05 Javier Martinez Canillas
0 siblings, 0 replies; only message in thread
From: Javier Martinez Canillas @ 2021-08-27 10:05 UTC (permalink / raw)
To: linux-kernel
Cc: H . Peter Anvin, Peter Robinson, Thomas Zimmermann,
Maxime Ripard, Hans de Goede, Daniel Vetter, x86, dri-devel,
linux-fbdev, David Airlie, Maarten Lankhorst, Borislav Petkov,
Ingo Molnar, Thomas Gleixner, Greg Kroah-Hartman,
Javier Martinez Canillas
Currently the CONFIG_FB option has to be enabled even if no legacy fbdev
drivers are needed, in order to have support for a framebuffer console.
The DRM subsystem has a fbdev emulation layer, but depends on CONFIG_FB
and so it can only be enabled if that dependency is enabled as well.
That means fbdev drivers have to be explicitly disabled if users want to
enable CONFIG_FB, only to use fbcon with the DRM fbdev emulation layer.
This patch introduces a CONFIG_FB_CORE option that could be enabled just
to have the core support needed for CONFIG_DRM_FBDEV_EMULATION, allowing
CONFIG_FB to be disabled (and automatically disabling all fbdev drivers).
The fbsysfs.o object is left out of fb_core.o, because that's not needed
for KMS drivers and the DRM fbdev emulation layer.
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
---
arch/x86/Makefile | 2 +-
arch/x86/video/Makefile | 2 +-
drivers/video/console/Kconfig | 2 +-
drivers/video/fbdev/Kconfig | 57 ++++++++++++++++++-------------
drivers/video/fbdev/core/Makefile | 13 ++++---
include/linux/fb.h | 14 ++++++++
6 files changed, 59 insertions(+), 31 deletions(-)
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 44dd071d836..dc409539218 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -229,7 +229,7 @@ drivers-$(CONFIG_PCI) += arch/x86/pci/
# suspend and hibernation support
drivers-$(CONFIG_PM) += arch/x86/power/
-drivers-$(CONFIG_FB) += arch/x86/video/
+drivers-$(CONFIG_FB_CORE) += arch/x86/video/
####
# boot loader support. Several targets are kept for legacy purposes
diff --git a/arch/x86/video/Makefile b/arch/x86/video/Makefile
index 11640c11611..cb0735bd662 100644
--- a/arch/x86/video/Makefile
+++ b/arch/x86/video/Makefile
@@ -1,2 +1,2 @@
# SPDX-License-Identifier: GPL-2.0-only
-obj-$(CONFIG_FB) += fbdev.o
+obj-$(CONFIG_FB_CORE) += fbdev.o
diff --git a/drivers/video/console/Kconfig b/drivers/video/console/Kconfig
index 840d9813b0b..0c562ed3495 100644
--- a/drivers/video/console/Kconfig
+++ b/drivers/video/console/Kconfig
@@ -71,7 +71,7 @@ config DUMMY_CONSOLE_ROWS
config FRAMEBUFFER_CONSOLE
bool "Framebuffer Console support"
- depends on FB && !UML
+ depends on FB_CORE && !UML
select VT_HW_CONSOLE_BINDING
select CRC32
select FONT_SUPPORT
diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
index d33c5cd684c..cb9e8b503a5 100644
--- a/drivers/video/fbdev/Kconfig
+++ b/drivers/video/fbdev/Kconfig
@@ -9,10 +9,8 @@ config FB_CMDLINE
config FB_NOTIFY
bool
-menuconfig FB
- tristate "Support for frame buffer devices"
- select FB_CMDLINE
- select FB_NOTIFY
+menuconfig FB_CORE
+ tristate "Core support for frame buffer devices"
help
The frame buffer device provides an abstraction for the graphics
hardware. It represents the frame buffer of some video hardware and
@@ -36,6 +34,19 @@ menuconfig FB
<http://www.munted.org.uk/programming/Framebuffer-HOWTO-1.3.html> for more
information.
+ This options enables the core support for frame buffer devices.
+
+menuconfig FB
+ tristate "Support for frame buffer device drivers"
+ depends on FB_CORE
+ select FB_CMDLINE
+ select FB_NOTIFY
+ help
+ This enables support for frame buffer devices (fbdev) drivers.
+
+ The DRM subsystem provides an option to emulate fbdev devices but
+ this option allows legacy fbdev drivers to be enabled as well.
+
Say Y here and to the driver for your graphics board below if you
are compiling a kernel for a non-x86 architecture.
@@ -47,7 +58,7 @@ menuconfig FB
config FIRMWARE_EDID
bool "Enable firmware EDID"
- depends on FB
+ depends on FB_CORE
help
This enables access to the EDID transferred from the firmware.
On the i386, this is from the Video BIOS. Enable this if DDC/I2C
@@ -62,7 +73,7 @@ config FIRMWARE_EDID
config FB_DDC
tristate
- depends on FB
+ depends on FB_CORE
select I2C_ALGOBIT
select I2C
@@ -75,7 +86,7 @@ config FB_BOOT_VESA_SUPPORT
config FB_CFB_FILLRECT
tristate
- depends on FB
+ depends on FB_CORE
help
Include the cfb_fillrect function for generic software rectangle
filling. This is used by drivers that don't provide their own
@@ -83,7 +94,7 @@ config FB_CFB_FILLRECT
config FB_CFB_COPYAREA
tristate
- depends on FB
+ depends on FB_CORE
help
Include the cfb_copyarea function for generic software area copying.
This is used by drivers that don't provide their own (accelerated)
@@ -91,7 +102,7 @@ config FB_CFB_COPYAREA
config FB_CFB_IMAGEBLIT
tristate
- depends on FB
+ depends on FB_CORE
help
Include the cfb_imageblit function for generic software image
blitting. This is used by drivers that don't provide their own
@@ -99,7 +110,7 @@ config FB_CFB_IMAGEBLIT
config FB_CFB_REV_PIXELS_IN_BYTE
bool
- depends on FB
+ depends on FB_CORE
help
Allow generic frame-buffer functions to work on displays with 1, 2
and 4 bits per pixel depths which has opposite order of pixels in
@@ -107,7 +118,7 @@ config FB_CFB_REV_PIXELS_IN_BYTE
config FB_SYS_FILLRECT
tristate
- depends on FB
+ depends on FB_CORE
help
Include the sys_fillrect function for generic software rectangle
filling. This is used by drivers that don't provide their own
@@ -115,7 +126,7 @@ config FB_SYS_FILLRECT
config FB_SYS_COPYAREA
tristate
- depends on FB
+ depends on FB_CORE
help
Include the sys_copyarea function for generic software area copying.
This is used by drivers that don't provide their own (accelerated)
@@ -123,7 +134,7 @@ config FB_SYS_COPYAREA
config FB_SYS_IMAGEBLIT
tristate
- depends on FB
+ depends on FB_CORE
help
Include the sys_imageblit function for generic software image
blitting. This is used by drivers that don't provide their own
@@ -131,14 +142,14 @@ config FB_SYS_IMAGEBLIT
config FB_PROVIDE_GET_FB_UNMAPPED_AREA
bool
- depends on FB
+ depends on FB_CORE
help
Allow generic frame-buffer to provide get_fb_unmapped_area
function.
menuconfig FB_FOREIGN_ENDIAN
bool "Framebuffer foreign endianness support"
- depends on FB
+ depends on FB_CORE
help
This menu will let you enable support for the framebuffers with
non-native endianness (e.g. Little-Endian framebuffer on a
@@ -162,36 +173,36 @@ endchoice
config FB_SYS_FOPS
tristate
- depends on FB
+ depends on FB_CORE
config FB_DEFERRED_IO
bool
- depends on FB
+ depends on FB_CORE
config FB_HECUBA
tristate
- depends on FB
+ depends on FB_CORE
depends on FB_DEFERRED_IO
config FB_SVGALIB
tristate
- depends on FB
+ depends on FB_CORE
help
Common utility functions useful to fbdev drivers of VGA-based
cards.
config FB_MACMODES
tristate
- depends on FB
+ depends on FB_CORE
config FB_BACKLIGHT
tristate
- depends on FB
+ depends on FB_CORE
select BACKLIGHT_CLASS_DEVICE
config FB_MODE_HELPERS
bool "Enable Video Mode Handling Helpers"
- depends on FB
+ depends on FB_CORE
help
This enables functions for handling video modes using the
Generalized Timing Formula and the EDID parser. A few drivers rely
@@ -201,7 +212,7 @@ config FB_MODE_HELPERS
config FB_TILEBLITTING
bool "Enable Tile Blitting Support"
- depends on FB
+ depends on FB_CORE
help
This enables tile blitting. Tile blitting is a drawing technique
where the screen is divided into rectangular sections (tiles), whereas
diff --git a/drivers/video/fbdev/core/Makefile b/drivers/video/fbdev/core/Makefile
index 26cbc965497..328a017c78b 100644
--- a/drivers/video/fbdev/core/Makefile
+++ b/drivers/video/fbdev/core/Makefile
@@ -1,22 +1,25 @@
# SPDX-License-Identifier: GPL-2.0
obj-$(CONFIG_FB_CMDLINE) += fb_cmdline.o
obj-$(CONFIG_FB_NOTIFY) += fb_notify.o
+obj-$(CONFIG_FB_CORE) += fb_core.o
obj-$(CONFIG_FB) += fb.o
-fb-y := fbmem.o fbmon.o fbcmap.o fbsysfs.o \
+fb_core-y := fbmem.o fbmon.o fbcmap.o \
modedb.o fbcvt.o
-fb-$(CONFIG_FB_DEFERRED_IO) += fb_defio.o
+fb_core-$(CONFIG_FB_DEFERRED_IO) += fb_defio.o
ifeq ($(CONFIG_FRAMEBUFFER_CONSOLE),y)
-fb-y += fbcon.o bitblit.o softcursor.o
+fb_core-y += fbcon.o bitblit.o softcursor.o
ifeq ($(CONFIG_FB_TILEBLITTING),y)
-fb-y += tileblit.o
+fb_core-y += tileblit.o
endif
ifeq ($(CONFIG_FRAMEBUFFER_CONSOLE_ROTATION),y)
-fb-y += fbcon_rotate.o fbcon_cw.o fbcon_ud.o \
+fb_core-y += fbcon_rotate.o fbcon_cw.o fbcon_ud.o \
fbcon_ccw.o
endif
endif
+fb-y := fbsysfs.o
+
obj-$(CONFIG_FB_CFB_FILLRECT) += cfbfillrect.o
obj-$(CONFIG_FB_CFB_COPYAREA) += cfbcopyarea.o
obj-$(CONFIG_FB_CFB_IMAGEBLIT) += cfbimgblt.o
diff --git a/include/linux/fb.h b/include/linux/fb.h
index 96111248a25..f66eefbf1ee 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -689,9 +689,23 @@ static inline bool fb_be_math(struct fb_info *info)
/* drivers/video/fbsysfs.c */
extern struct fb_info *framebuffer_alloc(size_t size, struct device *dev);
extern void framebuffer_release(struct fb_info *info);
+#if IS_ENABLED(CONFIG_FB)
extern int fb_register_sysfs(struct fb_info *fb_info);
extern void fb_unregister_sysfs(struct fb_info *head);
extern void fb_bl_default_curve(struct fb_info *fb_info, u8 off, u8 min, u8 max);
+#else
+static inline int fb_register_sysfs(struct fb_info *fb_info)
+{
+ return 0;
+}
+static inline void fb_unregister_sysfs(struct fb_info *head)
+{
+}
+static inline void fb_bl_default_curve(struct fb_info *fb_info, u8 off,
+ u8 min, u8 max)
+{
+}
+#endif
/* drivers/video/fbmon.c */
#define FB_MAXTIMINGS 0
--
2.31.1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2021-08-27 10:05 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-27 10:05 [RFC PATCH 3/4] fbdev: Split frame buffer support in FB and FB_CORE symbols Javier Martinez Canillas
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.