/*
 * (C) Copyright 2000
 * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

"video-mode" environment variable
=================================

The 'video-mode' environment variable can be used to enable and configure
some video drivers.  The format matches the video= command-line option used
for Linux:

	video-mode=<driver>:<xres>x<yres>-<depth>@<freq><,option=string>

	<driver>	The video driver name, ignored by U-Boot
	<xres>		The X resolution (in pixels) to use.
	<yres>		The Y resolution (in pixels) to use.
	<depth>		The color depth (in bits) to use.
	<freq>		The frequency (in Hz) to use.
	<options>	A comma-separated list of device-specific options


U-Boot MPC8xx video controller driver
=====================================

The driver has been tested with the following configurations:

- MPC823FADS with AD7176 on a PAL TV (YCbYCr)	- arsenio@tin.it

Example: video-mode=fslfb:1280x1024-32@60,monitor=dvi


U-boot sunxi video controller driver
====================================

U-boot supports hdmi and lcd output on Allwinner sunxi SoCs, lcd output
requires the CONFIG_VIDEO_LCD_MODE Kconfig value to be set.

The sunxi u-boot driver supports the following video-mode options:

- monitor=[none|dvi|hdmi|lcd] - Select the video output to use
 none:     Disable video output.
 dvi/hdmi: Selects output over the hdmi connector with dvi resp. hdmi output
           format, if edid is used the format is automatically selected.
 lcd:      Selects video output to a LCD screen.
 vga:      Selects bideo output over the VGA connector.
 Defaults to monitor=dvi.

- hpd=[0|1] - Enable use of the hdmi HotPlug Detect feature
 0: Disabled. Configure dvi/hdmi output even if no cable is detected
 1: Enabled.  Fallback to the lcd / vga / none in that order (if available)
 Defaults to hpd=1.

- hpd_delay=<int> - How long to wait for the hdmi HPD signal in milliseconds
 When the monitor and the board power up at the same time, it may take some
 time for the monitor to assert the HPD signal. This configures how long to
 wait for the HPD signal before assuming no cable is connected.
 Defaults to hpd_delay=500.

- edid=[0|1] - Enable use of DDC + EDID to get monitor info
 0: Disabled.
 1: Enabled. If valid EDID info was read from the monitor the EDID info will
    overrides the xres, yres and refresh from the video-mode env. variable.
 Defaults to edid=1.

For example to always use the hdmi connector, even if no cable is inserted,
using edid info when available and otherwise initalizing it at 1024x768@60Hz,
use: "setenv video-mode sunxi:1024x768-24@60,monitor=dvi,hpd=0,edid=1".
