| # SPDX-License-Identifier: GPL-2.0 |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/display/simple-framebuffer.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Simple Framebuffer |
| |
| maintainers: |
| - Hans de Goede <hdegoede@redhat.com> |
| |
| description: |+ |
| 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 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. |
| |
| properties: |
| compatible: |
| oneOf: |
| - items: |
| - enum: |
| - apple,simple-framebuffer |
| - allwinner,simple-framebuffer |
| - amlogic,simple-framebuffer |
| - const: simple-framebuffer |
| - const: simple-framebuffer |
| |
| reg: |
| description: Location and size of the framebuffer memory |
| |
| memory-region: |
| maxItems: 1 |
| description: Phandle to a node describing the memory to be used for the |
| framebuffer. If present, overrides the "reg" property (if one exists). |
| |
| clocks: |
| description: List of clocks used by the framebuffer. |
| |
| power-domains: |
| description: List of power domains used by the framebuffer. |
| |
| width: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: Width of the framebuffer in pixels |
| |
| height: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: Height of the framebuffer in pixels |
| |
| stride: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: Number of bytes of a line in the framebuffer |
| |
| format: |
| description: > |
| Format of the framebuffer: |
| * `a1r5g5b5` - 16-bit pixels, d[15]=a, d[14:10]=r, d[9:5]=g, d[4:0]=b |
| * `a2r10g10b10` - 32-bit pixels, d[31:30]=a, d[29:20]=r, d[19:10]=g, d[9:0]=b |
| * `a8b8g8r8` - 32-bit pixels, d[31:24]=a, d[23:16]=b, d[15:8]=g, d[7:0]=r |
| * `a8r8g8b8` - 32-bit pixels, d[31:24]=a, d[23:16]=r, d[15:8]=g, d[7:0]=b |
| * `r5g6b5` - 16-bit pixels, d[15:11]=r, d[10:5]=g, d[4:0]=b |
| * `r5g5b5a1` - 16-bit pixels, d[15:11]=r, d[10:6]=g, d[5:1]=b d[1:0]=a |
| * `r8g8b8` - 24-bit pixels, d[23:16]=r, d[15:8]=g, d[7:0]=b |
| * `x1r5g5b5` - 16-bit pixels, d[14:10]=r, d[9:5]=g, d[4:0]=b |
| * `x2r10g10b10` - 32-bit pixels, d[29:20]=r, d[19:10]=g, d[9:0]=b |
| * `x8r8g8b8` - 32-bit pixels, d[23:16]=r, d[15:8]=g, d[7:0]=b |
| * `x8b8g8r8` - 32-bit pixels, d[23:16]=b, d[15:8]=g, d[7:0]=r |
| enum: |
| - a1r5g5b5 |
| - a2r10g10b10 |
| - a8b8g8r8 |
| - a8r8g8b8 |
| - r5g6b5 |
| - r5g5b5a1 |
| - r8g8b8 |
| - x1r5g5b5 |
| - x2r10g10b10 |
| - x8r8g8b8 |
| - x8b8g8r8 |
| |
| display: |
| $ref: /schemas/types.yaml#/definitions/phandle |
| description: Primary display hardware node |
| |
| allwinner,pipeline: |
| description: Pipeline used by the framebuffer on Allwinner SoCs |
| enum: |
| - de_be0-lcd0 |
| - de_be0-lcd0-hdmi |
| - de_be0-lcd0-tve0 |
| - de_be1-lcd0 |
| - de_be1-lcd1-hdmi |
| - de_fe0-de_be0-lcd0 |
| - de_fe0-de_be0-lcd0-hdmi |
| - de_fe0-de_be0-lcd0-tve0 |
| - mixer0-lcd0 |
| - mixer0-lcd0-hdmi |
| - mixer1-lcd1-hdmi |
| - mixer1-lcd1-tve |
| |
| amlogic,pipeline: |
| description: Pipeline used by the framebuffer on Amlogic SoCs |
| enum: |
| - vpu-cvbs |
| - vpu-hdmi |
| |
| patternProperties: |
| "^[a-zA-Z0-9-]+-supply$": |
| $ref: /schemas/types.yaml#/definitions/phandle |
| description: |
| Regulators used by the framebuffer. These should be named |
| according to the names in the device design. |
| |
| required: |
| # The binding requires also reg, width, height, stride and format, |
| # but usually they will be filled by the bootloader. |
| - compatible |
| |
| allOf: |
| - if: |
| properties: |
| compatible: |
| contains: |
| const: allwinner,simple-framebuffer |
| |
| then: |
| required: |
| - allwinner,pipeline |
| |
| - if: |
| properties: |
| compatible: |
| contains: |
| const: amlogic,simple-framebuffer |
| |
| then: |
| required: |
| - amlogic,pipeline |
| |
| |
| additionalProperties: false |
| |
| examples: |
| - | |
| / { |
| compatible = "foo"; |
| model = "foo"; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| |
| chosen { |
| #address-cells = <1>; |
| #size-cells = <1>; |
| framebuffer0: framebuffer@1d385000 { |
| compatible = "allwinner,simple-framebuffer", "simple-framebuffer"; |
| allwinner,pipeline = "de_be0-lcd0"; |
| reg = <0x1d385000 3840000>; |
| width = <1600>; |
| height = <1200>; |
| stride = <3200>; |
| format = "r5g6b5"; |
| clocks = <&ahb_gates 36>, <&ahb_gates 43>, <&ahb_gates 44>; |
| lcd-supply = <®_dc1sw>; |
| display = <&lcdc0>; |
| }; |
| }; |
| }; |
| |
| ... |