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