dp_drm.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
  4. */
  5. #ifndef _DP_DRM_H_
  6. #define _DP_DRM_H_
  7. #include <linux/types.h>
  8. #include <drm/drmP.h>
  9. #include <drm/drm_crtc.h>
  10. #include <drm/drm_crtc_helper.h>
  11. #include "msm_drv.h"
  12. #include "dp_display.h"
  13. struct dp_bridge {
  14. struct drm_bridge base;
  15. u32 id;
  16. struct drm_connector *connector;
  17. struct dp_display *display;
  18. struct dp_display_mode dp_mode;
  19. void *dp_panel;
  20. };
  21. #ifdef CONFIG_DRM_MSM_DP
  22. /**
  23. * dp_connector_config_hdr - callback to configure HDR
  24. * @connector: Pointer to drm connector structure
  25. * @display: Pointer to private display handle
  26. * @c_state: connect state data
  27. * Returns: Zero on success
  28. */
  29. int dp_connector_config_hdr(struct drm_connector *connector,
  30. void *display,
  31. struct sde_connector_state *c_state);
  32. /**
  33. * dp_connector_post_init - callback to perform additional initialization steps
  34. * @connector: Pointer to drm connector structure
  35. * @display: Pointer to private display handle
  36. * Returns: Zero on success
  37. */
  38. int dp_connector_post_init(struct drm_connector *connector, void *display);
  39. /**
  40. * dp_connector_detect - callback to determine if connector is connected
  41. * @connector: Pointer to drm connector structure
  42. * @force: Force detect setting from drm framework
  43. * @display: Pointer to private display handle
  44. * Returns: Connector 'is connected' status
  45. */
  46. enum drm_connector_status dp_connector_detect(struct drm_connector *conn,
  47. bool force,
  48. void *display);
  49. /**
  50. * dp_connector_get_modes - callback to add drm modes via drm_mode_probed_add()
  51. * @connector: Pointer to drm connector structure
  52. * @display: Pointer to private display handle
  53. * Returns: Number of modes added
  54. */
  55. int dp_connector_get_modes(struct drm_connector *connector,
  56. void *display);
  57. /**
  58. * dp_connector_mode_valid - callback to determine if specified mode is valid
  59. * @connector: Pointer to drm connector structure
  60. * @mode: Pointer to drm mode structure
  61. * @display: Pointer to private display handle
  62. * Returns: Validity status for specified mode
  63. */
  64. enum drm_mode_status dp_connector_mode_valid(struct drm_connector *connector,
  65. struct drm_display_mode *mode,
  66. void *display);
  67. /**
  68. * dp_connector_get_mode_info - retrieve information of the mode selected
  69. * @connector: Pointer to drm connector structure
  70. * @drm_mode: Display mode set for the display
  71. * @mode_info: Out parameter. Information of the mode
  72. * @max_mixer_width: max width supported by HW layer mixer
  73. * @display: Pointer to private display structure
  74. * Returns: zero on success
  75. */
  76. int dp_connector_get_mode_info(struct drm_connector *connector,
  77. const struct drm_display_mode *drm_mode,
  78. struct msm_mode_info *mode_info,
  79. u32 max_mixer_width, void *display);
  80. /**
  81. * dp_connector_get_info - retrieve connector display info
  82. * @connector: Pointer to drm connector structure
  83. * @info: Out parameter. Information of the connected display
  84. * @display: Pointer to private display structure
  85. * Returns: zero on success
  86. */
  87. int dp_connector_get_info(struct drm_connector *connector,
  88. struct msm_display_info *info, void *display);
  89. /**
  90. * dp_connector_post_open - handle the post open functionalites
  91. * @connector: Pointer to drm connector structure
  92. * @display: Pointer to private display structure
  93. */
  94. void dp_connector_post_open(struct drm_connector *connector, void *display);
  95. int dp_drm_bridge_init(void *display,
  96. struct drm_encoder *encoder);
  97. void dp_drm_bridge_deinit(void *display);
  98. /**
  99. * convert_to_drm_mode - convert dp mode to drm mode
  100. * @dp_mode: Point to dp mode
  101. * @drm_mode: Pointer to drm mode
  102. */
  103. void convert_to_drm_mode(const struct dp_display_mode *dp_mode,
  104. struct drm_display_mode *drm_mode);
  105. /**
  106. * dp_connector_update_pps - update pps for given connector
  107. * @dp_mode: Point to dp mode
  108. * @pps_cmd: PPS packet
  109. * @display: Pointer to private display structure
  110. */
  111. int dp_connector_update_pps(struct drm_connector *connector,
  112. char *pps_cmd, void *display);
  113. /**
  114. * dp_mst_drm_bridge_init - initialize mst bridge
  115. * @display: Pointer to private display structure
  116. * @encoder: Pointer to encoder for mst bridge mapping
  117. */
  118. int dp_mst_drm_bridge_init(void *display,
  119. struct drm_encoder *encoder);
  120. /**
  121. * dp_mst_drm_bridge_deinit - de-initialize mst bridges
  122. * @display: Pointer to private display structure
  123. */
  124. void dp_mst_drm_bridge_deinit(void *display);
  125. /**
  126. * dp_mst_init - initialize mst objects for the given display
  127. * @display: Pointer to private display structure
  128. */
  129. int dp_mst_init(struct dp_display *dp_display);
  130. /**
  131. * dp_mst_deinit - de-initialize mst objects for the given display
  132. * @display: Pointer to private display structure
  133. */
  134. void dp_mst_deinit(struct dp_display *dp_display);
  135. #else
  136. static inline int dp_connector_config_hdr(struct drm_connector *connector,
  137. void *display, struct sde_connector_state *c_state)
  138. {
  139. return 0;
  140. }
  141. static inline int dp_connector_post_init(struct drm_connector *connector,
  142. void *display)
  143. {
  144. return 0;
  145. }
  146. static inline enum drm_connector_status dp_connector_detect(
  147. struct drm_connector *conn,
  148. bool force,
  149. void *display)
  150. {
  151. return 0;
  152. }
  153. static inline int dp_connector_get_modes(struct drm_connector *connector,
  154. void *display)
  155. {
  156. return 0;
  157. }
  158. static inline enum drm_mode_status dp_connector_mode_valid(
  159. struct drm_connector *connector,
  160. struct drm_display_mode *mode,
  161. void *display)
  162. {
  163. return MODE_OK;
  164. }
  165. static inline int dp_connector_get_mode_info(struct drm_connector *connector,
  166. const struct drm_display_mode *drm_mode,
  167. struct msm_mode_info *mode_info,
  168. u32 max_mixer_width, void *display)
  169. {
  170. return 0;
  171. }
  172. static inline int dp_connector_get_info(struct drm_connector *connector,
  173. struct msm_display_info *info, void *display)
  174. {
  175. return 0;
  176. }
  177. static inline void dp_connector_post_open(struct drm_connector *connector,
  178. void *display)
  179. {
  180. }
  181. static inline int dp_drm_bridge_init(void *display, struct drm_encoder *encoder)
  182. {
  183. return 0;
  184. }
  185. static inline void dp_drm_bridge_deinit(void *display)
  186. {
  187. }
  188. static inline void convert_to_drm_mode(const struct dp_display_mode *dp_mode,
  189. struct drm_display_mode *drm_mode)
  190. {
  191. }
  192. static inline int dp_mst_drm_bridge_init(void *display,
  193. struct drm_encoder *encoder)
  194. {
  195. return 0;
  196. }
  197. static inline void dp_mst_drm_bridge_deinit(void *display)
  198. {
  199. }
  200. static inline int dp_mst_init(struct dp_display *dp_display)
  201. {
  202. return 0;
  203. }
  204. static inline int dp_mst_deinit(struct dp_display *dp_display)
  205. {
  206. return 0;
  207. }
  208. #endif
  209. #endif /* _DP_DRM_H_ */