path: root/dts/Bindings/writing-schema.rst
diff options
authorSascha Hauer <>2021-05-17 13:27:45 +0200
committerSascha Hauer <>2021-05-17 16:23:06 +0200
commita5a4c1d5a3c4f89059fb612b5786ec8b61b959f1 (patch)
treefe87198c6cc02e54d3131d087d2b9f7c3e96c689 /dts/Bindings/writing-schema.rst
parentba9de18c5f211678f5d0f67a0758c632ab774cca (diff)
dts: update to v5.13-rc1
Signed-off-by: Sascha Hauer <>
Diffstat (limited to 'dts/Bindings/writing-schema.rst')
1 files changed, 183 insertions, 0 deletions
diff --git a/dts/Bindings/writing-schema.rst b/dts/Bindings/writing-schema.rst
new file mode 100644
index 0000000000..23d6579aea
--- /dev/null
+++ b/dts/Bindings/writing-schema.rst
@@ -0,0 +1,183 @@
+.. SPDX-License-Identifier: GPL-2.0
+Writing Devicetree Bindings in json-schema
+Devicetree bindings are written using json-schema vocabulary. Schema files are
+written in a JSON compatible subset of YAML. YAML is used instead of JSON as it
+is considered more human readable and has some advantages such as allowing
+comments (Prefixed with '#').
+Also see :ref:`example-schema`.
+Schema Contents
+Each schema doc is a structured json-schema which is defined by a set of
+top-level properties. Generally, there is one binding defined per file. The
+top-level json-schema properties used are:
+ A json-schema unique identifier string. The string must be a valid
+ URI typically containing the binding's filename and path. For DT schema, it must
+ begin with "". The URL is used in constructing
+ references to other files specified in schema "$ref" properties. A $ref value
+ with a leading '/' will have the hostname prepended. A $ref value a relative
+ path or filename only will be prepended with the hostname and path components
+ of the current schema file's '$id' value. A URL is used even for local files,
+ but there may not actually be files present at those locations.
+ Indicates the meta-schema the schema file adheres to.
+ A one line description on the contents of the binding schema.
+ A DT specific property. Contains a list of email address(es)
+ for maintainers of this binding.
+ Optional. A multi-line text block containing any detailed
+ information about this binding. It should contain things such as what the block
+ or device does, standards the device conforms to, and links to datasheets for
+ more information.
+ Optional. A json-schema used to match nodes for applying the
+ schema. By default without 'select', nodes are matched against their possible
+ compatible string values or node name. Most bindings should not need select.
+ Optional. A list of other schemas to include. This is used to
+ include other schemas the binding conforms to. This may be schemas for a
+ particular class of devices such as I2C or SPI controllers.
+ A set of sub-schema defining all the DT properties for the
+ binding. The exact schema syntax depends on whether properties are known,
+ common properties (e.g. 'interrupts') or are binding/vendor specific properties.
+A property can also define a child DT node with child properties defined
+under it.
+For more details on properties sections, see 'Property Schema' section.
+ Optional. Similar to 'properties', but names are regex.
+ A list of DT properties from the 'properties' section that
+ must always be present.
+ Optional. A list of one or more DTS hunks implementing the
+ binding. Note: YAML doesn't allow leading tabs, so spaces must be used instead.
+Unless noted otherwise, all properties are required.
+Property Schema
+The 'properties' section of the schema contains all the DT properties for a
+binding. Each property contains a set of constraints using json-schema
+vocabulary for that property. The properties schemas are what is used for
+validation of DT files.
+For common properties, only additional constraints not covered by the common
+binding schema need to be defined such as how many values are valid or what
+possible values are valid.
+Vendor specific properties will typically need more detailed schema. With the
+exception of boolean properties, they should have a reference to a type in
+schemas/types.yaml. A "description" property is always required.
+The Devicetree schemas don't exactly match the YAML encoded DT data produced by
+dtc. They are simplified to make them more compact and avoid a bunch of
+boilerplate. The tools process the schema files to produce the final schema for
+validation. There are currently 2 transformations the tools perform.
+The default for arrays in json-schema is they are variable sized and allow more
+entries than explicitly defined. This can be restricted by defining 'minItems',
+'maxItems', and 'additionalItems'. However, for DeviceTree Schemas, a fixed
+size is desired in most cases, so these properties are added based on the
+number of entries in an 'items' list.
+The YAML Devicetree format also makes all string values an array and scalar
+values a matrix (in order to define groupings) even when only a single value
+is present. Single entries in schemas are fixed up to match this encoding.
+The DT schema project must be installed in order to validate the DT schema
+binding documents and validate DTS files using the DT schema. The DT schema
+project can be installed with pip::
+ pip3 install git+
+Several executables (dt-doc-validate, dt-mk-schema, dt-validate) will be
+installed. Ensure they are in your PATH (~/.local/bin by default).
+dtc must also be built with YAML output support enabled. This requires that
+libyaml and its headers be installed on the host system. For some distributions
+that involves installing the development package, such as:
+ apt-get install libyaml-dev
+ dnf -y install libyaml-devel
+Running checks
+The DT schema binding documents must be validated using the meta-schema (the
+schema for the schema) to ensure they are both valid json-schema and valid
+binding schema. All of the DT binding documents can be validated using the
+``dt_binding_check`` target::
+ make dt_binding_check
+In order to perform validation of DT source files, use the ``dtbs_check`` target::
+ make dtbs_check
+Note that ``dtbs_check`` will skip any binding schema files with errors. It is
+necessary to use ``dt_binding_check`` to get all the validation errors in the
+binding schema files.
+It is possible to run both in a single command::
+ make dt_binding_check dtbs_check
+It is also possible to run checks with a single schema file by setting the
+``DT_SCHEMA_FILES`` variable to a specific schema file.
+ make dt_binding_check DT_SCHEMA_FILES=Documentation/devicetree/bindings/trivial-devices.yaml
+ make dtbs_check DT_SCHEMA_FILES=Documentation/devicetree/bindings/trivial-devices.yaml
+json-schema Resources
+`JSON-Schema Specifications <>`_
+`Using JSON Schema Book <>`_
+.. _example-schema:
+Annotated Example Schema
+Also available as a separate file: :download:`example-schema.yaml`
+.. literalinclude:: example-schema.yaml