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 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