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