* Patch by Pierre Aubert, 18 Mar 2004:
- Unify video mode handling for Chips & Technologies 69000 Video
chip and Silicon Motion SMI 712/710/810 Video chip
- Add selection of the video output (CRT or LCD) via 'videoout'
environment variable for the Silicon Motion
- README update
* Patch by Pierre Aubert, 18 Mar 2004:
include/common.h typo fix
* Patches by Tolunay Orkun, 17 Mar 2004:
- Add support for bd->bi_iic_fast[] initialization via environment
variable "i2cfast" (CONFIG_I2CFAST)
- Add "i2cfast" u-boot environment variable support for csb272
diff --git a/drivers/ct69000.c b/drivers/ct69000.c
index ba69663..f510f37 100644
--- a/drivers/ct69000.c
+++ b/drivers/ct69000.c
@@ -26,52 +26,6 @@
*
*/
-/************************************************************************
- Get Parameters for the video mode:
- Parameters can be set via the variable "videomode" in the environment.
- 2 diferent ways are possible:
- "videomode=301" - 301 is a hexadecimal number describing the VESA
- mode. Following modes are implemented:
-
- Colors 640x480 800x600 1024x768 1152x864
- --------+-----------------------------------
- 8 bits | 0x301 0x303 0x305 0x161
- 15 bits | 0x310 0x313 0x316 0x162
- 16 bits | 0x311 0x314 0x317 0x163
- 24 bits | 0x312 0x315 0x318 ?
- --------+-----------------------------------
- "videomode=bootargs"
- - the parameters are parsed from the bootargs.
- The format is "NAME:VALUE,NAME:VALUE" etc.
- Ex.:
- "bootargs=video=ctfb:x:800,y:600,depth:16,pclk:25000"
- Parameters not included in the list will be taken from
- the default mode, which is one of the following:
- mode:0 640x480x24
- mode:1 800x600x16
- mode:2 1024x768x8
- mode:3 960x720x24
- mode:4 1152x864x16
- if "mode" is not provided within the parameter list,
- mode:0 is assumed.
- Following parameters are supported:
- x xres = visible resolution horizontal
- y yres = visible resolution vertical
- pclk pixelclocks in pico sec
- le left_marging time from sync to picture in pixelclocks
- ri right_marging time from picture to sync in pixelclocks
- up upper_margin time from sync to picture
- lo lower_margin
- hs hsync_len length of horizontal sync
- vs vsync_len length of vertical sync
- sync see FB_SYNC_*
- vmode see FB_VMODE_*
- depth Color depth in bits per pixel
- All other parameters in the variable bootargs are ignored.
- It is also possible to set the parameters direct in the
- variable "videomode", or in another variable i.e.
- "myvideo" and setting the variable "videomode=myvideo"..
-****************************************************************************/
#include <common.h>
@@ -79,6 +33,7 @@
#include <pci.h>
#include <video_fb.h>
+#include "videomodes.h"
#ifdef CONFIG_VIDEO_CT69000
@@ -304,32 +259,6 @@
*
*/
-/******************************************************************
- * Resolution Struct
- ******************************************************************/
-struct ctfb_res_modes {
- int xres; /* visible resolution */
- int yres;
- /* Timing: All values in pixclocks, except pixclock (of course) */
- int pixclock; /* pixel clock in ps (pico seconds) */
- int left_margin; /* time from sync to picture */
- int right_margin; /* time from picture to sync */
- int upper_margin; /* time from sync to picture */
- int lower_margin;
- int hsync_len; /* length of horizontal sync */
- int vsync_len; /* length of vertical sync */
- int sync; /* see FB_SYNC_* */
- int vmode; /* see FB_VMODE_* */
-};
-
-/******************************************************************
- * Vesa Mode Struct
- ******************************************************************/
-struct ctfb_vesa_modes {
- int vesanr; /* Vesa number as in LILO (VESA Nr + 0x200} */
- int resindex; /* index to resolution struct */
- int bits_per_pixel; /* bpp */
-};
/*******************************************************************
* Chips struct
*******************************************************************/
@@ -351,58 +280,6 @@
{0, 0, 0, 0, 0, 0, 0, 0, 0} /* Terminator */
};
-/*************************************************
- Video Modes:
-Colours 640x400 640x480 800x600 1024x768 1152x864 1280x1024 1600x1200
---------+--------------------------------------------------------------
- 4 bits | ? ? 0x302 ? ? ? ?
- 8 bits | 0x300 0x301 0x303 0x305 0x161 0x307 0x31C
-15 bits | ? 0x310 0x313 0x316 0x162 0x319 0x31D
-16 bits | ? 0x311 0x314 0x317 0x163 0x31A 0x31E
-24 bits | ? 0x312 0x315 0x318 ? 0x31B 0x31F
-32 bits | ? ? ? ? 0x164 ?
-*/
-
-#define RES_MODE_640x480 0
-#define RES_MODE_800x600 1
-#define RES_MODE_1024x768 2
-#define RES_MODE_960_720 3
-#define RES_MODE_1152x864 4
-#define RES_MODES_COUNT 5
-
-#define VESA_MODES_COUNT 15
-
-static const struct ctfb_vesa_modes vesa_modes[VESA_MODES_COUNT] = {
- {0x301, RES_MODE_640x480, 8},
- {0x310, RES_MODE_640x480, 15},
- {0x311, RES_MODE_640x480, 16},
- {0x312, RES_MODE_640x480, 24},
- {0x303, RES_MODE_800x600, 8},
- {0x313, RES_MODE_800x600, 15},
- {0x314, RES_MODE_800x600, 16},
- {0x315, RES_MODE_800x600, 24},
- {0x305, RES_MODE_1024x768, 8},
- {0x316, RES_MODE_1024x768, 15},
- {0x317, RES_MODE_1024x768, 16},
- {0x318, RES_MODE_1024x768, 24},
- {0x161, RES_MODE_1152x864, 8},
- {0x162, RES_MODE_1152x864, 15},
- {0x163, RES_MODE_1152x864, 16}
-};
-
-static const struct ctfb_res_modes res_mode_init[RES_MODES_COUNT] = {
- /* x y pixclk le ri up lo hs vs s vmode */
- {640, 480, 39721, 40, 24, 32, 11, 96, 2, 0,
- FB_VMODE_NONINTERLACED},
- {800, 600, 27778, 64, 24, 22, 1, 72, 2, 0, FB_VMODE_NONINTERLACED},
- {1024, 768, 15384, 168, 8, 29, 3, 144, 4, 0,
- FB_VMODE_NONINTERLACED},
- {960, 720, 13100, 160, 40, 32, 8, 80, 4, 0,
- FB_VMODE_NONINTERLACED},
- {1152, 864, 12004, 200, 64, 32, 16, 80, 4, 0,
- FB_VMODE_NONINTERLACED}
-};
-
/*
* The Graphic Device
*/
@@ -1079,108 +956,6 @@
video_wait_bitblt (pGD->pciBase + BR04_o);
}
-/************************************************************************
- * Get Parameters for the video mode:
- */
-/*********************************************************************
- * returns the length to the next seperator
- */
-static int
-video_get_param_len (char *start, char sep)
-{
- int i = 0;
- while ((*start != 0) && (*start != sep)) {
- start++;
- i++;
- }
- return i;
-}
-
-static int
-video_search_param (char *start, char *param)
-{
- int len, totallen, i;
- char *p = start;
- len = strlen (param);
- totallen = len + strlen (start);
- for (i = 0; i < totallen; i++) {
- if (strncmp (p++, param, len) == 0)
- return (i);
- }
- return -1;
-}
-
-/***************************************************************
-* Get parameter via the environment as it is done for the
-* linux kernel i.e:
-* video=ctfb:x:800,xv:1280,y:600,yv:1024,depth:16,mode:0,pclk:25000,
-* le:56,ri:48,up:26,lo:5,hs:152,vs:2,sync:0,vmode:0,accel:0
-*
-* penv is a pointer to the environment, containing the string, or the name of
-* another environment variable. It could even be the term "bootargs"
-*/
-
-#define GET_OPTION(name,var) \
- if(strncmp(p,name,strlen(name))==0) { \
- val_s=p+strlen(name); \
- var=simple_strtoul(val_s, NULL, 10); \
- }
-
-static int
-video_get_params (struct ctfb_res_modes *pPar, char *penv)
-{
- char *p, *s, *val_s;
- int i = 0, t;
- int bpp;
- int mode;
- /* first search for the environment containing the real param string */
- s = penv;
- if ((p = getenv (s)) != NULL) {
- s = p;
- }
- /* in case of the bootargs line, we have to start
- * after "video=ctfb:"
- */
- i = video_search_param (s, "video=ctfb:");
- if (i >= 0) {
- s += i;
- s += strlen ("video=ctfb:");
- }
- /* search for mode as a default value */
- p = s;
- t = 0;
- mode = 0; /* default */
- while ((i = video_get_param_len (p, ',')) != 0) {
- GET_OPTION ("mode:", mode)
- p += i;
- if (*p != 0)
- p++; /* skip ',' */
- }
- if (mode >= RES_MODES_COUNT)
- mode = 0;
- *pPar = res_mode_init[mode]; /* copy default values */
- bpp = 24 - ((mode % 3) * 8);
- p = s; /* restart */
- while ((i = video_get_param_len (p, ',')) != 0) {
- GET_OPTION ("x:", pPar->xres)
- GET_OPTION ("y:", pPar->yres)
- GET_OPTION ("le:", pPar->left_margin)
- GET_OPTION ("ri:", pPar->right_margin)
- GET_OPTION ("up:", pPar->upper_margin)
- GET_OPTION ("lo:", pPar->lower_margin)
- GET_OPTION ("hs:", pPar->hsync_len)
- GET_OPTION ("vs:", pPar->vsync_len)
- GET_OPTION ("sync:", pPar->sync)
- GET_OPTION ("vmode:", pPar->vmode)
- GET_OPTION ("pclk:", pPar->pixclock)
- GET_OPTION ("depth:", bpp)
- p += i;
- if (*p != 0)
- p++; /* skip ',' */
- }
- return bpp;
-}
-
/****************************************************************************
* supported Video Chips
*/