1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2004 3*4882a593Smuzhiyun * Pierre Aubert, Staubli Faverges , <p.aubert@staubli.com> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include <edid.h> 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef CONFIG_SYS_DEFAULT_VIDEO_MODE 11*4882a593Smuzhiyun #define CONFIG_SYS_DEFAULT_VIDEO_MODE 0x301 12*4882a593Smuzhiyun #endif 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun /* Some mode definitions */ 15*4882a593Smuzhiyun #define FB_SYNC_HOR_HIGH_ACT 1 /* horizontal sync high active */ 16*4882a593Smuzhiyun #define FB_SYNC_VERT_HIGH_ACT 2 /* vertical sync high active */ 17*4882a593Smuzhiyun #define FB_SYNC_EXT 4 /* external sync */ 18*4882a593Smuzhiyun #define FB_SYNC_COMP_HIGH_ACT 8 /* composite sync high active */ 19*4882a593Smuzhiyun #define FB_SYNC_BROADCAST 16 /* broadcast video timings */ 20*4882a593Smuzhiyun /* vtotal = 144d/288n/576i => PAL */ 21*4882a593Smuzhiyun /* vtotal = 121d/242n/484i => NTSC */ 22*4882a593Smuzhiyun #define FB_SYNC_ON_GREEN 32 /* sync on green */ 23*4882a593Smuzhiyun #define FB_VMODE_NONINTERLACED 0 /* non interlaced */ 24*4882a593Smuzhiyun #define FB_VMODE_INTERLACED 1 /* interlaced */ 25*4882a593Smuzhiyun #define FB_VMODE_DOUBLE 2 /* double scan */ 26*4882a593Smuzhiyun #define FB_VMODE_MASK 255 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #define FB_VMODE_YWRAP 256 /* ywrap instead of panning */ 29*4882a593Smuzhiyun #define FB_VMODE_SMOOTH_XPAN 512 /* smooth xpan possible (internally used) */ 30*4882a593Smuzhiyun #define FB_VMODE_CONUPDATE 512 /* don't update x/yoffset */ 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun /****************************************************************** 34*4882a593Smuzhiyun * Resolution Struct 35*4882a593Smuzhiyun ******************************************************************/ 36*4882a593Smuzhiyun struct ctfb_res_modes { 37*4882a593Smuzhiyun int xres; /* visible resolution */ 38*4882a593Smuzhiyun int yres; 39*4882a593Smuzhiyun int refresh; /* vertical refresh rate in hz */ 40*4882a593Smuzhiyun /* Timing: All values in pixclocks, except pixclock (of course) */ 41*4882a593Smuzhiyun int pixclock; /* pixel clock in ps (pico seconds) */ 42*4882a593Smuzhiyun int pixclock_khz; /* pixel clock in kHz */ 43*4882a593Smuzhiyun int left_margin; /* time from sync to picture */ 44*4882a593Smuzhiyun int right_margin; /* time from picture to sync */ 45*4882a593Smuzhiyun int upper_margin; /* time from sync to picture */ 46*4882a593Smuzhiyun int lower_margin; 47*4882a593Smuzhiyun int hsync_len; /* length of horizontal sync */ 48*4882a593Smuzhiyun int vsync_len; /* length of vertical sync */ 49*4882a593Smuzhiyun int sync; /* see FB_SYNC_* */ 50*4882a593Smuzhiyun int vmode; /* see FB_VMODE_* */ 51*4882a593Smuzhiyun }; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /****************************************************************** 54*4882a593Smuzhiyun * Vesa Mode Struct 55*4882a593Smuzhiyun ******************************************************************/ 56*4882a593Smuzhiyun struct ctfb_vesa_modes { 57*4882a593Smuzhiyun int vesanr; /* Vesa number as in LILO (VESA Nr + 0x200} */ 58*4882a593Smuzhiyun int resindex; /* index to resolution struct */ 59*4882a593Smuzhiyun int bits_per_pixel; /* bpp */ 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun #define RES_MODE_640x480 0 63*4882a593Smuzhiyun #define RES_MODE_800x600 1 64*4882a593Smuzhiyun #define RES_MODE_1024x768 2 65*4882a593Smuzhiyun #define RES_MODE_960_720 3 66*4882a593Smuzhiyun #define RES_MODE_1152x864 4 67*4882a593Smuzhiyun #define RES_MODE_1280x1024 5 68*4882a593Smuzhiyun #define RES_MODE_1280x720 6 69*4882a593Smuzhiyun #define RES_MODE_1360x768 7 70*4882a593Smuzhiyun #define RES_MODE_1920x1080 8 71*4882a593Smuzhiyun #define RES_MODE_1920x1200 9 72*4882a593Smuzhiyun #define RES_MODES_COUNT 10 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun #define VESA_MODES_COUNT 19 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun extern const struct ctfb_vesa_modes vesa_modes[]; 77*4882a593Smuzhiyun extern const struct ctfb_res_modes res_mode_init[]; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun int video_get_params (struct ctfb_res_modes *pPar, char *penv); 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun int video_get_video_mode(unsigned int *xres, unsigned int *yres, 82*4882a593Smuzhiyun unsigned int *depth, unsigned int *freq, const char **options); 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun void video_get_ctfb_res_modes(int default_mode, unsigned int default_depth, 85*4882a593Smuzhiyun const struct ctfb_res_modes **mode_ret, 86*4882a593Smuzhiyun unsigned int *depth_ret, 87*4882a593Smuzhiyun const char **options); 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun void video_get_option_string(const char *options, const char *name, 90*4882a593Smuzhiyun char *dest, int dest_len, const char *def); 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun int video_get_option_int(const char *options, const char *name, int def); 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun int video_edid_dtd_to_ctfb_res_modes(struct edid_detailed_timing *t, 95*4882a593Smuzhiyun struct ctfb_res_modes *mode); 96