# SPDX-License-Identifier: GPL-2.0-only
#
# fbdev core configuration
#

config FB_CORE
	select VIDEO
	tristate

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_CORE
	default FB
	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_CORE
	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_CORE
	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_CORE
	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_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
	  byte order to bytes in long order.

config FB_SYS_FILLRECT
	tristate
	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
	  (accelerated) version and the framebuffer is in system RAM.

config FB_SYS_COPYAREA
	tristate
	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)
	  version and the framebuffer is in system RAM.

config FB_SYS_IMAGEBLIT
	tristate
	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
	  (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_SYSMEM_FOPS
	tristate
	depends on FB_CORE

config FB_DEFERRED_IO
	bool
	depends on FB_CORE

config FB_DMAMEM_HELPERS
	bool
	depends on FB_CORE
	select FB_SYS_COPYAREA
	select FB_SYS_FILLRECT
	select FB_SYS_IMAGEBLIT
	select FB_SYSMEM_FOPS

config FB_IOMEM_FOPS
	tristate
	depends on FB_CORE

config FB_IOMEM_HELPERS
	bool
	depends on FB_CORE
	select FB_CFB_COPYAREA
	select FB_CFB_FILLRECT
	select FB_CFB_IMAGEBLIT
	select FB_IOMEM_FOPS

config FB_IOMEM_HELPERS_DEFERRED
	bool
	depends on FB_CORE
	select FB_DEFERRED_IO
	select FB_IOMEM_HELPERS

config FB_SYSMEM_HELPERS
	bool
	depends on FB_CORE
	select FB_SYS_COPYAREA
	select FB_SYS_FILLRECT
	select FB_SYS_IMAGEBLIT
	select FB_SYSMEM_FOPS

config FB_SYSMEM_HELPERS_DEFERRED
	bool
	depends on FB_CORE
	select FB_DEFERRED_IO
	select FB_SYSMEM_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.
