4 #include <linux/device.h>
5 #include <linux/mod_devicetable.h>
8 struct qcom_smd_channel
;
9 struct qcom_smd_lookup
;
12 * struct qcom_smd_id - struct used for matching a smd device
13 * @name: name of the channel
20 * struct qcom_smd_device - smd device struct
21 * @dev: the device struct
22 * @channel: handle to the smd channel for this device
24 struct qcom_smd_device
{
26 struct qcom_smd_channel
*channel
;
29 typedef int (*qcom_smd_cb_t
)(struct qcom_smd_channel
*, const void *, size_t);
32 * struct qcom_smd_driver - smd driver struct
33 * @driver: underlying device driver
34 * @smd_match_table: static channel match table
35 * @probe: invoked when the smd channel is found
36 * @remove: invoked when the smd channel is closed
37 * @callback: invoked when an inbound message is received on the channel,
38 * should return 0 on success or -EBUSY if the data cannot be
39 * consumed at this time
41 struct qcom_smd_driver
{
42 struct device_driver driver
;
43 const struct qcom_smd_id
*smd_match_table
;
45 int (*probe
)(struct qcom_smd_device
*dev
);
46 void (*remove
)(struct qcom_smd_device
*dev
);
47 qcom_smd_cb_t callback
;
50 #if IS_ENABLED(CONFIG_QCOM_SMD)
52 int qcom_smd_driver_register(struct qcom_smd_driver
*drv
);
53 void qcom_smd_driver_unregister(struct qcom_smd_driver
*drv
);
55 struct qcom_smd_channel
*qcom_smd_open_channel(struct qcom_smd_channel
*channel
,
58 void qcom_smd_close_channel(struct qcom_smd_channel
*channel
);
59 void *qcom_smd_get_drvdata(struct qcom_smd_channel
*channel
);
60 void qcom_smd_set_drvdata(struct qcom_smd_channel
*channel
, void *data
);
61 int qcom_smd_send(struct qcom_smd_channel
*channel
, const void *data
, int len
);
64 struct qcom_smd_edge
*qcom_smd_register_edge(struct device
*parent
,
65 struct device_node
*node
);
66 int qcom_smd_unregister_edge(struct qcom_smd_edge
*edge
);
70 static inline int qcom_smd_driver_register(struct qcom_smd_driver
*drv
)
75 static inline void qcom_smd_driver_unregister(struct qcom_smd_driver
*drv
)
77 /* This shouldn't be possible */
81 static inline struct qcom_smd_channel
*
82 qcom_smd_open_channel(struct qcom_smd_channel
*channel
,
86 /* This shouldn't be possible */
91 static inline void qcom_smd_close_channel(struct qcom_smd_channel
*channel
)
93 /* This shouldn't be possible */
97 static inline void *qcom_smd_get_drvdata(struct qcom_smd_channel
*channel
)
99 /* This shouldn't be possible */
104 static inline void qcom_smd_set_drvdata(struct qcom_smd_channel
*channel
, void *data
)
106 /* This shouldn't be possible */
110 static inline int qcom_smd_send(struct qcom_smd_channel
*channel
,
111 const void *data
, int len
)
113 /* This shouldn't be possible */
118 static inline struct qcom_smd_edge
*
119 qcom_smd_register_edge(struct device
*parent
,
120 struct device_node
*node
)
122 return ERR_PTR(-ENXIO
);
125 static inline int qcom_smd_unregister_edge(struct qcom_smd_edge
*edge
)
127 /* This shouldn't be possible */
134 #define module_qcom_smd_driver(__smd_driver) \
135 module_driver(__smd_driver, qcom_smd_driver_register, \
136 qcom_smd_driver_unregister)
This page took 0.044287 seconds and 5 git commands to generate.