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