hc
2023-12-06 d38611ca164021d018c1b23eee65bbebc09c63e0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
display-timing bindings
=======================
 
display-timings node
--------------------
 
required properties:
 - none
 
optional properties:
 - native-mode: The native mode for the display, in case multiple modes are
       provided. When omitted, assume the first node is the native.
 
timing subnode
--------------
 
required properties:
 - hactive, vactive: display resolution
 - hfront-porch, hback-porch, hsync-len: horizontal display timing parameters
   in pixels
   vfront-porch, vback-porch, vsync-len: vertical display timing parameters in
   lines
 - clock-frequency: display clock in Hz
 
optional properties:
 - hsync-active: hsync pulse is active low/high/ignored
 - vsync-active: vsync pulse is active low/high/ignored
 - de-active: data-enable pulse is active low/high/ignored
 - pixelclk-active: with
           - active high = drive pixel data on rising edge/
                   sample data on falling edge
           - active low  = drive pixel data on falling edge/
                   sample data on rising edge
           - ignored     = ignored
 - interlaced (bool): boolean to enable interlaced mode
 - doublescan (bool): boolean to enable doublescan mode
 - doubleclk (bool): boolean to enable doubleclock mode
 
All the optional properties that are not bool follow the following logic:
    <1>: high active
    <0>: low active
    omitted: not used on hardware
 
There are different ways of describing the capabilities of a display. The
devicetree representation corresponds to the one commonly found in datasheets
for displays. If a display supports multiple signal timings, the native-mode
can be specified.
 
The parameters are defined as:
 
  +----------+-------------------------------------+----------+-------+
  |          |        ↑                            |          |       |
  |          |        |vback_porch                 |          |       |
  |          |        ↓                            |          |       |
  +----------#######################################----------+-------+
  |          #        ↑                            #          |       |
  |          #        |                            #          |       |
  |  hback   #        |                            #  hfront  | hsync |
  |   porch  #        |       hactive              #  porch   |  len  |
  |<-------->#<-------+--------------------------->#<-------->|<----->|
  |          #        |                            #          |       |
  |          #        |vactive                     #          |       |
  |          #        |                            #          |       |
  |          #        ↓                            #          |       |
  +----------#######################################----------+-------+
  |          |        ↑                            |          |       |
  |          |        |vfront_porch                |          |       |
  |          |        ↓                            |          |       |
  +----------+-------------------------------------+----------+-------+
  |          |        ↑                            |          |       |
  |          |        |vsync_len                   |          |       |
  |          |        ↓                            |          |       |
  +----------+-------------------------------------+----------+-------+
 
Example:
 
   display-timings {
       native-mode = <&timing0>;
       timing0: 1080p24 {
           /* 1920x1080p24 */
           clock-frequency = <52000000>;
           hactive = <1920>;
           vactive = <1080>;
           hfront-porch = <25>;
           hback-porch = <25>;
           hsync-len = <25>;
           vback-porch = <2>;
           vfront-porch = <2>;
           vsync-len = <2>;
           hsync-active = <1>;
       };
   };
 
Every required property also supports the use of ranges, so the commonly used
datasheet description with minimum, typical and maximum values can be used.
 
Example:
 
   timing1: timing {
       /* 1920x1080p24 */
       clock-frequency = <148500000>;
       hactive = <1920>;
       vactive = <1080>;
       hsync-len = <0 44 60>;
       hfront-porch = <80 88 95>;
       hback-porch = <100 148 160>;
       vfront-porch = <0 4 6>;
       vback-porch = <0 36 50>;
       vsync-len = <0 5 6>;
   };