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