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