dp_drm.h 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
  4. * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
  5. */
  6. #ifndef _DP_DRM_H_
  7. #define _DP_DRM_H_
  8. #include <linux/types.h>
  9. #include <drm/drm_crtc.h>
  10. #include <drm/drm_bridge.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. #if IS_ENABLED(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_atomic_check - callback to perform atomic
  34. * check for DP
  35. * @connector: Pointer to drm connector structure
  36. * @display: Pointer to private display handle
  37. * @c_state: connect state data
  38. * Returns: Zero on success
  39. */
  40. int dp_connector_atomic_check(struct drm_connector *connector,
  41. void *display,
  42. struct drm_atomic_state *state);
  43. /**
  44. * dp_connector_set_colorspace - callback to set new colorspace
  45. * @connector: Pointer to drm connector structure
  46. * @display: Pointer to private display handle
  47. * Returns: Zero on success
  48. */
  49. int dp_connector_set_colorspace(struct drm_connector *connector,
  50. void *display);
  51. /**
  52. * dp_connector_post_init - callback to perform additional initialization steps
  53. * @connector: Pointer to drm connector structure
  54. * @display: Pointer to private display handle
  55. * Returns: Zero on success
  56. */
  57. int dp_connector_post_init(struct drm_connector *connector, void *display);
  58. /**
  59. * dp_connector_detect - callback to determine if connector is connected
  60. * @connector: Pointer to drm connector structure
  61. * @force: Force detect setting from drm framework
  62. * @display: Pointer to private display handle
  63. * Returns: Connector 'is connected' status
  64. */
  65. enum drm_connector_status dp_connector_detect(struct drm_connector *conn,
  66. bool force,
  67. void *display);
  68. /**
  69. * dp_connector_get_modes - callback to add drm modes via drm_mode_probed_add()
  70. * @connector: Pointer to drm connector structure
  71. * @display: Pointer to private display handle
  72. * @avail_res: Pointer with curr available resources
  73. * Returns: Number of modes added
  74. */
  75. int dp_connector_get_modes(struct drm_connector *connector,
  76. void *display, const struct msm_resource_caps_info *avail_res);
  77. /**
  78. * dp_connector_mode_valid - callback to determine if specified mode is valid
  79. * @connector: Pointer to drm connector structure
  80. * @mode: Pointer to drm mode structure
  81. * @display: Pointer to private display handle
  82. * @avail_res: Pointer with curr available resources
  83. * Returns: Validity status for specified mode
  84. */
  85. enum drm_mode_status dp_connector_mode_valid(struct drm_connector *connector,
  86. struct drm_display_mode *mode,
  87. void *display, const struct msm_resource_caps_info *avail_res);
  88. /**
  89. * dp_connector_get_mode_info - retrieve information of the mode selected
  90. * @connector: Pointer to drm connector structure
  91. * @drm_mode: Display mode set for the display
  92. * @mode_info: Out parameter. Information of the mode
  93. * @sub_mode: Additional mode info to drm display mode
  94. * @display: Pointer to private display structure
  95. * @avail_res: Pointer with curr available resources
  96. * Returns: zero on success
  97. */
  98. int dp_connector_get_mode_info(struct drm_connector *connector,
  99. const struct drm_display_mode *drm_mode,
  100. struct msm_sub_mode *sub_mode,
  101. struct msm_mode_info *mode_info,
  102. void *display, const struct msm_resource_caps_info *avail_res);
  103. /**
  104. * dp_connector_get_info - retrieve connector display info
  105. * @connector: Pointer to drm connector structure
  106. * @info: Out parameter. Information of the connected display
  107. * @display: Pointer to private display structure
  108. * Returns: zero on success
  109. */
  110. int dp_connector_get_info(struct drm_connector *connector,
  111. struct msm_display_info *info, void *display);
  112. /**
  113. * dp_connector_post_open - handle the post open functionalities
  114. * @connector: Pointer to drm connector structure
  115. * @display: Pointer to private display structure
  116. */
  117. void dp_connector_post_open(struct drm_connector *connector, void *display);
  118. /**
  119. * dp_drm_bridge_init- drm dp bridge initialize
  120. * @display: Pointer to private display structure
  121. * @encoder: encoder for this dp bridge
  122. * @max_mixer_count: max available mixers for dp display
  123. * @max_dsc_count: max available dsc for dp display
  124. */
  125. int dp_drm_bridge_init(void *display, struct drm_encoder *encoder,
  126. u32 max_mixer_count, u32 max_dsc_count);
  127. void dp_drm_bridge_deinit(void *display);
  128. /**
  129. * convert_to_drm_mode - convert dp mode to drm mode
  130. * @dp_mode: Point to dp mode
  131. * @drm_mode: Pointer to drm mode
  132. */
  133. void convert_to_drm_mode(const struct dp_display_mode *dp_mode,
  134. struct drm_display_mode *drm_mode);
  135. /**
  136. * dp_connector_update_pps - update pps for given connector
  137. * @dp_mode: Point to dp mode
  138. * @pps_cmd: PPS packet
  139. * @display: Pointer to private display structure
  140. */
  141. int dp_connector_update_pps(struct drm_connector *connector,
  142. char *pps_cmd, void *display);
  143. /**
  144. * dp_connector_install_properties - install drm properties
  145. * @display: Pointer to private display structure
  146. * @conn: Pointer to connector
  147. */
  148. int dp_connector_install_properties(void *display,
  149. struct drm_connector *conn);
  150. /**
  151. * init_failsafe_mode - add failsafe edid mode
  152. * @dp_mode: Pointer to mode
  153. */
  154. void init_failsafe_mode(struct dp_display_mode *dp_mode);
  155. /**
  156. * dp_connector_add_custom_mode - add edid mode to connector
  157. * @conn: Pointer to connector
  158. * @dp_mode: Pointer to mode
  159. */
  160. int dp_connector_add_custom_mode(struct drm_connector *conn, struct dp_display_mode *dp_mode);
  161. #else
  162. static inline int dp_connector_config_hdr(struct drm_connector *connector,
  163. void *display, struct sde_connector_state *c_state)
  164. {
  165. return 0;
  166. }
  167. static inline int dp_connector_atomic_check(struct drm_connector *connector,
  168. void *display, struct drm_atomic_state *state)
  169. {
  170. return 0;
  171. }
  172. static inline int dp_connector_set_colorspace(struct drm_connector *connector,
  173. void *display)
  174. {
  175. return 0;
  176. }
  177. static inline int dp_connector_post_init(struct drm_connector *connector,
  178. void *display)
  179. {
  180. return 0;
  181. }
  182. static inline enum drm_connector_status dp_connector_detect(
  183. struct drm_connector *conn,
  184. bool force,
  185. void *display)
  186. {
  187. return 0;
  188. }
  189. static inline int dp_connector_get_modes(struct drm_connector *connector,
  190. void *display, const struct msm_resource_caps_info *avail_res)
  191. {
  192. return 0;
  193. }
  194. static inline enum drm_mode_status dp_connector_mode_valid(
  195. struct drm_connector *connector,
  196. struct drm_display_mode *mode,
  197. void *display, const struct msm_resource_caps_info *avail_res)
  198. {
  199. return MODE_OK;
  200. }
  201. static inline int dp_connector_get_mode_info(struct drm_connector *connector,
  202. const struct drm_display_mode *drm_mode,
  203. struct msm_sub_mode *sub_mode,
  204. struct msm_mode_info *mode_info,
  205. void *display, const struct msm_resource_caps_info *avail_res)
  206. {
  207. return 0;
  208. }
  209. static inline int dp_connector_get_info(struct drm_connector *connector,
  210. struct msm_display_info *info, void *display)
  211. {
  212. return 0;
  213. }
  214. static inline void dp_connector_post_open(struct drm_connector *connector,
  215. void *display)
  216. {
  217. }
  218. static inline int dp_drm_bridge_init(void *display, struct drm_encoder *encoder,
  219. u32 max_mixer_count, u32 max_dsc_count)
  220. {
  221. return 0;
  222. }
  223. static inline void dp_drm_bridge_deinit(void *display)
  224. {
  225. }
  226. static inline void convert_to_drm_mode(const struct dp_display_mode *dp_mode,
  227. struct drm_display_mode *drm_mode)
  228. {
  229. }
  230. static int dp_connector_install_properties(void *display,
  231. struct drm_connector *conn)
  232. {
  233. return 0;
  234. }
  235. #endif /* CONFIG_DRM_MSM_DP */
  236. #endif /* _DP_DRM_H_ */