xref: /freebsd/sys/contrib/device-tree/Bindings/i3c/i3c.yaml (revision 0e8011faf58b743cc652e3b2ad0f7671227610df)
15def4c47SEmmanuel Vadot# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
25def4c47SEmmanuel Vadot%YAML 1.2
35def4c47SEmmanuel Vadot---
45def4c47SEmmanuel Vadot$id: http://devicetree.org/schemas/i3c/i3c.yaml#
55def4c47SEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
65def4c47SEmmanuel Vadot
78bab661aSEmmanuel Vadottitle: I3C bus
85def4c47SEmmanuel Vadot
95def4c47SEmmanuel Vadotmaintainers:
105def4c47SEmmanuel Vadot  - Alexandre Belloni <alexandre.belloni@bootlin.com>
115def4c47SEmmanuel Vadot  - Miquel Raynal <miquel.raynal@bootlin.com>
125def4c47SEmmanuel Vadot
135def4c47SEmmanuel Vadotdescription: |
145def4c47SEmmanuel Vadot  I3C busses can be described with a node for the primary I3C controller device
155def4c47SEmmanuel Vadot  and a set of child nodes for each I2C or I3C slave on the bus. Each of them
165def4c47SEmmanuel Vadot  may, during the life of the bus, request mastership.
175def4c47SEmmanuel Vadot
185def4c47SEmmanuel Vadotproperties:
195def4c47SEmmanuel Vadot  $nodename:
2001950c46SEmmanuel Vadot    pattern: "^i3c@[0-9a-f]+$"
215def4c47SEmmanuel Vadot
225def4c47SEmmanuel Vadot  "#address-cells":
235def4c47SEmmanuel Vadot    const: 3
245def4c47SEmmanuel Vadot    description: |
255def4c47SEmmanuel Vadot      Each I2C device connected to the bus should be described in a subnode.
265def4c47SEmmanuel Vadot
275def4c47SEmmanuel Vadot      All I3C devices are supposed to support DAA (Dynamic Address Assignment),
285def4c47SEmmanuel Vadot      and are thus discoverable. So, by default, I3C devices do not have to be
295def4c47SEmmanuel Vadot      described in the device tree. This being said, one might want to attach
305def4c47SEmmanuel Vadot      extra resources to these devices, and those resources may have to be
315def4c47SEmmanuel Vadot      described in the device tree, which in turn means we have to describe
325def4c47SEmmanuel Vadot      I3C devices.
335def4c47SEmmanuel Vadot
345def4c47SEmmanuel Vadot      Another use case for describing an I3C device in the device tree is when
355def4c47SEmmanuel Vadot      this I3C device has a static I2C address and we want to assign it a
365def4c47SEmmanuel Vadot      specific I3C dynamic address before the DAA takes place (so that other
375def4c47SEmmanuel Vadot      devices on the bus can't take this dynamic address).
385def4c47SEmmanuel Vadot
395def4c47SEmmanuel Vadot  "#size-cells":
405def4c47SEmmanuel Vadot    const: 0
415def4c47SEmmanuel Vadot
425def4c47SEmmanuel Vadot  i3c-scl-hz:
435def4c47SEmmanuel Vadot    description: |
445def4c47SEmmanuel Vadot      Frequency of the SCL signal used for I3C transfers. When undefined, the
455def4c47SEmmanuel Vadot      default value should be 12.5MHz.
465def4c47SEmmanuel Vadot
475def4c47SEmmanuel Vadot      May not be supported by all controllers.
485def4c47SEmmanuel Vadot
495def4c47SEmmanuel Vadot  i2c-scl-hz:
505def4c47SEmmanuel Vadot    description: |
515def4c47SEmmanuel Vadot      Frequency of the SCL signal used for I2C transfers. When undefined, the
525def4c47SEmmanuel Vadot      default should be to look at LVR (Legacy Virtual Register) values of
535def4c47SEmmanuel Vadot      I2C devices described in the device tree to determine the maximum I2C
545def4c47SEmmanuel Vadot      frequency.
555def4c47SEmmanuel Vadot
565def4c47SEmmanuel Vadot      May not be supported by all controllers.
575def4c47SEmmanuel Vadot
5884943d6fSEmmanuel Vadot  mctp-controller:
5984943d6fSEmmanuel Vadot    type: boolean
6084943d6fSEmmanuel Vadot    description: |
6184943d6fSEmmanuel Vadot      Indicates that the system is accessible via this bus as an endpoint for
6284943d6fSEmmanuel Vadot      MCTP over I3C transport.
6384943d6fSEmmanuel Vadot
645def4c47SEmmanuel Vadotrequired:
655def4c47SEmmanuel Vadot  - "#address-cells"
665def4c47SEmmanuel Vadot  - "#size-cells"
675def4c47SEmmanuel Vadot
685def4c47SEmmanuel VadotpatternProperties:
695def4c47SEmmanuel Vadot  "@[0-9a-f]+$":
705def4c47SEmmanuel Vadot    type: object
715def4c47SEmmanuel Vadot    description: |
725def4c47SEmmanuel Vadot      I2C child, should be named: <device-type>@<i2c-address>
735def4c47SEmmanuel Vadot
7401950c46SEmmanuel Vadot      All properties described in dtschema schemas/i2c/i2c-controller.yaml
755def4c47SEmmanuel Vadot      are valid here, except the reg property whose content is changed.
765def4c47SEmmanuel Vadot
775def4c47SEmmanuel Vadot    properties:
785def4c47SEmmanuel Vadot      compatible:
795def4c47SEmmanuel Vadot        description:
805def4c47SEmmanuel Vadot          Compatible of the I2C device.
815def4c47SEmmanuel Vadot
825def4c47SEmmanuel Vadot      reg:
835def4c47SEmmanuel Vadot        items:
845def4c47SEmmanuel Vadot          - items:
855def4c47SEmmanuel Vadot              - description: |
865def4c47SEmmanuel Vadot                  I2C address. 10 bit addressing is not supported. Devices with
875def4c47SEmmanuel Vadot                  10-bit address can't be properly passed through DEFSLVS
885def4c47SEmmanuel Vadot                  command.
895def4c47SEmmanuel Vadot                minimum: 0
905def4c47SEmmanuel Vadot                maximum: 0x7f
915def4c47SEmmanuel Vadot              - const: 0
925def4c47SEmmanuel Vadot              - description: |
935def4c47SEmmanuel Vadot                  Shall encode the I3C LVR (Legacy Virtual Register):
94*0e8011faSEmmanuel Vadot                  See include/dt-bindings/i3c/i3c.h
955def4c47SEmmanuel Vadot                    bit[31:8]: unused/ignored
965def4c47SEmmanuel Vadot                    bit[7:5]: I2C device index. Possible values:
975def4c47SEmmanuel Vadot                      * 0: I2C device has a 50 ns spike filter
985def4c47SEmmanuel Vadot                      * 1: I2C device does not have a 50 ns spike filter but
995def4c47SEmmanuel Vadot                           supports high frequency on SCL
1005def4c47SEmmanuel Vadot                      * 2: I2C device does not have a 50 ns spike filter and is
1015def4c47SEmmanuel Vadot                           not tolerant to high frequencies
1025def4c47SEmmanuel Vadot                      * 3-7: reserved
1035def4c47SEmmanuel Vadot                    bit[4]: tell whether the device operates in FM (Fast Mode)
1045def4c47SEmmanuel Vadot                            or FM+ mode:
1055def4c47SEmmanuel Vadot                      * 0: FM+ mode
1065def4c47SEmmanuel Vadot                      * 1: FM mode
1075def4c47SEmmanuel Vadot                    bit[3:0]: device type
1085def4c47SEmmanuel Vadot                      * 0-15: reserved
1095def4c47SEmmanuel Vadot
1105def4c47SEmmanuel Vadot    required:
1115def4c47SEmmanuel Vadot      - compatible
1125def4c47SEmmanuel Vadot      - reg
1135def4c47SEmmanuel Vadot
1145def4c47SEmmanuel Vadot  "@[0-9a-f]+,[0-9a-f]+$":
1155def4c47SEmmanuel Vadot    type: object
1165def4c47SEmmanuel Vadot    description: |
1175def4c47SEmmanuel Vadot      I3C child, should be named: <device-type>@<static-i2c-address>,<i3c-pid>
1185def4c47SEmmanuel Vadot
1195def4c47SEmmanuel Vadot    properties:
1205def4c47SEmmanuel Vadot      reg:
1215def4c47SEmmanuel Vadot        items:
1225def4c47SEmmanuel Vadot          - items:
1235def4c47SEmmanuel Vadot              - description: |
1245def4c47SEmmanuel Vadot                  Encodes the static I2C address. Should be 0 if the device does
1255def4c47SEmmanuel Vadot                  not have one (0 is not a valid I2C address).
1265def4c47SEmmanuel Vadot                minimum: 0
1275def4c47SEmmanuel Vadot                maximum: 0x7f
1285def4c47SEmmanuel Vadot              - description: |
12984943d6fSEmmanuel Vadot                  First half of the Provisioned ID (following the PID
1305def4c47SEmmanuel Vadot                  definition provided by the I3C specification).
1315def4c47SEmmanuel Vadot
1325def4c47SEmmanuel Vadot                  Contains the manufacturer ID left-shifted by 1.
1335def4c47SEmmanuel Vadot              - description: |
13484943d6fSEmmanuel Vadot                  Second half of the Provisioned ID (following the PID
1355def4c47SEmmanuel Vadot                  definition provided by the I3C specification).
1365def4c47SEmmanuel Vadot
1375def4c47SEmmanuel Vadot                  Contains the ORing of the part ID left-shifted by 16,
1385def4c47SEmmanuel Vadot                  the instance ID left-shifted by 12 and extra information.
1395def4c47SEmmanuel Vadot
1405def4c47SEmmanuel Vadot      assigned-address:
1415def4c47SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
1425def4c47SEmmanuel Vadot        minimum: 0x1
1435def4c47SEmmanuel Vadot        maximum: 0xff
1445def4c47SEmmanuel Vadot        description: |
145aa1a8ff2SEmmanuel Vadot          Dynamic address to be assigned to this device. In case static address is
146aa1a8ff2SEmmanuel Vadot          present (first cell of the reg property != 0), this address is assigned
147aa1a8ff2SEmmanuel Vadot          through SETDASA. If static address is not present, this address is assigned
148aa1a8ff2SEmmanuel Vadot          through SETNEWDA after assigning a temporary address via ENTDAA.
1495def4c47SEmmanuel Vadot
1505def4c47SEmmanuel Vadot    required:
1515def4c47SEmmanuel Vadot      - reg
1525def4c47SEmmanuel Vadot
1535def4c47SEmmanuel VadotadditionalProperties: true
1545def4c47SEmmanuel Vadot
1555def4c47SEmmanuel Vadotexamples:
1565def4c47SEmmanuel Vadot  - |
157*0e8011faSEmmanuel Vadot    #include <dt-bindings/i3c/i3c.h>
158*0e8011faSEmmanuel Vadot
15901950c46SEmmanuel Vadot    i3c@d040000 {
1605def4c47SEmmanuel Vadot        compatible = "cdns,i3c-master";
1615def4c47SEmmanuel Vadot        clocks = <&coreclock>, <&i3csysclock>;
1625def4c47SEmmanuel Vadot        clock-names = "pclk", "sysclk";
1635def4c47SEmmanuel Vadot        interrupts = <3 0>;
1645def4c47SEmmanuel Vadot        reg = <0x0d040000 0x1000>;
1655def4c47SEmmanuel Vadot        #address-cells = <3>;
1665def4c47SEmmanuel Vadot        #size-cells = <0>;
1675def4c47SEmmanuel Vadot        i2c-scl-hz = <100000>;
1685def4c47SEmmanuel Vadot
1695def4c47SEmmanuel Vadot        /* I2C device. */
1702eb4d8dcSEmmanuel Vadot        eeprom@57 {
1712eb4d8dcSEmmanuel Vadot            compatible = "atmel,24c01";
172*0e8011faSEmmanuel Vadot            reg = <0x57 0x0 (I2C_FM | I2C_FILTER)>;
1732eb4d8dcSEmmanuel Vadot            pagesize = <0x8>;
1745def4c47SEmmanuel Vadot        };
1755def4c47SEmmanuel Vadot
176aa1a8ff2SEmmanuel Vadot        /* I3C device with a static I2C address and assigned address. */
1775def4c47SEmmanuel Vadot        thermal_sensor: sensor@68,39200144004 {
1785def4c47SEmmanuel Vadot            reg = <0x68 0x392 0x144004>;
1795def4c47SEmmanuel Vadot            assigned-address = <0xa>;
1805def4c47SEmmanuel Vadot        };
1815def4c47SEmmanuel Vadot
182aa1a8ff2SEmmanuel Vadot        /* I3C device with only assigned address. */
183aa1a8ff2SEmmanuel Vadot        pressure_sensor: sensor@0,39200124004 {
184aa1a8ff2SEmmanuel Vadot            reg = <0x0 0x392 0x124000>;
185aa1a8ff2SEmmanuel Vadot            assigned-address = <0xc>;
186aa1a8ff2SEmmanuel Vadot        };
187aa1a8ff2SEmmanuel Vadot
1885def4c47SEmmanuel Vadot        /*
1895def4c47SEmmanuel Vadot         * I3C device without a static I2C address but requiring
1905def4c47SEmmanuel Vadot         * resources described in the DT.
1915def4c47SEmmanuel Vadot         */
1925def4c47SEmmanuel Vadot        sensor@0,39200154004 {
1935def4c47SEmmanuel Vadot            reg = <0x0 0x392 0x154004>;
1945def4c47SEmmanuel Vadot            clocks = <&clock_provider 0>;
1955def4c47SEmmanuel Vadot        };
1965def4c47SEmmanuel Vadot    };
197