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