drm_audio_component.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. // SPDX-License-Identifier: MIT
  2. // Copyright © 2014 Intel Corporation
  3. #ifndef _DRM_AUDIO_COMPONENT_H_
  4. #define _DRM_AUDIO_COMPONENT_H_
  5. struct drm_audio_component;
  6. struct device;
  7. /**
  8. * struct drm_audio_component_ops - Ops implemented by DRM driver, called by hda driver
  9. */
  10. struct drm_audio_component_ops {
  11. /**
  12. * @owner: drm module to pin down
  13. */
  14. struct module *owner;
  15. /**
  16. * @get_power: get the POWER_DOMAIN_AUDIO power well
  17. *
  18. * Request the power well to be turned on.
  19. *
  20. * Returns a wakeref cookie to be passed back to the corresponding
  21. * call to @put_power.
  22. */
  23. unsigned long (*get_power)(struct device *);
  24. /**
  25. * @put_power: put the POWER_DOMAIN_AUDIO power well
  26. *
  27. * Allow the power well to be turned off.
  28. */
  29. void (*put_power)(struct device *, unsigned long);
  30. /**
  31. * @codec_wake_override: Enable/disable codec wake signal
  32. */
  33. void (*codec_wake_override)(struct device *, bool enable);
  34. /**
  35. * @get_cdclk_freq: Get the Core Display Clock in kHz
  36. */
  37. int (*get_cdclk_freq)(struct device *);
  38. /**
  39. * @sync_audio_rate: set n/cts based on the sample rate
  40. *
  41. * Called from audio driver. After audio driver sets the
  42. * sample rate, it will call this function to set n/cts
  43. */
  44. int (*sync_audio_rate)(struct device *, int port, int pipe, int rate);
  45. /**
  46. * @get_eld: fill the audio state and ELD bytes for the given port
  47. *
  48. * Called from audio driver to get the HDMI/DP audio state of the given
  49. * digital port, and also fetch ELD bytes to the given pointer.
  50. *
  51. * It returns the byte size of the original ELD (not the actually
  52. * copied size), zero for an invalid ELD, or a negative error code.
  53. *
  54. * Note that the returned size may be over @max_bytes. Then it
  55. * implies that only a part of ELD has been copied to the buffer.
  56. */
  57. int (*get_eld)(struct device *, int port, int pipe, bool *enabled,
  58. unsigned char *buf, int max_bytes);
  59. };
  60. /**
  61. * struct drm_audio_component_audio_ops - Ops implemented by hda driver, called by DRM driver
  62. */
  63. struct drm_audio_component_audio_ops {
  64. /**
  65. * @audio_ptr: Pointer to be used in call to pin_eld_notify
  66. */
  67. void *audio_ptr;
  68. /**
  69. * @pin_eld_notify: Notify the HDA driver that pin sense and/or ELD information has changed
  70. *
  71. * Called when the DRM driver has set up audio pipeline or has just
  72. * begun to tear it down. This allows the HDA driver to update its
  73. * status accordingly (even when the HDA controller is in power save
  74. * mode).
  75. */
  76. void (*pin_eld_notify)(void *audio_ptr, int port, int pipe);
  77. /**
  78. * @pin2port: Check and convert from pin node to port number
  79. *
  80. * Called by HDA driver to check and convert from the pin widget node
  81. * number to a port number in the graphics side.
  82. */
  83. int (*pin2port)(void *audio_ptr, int pin);
  84. /**
  85. * @master_bind: (Optional) component master bind callback
  86. *
  87. * Called at binding master component, for HDA codec-specific
  88. * handling of dynamic binding.
  89. */
  90. int (*master_bind)(struct device *dev, struct drm_audio_component *);
  91. /**
  92. * @master_unbind: (Optional) component master unbind callback
  93. *
  94. * Called at unbinding master component, for HDA codec-specific
  95. * handling of dynamic unbinding.
  96. */
  97. void (*master_unbind)(struct device *dev, struct drm_audio_component *);
  98. };
  99. /**
  100. * struct drm_audio_component - Used for direct communication between DRM and hda drivers
  101. */
  102. struct drm_audio_component {
  103. /**
  104. * @dev: DRM device, used as parameter for ops
  105. */
  106. struct device *dev;
  107. /**
  108. * @ops: Ops implemented by DRM driver, called by hda driver
  109. */
  110. const struct drm_audio_component_ops *ops;
  111. /**
  112. * @audio_ops: Ops implemented by hda driver, called by DRM driver
  113. */
  114. const struct drm_audio_component_audio_ops *audio_ops;
  115. /**
  116. * @master_bind_complete: completion held during component master binding
  117. */
  118. struct completion master_bind_complete;
  119. };
  120. #endif /* _DRM_AUDIO_COMPONENT_H_ */