#
# Video configuration
#

menu "Graphics support"

config DM_VIDEO
	bool "Enable driver model support for LCD/video"
	depends on DM
	help
	  This enables driver model for LCD and video devices. These support
	  a bitmap display of various sizes and depths which can be drawn on
	  to display a command-line console or splash screen. Enabling this
	  option compiles in the video uclass and routes all LCD/video access
	  through this.

config BACKLIGHT
	bool "Enable panel backlight uclass support"
	depends on DM_VIDEO
	default y
	help
	  This provides backlight uclass driver that enables basic panel
	  backlight support.

config BACKLIGHT_PWM
	bool "Generic PWM based Backlight Driver"
	depends on BACKLIGHT && DM_PWM
	default y
	help
	  If you have a LCD backlight adjustable by PWM, say Y to enable
	  this driver.
	  This driver can be use with "simple-panel" and
	  it understands the standard device tree
	  (leds/backlight/pwm-backlight.txt)

config BACKLIGHT_GPIO
	bool "Generic GPIO based Backlight Driver"
	depends on BACKLIGHT
	help
	  If you have a LCD backlight adjustable by GPIO, say Y to enable
	  this driver.
	  This driver can be used with "simple-panel" and
	  it understands the standard device tree
	  (leds/backlight/gpio-backlight.txt)

config CMD_VIDCONSOLE
	bool "Enable vidconsole commands lcdputs and setcurs"
	depends on DM_VIDEO
	default y
	help
	  Enabling this will provide 'setcurs' and 'lcdputs' commands which
	  support cursor positioning and drawing strings on video framebuffer.

config VIDEO_BPP8
	bool "Support 8-bit-per-pixel displays"
	depends on DM_VIDEO
	default y
	help
	  Support drawing text and bitmaps onto a 8-bit-per-pixel display.
	  Enabling this will include code to support this display. Without
	  this option, such displays will not be supported and console output
	  will be empty.

config VIDEO_BPP16
	bool "Support 16-bit-per-pixel displays"
	depends on DM_VIDEO
	default y
	help
	  Support drawing text and bitmaps onto a 16-bit-per-pixel display.
	  Enabling this will include code to support this display. Without
	  this option, such displays will not be supported and console output
	  will be empty.

config VIDEO_BPP32
	bool "Support 32-bit-per-pixel displays"
	depends on DM_VIDEO
	default y
	help
	  Support drawing text and bitmaps onto a 32-bit-per-pixel display.
	  Enabling this will include code to support this display. Without
	  this option, such displays will not be supported and console output
	  will be empty.

config VIDEO_ANSI
	bool "Support ANSI escape sequences in video console"
	depends on DM_VIDEO
	default y
	help
	  Enable ANSI escape sequence decoding for a more fully functional
	  console.

config VIDEO_MIPI_DSI
	bool "Support MIPI DSI interface"
	depends on DM_VIDEO
	help
	  Support MIPI DSI interface for driving a MIPI compatible device.
	  The MIPI Display Serial Interface (MIPI DSI) defines a high-speed
	  serial interface between a host processor and a display module.

config CONSOLE_NORMAL
	bool "Support a simple text console"
	depends on DM_VIDEO
	default y if DM_VIDEO
	help
	  Support drawing text on the frame buffer console so that it can be
	  used as a console. Rotation is not supported by this driver (see
	  CONFIG_CONSOLE_ROTATION for that). A built-in 8x16 font is used
	  for the display.

config CONSOLE_ROTATION
	bool "Support rotated displays"
	depends on DM_VIDEO
	help
	  Sometimes, for example if the display is mounted in portrait
	  mode or even if it's mounted landscape but rotated by 180degree,
	  we need to rotate our content of the display relative to the
	  framebuffer, so that user can read the messages which are
	  printed out. Enable this option to include a text driver which can
	  support this. The rotation is set by the 'rot' parameter in
	  struct video_priv: 0=unrotated, 1=90 degrees clockwise, 2=180
	  degrees, 3=270 degrees.

config CONSOLE_TRUETYPE
	bool "Support a console that uses TrueType fonts"
	depends on DM_VIDEO
	help
	  TrueTrype fonts can provide outline-drawing capability rather than
	  needing to provide a bitmap for each font and size that is needed.
	  With this option you can adjust the text size and use a variety of
	  fonts. Note that this is noticeably slower than with normal console.

config CONSOLE_TRUETYPE_SIZE
	int "TrueType font size"
	depends on CONSOLE_TRUETYPE
	default 18
	help
	  This sets the font size for the console. The size is measured in
	  pixels and is the nominal height of a character. Note that fonts
	  are commonly measured in 'points', being 1/72 inch (about 3.52mm).
	  However that measurement depends on the size of your display and
	  there is no standard display density. At present there is not a
	  method to select the display's physical size, which would allow
	  U-Boot to calculate the correct font size.

config SYS_WHITE_ON_BLACK
	bool "Display console as white on a black background"
	default y if ARCH_AT91 || ARCH_EXYNOS || ARCH_ROCKCHIP || ARCH_TEGRA || X86 || ARCH_SUNXI
	help
	 Normally the display is black on a white background, Enable this
	 option to invert this, i.e. white on a black background. This can be
	 better in low-light situations or to reduce eye strain in some
	 cases.

config NO_FB_CLEAR
	bool "Skip framebuffer clear"
	help
	  If firmware (whatever loads u-boot) has already put a splash image
	  on screen, you might want to preserve it until whatever u-boot
	  loads takes over the screen.  This, for example, can be used to
	  keep splash image on screen until grub graphical boot menu starts.

config PANEL
	bool "Enable panel uclass support"
	depends on DM_VIDEO
	default y
	help
	  This provides panel uclass driver that enables basic panel support.

config SIMPLE_PANEL
	bool "Enable simple panel support"
	depends on PANEL
	default y
	help
	  This turns on a simple panel driver that enables a compatible
	  video panel.

source "drivers/video/fonts/Kconfig"

config VIDCONSOLE_AS_LCD
	bool "Use 'vidconsole' when CONFIG_VIDCONSOLE_AS_NAME string is seen in stdout"
	depends on DM_VIDEO
	help
	  This is a work-around for boards which have 'lcd' or 'vga' in their
	  stdout environment variable, but have moved to use driver model for
	  video. In this case the console will no-longer work. While it is
	  possible to update the environment, the breakage may be confusing for
	  users. This option will be removed around the end of 2020.

config VIDCONSOLE_AS_NAME
	string "Use 'vidconsole' when string defined here is seen in stdout"
	depends on VIDCONSOLE_AS_LCD
	default "lcd" if LCD || TEGRA_COMMON
	default "vga" if !LCD
	help
	  This is a work-around for boards which have 'lcd' or 'vga' in their
	  stdout environment variable, but have moved to use driver model for
	  video. In this case the console will no-longer work. While it is
	  possible to update the environment, the breakage may be confusing for
	  users. This option will be removed around the end of 2020.

config VIDEO_COREBOOT
	bool "Enable coreboot framebuffer driver support"
	depends on X86 && SYS_COREBOOT
	help
	  Turn on this option to enable a framebuffer driver when U-Boot is
	  loaded by coreboot where the graphics device is configured by
	  coreboot already. This can in principle be used with any platform
	  that coreboot supports.

config VIDEO_EFI
	bool "Enable EFI framebuffer driver support"
	depends on EFI_STUB
	help
	  Turn on this option to enable a framebuffeer driver when U-Boot is
	  loaded as a payload (see README.u-boot_on_efi) by an EFI BIOS where
	  the graphics device is configured by the EFI BIOS already. This can
	  in principle be used with any platform that has an EFI BIOS.

config VIDEO_VESA
	bool "Enable VESA video driver support"
	default n
	help
	  Turn on this option to enable a very simple driver which uses vesa
	  to discover the video mode and then provides a frame buffer for use
	  by U-Boot. This can in principle be used with any platform that
	  supports PCI and video cards that support VESA BIOS Extension (VBE).

config FRAMEBUFFER_SET_VESA_MODE
	bool "Set framebuffer graphics resolution"
	depends on VIDEO_VESA || VIDEO_BROADWELL_IGD
	help
	  Set VESA/native framebuffer mode (needed for bootsplash and graphical
	  framebuffer console)

choice
	prompt "framebuffer graphics resolution"
	default FRAMEBUFFER_VESA_MODE_118
	depends on FRAMEBUFFER_SET_VESA_MODE
	help
	  This option sets the resolution used for the U-Boot framebuffer (and
	  bootsplash screen).

config FRAMEBUFFER_VESA_MODE_100
	bool "640x400 256-color"

config FRAMEBUFFER_VESA_MODE_101
	bool "640x480 256-color"

config FRAMEBUFFER_VESA_MODE_102
	bool "800x600 16-color"

config FRAMEBUFFER_VESA_MODE_103
	bool "800x600 256-color"

config FRAMEBUFFER_VESA_MODE_104
	bool "1024x768 16-color"

config FRAMEBUFFER_VESA_MODE_105
	bool "1024x768 256-color"

config FRAMEBUFFER_VESA_MODE_106
	bool "1280x1024 16-color"

config FRAMEBUFFER_VESA_MODE_107
	bool "1280x1024 256-color"

config FRAMEBUFFER_VESA_MODE_108
	bool "80x60 text"

config FRAMEBUFFER_VESA_MODE_109
	bool "132x25 text"

config FRAMEBUFFER_VESA_MODE_10A
	bool "132x43 text"

config FRAMEBUFFER_VESA_MODE_10B
	bool "132x50 text"

config FRAMEBUFFER_VESA_MODE_10C
	bool "132x60 text"

config FRAMEBUFFER_VESA_MODE_10D
	bool "320x200 32k-color (1:5:5:5)"

config FRAMEBUFFER_VESA_MODE_10E
	bool "320x200 64k-color (5:6:5)"

config FRAMEBUFFER_VESA_MODE_10F
	bool "320x200 16.8M-color (8:8:8)"

config FRAMEBUFFER_VESA_MODE_110
	bool "640x480 32k-color (1:5:5:5)"

config FRAMEBUFFER_VESA_MODE_111
	bool "640x480 64k-color (5:6:5)"

config FRAMEBUFFER_VESA_MODE_112
	bool "640x480 16.8M-color (8:8:8)"

config FRAMEBUFFER_VESA_MODE_113
	bool "800x600 32k-color (1:5:5:5)"

config FRAMEBUFFER_VESA_MODE_114
	bool "800x600 64k-color (5:6:5)"

config FRAMEBUFFER_VESA_MODE_115
	bool "800x600 16.8M-color (8:8:8)"

config FRAMEBUFFER_VESA_MODE_116
	bool "1024x768 32k-color (1:5:5:5)"

config FRAMEBUFFER_VESA_MODE_117
	bool "1024x768 64k-color (5:6:5)"

config FRAMEBUFFER_VESA_MODE_118
	bool "1024x768 16.8M-color (8:8:8)"

config FRAMEBUFFER_VESA_MODE_119
	bool "1280x1024 32k-color (1:5:5:5)"

config FRAMEBUFFER_VESA_MODE_11A
	bool "1280x1024 64k-color (5:6:5)"

config FRAMEBUFFER_VESA_MODE_11B
	bool "1280x1024 16.8M-color (8:8:8)"

config FRAMEBUFFER_VESA_MODE_USER
	bool "Manually select VESA mode"

endchoice

# Map the config names to an integer (KB).
config FRAMEBUFFER_VESA_MODE
	prompt "VESA mode" if FRAMEBUFFER_VESA_MODE_USER
	hex
	default 0x100 if FRAMEBUFFER_VESA_MODE_100
	default 0x101 if FRAMEBUFFER_VESA_MODE_101
	default 0x102 if FRAMEBUFFER_VESA_MODE_102
	default 0x103 if FRAMEBUFFER_VESA_MODE_103
	default 0x104 if FRAMEBUFFER_VESA_MODE_104
	default 0x105 if FRAMEBUFFER_VESA_MODE_105
	default 0x106 if FRAMEBUFFER_VESA_MODE_106
	default 0x107 if FRAMEBUFFER_VESA_MODE_107
	default 0x108 if FRAMEBUFFER_VESA_MODE_108
	default 0x109 if FRAMEBUFFER_VESA_MODE_109
	default 0x10A if FRAMEBUFFER_VESA_MODE_10A
	default 0x10B if FRAMEBUFFER_VESA_MODE_10B
	default 0x10C if FRAMEBUFFER_VESA_MODE_10C
	default 0x10D if FRAMEBUFFER_VESA_MODE_10D
	default 0x10E if FRAMEBUFFER_VESA_MODE_10E
	default 0x10F if FRAMEBUFFER_VESA_MODE_10F
	default 0x110 if FRAMEBUFFER_VESA_MODE_110
	default 0x111 if FRAMEBUFFER_VESA_MODE_111
	default 0x112 if FRAMEBUFFER_VESA_MODE_112
	default 0x113 if FRAMEBUFFER_VESA_MODE_113
	default 0x114 if FRAMEBUFFER_VESA_MODE_114
	default 0x115 if FRAMEBUFFER_VESA_MODE_115
	default 0x116 if FRAMEBUFFER_VESA_MODE_116
	default 0x117 if FRAMEBUFFER_VESA_MODE_117
	default 0x118 if FRAMEBUFFER_VESA_MODE_118
	default 0x119 if FRAMEBUFFER_VESA_MODE_119
	default 0x11A if FRAMEBUFFER_VESA_MODE_11A
	default 0x11B if FRAMEBUFFER_VESA_MODE_11B
	default 0x117 if FRAMEBUFFER_VESA_MODE_USER

config VIDEO_LCD_ANX9804
	bool "ANX9804 bridge chip"
	default n
	---help---
	Support for the ANX9804 bridge chip, which can take pixel data coming
	from a parallel LCD interface and translate it on the fy into a DP
	interface for driving eDP TFT displays. It uses I2C for configuration.

config VIDEO_LCD_ORISETECH_OTM8009A
	bool "OTM8009A DSI LCD panel support"
	depends on DM_VIDEO
	select VIDEO_MIPI_DSI
	default n
	help
	Say Y here if you want to enable support for Orise Technology
	otm8009a 480x800 dsi 2dl panel.

config VIDEO_LCD_RAYDIUM_RM68200
	bool "RM68200 DSI LCD panel support"
	depends on DM_VIDEO
	select VIDEO_MIPI_DSI
	default n
	help
	Say Y here if you want to enable support for Raydium RM68200
	720x1280 DSI video mode panel.

config VIDEO_LCD_SSD2828
	bool "SSD2828 bridge chip"
	default n
	---help---
	Support for the SSD2828 bridge chip, which can take pixel data coming
	from a parallel LCD interface and translate it on the fly into MIPI DSI
	interface for driving a MIPI compatible LCD panel. It uses SPI for
	configuration.

config VIDEO_LCD_SSD2828_TX_CLK
	int "SSD2828 TX_CLK frequency (in MHz)"
	depends on VIDEO_LCD_SSD2828
	default 0
	---help---
	The frequency of the crystal, which is clocking SSD2828. It may be
	anything in the 8MHz-30MHz range and the exact value should be
	retrieved from the board schematics. Or in the case of Allwinner
	hardware, it can be usually found as 'lcd_xtal_freq' variable in
	FEX files. It can be also set to 0 for selecting PCLK from the
	parallel LCD interface instead of TX_CLK as the PLL clock source.

config VIDEO_LCD_SSD2828_RESET
	string "RESET pin of SSD2828"
	depends on VIDEO_LCD_SSD2828
	default ""
	---help---
	The reset pin of SSD2828 chip. This takes a string in the format
	understood by 'name_to_gpio' function, e.g. PH1 for pin 1 of port H.

config VIDEO_LCD_HITACHI_TX18D42VM
	bool "Hitachi tx18d42vm LVDS LCD panel support"
	depends on VIDEO
	default n
	---help---
	Support for Hitachi tx18d42vm LVDS LCD panels, these panels have a
	lcd controller which needs to be initialized over SPI, once that is
	done they work like a regular LVDS panel.

config VIDEO_LCD_SPI_CS
	string "SPI CS pin for LCD related config job"
	depends on VIDEO_LCD_SSD2828 || VIDEO_LCD_HITACHI_TX18D42VM
	default ""
	---help---
	This is one of the SPI communication pins, involved in setting up a
	working LCD configuration. The exact role of SPI may differ for
	different hardware setups. The option takes a string in the format
	understood by 'name_to_gpio' function, e.g. PH1 for pin 1 of port H.

config VIDEO_LCD_SPI_SCLK
	string "SPI SCLK pin for LCD related config job"
	depends on VIDEO_LCD_SSD2828 || VIDEO_LCD_HITACHI_TX18D42VM
	default ""
	---help---
	This is one of the SPI communication pins, involved in setting up a
	working LCD configuration. The exact role of SPI may differ for
	different hardware setups. The option takes a string in the format
	understood by 'name_to_gpio' function, e.g. PH1 for pin 1 of port H.

config VIDEO_LCD_SPI_MOSI
	string "SPI MOSI pin for LCD related config job"
	depends on VIDEO_LCD_SSD2828 || VIDEO_LCD_HITACHI_TX18D42VM
	default ""
	---help---
	This is one of the SPI communication pins, involved in setting up a
	working LCD configuration. The exact role of SPI may differ for
	different hardware setups. The option takes a string in the format
	understood by 'name_to_gpio' function, e.g. PH1 for pin 1 of port H.

config VIDEO_LCD_SPI_MISO
	string "SPI MISO pin for LCD related config job (optional)"
	depends on VIDEO_LCD_SSD2828
	default ""
	---help---
	This is one of the SPI communication pins, involved in setting up a
	working LCD configuration. The exact role of SPI may differ for
	different hardware setups. If wired up, this pin may provide additional
	useful functionality. Such as bi-directional communication with the
	hardware and LCD panel id retrieval (if the panel can report it). The
	option takes a string in the format understood by 'name_to_gpio'
	function, e.g. PH1 for pin 1 of port H.

source "drivers/video/meson/Kconfig"

config VIDEO_MVEBU
	bool "Armada XP LCD controller"
	default n
	---help---
	Support for the LCD controller integrated in the Marvell
	Armada XP SoC.

config VIDEO_OMAP3
	bool "Enable OMAP3+ DSS Support"
	depends on ARCH_OMAP2PLUS
	help
	  This enables the Display subsystem (DSS) on OMAP3+ boards.

config I2C_EDID
	bool "Enable EDID library"
	default n
	help
	   This enables library for accessing EDID data from an LCD panel.

config DISPLAY
	bool "Enable Display support"
	depends on DM
	default n
	select I2C_EDID
	help
	   This supports drivers that provide a display, such as eDP (Embedded
	   DisplayPort) and HDMI (High Definition Multimedia Interface).
	   The devices provide a simple interface to start up the display,
	   read display information and enable it.

config NXP_TDA19988
	bool "Enable NXP TDA19988 support"
	depends on DISPLAY
	default n
	help
	  This enables support for the NXP TDA19988 HDMI encoder. This encoder
	  will convert RGB data streams into HDMI-encoded signals.

config ATMEL_HLCD
	bool "Enable ATMEL video support using HLCDC"
	help
	   HLCDC supports video output to an attached LCD panel.

config AM335X_LCD
	bool "Enable AM335x video support"
	help
	   Supports video output to an attached LCD panel.

config LOGICORE_DP_TX
	bool "Enable Logicore DP TX driver"
	depends on DISPLAY
	help
	  Enable the driver for the transmitter part of the Xilinx LogiCORE
	  DisplayPort, a IP core for Xilinx FPGAs that implements a DisplayPort
	  video interface as defined by VESA DisplayPort v1.2.

	  Note that this is a pure transmitter device, and has no display
	  capabilities by itself.

config VIDEO_BROADWELL_IGD
	bool "Enable Intel Broadwell integrated graphics device"
	depends on X86
	help
	  This enables support for integrated graphics on Intel broadwell
	  devices. Initialisation is mostly performed by a VGA boot ROM, with
	  some setup handled by U-Boot itself. The graphics adaptor works as
	  a VESA device and supports LCD panels, eDP and LVDS outputs.
	  Configuration of most aspects of device operation is performed using
	  a special tool which configures the VGA ROM, but the graphics
	  resolution can be selected in U-Boot.

config VIDEO_IVYBRIDGE_IGD
	bool "Enable Intel Ivybridge integration graphics support"
	depends on X86
	help
	  This enables support for integrated graphics on Intel ivybridge
	  devices. Initialisation is mostly performed by a VGA boot ROM, with
	  some setup handled by U-Boot itself. The graphics adaptor works as
	  a VESA device and supports LCD panels, eDP and LVDS outputs.
	  Configuration of most aspects of device operation is performed using
	  a special tool which configures the VGA ROM, but the graphics
	  resolution can be selected in U-Boot.

config VIDEO_FSL_DCU_FB
	bool "Enable Freescale Display Control Unit"
	depends on VIDEO || DM_VIDEO
	help
	 This enables support for Freescale Display Control Unit (DCU4)
	 module found on Freescale Vybrid and QorIQ family of SoCs.

config VIDEO_FSL_DCU_MAX_FB_SIZE_MB
	int "Freescale DCU framebuffer size"
	depends on VIDEO_FSL_DCU_FB
	default 4194304
	help
	 Set maximum framebuffer size to be used for Freescale Display
	 Controller Unit (DCU4).

source "drivers/video/rockchip/Kconfig"

config VIDEO_ARM_MALIDP
	bool "Enable Arm Mali Display Processor support"
	depends on DM_VIDEO && OF_CONTROL
	select VEXPRESS_CLK
	help
	  This enables support for Arm Ltd Mali Display Processors from
	  the DP500, DP550 and DP650 family.

config VIDEO_SANDBOX_SDL
	bool "Enable sandbox video console using SDL"
	depends on SANDBOX
	help
	  When using sandbox you can enable an emulated LCD display which
	  appears as an SDL (Simple DirectMedia Layer) window. This is a
	  console device and can display stdout output. Within U-Boot is is
	  a normal bitmap display and can display images as well as text.

source "drivers/video/stm32/Kconfig"

config VIDEO_TEGRA20
	bool "Enable LCD support on Tegra20"
	depends on OF_CONTROL
	help
	   Tegra20 supports video output to an attached LCD panel as well as
	   other options such as HDMI. Only the LCD is supported in U-Boot.
	   This option enables this support which can be used on devices which
	   have an LCD display connected.

config VIDEO_TEGRA124
	bool "Enable video support on Tegra124"
	depends on DM_VIDEO
	help
	   Tegra124 supports many video output options including eDP and
	   HDMI. At present only eDP is supported by U-Boot. This option
	   enables this support which can be used on devices which
	   have an eDP display connected.

source "drivers/video/bridge/Kconfig"

source "drivers/video/imx/Kconfig"

config VIDEO
	bool "Enable legacy video support"
	depends on !DM_VIDEO
	help
	  Define this for video support, without using driver model. Some
	  drivers use this because they are not yet converted to driver
	  model. Video drivers typically provide a colour text console and
	  cursor.

config CFB_CONSOLE
	bool "Enable colour frame buffer console"
	depends on VIDEO
	default y if VIDEO
	help
	  Enables the colour frame buffer driver. This supports colour
	  output on a bitmap display from an in-memory frame buffer.
	  Several colour devices are supported along with various options to
	  adjust the supported features. The driver is implemented in
	  cfb_console.c

	  The following defines are needed (cf. smiLynxEM, i8042)
		VIDEO_FB_LITTLE_ENDIAN	graphic memory organisation
					(default big endian)
		VIDEO_HW_RECTFILL	graphic chip supports
					rectangle fill (cf. smiLynxEM)
		VIDEO_HW_BITBLT		graphic chip supports
					bit-blit (cf. smiLynxEM)
		VIDEO_VISIBLE_COLS	visible pixel columns (cols=pitch)
		VIDEO_VISIBLE_ROWS	visible pixel rows
		VIDEO_PIXEL_SIZE	bytes per pixel
		VIDEO_DATA_FORMAT	graphic data format
					(0-5, cf. cfb_console.c)
		VIDEO_FB_ADRS		framebuffer address
		VIDEO_KBD_INIT_FCT	keyboard int fct (i.e. rx51_kp_init())
		VIDEO_TSTC_FCT		test char fct (i.e. rx51_kp_tstc)
		VIDEO_GETC_FCT		get char fct (i.e. rx51_kp_getc)
		CONFIG_VIDEO_LOGO	display Linux logo in upper left corner
		CONFIG_VIDEO_BMP_LOGO	use bmp_logo.h instead of linux_logo.h
					for logo. Requires CONFIG_VIDEO_LOGO
		CONFIG_CONSOLE_EXTRA_INFO
					additional board info beside
					the logo
		CONFIG_HIDE_LOGO_VERSION
					do not display bootloader
					version string

	  When CONFIG_CFB_CONSOLE is defined, the video console is the
	  default console. The serial console can be forced by setting the
	  environment 'console=serial'.

config CFB_CONSOLE_ANSI
	bool "Support ANSI escape sequences"
	depends on CFB_CONSOLE
	help
	  This allows the colour buffer frame buffer driver to support
	  a limited number of ANSI escape sequences (cursor control,
	  erase functions and limited graphics rendition control). Normal
	  output from U-Boot will pass through this filter.

config VGA_AS_SINGLE_DEVICE
	bool "Set the video as an output-only device"
	depends on CFB_CONSOLE
	default y
	help
	  If enable the framebuffer device will be initialized as an
	  output-only device. The Keyboard driver will not be set up. This
	  may be used if you have no keyboard device, or more than one
	  (USB Keyboard, AT Keyboard).

config VIDEO_SW_CURSOR
	bool "Enable a software cursor"
	depends on CFB_CONSOLE
	default y if CFB_CONSOLE
	help
	  This draws a cursor after the last character. No blinking is
	  provided. This makes it possible to see the current cursor
	  position when entering text on the console. It is recommended to
	  enable this.

config CONSOLE_EXTRA_INFO
	bool "Display additional board information"
	depends on CFB_CONSOLE
	help
	  Display additional board information strings that normally go to
	  the serial port. When this option is enabled, a board-specific
	  function video_get_info_str() is called to get the string for
	  each line of the display. The function should return the string,
	  which can be empty if there is nothing to display for that line.

config CONSOLE_SCROLL_LINES
	int "Number of lines to scroll the console by"
	depends on CFB_CONSOLE || DM_VIDEO || LCD
	default 1
	help
	  When the console need to be scrolled, this is the number of
	  lines to scroll by. It defaults to 1. Increasing this makes the
	  console jump but can help speed up operation when scrolling
	  is slow.

config SYS_CONSOLE_BG_COL
	hex "Background colour"
	depends on CFB_CONSOLE
	default 0x00
	help
	  Defines the background colour for the console. The value is from
	  0x00 to 0xff and the meaning depends on the graphics card.
	  Typically, 0x00 means black and 0xff means white. Do not set
	  the background and foreground to the same colour or you will see
	  nothing.

config SYS_CONSOLE_FG_COL
	hex "Foreground colour"
	depends on CFB_CONSOLE
	default 0xa0
	help
	  Defines the foreground colour for the console. The value is from
	  0x00 to 0xff and the meaning depends on the graphics card.
	  Typically, 0x00 means black and 0xff means white. Do not set
	  the background and foreground to the same colour or you will see
	  nothing.

config LCD
	bool "Enable legacy LCD support"
	help
	  Define this to enable LCD support (for output to LCD display).
	  You will also need to select an LCD driver using an additional
	  CONFIG option. See the README for details. Drives which have been
	  converted to driver model will instead used CONFIG_DM_VIDEO.

config VIDEO_DW_HDMI
	bool
	help
	  Enables the common driver code for the Designware HDMI TX
	  block found in SoCs from various vendors.
	  As this does not provide any functionality by itself (but
	  rather requires a SoC-specific glue driver to call it), it
	  can not be enabled from the configuration menu.

config VIDEO_DSI_HOST_SANDBOX
	bool "Enable sandbox for dsi host"
	depends on SANDBOX
	select VIDEO_MIPI_DSI
	help
	  Enable support for sandbox dsi host device used for testing
	  purposes.
	  Display Serial Interface (DSI) defines a serial bus and
	  a communication protocol between the host and the device
	  (panel, bridge).

config VIDEO_DW_MIPI_DSI
	bool
	select VIDEO_MIPI_DSI
	help
	  Enables the common driver code for the Synopsis Designware
	  MIPI DSI block found in SoCs from various vendors.
	  As this does not provide any functionality by itself (but
	  rather requires a SoC-specific glue driver to call it), it
	  can not be enabled from the configuration menu.

config VIDEO_SIMPLE
	bool "Simple display driver for preconfigured display"
	help
	  Enables a simple generic display driver which utilizes the
	  simple-framebuffer devicetree bindings.

	  This driver assumes that the display hardware has been initialized
	  before u-boot starts, and u-boot will simply render to the pre-
	  allocated frame buffer surface.

config VIDEO_DT_SIMPLEFB
	bool "Enable SimpleFB support for passing framebuffer to OS"
	help
	  Enables the code to pass the framebuffer to the kernel as a
	  simple framebuffer in the device tree.
	  The video output is initialized by U-Boot, and kept by the
	  kernel.

config OSD
	bool "Enable OSD support"
	depends on DM
	default n
	help
	   This supports drivers that provide a OSD (on-screen display), which
	   is a (usually text-oriented) graphics buffer to show information on
	   a display.

config SANDBOX_OSD
	bool "Enable sandbox OSD"
	depends on OSD
	help
	  Enable support for sandbox OSD device used for testing purposes.

config IHS_VIDEO_OUT
	bool "Enable IHS video out driver"
	depends on OSD
	help
	  Enable support for the gdsys Integrated Hardware Systems (IHS) video
	  out On-screen Display (OSD) used on gdsys FPGAs to control dynamic
	  textual overlays of the display outputs.

endmenu
