fsl_dcu_drm_drv.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. /*
  2. * Copyright 2015 Freescale Semiconductor, Inc.
  3. *
  4. * Freescale DCU drm device driver
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2 of the License, or
  9. * (at your option) any later version.
  10. */
  11. #ifndef __FSL_DCU_DRM_DRV_H__
  12. #define __FSL_DCU_DRM_DRV_H__
  13. #include "fsl_dcu_drm_crtc.h"
  14. #include "fsl_dcu_drm_output.h"
  15. #include "fsl_dcu_drm_plane.h"
  16. #define DCU_DCU_MODE 0x0010
  17. #define DCU_MODE_BLEND_ITER(x) ((x) << 20)
  18. #define DCU_MODE_RASTER_EN BIT(14)
  19. #define DCU_MODE_DCU_MODE(x) (x)
  20. #define DCU_MODE_DCU_MODE_MASK 0x03
  21. #define DCU_MODE_OFF 0
  22. #define DCU_MODE_NORMAL 1
  23. #define DCU_MODE_TEST 2
  24. #define DCU_MODE_COLORBAR 3
  25. #define DCU_BGND 0x0014
  26. #define DCU_BGND_R(x) ((x) << 16)
  27. #define DCU_BGND_G(x) ((x) << 8)
  28. #define DCU_BGND_B(x) (x)
  29. #define DCU_DISP_SIZE 0x0018
  30. #define DCU_DISP_SIZE_DELTA_Y(x) ((x) << 16)
  31. /*Regisiter value 1/16 of horizontal resolution*/
  32. #define DCU_DISP_SIZE_DELTA_X(x) ((x) >> 4)
  33. #define DCU_HSYN_PARA 0x001c
  34. #define DCU_HSYN_PARA_BP(x) ((x) << 22)
  35. #define DCU_HSYN_PARA_PW(x) ((x) << 11)
  36. #define DCU_HSYN_PARA_FP(x) (x)
  37. #define DCU_VSYN_PARA 0x0020
  38. #define DCU_VSYN_PARA_BP(x) ((x) << 22)
  39. #define DCU_VSYN_PARA_PW(x) ((x) << 11)
  40. #define DCU_VSYN_PARA_FP(x) (x)
  41. #define DCU_SYN_POL 0x0024
  42. #define DCU_SYN_POL_INV_PXCK_FALL (0 << 6)
  43. #define DCU_SYN_POL_NEG_REMAIN (0 << 5)
  44. #define DCU_SYN_POL_INV_VS_LOW BIT(1)
  45. #define DCU_SYN_POL_INV_HS_LOW BIT(0)
  46. #define DCU_THRESHOLD 0x0028
  47. #define DCU_THRESHOLD_LS_BF_VS(x) ((x) << 16)
  48. #define DCU_THRESHOLD_OUT_BUF_HIGH(x) ((x) << 8)
  49. #define DCU_THRESHOLD_OUT_BUF_LOW(x) (x)
  50. #define BF_VS_VAL 0x03
  51. #define BUF_MAX_VAL 0x78
  52. #define BUF_MIN_VAL 0x0a
  53. #define DCU_INT_STATUS 0x002C
  54. #define DCU_INT_STATUS_VSYNC BIT(0)
  55. #define DCU_INT_STATUS_UNDRUN BIT(1)
  56. #define DCU_INT_STATUS_LSBFVS BIT(2)
  57. #define DCU_INT_STATUS_VBLANK BIT(3)
  58. #define DCU_INT_STATUS_CRCREADY BIT(4)
  59. #define DCU_INT_STATUS_CRCOVERFLOW BIT(5)
  60. #define DCU_INT_STATUS_P1FIFOLO BIT(6)
  61. #define DCU_INT_STATUS_P1FIFOHI BIT(7)
  62. #define DCU_INT_STATUS_P2FIFOLO BIT(8)
  63. #define DCU_INT_STATUS_P2FIFOHI BIT(9)
  64. #define DCU_INT_STATUS_PROGEND BIT(10)
  65. #define DCU_INT_STATUS_IPMERROR BIT(11)
  66. #define DCU_INT_STATUS_LYRTRANS BIT(12)
  67. #define DCU_INT_STATUS_DMATRANS BIT(14)
  68. #define DCU_INT_STATUS_P3FIFOLO BIT(16)
  69. #define DCU_INT_STATUS_P3FIFOHI BIT(17)
  70. #define DCU_INT_STATUS_P4FIFOLO BIT(18)
  71. #define DCU_INT_STATUS_P4FIFOHI BIT(19)
  72. #define DCU_INT_STATUS_P1EMPTY BIT(26)
  73. #define DCU_INT_STATUS_P2EMPTY BIT(27)
  74. #define DCU_INT_STATUS_P3EMPTY BIT(28)
  75. #define DCU_INT_STATUS_P4EMPTY BIT(29)
  76. #define DCU_INT_MASK 0x0030
  77. #define DCU_INT_MASK_VSYNC BIT(0)
  78. #define DCU_INT_MASK_UNDRUN BIT(1)
  79. #define DCU_INT_MASK_LSBFVS BIT(2)
  80. #define DCU_INT_MASK_VBLANK BIT(3)
  81. #define DCU_INT_MASK_CRCREADY BIT(4)
  82. #define DCU_INT_MASK_CRCOVERFLOW BIT(5)
  83. #define DCU_INT_MASK_P1FIFOLO BIT(6)
  84. #define DCU_INT_MASK_P1FIFOHI BIT(7)
  85. #define DCU_INT_MASK_P2FIFOLO BIT(8)
  86. #define DCU_INT_MASK_P2FIFOHI BIT(9)
  87. #define DCU_INT_MASK_PROGEND BIT(10)
  88. #define DCU_INT_MASK_IPMERROR BIT(11)
  89. #define DCU_INT_MASK_LYRTRANS BIT(12)
  90. #define DCU_INT_MASK_DMATRANS BIT(14)
  91. #define DCU_INT_MASK_P3FIFOLO BIT(16)
  92. #define DCU_INT_MASK_P3FIFOHI BIT(17)
  93. #define DCU_INT_MASK_P4FIFOLO BIT(18)
  94. #define DCU_INT_MASK_P4FIFOHI BIT(19)
  95. #define DCU_INT_MASK_P1EMPTY BIT(26)
  96. #define DCU_INT_MASK_P2EMPTY BIT(27)
  97. #define DCU_INT_MASK_P3EMPTY BIT(28)
  98. #define DCU_INT_MASK_P4EMPTY BIT(29)
  99. #define DCU_DIV_RATIO 0x0054
  100. #define DCU_UPDATE_MODE 0x00cc
  101. #define DCU_UPDATE_MODE_MODE BIT(31)
  102. #define DCU_UPDATE_MODE_READREG BIT(30)
  103. #define DCU_DCFB_MAX 0x300
  104. #define DCU_CTRLDESCLN(layer, reg) (0x200 + (reg - 1) * 4 + (layer) * 0x40)
  105. #define DCU_LAYER_HEIGHT(x) ((x) << 16)
  106. #define DCU_LAYER_WIDTH(x) (x)
  107. #define DCU_LAYER_POSY(x) ((x) << 16)
  108. #define DCU_LAYER_POSX(x) (x)
  109. #define DCU_LAYER_EN BIT(31)
  110. #define DCU_LAYER_TILE_EN BIT(30)
  111. #define DCU_LAYER_DATA_SEL_CLUT BIT(29)
  112. #define DCU_LAYER_SAFETY_EN BIT(28)
  113. #define DCU_LAYER_TRANS(x) ((x) << 20)
  114. #define DCU_LAYER_BPP(x) ((x) << 16)
  115. #define DCU_LAYER_RLE_EN BIT(15)
  116. #define DCU_LAYER_LUOFFS(x) ((x) << 4)
  117. #define DCU_LAYER_BB_ON BIT(2)
  118. #define DCU_LAYER_AB(x) (x)
  119. #define DCU_LAYER_CKMAX_R(x) ((x) << 16)
  120. #define DCU_LAYER_CKMAX_G(x) ((x) << 8)
  121. #define DCU_LAYER_CKMAX_B(x) (x)
  122. #define DCU_LAYER_CKMIN_R(x) ((x) << 16)
  123. #define DCU_LAYER_CKMIN_G(x) ((x) << 8)
  124. #define DCU_LAYER_CKMIN_B(x) (x)
  125. #define DCU_LAYER_TILE_VER(x) ((x) << 16)
  126. #define DCU_LAYER_TILE_HOR(x) (x)
  127. #define DCU_LAYER_FG_FCOLOR(x) (x)
  128. #define DCU_LAYER_BG_BCOLOR(x) (x)
  129. #define DCU_LAYER_POST_SKIP(x) ((x) << 16)
  130. #define DCU_LAYER_PRE_SKIP(x) (x)
  131. #define FSL_DCU_RGB565 4
  132. #define FSL_DCU_RGB888 5
  133. #define FSL_DCU_ARGB8888 6
  134. #define FSL_DCU_ARGB1555 11
  135. #define FSL_DCU_ARGB4444 12
  136. #define FSL_DCU_YUV422 14
  137. #define VF610_LAYER_REG_NUM 9
  138. #define LS1021A_LAYER_REG_NUM 10
  139. struct clk;
  140. struct device;
  141. struct drm_device;
  142. struct fsl_dcu_soc_data {
  143. const char *name;
  144. /*total layer number*/
  145. unsigned int total_layer;
  146. /*max layer number DCU supported*/
  147. unsigned int max_layer;
  148. };
  149. struct fsl_dcu_drm_device {
  150. struct device *dev;
  151. struct device_node *np;
  152. struct regmap *regmap;
  153. int irq;
  154. struct clk *clk;
  155. /*protects hardware register*/
  156. spinlock_t irq_lock;
  157. struct drm_device *drm;
  158. struct drm_fbdev_cma *fbdev;
  159. struct drm_crtc crtc;
  160. struct drm_encoder encoder;
  161. struct fsl_dcu_drm_connector connector;
  162. const struct fsl_dcu_soc_data *soc;
  163. };
  164. void fsl_dcu_fbdev_init(struct drm_device *dev);
  165. int fsl_dcu_drm_modeset_init(struct fsl_dcu_drm_device *fsl_dev);
  166. #endif /* __FSL_DCU_DRM_DRV_H__ */