Prepare v2023.10
[platform/kernel/u-boot.git] / drivers / video / videomodes.h
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 /******************************************************************
29  * Resolution Struct
30  ******************************************************************/
31 struct ctfb_res_modes {
32         int xres;               /* visible resolution           */
33         int yres;
34         int refresh;            /* vertical refresh rate in hz  */
35         /* Timing: All values in pixclocks, except pixclock (of course) */
36         int pixclock;           /* pixel clock in ps (pico seconds) */
37         int pixclock_khz;       /* pixel clock in kHz           */
38         int left_margin;        /* time from sync to picture    */
39         int right_margin;       /* time from picture to sync    */
40         int upper_margin;       /* time from sync to picture    */
41         int lower_margin;
42         int hsync_len;          /* length of horizontal sync    */
43         int vsync_len;          /* length of vertical sync      */
44         int sync;               /* see FB_SYNC_*                */
45         int vmode;              /* see FB_VMODE_*               */
46 };
47
48 /******************************************************************
49  * Vesa Mode Struct
50  ******************************************************************/
51 struct ctfb_vesa_modes {
52         int vesanr;             /* Vesa number as in LILO (VESA Nr + 0x200} */
53         int resindex;           /* index to resolution struct */
54         int bits_per_pixel;     /* bpp */
55 };
56
57 #define RES_MODE_640x480        0
58 #define RES_MODE_800x600        1
59 #define RES_MODE_1024x768       2
60 #define RES_MODE_960_720        3
61 #define RES_MODE_1152x864       4
62 #define RES_MODE_1280x1024      5
63 #define RES_MODE_1280x720       6
64 #define RES_MODE_1360x768       7
65 #define RES_MODE_1920x1080      8
66 #define RES_MODE_1920x1200      9
67 #define RES_MODES_COUNT         10
68
69 #define VESA_MODES_COUNT 19
70
71 extern const struct ctfb_vesa_modes vesa_modes[];
72 extern const struct ctfb_res_modes res_mode_init[];
73
74 int video_get_params (struct ctfb_res_modes *pPar, char *penv);
75
76 int video_get_video_mode(unsigned int *xres, unsigned int *yres,
77         unsigned int *depth, unsigned int *freq, const char **options);
78
79 void video_get_ctfb_res_modes(int default_mode, unsigned int default_depth,
80                               const struct ctfb_res_modes **mode_ret,
81                               unsigned int *depth_ret,
82                               const char **options);
83
84 void video_get_option_string(const char *options, const char *name,
85                              char *dest, int dest_len, const char *def);
86
87 int video_get_option_int(const char *options, const char *name, int def);
88
89 int video_edid_dtd_to_ctfb_res_modes(struct edid_detailed_timing *t,
90                                      struct ctfb_res_modes *mode);
91 /**
92  * video_ctfb_mode_to_display_timing() - Convert a ctfb(Cathode Tube Frame
93  *                                       Buffer)_res_modes struct to a
94  *                                       display_timing struct.
95  *
96  * @mode:       Input ctfb_res_modes structure pointer to be converted
97  *              from
98  * @timing:     Output display_timing structure pointer to be converted to
99  */
100 void video_ctfb_mode_to_display_timing(const struct ctfb_res_modes *mode,
101                                        struct display_timing *timing);