1 /* SPDX-License-Identifier: MIT */
2
3 #ifndef DRM_DISPLAY_HDMI_CEC_HELPER
4 #define DRM_DISPLAY_HDMI_CEC_HELPER
5
6 #include <linux/types.h>
7
8 struct drm_connector;
9
10 struct cec_msg;
11 struct device;
12
13 struct drm_connector_hdmi_cec_funcs {
14 /**
15 * @init: perform hardware-specific initialization before registering the CEC adapter
16 */
17 int (*init)(struct drm_connector *connector);
18
19 /**
20 * @uninit: perform hardware-specific teardown for the CEC adapter
21 */
22 void (*uninit)(struct drm_connector *connector);
23
24 /**
25 * @enable: enable or disable CEC adapter
26 */
27 int (*enable)(struct drm_connector *connector, bool enable);
28
29 /**
30 * @log_addr: set adapter's logical address, can be called multiple
31 * times if adapter supports several LAs
32 */
33 int (*log_addr)(struct drm_connector *connector, u8 logical_addr);
34
35 /**
36 * @transmit: start transmission of the specified CEC message
37 */
38 int (*transmit)(struct drm_connector *connector, u8 attempts,
39 u32 signal_free_time, struct cec_msg *msg);
40 };
41
42 int drmm_connector_hdmi_cec_register(struct drm_connector *connector,
43 const struct drm_connector_hdmi_cec_funcs *funcs,
44 const char *name,
45 u8 available_las,
46 struct device *dev);
47
48 void drm_connector_hdmi_cec_received_msg(struct drm_connector *connector,
49 struct cec_msg *msg);
50
51 void drm_connector_hdmi_cec_transmit_done(struct drm_connector *connector,
52 u8 status,
53 u8 arb_lost_cnt, u8 nack_cnt,
54 u8 low_drive_cnt, u8 error_cnt);
55
56 void drm_connector_hdmi_cec_transmit_attempt_done(struct drm_connector *connector,
57 u8 status);
58
59 #if IS_ENABLED(CONFIG_DRM_DISPLAY_HDMI_CEC_NOTIFIER_HELPER)
60 int drmm_connector_hdmi_cec_notifier_register(struct drm_connector *connector,
61 const char *port_name,
62 struct device *dev);
63 #else
drmm_connector_hdmi_cec_notifier_register(struct drm_connector * connector,const char * port_name,struct device * dev)64 static inline int drmm_connector_hdmi_cec_notifier_register(struct drm_connector *connector,
65 const char *port_name,
66 struct device *dev)
67 {
68 return 0;
69 }
70 #endif
71
72 #endif
73