1 # SPDX-License-Identifier: (GPL-2.0-only OR BS !! 1 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2 # Copyright 2018 Linaro Ltd. 2 # Copyright 2018 Linaro Ltd. 3 %YAML 1.2 3 %YAML 1.2 4 --- 4 --- 5 # All the top-level keys are standard json-sch 5 # All the top-level keys are standard json-schema keywords except for 6 # 'maintainers' and 'select' 6 # 'maintainers' and 'select' 7 7 8 # $id is a unique identifier based on the file 8 # $id is a unique identifier based on the filename. There may or may not be a 9 # file present at the URL. 9 # file present at the URL. 10 $id: http://devicetree.org/schemas/example-sch !! 10 $id: "http://devicetree.org/schemas/example-schema.yaml#" 11 # $schema is the meta-schema this schema shoul 11 # $schema is the meta-schema this schema should be validated with. 12 $schema: http://devicetree.org/meta-schemas/co !! 12 $schema: "http://devicetree.org/meta-schemas/core.yaml#" 13 13 14 title: An Example Device !! 14 title: An example schema annotated with jsonschema details 15 15 16 maintainers: 16 maintainers: 17 - Rob Herring <robh@kernel.org> 17 - Rob Herring <robh@kernel.org> 18 18 19 description: | 19 description: | 20 A more detailed multi-line description of th 20 A more detailed multi-line description of the binding. 21 21 22 Details about the hardware device and any li 22 Details about the hardware device and any links to datasheets can go here. 23 23 24 Literal blocks are marked with the '|' at th 24 Literal blocks are marked with the '|' at the beginning. The end is marked by 25 indentation less than the first line of the 25 indentation less than the first line of the literal block. Lines also cannot 26 begin with a tab character. 26 begin with a tab character. 27 27 28 select: false 28 select: false 29 # 'select' is a schema applied to a DT node 29 # 'select' is a schema applied to a DT node to determine if this binding 30 # schema should be applied to the node. It i 30 # schema should be applied to the node. It is optional and by default the 31 # possible compatible strings are extracted 31 # possible compatible strings are extracted and used to match. 32 32 33 # In this case, a 'false' schema will never 33 # In this case, a 'false' schema will never match. 34 34 35 properties: 35 properties: 36 # A dictionary of DT properties for this bin 36 # A dictionary of DT properties for this binding schema 37 compatible: 37 compatible: 38 # More complicated schema can use oneOf (X 38 # More complicated schema can use oneOf (XOR), anyOf (OR), or allOf (AND) 39 # to handle different conditions. 39 # to handle different conditions. 40 # In this case, it's needed to handle a va 40 # In this case, it's needed to handle a variable number of values as there 41 # isn't another way to express a constrain 41 # isn't another way to express a constraint of the last string value. 42 # The boolean schema must be a list of sch 42 # The boolean schema must be a list of schemas. 43 oneOf: 43 oneOf: 44 - items: 44 - items: 45 # items is a list of possible values 45 # items is a list of possible values for the property. The number of 46 # values is determined by the number 46 # values is determined by the number of elements in the list. 47 # Order in lists is significant, ord 47 # Order in lists is significant, order in dicts is not 48 # Must be one of the 1st enums follo 48 # Must be one of the 1st enums followed by the 2nd enum 49 # 49 # 50 # Each element in items should be 'e 50 # Each element in items should be 'enum' or 'const' 51 - enum: 51 - enum: 52 - vendor,soc4-ip 52 - vendor,soc4-ip 53 - vendor,soc3-ip 53 - vendor,soc3-ip 54 - vendor,soc2-ip 54 - vendor,soc2-ip 55 - const: vendor,soc1-ip !! 55 - enum: >> 56 - vendor,soc1-ip 56 # additionalItems being false is impli 57 # additionalItems being false is implied 57 # minItems/maxItems equal to 2 is impl 58 # minItems/maxItems equal to 2 is implied 58 - items: 59 - items: 59 # 'const' is just a special case of 60 # 'const' is just a special case of an enum with a single possible value 60 - const: vendor,soc1-ip 61 - const: vendor,soc1-ip 61 62 62 reg: 63 reg: 63 # The core schema already checks that reg 64 # The core schema already checks that reg values are numbers, so device 64 # specific schema don't need to do those c 65 # specific schema don't need to do those checks. 65 # The description of each element defines 66 # The description of each element defines the order and implicitly defines 66 # the number of reg entries. 67 # the number of reg entries. 67 items: 68 items: 68 - description: core registers 69 - description: core registers 69 - description: aux registers 70 - description: aux registers 70 # minItems/maxItems equal to 2 is implied 71 # minItems/maxItems equal to 2 is implied 71 72 72 reg-names: 73 reg-names: 73 # The core schema enforces this (*-names) !! 74 # The core schema enforces this is a string array 74 items: 75 items: 75 - const: core 76 - const: core 76 - const: aux 77 - const: aux 77 78 78 clocks: 79 clocks: 79 # Cases that have only a single entry just 80 # Cases that have only a single entry just need to express that with maxItems 80 maxItems: 1 81 maxItems: 1 81 description: bus clock. A description is o !! 82 description: bus clock 82 there's something unique to add. << 83 The items should have a fixed order, so << 84 discouraged. << 85 83 86 clock-names: 84 clock-names: 87 # For single-entry lists in clocks, resets << 88 # bring any value, especially if they copy << 89 # just skip the xxx-names. << 90 items: 85 items: 91 - const: bus 86 - const: bus 92 87 93 interrupts: 88 interrupts: 94 # Either 1 or 2 interrupts can be present 89 # Either 1 or 2 interrupts can be present 95 minItems: 1 90 minItems: 1 >> 91 maxItems: 2 96 items: 92 items: 97 - description: tx or combined interrupt 93 - description: tx or combined interrupt 98 - description: rx interrupt 94 - description: rx interrupt 99 description: 95 description: 100 A variable number of interrupts warrants 96 A variable number of interrupts warrants a description of what conditions 101 affect the number of interrupts. Otherwi 97 affect the number of interrupts. Otherwise, descriptions on standard 102 properties are not necessary. 98 properties are not necessary. 103 The items should have a fixed order, so << 104 discouraged. << 105 99 106 interrupt-names: 100 interrupt-names: 107 # minItems must be specified here because 101 # minItems must be specified here because the default would be 2 108 minItems: 1 102 minItems: 1 >> 103 maxItems: 2 109 items: 104 items: 110 - const: tx irq 105 - const: tx irq 111 - const: rx irq 106 - const: rx irq 112 107 113 # Property names starting with '#' must be q 108 # Property names starting with '#' must be quoted 114 '#interrupt-cells': 109 '#interrupt-cells': 115 # A simple case where the value must alway 110 # A simple case where the value must always be '2'. 116 # The core schema handles that this must b 111 # The core schema handles that this must be a single integer. 117 const: 2 112 const: 2 118 113 119 interrupt-controller: true 114 interrupt-controller: true 120 # The core checks this is a boolean, so ju 115 # The core checks this is a boolean, so just have to list it here to be 121 # valid for this binding. 116 # valid for this binding. 122 117 123 clock-frequency: 118 clock-frequency: 124 # The type is set in the core schema. Per- !! 119 # The type is set in the core schema. Per device schema only need to set 125 # constraints on the possible values. 120 # constraints on the possible values. 126 minimum: 100 121 minimum: 100 127 maximum: 400000 122 maximum: 400000 128 # The value that should be used if the pro 123 # The value that should be used if the property is not present 129 default: 200 124 default: 200 130 125 131 foo-gpios: 126 foo-gpios: 132 maxItems: 1 127 maxItems: 1 133 description: A connection of the 'foo' gpi 128 description: A connection of the 'foo' gpio line. 134 129 135 # *-supply is always a single phandle, so no << 136 foo-supply: true << 137 << 138 # Vendor-specific properties << 139 # << 140 # Vendor-specific properties have slightly d << 141 # common properties. They must have at least << 142 # 'description'. << 143 vendor,int-property: 130 vendor,int-property: 144 description: Vendor-specific properties mu !! 131 description: Vendor specific properties must have a description 145 $ref: /schemas/types.yaml#/definitions/uin !! 132 # 'allOf' is the json-schema way of subclassing a schema. Here the base 146 enum: [2, 4, 6, 8, 10] !! 133 # type schema is referenced and then additional constraints on the values >> 134 # are added. >> 135 allOf: >> 136 - $ref: /schemas/types.yaml#/definitions/uint32 >> 137 - enum: [2, 4, 6, 8, 10] 147 138 148 vendor,bool-property: 139 vendor,bool-property: 149 description: Vendor-specific properties mu !! 140 description: Vendor specific properties must have a description 150 properties are one case where the json-s !! 141 # boolean properties is one case where the json-schema 'type' keyword 151 directly. !! 142 # can be used directly 152 type: boolean 143 type: boolean 153 144 154 vendor,string-array-property: 145 vendor,string-array-property: 155 description: Vendor-specific properties sh !! 146 description: Vendor specific properties should reference a type in the 156 core schema. 147 core schema. 157 $ref: /schemas/types.yaml#/definitions/str !! 148 allOf: 158 items: !! 149 - $ref: /schemas/types.yaml#/definitions/string-array 159 - enum: [foo, bar] !! 150 - items: 160 - enum: [baz, boo] !! 151 - enum: [ foo, bar ] 161 !! 152 - enum: [ baz, boo ] 162 vendor,property-in-standard-units-microvolt: << 163 description: Vendor-specific properties ha << 164 don't need a type. << 165 enum: [ 100, 200, 300 ] << 166 << 167 vendor,int-array-variable-length-and-constra << 168 description: Array might define what type << 169 their range). << 170 $ref: /schemas/types.yaml#/definitions/uin << 171 minItems: 2 << 172 maxItems: 3 << 173 items: << 174 minimum: 0 << 175 maximum: 8 << 176 << 177 child-node: << 178 description: Child nodes are just another << 179 perspective. << 180 type: object # DT nodes are json objects << 181 # Child nodes also need additionalProperti << 182 additionalProperties: false << 183 properties: << 184 vendor,a-child-node-property: << 185 description: Child node properties hav << 186 requirements. << 187 type: boolean << 188 << 189 required: << 190 - vendor,a-child-node-property << 191 << 192 # Describe the relationship between different << 193 dependencies: << 194 # 'vendor,bool-property' is only allowed whe << 195 # is present << 196 vendor,bool-property: [ 'vendor,string-array << 197 # Expressing 2 properties in both orders mea << 198 # must be present or none of them. << 199 vendor,string-array-property: [ 'vendor,bool << 200 153 201 required: 154 required: 202 - compatible 155 - compatible 203 - reg 156 - reg 204 - interrupts 157 - interrupts 205 - interrupt-controller 158 - interrupt-controller 206 159 207 # if/then schema can be used to handle conditi << 208 # another property. A typical case is a specif << 209 # constraints on other properties. << 210 # << 211 # For multiple 'if' schema, group them under a << 212 # << 213 # If the conditionals become too unweldy, then << 214 # the binding into separate schema documents. << 215 allOf: << 216 - if: << 217 properties: << 218 compatible: << 219 contains: << 220 const: vendor,soc2-ip << 221 then: << 222 required: << 223 - foo-supply << 224 else: << 225 # If otherwise the property is not allow << 226 properties: << 227 foo-supply: false << 228 # Altering schema depending on presence of p << 229 # dependencies (see above), however some adj << 230 - if: << 231 required: << 232 - vendor,bool-property << 233 then: << 234 properties: << 235 vendor,int-property: << 236 enum: [2, 4, 6] << 237 << 238 # Ideally, the schema should have this line ot << 239 # present are allowed. There's a few common pr << 240 # 'pinctrl-*' which are added automatically by << 241 # << 242 # This can't be used in cases where another sc << 243 # (i.e. allOf: [{$ref: ...}]). << 244 # If and only if another schema is referenced << 245 # appear, "unevaluatedProperties: false" could << 246 # an I2C controller where no name pattern matc << 247 additionalProperties: false << 248 << 249 examples: 160 examples: 250 # Examples are now compiled with dtc and val !! 161 # Examples are now compiled with dtc 251 # << 252 # Examples have a default #address-cells and << 253 # be overridden or an appropriate parent bus << 254 # i2c buses). << 255 # << 256 # Any includes used have to be explicitly in << 257 - | 162 - | 258 node@1000 { 163 node@1000 { 259 compatible = "vendor,soc4-ip", "vendor !! 164 compatible = "vendor,soc4-ip", "vendor,soc1-ip"; 260 reg = <0x1000 0x80>, !! 165 reg = <0x1000 0x80>, 261 <0x3000 0x80>; !! 166 <0x3000 0x80>; 262 reg-names = "core", "aux"; !! 167 reg-names = "core", "aux"; 263 interrupts = <10>; !! 168 interrupts = <10>; 264 interrupt-controller; !! 169 interrupt-controller; 265 }; 170 };
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.