| .. | .. |
|---|
| 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) |
|---|
| 258 | + |
|---|
| 259 | + |
|---|
| 260 | +#define module_platform_driver1(__platform_driver) \ |
|---|
| 261 | + module_driver1(__platform_driver, platform_driver_register, \ |
|---|
| 262 | + platform_driver_unregister) |
|---|
| 236 | 263 | |
|---|
| 237 | 264 | /* builtin_platform_driver() - Helper macro for builtin drivers that |
|---|
| 238 | 265 | * don't do anything special in driver init. This eliminates some |
|---|
| .. | .. |
|---|
| 290 | 317 | #define platform_register_drivers(drivers, count) \ |
|---|
| 291 | 318 | __platform_register_drivers(drivers, count, THIS_MODULE) |
|---|
| 292 | 319 | |
|---|
| 293 | | -/* early platform driver interface */ |
|---|
| 294 | | -struct early_platform_driver { |
|---|
| 295 | | - const char *class_str; |
|---|
| 296 | | - struct platform_driver *pdrv; |
|---|
| 297 | | - struct list_head list; |
|---|
| 298 | | - int requested_id; |
|---|
| 299 | | - char *buffer; |
|---|
| 300 | | - int bufsize; |
|---|
| 301 | | -}; |
|---|
| 302 | | - |
|---|
| 303 | | -#define EARLY_PLATFORM_ID_UNSET -2 |
|---|
| 304 | | -#define EARLY_PLATFORM_ID_ERROR -3 |
|---|
| 305 | | - |
|---|
| 306 | | -extern int early_platform_driver_register(struct early_platform_driver *epdrv, |
|---|
| 307 | | - char *buf); |
|---|
| 308 | | -extern void early_platform_add_devices(struct platform_device **devs, int num); |
|---|
| 309 | | - |
|---|
| 310 | | -static inline int is_early_platform_device(struct platform_device *pdev) |
|---|
| 311 | | -{ |
|---|
| 312 | | - return !pdev->dev.driver; |
|---|
| 313 | | -} |
|---|
| 314 | | - |
|---|
| 315 | | -extern void early_platform_driver_register_all(char *class_str); |
|---|
| 316 | | -extern int early_platform_driver_probe(char *class_str, |
|---|
| 317 | | - int nr_probe, int user_only); |
|---|
| 318 | | -extern void early_platform_cleanup(void); |
|---|
| 319 | | - |
|---|
| 320 | | -#define early_platform_init(class_string, platdrv) \ |
|---|
| 321 | | - early_platform_init_buffer(class_string, platdrv, NULL, 0) |
|---|
| 322 | | - |
|---|
| 323 | | -#ifndef MODULE |
|---|
| 324 | | -#define early_platform_init_buffer(class_string, platdrv, buf, bufsiz) \ |
|---|
| 325 | | -static __initdata struct early_platform_driver early_driver = { \ |
|---|
| 326 | | - .class_str = class_string, \ |
|---|
| 327 | | - .buffer = buf, \ |
|---|
| 328 | | - .bufsize = bufsiz, \ |
|---|
| 329 | | - .pdrv = platdrv, \ |
|---|
| 330 | | - .requested_id = EARLY_PLATFORM_ID_UNSET, \ |
|---|
| 331 | | -}; \ |
|---|
| 332 | | -static int __init early_platform_driver_setup_func(char *buffer) \ |
|---|
| 333 | | -{ \ |
|---|
| 334 | | - return early_platform_driver_register(&early_driver, buffer); \ |
|---|
| 335 | | -} \ |
|---|
| 336 | | -early_param(class_string, early_platform_driver_setup_func) |
|---|
| 337 | | -#else /* MODULE */ |
|---|
| 338 | | -#define early_platform_init_buffer(class_string, platdrv, buf, bufsiz) \ |
|---|
| 339 | | -static inline char *early_platform_driver_setup_func(void) \ |
|---|
| 340 | | -{ \ |
|---|
| 341 | | - return bufsiz ? buf : NULL; \ |
|---|
| 342 | | -} |
|---|
| 343 | | -#endif /* MODULE */ |
|---|
| 344 | | - |
|---|
| 345 | 320 | #ifdef CONFIG_SUSPEND |
|---|
| 346 | 321 | extern int platform_pm_suspend(struct device *dev); |
|---|
| 347 | 322 | extern int platform_pm_resume(struct device *dev); |
|---|
| .. | .. |
|---|
| 376 | 351 | #define USE_PLATFORM_PM_SLEEP_OPS |
|---|
| 377 | 352 | #endif |
|---|
| 378 | 353 | |
|---|
| 354 | +#ifndef CONFIG_SUPERH |
|---|
| 355 | +/* |
|---|
| 356 | + * REVISIT: This stub is needed for all non-SuperH users of early platform |
|---|
| 357 | + * drivers. It should go away once we introduce the new platform_device-based |
|---|
| 358 | + * early driver framework. |
|---|
| 359 | + */ |
|---|
| 360 | +static inline int is_sh_early_platform_device(struct platform_device *pdev) |
|---|
| 361 | +{ |
|---|
| 362 | + return 0; |
|---|
| 363 | +} |
|---|
| 364 | +#endif /* CONFIG_SUPERH */ |
|---|
| 365 | + |
|---|
| 366 | +/* For now only SuperH uses it */ |
|---|
| 367 | +void early_platform_cleanup(void); |
|---|
| 368 | + |
|---|
| 379 | 369 | #endif /* _PLATFORM_DEVICE_H_ */ |
|---|