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