diff options
| author | Timur Tabi <timur@freescale.com> | 2011-03-21 16:38:49 -0500 | 
|---|---|---|
| committer | Anatolij Gustschin <agust@denx.de> | 2011-04-28 21:31:02 +0200 | 
| commit | a5dbdc81ea70daa04e49eb0004a0441131a029c6 (patch) | |
| tree | 82c8239819c405c007953a3b8d3353d4115f6496 /drivers/video/videomodes.c | |
| parent | 74446b63dd4ec386fc5de554d5c4a3536096072f (diff) | |
| download | olio-uboot-2014.01-a5dbdc81ea70daa04e49eb0004a0441131a029c6.tar.xz olio-uboot-2014.01-a5dbdc81ea70daa04e49eb0004a0441131a029c6.zip | |
video: parse the video-mode environment variable
Add function video_get_video_mode(), which parses the "video-mode" environment
variable and returns each of its components.  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, 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
Signed-off-by: Timur Tabi <timur@freescale.com>
Diffstat (limited to 'drivers/video/videomodes.c')
| -rw-r--r-- | drivers/video/videomodes.c | 64 | 
1 files changed, 64 insertions, 0 deletions
| diff --git a/drivers/video/videomodes.c b/drivers/video/videomodes.c index d27ce1d2c..6fe5811ae 100644 --- a/drivers/video/videomodes.c +++ b/drivers/video/videomodes.c @@ -1,6 +1,7 @@  /*   * (C) Copyright 2004   * Pierre Aubert, Staubli Faverges , <p.aubert@staubli.com> + * Copyright 2011 Freescale Semiconductor, Inc.   *   * See file CREDITS for list of people who contributed to this   * project. @@ -73,6 +74,8 @@  ****************************************************************************/  #include <common.h> +#include <linux/ctype.h> +  #include "videomodes.h"  const struct ctfb_vesa_modes vesa_modes[VESA_MODES_COUNT] = { @@ -206,3 +209,64 @@ int video_get_params (struct ctfb_res_modes *pPar, char *penv)  	}  	return bpp;  } + +/* + * Parse the 'video-mode' environment variable + * + * Example: "video-mode=fslfb:1280x1024-32@60,monitor=dvi".  See + * doc/README.video for more information on how to set the variable. + * + * @xres: returned value of X-resolution + * @yres: returned value of Y-resolution + * @depth: returned value of color depth + * @freq: returned value of monitor frequency + * @options: pointer to any remaining options, or NULL + * + * Returns 1 if valid values were found, 0 otherwise + */ +int video_get_video_mode(unsigned int *xres, unsigned int *yres, +	unsigned int *depth, unsigned int *freq, const char **options) +{ +	char *p = getenv("video-mode"); +	if (!p) +		return 0; + +	/* Skip over the driver name, which we don't care about. */ +	p = strchr(p, ':'); +	if (!p) +		return 0; + +	/* Get the X-resolution*/ +	while (*p && !isdigit(*p)) +		p++; +	*xres = simple_strtoul(p, &p, 10); +	if (!*xres) +		return 0; + +	/* Get the Y-resolution */ +	while (*p && !isdigit(*p)) +		p++; +	*yres = simple_strtoul(p, &p, 10); +	if (!*yres) +		return 0; + +	/* Get the depth */ +	while (*p && !isdigit(*p)) +		p++; +	*depth = simple_strtoul(p, &p, 10); +	if (!*depth) +		return 0; + +	/* Get the frequency */ +	while (*p && !isdigit(*p)) +		p++; +	*freq = simple_strtoul(p, &p, 10); +	if (!*freq) +		return 0; + +	/* Find the extra options, if any */ +	p = strchr(p, ','); +	*options = p ? p + 1 : NULL; + +	return 1; +} |