drm_hdmi_cec_helper.h 1.9 KB

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