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

config FB_CORE
	select VIDEO_CMDLINE
	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_SYS_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_FOPS
	select FB_SYS_IMAGEBLIT

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

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

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.