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