1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * property.c - Unified device property interface. 4 * 5 * Copyright (C) 2014, Intel Corporation 6 * Authors: Rafael J. Wysocki <rafael.j.wysocki@intel.com> 7 * Mika Westerberg <mika.westerberg@linux.intel.com> 8 */ 9 10 #include <linux/acpi.h> 11 #include <linux/export.h> 12 #include <linux/kernel.h> 13 #include <linux/of.h> 14 #include <linux/of_address.h> 15 #include <linux/of_graph.h> 16 #include <linux/of_irq.h> 17 #include <linux/property.h> 18 #include <linux/phy.h> 19 20 struct fwnode_handle *__dev_fwnode(struct device *dev) 21 { 22 return IS_ENABLED(CONFIG_OF) && dev->of_node ? 23 of_fwnode_handle(dev->of_node) : dev->fwnode; 24 } 25 EXPORT_SYMBOL_GPL(__dev_fwnode); 26 27 const struct fwnode_handle *__dev_fwnode_const(const struct device *dev) 28 { 29 return IS_ENABLED(CONFIG_OF) && dev->of_node ? 30 of_fwnode_handle(dev->of_node) : dev->fwnode; 31 } 32 EXPORT_SYMBOL_GPL(__dev_fwnode_const); 33 34 /** 35 * device_property_present - check if a property of a device is present 36 * @dev: Device whose property is being checked 37 * @propname: Name of the property 38 * 39 * Check if property @propname is present in the device firmware description. 40 */ 41 bool device_property_present(struct device *dev, const char *propname) 42 { 43 return fwnode_property_present(dev_fwnode(dev), propname); 44 } 45 EXPORT_SYMBOL_GPL(device_property_present); 46 47 /** 48 * fwnode_property_present - check if a property of a firmware node is present 49 * @fwnode: Firmware node whose property to check 50 * @propname: Name of the property 51 */ 52 bool fwnode_property_present(const struct fwnode_handle *fwnode, 53 const char *propname) 54 { 55 bool ret; 56 57 if (IS_ERR_OR_NULL(fwnode)) 58 return false; 59 60 ret = fwnode_call_bool_op(fwnode, property_present, propname); 61 if (ret) 62 return ret; 63 64 return fwnode_call_bool_op(fwnode->secondary, property_present, propname); 65 } 66 EXPORT_SYMBOL_GPL(fwnode_property_present); 67 68 /** 69 * device_property_read_u8_array - return a u8 array property of a device 70 * @dev: Device to get the property of 71 * @propname: Name of the property 72 * @val: The values are stored here or %NULL to return the number of values 73 * @nval: Size of the @val array 74 * 75 * Function reads an array of u8 properties with @propname from the device 76 * firmware description and stores them to @val if found. 77 * 78 * It's recommended to call device_property_count_u8() instead of calling 79 * this function with @val equals %NULL and @nval equals 0. 80 * 81 * Return: number of values if @val was %NULL, 82 * %0 if the property was found (success), 83 * %-EINVAL if given arguments are not valid, 84 * %-ENODATA if the property does not have a value, 85 * %-EPROTO if the property is not an array of numbers, 86 * %-EOVERFLOW if the size of the property is not as expected. 87 * %-ENXIO if no suitable firmware interface is present. 88 */ 89 int device_property_read_u8_array(struct device *dev, const char *propname, 90 u8 *val, size_t nval) 91 { 92 return fwnode_property_read_u8_array(dev_fwnode(dev), propname, val, nval); 93 } 94 EXPORT_SYMBOL_GPL(device_property_read_u8_array); 95 96 /** 97 * device_property_read_u16_array - return a u16 array property of a device 98 * @dev: Device to get the property of 99 * @propname: Name of the property 100 * @val: The values are stored here or %NULL to return the number of values 101 * @nval: Size of the @val array 102 * 103 * Function reads an array of u16 properties with @propname from the device 104 * firmware description and stores them to @val if found. 105 * 106 * It's recommended to call device_property_count_u16() instead of calling 107 * this function with @val equals %NULL and @nval equals 0. 108 * 109 * Return: number of values if @val was %NULL, 110 * %0 if the property was found (success), 111 * %-EINVAL if given arguments are not valid, 112 * %-ENODATA if the property does not have a value, 113 * %-EPROTO if the property is not an array of numbers, 114 * %-EOVERFLOW if the size of the property is not as expected. 115 * %-ENXIO if no suitable firmware interface is present. 116 */ 117 int device_property_read_u16_array(struct device *dev, const char *propname, 118 u16 *val, size_t nval) 119 { 120 return fwnode_property_read_u16_array(dev_fwnode(dev), propname, val, nval); 121 } 122 EXPORT_SYMBOL_GPL(device_property_read_u16_array); 123 124 /** 125 * device_property_read_u32_array - return a u32 array property of a device 126 * @dev: Device to get the property of 127 * @propname: Name of the property 128 * @val: The values are stored here or %NULL to return the number of values 129 * @nval: Size of the @val array 130 * 131 * Function reads an array of u32 properties with @propname from the device 132 * firmware description and stores them to @val if found. 133 * 134 * It's recommended to call device_property_count_u32() instead of calling 135 * this function with @val equals %NULL and @nval equals 0. 136 * 137 * Return: number of values if @val was %NULL, 138 * %0 if the property was found (success), 139 * %-EINVAL if given arguments are not valid, 140 * %-ENODATA if the property does not have a value, 141 * %-EPROTO if the property is not an array of numbers, 142 * %-EOVERFLOW if the size of the property is not as expected. 143 * %-ENXIO if no suitable firmware interface is present. 144 */ 145 int device_property_read_u32_array(struct device *dev, const char *propname, 146 u32 *val, size_t nval) 147 { 148 return fwnode_property_read_u32_array(dev_fwnode(dev), propname, val, nval); 149 } 150 EXPORT_SYMBOL_GPL(device_property_read_u32_array); 151 152 /** 153 * device_property_read_u64_array - return a u64 array property of a device 154 * @dev: Device to get the property of 155 * @propname: Name of the property 156 * @val: The values are stored here or %NULL to return the number of values 157 * @nval: Size of the @val array 158 * 159 * Function reads an array of u64 properties with @propname from the device 160 * firmware description and stores them to @val if found. 161 * 162 * It's recommended to call device_property_count_u64() instead of calling 163 * this function with @val equals %NULL and @nval equals 0. 164 * 165 * Return: number of values if @val was %NULL, 166 * %0 if the property was found (success), 167 * %-EINVAL if given arguments are not valid, 168 * %-ENODATA if the property does not have a value, 169 * %-EPROTO if the property is not an array of numbers, 170 * %-EOVERFLOW if the size of the property is not as expected. 171 * %-ENXIO if no suitable firmware interface is present. 172 */ 173 int device_property_read_u64_array(struct device *dev, const char *propname, 174 u64 *val, size_t nval) 175 { 176 return fwnode_property_read_u64_array(dev_fwnode(dev), propname, val, nval); 177 } 178 EXPORT_SYMBOL_GPL(device_property_read_u64_array); 179 180 /** 181 * device_property_read_string_array - return a string array property of device 182 * @dev: Device to get the property of 183 * @propname: Name of the property 184 * @val: The values are stored here or %NULL to return the number of values 185 * @nval: Size of the @val array 186 * 187 * Function reads an array of string properties with @propname from the device 188 * firmware description and stores them to @val if found. 189 * 190 * It's recommended to call device_property_string_array_count() instead of calling 191 * this function with @val equals %NULL and @nval equals 0. 192 * 193 * Return: number of values read on success if @val is non-NULL, 194 * number of values available on success if @val is NULL, 195 * %-EINVAL if given arguments are not valid, 196 * %-ENODATA if the property does not have a value, 197 * %-EPROTO or %-EILSEQ if the property is not an array of strings, 198 * %-EOVERFLOW if the size of the property is not as expected. 199 * %-ENXIO if no suitable firmware interface is present. 200 */ 201 int device_property_read_string_array(struct device *dev, const char *propname, 202 const char **val, size_t nval) 203 { 204 return fwnode_property_read_string_array(dev_fwnode(dev), propname, val, nval); 205 } 206 EXPORT_SYMBOL_GPL(device_property_read_string_array); 207 208 /** 209 * device_property_read_string - return a string property of a device 210 * @dev: Device to get the property of 211 * @propname: Name of the property 212 * @val: The value is stored here 213 * 214 * Function reads property @propname from the device firmware description and 215 * stores the value into @val if found. The value is checked to be a string. 216 * 217 * Return: %0 if the property was found (success), 218 * %-EINVAL if given arguments are not valid, 219 * %-ENODATA if the property does not have a value, 220 * %-EPROTO or %-EILSEQ if the property type is not a string. 221 * %-ENXIO if no suitable firmware interface is present. 222 */ 223 int device_property_read_string(struct device *dev, const char *propname, 224 const char **val) 225 { 226 return fwnode_property_read_string(dev_fwnode(dev), propname, val); 227 } 228 EXPORT_SYMBOL_GPL(device_property_read_string); 229 230 /** 231 * device_property_match_string - find a string in an array and return index 232 * @dev: Device to get the property of 233 * @propname: Name of the property holding the array 234 * @string: String to look for 235 * 236 * Find a given string in a string array and if it is found return the 237 * index back. 238 * 239 * Return: index, starting from %0, if the property was found (success), 240 * %-EINVAL if given arguments are not valid, 241 * %-ENODATA if the property does not have a value, 242 * %-EPROTO if the property is not an array of strings, 243 * %-ENXIO if no suitable firmware interface is present. 244 */ 245 int device_property_match_string(struct device *dev, const char *propname, 246 const char *string) 247 { 248 return fwnode_property_match_string(dev_fwnode(dev), propname, string); 249 } 250 EXPORT_SYMBOL_GPL(device_property_match_string); 251 252 static int fwnode_property_read_int_array(const struct fwnode_handle *fwnode, 253 const char *propname, 254 unsigned int elem_size, void *val, 255 size_t nval) 256 { 257 int ret; 258 259 if (IS_ERR_OR_NULL(fwnode)) 260 return -EINVAL; 261 262 ret = fwnode_call_int_op(fwnode, property_read_int_array, propname, 263 elem_size, val, nval); 264 if (ret != -EINVAL) 265 return ret; 266 267 return fwnode_call_int_op(fwnode->secondary, property_read_int_array, propname, 268 elem_size, val, nval); 269 } 270 271 /** 272 * fwnode_property_read_u8_array - return a u8 array property of firmware node 273 * @fwnode: Firmware node to get the property of 274 * @propname: Name of the property 275 * @val: The values are stored here or %NULL to return the number of values 276 * @nval: Size of the @val array 277 * 278 * Read an array of u8 properties with @propname from @fwnode and stores them to 279 * @val if found. 280 * 281 * It's recommended to call fwnode_property_count_u8() instead of calling 282 * this function with @val equals %NULL and @nval equals 0. 283 * 284 * Return: number of values if @val was %NULL, 285 * %0 if the property was found (success), 286 * %-EINVAL if given arguments are not valid, 287 * %-ENODATA if the property does not have a value, 288 * %-EPROTO if the property is not an array of numbers, 289 * %-EOVERFLOW if the size of the property is not as expected, 290 * %-ENXIO if no suitable firmware interface is present. 291 */ 292 int fwnode_property_read_u8_array(const struct fwnode_handle *fwnode, 293 const char *propname, u8 *val, size_t nval) 294 { 295 return fwnode_property_read_int_array(fwnode, propname, sizeof(u8), 296 val, nval); 297 } 298 EXPORT_SYMBOL_GPL(fwnode_property_read_u8_array); 299 300 /** 301 * fwnode_property_read_u16_array - return a u16 array property of firmware node 302 * @fwnode: Firmware node to get the property of 303 * @propname: Name of the property 304 * @val: The values are stored here or %NULL to return the number of values 305 * @nval: Size of the @val array 306 * 307 * Read an array of u16 properties with @propname from @fwnode and store them to 308 * @val if found. 309 * 310 * It's recommended to call fwnode_property_count_u16() instead of calling 311 * this function with @val equals %NULL and @nval equals 0. 312 * 313 * Return: number of values if @val was %NULL, 314 * %0 if the property was found (success), 315 * %-EINVAL if given arguments are not valid, 316 * %-ENODATA if the property does not have a value, 317 * %-EPROTO if the property is not an array of numbers, 318 * %-EOVERFLOW if the size of the property is not as expected, 319 * %-ENXIO if no suitable firmware interface is present. 320 */ 321 int fwnode_property_read_u16_array(const struct fwnode_handle *fwnode, 322 const char *propname, u16 *val, size_t nval) 323 { 324 return fwnode_property_read_int_array(fwnode, propname, sizeof(u16), 325 val, nval); 326 } 327 EXPORT_SYMBOL_GPL(fwnode_property_read_u16_array); 328 329 /** 330 * fwnode_property_read_u32_array - return a u32 array property of firmware node 331 * @fwnode: Firmware node to get the property of 332 * @propname: Name of the property 333 * @val: The values are stored here or %NULL to return the number of values 334 * @nval: Size of the @val array 335 * 336 * Read an array of u32 properties with @propname from @fwnode store them to 337 * @val if found. 338 * 339 * It's recommended to call fwnode_property_count_u32() instead of calling 340 * this function with @val equals %NULL and @nval equals 0. 341 * 342 * Return: number of values if @val was %NULL, 343 * %0 if the property was found (success), 344 * %-EINVAL if given arguments are not valid, 345 * %-ENODATA if the property does not have a value, 346 * %-EPROTO if the property is not an array of numbers, 347 * %-EOVERFLOW if the size of the property is not as expected, 348 * %-ENXIO if no suitable firmware interface is present. 349 */ 350 int fwnode_property_read_u32_array(const struct fwnode_handle *fwnode, 351 const char *propname, u32 *val, size_t nval) 352 { 353 return fwnode_property_read_int_array(fwnode, propname, sizeof(u32), 354 val, nval); 355 } 356 EXPORT_SYMBOL_GPL(fwnode_property_read_u32_array); 357 358 /** 359 * fwnode_property_read_u64_array - return a u64 array property firmware node 360 * @fwnode: Firmware node to get the property of 361 * @propname: Name of the property 362 * @val: The values are stored here or %NULL to return the number of values 363 * @nval: Size of the @val array 364 * 365 * Read an array of u64 properties with @propname from @fwnode and store them to 366 * @val if found. 367 * 368 * It's recommended to call fwnode_property_count_u64() instead of calling 369 * this function with @val equals %NULL and @nval equals 0. 370 * 371 * Return: number of values if @val was %NULL, 372 * %0 if the property was found (success), 373 * %-EINVAL if given arguments are not valid, 374 * %-ENODATA if the property does not have a value, 375 * %-EPROTO if the property is not an array of numbers, 376 * %-EOVERFLOW if the size of the property is not as expected, 377 * %-ENXIO if no suitable firmware interface is present. 378 */ 379 int fwnode_property_read_u64_array(const struct fwnode_handle *fwnode, 380 const char *propname, u64 *val, size_t nval) 381 { 382 return fwnode_property_read_int_array(fwnode, propname, sizeof(u64), 383 val, nval); 384 } 385 EXPORT_SYMBOL_GPL(fwnode_property_read_u64_array); 386 387 /** 388 * fwnode_property_read_string_array - return string array property of a node 389 * @fwnode: Firmware node to get the property of 390 * @propname: Name of the property 391 * @val: The values are stored here or %NULL to return the number of values 392 * @nval: Size of the @val array 393 * 394 * Read an string list property @propname from the given firmware node and store 395 * them to @val if found. 396 * 397 * It's recommended to call fwnode_property_string_array_count() instead of calling 398 * this function with @val equals %NULL and @nval equals 0. 399 * 400 * Return: number of values read on success if @val is non-NULL, 401 * number of values available on success if @val is NULL, 402 * %-EINVAL if given arguments are not valid, 403 * %-ENODATA if the property does not have a value, 404 * %-EPROTO or %-EILSEQ if the property is not an array of strings, 405 * %-EOVERFLOW if the size of the property is not as expected, 406 * %-ENXIO if no suitable firmware interface is present. 407 */ 408 int fwnode_property_read_string_array(const struct fwnode_handle *fwnode, 409 const char *propname, const char **val, 410 size_t nval) 411 { 412 int ret; 413 414 if (IS_ERR_OR_NULL(fwnode)) 415 return -EINVAL; 416 417 ret = fwnode_call_int_op(fwnode, property_read_string_array, propname, 418 val, nval); 419 if (ret != -EINVAL) 420 return ret; 421 422 return fwnode_call_int_op(fwnode->secondary, property_read_string_array, propname, 423 val, nval); 424 } 425 EXPORT_SYMBOL_GPL(fwnode_property_read_string_array); 426 427 /** 428 * fwnode_property_read_string - return a string property of a firmware node 429 * @fwnode: Firmware node to get the property of 430 * @propname: Name of the property 431 * @val: The value is stored here 432 * 433 * Read property @propname from the given firmware node and store the value into 434 * @val if found. The value is checked to be a string. 435 * 436 * Return: %0 if the property was found (success), 437 * %-EINVAL if given arguments are not valid, 438 * %-ENODATA if the property does not have a value, 439 * %-EPROTO or %-EILSEQ if the property is not a string, 440 * %-ENXIO if no suitable firmware interface is present. 441 */ 442 int fwnode_property_read_string(const struct fwnode_handle *fwnode, 443 const char *propname, const char **val) 444 { 445 int ret = fwnode_property_read_string_array(fwnode, propname, val, 1); 446 447 return ret < 0 ? ret : 0; 448 } 449 EXPORT_SYMBOL_GPL(fwnode_property_read_string); 450 451 /** 452 * fwnode_property_match_string - find a string in an array and return index 453 * @fwnode: Firmware node to get the property of 454 * @propname: Name of the property holding the array 455 * @string: String to look for 456 * 457 * Find a given string in a string array and if it is found return the 458 * index back. 459 * 460 * Return: index, starting from %0, if the property was found (success), 461 * %-EINVAL if given arguments are not valid, 462 * %-ENODATA if the property does not have a value, 463 * %-EPROTO if the property is not an array of strings, 464 * %-ENXIO if no suitable firmware interface is present. 465 */ 466 int fwnode_property_match_string(const struct fwnode_handle *fwnode, 467 const char *propname, const char *string) 468 { 469 const char **values; 470 int nval, ret; 471 472 nval = fwnode_property_read_string_array(fwnode, propname, NULL, 0); 473 if (nval < 0) 474 return nval; 475 476 if (nval == 0) 477 return -ENODATA; 478 479 values = kcalloc(nval, sizeof(*values), GFP_KERNEL); 480 if (!values) 481 return -ENOMEM; 482 483 ret = fwnode_property_read_string_array(fwnode, propname, values, nval); 484 if (ret < 0) 485 goto out_free; 486 487 ret = match_string(values, nval, string); 488 if (ret < 0) 489 ret = -ENODATA; 490 491 out_free: 492 kfree(values); 493 return ret; 494 } 495 EXPORT_SYMBOL_GPL(fwnode_property_match_string); 496 497 /** 498 * fwnode_property_get_reference_args() - Find a reference with arguments 499 * @fwnode: Firmware node where to look for the reference 500 * @prop: The name of the property 501 * @nargs_prop: The name of the property telling the number of 502 * arguments in the referred node. NULL if @nargs is known, 503 * otherwise @nargs is ignored. Only relevant on OF. 504 * @nargs: Number of arguments. Ignored if @nargs_prop is non-NULL. 505 * @index: Index of the reference, from zero onwards. 506 * @args: Result structure with reference and integer arguments. 507 * 508 * Obtain a reference based on a named property in an fwnode, with 509 * integer arguments. 510 * 511 * Caller is responsible to call fwnode_handle_put() on the returned 512 * args->fwnode pointer. 513 * 514 * Returns: %0 on success 515 * %-ENOENT when the index is out of bounds, the index has an empty 516 * reference or the property was not found 517 * %-EINVAL on parse error 518 */ 519 int fwnode_property_get_reference_args(const struct fwnode_handle *fwnode, 520 const char *prop, const char *nargs_prop, 521 unsigned int nargs, unsigned int index, 522 struct fwnode_reference_args *args) 523 { 524 int ret; 525 526 if (IS_ERR_OR_NULL(fwnode)) 527 return -ENOENT; 528 529 ret = fwnode_call_int_op(fwnode, get_reference_args, prop, nargs_prop, 530 nargs, index, args); 531 if (ret == 0) 532 return ret; 533 534 if (IS_ERR_OR_NULL(fwnode->secondary)) 535 return ret; 536 537 return fwnode_call_int_op(fwnode->secondary, get_reference_args, prop, nargs_prop, 538 nargs, index, args); 539 } 540 EXPORT_SYMBOL_GPL(fwnode_property_get_reference_args); 541 542 /** 543 * fwnode_find_reference - Find named reference to a fwnode_handle 544 * @fwnode: Firmware node where to look for the reference 545 * @name: The name of the reference 546 * @index: Index of the reference 547 * 548 * @index can be used when the named reference holds a table of references. 549 * 550 * Returns pointer to the reference fwnode, or ERR_PTR. Caller is responsible to 551 * call fwnode_handle_put() on the returned fwnode pointer. 552 */ 553 struct fwnode_handle *fwnode_find_reference(const struct fwnode_handle *fwnode, 554 const char *name, 555 unsigned int index) 556 { 557 struct fwnode_reference_args args; 558 int ret; 559 560 ret = fwnode_property_get_reference_args(fwnode, name, NULL, 0, index, 561 &args); 562 return ret ? ERR_PTR(ret) : args.fwnode; 563 } 564 EXPORT_SYMBOL_GPL(fwnode_find_reference); 565 566 /** 567 * fwnode_get_name - Return the name of a node 568 * @fwnode: The firmware node 569 * 570 * Returns a pointer to the node name. 571 */ 572 const char *fwnode_get_name(const struct fwnode_handle *fwnode) 573 { 574 return fwnode_call_ptr_op(fwnode, get_name); 575 } 576 EXPORT_SYMBOL_GPL(fwnode_get_name); 577 578 /** 579 * fwnode_get_name_prefix - Return the prefix of node for printing purposes 580 * @fwnode: The firmware node 581 * 582 * Returns the prefix of a node, intended to be printed right before the node. 583 * The prefix works also as a separator between the nodes. 584 */ 585 const char *fwnode_get_name_prefix(const struct fwnode_handle *fwnode) 586 { 587 return fwnode_call_ptr_op(fwnode, get_name_prefix); 588 } 589 590 /** 591 * fwnode_get_parent - Return parent firwmare node 592 * @fwnode: Firmware whose parent is retrieved 593 * 594 * Return parent firmware node of the given node if possible or %NULL if no 595 * parent was available. 596 */ 597 struct fwnode_handle *fwnode_get_parent(const struct fwnode_handle *fwnode) 598 { 599 return fwnode_call_ptr_op(fwnode, get_parent); 600 } 601 EXPORT_SYMBOL_GPL(fwnode_get_parent); 602 603 /** 604 * fwnode_get_next_parent - Iterate to the node's parent 605 * @fwnode: Firmware whose parent is retrieved 606 * 607 * This is like fwnode_get_parent() except that it drops the refcount 608 * on the passed node, making it suitable for iterating through a 609 * node's parents. 610 * 611 * Returns a node pointer with refcount incremented, use 612 * fwnode_handle_put() on it when done. 613 */ 614 struct fwnode_handle *fwnode_get_next_parent(struct fwnode_handle *fwnode) 615 { 616 struct fwnode_handle *parent = fwnode_get_parent(fwnode); 617 618 fwnode_handle_put(fwnode); 619 620 return parent; 621 } 622 EXPORT_SYMBOL_GPL(fwnode_get_next_parent); 623 624 /** 625 * fwnode_get_next_parent_dev - Find device of closest ancestor fwnode 626 * @fwnode: firmware node 627 * 628 * Given a firmware node (@fwnode), this function finds its closest ancestor 629 * firmware node that has a corresponding struct device and returns that struct 630 * device. 631 * 632 * The caller of this function is expected to call put_device() on the returned 633 * device when they are done. 634 */ 635 struct device *fwnode_get_next_parent_dev(struct fwnode_handle *fwnode) 636 { 637 struct fwnode_handle *parent; 638 struct device *dev; 639 640 fwnode_for_each_parent_node(fwnode, parent) { 641 dev = get_dev_from_fwnode(parent); 642 if (dev) { 643 fwnode_handle_put(parent); 644 return dev; 645 } 646 } 647 return NULL; 648 } 649 650 /** 651 * fwnode_count_parents - Return the number of parents a node has 652 * @fwnode: The node the parents of which are to be counted 653 * 654 * Returns the number of parents a node has. 655 */ 656 unsigned int fwnode_count_parents(const struct fwnode_handle *fwnode) 657 { 658 struct fwnode_handle *parent; 659 unsigned int count = 0; 660 661 fwnode_for_each_parent_node(fwnode, parent) 662 count++; 663 664 return count; 665 } 666 EXPORT_SYMBOL_GPL(fwnode_count_parents); 667 668 /** 669 * fwnode_get_nth_parent - Return an nth parent of a node 670 * @fwnode: The node the parent of which is requested 671 * @depth: Distance of the parent from the node 672 * 673 * Returns the nth parent of a node. If there is no parent at the requested 674 * @depth, %NULL is returned. If @depth is 0, the functionality is equivalent to 675 * fwnode_handle_get(). For @depth == 1, it is fwnode_get_parent() and so on. 676 * 677 * The caller is responsible for calling fwnode_handle_put() for the returned 678 * node. 679 */ 680 struct fwnode_handle *fwnode_get_nth_parent(struct fwnode_handle *fwnode, 681 unsigned int depth) 682 { 683 struct fwnode_handle *parent; 684 685 if (depth == 0) 686 return fwnode_handle_get(fwnode); 687 688 fwnode_for_each_parent_node(fwnode, parent) { 689 if (--depth == 0) 690 return parent; 691 } 692 return NULL; 693 } 694 EXPORT_SYMBOL_GPL(fwnode_get_nth_parent); 695 696 /** 697 * fwnode_is_ancestor_of - Test if @ancestor is ancestor of @child 698 * @ancestor: Firmware which is tested for being an ancestor 699 * @child: Firmware which is tested for being the child 700 * 701 * A node is considered an ancestor of itself too. 702 * 703 * Returns true if @ancestor is an ancestor of @child. Otherwise, returns false. 704 */ 705 bool fwnode_is_ancestor_of(struct fwnode_handle *ancestor, struct fwnode_handle *child) 706 { 707 struct fwnode_handle *parent; 708 709 if (IS_ERR_OR_NULL(ancestor)) 710 return false; 711 712 if (child == ancestor) 713 return true; 714 715 fwnode_for_each_parent_node(child, parent) { 716 if (parent == ancestor) { 717 fwnode_handle_put(parent); 718 return true; 719 } 720 } 721 return false; 722 } 723 724 /** 725 * fwnode_get_next_child_node - Return the next child node handle for a node 726 * @fwnode: Firmware node to find the next child node for. 727 * @child: Handle to one of the node's child nodes or a %NULL handle. 728 */ 729 struct fwnode_handle * 730 fwnode_get_next_child_node(const struct fwnode_handle *fwnode, 731 struct fwnode_handle *child) 732 { 733 return fwnode_call_ptr_op(fwnode, get_next_child_node, child); 734 } 735 EXPORT_SYMBOL_GPL(fwnode_get_next_child_node); 736 737 /** 738 * fwnode_get_next_available_child_node - Return the next 739 * available child node handle for a node 740 * @fwnode: Firmware node to find the next child node for. 741 * @child: Handle to one of the node's child nodes or a %NULL handle. 742 */ 743 struct fwnode_handle * 744 fwnode_get_next_available_child_node(const struct fwnode_handle *fwnode, 745 struct fwnode_handle *child) 746 { 747 struct fwnode_handle *next_child = child; 748 749 if (IS_ERR_OR_NULL(fwnode)) 750 return NULL; 751 752 do { 753 next_child = fwnode_get_next_child_node(fwnode, next_child); 754 if (!next_child) 755 return NULL; 756 } while (!fwnode_device_is_available(next_child)); 757 758 return next_child; 759 } 760 EXPORT_SYMBOL_GPL(fwnode_get_next_available_child_node); 761 762 /** 763 * device_get_next_child_node - Return the next child node handle for a device 764 * @dev: Device to find the next child node for. 765 * @child: Handle to one of the device's child nodes or a null handle. 766 */ 767 struct fwnode_handle *device_get_next_child_node(const struct device *dev, 768 struct fwnode_handle *child) 769 { 770 const struct fwnode_handle *fwnode = dev_fwnode(dev); 771 struct fwnode_handle *next; 772 773 if (IS_ERR_OR_NULL(fwnode)) 774 return NULL; 775 776 /* Try to find a child in primary fwnode */ 777 next = fwnode_get_next_child_node(fwnode, child); 778 if (next) 779 return next; 780 781 /* When no more children in primary, continue with secondary */ 782 return fwnode_get_next_child_node(fwnode->secondary, child); 783 } 784 EXPORT_SYMBOL_GPL(device_get_next_child_node); 785 786 /** 787 * fwnode_get_named_child_node - Return first matching named child node handle 788 * @fwnode: Firmware node to find the named child node for. 789 * @childname: String to match child node name against. 790 */ 791 struct fwnode_handle * 792 fwnode_get_named_child_node(const struct fwnode_handle *fwnode, 793 const char *childname) 794 { 795 return fwnode_call_ptr_op(fwnode, get_named_child_node, childname); 796 } 797 EXPORT_SYMBOL_GPL(fwnode_get_named_child_node); 798 799 /** 800 * device_get_named_child_node - Return first matching named child node handle 801 * @dev: Device to find the named child node for. 802 * @childname: String to match child node name against. 803 */ 804 struct fwnode_handle *device_get_named_child_node(const struct device *dev, 805 const char *childname) 806 { 807 return fwnode_get_named_child_node(dev_fwnode(dev), childname); 808 } 809 EXPORT_SYMBOL_GPL(device_get_named_child_node); 810 811 /** 812 * fwnode_handle_get - Obtain a reference to a device node 813 * @fwnode: Pointer to the device node to obtain the reference to. 814 * 815 * Returns the fwnode handle. 816 */ 817 struct fwnode_handle *fwnode_handle_get(struct fwnode_handle *fwnode) 818 { 819 if (!fwnode_has_op(fwnode, get)) 820 return fwnode; 821 822 return fwnode_call_ptr_op(fwnode, get); 823 } 824 EXPORT_SYMBOL_GPL(fwnode_handle_get); 825 826 /** 827 * fwnode_handle_put - Drop reference to a device node 828 * @fwnode: Pointer to the device node to drop the reference to. 829 * 830 * This has to be used when terminating device_for_each_child_node() iteration 831 * with break or return to prevent stale device node references from being left 832 * behind. 833 */ 834 void fwnode_handle_put(struct fwnode_handle *fwnode) 835 { 836 fwnode_call_void_op(fwnode, put); 837 } 838 EXPORT_SYMBOL_GPL(fwnode_handle_put); 839 840 /** 841 * fwnode_device_is_available - check if a device is available for use 842 * @fwnode: Pointer to the fwnode of the device. 843 * 844 * For fwnode node types that don't implement the .device_is_available() 845 * operation, this function returns true. 846 */ 847 bool fwnode_device_is_available(const struct fwnode_handle *fwnode) 848 { 849 if (IS_ERR_OR_NULL(fwnode)) 850 return false; 851 852 if (!fwnode_has_op(fwnode, device_is_available)) 853 return true; 854 855 return fwnode_call_bool_op(fwnode, device_is_available); 856 } 857 EXPORT_SYMBOL_GPL(fwnode_device_is_available); 858 859 /** 860 * device_get_child_node_count - return the number of child nodes for device 861 * @dev: Device to cound the child nodes for 862 */ 863 unsigned int device_get_child_node_count(const struct device *dev) 864 { 865 struct fwnode_handle *child; 866 unsigned int count = 0; 867 868 device_for_each_child_node(dev, child) 869 count++; 870 871 return count; 872 } 873 EXPORT_SYMBOL_GPL(device_get_child_node_count); 874 875 bool device_dma_supported(const struct device *dev) 876 { 877 return fwnode_call_bool_op(dev_fwnode(dev), device_dma_supported); 878 } 879 EXPORT_SYMBOL_GPL(device_dma_supported); 880 881 enum dev_dma_attr device_get_dma_attr(const struct device *dev) 882 { 883 if (!fwnode_has_op(dev_fwnode(dev), device_get_dma_attr)) 884 return DEV_DMA_NOT_SUPPORTED; 885 886 return fwnode_call_int_op(dev_fwnode(dev), device_get_dma_attr); 887 } 888 EXPORT_SYMBOL_GPL(device_get_dma_attr); 889 890 /** 891 * fwnode_get_phy_mode - Get phy mode for given firmware node 892 * @fwnode: Pointer to the given node 893 * 894 * The function gets phy interface string from property 'phy-mode' or 895 * 'phy-connection-type', and return its index in phy_modes table, or errno in 896 * error case. 897 */ 898 int fwnode_get_phy_mode(struct fwnode_handle *fwnode) 899 { 900 const char *pm; 901 int err, i; 902 903 err = fwnode_property_read_string(fwnode, "phy-mode", &pm); 904 if (err < 0) 905 err = fwnode_property_read_string(fwnode, 906 "phy-connection-type", &pm); 907 if (err < 0) 908 return err; 909 910 for (i = 0; i < PHY_INTERFACE_MODE_MAX; i++) 911 if (!strcasecmp(pm, phy_modes(i))) 912 return i; 913 914 return -ENODEV; 915 } 916 EXPORT_SYMBOL_GPL(fwnode_get_phy_mode); 917 918 /** 919 * device_get_phy_mode - Get phy mode for given device 920 * @dev: Pointer to the given device 921 * 922 * The function gets phy interface string from property 'phy-mode' or 923 * 'phy-connection-type', and return its index in phy_modes table, or errno in 924 * error case. 925 */ 926 int device_get_phy_mode(struct device *dev) 927 { 928 return fwnode_get_phy_mode(dev_fwnode(dev)); 929 } 930 EXPORT_SYMBOL_GPL(device_get_phy_mode); 931 932 /** 933 * fwnode_iomap - Maps the memory mapped IO for a given fwnode 934 * @fwnode: Pointer to the firmware node 935 * @index: Index of the IO range 936 * 937 * Returns a pointer to the mapped memory. 938 */ 939 void __iomem *fwnode_iomap(struct fwnode_handle *fwnode, int index) 940 { 941 return fwnode_call_ptr_op(fwnode, iomap, index); 942 } 943 EXPORT_SYMBOL(fwnode_iomap); 944 945 /** 946 * fwnode_irq_get - Get IRQ directly from a fwnode 947 * @fwnode: Pointer to the firmware node 948 * @index: Zero-based index of the IRQ 949 * 950 * Returns Linux IRQ number on success. Other values are determined 951 * accordingly to acpi_/of_ irq_get() operation. 952 */ 953 int fwnode_irq_get(const struct fwnode_handle *fwnode, unsigned int index) 954 { 955 return fwnode_call_int_op(fwnode, irq_get, index); 956 } 957 EXPORT_SYMBOL(fwnode_irq_get); 958 959 /** 960 * fwnode_irq_get_byname - Get IRQ from a fwnode using its name 961 * @fwnode: Pointer to the firmware node 962 * @name: IRQ name 963 * 964 * Description: 965 * Find a match to the string @name in the 'interrupt-names' string array 966 * in _DSD for ACPI, or of_node for Device Tree. Then get the Linux IRQ 967 * number of the IRQ resource corresponding to the index of the matched 968 * string. 969 * 970 * Return: 971 * Linux IRQ number on success, or negative errno otherwise. 972 */ 973 int fwnode_irq_get_byname(const struct fwnode_handle *fwnode, const char *name) 974 { 975 int index; 976 977 if (!name) 978 return -EINVAL; 979 980 index = fwnode_property_match_string(fwnode, "interrupt-names", name); 981 if (index < 0) 982 return index; 983 984 return fwnode_irq_get(fwnode, index); 985 } 986 EXPORT_SYMBOL(fwnode_irq_get_byname); 987 988 /** 989 * fwnode_graph_get_next_endpoint - Get next endpoint firmware node 990 * @fwnode: Pointer to the parent firmware node 991 * @prev: Previous endpoint node or %NULL to get the first 992 * 993 * Returns an endpoint firmware node pointer or %NULL if no more endpoints 994 * are available. 995 */ 996 struct fwnode_handle * 997 fwnode_graph_get_next_endpoint(const struct fwnode_handle *fwnode, 998 struct fwnode_handle *prev) 999 { 1000 const struct fwnode_handle *parent; 1001 struct fwnode_handle *ep; 1002 1003 /* 1004 * If this function is in a loop and the previous iteration returned 1005 * an endpoint from fwnode->secondary, then we need to use the secondary 1006 * as parent rather than @fwnode. 1007 */ 1008 if (prev) 1009 parent = fwnode_graph_get_port_parent(prev); 1010 else 1011 parent = fwnode; 1012 if (IS_ERR_OR_NULL(parent)) 1013 return NULL; 1014 1015 ep = fwnode_call_ptr_op(parent, graph_get_next_endpoint, prev); 1016 if (ep) 1017 return ep; 1018 1019 return fwnode_graph_get_next_endpoint(parent->secondary, NULL); 1020 } 1021 EXPORT_SYMBOL_GPL(fwnode_graph_get_next_endpoint); 1022 1023 /** 1024 * fwnode_graph_get_port_parent - Return the device fwnode of a port endpoint 1025 * @endpoint: Endpoint firmware node of the port 1026 * 1027 * Return: the firmware node of the device the @endpoint belongs to. 1028 */ 1029 struct fwnode_handle * 1030 fwnode_graph_get_port_parent(const struct fwnode_handle *endpoint) 1031 { 1032 struct fwnode_handle *port, *parent; 1033 1034 port = fwnode_get_parent(endpoint); 1035 parent = fwnode_call_ptr_op(port, graph_get_port_parent); 1036 1037 fwnode_handle_put(port); 1038 1039 return parent; 1040 } 1041 EXPORT_SYMBOL_GPL(fwnode_graph_get_port_parent); 1042 1043 /** 1044 * fwnode_graph_get_remote_port_parent - Return fwnode of a remote device 1045 * @fwnode: Endpoint firmware node pointing to the remote endpoint 1046 * 1047 * Extracts firmware node of a remote device the @fwnode points to. 1048 */ 1049 struct fwnode_handle * 1050 fwnode_graph_get_remote_port_parent(const struct fwnode_handle *fwnode) 1051 { 1052 struct fwnode_handle *endpoint, *parent; 1053 1054 endpoint = fwnode_graph_get_remote_endpoint(fwnode); 1055 parent = fwnode_graph_get_port_parent(endpoint); 1056 1057 fwnode_handle_put(endpoint); 1058 1059 return parent; 1060 } 1061 EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_port_parent); 1062 1063 /** 1064 * fwnode_graph_get_remote_port - Return fwnode of a remote port 1065 * @fwnode: Endpoint firmware node pointing to the remote endpoint 1066 * 1067 * Extracts firmware node of a remote port the @fwnode points to. 1068 */ 1069 struct fwnode_handle * 1070 fwnode_graph_get_remote_port(const struct fwnode_handle *fwnode) 1071 { 1072 return fwnode_get_next_parent(fwnode_graph_get_remote_endpoint(fwnode)); 1073 } 1074 EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_port); 1075 1076 /** 1077 * fwnode_graph_get_remote_endpoint - Return fwnode of a remote endpoint 1078 * @fwnode: Endpoint firmware node pointing to the remote endpoint 1079 * 1080 * Extracts firmware node of a remote endpoint the @fwnode points to. 1081 */ 1082 struct fwnode_handle * 1083 fwnode_graph_get_remote_endpoint(const struct fwnode_handle *fwnode) 1084 { 1085 return fwnode_call_ptr_op(fwnode, graph_get_remote_endpoint); 1086 } 1087 EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_endpoint); 1088 1089 static bool fwnode_graph_remote_available(struct fwnode_handle *ep) 1090 { 1091 struct fwnode_handle *dev_node; 1092 bool available; 1093 1094 dev_node = fwnode_graph_get_remote_port_parent(ep); 1095 available = fwnode_device_is_available(dev_node); 1096 fwnode_handle_put(dev_node); 1097 1098 return available; 1099 } 1100 1101 /** 1102 * fwnode_graph_get_endpoint_by_id - get endpoint by port and endpoint numbers 1103 * @fwnode: parent fwnode_handle containing the graph 1104 * @port: identifier of the port node 1105 * @endpoint: identifier of the endpoint node under the port node 1106 * @flags: fwnode lookup flags 1107 * 1108 * Return the fwnode handle of the local endpoint corresponding the port and 1109 * endpoint IDs or NULL if not found. 1110 * 1111 * If FWNODE_GRAPH_ENDPOINT_NEXT is passed in @flags and the specified endpoint 1112 * has not been found, look for the closest endpoint ID greater than the 1113 * specified one and return the endpoint that corresponds to it, if present. 1114 * 1115 * Does not return endpoints that belong to disabled devices or endpoints that 1116 * are unconnected, unless FWNODE_GRAPH_DEVICE_DISABLED is passed in @flags. 1117 * 1118 * The returned endpoint needs to be released by calling fwnode_handle_put() on 1119 * it when it is not needed any more. 1120 */ 1121 struct fwnode_handle * 1122 fwnode_graph_get_endpoint_by_id(const struct fwnode_handle *fwnode, 1123 u32 port, u32 endpoint, unsigned long flags) 1124 { 1125 struct fwnode_handle *ep, *best_ep = NULL; 1126 unsigned int best_ep_id = 0; 1127 bool endpoint_next = flags & FWNODE_GRAPH_ENDPOINT_NEXT; 1128 bool enabled_only = !(flags & FWNODE_GRAPH_DEVICE_DISABLED); 1129 1130 fwnode_graph_for_each_endpoint(fwnode, ep) { 1131 struct fwnode_endpoint fwnode_ep = { 0 }; 1132 int ret; 1133 1134 if (enabled_only && !fwnode_graph_remote_available(ep)) 1135 continue; 1136 1137 ret = fwnode_graph_parse_endpoint(ep, &fwnode_ep); 1138 if (ret < 0) 1139 continue; 1140 1141 if (fwnode_ep.port != port) 1142 continue; 1143 1144 if (fwnode_ep.id == endpoint) 1145 return ep; 1146 1147 if (!endpoint_next) 1148 continue; 1149 1150 /* 1151 * If the endpoint that has just been found is not the first 1152 * matching one and the ID of the one found previously is closer 1153 * to the requested endpoint ID, skip it. 1154 */ 1155 if (fwnode_ep.id < endpoint || 1156 (best_ep && best_ep_id < fwnode_ep.id)) 1157 continue; 1158 1159 fwnode_handle_put(best_ep); 1160 best_ep = fwnode_handle_get(ep); 1161 best_ep_id = fwnode_ep.id; 1162 } 1163 1164 return best_ep; 1165 } 1166 EXPORT_SYMBOL_GPL(fwnode_graph_get_endpoint_by_id); 1167 1168 /** 1169 * fwnode_graph_get_endpoint_count - Count endpoints on a device node 1170 * @fwnode: The node related to a device 1171 * @flags: fwnode lookup flags 1172 * Count endpoints in a device node. 1173 * 1174 * If FWNODE_GRAPH_DEVICE_DISABLED flag is specified, also unconnected endpoints 1175 * and endpoints connected to disabled devices are counted. 1176 */ 1177 unsigned int fwnode_graph_get_endpoint_count(struct fwnode_handle *fwnode, 1178 unsigned long flags) 1179 { 1180 struct fwnode_handle *ep; 1181 unsigned int count = 0; 1182 1183 fwnode_graph_for_each_endpoint(fwnode, ep) { 1184 if (flags & FWNODE_GRAPH_DEVICE_DISABLED || 1185 fwnode_graph_remote_available(ep)) 1186 count++; 1187 } 1188 1189 return count; 1190 } 1191 EXPORT_SYMBOL_GPL(fwnode_graph_get_endpoint_count); 1192 1193 /** 1194 * fwnode_graph_parse_endpoint - parse common endpoint node properties 1195 * @fwnode: pointer to endpoint fwnode_handle 1196 * @endpoint: pointer to the fwnode endpoint data structure 1197 * 1198 * Parse @fwnode representing a graph endpoint node and store the 1199 * information in @endpoint. The caller must hold a reference to 1200 * @fwnode. 1201 */ 1202 int fwnode_graph_parse_endpoint(const struct fwnode_handle *fwnode, 1203 struct fwnode_endpoint *endpoint) 1204 { 1205 memset(endpoint, 0, sizeof(*endpoint)); 1206 1207 return fwnode_call_int_op(fwnode, graph_parse_endpoint, endpoint); 1208 } 1209 EXPORT_SYMBOL(fwnode_graph_parse_endpoint); 1210 1211 const void *device_get_match_data(const struct device *dev) 1212 { 1213 return fwnode_call_ptr_op(dev_fwnode(dev), device_get_match_data, dev); 1214 } 1215 EXPORT_SYMBOL_GPL(device_get_match_data); 1216 1217 static unsigned int fwnode_graph_devcon_matches(const struct fwnode_handle *fwnode, 1218 const char *con_id, void *data, 1219 devcon_match_fn_t match, 1220 void **matches, 1221 unsigned int matches_len) 1222 { 1223 struct fwnode_handle *node; 1224 struct fwnode_handle *ep; 1225 unsigned int count = 0; 1226 void *ret; 1227 1228 fwnode_graph_for_each_endpoint(fwnode, ep) { 1229 if (matches && count >= matches_len) { 1230 fwnode_handle_put(ep); 1231 break; 1232 } 1233 1234 node = fwnode_graph_get_remote_port_parent(ep); 1235 if (!fwnode_device_is_available(node)) { 1236 fwnode_handle_put(node); 1237 continue; 1238 } 1239 1240 ret = match(node, con_id, data); 1241 fwnode_handle_put(node); 1242 if (ret) { 1243 if (matches) 1244 matches[count] = ret; 1245 count++; 1246 } 1247 } 1248 return count; 1249 } 1250 1251 static unsigned int fwnode_devcon_matches(const struct fwnode_handle *fwnode, 1252 const char *con_id, void *data, 1253 devcon_match_fn_t match, 1254 void **matches, 1255 unsigned int matches_len) 1256 { 1257 struct fwnode_handle *node; 1258 unsigned int count = 0; 1259 unsigned int i; 1260 void *ret; 1261 1262 for (i = 0; ; i++) { 1263 if (matches && count >= matches_len) 1264 break; 1265 1266 node = fwnode_find_reference(fwnode, con_id, i); 1267 if (IS_ERR(node)) 1268 break; 1269 1270 ret = match(node, NULL, data); 1271 fwnode_handle_put(node); 1272 if (ret) { 1273 if (matches) 1274 matches[count] = ret; 1275 count++; 1276 } 1277 } 1278 1279 return count; 1280 } 1281 1282 /** 1283 * fwnode_connection_find_match - Find connection from a device node 1284 * @fwnode: Device node with the connection 1285 * @con_id: Identifier for the connection 1286 * @data: Data for the match function 1287 * @match: Function to check and convert the connection description 1288 * 1289 * Find a connection with unique identifier @con_id between @fwnode and another 1290 * device node. @match will be used to convert the connection description to 1291 * data the caller is expecting to be returned. 1292 */ 1293 void *fwnode_connection_find_match(const struct fwnode_handle *fwnode, 1294 const char *con_id, void *data, 1295 devcon_match_fn_t match) 1296 { 1297 unsigned int count; 1298 void *ret; 1299 1300 if (!fwnode || !match) 1301 return NULL; 1302 1303 count = fwnode_graph_devcon_matches(fwnode, con_id, data, match, &ret, 1); 1304 if (count) 1305 return ret; 1306 1307 count = fwnode_devcon_matches(fwnode, con_id, data, match, &ret, 1); 1308 return count ? ret : NULL; 1309 } 1310 EXPORT_SYMBOL_GPL(fwnode_connection_find_match); 1311 1312 /** 1313 * fwnode_connection_find_matches - Find connections from a device node 1314 * @fwnode: Device node with the connection 1315 * @con_id: Identifier for the connection 1316 * @data: Data for the match function 1317 * @match: Function to check and convert the connection description 1318 * @matches: (Optional) array of pointers to fill with matches 1319 * @matches_len: Length of @matches 1320 * 1321 * Find up to @matches_len connections with unique identifier @con_id between 1322 * @fwnode and other device nodes. @match will be used to convert the 1323 * connection description to data the caller is expecting to be returned 1324 * through the @matches array. 1325 * If @matches is NULL @matches_len is ignored and the total number of resolved 1326 * matches is returned. 1327 * 1328 * Return: Number of matches resolved, or negative errno. 1329 */ 1330 int fwnode_connection_find_matches(const struct fwnode_handle *fwnode, 1331 const char *con_id, void *data, 1332 devcon_match_fn_t match, 1333 void **matches, unsigned int matches_len) 1334 { 1335 unsigned int count_graph; 1336 unsigned int count_ref; 1337 1338 if (!fwnode || !match) 1339 return -EINVAL; 1340 1341 count_graph = fwnode_graph_devcon_matches(fwnode, con_id, data, match, 1342 matches, matches_len); 1343 1344 if (matches) { 1345 matches += count_graph; 1346 matches_len -= count_graph; 1347 } 1348 1349 count_ref = fwnode_devcon_matches(fwnode, con_id, data, match, 1350 matches, matches_len); 1351 1352 return count_graph + count_ref; 1353 } 1354 EXPORT_SYMBOL_GPL(fwnode_connection_find_matches); 1355