^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) %YAML 1.2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) ---
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) $id: http://devicetree.org/schemas/display/simple-framebuffer.yaml#
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) $schema: http://devicetree.org/meta-schemas/core.yaml#
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) title: Simple Framebuffer Device Tree Bindings
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) maintainers:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) - Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) - Hans de Goede <hdegoede@redhat.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) description: |+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) A simple frame-buffer describes a frame-buffer setup by firmware or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) the bootloader, with the assumption that the display hardware has
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) already been set up to scan out from the memory pointed to by the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) reg property.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) Since simplefb nodes represent runtime information they must be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) sub-nodes of the chosen node (*). Simplefb nodes must be named
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) framebuffer@<address>.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) If the devicetree contains nodes for the display hardware used by a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) simplefb, then the simplefb node must contain a property called
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) display, which contains a phandle pointing to the primary display
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) hw node, so that the OS knows which simplefb to disable when handing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) over control to a driver for the real hardware. The bindings for the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) hw nodes must specify which node is considered the primary node.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) It is advised to add display# aliases to help the OS determine how
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) to number things. If display# aliases are used, then if the simplefb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) node contains a display property then the /aliases/display# path
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) must point to the display hw node the display property points to,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) otherwise it must point directly to the simplefb node.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) If a simplefb node represents the preferred console for user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) interaction, then the chosen node stdout-path property should point
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) to it, or to the primary display hw node, as with display#
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) aliases. If display aliases are used then it should be set to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) alias instead.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) It is advised that devicetree files contain pre-filled, disabled
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) framebuffer nodes, so that the firmware only needs to update the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) mode information and enable them. This way if e.g. later on support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) for more display clocks get added, the simplefb nodes will already
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) contain this info and the firmware does not need to be updated.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) If pre-filled framebuffer nodes are used, the firmware may need
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) extra information to find the right node. In that case an extra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) platform specific compatible and platform specific properties should
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) be used and documented.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) properties:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) compatible:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) items:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) - enum:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) - allwinner,simple-framebuffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) - amlogic,simple-framebuffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) - const: simple-framebuffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) reg:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) description: Location and size of the framebuffer memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) clocks:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) description: List of clocks used by the framebuffer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) power-domains:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) description: List of power domains used by the framebuffer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) width:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) $ref: /schemas/types.yaml#/definitions/uint32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) description: Width of the framebuffer in pixels
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) height:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) $ref: /schemas/types.yaml#/definitions/uint32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) description: Height of the framebuffer in pixels
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) stride:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) $ref: /schemas/types.yaml#/definitions/uint32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) description: Number of bytes of a line in the framebuffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) format:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) description: >
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) Format of the framebuffer:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) * `a8b8g8r8` - 32-bit pixels, d[31:24]=a, d[23:16]=b, d[15:8]=g, d[7:0]=r
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) * `r5g6b5` - 16-bit pixels, d[15:11]=r, d[10:5]=g, d[4:0]=b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) enum:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) - a8b8g8r8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) - r5g6b5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) display:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) $ref: /schemas/types.yaml#/definitions/phandle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) description: Primary display hardware node
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) allwinner,pipeline:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) description: Pipeline used by the framebuffer on Allwinner SoCs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) enum:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) - de_be0-lcd0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) - de_be0-lcd0-hdmi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) - de_be0-lcd0-tve0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) - de_be1-lcd0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) - de_be1-lcd1-hdmi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) - de_fe0-de_be0-lcd0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) - de_fe0-de_be0-lcd0-hdmi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) - de_fe0-de_be0-lcd0-tve0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) - mixer0-lcd0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) - mixer0-lcd0-hdmi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) - mixer1-lcd1-hdmi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) - mixer1-lcd1-tve
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) amlogic,pipeline:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) description: Pipeline used by the framebuffer on Amlogic SoCs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) enum:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) - vpu-cvbs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) - vpu-hdmi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) patternProperties:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) "^[a-zA-Z0-9-]+-supply$":
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) $ref: /schemas/types.yaml#/definitions/phandle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) description:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) Regulators used by the framebuffer. These should be named
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) according to the names in the device design.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) required:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) # The binding requires also reg, width, height, stride and format,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) # but usually they will be filled by the bootloader.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) - compatible
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) allOf:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) - if:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) properties:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) compatible:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) contains:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) const: allwinner,simple-framebuffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) then:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) required:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) - allwinner,pipeline
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) - if:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) properties:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) compatible:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) contains:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) const: amlogic,simple-framebuffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) then:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) required:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) - amlogic,pipeline
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) additionalProperties: false
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) examples:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) - |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) / {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) compatible = "foo";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) model = "foo";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #address-cells = <1>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) #size-cells = <1>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) chosen {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #address-cells = <1>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #size-cells = <1>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) framebuffer0: framebuffer@1d385000 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) compatible = "allwinner,simple-framebuffer", "simple-framebuffer";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) allwinner,pipeline = "de_be0-lcd0";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) reg = <0x1d385000 3840000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) width = <1600>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) height = <1200>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) stride = <3200>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) format = "r5g6b5";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) clocks = <&ahb_gates 36>, <&ahb_gates 43>, <&ahb_gates 44>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) lcd-supply = <®_dc1sw>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) display = <&lcdc0>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) ...