mirror of
https://github.com/torvalds/linux.git
synced 2024-12-21 02:21:36 +00:00
cc3f414cf2
This adds support for reading display timings from DT into a struct display_timings. The of_display_timing implementation supports multiple subnodes. All children are read into an array, that can be queried. If no native mode is specified, the first subnode will be used. For cases where the graphics driver knows there can be only one mode description or where the driver only supports one mode, a helper function of_get_videomode is added, that gets a struct videomode from DT. Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Acked-by: Stephen Warren <swarren@nvidia.com> Reviewed-by: Thierry Reding <thierry.reding@avionic-design.de> Acked-by: Thierry Reding <thierry.reding@avionic-design.de> Tested-by: Thierry Reding <thierry.reding@avionic-design.de> Tested-by: Philipp Zabel <p.zabel@pengutronix.de> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Tested-by: Afzal Mohammed <Afzal@ti.com> Tested-by: Rob Clark <robclark@gmail.com> Tested-by: Leela Krishna Amudala <leelakrishna.a@gmail.com>
110 lines
3.9 KiB
Plaintext
110 lines
3.9 KiB
Plaintext
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
|
|
|
|
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>;
|
|
};
|