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 - syncclk-active: with - active high = drive sync on rising edge/ sample sync on falling edge of pixel clock - active low = drive sync on falling edge/ sample sync on rising edge of pixel clock - omitted = same configuration as pixelclk-active - 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 | | | | | v | | | +----------#######################################----------+-------+ | # ^ # | | | # | # | | | hback # | # hfront | hsync | | porch # | hactive # porch | len | |<-------->#<-------+--------------------------->#<-------->|<----->| | # | # | | | # |vactive # | | | # | # | | | # v # | | +----------#######################################----------+-------+ | | ^ | | | | | |vfront_porch | | | | | v | | | +----------+-------------------------------------+----------+-------+ | | ^ | | | | | |vsync_len | | | | | v | | | +----------+-------------------------------------+----------+-------+ Note: In addition to being used as subnode(s) of display-timings, the timing subnode may also be used on its own. This is appropriate if only one mode need be conveyed. In this case, the node should be named 'panel-timing'. 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>; };