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 = <&reg_dc1sw>;
		display = <&lcdc0>;
	};
	stdout-path = "display0";
};

soc@1c00000 {
	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.
