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