#
# 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 VIDEO_LOGO
	bool "Show the U-Boot logo on the display"
	depends on DM_VIDEO
	default y if !SPLASH_SCREEN
	select VIDEO_BMP_RLE8
	help
	  This enables showing the U-Boot logo on the display when a video
	  device is probed. It appears at the top right. The logo itself is at
	  tools/logos/u-boot_logo.bmp and looks best when the display has a
	  black background.

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 VIDEO_PCI_DEFAULT_FB_SIZE
	hex "Default framebuffer size to use if no drivers request it"
	depends on DM_VIDEO
	default 0x1000000 if X86 && PCI
	default 0 if !(X86 && PCI)
	help
	  Generally, video drivers request the amount of memory they need for
	  the frame buffer when they are bound, by setting the size field in
	  struct video_uc_plat. That memory is then reserved for use after
	  relocation. But PCI drivers cannot be bound before relocation unless
	  they are mentioned in the devicetree.

	  With this value set appropriately, it is possible for PCI video
	  devices to have a framebuffer allocated by U-Boot.

	  Note: the framebuffer needs to be large enough to store all pixels at
	  maximum resolution. For example, at 1920 x 1200 with 32 bits per
	  pixel, 2560 * 1600 * 32 / 8 = 0xfa0000 bytes are needed.

config VIDEO_COPY
	bool "Enable copying the frame buffer to a hardware copy"
	depends on DM_VIDEO
	help
	  On some machines (e.g. x86), reading from the frame buffer is very
	  slow because it is uncached. To improve performance, this feature
	  allows the frame buffer to be kept in cached memory (allocated by
	  U-Boot) and then copied to the hardware frame-buffer as needed.

	  To use this, your video driver must set @copy_base in
	  struct video_uc_plat.

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 DM_PANEL_HX8238D
	bool "Enable Himax HX-8238D LCD driver"
	depends on DM_VIDEO
	help
	  Support for HX-8238D LCD Panel
	  The  HX8238-D is a single chip controller and driver LSI that
	  integrates the power circuit.
	  It can drive a maximum 960x240 dot graphics on a-TFT panel
	  displays in 16M colors with dithering.

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 && BACKLIGHT && DM_GPIO
	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
	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 || EFI_APP
	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"
	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"
	---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 ATMEL_LCD
	bool "Atmel LCD panel support"
	depends on LCD && ARCH_AT91

config ATMEL_LCD_BGR555
	bool "Display in BGR555 mode"
	help
	  Use the BGR555 output mode.  Otherwise RGB565 is used.

config VIDEO_LCD_ORISETECH_OTM8009A
	bool "OTM8009A DSI LCD panel support"
	depends on DM_VIDEO
	select VIDEO_MIPI_DSI
	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
	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"
	---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 'sunxi_name_to_gpio' function, e.g. PH1 for pin 1 of port H.

config VIDEO_LCD_TDO_TL070WSH30
	bool "TDO TL070WSH30 DSI LCD panel support"
	depends on DM_VIDEO
	select VIDEO_MIPI_DSI
	help
	Say Y here if you want to enable support for TDO TL070WSH30
	1024x600 DSI video mode panel.

config VIDEO_LCD_HITACHI_TX18D42VM
	bool "Hitachi tx18d42vm LVDS LCD panel support"
	---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 'sunxi_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 'sunxi_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 'sunxi_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 'sunxi_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"
	---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"
	help
	   This enables library for accessing EDID data from an LCD panel.

config DISPLAY
	bool "Enable Display support"
	depends on DM
	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
	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.

source "drivers/video/ti/Kconfig"

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.

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_MXS
	bool "Enable video support on i.MX28/i.MX6UL/i.MX7 SoCs"
	depends on DM_VIDEO
	help
	  Enable framebuffer driver for i.MX28/i.MX6UL/i.MX7 processors

config VIDEO_NX
	bool "Enable video support on Nexell SoC"
	depends on ARCH_S5P6818 || ARCH_S5P4418
	help
	   Nexell SoC supports many video output options including eDP and
	   HDMI. This option enables this support which can be used on devices
	   which have an eDP display connected.

config VIDEO_SEPS525
	bool "Enable video support for Seps525"
	depends on DM_VIDEO && DM_GPIO
	help
	  Enable support for the Syncoam PM-OLED display driver (RGB 160x128).
	  Currently driver is supporting only SPI interface.

config VIDEO_ZYNQMP_DPSUB
	bool "Enable video support for ZynqMP Display Port"
	depends on DM_VIDEO && ZYNQMP_POWER_DOMAIN
	help
	  Enable support for Xilinx ZynqMP Display Port. Currently this file
	  is used as placeholder for driver. The main reason is to record
	  compatible string and calling power domain driver.

source "drivers/video/nexell/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 CONSOLE_SCROLL_LINES
	int "Number of lines to scroll the console by"
	depends on 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 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 LCD_INFO
	bool "Show LCD info on-screen"
	depends on LCD

config LCD_LOGO
	bool "Show a logo on screen"
	depends on LCD

config LCD_INFO_BELOW_LOGO
	bool "Show LCD info below the on-screen logo"
	depends on LCD_INFO && LCD_LOGO

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 VIDEO_MCDE_SIMPLE
	bool "Simple driver for ST-Ericsson MCDE with preconfigured display"
	depends on DM_VIDEO
	help
	  Enables a simple display driver for ST-Ericsson MCDE
	  (Multichannel Display Engine), which reads the configuration from
	  the MCDE registers.

	  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 OSD
	bool "Enable OSD support"
	depends on DM
	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.

config SPLASH_SCREEN
	bool "Show a splash-screen image"
	help
	  If this option is set, the environment is checked for a variable
	  "splashimage". If found, the usual display of logo, copyright and
	  system information on the LCD is suppressed and the BMP image at the
	  address specified in "splashimage" is loaded instead. The console is
	  redirected to the "nulldev", too. This allows for a "silent" boot
	  where a splash screen is loaded very quickly after power-on.

	  The splash_screen_prepare() function is a weak function defined in
	  common/splash.c. It is called as part of the splash screen display
	  sequence. It gives the board an opportunity to prepare the splash
	  image data before it is processed and sent to the frame buffer by
	  U-Boot. Define your own version to use this feature.

config SPLASHIMAGE_GUARD
	bool "Support unaligned BMP images"
	depends on SPLASH_SCREEN
	help
	  If this option is set, then U-Boot will prevent the environment
	  variable "splashimage" from being set to a problematic address
	  (see doc/README.displaying-bmps).

	  This option is useful for targets where, due to alignment
	  restrictions, an improperly aligned BMP image will cause a data
	  abort. If you think you will not have problems with unaligned
	  accesses (for example because your toolchain prevents them)
	  there is no need to set this option.

config SPLASH_SCREEN_ALIGN
	bool "Allow positioning the splash image anywhere on the display"
	depends on SPLASH_SCREEN || CMD_BMP
	help
	  If this option is set the splash image can be freely positioned
	  on the screen. Environment variable "splashpos" specifies the
	  position as "x,y". If a positive number is given it is used as
	  number of pixel from left/top. If a negative number is given it
	  is used as number of pixel from right/bottom. You can also
	  specify 'm' for centering the image.

	  Example:
	  setenv splashpos m,m
	  	=> image at center of screen

	  setenv splashpos 30,20
	  	=> image at x = 30 and y = 20

	  setenv splashpos -10,m
	  	=> vertically centered image
	  	   at x = dspWidth - bmpWidth - 9

config SPLASH_SOURCE
	bool "Control the source of the splash image"
	depends on SPLASH_SCREEN
	help
	  Use the splash_source.c library. This library provides facilities to
	  declare board specific splash image locations, routines for loading
	  splash image from supported locations, and a way of controlling the
	  selected splash location using the "splashsource" environment
	  variable.

	  This CONFIG works as follows:

	  - If splashsource is set to a supported location name as defined by
	    board code, use that splash location.
	  - If splashsource is undefined, use the first splash location as
	    default.
	  - If splashsource is set to an unsupported value, do not load a splash
	    screen.

	  A splash source location can describe either storage with raw data, a
	  storage formatted with a file system or a FIT image. In case of a
	  filesystem, the splash screen data is loaded as a file. The name of
	  the splash screen file can be controlled with the environment variable
	  "splashfile".

	  To enable loading the splash image from a FIT image, CONFIG_FIT must
	  be enabled. The FIT image has to start at the 'offset' field address
	  in the selected splash location. The name of splash image within the
	  FIT shall be specified by the environment variable "splashfile".

	  In case the environment variable "splashfile" is not defined the
	  default name 'splash.bmp' will be used.

config VIDEO_BMP_GZIP
	bool "Gzip compressed BMP image support"
	depends on CMD_BMP || SPLASH_SCREEN
	help
	  If this option is set, additionally to standard BMP
	  images, gzipped BMP images can be displayed via the
	  splashscreen support or the bmp command.

config VIDEO_BMP_RLE8
	bool "Run length encoded BMP image (RLE8) support"
	depends on DM_VIDEO
	help
	  If this option is set, the 8-bit RLE compressed BMP images
	  is supported.

config BMP_16BPP
	bool "16-bit-per-pixel BMP image support"
	depends on DM_VIDEO || LCD
	help
	  Support display of bitmaps file with 16-bit-per-pixel

config BMP_24BPP
	bool "24-bit-per-pixel BMP image support"
	depends on DM_VIDEO || LCD
	help
	  Support display of bitmaps file with 24-bit-per-pixel.

config BMP_32BPP
	bool "32-bit-per-pixel BMP image support"
	depends on DM_VIDEO || LCD
	help
	  Support display of bitmaps file with 32-bit-per-pixel.

config VIDEO_VCXK
	bool "Enable VCXK video controller driver support"
	help
	  This enables VCXK driver which can be used with VC2K, VC4K
	  and VC8K devices on various boards from BuS Elektronik GmbH.

endmenu
