2
* platform.c - platform 'pseudo' bus for legacy devices
4
* Copyright (c) 2002-3 Patrick Mochel
5
* Copyright (c) 2002-3 Open Source Development Labs
7
* This file is released under the GPLv2
9
* Please see Documentation/driver-model/platform.txt for more
13
#include <linux/string.h>
14
#include <linux/platform_device.h>
15
#include <linux/module.h>
16
#include <linux/init.h>
17
#include <linux/dma-mapping.h>
18
#include <linux/bootmem.h>
19
#include <linux/err.h>
20
#include <linux/slab.h>
21
#include <linux/pm_runtime.h>
25
#define to_platform_driver(drv) (container_of((drv), struct platform_driver, \
28
struct device platform_bus = {
29
.init_name = "platform",
31
EXPORT_SYMBOL_GPL(platform_bus);
34
* platform_get_resource - get a resource for a device
35
* @dev: platform device
36
* @type: resource type
37
* @num: resource index
39
struct resource *platform_get_resource(struct platform_device *dev,
40
unsigned int type, unsigned int num)
44
for (i = 0; i < dev->num_resources; i++) {
45
struct resource *r = &dev->resource[i];
47
if (type == resource_type(r) && num-- == 0)
52
EXPORT_SYMBOL_GPL(platform_get_resource);
55
* platform_get_irq - get an IRQ for a device
56
* @dev: platform device
57
* @num: IRQ number index
59
int platform_get_irq(struct platform_device *dev, unsigned int num)
61
struct resource *r = platform_get_resource(dev, IORESOURCE_IRQ, num);
63
return r ? r->start : -ENXIO;
65
EXPORT_SYMBOL_GPL(platform_get_irq);
68
* platform_get_resource_byname - get a resource for a device by name
69
* @dev: platform device
70
* @type: resource type
71
* @name: resource name
73
struct resource *platform_get_resource_byname(struct platform_device *dev,
79
for (i = 0; i < dev->num_resources; i++) {
80
struct resource *r = &dev->resource[i];
82
if (type == resource_type(r) && !strcmp(r->name, name))
87
EXPORT_SYMBOL_GPL(platform_get_resource_byname);
90
* platform_get_irq - get an IRQ for a device
91
* @dev: platform device
94
int platform_get_irq_byname(struct platform_device *dev, const char *name)
96
struct resource *r = platform_get_resource_byname(dev, IORESOURCE_IRQ,
99
return r ? r->start : -ENXIO;
101
EXPORT_SYMBOL_GPL(platform_get_irq_byname);
104
* platform_add_devices - add a numbers of platform devices
105
* @devs: array of platform devices to add
106
* @num: number of platform devices in array
108
int platform_add_devices(struct platform_device **devs, int num)
112
for (i = 0; i < num; i++) {
113
ret = platform_device_register(devs[i]);
116
platform_device_unregister(devs[i]);
123
EXPORT_SYMBOL_GPL(platform_add_devices);
125
struct platform_object {
126
struct platform_device pdev;
131
* platform_device_put - destroy a platform device
132
* @pdev: platform device to free
134
* Free all memory associated with a platform device. This function must
135
* _only_ be externally called in error cases. All other usage is a bug.
137
void platform_device_put(struct platform_device *pdev)
140
put_device(&pdev->dev);
142
EXPORT_SYMBOL_GPL(platform_device_put);
144
static void platform_device_release(struct device *dev)
146
struct platform_object *pa = container_of(dev, struct platform_object,
149
kfree(pa->pdev.dev.platform_data);
150
kfree(pa->pdev.resource);
155
* platform_device_alloc - create a platform device
156
* @name: base name of the device we're adding
159
* Create a platform device object which can have other objects attached
160
* to it, and which will have attached objects freed when it is released.
162
struct platform_device *platform_device_alloc(const char *name, int id)
164
struct platform_object *pa;
166
pa = kzalloc(sizeof(struct platform_object) + strlen(name), GFP_KERNEL);
168
strcpy(pa->name, name);
169
pa->pdev.name = pa->name;
171
device_initialize(&pa->pdev.dev);
172
pa->pdev.dev.release = platform_device_release;
175
return pa ? &pa->pdev : NULL;
177
EXPORT_SYMBOL_GPL(platform_device_alloc);
180
* platform_device_add_resources - add resources to a platform device
181
* @pdev: platform device allocated by platform_device_alloc to add resources to
182
* @res: set of resources that needs to be allocated for the device
183
* @num: number of resources
185
* Add a copy of the resources to the platform device. The memory
186
* associated with the resources will be freed when the platform device is
189
int platform_device_add_resources(struct platform_device *pdev,
190
const struct resource *res, unsigned int num)
194
r = kmalloc(sizeof(struct resource) * num, GFP_KERNEL);
196
memcpy(r, res, sizeof(struct resource) * num);
198
pdev->num_resources = num;
200
return r ? 0 : -ENOMEM;
202
EXPORT_SYMBOL_GPL(platform_device_add_resources);
205
* platform_device_add_data - add platform-specific data to a platform device
206
* @pdev: platform device allocated by platform_device_alloc to add resources to
207
* @data: platform specific data for this platform device
208
* @size: size of platform specific data
210
* Add a copy of platform specific data to the platform device's
211
* platform_data pointer. The memory associated with the platform data
212
* will be freed when the platform device is released.
214
int platform_device_add_data(struct platform_device *pdev, const void *data,
217
void *d = kmemdup(data, size, GFP_KERNEL);
220
pdev->dev.platform_data = d;
225
EXPORT_SYMBOL_GPL(platform_device_add_data);
228
* platform_device_add - add a platform device to device hierarchy
229
* @pdev: platform device we're adding
231
* This is part 2 of platform_device_register(), though may be called
232
* separately _iff_ pdev was allocated by platform_device_alloc().
234
int platform_device_add(struct platform_device *pdev)
241
if (!pdev->dev.parent)
242
pdev->dev.parent = &platform_bus;
244
pdev->dev.bus = &platform_bus_type;
247
dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id);
249
dev_set_name(&pdev->dev, "%s", pdev->name);
251
for (i = 0; i < pdev->num_resources; i++) {
252
struct resource *p, *r = &pdev->resource[i];
255
r->name = dev_name(&pdev->dev);
259
if (resource_type(r) == IORESOURCE_MEM)
261
else if (resource_type(r) == IORESOURCE_IO)
262
p = &ioport_resource;
265
if (p && insert_resource(p, r)) {
267
"%s: failed to claim resource %d\n",
268
dev_name(&pdev->dev), i);
274
pr_debug("Registering platform device '%s'. Parent at %s\n",
275
dev_name(&pdev->dev), dev_name(pdev->dev.parent));
277
ret = device_add(&pdev->dev);
283
struct resource *r = &pdev->resource[i];
284
unsigned long type = resource_type(r);
286
if (type == IORESOURCE_MEM || type == IORESOURCE_IO)
292
EXPORT_SYMBOL_GPL(platform_device_add);
295
* platform_device_del - remove a platform-level device
296
* @pdev: platform device we're removing
298
* Note that this function will also release all memory- and port-based
299
* resources owned by the device (@dev->resource). This function must
300
* _only_ be externally called in error cases. All other usage is a bug.
302
void platform_device_del(struct platform_device *pdev)
307
device_del(&pdev->dev);
309
for (i = 0; i < pdev->num_resources; i++) {
310
struct resource *r = &pdev->resource[i];
311
unsigned long type = resource_type(r);
313
if (type == IORESOURCE_MEM || type == IORESOURCE_IO)
318
EXPORT_SYMBOL_GPL(platform_device_del);
321
* platform_device_register - add a platform-level device
322
* @pdev: platform device we're adding
324
int platform_device_register(struct platform_device *pdev)
326
device_initialize(&pdev->dev);
327
return platform_device_add(pdev);
329
EXPORT_SYMBOL_GPL(platform_device_register);
332
* platform_device_unregister - unregister a platform-level device
333
* @pdev: platform device we're unregistering
335
* Unregistration is done in 2 steps. First we release all resources
336
* and remove it from the subsystem, then we drop reference count by
337
* calling platform_device_put().
339
void platform_device_unregister(struct platform_device *pdev)
341
platform_device_del(pdev);
342
platform_device_put(pdev);
344
EXPORT_SYMBOL_GPL(platform_device_unregister);
347
* platform_device_register_simple - add a platform-level device and its resources
348
* @name: base name of the device we're adding
350
* @res: set of resources that needs to be allocated for the device
351
* @num: number of resources
353
* This function creates a simple platform device that requires minimal
354
* resource and memory management. Canned release function freeing memory
355
* allocated for the device allows drivers using such devices to be
356
* unloaded without waiting for the last reference to the device to be
359
* This interface is primarily intended for use with legacy drivers which
360
* probe hardware directly. Because such drivers create sysfs device nodes
361
* themselves, rather than letting system infrastructure handle such device
362
* enumeration tasks, they don't fully conform to the Linux driver model.
363
* In particular, when such drivers are built as modules, they can't be
366
* Returns &struct platform_device pointer on success, or ERR_PTR() on error.
368
struct platform_device *platform_device_register_simple(const char *name,
370
const struct resource *res,
373
struct platform_device *pdev;
376
pdev = platform_device_alloc(name, id);
383
retval = platform_device_add_resources(pdev, res, num);
388
retval = platform_device_add(pdev);
395
platform_device_put(pdev);
396
return ERR_PTR(retval);
398
EXPORT_SYMBOL_GPL(platform_device_register_simple);
401
* platform_device_register_data - add a platform-level device with platform-specific data
402
* @parent: parent device for the device we're adding
403
* @name: base name of the device we're adding
405
* @data: platform specific data for this platform device
406
* @size: size of platform specific data
408
* This function creates a simple platform device that requires minimal
409
* resource and memory management. Canned release function freeing memory
410
* allocated for the device allows drivers using such devices to be
411
* unloaded without waiting for the last reference to the device to be
414
* Returns &struct platform_device pointer on success, or ERR_PTR() on error.
416
struct platform_device *platform_device_register_data(
417
struct device *parent,
418
const char *name, int id,
419
const void *data, size_t size)
421
struct platform_device *pdev;
424
pdev = platform_device_alloc(name, id);
430
pdev->dev.parent = parent;
433
retval = platform_device_add_data(pdev, data, size);
438
retval = platform_device_add(pdev);
445
platform_device_put(pdev);
446
return ERR_PTR(retval);
448
EXPORT_SYMBOL_GPL(platform_device_register_data);
450
static int platform_drv_probe(struct device *_dev)
452
struct platform_driver *drv = to_platform_driver(_dev->driver);
453
struct platform_device *dev = to_platform_device(_dev);
455
return drv->probe(dev);
458
static int platform_drv_probe_fail(struct device *_dev)
463
static int platform_drv_remove(struct device *_dev)
465
struct platform_driver *drv = to_platform_driver(_dev->driver);
466
struct platform_device *dev = to_platform_device(_dev);
468
return drv->remove(dev);
471
static void platform_drv_shutdown(struct device *_dev)
473
struct platform_driver *drv = to_platform_driver(_dev->driver);
474
struct platform_device *dev = to_platform_device(_dev);
480
* platform_driver_register - register a driver for platform-level devices
481
* @drv: platform driver structure
483
int platform_driver_register(struct platform_driver *drv)
485
drv->driver.bus = &platform_bus_type;
487
drv->driver.probe = platform_drv_probe;
489
drv->driver.remove = platform_drv_remove;
491
drv->driver.shutdown = platform_drv_shutdown;
493
return driver_register(&drv->driver);
495
EXPORT_SYMBOL_GPL(platform_driver_register);
498
* platform_driver_unregister - unregister a driver for platform-level devices
499
* @drv: platform driver structure
501
void platform_driver_unregister(struct platform_driver *drv)
503
driver_unregister(&drv->driver);
505
EXPORT_SYMBOL_GPL(platform_driver_unregister);
508
* platform_driver_probe - register driver for non-hotpluggable device
509
* @drv: platform driver structure
510
* @probe: the driver probe routine, probably from an __init section
512
* Use this instead of platform_driver_register() when you know the device
513
* is not hotpluggable and has already been registered, and you want to
514
* remove its run-once probe() infrastructure from memory after the driver
515
* has bound to the device.
517
* One typical use for this would be with drivers for controllers integrated
518
* into system-on-chip processors, where the controller devices have been
519
* configured as part of board setup.
521
* Returns zero if the driver registered and bound to a device, else returns
522
* a negative error code and with the driver not registered.
524
int __init_or_module platform_driver_probe(struct platform_driver *drv,
525
int (*probe)(struct platform_device *))
529
/* make sure driver won't have bind/unbind attributes */
530
drv->driver.suppress_bind_attrs = true;
532
/* temporary section violation during probe() */
534
retval = code = platform_driver_register(drv);
537
* Fixup that section violation, being paranoid about code scanning
538
* the list of drivers in order to probe new devices. Check to see
539
* if the probe was successful, and make sure any forced probes of
542
spin_lock(&platform_bus_type.p->klist_drivers.k_lock);
544
if (code == 0 && list_empty(&drv->driver.p->klist_devices.k_list))
546
drv->driver.probe = platform_drv_probe_fail;
547
spin_unlock(&platform_bus_type.p->klist_drivers.k_lock);
550
platform_driver_unregister(drv);
553
EXPORT_SYMBOL_GPL(platform_driver_probe);
556
* platform_create_bundle - register driver and create corresponding device
557
* @driver: platform driver structure
558
* @probe: the driver probe routine, probably from an __init section
559
* @res: set of resources that needs to be allocated for the device
560
* @n_res: number of resources
561
* @data: platform specific data for this platform device
562
* @size: size of platform specific data
564
* Use this in legacy-style modules that probe hardware directly and
565
* register a single platform device and corresponding platform driver.
567
* Returns &struct platform_device pointer on success, or ERR_PTR() on error.
569
struct platform_device * __init_or_module platform_create_bundle(
570
struct platform_driver *driver,
571
int (*probe)(struct platform_device *),
572
struct resource *res, unsigned int n_res,
573
const void *data, size_t size)
575
struct platform_device *pdev;
578
pdev = platform_device_alloc(driver->driver.name, -1);
585
error = platform_device_add_resources(pdev, res, n_res);
591
error = platform_device_add_data(pdev, data, size);
596
error = platform_device_add(pdev);
600
error = platform_driver_probe(driver, probe);
607
platform_device_del(pdev);
609
platform_device_put(pdev);
611
return ERR_PTR(error);
613
EXPORT_SYMBOL_GPL(platform_create_bundle);
615
/* modalias support enables more hands-off userspace setup:
616
* (a) environment variable lets new-style hotplug events work once system is
617
* fully running: "modprobe $MODALIAS"
618
* (b) sysfs attribute lets new-style coldplug recover from hotplug events
619
* mishandled before system is fully running: "modprobe $(cat modalias)"
621
static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
624
struct platform_device *pdev = to_platform_device(dev);
625
int len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
627
return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
630
static struct device_attribute platform_dev_attrs[] = {
635
static int platform_uevent(struct device *dev, struct kobj_uevent_env *env)
637
struct platform_device *pdev = to_platform_device(dev);
639
add_uevent_var(env, "MODALIAS=%s%s", PLATFORM_MODULE_PREFIX,
640
(pdev->id_entry) ? pdev->id_entry->name : pdev->name);
644
static const struct platform_device_id *platform_match_id(
645
const struct platform_device_id *id,
646
struct platform_device *pdev)
648
while (id->name[0]) {
649
if (strcmp(pdev->name, id->name) == 0) {
659
* platform_match - bind platform device to platform driver.
663
* Platform device IDs are assumed to be encoded like this:
664
* "<name><instance>", where <name> is a short description of the type of
665
* device, like "pci" or "floppy", and <instance> is the enumerated
666
* instance of the device, like '0' or '42'. Driver IDs are simply
667
* "<name>". So, extract the <name> from the platform_device structure,
668
* and compare it against the name of the driver. Return whether they match
671
static int platform_match(struct device *dev, struct device_driver *drv)
673
struct platform_device *pdev = to_platform_device(dev);
674
struct platform_driver *pdrv = to_platform_driver(drv);
676
/* match against the id table first */
678
return platform_match_id(pdrv->id_table, pdev) != NULL;
680
/* fall-back to driver name match */
681
return (strcmp(pdev->name, drv->name) == 0);
684
#ifdef CONFIG_PM_SLEEP
686
static int platform_legacy_suspend(struct device *dev, pm_message_t mesg)
688
struct platform_driver *pdrv = to_platform_driver(dev->driver);
689
struct platform_device *pdev = to_platform_device(dev);
692
if (dev->driver && pdrv->suspend)
693
ret = pdrv->suspend(pdev, mesg);
698
static int platform_legacy_resume(struct device *dev)
700
struct platform_driver *pdrv = to_platform_driver(dev->driver);
701
struct platform_device *pdev = to_platform_device(dev);
704
if (dev->driver && pdrv->resume)
705
ret = pdrv->resume(pdev);
710
static int platform_pm_prepare(struct device *dev)
712
struct device_driver *drv = dev->driver;
715
if (drv && drv->pm && drv->pm->prepare)
716
ret = drv->pm->prepare(dev);
721
static void platform_pm_complete(struct device *dev)
723
struct device_driver *drv = dev->driver;
725
if (drv && drv->pm && drv->pm->complete)
726
drv->pm->complete(dev);
729
#else /* !CONFIG_PM_SLEEP */
731
#define platform_pm_prepare NULL
732
#define platform_pm_complete NULL
734
#endif /* !CONFIG_PM_SLEEP */
736
#ifdef CONFIG_SUSPEND
738
int __weak platform_pm_suspend(struct device *dev)
740
struct device_driver *drv = dev->driver;
747
if (drv->pm->suspend)
748
ret = drv->pm->suspend(dev);
750
ret = platform_legacy_suspend(dev, PMSG_SUSPEND);
756
int __weak platform_pm_suspend_noirq(struct device *dev)
758
struct device_driver *drv = dev->driver;
765
if (drv->pm->suspend_noirq)
766
ret = drv->pm->suspend_noirq(dev);
772
int __weak platform_pm_resume(struct device *dev)
774
struct device_driver *drv = dev->driver;
782
ret = drv->pm->resume(dev);
784
ret = platform_legacy_resume(dev);
790
int __weak platform_pm_resume_noirq(struct device *dev)
792
struct device_driver *drv = dev->driver;
799
if (drv->pm->resume_noirq)
800
ret = drv->pm->resume_noirq(dev);
806
#else /* !CONFIG_SUSPEND */
808
#define platform_pm_suspend NULL
809
#define platform_pm_resume NULL
810
#define platform_pm_suspend_noirq NULL
811
#define platform_pm_resume_noirq NULL
813
#endif /* !CONFIG_SUSPEND */
815
#ifdef CONFIG_HIBERNATION
817
static int platform_pm_freeze(struct device *dev)
819
struct device_driver *drv = dev->driver;
827
ret = drv->pm->freeze(dev);
829
ret = platform_legacy_suspend(dev, PMSG_FREEZE);
835
static int platform_pm_freeze_noirq(struct device *dev)
837
struct device_driver *drv = dev->driver;
844
if (drv->pm->freeze_noirq)
845
ret = drv->pm->freeze_noirq(dev);
851
static int platform_pm_thaw(struct device *dev)
853
struct device_driver *drv = dev->driver;
861
ret = drv->pm->thaw(dev);
863
ret = platform_legacy_resume(dev);
869
static int platform_pm_thaw_noirq(struct device *dev)
871
struct device_driver *drv = dev->driver;
878
if (drv->pm->thaw_noirq)
879
ret = drv->pm->thaw_noirq(dev);
885
static int platform_pm_poweroff(struct device *dev)
887
struct device_driver *drv = dev->driver;
894
if (drv->pm->poweroff)
895
ret = drv->pm->poweroff(dev);
897
ret = platform_legacy_suspend(dev, PMSG_HIBERNATE);
903
static int platform_pm_poweroff_noirq(struct device *dev)
905
struct device_driver *drv = dev->driver;
912
if (drv->pm->poweroff_noirq)
913
ret = drv->pm->poweroff_noirq(dev);
919
static int platform_pm_restore(struct device *dev)
921
struct device_driver *drv = dev->driver;
928
if (drv->pm->restore)
929
ret = drv->pm->restore(dev);
931
ret = platform_legacy_resume(dev);
937
static int platform_pm_restore_noirq(struct device *dev)
939
struct device_driver *drv = dev->driver;
946
if (drv->pm->restore_noirq)
947
ret = drv->pm->restore_noirq(dev);
953
#else /* !CONFIG_HIBERNATION */
955
#define platform_pm_freeze NULL
956
#define platform_pm_thaw NULL
957
#define platform_pm_poweroff NULL
958
#define platform_pm_restore NULL
959
#define platform_pm_freeze_noirq NULL
960
#define platform_pm_thaw_noirq NULL
961
#define platform_pm_poweroff_noirq NULL
962
#define platform_pm_restore_noirq NULL
964
#endif /* !CONFIG_HIBERNATION */
966
#ifdef CONFIG_PM_RUNTIME
968
int __weak platform_pm_runtime_suspend(struct device *dev)
970
return pm_generic_runtime_suspend(dev);
973
int __weak platform_pm_runtime_resume(struct device *dev)
975
return pm_generic_runtime_resume(dev);
978
int __weak platform_pm_runtime_idle(struct device *dev)
980
return pm_generic_runtime_idle(dev);
983
#else /* !CONFIG_PM_RUNTIME */
985
#define platform_pm_runtime_suspend NULL
986
#define platform_pm_runtime_resume NULL
987
#define platform_pm_runtime_idle NULL
989
#endif /* !CONFIG_PM_RUNTIME */
991
static const struct dev_pm_ops platform_dev_pm_ops = {
992
.prepare = platform_pm_prepare,
993
.complete = platform_pm_complete,
994
.suspend = platform_pm_suspend,
995
.resume = platform_pm_resume,
996
.freeze = platform_pm_freeze,
997
.thaw = platform_pm_thaw,
998
.poweroff = platform_pm_poweroff,
999
.restore = platform_pm_restore,
1000
.suspend_noirq = platform_pm_suspend_noirq,
1001
.resume_noirq = platform_pm_resume_noirq,
1002
.freeze_noirq = platform_pm_freeze_noirq,
1003
.thaw_noirq = platform_pm_thaw_noirq,
1004
.poweroff_noirq = platform_pm_poweroff_noirq,
1005
.restore_noirq = platform_pm_restore_noirq,
1006
.runtime_suspend = platform_pm_runtime_suspend,
1007
.runtime_resume = platform_pm_runtime_resume,
1008
.runtime_idle = platform_pm_runtime_idle,
1011
struct bus_type platform_bus_type = {
1013
.dev_attrs = platform_dev_attrs,
1014
.match = platform_match,
1015
.uevent = platform_uevent,
1016
.pm = &platform_dev_pm_ops,
1018
EXPORT_SYMBOL_GPL(platform_bus_type);
1020
int __init platform_bus_init(void)
1024
early_platform_cleanup();
1026
error = device_register(&platform_bus);
1029
error = bus_register(&platform_bus_type);
1031
device_unregister(&platform_bus);
1035
#ifndef ARCH_HAS_DMA_GET_REQUIRED_MASK
1036
u64 dma_get_required_mask(struct device *dev)
1038
u32 low_totalram = ((max_pfn - 1) << PAGE_SHIFT);
1039
u32 high_totalram = ((max_pfn - 1) >> (32 - PAGE_SHIFT));
1042
if (!high_totalram) {
1043
/* convert to mask just covering totalram */
1044
low_totalram = (1 << (fls(low_totalram) - 1));
1045
low_totalram += low_totalram - 1;
1046
mask = low_totalram;
1048
high_totalram = (1 << (fls(high_totalram) - 1));
1049
high_totalram += high_totalram - 1;
1050
mask = (((u64)high_totalram) << 32) + 0xffffffff;
1054
EXPORT_SYMBOL_GPL(dma_get_required_mask);
1057
static __initdata LIST_HEAD(early_platform_driver_list);
1058
static __initdata LIST_HEAD(early_platform_device_list);
1061
* early_platform_driver_register - register early platform driver
1062
* @epdrv: early_platform driver structure
1063
* @buf: string passed from early_param()
1065
* Helper function for early_platform_init() / early_platform_init_buffer()
1067
int __init early_platform_driver_register(struct early_platform_driver *epdrv,
1073
/* Simply add the driver to the end of the global list.
1074
* Drivers will by default be put on the list in compiled-in order.
1076
if (!epdrv->list.next) {
1077
INIT_LIST_HEAD(&epdrv->list);
1078
list_add_tail(&epdrv->list, &early_platform_driver_list);
1081
/* If the user has specified device then make sure the driver
1082
* gets prioritized. The driver of the last device specified on
1083
* command line will be put first on the list.
1085
n = strlen(epdrv->pdrv->driver.name);
1086
if (buf && !strncmp(buf, epdrv->pdrv->driver.name, n)) {
1087
list_move(&epdrv->list, &early_platform_driver_list);
1089
/* Allow passing parameters after device name */
1090
if (buf[n] == '\0' || buf[n] == ',')
1091
epdrv->requested_id = -1;
1093
epdrv->requested_id = simple_strtoul(&buf[n + 1],
1096
if (buf[n] != '.' || (tmp == &buf[n + 1])) {
1097
epdrv->requested_id = EARLY_PLATFORM_ID_ERROR;
1100
n += strcspn(&buf[n + 1], ",") + 1;
1106
if (epdrv->bufsize) {
1107
memcpy(epdrv->buffer, &buf[n],
1108
min_t(int, epdrv->bufsize, strlen(&buf[n]) + 1));
1109
epdrv->buffer[epdrv->bufsize - 1] = '\0';
1117
* early_platform_add_devices - adds a number of early platform devices
1118
* @devs: array of early platform devices to add
1119
* @num: number of early platform devices in array
1121
* Used by early architecture code to register early platform devices and
1122
* their platform data.
1124
void __init early_platform_add_devices(struct platform_device **devs, int num)
1129
/* simply add the devices to list */
1130
for (i = 0; i < num; i++) {
1131
dev = &devs[i]->dev;
1133
if (!dev->devres_head.next) {
1134
INIT_LIST_HEAD(&dev->devres_head);
1135
list_add_tail(&dev->devres_head,
1136
&early_platform_device_list);
1142
* early_platform_driver_register_all - register early platform drivers
1143
* @class_str: string to identify early platform driver class
1145
* Used by architecture code to register all early platform drivers
1146
* for a certain class. If omitted then only early platform drivers
1147
* with matching kernel command line class parameters will be registered.
1149
void __init early_platform_driver_register_all(char *class_str)
1151
/* The "class_str" parameter may or may not be present on the kernel
1152
* command line. If it is present then there may be more than one
1153
* matching parameter.
1155
* Since we register our early platform drivers using early_param()
1156
* we need to make sure that they also get registered in the case
1157
* when the parameter is missing from the kernel command line.
1159
* We use parse_early_options() to make sure the early_param() gets
1160
* called at least once. The early_param() may be called more than
1161
* once since the name of the preferred device may be specified on
1162
* the kernel command line. early_platform_driver_register() handles
1165
parse_early_options(class_str);
1169
* early_platform_match - find early platform device matching driver
1170
* @epdrv: early platform driver structure
1171
* @id: id to match against
1173
static __init struct platform_device *
1174
early_platform_match(struct early_platform_driver *epdrv, int id)
1176
struct platform_device *pd;
1178
list_for_each_entry(pd, &early_platform_device_list, dev.devres_head)
1179
if (platform_match(&pd->dev, &epdrv->pdrv->driver))
1187
* early_platform_left - check if early platform driver has matching devices
1188
* @epdrv: early platform driver structure
1189
* @id: return true if id or above exists
1191
static __init int early_platform_left(struct early_platform_driver *epdrv,
1194
struct platform_device *pd;
1196
list_for_each_entry(pd, &early_platform_device_list, dev.devres_head)
1197
if (platform_match(&pd->dev, &epdrv->pdrv->driver))
1205
* early_platform_driver_probe_id - probe drivers matching class_str and id
1206
* @class_str: string to identify early platform driver class
1207
* @id: id to match against
1208
* @nr_probe: number of platform devices to successfully probe before exiting
1210
static int __init early_platform_driver_probe_id(char *class_str,
1214
struct early_platform_driver *epdrv;
1215
struct platform_device *match;
1220
list_for_each_entry(epdrv, &early_platform_driver_list, list) {
1221
/* only use drivers matching our class_str */
1222
if (strcmp(class_str, epdrv->class_str))
1226
match_id = epdrv->requested_id;
1231
left += early_platform_left(epdrv, id);
1233
/* skip requested id */
1234
switch (epdrv->requested_id) {
1235
case EARLY_PLATFORM_ID_ERROR:
1236
case EARLY_PLATFORM_ID_UNSET:
1239
if (epdrv->requested_id == id)
1240
match_id = EARLY_PLATFORM_ID_UNSET;
1245
case EARLY_PLATFORM_ID_ERROR:
1246
pr_warning("%s: unable to parse %s parameter\n",
1247
class_str, epdrv->pdrv->driver.name);
1249
case EARLY_PLATFORM_ID_UNSET:
1253
match = early_platform_match(epdrv, match_id);
1258
* Set up a sensible init_name to enable
1259
* dev_name() and others to be used before the
1260
* rest of the driver core is initialized.
1262
if (!match->dev.init_name && slab_is_available()) {
1263
if (match->id != -1)
1264
match->dev.init_name =
1265
kasprintf(GFP_KERNEL, "%s.%d",
1269
match->dev.init_name =
1270
kasprintf(GFP_KERNEL, "%s",
1273
if (!match->dev.init_name)
1277
if (epdrv->pdrv->probe(match))
1278
pr_warning("%s: unable to probe %s early.\n",
1279
class_str, match->name);
1295
* early_platform_driver_probe - probe a class of registered drivers
1296
* @class_str: string to identify early platform driver class
1297
* @nr_probe: number of platform devices to successfully probe before exiting
1298
* @user_only: only probe user specified early platform devices
1300
* Used by architecture code to probe registered early platform drivers
1301
* within a certain class. For probe to happen a registered early platform
1302
* device matching a registered early platform driver is needed.
1304
int __init early_platform_driver_probe(char *class_str,
1311
for (i = -2; n < nr_probe; i++) {
1312
k = early_platform_driver_probe_id(class_str, i, nr_probe - n);
1327
* early_platform_cleanup - clean up early platform code
1329
void __init early_platform_cleanup(void)
1331
struct platform_device *pd, *pd2;
1333
/* clean up the devres list used to chain devices */
1334
list_for_each_entry_safe(pd, pd2, &early_platform_device_list,
1336
list_del(&pd->dev.devres_head);
1337
memset(&pd->dev.devres_head, 0, sizeof(pd->dev.devres_head));