1
2
3
4
5
6
7
8
9#ifndef __GBPHY_H
10#define __GBPHY_H
11
12struct gbphy_device {
13 u32 id;
14 struct greybus_descriptor_cport *cport_desc;
15 struct gb_bundle *bundle;
16 struct list_head list;
17 struct device dev;
18};
19#define to_gbphy_dev(d) container_of(d, struct gbphy_device, dev)
20
21static inline void *gb_gbphy_get_data(struct gbphy_device *gdev)
22{
23 return dev_get_drvdata(&gdev->dev);
24}
25
26static inline void gb_gbphy_set_data(struct gbphy_device *gdev, void *data)
27{
28 dev_set_drvdata(&gdev->dev, data);
29}
30
31struct gbphy_device_id {
32 __u8 protocol_id;
33};
34
35#define GBPHY_PROTOCOL(p) \
36 .protocol_id = (p),
37
38struct gbphy_driver {
39 const char *name;
40 int (*probe)(struct gbphy_device *,
41 const struct gbphy_device_id *id);
42 void (*remove)(struct gbphy_device *);
43 const struct gbphy_device_id *id_table;
44
45 struct device_driver driver;
46};
47#define to_gbphy_driver(d) container_of(d, struct gbphy_driver, driver)
48
49int gb_gbphy_register_driver(struct gbphy_driver *driver,
50 struct module *owner, const char *mod_name);
51void gb_gbphy_deregister_driver(struct gbphy_driver *driver);
52
53#define gb_gbphy_register(driver) \
54 gb_gbphy_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
55#define gb_gbphy_deregister(driver) \
56 gb_gbphy_deregister_driver(driver)
57
58
59
60
61
62
63
64
65
66#define module_gbphy_driver(__gbphy_driver) \
67 module_driver(__gbphy_driver, gb_gbphy_register, gb_gbphy_deregister)
68
69#ifdef CONFIG_PM
70static inline int gbphy_runtime_get_sync(struct gbphy_device *gbphy_dev)
71{
72 struct device *dev = &gbphy_dev->dev;
73 int ret;
74
75 ret = pm_runtime_get_sync(dev);
76 if (ret < 0) {
77 dev_err(dev, "pm_runtime_get_sync failed: %d\n", ret);
78 pm_runtime_put_noidle(dev);
79 return ret;
80 }
81
82 return 0;
83}
84
85static inline void gbphy_runtime_put_autosuspend(struct gbphy_device *gbphy_dev)
86{
87 struct device *dev = &gbphy_dev->dev;
88
89 pm_runtime_mark_last_busy(dev);
90 pm_runtime_put_autosuspend(dev);
91}
92
93static inline void gbphy_runtime_get_noresume(struct gbphy_device *gbphy_dev)
94{
95 pm_runtime_get_noresume(&gbphy_dev->dev);
96}
97
98static inline void gbphy_runtime_put_noidle(struct gbphy_device *gbphy_dev)
99{
100 pm_runtime_put_noidle(&gbphy_dev->dev);
101}
102#else
103static inline int gbphy_runtime_get_sync(struct gbphy_device *gbphy_dev) { return 0; }
104static inline void gbphy_runtime_put_autosuspend(struct gbphy_device *gbphy_dev) {}
105static inline void gbphy_runtime_get_noresume(struct gbphy_device *gbphy_dev) {}
106static inline void gbphy_runtime_put_noidle(struct gbphy_device *gbphy_dev) {}
107#endif
108
109#endif
110
111