.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-only */ |
---|
1 | 2 | /* |
---|
2 | 3 | * platform_device.h - generic, centralized driver model |
---|
3 | 4 | * |
---|
4 | 5 | * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org> |
---|
5 | 6 | * |
---|
6 | | - * This file is released under the GPLv2 |
---|
7 | | - * |
---|
8 | | - * See Documentation/driver-model/ for more information. |
---|
| 7 | + * See Documentation/driver-api/driver-model/ for more information. |
---|
9 | 8 | */ |
---|
10 | 9 | |
---|
11 | 10 | #ifndef _PLATFORM_DEVICE_H_ |
---|
12 | 11 | #define _PLATFORM_DEVICE_H_ |
---|
13 | 12 | |
---|
14 | 13 | #include <linux/device.h> |
---|
| 14 | +#include <linux/android_kabi.h> |
---|
15 | 15 | |
---|
16 | 16 | #define PLATFORM_DEVID_NONE (-1) |
---|
17 | 17 | #define PLATFORM_DEVID_AUTO (-2) |
---|
.. | .. |
---|
25 | 25 | int id; |
---|
26 | 26 | bool id_auto; |
---|
27 | 27 | struct device dev; |
---|
| 28 | + u64 platform_dma_mask; |
---|
| 29 | + struct device_dma_parameters dma_parms; |
---|
28 | 30 | u32 num_resources; |
---|
29 | 31 | struct resource *resource; |
---|
30 | 32 | |
---|
.. | .. |
---|
36 | 38 | |
---|
37 | 39 | /* arch specific additions */ |
---|
38 | 40 | struct pdev_archdata archdata; |
---|
| 41 | + |
---|
| 42 | + ANDROID_KABI_RESERVE(1); |
---|
| 43 | + ANDROID_KABI_RESERVE(2); |
---|
39 | 44 | }; |
---|
40 | 45 | |
---|
41 | 46 | #define platform_get_device_id(pdev) ((pdev)->id_entry) |
---|
42 | 47 | |
---|
| 48 | +#define dev_is_platform(dev) ((dev)->bus == &platform_bus_type) |
---|
43 | 49 | #define to_platform_device(x) container_of((x), struct platform_device, dev) |
---|
44 | 50 | |
---|
45 | 51 | extern int platform_device_register(struct platform_device *); |
---|
.. | .. |
---|
48 | 54 | extern struct bus_type platform_bus_type; |
---|
49 | 55 | extern struct device platform_bus; |
---|
50 | 56 | |
---|
51 | | -extern void arch_setup_pdev_archdata(struct platform_device *); |
---|
52 | 57 | extern struct resource *platform_get_resource(struct platform_device *, |
---|
53 | 58 | unsigned int, unsigned int); |
---|
| 59 | +extern struct device * |
---|
| 60 | +platform_find_device_by_driver(struct device *start, |
---|
| 61 | + const struct device_driver *drv); |
---|
54 | 62 | extern void __iomem * |
---|
55 | 63 | devm_platform_get_and_ioremap_resource(struct platform_device *pdev, |
---|
56 | 64 | unsigned int index, struct resource **res); |
---|
57 | 65 | extern void __iomem * |
---|
58 | 66 | devm_platform_ioremap_resource(struct platform_device *pdev, |
---|
59 | 67 | unsigned int index); |
---|
| 68 | +extern void __iomem * |
---|
| 69 | +devm_platform_ioremap_resource_wc(struct platform_device *pdev, |
---|
| 70 | + unsigned int index); |
---|
| 71 | +extern void __iomem * |
---|
| 72 | +devm_platform_ioremap_resource_byname(struct platform_device *pdev, |
---|
| 73 | + const char *name); |
---|
60 | 74 | extern int platform_get_irq(struct platform_device *, unsigned int); |
---|
| 75 | +extern int platform_get_irq_optional(struct platform_device *, unsigned int); |
---|
61 | 76 | extern int platform_irq_count(struct platform_device *); |
---|
62 | 77 | extern struct resource *platform_get_resource_byname(struct platform_device *, |
---|
63 | 78 | unsigned int, |
---|
64 | 79 | const char *); |
---|
65 | 80 | extern int platform_get_irq_byname(struct platform_device *, const char *); |
---|
| 81 | +extern int platform_get_irq_byname_optional(struct platform_device *dev, |
---|
| 82 | + const char *name); |
---|
66 | 83 | extern int platform_add_devices(struct platform_device **, int); |
---|
67 | 84 | |
---|
68 | 85 | struct platform_device_info { |
---|
69 | 86 | struct device *parent; |
---|
70 | 87 | struct fwnode_handle *fwnode; |
---|
| 88 | + bool of_node_reused; |
---|
71 | 89 | |
---|
72 | 90 | const char *name; |
---|
73 | 91 | int id; |
---|
.. | .. |
---|
79 | 97 | size_t size_data; |
---|
80 | 98 | u64 dma_mask; |
---|
81 | 99 | |
---|
82 | | - struct property_entry *properties; |
---|
| 100 | + const struct property_entry *properties; |
---|
| 101 | + |
---|
| 102 | + ANDROID_KABI_RESERVE(1); |
---|
83 | 103 | }; |
---|
84 | 104 | extern struct platform_device *platform_device_register_full( |
---|
85 | 105 | const struct platform_device_info *pdevinfo); |
---|
.. | .. |
---|
192 | 212 | struct device_driver driver; |
---|
193 | 213 | const struct platform_device_id *id_table; |
---|
194 | 214 | bool prevent_deferred_probe; |
---|
| 215 | + |
---|
| 216 | + ANDROID_KABI_RESERVE(1); |
---|
195 | 217 | }; |
---|
196 | 218 | |
---|
197 | 219 | #define to_platform_driver(drv) (container_of((drv), struct platform_driver, \ |
---|
.. | .. |
---|
233 | 255 | #define module_platform_driver(__platform_driver) \ |
---|
234 | 256 | module_driver(__platform_driver, platform_driver_register, \ |
---|
235 | 257 | platform_driver_unregister) |
---|
236 | | - |
---|
237 | | -#define module_platform_driver1(__platform_driver) \ |
---|
238 | | - module_driver1(__platform_driver, platform_driver_register, \ |
---|
239 | | - platform_driver_unregister) |
---|
240 | 258 | |
---|
241 | 259 | /* builtin_platform_driver() - Helper macro for builtin drivers that |
---|
242 | 260 | * don't do anything special in driver init. This eliminates some |
---|
.. | .. |
---|
294 | 312 | #define platform_register_drivers(drivers, count) \ |
---|
295 | 313 | __platform_register_drivers(drivers, count, THIS_MODULE) |
---|
296 | 314 | |
---|
297 | | -/* early platform driver interface */ |
---|
298 | | -struct early_platform_driver { |
---|
299 | | - const char *class_str; |
---|
300 | | - struct platform_driver *pdrv; |
---|
301 | | - struct list_head list; |
---|
302 | | - int requested_id; |
---|
303 | | - char *buffer; |
---|
304 | | - int bufsize; |
---|
305 | | -}; |
---|
306 | | - |
---|
307 | | -#define EARLY_PLATFORM_ID_UNSET -2 |
---|
308 | | -#define EARLY_PLATFORM_ID_ERROR -3 |
---|
309 | | - |
---|
310 | | -extern int early_platform_driver_register(struct early_platform_driver *epdrv, |
---|
311 | | - char *buf); |
---|
312 | | -extern void early_platform_add_devices(struct platform_device **devs, int num); |
---|
313 | | - |
---|
314 | | -static inline int is_early_platform_device(struct platform_device *pdev) |
---|
315 | | -{ |
---|
316 | | - return !pdev->dev.driver; |
---|
317 | | -} |
---|
318 | | - |
---|
319 | | -extern void early_platform_driver_register_all(char *class_str); |
---|
320 | | -extern int early_platform_driver_probe(char *class_str, |
---|
321 | | - int nr_probe, int user_only); |
---|
322 | | -extern void early_platform_cleanup(void); |
---|
323 | | - |
---|
324 | | -#define early_platform_init(class_string, platdrv) \ |
---|
325 | | - early_platform_init_buffer(class_string, platdrv, NULL, 0) |
---|
326 | | - |
---|
327 | | -#ifndef MODULE |
---|
328 | | -#define early_platform_init_buffer(class_string, platdrv, buf, bufsiz) \ |
---|
329 | | -static __initdata struct early_platform_driver early_driver = { \ |
---|
330 | | - .class_str = class_string, \ |
---|
331 | | - .buffer = buf, \ |
---|
332 | | - .bufsize = bufsiz, \ |
---|
333 | | - .pdrv = platdrv, \ |
---|
334 | | - .requested_id = EARLY_PLATFORM_ID_UNSET, \ |
---|
335 | | -}; \ |
---|
336 | | -static int __init early_platform_driver_setup_func(char *buffer) \ |
---|
337 | | -{ \ |
---|
338 | | - return early_platform_driver_register(&early_driver, buffer); \ |
---|
339 | | -} \ |
---|
340 | | -early_param(class_string, early_platform_driver_setup_func) |
---|
341 | | -#else /* MODULE */ |
---|
342 | | -#define early_platform_init_buffer(class_string, platdrv, buf, bufsiz) \ |
---|
343 | | -static inline char *early_platform_driver_setup_func(void) \ |
---|
344 | | -{ \ |
---|
345 | | - return bufsiz ? buf : NULL; \ |
---|
346 | | -} |
---|
347 | | -#endif /* MODULE */ |
---|
348 | | - |
---|
349 | 315 | #ifdef CONFIG_SUSPEND |
---|
350 | 316 | extern int platform_pm_suspend(struct device *dev); |
---|
351 | 317 | extern int platform_pm_resume(struct device *dev); |
---|
.. | .. |
---|
380 | 346 | #define USE_PLATFORM_PM_SLEEP_OPS |
---|
381 | 347 | #endif |
---|
382 | 348 | |
---|
| 349 | +#ifndef CONFIG_SUPERH |
---|
| 350 | +/* |
---|
| 351 | + * REVISIT: This stub is needed for all non-SuperH users of early platform |
---|
| 352 | + * drivers. It should go away once we introduce the new platform_device-based |
---|
| 353 | + * early driver framework. |
---|
| 354 | + */ |
---|
| 355 | +static inline int is_sh_early_platform_device(struct platform_device *pdev) |
---|
| 356 | +{ |
---|
| 357 | + return 0; |
---|
| 358 | +} |
---|
| 359 | +#endif /* CONFIG_SUPERH */ |
---|
| 360 | + |
---|
| 361 | +/* For now only SuperH uses it */ |
---|
| 362 | +void early_platform_cleanup(void); |
---|
| 363 | + |
---|
383 | 364 | #endif /* _PLATFORM_DEVICE_H_ */ |
---|