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