mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-06-20 21:51:20 +00:00
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>
This commit is contained in:
parent
74446b63dd
commit
a5dbdc81ea
3 changed files with 86 additions and 0 deletions
|
@ -28,3 +28,22 @@ The driver has been tested with the following configurations:
|
||||||
|
|
||||||
- MPC823FADS with AD7176 on a PAL TV (YCbYCr) - arsenio@tin.it
|
- MPC823FADS with AD7176 on a PAL TV (YCbYCr) - arsenio@tin.it
|
||||||
- GENIETV with AD7177 on a PAL TV (YCbYCr) - arsenio@tin.it
|
- GENIETV with AD7177 on a PAL TV (YCbYCr) - arsenio@tin.it
|
||||||
|
|
||||||
|
|
||||||
|
"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
|
||||||
|
|
||||||
|
Example: video-mode=fslfb:1280x1024-32@60,monitor=dvi
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* (C) Copyright 2004
|
* (C) Copyright 2004
|
||||||
* Pierre Aubert, Staubli Faverges , <p.aubert@staubli.com>
|
* Pierre Aubert, Staubli Faverges , <p.aubert@staubli.com>
|
||||||
|
* Copyright 2011 Freescale Semiconductor, Inc.
|
||||||
*
|
*
|
||||||
* See file CREDITS for list of people who contributed to this
|
* See file CREDITS for list of people who contributed to this
|
||||||
* project.
|
* project.
|
||||||
|
@ -73,6 +74,8 @@
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
#include <linux/ctype.h>
|
||||||
|
|
||||||
#include "videomodes.h"
|
#include "videomodes.h"
|
||||||
|
|
||||||
const struct ctfb_vesa_modes vesa_modes[VESA_MODES_COUNT] = {
|
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;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -86,3 +86,6 @@ extern const struct ctfb_vesa_modes vesa_modes[];
|
||||||
extern const struct ctfb_res_modes res_mode_init[];
|
extern const struct ctfb_res_modes res_mode_init[];
|
||||||
|
|
||||||
int video_get_params (struct ctfb_res_modes *pPar, char *penv);
|
int video_get_params (struct ctfb_res_modes *pPar, char *penv);
|
||||||
|
|
||||||
|
int video_get_video_mode(unsigned int *xres, unsigned int *yres,
|
||||||
|
unsigned int *depth, unsigned int *freq, const char **options);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue