18c2ecf20Sopenharmony_ci/* SPDX--License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci 38c2ecf20Sopenharmony_ci#ifndef __PLATFORM_EARLY__ 48c2ecf20Sopenharmony_ci#define __PLATFORM_EARLY__ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include <linux/types.h> 78c2ecf20Sopenharmony_ci#include <linux/platform_device.h> 88c2ecf20Sopenharmony_ci#include <linux/pm_runtime.h> 98c2ecf20Sopenharmony_ci#include <linux/slab.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cistruct sh_early_platform_driver { 128c2ecf20Sopenharmony_ci const char *class_str; 138c2ecf20Sopenharmony_ci struct platform_driver *pdrv; 148c2ecf20Sopenharmony_ci struct list_head list; 158c2ecf20Sopenharmony_ci int requested_id; 168c2ecf20Sopenharmony_ci char *buffer; 178c2ecf20Sopenharmony_ci int bufsize; 188c2ecf20Sopenharmony_ci}; 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#define EARLY_PLATFORM_ID_UNSET -2 218c2ecf20Sopenharmony_ci#define EARLY_PLATFORM_ID_ERROR -3 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ciextern int sh_early_platform_driver_register(struct sh_early_platform_driver *epdrv, 248c2ecf20Sopenharmony_ci char *buf); 258c2ecf20Sopenharmony_ciextern void sh_early_platform_add_devices(struct platform_device **devs, int num); 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_cistatic inline int is_sh_early_platform_device(struct platform_device *pdev) 288c2ecf20Sopenharmony_ci{ 298c2ecf20Sopenharmony_ci return !pdev->dev.driver; 308c2ecf20Sopenharmony_ci} 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ciextern void sh_early_platform_driver_register_all(char *class_str); 338c2ecf20Sopenharmony_ciextern int sh_early_platform_driver_probe(char *class_str, 348c2ecf20Sopenharmony_ci int nr_probe, int user_only); 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci#define sh_early_platform_init(class_string, platdrv) \ 378c2ecf20Sopenharmony_ci sh_early_platform_init_buffer(class_string, platdrv, NULL, 0) 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci#ifndef MODULE 408c2ecf20Sopenharmony_ci#define sh_early_platform_init_buffer(class_string, platdrv, buf, bufsiz) \ 418c2ecf20Sopenharmony_cistatic __initdata struct sh_early_platform_driver early_driver = { \ 428c2ecf20Sopenharmony_ci .class_str = class_string, \ 438c2ecf20Sopenharmony_ci .buffer = buf, \ 448c2ecf20Sopenharmony_ci .bufsize = bufsiz, \ 458c2ecf20Sopenharmony_ci .pdrv = platdrv, \ 468c2ecf20Sopenharmony_ci .requested_id = EARLY_PLATFORM_ID_UNSET, \ 478c2ecf20Sopenharmony_ci}; \ 488c2ecf20Sopenharmony_cistatic int __init sh_early_platform_driver_setup_func(char *buffer) \ 498c2ecf20Sopenharmony_ci{ \ 508c2ecf20Sopenharmony_ci return sh_early_platform_driver_register(&early_driver, buffer); \ 518c2ecf20Sopenharmony_ci} \ 528c2ecf20Sopenharmony_ciearly_param(class_string, sh_early_platform_driver_setup_func) 538c2ecf20Sopenharmony_ci#else /* MODULE */ 548c2ecf20Sopenharmony_ci#define sh_early_platform_init_buffer(class_string, platdrv, buf, bufsiz) \ 558c2ecf20Sopenharmony_cistatic inline char *sh_early_platform_driver_setup_func(void) \ 568c2ecf20Sopenharmony_ci{ \ 578c2ecf20Sopenharmony_ci return bufsiz ? buf : NULL; \ 588c2ecf20Sopenharmony_ci} 598c2ecf20Sopenharmony_ci#endif /* MODULE */ 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci#endif /* __PLATFORM_EARLY__ */ 62