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