# fbdev configuration
 #
 
-config FB_NOTIFY
-       bool
-
 menuconfig FB
        tristate "Support for frame buffer devices"
        select FB_NOTIFY
          (e.g. an accelerated X server) and that are not frame buffer
          device-aware may cause unexpected results. If unsure, say N.
 
-config FIRMWARE_EDID
-       bool "Enable firmware EDID"
-       depends on FB
-       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
-         transfers do not work for your driver and if you are using
-         nvidiafb, i810fb or savagefb.
-
-         In general, choosing Y for this option is safe.  If you
-         experience extremely long delays while booting before you get
-         something on your display, try setting this to N.  Matrox cards in
-         combination with certain motherboards and monitors are known to
-         suffer from this problem.
-
-config FB_DEVICE
-       bool "Provide legacy /dev/fb* device"
-       depends on FB
-       default y
-       help
-         Say Y here if you want the legacy /dev/fb* device file and
-         interfaces within sysfs anc procfs. It is only required if you
-         have userspace programs that depend on fbdev for graphics output.
-         This does not affect the framebuffer console. If unsure, say N.
-
-config FB_DDC
-       tristate
-       depends on FB
-       select I2C_ALGOBIT
-       select I2C
-
-config FB_CFB_FILLRECT
-       tristate
-       depends on FB
-       help
-         Include the cfb_fillrect function for generic software rectangle
-         filling. This is used by drivers that don't provide their own
-         (accelerated) version.
-
-config FB_CFB_COPYAREA
-       tristate
-       depends on FB
-       help
-         Include the cfb_copyarea function for generic software area copying.
-         This is used by drivers that don't provide their own (accelerated)
-         version.
-
-config FB_CFB_IMAGEBLIT
-       tristate
-       depends on FB
-       help
-         Include the cfb_imageblit function for generic software image
-         blitting. This is used by drivers that don't provide their own
-         (accelerated) version.
-
-config FB_CFB_REV_PIXELS_IN_BYTE
-       bool
-       depends on FB
-       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
-         byte order to bytes in long order.
-
-config FB_SYS_FILLRECT
-       tristate
-       depends on FB
-       help
-         Include the sys_fillrect function for generic software rectangle
-         filling. This is used by drivers that don't provide their own
-         (accelerated) version and the framebuffer is in system RAM.
-
-config FB_SYS_COPYAREA
-       tristate
-       depends on FB
-       help
-         Include the sys_copyarea function for generic software area copying.
-         This is used by drivers that don't provide their own (accelerated)
-         version and the framebuffer is in system RAM.
-
-config FB_SYS_IMAGEBLIT
-       tristate
-       depends on FB
-       help
-         Include the sys_imageblit function for generic software image
-         blitting. This is used by drivers that don't provide their own
-         (accelerated) version and the framebuffer is in system RAM.
-
-config FB_PROVIDE_GET_FB_UNMAPPED_AREA
-       bool
-       depends on FB
-       help
-         Allow generic frame-buffer to provide get_fb_unmapped_area
-         function to provide shareable character device support on nommu.
-
-menuconfig FB_FOREIGN_ENDIAN
-       bool "Framebuffer foreign endianness support"
-       depends on FB
-       help
-         This menu will let you enable support for the framebuffers with
-         non-native endianness (e.g. Little-Endian framebuffer on a
-         Big-Endian machine). Most probably you don't have such hardware,
-         so it's safe to say "n" here.
-
-choice
-       prompt "Choice endianness support"
-       depends on FB_FOREIGN_ENDIAN
-
-config FB_BOTH_ENDIAN
-       bool "Support for Big- and Little-Endian framebuffers"
-
-config FB_BIG_ENDIAN
-       bool "Support for Big-Endian framebuffers only"
-
-config FB_LITTLE_ENDIAN
-       bool "Support for Little-Endian framebuffers only"
-
-endchoice
-
-config FB_SYS_FOPS
-       tristate
-       depends on FB
-
-config FB_DEFERRED_IO
-       bool
-       depends on FB
-
-config FB_IO_HELPERS
-       bool
-       depends on FB
-       select FB_CFB_COPYAREA
-       select FB_CFB_FILLRECT
-       select FB_CFB_IMAGEBLIT
-
-config FB_SYS_HELPERS
-       bool
-       depends on FB
-       select FB_SYS_COPYAREA
-       select FB_SYS_FILLRECT
-       select FB_SYS_FOPS
-       select FB_SYS_IMAGEBLIT
-
-config FB_SYS_HELPERS_DEFERRED
-       bool
-       depends on FB
-       select FB_DEFERRED_IO
-       select FB_SYS_HELPERS
-
 config FB_HECUBA
        tristate
        depends on FB
        tristate
        depends on FB
 
-config FB_BACKLIGHT
-       tristate
-       depends on FB
-       select BACKLIGHT_CLASS_DEVICE
-
-config FB_MODE_HELPERS
-       bool "Enable Video Mode Handling Helpers"
-       depends on FB
-       help
-         This enables functions for handling video modes using the
-         Generalized Timing Formula and the EDID parser. A few drivers rely
-         on this feature such as the radeonfb, rivafb, and the i810fb. If
-         your driver does not take advantage of this feature, choosing Y will
-         just increase the kernel size by about 5K.
-
-config FB_TILEBLITTING
-       bool "Enable Tile Blitting Support"
-       depends on FB
-       help
-         This enables tile blitting.  Tile blitting is a drawing technique
-         where the screen is divided into rectangular sections (tiles), whereas
-         the standard blitting divides the screen into pixels. Because the
-         default drawing element is a tile, drawing functions will be passed
-         parameters in terms of number of tiles instead of number of pixels.
-         For example, to draw a single character, instead of using bitmaps,
-         an index to an array of bitmaps will be used.  To clear or move a
-         rectangular section of a screen, the rectangle will be described in
-         terms of number of tiles in the x- and y-axis.
-
-         This is particularly important to one driver, matroxfb.  If
-         unsure, say N.
-
-comment "Frame buffer hardware drivers"
-       depends on FB
-
 config FB_GRVGA
        tristate "Aeroflex Gaisler framebuffer support"
        depends on FB && SPARC
 source "drivers/video/fbdev/omap/Kconfig"
 source "drivers/video/fbdev/omap2/Kconfig"
 source "drivers/video/fbdev/mmp/Kconfig"
+
+source "drivers/video/fbdev/core/Kconfig"
 
--- /dev/null
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# fbdev core configuration
+#
+
+config FB_NOTIFY
+       bool
+
+config FIRMWARE_EDID
+       bool "Enable firmware EDID"
+       depends on FB
+       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
+         transfers do not work for your driver and if you are using
+         nvidiafb, i810fb or savagefb.
+
+         In general, choosing Y for this option is safe.  If you
+         experience extremely long delays while booting before you get
+         something on your display, try setting this to N.  Matrox cards in
+         combination with certain motherboards and monitors are known to
+         suffer from this problem.
+
+config FB_DEVICE
+       bool "Provide legacy /dev/fb* device"
+       depends on FB
+       default y
+       help
+         Say Y here if you want the legacy /dev/fb* device file and
+         interfaces within sysfs anc procfs. It is only required if you
+         have userspace programs that depend on fbdev for graphics output.
+         This does not affect the framebuffer console. If unsure, say N.
+
+config FB_DDC
+       tristate
+       depends on FB
+       select I2C_ALGOBIT
+       select I2C
+
+config FB_CFB_FILLRECT
+       tristate
+       depends on FB
+       help
+         Include the cfb_fillrect function for generic software rectangle
+         filling. This is used by drivers that don't provide their own
+         (accelerated) version.
+
+config FB_CFB_COPYAREA
+       tristate
+       depends on FB
+       help
+         Include the cfb_copyarea function for generic software area copying.
+         This is used by drivers that don't provide their own (accelerated)
+         version.
+
+config FB_CFB_IMAGEBLIT
+       tristate
+       depends on FB
+       help
+         Include the cfb_imageblit function for generic software image
+         blitting. This is used by drivers that don't provide their own
+         (accelerated) version.
+
+config FB_CFB_REV_PIXELS_IN_BYTE
+       bool
+       depends on FB
+       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
+         byte order to bytes in long order.
+
+config FB_SYS_FILLRECT
+       tristate
+       depends on FB
+       help
+         Include the sys_fillrect function for generic software rectangle
+         filling. This is used by drivers that don't provide their own
+         (accelerated) version and the framebuffer is in system RAM.
+
+config FB_SYS_COPYAREA
+       tristate
+       depends on FB
+       help
+         Include the sys_copyarea function for generic software area copying.
+         This is used by drivers that don't provide their own (accelerated)
+         version and the framebuffer is in system RAM.
+
+config FB_SYS_IMAGEBLIT
+       tristate
+       depends on FB
+       help
+         Include the sys_imageblit function for generic software image
+         blitting. This is used by drivers that don't provide their own
+         (accelerated) version and the framebuffer is in system RAM.
+
+config FB_PROVIDE_GET_FB_UNMAPPED_AREA
+       bool
+       depends on FB
+       help
+         Allow generic frame-buffer to provide get_fb_unmapped_area
+         function to provide shareable character device support on nommu.
+
+menuconfig FB_FOREIGN_ENDIAN
+       bool "Framebuffer foreign endianness support"
+       depends on FB
+       help
+         This menu will let you enable support for the framebuffers with
+         non-native endianness (e.g. Little-Endian framebuffer on a
+         Big-Endian machine). Most probably you don't have such hardware,
+         so it's safe to say "n" here.
+
+choice
+       prompt "Choice endianness support"
+       depends on FB_FOREIGN_ENDIAN
+
+config FB_BOTH_ENDIAN
+       bool "Support for Big- and Little-Endian framebuffers"
+
+config FB_BIG_ENDIAN
+       bool "Support for Big-Endian framebuffers only"
+
+config FB_LITTLE_ENDIAN
+       bool "Support for Little-Endian framebuffers only"
+
+endchoice
+
+config FB_SYS_FOPS
+       tristate
+       depends on FB
+
+config FB_DEFERRED_IO
+       bool
+       depends on FB
+
+config FB_IO_HELPERS
+       bool
+       depends on FB
+       select FB_CFB_COPYAREA
+       select FB_CFB_FILLRECT
+       select FB_CFB_IMAGEBLIT
+
+config FB_SYS_HELPERS
+       bool
+       depends on FB
+       select FB_SYS_COPYAREA
+       select FB_SYS_FILLRECT
+       select FB_SYS_FOPS
+       select FB_SYS_IMAGEBLIT
+
+config FB_SYS_HELPERS_DEFERRED
+       bool
+       depends on FB
+       select FB_DEFERRED_IO
+       select FB_SYS_HELPERS
+
+config FB_BACKLIGHT
+       tristate
+       depends on FB
+       select BACKLIGHT_CLASS_DEVICE
+
+config FB_MODE_HELPERS
+       bool "Enable Video Mode Handling Helpers"
+       depends on FB
+       help
+         This enables functions for handling video modes using the
+         Generalized Timing Formula and the EDID parser. A few drivers rely
+         on this feature such as the radeonfb, rivafb, and the i810fb. If
+         your driver does not take advantage of this feature, choosing Y will
+         just increase the kernel size by about 5K.
+
+config FB_TILEBLITTING
+       bool "Enable Tile Blitting Support"
+       depends on FB
+       help
+         This enables tile blitting.  Tile blitting is a drawing technique
+         where the screen is divided into rectangular sections (tiles), whereas
+         the standard blitting divides the screen into pixels. Because the
+         default drawing element is a tile, drawing functions will be passed
+         parameters in terms of number of tiles instead of number of pixels.
+         For example, to draw a single character, instead of using bitmaps,
+         an index to an array of bitmaps will be used.  To clear or move a
+         rectangular section of a screen, the rectangle will be described in
+         terms of number of tiles in the x- and y-axis.
+
+         This is particularly important to one driver, matroxfb.  If
+         unsure, say N.