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