Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6082 | serge | 1 | /* |
2 | * Copyright 2012 Steffen Trumtrar |
||
3 | * |
||
4 | * description of display timings |
||
5 | * |
||
6 | * This file is released under the GPLv2 |
||
7 | */ |
||
8 | |||
9 | #ifndef __LINUX_DISPLAY_TIMING_H |
||
10 | #define __LINUX_DISPLAY_TIMING_H |
||
11 | |||
12 | #include |
||
13 | #include |
||
14 | |||
15 | enum display_flags { |
||
16 | DISPLAY_FLAGS_HSYNC_LOW = BIT(0), |
||
17 | DISPLAY_FLAGS_HSYNC_HIGH = BIT(1), |
||
18 | DISPLAY_FLAGS_VSYNC_LOW = BIT(2), |
||
19 | DISPLAY_FLAGS_VSYNC_HIGH = BIT(3), |
||
20 | |||
21 | /* data enable flag */ |
||
22 | DISPLAY_FLAGS_DE_LOW = BIT(4), |
||
23 | DISPLAY_FLAGS_DE_HIGH = BIT(5), |
||
24 | /* drive data on pos. edge */ |
||
25 | DISPLAY_FLAGS_PIXDATA_POSEDGE = BIT(6), |
||
26 | /* drive data on neg. edge */ |
||
27 | DISPLAY_FLAGS_PIXDATA_NEGEDGE = BIT(7), |
||
28 | DISPLAY_FLAGS_INTERLACED = BIT(8), |
||
29 | DISPLAY_FLAGS_DOUBLESCAN = BIT(9), |
||
30 | DISPLAY_FLAGS_DOUBLECLK = BIT(10), |
||
31 | }; |
||
32 | |||
33 | /* |
||
34 | * A single signal can be specified via a range of minimal and maximal values |
||
35 | * with a typical value, that lies somewhere inbetween. |
||
36 | */ |
||
37 | struct timing_entry { |
||
38 | u32 min; |
||
39 | u32 typ; |
||
40 | u32 max; |
||
41 | }; |
||
42 | |||
43 | /* |
||
44 | * Single "mode" entry. This describes one set of signal timings a display can |
||
45 | * have in one setting. This struct can later be converted to struct videomode |
||
46 | * (see include/video/videomode.h). As each timing_entry can be defined as a |
||
47 | * range, one struct display_timing may become multiple struct videomodes. |
||
48 | * |
||
49 | * Example: hsync active high, vsync active low |
||
50 | * |
||
51 | * Active Video |
||
52 | * Video ______________________XXXXXXXXXXXXXXXXXXXXXX_____________________ |
||
53 | * |<- sync ->|<- back ->|<----- active ----->|<- front ->|<- sync.. |
||
54 | * | | porch | | porch | |
||
55 | * |
||
56 | * HSync _|¯¯¯¯¯¯¯¯¯¯|___________________________________________|¯¯¯¯¯¯¯¯¯ |
||
57 | * |
||
58 | * VSync ¯|__________|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|_________ |
||
59 | */ |
||
60 | struct display_timing { |
||
61 | struct timing_entry pixelclock; |
||
62 | |||
63 | struct timing_entry hactive; /* hor. active video */ |
||
64 | struct timing_entry hfront_porch; /* hor. front porch */ |
||
65 | struct timing_entry hback_porch; /* hor. back porch */ |
||
66 | struct timing_entry hsync_len; /* hor. sync len */ |
||
67 | |||
68 | struct timing_entry vactive; /* ver. active video */ |
||
69 | struct timing_entry vfront_porch; /* ver. front porch */ |
||
70 | struct timing_entry vback_porch; /* ver. back porch */ |
||
71 | struct timing_entry vsync_len; /* ver. sync len */ |
||
72 | |||
73 | enum display_flags flags; /* display flags */ |
||
74 | }; |
||
75 | |||
76 | /* |
||
77 | * This describes all timing settings a display provides. |
||
78 | * The native_mode is the default setting for this display. |
||
79 | * Drivers that can handle multiple videomodes should work with this struct and |
||
80 | * convert each entry to the desired end result. |
||
81 | */ |
||
82 | struct display_timings { |
||
83 | unsigned int num_timings; |
||
84 | unsigned int native_mode; |
||
85 | |||
86 | struct display_timing **timings; |
||
87 | }; |
||
88 | |||
89 | /* get one entry from struct display_timings */ |
||
90 | static inline struct display_timing *display_timings_get(const struct |
||
91 | display_timings *disp, |
||
92 | unsigned int index) |
||
93 | { |
||
94 | if (disp->num_timings > index) |
||
95 | return disp->timings[index]; |
||
96 | else |
||
97 | return NULL; |
||
98 | } |
||
99 | |||
100 | void display_timings_release(struct display_timings *disp); |
||
101 | |||
102 | #endif->->----->->-> |