Line data Source code
1 : /*
2 : * platform_device.h - generic, centralized driver model
3 : *
4 : * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org>
5 : *
6 : * This file is released under the GPLv2
7 : *
8 : * See Documentation/driver-model/ for more information.
9 : */
10 :
11 : #ifndef _PLATFORM_DEVICE_H_
12 : #define _PLATFORM_DEVICE_H_
13 :
14 : #include <linux/device.h>
15 : #include <linux/mod_devicetable.h>
16 :
17 : struct platform_device {
18 : const char * name;
19 : int id;
20 : struct device dev;
21 : u32 num_resources;
22 : struct resource * resource;
23 :
24 : struct platform_device_id *id_entry;
25 :
26 : /* arch specific additions */
27 : struct pdev_archdata archdata;
28 : };
29 :
30 : #define platform_get_device_id(pdev) ((pdev)->id_entry)
31 :
32 : #define to_platform_device(x) container_of((x), struct platform_device, dev)
33 :
34 : extern int platform_device_register(struct platform_device *);
35 : extern void platform_device_unregister(struct platform_device *);
36 :
37 : extern struct bus_type platform_bus_type;
38 : extern struct device platform_bus;
39 :
40 : extern struct resource *platform_get_resource(struct platform_device *, unsigned int, unsigned int);
41 : extern int platform_get_irq(struct platform_device *, unsigned int);
42 : extern struct resource *platform_get_resource_byname(struct platform_device *, unsigned int, const char *);
43 : extern int platform_get_irq_byname(struct platform_device *, const char *);
44 : extern int platform_add_devices(struct platform_device **, int);
45 :
46 : extern struct platform_device *platform_device_register_simple(const char *, int id,
47 : struct resource *, unsigned int);
48 : extern struct platform_device *platform_device_register_data(struct device *,
49 : const char *, int, const void *, size_t);
50 :
51 : extern struct platform_device *platform_device_alloc(const char *name, int id);
52 : extern int platform_device_add_resources(struct platform_device *pdev, struct resource *res, unsigned int num);
53 : extern int platform_device_add_data(struct platform_device *pdev, const void *data, size_t size);
54 : extern int platform_device_add(struct platform_device *pdev);
55 : extern void platform_device_del(struct platform_device *pdev);
56 : extern void platform_device_put(struct platform_device *pdev);
57 1 :
58 : struct platform_driver {
59 : int (*probe)(struct platform_device *);
60 : int (*remove)(struct platform_device *);
61 : void (*shutdown)(struct platform_device *);
62 : int (*suspend)(struct platform_device *, pm_message_t state);
63 : int (*resume)(struct platform_device *);
64 : struct device_driver driver;
65 : struct platform_device_id *id_table;
66 : };
67 :
68 : extern int platform_driver_register(struct platform_driver *);
69 : extern void platform_driver_unregister(struct platform_driver *);
70 :
71 : /* non-hotpluggable platform devices may use this so that probe() and
72 : * its support may live in __init sections, conserving runtime memory.
73 : */
74 : extern int platform_driver_probe(struct platform_driver *driver,
75 : int (*probe)(struct platform_device *));
76 :
77 : #define platform_get_drvdata(_dev) dev_get_drvdata(&(_dev)->dev)
78 : #define platform_set_drvdata(_dev,data) dev_set_drvdata(&(_dev)->dev, (data))
79 :
80 : /* early platform driver interface */
81 : struct early_platform_driver {
82 : const char *class_str;
83 : struct platform_driver *pdrv;
84 : struct list_head list;
85 : int requested_id;
86 : char *buffer;
87 : int bufsize;
88 : };
89 :
90 : #define EARLY_PLATFORM_ID_UNSET -2
91 : #define EARLY_PLATFORM_ID_ERROR -3
92 :
93 : extern int early_platform_driver_register(struct early_platform_driver *epdrv,
94 : char *buf);
95 : extern void early_platform_add_devices(struct platform_device **devs, int num);
96 :
97 : static inline int is_early_platform_device(struct platform_device *pdev)
98 : {
99 : return !pdev->dev.driver;
100 : }
101 :
102 : extern void early_platform_driver_register_all(char *class_str);
103 : extern int early_platform_driver_probe(char *class_str,
104 : int nr_probe, int user_only);
105 : extern void early_platform_cleanup(void);
106 :
107 : #define early_platform_init(class_string, platdrv) \
108 : early_platform_init_buffer(class_string, platdrv, NULL, 0)
109 :
110 : #ifndef MODULE
111 : #define early_platform_init_buffer(class_string, platdrv, buf, bufsiz) \
112 : static __initdata struct early_platform_driver early_driver = { \
113 : .class_str = class_string, \
114 : .buffer = buf, \
115 : .bufsize = bufsiz, \
116 : .pdrv = platdrv, \
117 : .requested_id = EARLY_PLATFORM_ID_UNSET, \
118 1 : }; \
119 : static int __init early_platform_driver_setup_func(char *buffer) \
120 : { \
121 : return early_platform_driver_register(&early_driver, buffer); \
122 : } \
123 : early_param(class_string, early_platform_driver_setup_func)
124 : #else /* MODULE */
125 : #define early_platform_init_buffer(class_string, platdrv, buf, bufsiz) \
126 : static inline char *early_platform_driver_setup_func(void) \
127 : { \
128 : return bufsiz ? buf : NULL; \
129 : }
130 : #endif /* MODULE */
131 :
132 : #endif /* _PLATFORM_DEVICE_H_ */
|