| 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. | |
| - *-supply : Any number of regulators used by the framebuffer. These should | |
| be named according to the names in the device's design. | |
| The above resources are expected to already be configured correctly. | |
| The OS must ensure they 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>; | |
| lcd-supply = <®_dc1sw>; | |
| 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. |