| # 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. | |
| If a panel node is given, then the driver uses this to configure the | |
| physical width and height of the display. If no panel node is given, | |
| then the driver uses the width and height properties of the simplefb | |
| node to estimate it. | |
| 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 | |
| panel: | |
| $ref: /schemas/types.yaml#/definitions/phandle | |
| description: Display panel 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>; | |
| }; | |
| }; | |
| }; | |
| ... |