mirror of https://gitee.com/openkylin/linux.git
87 lines
3.4 KiB
Plaintext
87 lines
3.4 KiB
Plaintext
Simple Framebuffer
|
|
|
|
A simple frame-buffer describes a frame-buffer setup by firmware or
|
|
the bootloader, with the assumption that the display hardware has already
|
|
been set up to scan out from the memory pointed to by the reg property.
|
|
|
|
Since simplefb nodes represent runtime information they must be sub-nodes of
|
|
the chosen node (*). Simplefb nodes must be named "framebuffer@<address>".
|
|
|
|
If the devicetree contains nodes for the display hardware used by a simplefb,
|
|
then the simplefb node must contain a property called "display", which
|
|
contains a phandle pointing to the primary display hw node, so that the OS
|
|
knows which simplefb to disable when handing over control to a driver for the
|
|
real hardware. The bindings for the hw nodes must specify which node is
|
|
considered the primary node.
|
|
|
|
It is advised to add display# aliases to help the OS determine how to number
|
|
things. If display# aliases are used, then if the simplefb node contains a
|
|
"display" property then the /aliases/display# path must point to the display
|
|
hw node the "display" property points to, otherwise it must point directly
|
|
to the simplefb node.
|
|
|
|
If a simplefb node represents the preferred console for user interaction,
|
|
then the chosen node's stdout-path property should point to it, or to the
|
|
primary display hw node, as with display# aliases. If display aliases are
|
|
used then it should be set to the alias instead.
|
|
|
|
It is advised that devicetree files contain pre-filled, disabled framebuffer
|
|
nodes, so that the firmware only needs to update the mode information and
|
|
enable them. This way if e.g. later on support for more display clocks get
|
|
added, the simplefb nodes will already contain this info and the firmware
|
|
does not need to be updated.
|
|
|
|
If pre-filled framebuffer nodes are used, the firmware may need extra
|
|
information to find the right node. In that case an extra platform specific
|
|
compatible and platform specific properties should be used and documented,
|
|
see e.g. simple-framebuffer-sunxi.txt .
|
|
|
|
Required properties:
|
|
- compatible: "simple-framebuffer"
|
|
- reg: Should contain the location and size of the framebuffer memory.
|
|
- width: The width of the framebuffer in pixels.
|
|
- height: The height of the framebuffer in pixels.
|
|
- stride: The number of bytes in each line of the framebuffer.
|
|
- format: The format of the framebuffer surface. Valid values are:
|
|
- r5g6b5 (16-bit pixels, d[15:11]=r, d[10:5]=g, d[4:0]=b).
|
|
- a8b8g8r8 (32-bit pixels, d[31:24]=a, d[23:16]=b, d[15:8]=g, d[7:0]=r).
|
|
|
|
Optional properties:
|
|
- clocks : List of clocks used by the framebuffer. Clocks listed here
|
|
are expected to already be configured correctly. The OS must
|
|
ensure these clocks are not modified or disabled while the
|
|
simple framebuffer remains active.
|
|
- display : phandle pointing to the primary display hardware node
|
|
|
|
Example:
|
|
|
|
aliases {
|
|
display0 = &lcdc0;
|
|
}
|
|
|
|
chosen {
|
|
framebuffer0: framebuffer@1d385000 {
|
|
compatible = "simple-framebuffer";
|
|
reg = <0x1d385000 (1600 * 1200 * 2)>;
|
|
width = <1600>;
|
|
height = <1200>;
|
|
stride = <(1600 * 2)>;
|
|
format = "r5g6b5";
|
|
clocks = <&ahb_gates 36>, <&ahb_gates 43>, <&ahb_gates 44>;
|
|
display = <&lcdc0>;
|
|
};
|
|
stdout-path = "display0";
|
|
};
|
|
|
|
soc@01c00000 {
|
|
lcdc0: lcdc@1c0c000 {
|
|
compatible = "allwinner,sun4i-a10-lcdc";
|
|
...
|
|
};
|
|
};
|
|
|
|
|
|
*) Older devicetree files may have a compatible = "simple-framebuffer" node
|
|
in a different place, operating systems must first enumerate any compatible
|
|
nodes found under chosen and then check for other compatible nodes.
|