#ifndef _PXP_H #define _PXP_H /* * PXP Registers Definitions */ #define PXP_CTRL 0x000 /* PXP Control Register */ #define PXP_STAT 0x010 /* PXP Status Register */ #define PXP_STAT_CLR 0x018 #define PXP_OUTBUF 0x020 /* PXP Output Frame Buffer Pointer */ #define PXP_OUTBUF2 0x030 /* PXP Output Frame Buffer Pointer #2 */ #define PXP_OUTSIZE 0x040 /* PXP Output Size */ #define PXP_S0BUF 0x050 /* PXP Source 0 (video) Input Buffer Pointer */ #define PXP_S0UBUF 0x060 /* Source 0 U/Cb or 2 Plane UV Input Buffer Pointer */ #define PXP_S0VBUF 0x070 /* Source 0 V/Cr Input Buffer Pointer */ #define PXP_S0PARAM 0x080 /* PXP Source 0 (video) Buffer Parameters */ #define PXP_S0BACKGROUND 0x090 /* Source 0 Background Color */ #define PXP_S0CROP 0x0A0 /* Source 0 Cropping Register */ #define PXP_S0SCALE 0x0B0 /* Source 0 Scale Factor Register */ #define PXP_S0OFFSET 0x0C0 /* Source 0 Scale Offset Register */ #define PXP_CSCCOEFF0 0x0D0 /* Color Space Conversion Coefficient Register0 */ #define PXP_CSCCOEFF1 0x0E0 /* Color Space Conversion Coefficient Register1 */ #define PXP_CSCCOEFF2 0x0F0 /* Color Space Conversion Coefficient Register2 */ #define PXP_NEXT 0x100 /* PXP Next Frame Pointer */ #define PXP_S0CKEYL 0x180 /* PXP S0 Color Key Low */ #define PXP_S0CKEYH 0x190 /* PXP S0 Color Key High*/ #define PXP_OLCKEYL 0x1A0 /* PXP Overlay Color Key Low*/ #define PXP_OLCKEYH 0x1B0 /* PXP Overlay Color Key High*/ #define PXP_DCTRL 0x1D0 /* PXP Debug Control Register */ #define PXP_DEBUG 0x1E0 /* PXP Debug Register */ #define PXP_VER 0x1F0 /* ARK PXP VER */ #define PXP_OL0BUF 0x200 /* PXP Overlay 0 Buffer Pointer */ #define PXP_OL0SIZE 0x210 /* PXP Overlay 0 Size */ #define PXP_OL0PARAM 0x220 /* PXP Overlay 0 Parameters */ #define PXP_OL0PARAM2 0x230 /* PXP Overlay 0 Parameters2 */ #define PXP_OL1BUF 0x240 /* PXP Overlay 1 Buffer Pointer */ #define PXP_OL1SIZE 0x250 /* PXP Overlay 1 Size */ #define PXP_OL1PARAM 0x260 /* PXP Overlay 1 Parameters */ #define PXP_OL1PARAM2 0x270 /* PXP Overlay 1 Parameters2 */ #define PXP_OL2BUF 0x280 /* PXP Overlay 2 Buffer Pointer */ #define PXP_OL2SIZE 0x290 /* PXP Overlay 2 Size */ #define PXP_OL2PARAM 0x2A0 /* PXP Overlay 2 Parameters */ #define PXP_OL2PARAM2 0x2B0 /* PXP Overlay 2 Parameters2 */ #define PXP_OL3BUF 0x2C0 /* PXP Overlay 3 Buffer Pointer */ #define PXP_OL3SIZE 0x2D0 /* PXP Overlay 3 Size */ #define PXP_OL3PARAM 0x2E0 /* PXP Overlay 3 Parameters */ #define PXP_OL3PARAM2 0x2F0 /* PXP Overlay 3 Parameters2 */ #define PXP_OL4BUF 0x300 /* PXP Overlay 4 Buffer Pointer */ #define PXP_OL4SIZE 0x310 /* PXP Overlay 4 Size */ #define PXP_OL4PARAM 0x320 /* PXP Overlay 4 Parameters */ #define PXP_OL4PARAM2 0x330 /* PXP Overlay 4 Parameters2 */ #define PXP_OL5BUF 0x340 /* PXP Overlay 5 Buffer Pointer */ #define PXP_OL5SIZE 0x350 /* PXP Overlay 5 Size */ #define PXP_OL5PARAM 0x360 /* PXP Overlay 5 Parameters */ #define PXP_OL5PARAM2 0x370 /* PXP Overlay 5 Parameters2 */ #define PXP_OL6BUF 0x380 /* PXP Overlay 6 Buffer Pointer */ #define PXP_OL6SIZE 0x390 /* PXP Overlay 6 Size */ #define PXP_OL6PARAM 0x3A0 /* PXP Overlay 6 Parameters */ #define PXP_OL6PARAM2 0x3B0 /* PXP Overlay 6 Parameters2 */ #define PXP_OL7BUF 0x3C0 /* PXP Overlay 7 Buffer Pointer */ #define PXP_OL7SIZE 0x3D0 /* PXP Overlay 7 Size */ #define PXP_OL7PARAM 0x3E0 /* PXP Overlay 7 Parameters */ #define PXP_OL7PARAM2 0x3F0 /* PXP Overlay 7 Parameters2 */ /* * PXP Control Register Bit Offset. */ #define SFTRST 31 #define CLKGATE 30 #define INTERLACED_OUTPUT 26 #define INTERLACED_INPUT 24 #define BLOCK_SIZE 23 #define ALPHA_OUTPUT 22 #define IN_PLACE 21 #define CROP 19 #define SCALE 18 #define S0_FORMAT 12 #define VFLIP 11 #define HFLIP 10 #define ROTATE 8 #define OUTBUF_FORMAT 4 #define LCD_HANDSHAKE_EN 3 #define NEXT_IRQ_EN 2 #define IRQ_EN 1 #define PXP_EN 0 /* * PXP IO */ #define PXP_WRITEL(val, reg) *((volatile unsigned int *)(REGS_PXP_BASE + reg)) = (val) #define PXP_READL(reg) *((volatile unsigned int *)(REGS_PXP_BASE + reg)) typedef enum _PXP_BLOCK_SIZE_TYPE { PXP_BLOCK_SIZE_8X8, PXP_BLOCK_SIZE_16X16, PXP_BLOCK_SIZE_END }PXP_BLOCK_SIZE_TYPE; typedef enum _PXP_COLOR_SPACE_CONVERNSION_COEFFICIENT { PXP_CSCCOEFF_YUV2RGB, PXP_CSCCOEFF_YCBCR2RGB, PCP_CSCCOEFF_END }PXP_CSCOEFF; typedef enum _PXP_ROTATE { PXP_ROTATE_0, PXP_ROTATE_90, PXP_ROTATE_180, PXP_ROTATE_270, PXP_ROTATE_END, }PXP_ROTATE; typedef enum _PXP_S0_FORMAT { PXP_S0_FORMAT_ARGB888 = 0x0, // PXP_S0_FORMAT_RGB888 = 0x1, // PXP_S0_FORMAT_RGB565 = 0x4, // PXP_S0_FORMAT_RGB555 = 0x5, // PXP_S0_FORMAT_YUV422 = 0x8, // PXP_S0_FORMAT_YUV420 = 0x9, //(y,u,v store) PXP_S0_FORMAT_UYVY1P422 = 0xA, // PXP_S0_FORMAT_VYUY1P422 = 0xB, // PXP_S0_FORMAT_YUV2P422 = 0xC, // PXP_S0_FORMAT_YUV2P420 = 0xD, //s0 and out(y, uv store) PXP_S0_FORMAT_YVU2P422 = 0xE, // PXP_S0_FORMAT_END }PXP_S0_FORMAT; typedef enum _PXP_OUT_FORMAT { PXP_OUT_FORMAT_ARGB888 = 0x0, // PXP_OUT_FORMAT_RGB888 = 0x1, // PXP_OUT_FORMAT_RGB888P = 0x2, // PXP_OUT_FORMAT_ARGB1555 = 0x3, // PXP_OUT_FORMAT_RGB565 = 0x4, // PXP_OUT_FORMAT_RGB555 = 0x5, // PXP_OUT_FORMAT_YUV444 = 0x7, // PXP_OUT_FORMAT_YUV420 = 0x9, //(y,u,v store) PXP_OUT_FORMAT_UYVY1P422 = 0xA, // PXP_OUT_FORMAT_VYUY1P422 = 0xB, // PXP_OUT_FORMAT_YUV2P422 = 0xC, // PXP_OUT_FORMAT_YUV2P420 = 0xD, //(y, uv store) PXP_OUT_FORMAT_YVU2P422 = 0xE, PXP_OUT_FORMAT_YVU2P420 = 0xF, PXP_OUT_FORMAT_END }PXP_OUT_FORMAT; typedef enum _PXP_OVERLAY_LAYER { PXP_OL0, PXP_OL1, PXP_OL2, PXP_OL3, PXP_OL4, PXP_OL5, PXP_OL6, PXP_OL7, PXP_OL_COUNT }PXP_OL_LAYER; typedef enum _PXP_OVERLAY_INPUT_BUFFER_FORMAT{ PXP_OL_FORMAT_ARGB8888 = 0, PXP_OL_FORMAT_RGB888 = 1, PXP_OL_FORMAT_ARGB1555 = 3, PXP_OL_FORMAT_RGB565 = 4, PXP_OL_FORMAT_RGB555 = 5, PXP_OL_FORMAT_END, }PXP_OL_FORMAT; typedef enum _PXP_OVERLAY_ALPHA_CNTL_TYPE{ PXP_OL_ALPHA_CNTL_TYPE_EMBEDDED = 0, PXP_OL_ALPHA_CNTL_TYPE_OVERRIDE = 1, PXP_OL_ALPHA_CNTL_TYPE_MULTIPLY = 2, PXP_OL_ALPHA_CNTL_TYPE_ROPS = 3, PXP_OL_ALPHA_CNTL_TYPE_END }PXP_OL_ALPHA_CNTL_TYPE; typedef struct { PXP_S0_FORMAT in_format; PXP_OUT_FORMAT out_format; uint8_t in_interlace_enable; uint8_t out_interlace_enable; uint32_t in_place; PXP_ROTATE rotate; uint8_t vflip_enable; uint8_t hflip_enable; uint8_t crop_enable; uint8_t scale_enable; uint8_t alpha_out_enable; }pxp_param; /* Overlay Func */ int pxp_overlay_set_addr(PXP_OL_LAYER layer, uint32_t addr); int pxp_overlay_set_size(PXP_OL_LAYER layer, uint32_t xbase, uint32_t ybase, uint32_t width, uint32_t height); int pxp_overlay_set_format(PXP_OL_LAYER layer, PXP_OL_FORMAT format); int pxp_overlay_set_rop(PXP_OL_LAYER layer, uint32_t rop); int pxp_overlay_set_alpha_cntl_type(PXP_OL_LAYER layer, PXP_OL_ALPHA_CNTL_TYPE type); int pxp_overlay_set_alpha_value(PXP_OL_LAYER layer, uint32_t value); int pxp_overlay_colorkey_enable(PXP_OL_LAYER layer, uint32_t enable); int pxp_set_overlay_color_key(uint32_t low, uint32_t high); int pxp_overlay_enable(PXP_OL_LAYER layer, uint32_t enable); /* PXP Common Func */ int pxp_set_input_addr(uint32_t yaddr, uint32_t uaddr, uint32_t vaddr); int pxp_set_s0_input_size(uint32_t xoffset, uint32_t yoffset, uint32_t width, uint32_t height); int pxp_set_s0_cropping_size(uint32_t xbase, uint32_t ybase, uint32_t width, uint32_t height); int pxp_set_s0_scale_factor(uint32_t xscale, uint32_t yscale); int pxp_set_output_addr(uint32_t addr, uint32_t addr2); int pxp_set_output_size(uint32_t width, uint32_t height); int pxp_set_output_alpha(uint32_t alpha); int pxp_set_control_param(pxp_param *param); int pxp_start(void); /* PXP default value Func: Interface with default argument value, may be you need them. If you not sure, ingore them. */ int pxp_set_s0_background_color(uint32_t color); int pxp_set_s0_color_key(uint32_t low, uint32_t high); int pxp_set_s0_scale_offset(uint32_t x, uint32_t y); int pxp_set_output_alpha(uint32_t alpha); int pxp_set_block_size(PXP_BLOCK_SIZE_TYPE type); int pxp_set_color_space_conversion_coefficient(PXP_CSCOEFF mode); int pxp_init(void); int pxp_scaler_rotate(uint32_t s0buf, uint32_t s0ubuf, uint32_t s0vbuf, int s0format, uint32_t s0width, uint32_t s0height, uint32_t outbuf, uint32_t outbuf2, int outformat, uint32_t outwidth, uint32_t outheight, int outangle); int pxp_rotate(uint32_t s0buf, uint32_t s0ubuf, uint32_t s0vbuf, int s0format, uint32_t s0width, uint32_t s0height, uint32_t outbuf, uint32_t outbuf2, int outformat, int outangle); #endif