dp_drm.h 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  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 "msm_drv.h"
  11. #include "dp_display.h"
  12. struct dp_bridge {
  13. struct drm_bridge base;
  14. u32 id;
  15. struct drm_connector *connector;
  16. struct dp_display *display;
  17. struct dp_display_mode dp_mode;
  18. void *dp_panel;
  19. };
  20. #ifdef CONFIG_DRM_MSM_DP
  21. /**
  22. * dp_connector_config_hdr - callback to configure HDR
  23. * @connector: Pointer to drm connector structure
  24. * @display: Pointer to private display handle
  25. * @c_state: connect state data
  26. * Returns: Zero on success
  27. */
  28. int dp_connector_config_hdr(struct drm_connector *connector,
  29. void *display,
  30. struct sde_connector_state *c_state);
  31. /**
  32. * dp_connector_atomic_check - callback to perform atomic
  33. * check for DP
  34. * @connector: Pointer to drm connector structure
  35. * @display: Pointer to private display handle
  36. * @c_state: connect state data
  37. * Returns: Zero on success
  38. */
  39. int dp_connector_atomic_check(struct drm_connector *connector,
  40. void *display,
  41. struct drm_atomic_state *state);
  42. /**
  43. * dp_connector_set_colorspace - callback to set new colorspace
  44. * @connector: Pointer to drm connector structure
  45. * @display: Pointer to private display handle
  46. * Returns: Zero on success
  47. */
  48. int dp_connector_set_colorspace(struct drm_connector *connector,
  49. void *display);
  50. /**
  51. * dp_connector_post_init - callback to perform additional initialization steps
  52. * @connector: Pointer to drm connector structure
  53. * @display: Pointer to private display handle
  54. * Returns: Zero on success
  55. */
  56. int dp_connector_post_init(struct drm_connector *connector, void *display);
  57. /**
  58. * dp_connector_detect - callback to determine if connector is connected
  59. * @connector: Pointer to drm connector structure
  60. * @force: Force detect setting from drm framework
  61. * @display: Pointer to private display handle
  62. * Returns: Connector 'is connected' status
  63. */
  64. enum drm_connector_status dp_connector_detect(struct drm_connector *conn,
  65. bool force,
  66. void *display);
  67. /**
  68. * dp_connector_get_modes - callback to add drm modes via drm_mode_probed_add()
  69. * @connector: Pointer to drm connector structure
  70. * @display: Pointer to private display handle
  71. * @avail_res: Pointer with curr available resources
  72. * Returns: Number of modes added
  73. */
  74. int dp_connector_get_modes(struct drm_connector *connector,
  75. void *display, const struct msm_resource_caps_info *avail_res);
  76. /**
  77. * dp_connector_mode_valid - callback to determine if specified mode is valid
  78. * @connector: Pointer to drm connector structure
  79. * @mode: Pointer to drm mode structure
  80. * @display: Pointer to private display handle
  81. * @avail_res: Pointer with curr available resources
  82. * Returns: Validity status for specified mode
  83. */
  84. enum drm_mode_status dp_connector_mode_valid(struct drm_connector *connector,
  85. struct drm_display_mode *mode,
  86. void *display, const struct msm_resource_caps_info *avail_res);
  87. /**
  88. * dp_connector_get_mode_info - retrieve information of the mode selected
  89. * @connector: Pointer to drm connector structure
  90. * @drm_mode: Display mode set for the display
  91. * @mode_info: Out parameter. Information of the mode
  92. * @display: Pointer to private display structure
  93. * @avail_res: Pointer with curr available resources
  94. * Returns: zero on success
  95. */
  96. int dp_connector_get_mode_info(struct drm_connector *connector,
  97. const struct drm_display_mode *drm_mode,
  98. struct msm_mode_info *mode_info,
  99. void *display, const struct msm_resource_caps_info *avail_res);
  100. /**
  101. * dp_connector_get_info - retrieve connector display info
  102. * @connector: Pointer to drm connector structure
  103. * @info: Out parameter. Information of the connected display
  104. * @display: Pointer to private display structure
  105. * Returns: zero on success
  106. */
  107. int dp_connector_get_info(struct drm_connector *connector,
  108. struct msm_display_info *info, void *display);
  109. /**
  110. * dp_connector_post_open - handle the post open functionalites
  111. * @connector: Pointer to drm connector structure
  112. * @display: Pointer to private display structure
  113. */
  114. void dp_connector_post_open(struct drm_connector *connector, void *display);
  115. int dp_drm_bridge_init(void *display,
  116. struct drm_encoder *encoder);
  117. void dp_drm_bridge_deinit(void *display);
  118. /**
  119. * convert_to_drm_mode - convert dp mode to drm mode
  120. * @dp_mode: Point to dp mode
  121. * @drm_mode: Pointer to drm mode
  122. */
  123. void convert_to_drm_mode(const struct dp_display_mode *dp_mode,
  124. struct drm_display_mode *drm_mode);
  125. /**
  126. * dp_connector_update_pps - update pps for given connector
  127. * @dp_mode: Point to dp mode
  128. * @pps_cmd: PPS packet
  129. * @display: Pointer to private display structure
  130. */
  131. int dp_connector_update_pps(struct drm_connector *connector,
  132. char *pps_cmd, void *display);
  133. /**
  134. * dp_mst_drm_bridge_init - initialize mst bridge
  135. * @display: Pointer to private display structure
  136. * @encoder: Pointer to encoder for mst bridge mapping
  137. */
  138. int dp_mst_drm_bridge_init(void *display,
  139. struct drm_encoder *encoder);
  140. /**
  141. * dp_mst_drm_bridge_deinit - de-initialize mst bridges
  142. * @display: Pointer to private display structure
  143. */
  144. void dp_mst_drm_bridge_deinit(void *display);
  145. /**
  146. * dp_mst_init - initialize mst objects for the given display
  147. * @display: Pointer to private display structure
  148. */
  149. int dp_mst_init(struct dp_display *dp_display);
  150. /**
  151. * dp_mst_deinit - de-initialize mst objects for the given display
  152. * @display: Pointer to private display structure
  153. */
  154. void dp_mst_deinit(struct dp_display *dp_display);
  155. #else
  156. static inline int dp_connector_config_hdr(struct drm_connector *connector,
  157. void *display, struct sde_connector_state *c_state)
  158. {
  159. return 0;
  160. }
  161. static inline int dp_connector_atomic_check(struct drm_connector *connector,
  162. void *display, struct drm_atomic_state *state)
  163. {
  164. return 0;
  165. }
  166. static inline int dp_connector_set_colorspace(struct drm_connector *connector,
  167. void *display)
  168. {
  169. return 0;
  170. }
  171. static inline int dp_connector_post_init(struct drm_connector *connector,
  172. void *display)
  173. {
  174. return 0;
  175. }
  176. static inline enum drm_connector_status dp_connector_detect(
  177. struct drm_connector *conn,
  178. bool force,
  179. void *display)
  180. {
  181. return 0;
  182. }
  183. static inline int dp_connector_get_modes(struct drm_connector *connector,
  184. void *display, const struct msm_resource_caps_info *avail_res)
  185. {
  186. return 0;
  187. }
  188. static inline enum drm_mode_status dp_connector_mode_valid(
  189. struct drm_connector *connector,
  190. struct drm_display_mode *mode,
  191. void *display, const struct msm_resource_caps_info *avail_res)
  192. {
  193. return MODE_OK;
  194. }
  195. static inline int dp_connector_get_mode_info(struct drm_connector *connector,
  196. const struct drm_display_mode *drm_mode,
  197. struct msm_mode_info *mode_info,
  198. void *display, const struct msm_resource_caps_info *avail_res)
  199. {
  200. return 0;
  201. }
  202. static inline int dp_connector_get_info(struct drm_connector *connector,
  203. struct msm_display_info *info, void *display)
  204. {
  205. return 0;
  206. }
  207. static inline void dp_connector_post_open(struct drm_connector *connector,
  208. void *display)
  209. {
  210. }
  211. static inline int dp_drm_bridge_init(void *display, struct drm_encoder *encoder)
  212. {
  213. return 0;
  214. }
  215. static inline void dp_drm_bridge_deinit(void *display)
  216. {
  217. }
  218. static inline void convert_to_drm_mode(const struct dp_display_mode *dp_mode,
  219. struct drm_display_mode *drm_mode)
  220. {
  221. }
  222. static inline int dp_mst_drm_bridge_init(void *display,
  223. struct drm_encoder *encoder)
  224. {
  225. return 0;
  226. }
  227. static inline void dp_mst_drm_bridge_deinit(void *display)
  228. {
  229. }
  230. static inline int dp_mst_init(struct dp_display *dp_display)
  231. {
  232. return 0;
  233. }
  234. static inline int dp_mst_deinit(struct dp_display *dp_display)
  235. {
  236. return 0;
  237. }
  238. #endif
  239. #endif /* _DP_DRM_H_ */