1 /* 2 * platform.c - platform 'pseudo' bus for legacy devices 3 * 4 * Copyright (c) 2002-3 Patrick Mochel 5 * Copyright (c) 2002-3 Open Source Development Labs 6 * 7 * This file is released under the GPLv2 8 * 9 * Please see Documentation/driver-model/platform.txt for more 10 * information. 11 */ 12 13 #include <linux/string.h> 14 #include <linux/platform_device.h> 15 #include <linux/of_device.h> 16 #include <linux/module.h> 17 #include <linux/init.h> 18 #include <linux/dma-mapping.h> 19 #include <linux/bootmem.h> 20 #include <linux/err.h> 21 #include <linux/slab.h> 22 #include <linux/pm_runtime.h> 23 24 #include "base.h" 25 26 #define to_platform_driver(drv) (container_of((drv), struct platform_driver, \ 27 driver)) 28 29 struct device platform_bus = { 30 .init_name = "platform", 31 }; 32 EXPORT_SYMBOL_GPL(platform_bus); 33 34 /** 35 * platform_get_resource - get a resource for a device 36 * @dev: platform device 37 * @type: resource type 38 * @num: resource index 39 */ 40 struct resource *platform_get_resource(struct platform_device *dev, 41 unsigned int type, unsigned int num) 42 { 43 int i; 44 45 for (i = 0; i < dev->num_resources; i++) { 46 struct resource *r = &dev->resource[i]; 47 48 if (type == resource_type(r) && num-- == 0) 49 return r; 50 } 51 return NULL; 52 } 53 EXPORT_SYMBOL_GPL(platform_get_resource); 54 55 /** 56 * platform_get_irq - get an IRQ for a device 57 * @dev: platform device 58 * @num: IRQ number index 59 */ 60 int platform_get_irq(struct platform_device *dev, unsigned int num) 61 { 62 struct resource *r = platform_get_resource(dev, IORESOURCE_IRQ, num); 63 64 return r ? r->start : -ENXIO; 65 } 66 EXPORT_SYMBOL_GPL(platform_get_irq); 67 68 /** 69 * platform_get_resource_byname - get a resource for a device by name 70 * @dev: platform device 71 * @type: resource type 72 * @name: resource name 73 */ 74 struct resource *platform_get_resource_byname(struct platform_device *dev, 75 unsigned int type, 76 const char *name) 77 { 78 int i; 79 80 for (i = 0; i < dev->num_resources; i++) { 81 struct resource *r = &dev->resource[i]; 82 83 if (type == resource_type(r) && !strcmp(r->name, name)) 84 return r; 85 } 86 return NULL; 87 } 88 EXPORT_SYMBOL_GPL(platform_get_resource_byname); 89 90 /** 91 * platform_get_irq - get an IRQ for a device 92 * @dev: platform device 93 * @name: IRQ name 94 */ 95 int platform_get_irq_byname(struct platform_device *dev, const char *name) 96 { 97 struct resource *r = platform_get_resource_byname(dev, IORESOURCE_IRQ, 98 name); 99 100 return r ? r->start : -ENXIO; 101 } 102 EXPORT_SYMBOL_GPL(platform_get_irq_byname); 103 104 /** 105 * platform_add_devices - add a numbers of platform devices 106 * @devs: array of platform devices to add 107 * @num: number of platform devices in array 108 */ 109 int platform_add_devices(struct platform_device **devs, int num) 110 { 111 int i, ret = 0; 112 113 for (i = 0; i < num; i++) { 114 ret = platform_device_register(devs[i]); 115 if (ret) { 116 while (--i >= 0) 117 platform_device_unregister(devs[i]); 118 break; 119 } 120 } 121 122 return ret; 123 } 124 EXPORT_SYMBOL_GPL(platform_add_devices); 125 126 struct platform_object { 127 struct platform_device pdev; 128 char name[1]; 129 }; 130 131 /** 132 * platform_device_put - destroy a platform device 133 * @pdev: platform device to free 134 * 135 * Free all memory associated with a platform device. This function must 136 * _only_ be externally called in error cases. All other usage is a bug. 137 */ 138 void platform_device_put(struct platform_device *pdev) 139 { 140 if (pdev) 141 put_device(&pdev->dev); 142 } 143 EXPORT_SYMBOL_GPL(platform_device_put); 144 145 static void platform_device_release(struct device *dev) 146 { 147 struct platform_object *pa = container_of(dev, struct platform_object, 148 pdev.dev); 149 150 of_device_node_put(&pa->pdev.dev); 151 kfree(pa->pdev.dev.platform_data); 152 kfree(pa->pdev.mfd_cell); 153 kfree(pa->pdev.resource); 154 kfree(pa); 155 } 156 157 /** 158 * platform_device_alloc - create a platform device 159 * @name: base name of the device we're adding 160 * @id: instance id 161 * 162 * Create a platform device object which can have other objects attached 163 * to it, and which will have attached objects freed when it is released. 164 */ 165 struct platform_device *platform_device_alloc(const char *name, int id) 166 { 167 struct platform_object *pa; 168 169 pa = kzalloc(sizeof(struct platform_object) + strlen(name), GFP_KERNEL); 170 if (pa) { 171 strcpy(pa->name, name); 172 pa->pdev.name = pa->name; 173 pa->pdev.id = id; 174 device_initialize(&pa->pdev.dev); 175 pa->pdev.dev.release = platform_device_release; 176 } 177 178 return pa ? &pa->pdev : NULL; 179 } 180 EXPORT_SYMBOL_GPL(platform_device_alloc); 181 182 /** 183 * platform_device_add_resources - add resources to a platform device 184 * @pdev: platform device allocated by platform_device_alloc to add resources to 185 * @res: set of resources that needs to be allocated for the device 186 * @num: number of resources 187 * 188 * Add a copy of the resources to the platform device. The memory 189 * associated with the resources will be freed when the platform device is 190 * released. 191 */ 192 int platform_device_add_resources(struct platform_device *pdev, 193 const struct resource *res, unsigned int num) 194 { 195 struct resource *r = NULL; 196 197 if (res) { 198 r = kmemdup(res, sizeof(struct resource) * num, GFP_KERNEL); 199 if (!r) 200 return -ENOMEM; 201 } 202 203 kfree(pdev->resource); 204 pdev->resource = r; 205 pdev->num_resources = num; 206 return 0; 207 } 208 EXPORT_SYMBOL_GPL(platform_device_add_resources); 209 210 /** 211 * platform_device_add_data - add platform-specific data to a platform device 212 * @pdev: platform device allocated by platform_device_alloc to add resources to 213 * @data: platform specific data for this platform device 214 * @size: size of platform specific data 215 * 216 * Add a copy of platform specific data to the platform device's 217 * platform_data pointer. The memory associated with the platform data 218 * will be freed when the platform device is released. 219 */ 220 int platform_device_add_data(struct platform_device *pdev, const void *data, 221 size_t size) 222 { 223 void *d = NULL; 224 225 if (data) { 226 d = kmemdup(data, size, GFP_KERNEL); 227 if (!d) 228 return -ENOMEM; 229 } 230 231 kfree(pdev->dev.platform_data); 232 pdev->dev.platform_data = d; 233 return 0; 234 } 235 EXPORT_SYMBOL_GPL(platform_device_add_data); 236 237 /** 238 * platform_device_add - add a platform device to device hierarchy 239 * @pdev: platform device we're adding 240 * 241 * This is part 2 of platform_device_register(), though may be called 242 * separately _iff_ pdev was allocated by platform_device_alloc(). 243 */ 244 int platform_device_add(struct platform_device *pdev) 245 { 246 int i, ret = 0; 247 248 if (!pdev) 249 return -EINVAL; 250 251 if (!pdev->dev.parent) 252 pdev->dev.parent = &platform_bus; 253 254 pdev->dev.bus = &platform_bus_type; 255 256 if (pdev->id != -1) 257 dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id); 258 else 259 dev_set_name(&pdev->dev, "%s", pdev->name); 260 261 for (i = 0; i < pdev->num_resources; i++) { 262 struct resource *p, *r = &pdev->resource[i]; 263 264 if (r->name == NULL) 265 r->name = dev_name(&pdev->dev); 266 267 p = r->parent; 268 if (!p) { 269 if (resource_type(r) == IORESOURCE_MEM) 270 p = &iomem_resource; 271 else if (resource_type(r) == IORESOURCE_IO) 272 p = &ioport_resource; 273 } 274 275 if (p && insert_resource(p, r)) { 276 printk(KERN_ERR 277 "%s: failed to claim resource %d\n", 278 dev_name(&pdev->dev), i); 279 ret = -EBUSY; 280 goto failed; 281 } 282 } 283 284 pr_debug("Registering platform device '%s'. Parent at %s\n", 285 dev_name(&pdev->dev), dev_name(pdev->dev.parent)); 286 287 ret = device_add(&pdev->dev); 288 if (ret == 0) 289 return ret; 290 291 failed: 292 while (--i >= 0) { 293 struct resource *r = &pdev->resource[i]; 294 unsigned long type = resource_type(r); 295 296 if (type == IORESOURCE_MEM || type == IORESOURCE_IO) 297 release_resource(r); 298 } 299 300 return ret; 301 } 302 EXPORT_SYMBOL_GPL(platform_device_add); 303 304 /** 305 * platform_device_del - remove a platform-level device 306 * @pdev: platform device we're removing 307 * 308 * Note that this function will also release all memory- and port-based 309 * resources owned by the device (@dev->resource). This function must 310 * _only_ be externally called in error cases. All other usage is a bug. 311 */ 312 void platform_device_del(struct platform_device *pdev) 313 { 314 int i; 315 316 if (pdev) { 317 device_del(&pdev->dev); 318 319 for (i = 0; i < pdev->num_resources; i++) { 320 struct resource *r = &pdev->resource[i]; 321 unsigned long type = resource_type(r); 322 323 if (type == IORESOURCE_MEM || type == IORESOURCE_IO) 324 release_resource(r); 325 } 326 } 327 } 328 EXPORT_SYMBOL_GPL(platform_device_del); 329 330 /** 331 * platform_device_register - add a platform-level device 332 * @pdev: platform device we're adding 333 */ 334 int platform_device_register(struct platform_device *pdev) 335 { 336 device_initialize(&pdev->dev); 337 return platform_device_add(pdev); 338 } 339 EXPORT_SYMBOL_GPL(platform_device_register); 340 341 /** 342 * platform_device_unregister - unregister a platform-level device 343 * @pdev: platform device we're unregistering 344 * 345 * Unregistration is done in 2 steps. First we release all resources 346 * and remove it from the subsystem, then we drop reference count by 347 * calling platform_device_put(). 348 */ 349 void platform_device_unregister(struct platform_device *pdev) 350 { 351 platform_device_del(pdev); 352 platform_device_put(pdev); 353 } 354 EXPORT_SYMBOL_GPL(platform_device_unregister); 355 356 /** 357 * platform_device_register_resndata - add a platform-level device with 358 * resources and platform-specific data 359 * 360 * @parent: parent device for the device we're adding 361 * @name: base name of the device we're adding 362 * @id: instance id 363 * @res: set of resources that needs to be allocated for the device 364 * @num: number of resources 365 * @data: platform specific data for this platform device 366 * @size: size of platform specific data 367 * 368 * Returns &struct platform_device pointer on success, or ERR_PTR() on error. 369 */ 370 struct platform_device *platform_device_register_resndata( 371 struct device *parent, 372 const char *name, int id, 373 const struct resource *res, unsigned int num, 374 const void *data, size_t size) 375 { 376 int ret = -ENOMEM; 377 struct platform_device *pdev; 378 379 pdev = platform_device_alloc(name, id); 380 if (!pdev) 381 goto err; 382 383 pdev->dev.parent = parent; 384 385 ret = platform_device_add_resources(pdev, res, num); 386 if (ret) 387 goto err; 388 389 ret = platform_device_add_data(pdev, data, size); 390 if (ret) 391 goto err; 392 393 ret = platform_device_add(pdev); 394 if (ret) { 395 err: 396 platform_device_put(pdev); 397 return ERR_PTR(ret); 398 } 399 400 return pdev; 401 } 402 EXPORT_SYMBOL_GPL(platform_device_register_resndata); 403 404 static int platform_drv_probe(struct device *_dev) 405 { 406 struct platform_driver *drv = to_platform_driver(_dev->driver); 407 struct platform_device *dev = to_platform_device(_dev); 408 409 return drv->probe(dev); 410 } 411 412 static int platform_drv_probe_fail(struct device *_dev) 413 { 414 return -ENXIO; 415 } 416 417 static int platform_drv_remove(struct device *_dev) 418 { 419 struct platform_driver *drv = to_platform_driver(_dev->driver); 420 struct platform_device *dev = to_platform_device(_dev); 421 422 return drv->remove(dev); 423 } 424 425 static void platform_drv_shutdown(struct device *_dev) 426 { 427 struct platform_driver *drv = to_platform_driver(_dev->driver); 428 struct platform_device *dev = to_platform_device(_dev); 429 430 drv->shutdown(dev); 431 } 432 433 /** 434 * platform_driver_register - register a driver for platform-level devices 435 * @drv: platform driver structure 436 */ 437 int platform_driver_register(struct platform_driver *drv) 438 { 439 drv->driver.bus = &platform_bus_type; 440 if (drv->probe) 441 drv->driver.probe = platform_drv_probe; 442 if (drv->remove) 443 drv->driver.remove = platform_drv_remove; 444 if (drv->shutdown) 445 drv->driver.shutdown = platform_drv_shutdown; 446 447 return driver_register(&drv->driver); 448 } 449 EXPORT_SYMBOL_GPL(platform_driver_register); 450 451 /** 452 * platform_driver_unregister - unregister a driver for platform-level devices 453 * @drv: platform driver structure 454 */ 455 void platform_driver_unregister(struct platform_driver *drv) 456 { 457 driver_unregister(&drv->driver); 458 } 459 EXPORT_SYMBOL_GPL(platform_driver_unregister); 460 461 /** 462 * platform_driver_probe - register driver for non-hotpluggable device 463 * @drv: platform driver structure 464 * @probe: the driver probe routine, probably from an __init section 465 * 466 * Use this instead of platform_driver_register() when you know the device 467 * is not hotpluggable and has already been registered, and you want to 468 * remove its run-once probe() infrastructure from memory after the driver 469 * has bound to the device. 470 * 471 * One typical use for this would be with drivers for controllers integrated 472 * into system-on-chip processors, where the controller devices have been 473 * configured as part of board setup. 474 * 475 * Returns zero if the driver registered and bound to a device, else returns 476 * a negative error code and with the driver not registered. 477 */ 478 int __init_or_module platform_driver_probe(struct platform_driver *drv, 479 int (*probe)(struct platform_device *)) 480 { 481 int retval, code; 482 483 /* make sure driver won't have bind/unbind attributes */ 484 drv->driver.suppress_bind_attrs = true; 485 486 /* temporary section violation during probe() */ 487 drv->probe = probe; 488 retval = code = platform_driver_register(drv); 489 490 /* 491 * Fixup that section violation, being paranoid about code scanning 492 * the list of drivers in order to probe new devices. Check to see 493 * if the probe was successful, and make sure any forced probes of 494 * new devices fail. 495 */ 496 spin_lock(&drv->driver.bus->p->klist_drivers.k_lock); 497 drv->probe = NULL; 498 if (code == 0 && list_empty(&drv->driver.p->klist_devices.k_list)) 499 retval = -ENODEV; 500 drv->driver.probe = platform_drv_probe_fail; 501 spin_unlock(&drv->driver.bus->p->klist_drivers.k_lock); 502 503 if (code != retval) 504 platform_driver_unregister(drv); 505 return retval; 506 } 507 EXPORT_SYMBOL_GPL(platform_driver_probe); 508 509 /** 510 * platform_create_bundle - register driver and create corresponding device 511 * @driver: platform driver structure 512 * @probe: the driver probe routine, probably from an __init section 513 * @res: set of resources that needs to be allocated for the device 514 * @n_res: number of resources 515 * @data: platform specific data for this platform device 516 * @size: size of platform specific data 517 * 518 * Use this in legacy-style modules that probe hardware directly and 519 * register a single platform device and corresponding platform driver. 520 * 521 * Returns &struct platform_device pointer on success, or ERR_PTR() on error. 522 */ 523 struct platform_device * __init_or_module platform_create_bundle( 524 struct platform_driver *driver, 525 int (*probe)(struct platform_device *), 526 struct resource *res, unsigned int n_res, 527 const void *data, size_t size) 528 { 529 struct platform_device *pdev; 530 int error; 531 532 pdev = platform_device_alloc(driver->driver.name, -1); 533 if (!pdev) { 534 error = -ENOMEM; 535 goto err_out; 536 } 537 538 error = platform_device_add_resources(pdev, res, n_res); 539 if (error) 540 goto err_pdev_put; 541 542 error = platform_device_add_data(pdev, data, size); 543 if (error) 544 goto err_pdev_put; 545 546 error = platform_device_add(pdev); 547 if (error) 548 goto err_pdev_put; 549 550 error = platform_driver_probe(driver, probe); 551 if (error) 552 goto err_pdev_del; 553 554 return pdev; 555 556 err_pdev_del: 557 platform_device_del(pdev); 558 err_pdev_put: 559 platform_device_put(pdev); 560 err_out: 561 return ERR_PTR(error); 562 } 563 EXPORT_SYMBOL_GPL(platform_create_bundle); 564 565 /* modalias support enables more hands-off userspace setup: 566 * (a) environment variable lets new-style hotplug events work once system is 567 * fully running: "modprobe $MODALIAS" 568 * (b) sysfs attribute lets new-style coldplug recover from hotplug events 569 * mishandled before system is fully running: "modprobe $(cat modalias)" 570 */ 571 static ssize_t modalias_show(struct device *dev, struct device_attribute *a, 572 char *buf) 573 { 574 struct platform_device *pdev = to_platform_device(dev); 575 int len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name); 576 577 return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len; 578 } 579 580 static struct device_attribute platform_dev_attrs[] = { 581 __ATTR_RO(modalias), 582 __ATTR_NULL, 583 }; 584 585 static int platform_uevent(struct device *dev, struct kobj_uevent_env *env) 586 { 587 struct platform_device *pdev = to_platform_device(dev); 588 int rc; 589 590 /* Some devices have extra OF data and an OF-style MODALIAS */ 591 rc = of_device_uevent(dev,env); 592 if (rc != -ENODEV) 593 return rc; 594 595 add_uevent_var(env, "MODALIAS=%s%s", PLATFORM_MODULE_PREFIX, 596 (pdev->id_entry) ? pdev->id_entry->name : pdev->name); 597 return 0; 598 } 599 600 static const struct platform_device_id *platform_match_id( 601 const struct platform_device_id *id, 602 struct platform_device *pdev) 603 { 604 while (id->name[0]) { 605 if (strcmp(pdev->name, id->name) == 0) { 606 pdev->id_entry = id; 607 return id; 608 } 609 id++; 610 } 611 return NULL; 612 } 613 614 /** 615 * platform_match - bind platform device to platform driver. 616 * @dev: device. 617 * @drv: driver. 618 * 619 * Platform device IDs are assumed to be encoded like this: 620 * "<name><instance>", where <name> is a short description of the type of 621 * device, like "pci" or "floppy", and <instance> is the enumerated 622 * instance of the device, like '0' or '42'. Driver IDs are simply 623 * "<name>". So, extract the <name> from the platform_device structure, 624 * and compare it against the name of the driver. Return whether they match 625 * or not. 626 */ 627 static int platform_match(struct device *dev, struct device_driver *drv) 628 { 629 struct platform_device *pdev = to_platform_device(dev); 630 struct platform_driver *pdrv = to_platform_driver(drv); 631 632 /* Attempt an OF style match first */ 633 if (of_driver_match_device(dev, drv)) 634 return 1; 635 636 /* Then try to match against the id table */ 637 if (pdrv->id_table) 638 return platform_match_id(pdrv->id_table, pdev) != NULL; 639 640 /* fall-back to driver name match */ 641 return (strcmp(pdev->name, drv->name) == 0); 642 } 643 644 #ifdef CONFIG_PM_SLEEP 645 646 static int platform_legacy_suspend(struct device *dev, pm_message_t mesg) 647 { 648 struct platform_driver *pdrv = to_platform_driver(dev->driver); 649 struct platform_device *pdev = to_platform_device(dev); 650 int ret = 0; 651 652 if (dev->driver && pdrv->suspend) 653 ret = pdrv->suspend(pdev, mesg); 654 655 return ret; 656 } 657 658 static int platform_legacy_resume(struct device *dev) 659 { 660 struct platform_driver *pdrv = to_platform_driver(dev->driver); 661 struct platform_device *pdev = to_platform_device(dev); 662 int ret = 0; 663 664 if (dev->driver && pdrv->resume) 665 ret = pdrv->resume(pdev); 666 667 return ret; 668 } 669 670 int platform_pm_prepare(struct device *dev) 671 { 672 struct device_driver *drv = dev->driver; 673 int ret = 0; 674 675 if (drv && drv->pm && drv->pm->prepare) 676 ret = drv->pm->prepare(dev); 677 678 return ret; 679 } 680 681 void platform_pm_complete(struct device *dev) 682 { 683 struct device_driver *drv = dev->driver; 684 685 if (drv && drv->pm && drv->pm->complete) 686 drv->pm->complete(dev); 687 } 688 689 #endif /* CONFIG_PM_SLEEP */ 690 691 #ifdef CONFIG_SUSPEND 692 693 int platform_pm_suspend(struct device *dev) 694 { 695 struct device_driver *drv = dev->driver; 696 int ret = 0; 697 698 if (!drv) 699 return 0; 700 701 if (drv->pm) { 702 if (drv->pm->suspend) 703 ret = drv->pm->suspend(dev); 704 } else { 705 ret = platform_legacy_suspend(dev, PMSG_SUSPEND); 706 } 707 708 return ret; 709 } 710 711 int platform_pm_suspend_noirq(struct device *dev) 712 { 713 struct device_driver *drv = dev->driver; 714 int ret = 0; 715 716 if (!drv) 717 return 0; 718 719 if (drv->pm) { 720 if (drv->pm->suspend_noirq) 721 ret = drv->pm->suspend_noirq(dev); 722 } 723 724 return ret; 725 } 726 727 int platform_pm_resume(struct device *dev) 728 { 729 struct device_driver *drv = dev->driver; 730 int ret = 0; 731 732 if (!drv) 733 return 0; 734 735 if (drv->pm) { 736 if (drv->pm->resume) 737 ret = drv->pm->resume(dev); 738 } else { 739 ret = platform_legacy_resume(dev); 740 } 741 742 return ret; 743 } 744 745 int platform_pm_resume_noirq(struct device *dev) 746 { 747 struct device_driver *drv = dev->driver; 748 int ret = 0; 749 750 if (!drv) 751 return 0; 752 753 if (drv->pm) { 754 if (drv->pm->resume_noirq) 755 ret = drv->pm->resume_noirq(dev); 756 } 757 758 return ret; 759 } 760 761 #endif /* CONFIG_SUSPEND */ 762 763 #ifdef CONFIG_HIBERNATE_CALLBACKS 764 765 int platform_pm_freeze(struct device *dev) 766 { 767 struct device_driver *drv = dev->driver; 768 int ret = 0; 769 770 if (!drv) 771 return 0; 772 773 if (drv->pm) { 774 if (drv->pm->freeze) 775 ret = drv->pm->freeze(dev); 776 } else { 777 ret = platform_legacy_suspend(dev, PMSG_FREEZE); 778 } 779 780 return ret; 781 } 782 783 int platform_pm_freeze_noirq(struct device *dev) 784 { 785 struct device_driver *drv = dev->driver; 786 int ret = 0; 787 788 if (!drv) 789 return 0; 790 791 if (drv->pm) { 792 if (drv->pm->freeze_noirq) 793 ret = drv->pm->freeze_noirq(dev); 794 } 795 796 return ret; 797 } 798 799 int platform_pm_thaw(struct device *dev) 800 { 801 struct device_driver *drv = dev->driver; 802 int ret = 0; 803 804 if (!drv) 805 return 0; 806 807 if (drv->pm) { 808 if (drv->pm->thaw) 809 ret = drv->pm->thaw(dev); 810 } else { 811 ret = platform_legacy_resume(dev); 812 } 813 814 return ret; 815 } 816 817 int platform_pm_thaw_noirq(struct device *dev) 818 { 819 struct device_driver *drv = dev->driver; 820 int ret = 0; 821 822 if (!drv) 823 return 0; 824 825 if (drv->pm) { 826 if (drv->pm->thaw_noirq) 827 ret = drv->pm->thaw_noirq(dev); 828 } 829 830 return ret; 831 } 832 833 int platform_pm_poweroff(struct device *dev) 834 { 835 struct device_driver *drv = dev->driver; 836 int ret = 0; 837 838 if (!drv) 839 return 0; 840 841 if (drv->pm) { 842 if (drv->pm->poweroff) 843 ret = drv->pm->poweroff(dev); 844 } else { 845 ret = platform_legacy_suspend(dev, PMSG_HIBERNATE); 846 } 847 848 return ret; 849 } 850 851 int platform_pm_poweroff_noirq(struct device *dev) 852 { 853 struct device_driver *drv = dev->driver; 854 int ret = 0; 855 856 if (!drv) 857 return 0; 858 859 if (drv->pm) { 860 if (drv->pm->poweroff_noirq) 861 ret = drv->pm->poweroff_noirq(dev); 862 } 863 864 return ret; 865 } 866 867 int platform_pm_restore(struct device *dev) 868 { 869 struct device_driver *drv = dev->driver; 870 int ret = 0; 871 872 if (!drv) 873 return 0; 874 875 if (drv->pm) { 876 if (drv->pm->restore) 877 ret = drv->pm->restore(dev); 878 } else { 879 ret = platform_legacy_resume(dev); 880 } 881 882 return ret; 883 } 884 885 int platform_pm_restore_noirq(struct device *dev) 886 { 887 struct device_driver *drv = dev->driver; 888 int ret = 0; 889 890 if (!drv) 891 return 0; 892 893 if (drv->pm) { 894 if (drv->pm->restore_noirq) 895 ret = drv->pm->restore_noirq(dev); 896 } 897 898 return ret; 899 } 900 901 #endif /* CONFIG_HIBERNATE_CALLBACKS */ 902 903 static const struct dev_pm_ops platform_dev_pm_ops = { 904 .runtime_suspend = pm_generic_runtime_suspend, 905 .runtime_resume = pm_generic_runtime_resume, 906 .runtime_idle = pm_generic_runtime_idle, 907 USE_PLATFORM_PM_SLEEP_OPS 908 }; 909 910 struct bus_type platform_bus_type = { 911 .name = "platform", 912 .dev_attrs = platform_dev_attrs, 913 .match = platform_match, 914 .uevent = platform_uevent, 915 .pm = &platform_dev_pm_ops, 916 }; 917 EXPORT_SYMBOL_GPL(platform_bus_type); 918 919 int __init platform_bus_init(void) 920 { 921 int error; 922 923 early_platform_cleanup(); 924 925 error = device_register(&platform_bus); 926 if (error) 927 return error; 928 error = bus_register(&platform_bus_type); 929 if (error) 930 device_unregister(&platform_bus); 931 return error; 932 } 933 934 #ifndef ARCH_HAS_DMA_GET_REQUIRED_MASK 935 u64 dma_get_required_mask(struct device *dev) 936 { 937 u32 low_totalram = ((max_pfn - 1) << PAGE_SHIFT); 938 u32 high_totalram = ((max_pfn - 1) >> (32 - PAGE_SHIFT)); 939 u64 mask; 940 941 if (!high_totalram) { 942 /* convert to mask just covering totalram */ 943 low_totalram = (1 << (fls(low_totalram) - 1)); 944 low_totalram += low_totalram - 1; 945 mask = low_totalram; 946 } else { 947 high_totalram = (1 << (fls(high_totalram) - 1)); 948 high_totalram += high_totalram - 1; 949 mask = (((u64)high_totalram) << 32) + 0xffffffff; 950 } 951 return mask; 952 } 953 EXPORT_SYMBOL_GPL(dma_get_required_mask); 954 #endif 955 956 static __initdata LIST_HEAD(early_platform_driver_list); 957 static __initdata LIST_HEAD(early_platform_device_list); 958 959 /** 960 * early_platform_driver_register - register early platform driver 961 * @epdrv: early_platform driver structure 962 * @buf: string passed from early_param() 963 * 964 * Helper function for early_platform_init() / early_platform_init_buffer() 965 */ 966 int __init early_platform_driver_register(struct early_platform_driver *epdrv, 967 char *buf) 968 { 969 char *tmp; 970 int n; 971 972 /* Simply add the driver to the end of the global list. 973 * Drivers will by default be put on the list in compiled-in order. 974 */ 975 if (!epdrv->list.next) { 976 INIT_LIST_HEAD(&epdrv->list); 977 list_add_tail(&epdrv->list, &early_platform_driver_list); 978 } 979 980 /* If the user has specified device then make sure the driver 981 * gets prioritized. The driver of the last device specified on 982 * command line will be put first on the list. 983 */ 984 n = strlen(epdrv->pdrv->driver.name); 985 if (buf && !strncmp(buf, epdrv->pdrv->driver.name, n)) { 986 list_move(&epdrv->list, &early_platform_driver_list); 987 988 /* Allow passing parameters after device name */ 989 if (buf[n] == '\0' || buf[n] == ',') 990 epdrv->requested_id = -1; 991 else { 992 epdrv->requested_id = simple_strtoul(&buf[n + 1], 993 &tmp, 10); 994 995 if (buf[n] != '.' || (tmp == &buf[n + 1])) { 996 epdrv->requested_id = EARLY_PLATFORM_ID_ERROR; 997 n = 0; 998 } else 999 n += strcspn(&buf[n + 1], ",") + 1; 1000 } 1001 1002 if (buf[n] == ',') 1003 n++; 1004 1005 if (epdrv->bufsize) { 1006 memcpy(epdrv->buffer, &buf[n], 1007 min_t(int, epdrv->bufsize, strlen(&buf[n]) + 1)); 1008 epdrv->buffer[epdrv->bufsize - 1] = '\0'; 1009 } 1010 } 1011 1012 return 0; 1013 } 1014 1015 /** 1016 * early_platform_add_devices - adds a number of early platform devices 1017 * @devs: array of early platform devices to add 1018 * @num: number of early platform devices in array 1019 * 1020 * Used by early architecture code to register early platform devices and 1021 * their platform data. 1022 */ 1023 void __init early_platform_add_devices(struct platform_device **devs, int num) 1024 { 1025 struct device *dev; 1026 int i; 1027 1028 /* simply add the devices to list */ 1029 for (i = 0; i < num; i++) { 1030 dev = &devs[i]->dev; 1031 1032 if (!dev->devres_head.next) { 1033 INIT_LIST_HEAD(&dev->devres_head); 1034 list_add_tail(&dev->devres_head, 1035 &early_platform_device_list); 1036 } 1037 } 1038 } 1039 1040 /** 1041 * early_platform_driver_register_all - register early platform drivers 1042 * @class_str: string to identify early platform driver class 1043 * 1044 * Used by architecture code to register all early platform drivers 1045 * for a certain class. If omitted then only early platform drivers 1046 * with matching kernel command line class parameters will be registered. 1047 */ 1048 void __init early_platform_driver_register_all(char *class_str) 1049 { 1050 /* The "class_str" parameter may or may not be present on the kernel 1051 * command line. If it is present then there may be more than one 1052 * matching parameter. 1053 * 1054 * Since we register our early platform drivers using early_param() 1055 * we need to make sure that they also get registered in the case 1056 * when the parameter is missing from the kernel command line. 1057 * 1058 * We use parse_early_options() to make sure the early_param() gets 1059 * called at least once. The early_param() may be called more than 1060 * once since the name of the preferred device may be specified on 1061 * the kernel command line. early_platform_driver_register() handles 1062 * this case for us. 1063 */ 1064 parse_early_options(class_str); 1065 } 1066 1067 /** 1068 * early_platform_match - find early platform device matching driver 1069 * @epdrv: early platform driver structure 1070 * @id: id to match against 1071 */ 1072 static __init struct platform_device * 1073 early_platform_match(struct early_platform_driver *epdrv, int id) 1074 { 1075 struct platform_device *pd; 1076 1077 list_for_each_entry(pd, &early_platform_device_list, dev.devres_head) 1078 if (platform_match(&pd->dev, &epdrv->pdrv->driver)) 1079 if (pd->id == id) 1080 return pd; 1081 1082 return NULL; 1083 } 1084 1085 /** 1086 * early_platform_left - check if early platform driver has matching devices 1087 * @epdrv: early platform driver structure 1088 * @id: return true if id or above exists 1089 */ 1090 static __init int early_platform_left(struct early_platform_driver *epdrv, 1091 int id) 1092 { 1093 struct platform_device *pd; 1094 1095 list_for_each_entry(pd, &early_platform_device_list, dev.devres_head) 1096 if (platform_match(&pd->dev, &epdrv->pdrv->driver)) 1097 if (pd->id >= id) 1098 return 1; 1099 1100 return 0; 1101 } 1102 1103 /** 1104 * early_platform_driver_probe_id - probe drivers matching class_str and id 1105 * @class_str: string to identify early platform driver class 1106 * @id: id to match against 1107 * @nr_probe: number of platform devices to successfully probe before exiting 1108 */ 1109 static int __init early_platform_driver_probe_id(char *class_str, 1110 int id, 1111 int nr_probe) 1112 { 1113 struct early_platform_driver *epdrv; 1114 struct platform_device *match; 1115 int match_id; 1116 int n = 0; 1117 int left = 0; 1118 1119 list_for_each_entry(epdrv, &early_platform_driver_list, list) { 1120 /* only use drivers matching our class_str */ 1121 if (strcmp(class_str, epdrv->class_str)) 1122 continue; 1123 1124 if (id == -2) { 1125 match_id = epdrv->requested_id; 1126 left = 1; 1127 1128 } else { 1129 match_id = id; 1130 left += early_platform_left(epdrv, id); 1131 1132 /* skip requested id */ 1133 switch (epdrv->requested_id) { 1134 case EARLY_PLATFORM_ID_ERROR: 1135 case EARLY_PLATFORM_ID_UNSET: 1136 break; 1137 default: 1138 if (epdrv->requested_id == id) 1139 match_id = EARLY_PLATFORM_ID_UNSET; 1140 } 1141 } 1142 1143 switch (match_id) { 1144 case EARLY_PLATFORM_ID_ERROR: 1145 pr_warning("%s: unable to parse %s parameter\n", 1146 class_str, epdrv->pdrv->driver.name); 1147 /* fall-through */ 1148 case EARLY_PLATFORM_ID_UNSET: 1149 match = NULL; 1150 break; 1151 default: 1152 match = early_platform_match(epdrv, match_id); 1153 } 1154 1155 if (match) { 1156 /* 1157 * Set up a sensible init_name to enable 1158 * dev_name() and others to be used before the 1159 * rest of the driver core is initialized. 1160 */ 1161 if (!match->dev.init_name && slab_is_available()) { 1162 if (match->id != -1) 1163 match->dev.init_name = 1164 kasprintf(GFP_KERNEL, "%s.%d", 1165 match->name, 1166 match->id); 1167 else 1168 match->dev.init_name = 1169 kasprintf(GFP_KERNEL, "%s", 1170 match->name); 1171 1172 if (!match->dev.init_name) 1173 return -ENOMEM; 1174 } 1175 1176 if (epdrv->pdrv->probe(match)) 1177 pr_warning("%s: unable to probe %s early.\n", 1178 class_str, match->name); 1179 else 1180 n++; 1181 } 1182 1183 if (n >= nr_probe) 1184 break; 1185 } 1186 1187 if (left) 1188 return n; 1189 else 1190 return -ENODEV; 1191 } 1192 1193 /** 1194 * early_platform_driver_probe - probe a class of registered drivers 1195 * @class_str: string to identify early platform driver class 1196 * @nr_probe: number of platform devices to successfully probe before exiting 1197 * @user_only: only probe user specified early platform devices 1198 * 1199 * Used by architecture code to probe registered early platform drivers 1200 * within a certain class. For probe to happen a registered early platform 1201 * device matching a registered early platform driver is needed. 1202 */ 1203 int __init early_platform_driver_probe(char *class_str, 1204 int nr_probe, 1205 int user_only) 1206 { 1207 int k, n, i; 1208 1209 n = 0; 1210 for (i = -2; n < nr_probe; i++) { 1211 k = early_platform_driver_probe_id(class_str, i, nr_probe - n); 1212 1213 if (k < 0) 1214 break; 1215 1216 n += k; 1217 1218 if (user_only) 1219 break; 1220 } 1221 1222 return n; 1223 } 1224 1225 /** 1226 * early_platform_cleanup - clean up early platform code 1227 */ 1228 void __init early_platform_cleanup(void) 1229 { 1230 struct platform_device *pd, *pd2; 1231 1232 /* clean up the devres list used to chain devices */ 1233 list_for_each_entry_safe(pd, pd2, &early_platform_device_list, 1234 dev.devres_head) { 1235 list_del(&pd->dev.devres_head); 1236 memset(&pd->dev.devres_head, 0, sizeof(pd->dev.devres_head)); 1237 } 1238 } 1239 1240