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