#
# 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
	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 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.

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_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
	help
	  Enable support for the Syncoam PM-OLED display driver (RGB 160x128).
	  Currently driver is supporting only SPI interface.

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 CFB_CONSOLE
	bool "Enable colour frame buffer console"
	depends on VIDEO || ARCH_OMAP2PLUS
	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 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 || CFB_CONSOLE
	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
