pxp.h 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. #ifndef _PXP_H
  2. #define _PXP_H
  3. /*
  4. * PXP Registers Definitions
  5. */
  6. #define PXP_CTRL 0x000 /* PXP Control Register */
  7. #define PXP_STAT 0x010 /* PXP Status Register */
  8. #define PXP_STAT_CLR 0x018
  9. #define PXP_OUTBUF 0x020 /* PXP Output Frame Buffer Pointer */
  10. #define PXP_OUTBUF2 0x030 /* PXP Output Frame Buffer Pointer #2 */
  11. #define PXP_OUTSIZE 0x040 /* PXP Output Size */
  12. #define PXP_S0BUF 0x050 /* PXP Source 0 (video) Input Buffer Pointer */
  13. #define PXP_S0UBUF 0x060 /* Source 0 U/Cb or 2 Plane UV Input Buffer Pointer */
  14. #define PXP_S0VBUF 0x070 /* Source 0 V/Cr Input Buffer Pointer */
  15. #define PXP_S0PARAM 0x080 /* PXP Source 0 (video) Buffer Parameters */
  16. #define PXP_S0BACKGROUND 0x090 /* Source 0 Background Color */
  17. #define PXP_S0CROP 0x0A0 /* Source 0 Cropping Register */
  18. #define PXP_S0SCALE 0x0B0 /* Source 0 Scale Factor Register */
  19. #define PXP_S0OFFSET 0x0C0 /* Source 0 Scale Offset Register */
  20. #define PXP_CSCCOEFF0 0x0D0 /* Color Space Conversion Coefficient Register0 */
  21. #define PXP_CSCCOEFF1 0x0E0 /* Color Space Conversion Coefficient Register1 */
  22. #define PXP_CSCCOEFF2 0x0F0 /* Color Space Conversion Coefficient Register2 */
  23. #define PXP_NEXT 0x100 /* PXP Next Frame Pointer */
  24. #define PXP_S0CKEYL 0x180 /* PXP S0 Color Key Low */
  25. #define PXP_S0CKEYH 0x190 /* PXP S0 Color Key High*/
  26. #define PXP_OLCKEYL 0x1A0 /* PXP Overlay Color Key Low*/
  27. #define PXP_OLCKEYH 0x1B0 /* PXP Overlay Color Key High*/
  28. #define PXP_DCTRL 0x1D0 /* PXP Debug Control Register */
  29. #define PXP_DEBUG 0x1E0 /* PXP Debug Register */
  30. #define PXP_VER 0x1F0 /* ARK PXP VER */
  31. #define PXP_OL0BUF 0x200 /* PXP Overlay 0 Buffer Pointer */
  32. #define PXP_OL0SIZE 0x210 /* PXP Overlay 0 Size */
  33. #define PXP_OL0PARAM 0x220 /* PXP Overlay 0 Parameters */
  34. #define PXP_OL0PARAM2 0x230 /* PXP Overlay 0 Parameters2 */
  35. #define PXP_OL1BUF 0x240 /* PXP Overlay 1 Buffer Pointer */
  36. #define PXP_OL1SIZE 0x250 /* PXP Overlay 1 Size */
  37. #define PXP_OL1PARAM 0x260 /* PXP Overlay 1 Parameters */
  38. #define PXP_OL1PARAM2 0x270 /* PXP Overlay 1 Parameters2 */
  39. #define PXP_OL2BUF 0x280 /* PXP Overlay 2 Buffer Pointer */
  40. #define PXP_OL2SIZE 0x290 /* PXP Overlay 2 Size */
  41. #define PXP_OL2PARAM 0x2A0 /* PXP Overlay 2 Parameters */
  42. #define PXP_OL2PARAM2 0x2B0 /* PXP Overlay 2 Parameters2 */
  43. #define PXP_OL3BUF 0x2C0 /* PXP Overlay 3 Buffer Pointer */
  44. #define PXP_OL3SIZE 0x2D0 /* PXP Overlay 3 Size */
  45. #define PXP_OL3PARAM 0x2E0 /* PXP Overlay 3 Parameters */
  46. #define PXP_OL3PARAM2 0x2F0 /* PXP Overlay 3 Parameters2 */
  47. #define PXP_OL4BUF 0x300 /* PXP Overlay 4 Buffer Pointer */
  48. #define PXP_OL4SIZE 0x310 /* PXP Overlay 4 Size */
  49. #define PXP_OL4PARAM 0x320 /* PXP Overlay 4 Parameters */
  50. #define PXP_OL4PARAM2 0x330 /* PXP Overlay 4 Parameters2 */
  51. #define PXP_OL5BUF 0x340 /* PXP Overlay 5 Buffer Pointer */
  52. #define PXP_OL5SIZE 0x350 /* PXP Overlay 5 Size */
  53. #define PXP_OL5PARAM 0x360 /* PXP Overlay 5 Parameters */
  54. #define PXP_OL5PARAM2 0x370 /* PXP Overlay 5 Parameters2 */
  55. #define PXP_OL6BUF 0x380 /* PXP Overlay 6 Buffer Pointer */
  56. #define PXP_OL6SIZE 0x390 /* PXP Overlay 6 Size */
  57. #define PXP_OL6PARAM 0x3A0 /* PXP Overlay 6 Parameters */
  58. #define PXP_OL6PARAM2 0x3B0 /* PXP Overlay 6 Parameters2 */
  59. #define PXP_OL7BUF 0x3C0 /* PXP Overlay 7 Buffer Pointer */
  60. #define PXP_OL7SIZE 0x3D0 /* PXP Overlay 7 Size */
  61. #define PXP_OL7PARAM 0x3E0 /* PXP Overlay 7 Parameters */
  62. #define PXP_OL7PARAM2 0x3F0 /* PXP Overlay 7 Parameters2 */
  63. /*
  64. * PXP Control Register Bit Offset.
  65. */
  66. #define SFTRST 31
  67. #define CLKGATE 30
  68. #define INTERLACED_OUTPUT 26
  69. #define INTERLACED_INPUT 24
  70. #define BLOCK_SIZE 23
  71. #define ALPHA_OUTPUT 22
  72. #define IN_PLACE 21
  73. #define CROP 19
  74. #define SCALE 18
  75. #define S0_FORMAT 12
  76. #define VFLIP 11
  77. #define HFLIP 10
  78. #define ROTATE 8
  79. #define OUTBUF_FORMAT 4
  80. #define LCD_HANDSHAKE_EN 3
  81. #define NEXT_IRQ_EN 2
  82. #define IRQ_EN 1
  83. #define PXP_EN 0
  84. /*
  85. * PXP IO
  86. */
  87. #define PXP_WRITEL(val, reg) *((volatile unsigned int *)(REGS_PXP_BASE + reg)) = (val)
  88. #define PXP_READL(reg) *((volatile unsigned int *)(REGS_PXP_BASE + reg))
  89. typedef enum _PXP_BLOCK_SIZE_TYPE {
  90. PXP_BLOCK_SIZE_8X8,
  91. PXP_BLOCK_SIZE_16X16,
  92. PXP_BLOCK_SIZE_END
  93. }PXP_BLOCK_SIZE_TYPE;
  94. typedef enum _PXP_COLOR_SPACE_CONVERNSION_COEFFICIENT {
  95. PXP_CSCCOEFF_YUV2RGB,
  96. PXP_CSCCOEFF_YCBCR2RGB,
  97. PCP_CSCCOEFF_END
  98. }PXP_CSCOEFF;
  99. typedef enum _PXP_ROTATE {
  100. PXP_ROTATE_0,
  101. PXP_ROTATE_90,
  102. PXP_ROTATE_180,
  103. PXP_ROTATE_270,
  104. PXP_ROTATE_END,
  105. }PXP_ROTATE;
  106. typedef enum _PXP_S0_FORMAT {
  107. PXP_S0_FORMAT_ARGB888 = 0x0, //
  108. PXP_S0_FORMAT_RGB888 = 0x1, //
  109. PXP_S0_FORMAT_RGB565 = 0x4, //
  110. PXP_S0_FORMAT_RGB555 = 0x5, //
  111. PXP_S0_FORMAT_YUV422 = 0x8, //
  112. PXP_S0_FORMAT_YUV420 = 0x9, //(y,u,v store)
  113. PXP_S0_FORMAT_UYVY1P422 = 0xA, //
  114. PXP_S0_FORMAT_VYUY1P422 = 0xB, //
  115. PXP_S0_FORMAT_YUV2P422 = 0xC, //
  116. PXP_S0_FORMAT_YUV2P420 = 0xD, //s0 and out(y, uv store)
  117. PXP_S0_FORMAT_YVU2P422 = 0xE, //
  118. PXP_S0_FORMAT_END
  119. }PXP_S0_FORMAT;
  120. typedef enum _PXP_OUT_FORMAT {
  121. PXP_OUT_FORMAT_ARGB888 = 0x0, //
  122. PXP_OUT_FORMAT_RGB888 = 0x1, //
  123. PXP_OUT_FORMAT_RGB888P = 0x2, //
  124. PXP_OUT_FORMAT_ARGB1555 = 0x3, //
  125. PXP_OUT_FORMAT_RGB565 = 0x4, //
  126. PXP_OUT_FORMAT_RGB555 = 0x5, //
  127. PXP_OUT_FORMAT_YUV444 = 0x7, //
  128. PXP_OUT_FORMAT_YUV420 = 0x9, //(y,u,v store)
  129. PXP_OUT_FORMAT_UYVY1P422 = 0xA, //
  130. PXP_OUT_FORMAT_VYUY1P422 = 0xB, //
  131. PXP_OUT_FORMAT_YUV2P422 = 0xC, //
  132. PXP_OUT_FORMAT_YUV2P420 = 0xD, //(y, uv store)
  133. PXP_OUT_FORMAT_YVU2P422 = 0xE,
  134. PXP_OUT_FORMAT_YVU2P420 = 0xF,
  135. PXP_OUT_FORMAT_END
  136. }PXP_OUT_FORMAT;
  137. typedef enum _PXP_OVERLAY_LAYER {
  138. PXP_OL0,
  139. PXP_OL1,
  140. PXP_OL2,
  141. PXP_OL3,
  142. PXP_OL4,
  143. PXP_OL5,
  144. PXP_OL6,
  145. PXP_OL7,
  146. PXP_OL_COUNT
  147. }PXP_OL_LAYER;
  148. typedef enum _PXP_OVERLAY_INPUT_BUFFER_FORMAT{
  149. PXP_OL_FORMAT_ARGB8888 = 0,
  150. PXP_OL_FORMAT_RGB888 = 1,
  151. PXP_OL_FORMAT_ARGB1555 = 3,
  152. PXP_OL_FORMAT_RGB565 = 4,
  153. PXP_OL_FORMAT_RGB555 = 5,
  154. PXP_OL_FORMAT_END,
  155. }PXP_OL_FORMAT;
  156. typedef enum _PXP_OVERLAY_ALPHA_CNTL_TYPE{
  157. PXP_OL_ALPHA_CNTL_TYPE_EMBEDDED = 0,
  158. PXP_OL_ALPHA_CNTL_TYPE_OVERRIDE = 1,
  159. PXP_OL_ALPHA_CNTL_TYPE_MULTIPLY = 2,
  160. PXP_OL_ALPHA_CNTL_TYPE_ROPS = 3,
  161. PXP_OL_ALPHA_CNTL_TYPE_END
  162. }PXP_OL_ALPHA_CNTL_TYPE;
  163. typedef struct {
  164. PXP_S0_FORMAT in_format;
  165. PXP_OUT_FORMAT out_format;
  166. uint8_t in_interlace_enable;
  167. uint8_t out_interlace_enable;
  168. uint32_t in_place;
  169. PXP_ROTATE rotate;
  170. uint8_t vflip_enable;
  171. uint8_t hflip_enable;
  172. uint8_t crop_enable;
  173. uint8_t scale_enable;
  174. uint8_t alpha_out_enable;
  175. }pxp_param;
  176. /* Overlay Func */
  177. int pxp_overlay_set_addr(PXP_OL_LAYER layer, uint32_t addr);
  178. int pxp_overlay_set_size(PXP_OL_LAYER layer, uint32_t xbase, uint32_t ybase, uint32_t width, uint32_t height);
  179. int pxp_overlay_set_format(PXP_OL_LAYER layer, PXP_OL_FORMAT format);
  180. int pxp_overlay_set_rop(PXP_OL_LAYER layer, uint32_t rop);
  181. int pxp_overlay_set_alpha_cntl_type(PXP_OL_LAYER layer, PXP_OL_ALPHA_CNTL_TYPE type);
  182. int pxp_overlay_set_alpha_value(PXP_OL_LAYER layer, uint32_t value);
  183. int pxp_overlay_colorkey_enable(PXP_OL_LAYER layer, uint32_t enable);
  184. int pxp_set_overlay_color_key(uint32_t low, uint32_t high);
  185. int pxp_overlay_enable(PXP_OL_LAYER layer, uint32_t enable);
  186. /* PXP Common Func */
  187. int pxp_set_input_addr(uint32_t yaddr, uint32_t uaddr, uint32_t vaddr);
  188. int pxp_set_s0_input_size(uint32_t xoffset, uint32_t yoffset, uint32_t width, uint32_t height);
  189. int pxp_set_s0_cropping_size(uint32_t xbase, uint32_t ybase, uint32_t width, uint32_t height);
  190. int pxp_set_s0_scale_factor(uint32_t xscale, uint32_t yscale);
  191. int pxp_set_output_addr(uint32_t addr, uint32_t addr2);
  192. int pxp_set_output_size(uint32_t width, uint32_t height);
  193. int pxp_set_output_alpha(uint32_t alpha);
  194. int pxp_set_control_param(pxp_param *param);
  195. int pxp_start(void);
  196. /* PXP default value Func:
  197. Interface with default argument value, may be you need them.
  198. If you not sure, ingore them.
  199. */
  200. int pxp_set_s0_background_color(uint32_t color);
  201. int pxp_set_s0_color_key(uint32_t low, uint32_t high);
  202. int pxp_set_s0_scale_offset(uint32_t x, uint32_t y);
  203. int pxp_set_output_alpha(uint32_t alpha);
  204. int pxp_set_block_size(PXP_BLOCK_SIZE_TYPE type);
  205. int pxp_set_color_space_conversion_coefficient(PXP_CSCOEFF mode);
  206. int pxp_init(void);
  207. int pxp_scaler_rotate(uint32_t s0buf, uint32_t s0ubuf, uint32_t s0vbuf,
  208. int s0format, uint32_t s0width, uint32_t s0height,
  209. uint32_t outbuf, uint32_t outbuf2, int outformat,
  210. uint32_t outwidth, uint32_t outheight, int outangle);
  211. int pxp_rotate(uint32_t s0buf, uint32_t s0ubuf, uint32_t s0vbuf,
  212. int s0format, uint32_t s0width, uint32_t s0height,
  213. uint32_t outbuf, uint32_t outbuf2, int outformat,
  214. int outangle);
  215. #endif