dts: rules for bindings
Capture some general rules for writing bindings that we've been enforcing in review but could use better documentation for. Signed-off-by: Martí Bolívar <marti.bolivar@nordicsemi.no>
This commit is contained in:
parent
1eb6831ddd
commit
8882467b53
2 changed files with 94 additions and 0 deletions
|
@ -498,6 +498,8 @@ The tooling will report a warning if the devicetree includes the property that
|
||||||
is flagged as deprecated. (This warning is upgraded to an error in the
|
is flagged as deprecated. (This warning is upgraded to an error in the
|
||||||
:ref:`twister_script` for upstream pull requests.)
|
:ref:`twister_script` for upstream pull requests.)
|
||||||
|
|
||||||
|
.. _dt-bindings-default:
|
||||||
|
|
||||||
Default values for properties
|
Default values for properties
|
||||||
+++++++++++++++++++++++++++++
|
+++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
@ -931,6 +933,96 @@ Finally, you can filter from a child binding like this:
|
||||||
property-allowlist:
|
property-allowlist:
|
||||||
- child-prop-to-allow
|
- child-prop-to-allow
|
||||||
|
|
||||||
|
.. _dt-writing-bindings:
|
||||||
|
|
||||||
|
Rules for mainline bindings
|
||||||
|
***************************
|
||||||
|
|
||||||
|
This section includes general rules for writing bindings that you want to
|
||||||
|
submit to the mainline Zephyr Project. (You don't need to follow these rules
|
||||||
|
for bindings you don't intend to contribute to the Zephyr Project, but it's a
|
||||||
|
good idea.)
|
||||||
|
|
||||||
|
Decisions made by the Zephyr devicetree maintainer override the contents of
|
||||||
|
this section. If that happens, though, please let them know so they can update
|
||||||
|
this page, or you can send a patch yourself.
|
||||||
|
|
||||||
|
Check for existing bindings
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Zephyr aims for devicetree :ref:`dt-source-compatibility`. Therefore, if there
|
||||||
|
is an existing binding for your device in an authoritative location, you should
|
||||||
|
try to replicate its properties when writing a Zephyr binding, and you must
|
||||||
|
justify any Zephyr-specific divergences.
|
||||||
|
|
||||||
|
In particular, this rule applies if:
|
||||||
|
|
||||||
|
- There is an existing binding in the mainline Linux kernel. See
|
||||||
|
:file:`Documentation/devicetree/bindings` in `Linus's tree`_ for existing
|
||||||
|
bindings and the `Linux devicetree documentation`_ for more information.
|
||||||
|
|
||||||
|
- Your hardware vendor provides an official binding outside of the Linux
|
||||||
|
kernel.
|
||||||
|
|
||||||
|
.. _Linus's tree:
|
||||||
|
https://github.com/torvalds/linux/
|
||||||
|
|
||||||
|
.. _Linux devicetree documentation:
|
||||||
|
https://www.kernel.org/doc/html/latest/devicetree/index.html
|
||||||
|
|
||||||
|
General rules
|
||||||
|
=============
|
||||||
|
|
||||||
|
- Bindings which match a compatible must have file names based on the compatible.
|
||||||
|
|
||||||
|
- For example, a binding for compatible ``vnd,foo`` must be named ``vnd,foo.yaml``.
|
||||||
|
- If the binding is bus-specific, you can append the bus to the file name;
|
||||||
|
for example, if the binding YAML has ``on-bus: bar``, you may name the file
|
||||||
|
``vnd,foo-bar.yaml``.
|
||||||
|
|
||||||
|
- All recommendations in :ref:`dt-bindings-default` are requirements when
|
||||||
|
submitting the binding.
|
||||||
|
|
||||||
|
In particular, if you use the ``default:`` feature, you must justify the
|
||||||
|
value in the property's description.
|
||||||
|
|
||||||
|
Vendor prefixes
|
||||||
|
===============
|
||||||
|
|
||||||
|
The following general rules apply to vendor prefixes in :ref:`compatible
|
||||||
|
<dt-important-props>` properties.
|
||||||
|
|
||||||
|
- If your device is manufactured by a specific vendor, then its compatible
|
||||||
|
should have a vendor prefix.
|
||||||
|
|
||||||
|
If your binding describes hardware with a well known vendor from the list in
|
||||||
|
:zephyr_file:`dts/bindings/vendor-prefixes.txt`, you must use that vendor
|
||||||
|
prefix.
|
||||||
|
|
||||||
|
- If your device is not manufactured by a specific hardware vendor, do **not**
|
||||||
|
invent a vendor prefix. Vendor prefixes are not mandatory parts of compatible
|
||||||
|
properties, and compatibles should not include them unless they refer to an
|
||||||
|
actual vendor. There are some exceptions to this rule, but the practice is
|
||||||
|
strongly discouraged.
|
||||||
|
|
||||||
|
- Do not submit additions to Zephyr's :file:`dts/bindings/vendor-prefixes.txt`
|
||||||
|
file unless you also include users of the new prefix. This means at least a
|
||||||
|
binding and a devicetree using the vendor prefix, and should ideally include
|
||||||
|
a device driver handling that compatible.
|
||||||
|
|
||||||
|
For custom bindings, you can add a custom
|
||||||
|
:file:`dts/bindings/vendor-prefixes.txt` file to any directory in your
|
||||||
|
:ref:`DTS_ROOT <dts_root>`. The devicetree tooling will respect these
|
||||||
|
prefixes, and will not generate warnings or errors if you use them in your
|
||||||
|
own bindings or devicetrees.
|
||||||
|
|
||||||
|
- We sometimes synchronize Zephyr's vendor-prefixes.txt file with the Linux
|
||||||
|
kernel's equivalent file; this process is exempt from the previous rule.
|
||||||
|
|
||||||
|
- If your binding is describing an abstract class of hardware with Zephyr
|
||||||
|
specific drivers handling the nodes, it's usually best to use ``zephyr`` as
|
||||||
|
the vendor prefix. See :ref:`dt_vendor_zephyr` for examples.
|
||||||
|
|
||||||
.. _dt-inferred-bindings:
|
.. _dt-inferred-bindings:
|
||||||
.. _dt-zephyr-user:
|
.. _dt-zephyr-user:
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,8 @@ Example remaining work
|
||||||
- Runtime determination of ``struct device`` relationships should be done using
|
- Runtime determination of ``struct device`` relationships should be done using
|
||||||
information obtained from devicetree, e.g. for device power management.
|
information obtained from devicetree, e.g. for device power management.
|
||||||
|
|
||||||
|
.. _dt-source-compatibility:
|
||||||
|
|
||||||
Source compatibility with other operating systems
|
Source compatibility with other operating systems
|
||||||
*************************************************
|
*************************************************
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue