1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * platform.c - platform 'pseudo' bus for legacy devices 4 * 5 * Copyright (c) 2002-3 Patrick Mochel 6 * Copyright (c) 2002-3 Open Source Development Labs 7 * 8 * Please see Documentation/driver-api/driver-model/platform.rst for more 9 * information. 10 */ 11 12 #include <linux/string.h> 13 #include <linux/platform_device.h> 14 #include <linux/of_device.h> 15 #include <linux/of_irq.h> 16 #include <linux/module.h> 17 #include <linux/init.h> 18 #include <linux/interrupt.h> 19 #include <linux/ioport.h> 20 #include <linux/dma-mapping.h> 21 #include <linux/memblock.h> 22 #include <linux/err.h> 23 #include <linux/slab.h> 24 #include <linux/pm_runtime.h> 25 #include <linux/pm_domain.h> 26 #include <linux/idr.h> 27 #include <linux/acpi.h> 28 #include <linux/clk/clk-conf.h> 29 #include <linux/limits.h> 30 #include <linux/property.h> 31 #include <linux/kmemleak.h> 32 #include <linux/types.h> 33 34 #include "base.h" 35 #include "power/power.h" 36 37 /* For automatically allocated device IDs */ 38 static DEFINE_IDA(platform_devid_ida); 39 40 struct device platform_bus = { 41 .init_name = "platform", 42 }; 43 EXPORT_SYMBOL_GPL(platform_bus); 44 45 /** 46 * platform_get_resource - get a resource for a device 47 * @dev: platform device 48 * @type: resource type 49 * @num: resource index 50 * 51 * Return: a pointer to the resource or NULL on failure. 52 */ 53 struct resource *platform_get_resource(struct platform_device *dev, 54 unsigned int type, unsigned int num) 55 { 56 u32 i; 57 58 for (i = 0; i < dev->num_resources; i++) { 59 struct resource *r = &dev->resource[i]; 60 61 if (type == resource_type(r) && num-- == 0) 62 return r; 63 } 64 return NULL; 65 } 66 EXPORT_SYMBOL_GPL(platform_get_resource); 67 68 struct resource *platform_get_mem_or_io(struct platform_device *dev, 69 unsigned int num) 70 { 71 u32 i; 72 73 for (i = 0; i < dev->num_resources; i++) { 74 struct resource *r = &dev->resource[i]; 75 76 if ((resource_type(r) & (IORESOURCE_MEM|IORESOURCE_IO)) && num-- == 0) 77 return r; 78 } 79 return NULL; 80 } 81 EXPORT_SYMBOL_GPL(platform_get_mem_or_io); 82 83 #ifdef CONFIG_HAS_IOMEM 84 /** 85 * devm_platform_get_and_ioremap_resource - call devm_ioremap_resource() for a 86 * platform device and get resource 87 * 88 * @pdev: platform device to use both for memory resource lookup as well as 89 * resource management 90 * @index: resource index 91 * @res: optional output parameter to store a pointer to the obtained resource. 92 * 93 * Return: a pointer to the remapped memory or an ERR_PTR() encoded error code 94 * on failure. 95 */ 96 void __iomem * 97 devm_platform_get_and_ioremap_resource(struct platform_device *pdev, 98 unsigned int index, struct resource **res) 99 { 100 struct resource *r; 101 102 r = platform_get_resource(pdev, IORESOURCE_MEM, index); 103 if (res) 104 *res = r; 105 return devm_ioremap_resource(&pdev->dev, r); 106 } 107 EXPORT_SYMBOL_GPL(devm_platform_get_and_ioremap_resource); 108 109 /** 110 * devm_platform_ioremap_resource - call devm_ioremap_resource() for a platform 111 * device 112 * 113 * @pdev: platform device to use both for memory resource lookup as well as 114 * resource management 115 * @index: resource index 116 * 117 * Return: a pointer to the remapped memory or an ERR_PTR() encoded error code 118 * on failure. 119 */ 120 void __iomem *devm_platform_ioremap_resource(struct platform_device *pdev, 121 unsigned int index) 122 { 123 return devm_platform_get_and_ioremap_resource(pdev, index, NULL); 124 } 125 EXPORT_SYMBOL_GPL(devm_platform_ioremap_resource); 126 127 /** 128 * devm_platform_ioremap_resource_wc - write-combined variant of 129 * devm_platform_ioremap_resource() 130 * 131 * @pdev: platform device to use both for memory resource lookup as well as 132 * resource management 133 * @index: resource index 134 * 135 * Return: a pointer to the remapped memory or an ERR_PTR() encoded error code 136 * on failure. 137 */ 138 void __iomem *devm_platform_ioremap_resource_wc(struct platform_device *pdev, 139 unsigned int index) 140 { 141 struct resource *res; 142 143 res = platform_get_resource(pdev, IORESOURCE_MEM, index); 144 return devm_ioremap_resource_wc(&pdev->dev, res); 145 } 146 147 /** 148 * devm_platform_ioremap_resource_byname - call devm_ioremap_resource for 149 * a platform device, retrieve the 150 * resource by name 151 * 152 * @pdev: platform device to use both for memory resource lookup as well as 153 * resource management 154 * @name: name of the resource 155 * 156 * Return: a pointer to the remapped memory or an ERR_PTR() encoded error code 157 * on failure. 158 */ 159 void __iomem * 160 devm_platform_ioremap_resource_byname(struct platform_device *pdev, 161 const char *name) 162 { 163 struct resource *res; 164 165 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, name); 166 return devm_ioremap_resource(&pdev->dev, res); 167 } 168 EXPORT_SYMBOL_GPL(devm_platform_ioremap_resource_byname); 169 #endif /* CONFIG_HAS_IOMEM */ 170 171 /** 172 * platform_get_irq_optional - get an optional IRQ for a device 173 * @dev: platform device 174 * @num: IRQ number index 175 * 176 * Gets an IRQ for a platform device. Device drivers should check the return 177 * value for errors so as to not pass a negative integer value to the 178 * request_irq() APIs. This is the same as platform_get_irq(), except that it 179 * does not print an error message if an IRQ can not be obtained. 180 * 181 * For example:: 182 * 183 * int irq = platform_get_irq_optional(pdev, 0); 184 * if (irq < 0) 185 * return irq; 186 * 187 * Return: non-zero IRQ number on success, negative error number on failure. 188 */ 189 int platform_get_irq_optional(struct platform_device *dev, unsigned int num) 190 { 191 int ret; 192 #ifdef CONFIG_SPARC 193 /* sparc does not have irqs represented as IORESOURCE_IRQ resources */ 194 if (!dev || num >= dev->archdata.num_irqs) 195 goto out_not_found; 196 ret = dev->archdata.irqs[num]; 197 goto out; 198 #else 199 struct resource *r; 200 201 if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node) { 202 ret = of_irq_get(dev->dev.of_node, num); 203 if (ret > 0 || ret == -EPROBE_DEFER) 204 goto out; 205 } 206 207 r = platform_get_resource(dev, IORESOURCE_IRQ, num); 208 if (has_acpi_companion(&dev->dev)) { 209 if (r && r->flags & IORESOURCE_DISABLED) { 210 ret = acpi_irq_get(ACPI_HANDLE(&dev->dev), num, r); 211 if (ret) 212 goto out; 213 } 214 } 215 216 /* 217 * The resources may pass trigger flags to the irqs that need 218 * to be set up. It so happens that the trigger flags for 219 * IORESOURCE_BITS correspond 1-to-1 to the IRQF_TRIGGER* 220 * settings. 221 */ 222 if (r && r->flags & IORESOURCE_BITS) { 223 struct irq_data *irqd; 224 225 irqd = irq_get_irq_data(r->start); 226 if (!irqd) 227 goto out_not_found; 228 irqd_set_trigger_type(irqd, r->flags & IORESOURCE_BITS); 229 } 230 231 if (r) { 232 ret = r->start; 233 goto out; 234 } 235 236 /* 237 * For the index 0 interrupt, allow falling back to GpioInt 238 * resources. While a device could have both Interrupt and GpioInt 239 * resources, making this fallback ambiguous, in many common cases 240 * the device will only expose one IRQ, and this fallback 241 * allows a common code path across either kind of resource. 242 */ 243 if (num == 0 && has_acpi_companion(&dev->dev)) { 244 ret = acpi_dev_gpio_irq_get(ACPI_COMPANION(&dev->dev), num); 245 /* Our callers expect -ENXIO for missing IRQs. */ 246 if (ret >= 0 || ret == -EPROBE_DEFER) 247 goto out; 248 } 249 250 #endif 251 out_not_found: 252 ret = -ENXIO; 253 out: 254 WARN(ret == 0, "0 is an invalid IRQ number\n"); 255 return ret; 256 } 257 EXPORT_SYMBOL_GPL(platform_get_irq_optional); 258 259 /** 260 * platform_get_irq - get an IRQ for a device 261 * @dev: platform device 262 * @num: IRQ number index 263 * 264 * Gets an IRQ for a platform device and prints an error message if finding the 265 * IRQ fails. Device drivers should check the return value for errors so as to 266 * not pass a negative integer value to the request_irq() APIs. 267 * 268 * For example:: 269 * 270 * int irq = platform_get_irq(pdev, 0); 271 * if (irq < 0) 272 * return irq; 273 * 274 * Return: non-zero IRQ number on success, negative error number on failure. 275 */ 276 int platform_get_irq(struct platform_device *dev, unsigned int num) 277 { 278 int ret; 279 280 ret = platform_get_irq_optional(dev, num); 281 if (ret < 0 && ret != -EPROBE_DEFER) 282 dev_err(&dev->dev, "IRQ index %u not found\n", num); 283 284 return ret; 285 } 286 EXPORT_SYMBOL_GPL(platform_get_irq); 287 288 /** 289 * platform_irq_count - Count the number of IRQs a platform device uses 290 * @dev: platform device 291 * 292 * Return: Number of IRQs a platform device uses or EPROBE_DEFER 293 */ 294 int platform_irq_count(struct platform_device *dev) 295 { 296 int ret, nr = 0; 297 298 while ((ret = platform_get_irq_optional(dev, nr)) >= 0) 299 nr++; 300 301 if (ret == -EPROBE_DEFER) 302 return ret; 303 304 return nr; 305 } 306 EXPORT_SYMBOL_GPL(platform_irq_count); 307 308 struct irq_affinity_devres { 309 unsigned int count; 310 unsigned int irq[]; 311 }; 312 313 static void platform_disable_acpi_irq(struct platform_device *pdev, int index) 314 { 315 struct resource *r; 316 317 r = platform_get_resource(pdev, IORESOURCE_IRQ, index); 318 if (r) 319 irqresource_disabled(r, 0); 320 } 321 322 static void devm_platform_get_irqs_affinity_release(struct device *dev, 323 void *res) 324 { 325 struct irq_affinity_devres *ptr = res; 326 int i; 327 328 for (i = 0; i < ptr->count; i++) { 329 irq_dispose_mapping(ptr->irq[i]); 330 331 if (has_acpi_companion(dev)) 332 platform_disable_acpi_irq(to_platform_device(dev), i); 333 } 334 } 335 336 /** 337 * devm_platform_get_irqs_affinity - devm method to get a set of IRQs for a 338 * device using an interrupt affinity descriptor 339 * @dev: platform device pointer 340 * @affd: affinity descriptor 341 * @minvec: minimum count of interrupt vectors 342 * @maxvec: maximum count of interrupt vectors 343 * @irqs: pointer holder for IRQ numbers 344 * 345 * Gets a set of IRQs for a platform device, and updates IRQ afffinty according 346 * to the passed affinity descriptor 347 * 348 * Return: Number of vectors on success, negative error number on failure. 349 */ 350 int devm_platform_get_irqs_affinity(struct platform_device *dev, 351 struct irq_affinity *affd, 352 unsigned int minvec, 353 unsigned int maxvec, 354 int **irqs) 355 { 356 struct irq_affinity_devres *ptr; 357 struct irq_affinity_desc *desc; 358 size_t size; 359 int i, ret, nvec; 360 361 if (!affd) 362 return -EPERM; 363 364 if (maxvec < minvec) 365 return -ERANGE; 366 367 nvec = platform_irq_count(dev); 368 if (nvec < 0) 369 return nvec; 370 371 if (nvec < minvec) 372 return -ENOSPC; 373 374 nvec = irq_calc_affinity_vectors(minvec, nvec, affd); 375 if (nvec < minvec) 376 return -ENOSPC; 377 378 if (nvec > maxvec) 379 nvec = maxvec; 380 381 size = sizeof(*ptr) + sizeof(unsigned int) * nvec; 382 ptr = devres_alloc(devm_platform_get_irqs_affinity_release, size, 383 GFP_KERNEL); 384 if (!ptr) 385 return -ENOMEM; 386 387 ptr->count = nvec; 388 389 for (i = 0; i < nvec; i++) { 390 int irq = platform_get_irq(dev, i); 391 if (irq < 0) { 392 ret = irq; 393 goto err_free_devres; 394 } 395 ptr->irq[i] = irq; 396 } 397 398 desc = irq_create_affinity_masks(nvec, affd); 399 if (!desc) { 400 ret = -ENOMEM; 401 goto err_free_devres; 402 } 403 404 for (i = 0; i < nvec; i++) { 405 ret = irq_update_affinity_desc(ptr->irq[i], &desc[i]); 406 if (ret) { 407 dev_err(&dev->dev, "failed to update irq%d affinity descriptor (%d)\n", 408 ptr->irq[i], ret); 409 goto err_free_desc; 410 } 411 } 412 413 devres_add(&dev->dev, ptr); 414 415 kfree(desc); 416 417 *irqs = ptr->irq; 418 419 return nvec; 420 421 err_free_desc: 422 kfree(desc); 423 err_free_devres: 424 devres_free(ptr); 425 return ret; 426 } 427 EXPORT_SYMBOL_GPL(devm_platform_get_irqs_affinity); 428 429 /** 430 * platform_get_resource_byname - get a resource for a device by name 431 * @dev: platform device 432 * @type: resource type 433 * @name: resource name 434 */ 435 struct resource *platform_get_resource_byname(struct platform_device *dev, 436 unsigned int type, 437 const char *name) 438 { 439 u32 i; 440 441 for (i = 0; i < dev->num_resources; i++) { 442 struct resource *r = &dev->resource[i]; 443 444 if (unlikely(!r->name)) 445 continue; 446 447 if (type == resource_type(r) && !strcmp(r->name, name)) 448 return r; 449 } 450 return NULL; 451 } 452 EXPORT_SYMBOL_GPL(platform_get_resource_byname); 453 454 static int __platform_get_irq_byname(struct platform_device *dev, 455 const char *name) 456 { 457 struct resource *r; 458 int ret; 459 460 if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node) { 461 ret = of_irq_get_byname(dev->dev.of_node, name); 462 if (ret > 0 || ret == -EPROBE_DEFER) 463 return ret; 464 } 465 466 r = platform_get_resource_byname(dev, IORESOURCE_IRQ, name); 467 if (r) { 468 WARN(r->start == 0, "0 is an invalid IRQ number\n"); 469 return r->start; 470 } 471 472 return -ENXIO; 473 } 474 475 /** 476 * platform_get_irq_byname - get an IRQ for a device by name 477 * @dev: platform device 478 * @name: IRQ name 479 * 480 * Get an IRQ like platform_get_irq(), but then by name rather then by index. 481 * 482 * Return: non-zero IRQ number on success, negative error number on failure. 483 */ 484 int platform_get_irq_byname(struct platform_device *dev, const char *name) 485 { 486 int ret; 487 488 ret = __platform_get_irq_byname(dev, name); 489 if (ret < 0 && ret != -EPROBE_DEFER) 490 dev_err(&dev->dev, "IRQ %s not found\n", name); 491 492 return ret; 493 } 494 EXPORT_SYMBOL_GPL(platform_get_irq_byname); 495 496 /** 497 * platform_get_irq_byname_optional - get an optional IRQ for a device by name 498 * @dev: platform device 499 * @name: IRQ name 500 * 501 * Get an optional IRQ by name like platform_get_irq_byname(). Except that it 502 * does not print an error message if an IRQ can not be obtained. 503 * 504 * Return: non-zero IRQ number on success, negative error number on failure. 505 */ 506 int platform_get_irq_byname_optional(struct platform_device *dev, 507 const char *name) 508 { 509 return __platform_get_irq_byname(dev, name); 510 } 511 EXPORT_SYMBOL_GPL(platform_get_irq_byname_optional); 512 513 /** 514 * platform_add_devices - add a numbers of platform devices 515 * @devs: array of platform devices to add 516 * @num: number of platform devices in array 517 */ 518 int platform_add_devices(struct platform_device **devs, int num) 519 { 520 int i, ret = 0; 521 522 for (i = 0; i < num; i++) { 523 ret = platform_device_register(devs[i]); 524 if (ret) { 525 while (--i >= 0) 526 platform_device_unregister(devs[i]); 527 break; 528 } 529 } 530 531 return ret; 532 } 533 EXPORT_SYMBOL_GPL(platform_add_devices); 534 535 struct platform_object { 536 struct platform_device pdev; 537 char name[]; 538 }; 539 540 /* 541 * Set up default DMA mask for platform devices if the they weren't 542 * previously set by the architecture / DT. 543 */ 544 static void setup_pdev_dma_masks(struct platform_device *pdev) 545 { 546 pdev->dev.dma_parms = &pdev->dma_parms; 547 548 if (!pdev->dev.coherent_dma_mask) 549 pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); 550 if (!pdev->dev.dma_mask) { 551 pdev->platform_dma_mask = DMA_BIT_MASK(32); 552 pdev->dev.dma_mask = &pdev->platform_dma_mask; 553 } 554 }; 555 556 /** 557 * platform_device_put - destroy a platform device 558 * @pdev: platform device to free 559 * 560 * Free all memory associated with a platform device. This function must 561 * _only_ be externally called in error cases. All other usage is a bug. 562 */ 563 void platform_device_put(struct platform_device *pdev) 564 { 565 if (!IS_ERR_OR_NULL(pdev)) 566 put_device(&pdev->dev); 567 } 568 EXPORT_SYMBOL_GPL(platform_device_put); 569 570 static void platform_device_release(struct device *dev) 571 { 572 struct platform_object *pa = container_of(dev, struct platform_object, 573 pdev.dev); 574 575 of_node_put(pa->pdev.dev.of_node); 576 kfree(pa->pdev.dev.platform_data); 577 kfree(pa->pdev.mfd_cell); 578 kfree(pa->pdev.resource); 579 kfree(pa->pdev.driver_override); 580 kfree(pa); 581 } 582 583 /** 584 * platform_device_alloc - create a platform device 585 * @name: base name of the device we're adding 586 * @id: instance id 587 * 588 * Create a platform device object which can have other objects attached 589 * to it, and which will have attached objects freed when it is released. 590 */ 591 struct platform_device *platform_device_alloc(const char *name, int id) 592 { 593 struct platform_object *pa; 594 595 pa = kzalloc(sizeof(*pa) + strlen(name) + 1, GFP_KERNEL); 596 if (pa) { 597 strcpy(pa->name, name); 598 pa->pdev.name = pa->name; 599 pa->pdev.id = id; 600 device_initialize(&pa->pdev.dev); 601 pa->pdev.dev.release = platform_device_release; 602 setup_pdev_dma_masks(&pa->pdev); 603 } 604 605 return pa ? &pa->pdev : NULL; 606 } 607 EXPORT_SYMBOL_GPL(platform_device_alloc); 608 609 /** 610 * platform_device_add_resources - add resources to a platform device 611 * @pdev: platform device allocated by platform_device_alloc to add resources to 612 * @res: set of resources that needs to be allocated for the device 613 * @num: number of resources 614 * 615 * Add a copy of the resources to the platform device. The memory 616 * associated with the resources will be freed when the platform device is 617 * released. 618 */ 619 int platform_device_add_resources(struct platform_device *pdev, 620 const struct resource *res, unsigned int num) 621 { 622 struct resource *r = NULL; 623 624 if (res) { 625 r = kmemdup(res, sizeof(struct resource) * num, GFP_KERNEL); 626 if (!r) 627 return -ENOMEM; 628 } 629 630 kfree(pdev->resource); 631 pdev->resource = r; 632 pdev->num_resources = num; 633 return 0; 634 } 635 EXPORT_SYMBOL_GPL(platform_device_add_resources); 636 637 /** 638 * platform_device_add_data - add platform-specific data to a platform device 639 * @pdev: platform device allocated by platform_device_alloc to add resources to 640 * @data: platform specific data for this platform device 641 * @size: size of platform specific data 642 * 643 * Add a copy of platform specific data to the platform device's 644 * platform_data pointer. The memory associated with the platform data 645 * will be freed when the platform device is released. 646 */ 647 int platform_device_add_data(struct platform_device *pdev, const void *data, 648 size_t size) 649 { 650 void *d = NULL; 651 652 if (data) { 653 d = kmemdup(data, size, GFP_KERNEL); 654 if (!d) 655 return -ENOMEM; 656 } 657 658 kfree(pdev->dev.platform_data); 659 pdev->dev.platform_data = d; 660 return 0; 661 } 662 EXPORT_SYMBOL_GPL(platform_device_add_data); 663 664 /** 665 * platform_device_add_properties - add built-in properties to a platform device 666 * @pdev: platform device to add properties to 667 * @properties: null terminated array of properties to add 668 * 669 * The function will take deep copy of @properties and attach the copy to the 670 * platform device. The memory associated with properties will be freed when the 671 * platform device is released. 672 */ 673 int platform_device_add_properties(struct platform_device *pdev, 674 const struct property_entry *properties) 675 { 676 return device_add_properties(&pdev->dev, properties); 677 } 678 EXPORT_SYMBOL_GPL(platform_device_add_properties); 679 680 /** 681 * platform_device_add - add a platform device to device hierarchy 682 * @pdev: platform device we're adding 683 * 684 * This is part 2 of platform_device_register(), though may be called 685 * separately _iff_ pdev was allocated by platform_device_alloc(). 686 */ 687 int platform_device_add(struct platform_device *pdev) 688 { 689 u32 i; 690 int ret; 691 692 if (!pdev) 693 return -EINVAL; 694 695 if (!pdev->dev.parent) 696 pdev->dev.parent = &platform_bus; 697 698 pdev->dev.bus = &platform_bus_type; 699 700 switch (pdev->id) { 701 default: 702 dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id); 703 break; 704 case PLATFORM_DEVID_NONE: 705 dev_set_name(&pdev->dev, "%s", pdev->name); 706 break; 707 case PLATFORM_DEVID_AUTO: 708 /* 709 * Automatically allocated device ID. We mark it as such so 710 * that we remember it must be freed, and we append a suffix 711 * to avoid namespace collision with explicit IDs. 712 */ 713 ret = ida_alloc(&platform_devid_ida, GFP_KERNEL); 714 if (ret < 0) 715 goto err_out; 716 pdev->id = ret; 717 pdev->id_auto = true; 718 dev_set_name(&pdev->dev, "%s.%d.auto", pdev->name, pdev->id); 719 break; 720 } 721 722 for (i = 0; i < pdev->num_resources; i++) { 723 struct resource *p, *r = &pdev->resource[i]; 724 725 if (r->name == NULL) 726 r->name = dev_name(&pdev->dev); 727 728 p = r->parent; 729 if (!p) { 730 if (resource_type(r) == IORESOURCE_MEM) 731 p = &iomem_resource; 732 else if (resource_type(r) == IORESOURCE_IO) 733 p = &ioport_resource; 734 } 735 736 if (p) { 737 ret = insert_resource(p, r); 738 if (ret) { 739 dev_err(&pdev->dev, "failed to claim resource %d: %pR\n", i, r); 740 goto failed; 741 } 742 } 743 } 744 745 pr_debug("Registering platform device '%s'. Parent at %s\n", 746 dev_name(&pdev->dev), dev_name(pdev->dev.parent)); 747 748 ret = device_add(&pdev->dev); 749 if (ret == 0) 750 return ret; 751 752 failed: 753 if (pdev->id_auto) { 754 ida_free(&platform_devid_ida, pdev->id); 755 pdev->id = PLATFORM_DEVID_AUTO; 756 } 757 758 while (i--) { 759 struct resource *r = &pdev->resource[i]; 760 if (r->parent) 761 release_resource(r); 762 } 763 764 err_out: 765 return ret; 766 } 767 EXPORT_SYMBOL_GPL(platform_device_add); 768 769 /** 770 * platform_device_del - remove a platform-level device 771 * @pdev: platform device we're removing 772 * 773 * Note that this function will also release all memory- and port-based 774 * resources owned by the device (@dev->resource). This function must 775 * _only_ be externally called in error cases. All other usage is a bug. 776 */ 777 void platform_device_del(struct platform_device *pdev) 778 { 779 u32 i; 780 781 if (!IS_ERR_OR_NULL(pdev)) { 782 device_del(&pdev->dev); 783 784 if (pdev->id_auto) { 785 ida_free(&platform_devid_ida, pdev->id); 786 pdev->id = PLATFORM_DEVID_AUTO; 787 } 788 789 for (i = 0; i < pdev->num_resources; i++) { 790 struct resource *r = &pdev->resource[i]; 791 if (r->parent) 792 release_resource(r); 793 } 794 } 795 } 796 EXPORT_SYMBOL_GPL(platform_device_del); 797 798 /** 799 * platform_device_register - add a platform-level device 800 * @pdev: platform device we're adding 801 */ 802 int platform_device_register(struct platform_device *pdev) 803 { 804 device_initialize(&pdev->dev); 805 setup_pdev_dma_masks(pdev); 806 return platform_device_add(pdev); 807 } 808 EXPORT_SYMBOL_GPL(platform_device_register); 809 810 /** 811 * platform_device_unregister - unregister a platform-level device 812 * @pdev: platform device we're unregistering 813 * 814 * Unregistration is done in 2 steps. First we release all resources 815 * and remove it from the subsystem, then we drop reference count by 816 * calling platform_device_put(). 817 */ 818 void platform_device_unregister(struct platform_device *pdev) 819 { 820 platform_device_del(pdev); 821 platform_device_put(pdev); 822 } 823 EXPORT_SYMBOL_GPL(platform_device_unregister); 824 825 /** 826 * platform_device_register_full - add a platform-level device with 827 * resources and platform-specific data 828 * 829 * @pdevinfo: data used to create device 830 * 831 * Returns &struct platform_device pointer on success, or ERR_PTR() on error. 832 */ 833 struct platform_device *platform_device_register_full( 834 const struct platform_device_info *pdevinfo) 835 { 836 int ret; 837 struct platform_device *pdev; 838 839 pdev = platform_device_alloc(pdevinfo->name, pdevinfo->id); 840 if (!pdev) 841 return ERR_PTR(-ENOMEM); 842 843 pdev->dev.parent = pdevinfo->parent; 844 pdev->dev.fwnode = pdevinfo->fwnode; 845 pdev->dev.of_node = of_node_get(to_of_node(pdev->dev.fwnode)); 846 pdev->dev.of_node_reused = pdevinfo->of_node_reused; 847 848 if (pdevinfo->dma_mask) { 849 pdev->platform_dma_mask = pdevinfo->dma_mask; 850 pdev->dev.dma_mask = &pdev->platform_dma_mask; 851 pdev->dev.coherent_dma_mask = pdevinfo->dma_mask; 852 } 853 854 ret = platform_device_add_resources(pdev, 855 pdevinfo->res, pdevinfo->num_res); 856 if (ret) 857 goto err; 858 859 ret = platform_device_add_data(pdev, 860 pdevinfo->data, pdevinfo->size_data); 861 if (ret) 862 goto err; 863 864 if (pdevinfo->properties) { 865 ret = platform_device_add_properties(pdev, 866 pdevinfo->properties); 867 if (ret) 868 goto err; 869 } 870 871 ret = platform_device_add(pdev); 872 if (ret) { 873 err: 874 ACPI_COMPANION_SET(&pdev->dev, NULL); 875 platform_device_put(pdev); 876 return ERR_PTR(ret); 877 } 878 879 return pdev; 880 } 881 EXPORT_SYMBOL_GPL(platform_device_register_full); 882 883 /** 884 * __platform_driver_register - register a driver for platform-level devices 885 * @drv: platform driver structure 886 * @owner: owning module/driver 887 */ 888 int __platform_driver_register(struct platform_driver *drv, 889 struct module *owner) 890 { 891 drv->driver.owner = owner; 892 drv->driver.bus = &platform_bus_type; 893 894 return driver_register(&drv->driver); 895 } 896 EXPORT_SYMBOL_GPL(__platform_driver_register); 897 898 /** 899 * platform_driver_unregister - unregister a driver for platform-level devices 900 * @drv: platform driver structure 901 */ 902 void platform_driver_unregister(struct platform_driver *drv) 903 { 904 driver_unregister(&drv->driver); 905 } 906 EXPORT_SYMBOL_GPL(platform_driver_unregister); 907 908 static int platform_probe_fail(struct platform_device *pdev) 909 { 910 return -ENXIO; 911 } 912 913 /** 914 * __platform_driver_probe - register driver for non-hotpluggable device 915 * @drv: platform driver structure 916 * @probe: the driver probe routine, probably from an __init section 917 * @module: module which will be the owner of the driver 918 * 919 * Use this instead of platform_driver_register() when you know the device 920 * is not hotpluggable and has already been registered, and you want to 921 * remove its run-once probe() infrastructure from memory after the driver 922 * has bound to the device. 923 * 924 * One typical use for this would be with drivers for controllers integrated 925 * into system-on-chip processors, where the controller devices have been 926 * configured as part of board setup. 927 * 928 * Note that this is incompatible with deferred probing. 929 * 930 * Returns zero if the driver registered and bound to a device, else returns 931 * a negative error code and with the driver not registered. 932 */ 933 int __init_or_module __platform_driver_probe(struct platform_driver *drv, 934 int (*probe)(struct platform_device *), struct module *module) 935 { 936 int retval, code; 937 938 if (drv->driver.probe_type == PROBE_PREFER_ASYNCHRONOUS) { 939 pr_err("%s: drivers registered with %s can not be probed asynchronously\n", 940 drv->driver.name, __func__); 941 return -EINVAL; 942 } 943 944 /* 945 * We have to run our probes synchronously because we check if 946 * we find any devices to bind to and exit with error if there 947 * are any. 948 */ 949 drv->driver.probe_type = PROBE_FORCE_SYNCHRONOUS; 950 951 /* 952 * Prevent driver from requesting probe deferral to avoid further 953 * futile probe attempts. 954 */ 955 drv->prevent_deferred_probe = true; 956 957 /* make sure driver won't have bind/unbind attributes */ 958 drv->driver.suppress_bind_attrs = true; 959 960 /* temporary section violation during probe() */ 961 drv->probe = probe; 962 retval = code = __platform_driver_register(drv, module); 963 if (retval) 964 return retval; 965 966 /* 967 * Fixup that section violation, being paranoid about code scanning 968 * the list of drivers in order to probe new devices. Check to see 969 * if the probe was successful, and make sure any forced probes of 970 * new devices fail. 971 */ 972 spin_lock(&drv->driver.bus->p->klist_drivers.k_lock); 973 drv->probe = platform_probe_fail; 974 if (code == 0 && list_empty(&drv->driver.p->klist_devices.k_list)) 975 retval = -ENODEV; 976 spin_unlock(&drv->driver.bus->p->klist_drivers.k_lock); 977 978 if (code != retval) 979 platform_driver_unregister(drv); 980 return retval; 981 } 982 EXPORT_SYMBOL_GPL(__platform_driver_probe); 983 984 /** 985 * __platform_create_bundle - register driver and create corresponding device 986 * @driver: platform driver structure 987 * @probe: the driver probe routine, probably from an __init section 988 * @res: set of resources that needs to be allocated for the device 989 * @n_res: number of resources 990 * @data: platform specific data for this platform device 991 * @size: size of platform specific data 992 * @module: module which will be the owner of the driver 993 * 994 * Use this in legacy-style modules that probe hardware directly and 995 * register a single platform device and corresponding platform driver. 996 * 997 * Returns &struct platform_device pointer on success, or ERR_PTR() on error. 998 */ 999 struct platform_device * __init_or_module __platform_create_bundle( 1000 struct platform_driver *driver, 1001 int (*probe)(struct platform_device *), 1002 struct resource *res, unsigned int n_res, 1003 const void *data, size_t size, struct module *module) 1004 { 1005 struct platform_device *pdev; 1006 int error; 1007 1008 pdev = platform_device_alloc(driver->driver.name, -1); 1009 if (!pdev) { 1010 error = -ENOMEM; 1011 goto err_out; 1012 } 1013 1014 error = platform_device_add_resources(pdev, res, n_res); 1015 if (error) 1016 goto err_pdev_put; 1017 1018 error = platform_device_add_data(pdev, data, size); 1019 if (error) 1020 goto err_pdev_put; 1021 1022 error = platform_device_add(pdev); 1023 if (error) 1024 goto err_pdev_put; 1025 1026 error = __platform_driver_probe(driver, probe, module); 1027 if (error) 1028 goto err_pdev_del; 1029 1030 return pdev; 1031 1032 err_pdev_del: 1033 platform_device_del(pdev); 1034 err_pdev_put: 1035 platform_device_put(pdev); 1036 err_out: 1037 return ERR_PTR(error); 1038 } 1039 EXPORT_SYMBOL_GPL(__platform_create_bundle); 1040 1041 /** 1042 * __platform_register_drivers - register an array of platform drivers 1043 * @drivers: an array of drivers to register 1044 * @count: the number of drivers to register 1045 * @owner: module owning the drivers 1046 * 1047 * Registers platform drivers specified by an array. On failure to register a 1048 * driver, all previously registered drivers will be unregistered. Callers of 1049 * this API should use platform_unregister_drivers() to unregister drivers in 1050 * the reverse order. 1051 * 1052 * Returns: 0 on success or a negative error code on failure. 1053 */ 1054 int __platform_register_drivers(struct platform_driver * const *drivers, 1055 unsigned int count, struct module *owner) 1056 { 1057 unsigned int i; 1058 int err; 1059 1060 for (i = 0; i < count; i++) { 1061 pr_debug("registering platform driver %ps\n", drivers[i]); 1062 1063 err = __platform_driver_register(drivers[i], owner); 1064 if (err < 0) { 1065 pr_err("failed to register platform driver %ps: %d\n", 1066 drivers[i], err); 1067 goto error; 1068 } 1069 } 1070 1071 return 0; 1072 1073 error: 1074 while (i--) { 1075 pr_debug("unregistering platform driver %ps\n", drivers[i]); 1076 platform_driver_unregister(drivers[i]); 1077 } 1078 1079 return err; 1080 } 1081 EXPORT_SYMBOL_GPL(__platform_register_drivers); 1082 1083 /** 1084 * platform_unregister_drivers - unregister an array of platform drivers 1085 * @drivers: an array of drivers to unregister 1086 * @count: the number of drivers to unregister 1087 * 1088 * Unregisters platform drivers specified by an array. This is typically used 1089 * to complement an earlier call to platform_register_drivers(). Drivers are 1090 * unregistered in the reverse order in which they were registered. 1091 */ 1092 void platform_unregister_drivers(struct platform_driver * const *drivers, 1093 unsigned int count) 1094 { 1095 while (count--) { 1096 pr_debug("unregistering platform driver %ps\n", drivers[count]); 1097 platform_driver_unregister(drivers[count]); 1098 } 1099 } 1100 EXPORT_SYMBOL_GPL(platform_unregister_drivers); 1101 1102 static const struct platform_device_id *platform_match_id( 1103 const struct platform_device_id *id, 1104 struct platform_device *pdev) 1105 { 1106 while (id->name[0]) { 1107 if (strcmp(pdev->name, id->name) == 0) { 1108 pdev->id_entry = id; 1109 return id; 1110 } 1111 id++; 1112 } 1113 return NULL; 1114 } 1115 1116 #ifdef CONFIG_PM_SLEEP 1117 1118 static int platform_legacy_suspend(struct device *dev, pm_message_t mesg) 1119 { 1120 struct platform_driver *pdrv = to_platform_driver(dev->driver); 1121 struct platform_device *pdev = to_platform_device(dev); 1122 int ret = 0; 1123 1124 if (dev->driver && pdrv->suspend) 1125 ret = pdrv->suspend(pdev, mesg); 1126 1127 return ret; 1128 } 1129 1130 static int platform_legacy_resume(struct device *dev) 1131 { 1132 struct platform_driver *pdrv = to_platform_driver(dev->driver); 1133 struct platform_device *pdev = to_platform_device(dev); 1134 int ret = 0; 1135 1136 if (dev->driver && pdrv->resume) 1137 ret = pdrv->resume(pdev); 1138 1139 return ret; 1140 } 1141 1142 #endif /* CONFIG_PM_SLEEP */ 1143 1144 #ifdef CONFIG_SUSPEND 1145 1146 int platform_pm_suspend(struct device *dev) 1147 { 1148 struct device_driver *drv = dev->driver; 1149 int ret = 0; 1150 1151 if (!drv) 1152 return 0; 1153 1154 if (drv->pm) { 1155 if (drv->pm->suspend) 1156 ret = drv->pm->suspend(dev); 1157 } else { 1158 ret = platform_legacy_suspend(dev, PMSG_SUSPEND); 1159 } 1160 1161 return ret; 1162 } 1163 1164 int platform_pm_resume(struct device *dev) 1165 { 1166 struct device_driver *drv = dev->driver; 1167 int ret = 0; 1168 1169 if (!drv) 1170 return 0; 1171 1172 if (drv->pm) { 1173 if (drv->pm->resume) 1174 ret = drv->pm->resume(dev); 1175 } else { 1176 ret = platform_legacy_resume(dev); 1177 } 1178 1179 return ret; 1180 } 1181 1182 #endif /* CONFIG_SUSPEND */ 1183 1184 #ifdef CONFIG_HIBERNATE_CALLBACKS 1185 1186 int platform_pm_freeze(struct device *dev) 1187 { 1188 struct device_driver *drv = dev->driver; 1189 int ret = 0; 1190 1191 if (!drv) 1192 return 0; 1193 1194 if (drv->pm) { 1195 if (drv->pm->freeze) 1196 ret = drv->pm->freeze(dev); 1197 } else { 1198 ret = platform_legacy_suspend(dev, PMSG_FREEZE); 1199 } 1200 1201 return ret; 1202 } 1203 1204 int platform_pm_thaw(struct device *dev) 1205 { 1206 struct device_driver *drv = dev->driver; 1207 int ret = 0; 1208 1209 if (!drv) 1210 return 0; 1211 1212 if (drv->pm) { 1213 if (drv->pm->thaw) 1214 ret = drv->pm->thaw(dev); 1215 } else { 1216 ret = platform_legacy_resume(dev); 1217 } 1218 1219 return ret; 1220 } 1221 1222 int platform_pm_poweroff(struct device *dev) 1223 { 1224 struct device_driver *drv = dev->driver; 1225 int ret = 0; 1226 1227 if (!drv) 1228 return 0; 1229 1230 if (drv->pm) { 1231 if (drv->pm->poweroff) 1232 ret = drv->pm->poweroff(dev); 1233 } else { 1234 ret = platform_legacy_suspend(dev, PMSG_HIBERNATE); 1235 } 1236 1237 return ret; 1238 } 1239 1240 int platform_pm_restore(struct device *dev) 1241 { 1242 struct device_driver *drv = dev->driver; 1243 int ret = 0; 1244 1245 if (!drv) 1246 return 0; 1247 1248 if (drv->pm) { 1249 if (drv->pm->restore) 1250 ret = drv->pm->restore(dev); 1251 } else { 1252 ret = platform_legacy_resume(dev); 1253 } 1254 1255 return ret; 1256 } 1257 1258 #endif /* CONFIG_HIBERNATE_CALLBACKS */ 1259 1260 /* modalias support enables more hands-off userspace setup: 1261 * (a) environment variable lets new-style hotplug events work once system is 1262 * fully running: "modprobe $MODALIAS" 1263 * (b) sysfs attribute lets new-style coldplug recover from hotplug events 1264 * mishandled before system is fully running: "modprobe $(cat modalias)" 1265 */ 1266 static ssize_t modalias_show(struct device *dev, 1267 struct device_attribute *attr, char *buf) 1268 { 1269 struct platform_device *pdev = to_platform_device(dev); 1270 int len; 1271 1272 len = of_device_modalias(dev, buf, PAGE_SIZE); 1273 if (len != -ENODEV) 1274 return len; 1275 1276 len = acpi_device_modalias(dev, buf, PAGE_SIZE - 1); 1277 if (len != -ENODEV) 1278 return len; 1279 1280 return sysfs_emit(buf, "platform:%s\n", pdev->name); 1281 } 1282 static DEVICE_ATTR_RO(modalias); 1283 1284 static ssize_t numa_node_show(struct device *dev, 1285 struct device_attribute *attr, char *buf) 1286 { 1287 return sysfs_emit(buf, "%d\n", dev_to_node(dev)); 1288 } 1289 static DEVICE_ATTR_RO(numa_node); 1290 1291 static ssize_t driver_override_show(struct device *dev, 1292 struct device_attribute *attr, char *buf) 1293 { 1294 struct platform_device *pdev = to_platform_device(dev); 1295 ssize_t len; 1296 1297 device_lock(dev); 1298 len = sysfs_emit(buf, "%s\n", pdev->driver_override); 1299 device_unlock(dev); 1300 1301 return len; 1302 } 1303 1304 static ssize_t driver_override_store(struct device *dev, 1305 struct device_attribute *attr, 1306 const char *buf, size_t count) 1307 { 1308 struct platform_device *pdev = to_platform_device(dev); 1309 char *driver_override, *old, *cp; 1310 1311 /* We need to keep extra room for a newline */ 1312 if (count >= (PAGE_SIZE - 1)) 1313 return -EINVAL; 1314 1315 driver_override = kstrndup(buf, count, GFP_KERNEL); 1316 if (!driver_override) 1317 return -ENOMEM; 1318 1319 cp = strchr(driver_override, '\n'); 1320 if (cp) 1321 *cp = '\0'; 1322 1323 device_lock(dev); 1324 old = pdev->driver_override; 1325 if (strlen(driver_override)) { 1326 pdev->driver_override = driver_override; 1327 } else { 1328 kfree(driver_override); 1329 pdev->driver_override = NULL; 1330 } 1331 device_unlock(dev); 1332 1333 kfree(old); 1334 1335 return count; 1336 } 1337 static DEVICE_ATTR_RW(driver_override); 1338 1339 static struct attribute *platform_dev_attrs[] = { 1340 &dev_attr_modalias.attr, 1341 &dev_attr_numa_node.attr, 1342 &dev_attr_driver_override.attr, 1343 NULL, 1344 }; 1345 1346 static umode_t platform_dev_attrs_visible(struct kobject *kobj, struct attribute *a, 1347 int n) 1348 { 1349 struct device *dev = container_of(kobj, typeof(*dev), kobj); 1350 1351 if (a == &dev_attr_numa_node.attr && 1352 dev_to_node(dev) == NUMA_NO_NODE) 1353 return 0; 1354 1355 return a->mode; 1356 } 1357 1358 static struct attribute_group platform_dev_group = { 1359 .attrs = platform_dev_attrs, 1360 .is_visible = platform_dev_attrs_visible, 1361 }; 1362 __ATTRIBUTE_GROUPS(platform_dev); 1363 1364 1365 /** 1366 * platform_match - bind platform device to platform driver. 1367 * @dev: device. 1368 * @drv: driver. 1369 * 1370 * Platform device IDs are assumed to be encoded like this: 1371 * "<name><instance>", where <name> is a short description of the type of 1372 * device, like "pci" or "floppy", and <instance> is the enumerated 1373 * instance of the device, like '0' or '42'. Driver IDs are simply 1374 * "<name>". So, extract the <name> from the platform_device structure, 1375 * and compare it against the name of the driver. Return whether they match 1376 * or not. 1377 */ 1378 static int platform_match(struct device *dev, struct device_driver *drv) 1379 { 1380 struct platform_device *pdev = to_platform_device(dev); 1381 struct platform_driver *pdrv = to_platform_driver(drv); 1382 1383 /* When driver_override is set, only bind to the matching driver */ 1384 if (pdev->driver_override) 1385 return !strcmp(pdev->driver_override, drv->name); 1386 1387 /* Attempt an OF style match first */ 1388 if (of_driver_match_device(dev, drv)) 1389 return 1; 1390 1391 /* Then try ACPI style match */ 1392 if (acpi_driver_match_device(dev, drv)) 1393 return 1; 1394 1395 /* Then try to match against the id table */ 1396 if (pdrv->id_table) 1397 return platform_match_id(pdrv->id_table, pdev) != NULL; 1398 1399 /* fall-back to driver name match */ 1400 return (strcmp(pdev->name, drv->name) == 0); 1401 } 1402 1403 static int platform_uevent(struct device *dev, struct kobj_uevent_env *env) 1404 { 1405 struct platform_device *pdev = to_platform_device(dev); 1406 int rc; 1407 1408 /* Some devices have extra OF data and an OF-style MODALIAS */ 1409 rc = of_device_uevent_modalias(dev, env); 1410 if (rc != -ENODEV) 1411 return rc; 1412 1413 rc = acpi_device_uevent_modalias(dev, env); 1414 if (rc != -ENODEV) 1415 return rc; 1416 1417 add_uevent_var(env, "MODALIAS=%s%s", PLATFORM_MODULE_PREFIX, 1418 pdev->name); 1419 return 0; 1420 } 1421 1422 static int platform_probe(struct device *_dev) 1423 { 1424 struct platform_driver *drv = to_platform_driver(_dev->driver); 1425 struct platform_device *dev = to_platform_device(_dev); 1426 int ret; 1427 1428 /* 1429 * A driver registered using platform_driver_probe() cannot be bound 1430 * again later because the probe function usually lives in __init code 1431 * and so is gone. For these drivers .probe is set to 1432 * platform_probe_fail in __platform_driver_probe(). Don't even prepare 1433 * clocks and PM domains for these to match the traditional behaviour. 1434 */ 1435 if (unlikely(drv->probe == platform_probe_fail)) 1436 return -ENXIO; 1437 1438 ret = of_clk_set_defaults(_dev->of_node, false); 1439 if (ret < 0) 1440 return ret; 1441 1442 ret = dev_pm_domain_attach(_dev, true); 1443 if (ret) 1444 goto out; 1445 1446 if (drv->probe) { 1447 ret = drv->probe(dev); 1448 if (ret) 1449 dev_pm_domain_detach(_dev, true); 1450 } 1451 1452 out: 1453 if (drv->prevent_deferred_probe && ret == -EPROBE_DEFER) { 1454 dev_warn(_dev, "probe deferral not supported\n"); 1455 ret = -ENXIO; 1456 } 1457 1458 return ret; 1459 } 1460 1461 static int platform_remove(struct device *_dev) 1462 { 1463 struct platform_driver *drv = to_platform_driver(_dev->driver); 1464 struct platform_device *dev = to_platform_device(_dev); 1465 1466 if (drv->remove) { 1467 int ret = drv->remove(dev); 1468 1469 if (ret) 1470 dev_warn(_dev, "remove callback returned a non-zero value. This will be ignored.\n"); 1471 } 1472 dev_pm_domain_detach(_dev, true); 1473 1474 return 0; 1475 } 1476 1477 static void platform_shutdown(struct device *_dev) 1478 { 1479 struct platform_device *dev = to_platform_device(_dev); 1480 struct platform_driver *drv; 1481 1482 if (!_dev->driver) 1483 return; 1484 1485 drv = to_platform_driver(_dev->driver); 1486 if (drv->shutdown) 1487 drv->shutdown(dev); 1488 } 1489 1490 1491 int platform_dma_configure(struct device *dev) 1492 { 1493 enum dev_dma_attr attr; 1494 int ret = 0; 1495 1496 if (dev->of_node) { 1497 ret = of_dma_configure(dev, dev->of_node, true); 1498 } else if (has_acpi_companion(dev)) { 1499 attr = acpi_get_dma_attr(to_acpi_device_node(dev->fwnode)); 1500 ret = acpi_dma_configure(dev, attr); 1501 } 1502 1503 return ret; 1504 } 1505 1506 static const struct dev_pm_ops platform_dev_pm_ops = { 1507 .runtime_suspend = pm_generic_runtime_suspend, 1508 .runtime_resume = pm_generic_runtime_resume, 1509 USE_PLATFORM_PM_SLEEP_OPS 1510 }; 1511 1512 struct bus_type platform_bus_type = { 1513 .name = "platform", 1514 .dev_groups = platform_dev_groups, 1515 .match = platform_match, 1516 .uevent = platform_uevent, 1517 .probe = platform_probe, 1518 .remove = platform_remove, 1519 .shutdown = platform_shutdown, 1520 .dma_configure = platform_dma_configure, 1521 .pm = &platform_dev_pm_ops, 1522 }; 1523 EXPORT_SYMBOL_GPL(platform_bus_type); 1524 1525 static inline int __platform_match(struct device *dev, const void *drv) 1526 { 1527 return platform_match(dev, (struct device_driver *)drv); 1528 } 1529 1530 /** 1531 * platform_find_device_by_driver - Find a platform device with a given 1532 * driver. 1533 * @start: The device to start the search from. 1534 * @drv: The device driver to look for. 1535 */ 1536 struct device *platform_find_device_by_driver(struct device *start, 1537 const struct device_driver *drv) 1538 { 1539 return bus_find_device(&platform_bus_type, start, drv, 1540 __platform_match); 1541 } 1542 EXPORT_SYMBOL_GPL(platform_find_device_by_driver); 1543 1544 void __weak __init early_platform_cleanup(void) { } 1545 1546 int __init platform_bus_init(void) 1547 { 1548 int error; 1549 1550 early_platform_cleanup(); 1551 1552 error = device_register(&platform_bus); 1553 if (error) { 1554 put_device(&platform_bus); 1555 return error; 1556 } 1557 error = bus_register(&platform_bus_type); 1558 if (error) 1559 device_unregister(&platform_bus); 1560 of_platform_register_reconfig_notifier(); 1561 return error; 1562 } 1563