1 /* Copyright(c) 2011 Samsung Electronics Co, Ltd. 2 * 3 * This program is free software; you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License version 2 as 5 * published by the Free Software Foundation. 6 * 7 * Alternatively, Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 20 #ifndef _S5P_FIMC_H_ 21 #define _S5P_FIMC_H_ 22 23 #include <linux/videodev2.h> 24 #include <linux/videodev2_exynos_media.h> 25 26 /* 27 * G E N E R A L S 28 * 29 */ 30 31 /* 32 * P I X E L F O R M A T G U I D E 33 * 34 * The 'x' means 'DO NOT CARE' 35 * The '*' means 'FIMC SPECIFIC' 36 * For some fimc formats, we couldn't find equivalent format in the V4L2 FOURCC. 37 * 38 * FIMC TYPE PLANES ORDER V4L2_PIX_FMT 39 * --------------------------------------------------------- 40 * RGB565 x x V4L2_PIX_FMT_RGB565 41 * RGB888 x x V4L2_PIX_FMT_RGB24 42 * YUV420 2 LSB_CBCR V4L2_PIX_FMT_NV12 43 * YUV420 2 LSB_CRCB V4L2_PIX_FMT_NV21 44 * YUV420 2 MSB_CBCR V4L2_PIX_FMT_NV21X* 45 * YUV420 2 MSB_CRCB V4L2_PIX_FMT_NV12X* 46 * YUV420 3 x V4L2_PIX_FMT_YUV420 47 * YUV422 1 YCBYCR V4L2_PIX_FMT_YUYV 48 * YUV422 1 YCRYCB V4L2_PIX_FMT_YVYU 49 * YUV422 1 CBYCRY V4L2_PIX_FMT_UYVY 50 * YUV422 1 CRYCBY V4L2_PIX_FMT_VYUY* 51 * YUV422 2 LSB_CBCR V4L2_PIX_FMT_NV16* 52 * YUV422 2 LSB_CRCB V4L2_PIX_FMT_NV61* 53 * YUV422 2 MSB_CBCR V4L2_PIX_FMT_NV16X* 54 * YUV422 2 MSB_CRCB V4L2_PIX_FMT_NV61X* 55 * YUV422 3 x V4L2_PIX_FMT_YUV422P 56 * 57 */ 58 59 /* 60 * V 4 L 2 F I M C E X T E N S I O N S 61 * 62 */ 63 #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') 64 65 /* FOURCC for FIMC specific */ 66 #define V4L2_PIX_FMT_NV12X v4l2_fourcc('N', '1', '2', 'X') 67 #define V4L2_PIX_FMT_NV21X v4l2_fourcc('N', '2', '1', 'X') 68 #define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') 69 #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') 70 #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') 71 #define V4L2_PIX_FMT_NV16X v4l2_fourcc('N', '1', '6', 'X') 72 #define V4L2_PIX_FMT_NV61X v4l2_fourcc('N', '6', '1', 'X') 73 74 /* CID extensions */ 75 #define V4L2_CID_ROTATION (V4L2_CID_PRIVATE_BASE + 0) 76 #define V4L2_CID_OVLY_MODE (V4L2_CID_PRIVATE_BASE + 9) 77 #define V4L2_CID_GET_PHY_SRC_YADDR (V4L2_CID_PRIVATE_BASE + 12) 78 #define V4L2_CID_GET_PHY_SRC_CADDR (V4L2_CID_PRIVATE_BASE + 13) 79 #define V4L2_CID_RESERVED_MEM_BASE_ADDR (V4L2_CID_PRIVATE_BASE + 20) 80 #define V4L2_CID_FIMC_VERSION (V4L2_CID_PRIVATE_BASE + 21) 81 82 /* 83 * U S E R D E F I N E D T Y P E S 84 * 85 */ 86 #define FIMC1_RESERVED_SIZE 32768 87 88 enum fimc_overlay_mode { 89 FIMC_OVLY_NOT_FIXED = 0x0, /* Overlay mode isn't fixed. */ 90 FIMC_OVLY_FIFO = 0x1, /* Non-destructive Overlay with FIFO */ 91 FIMC_OVLY_DMA_AUTO = 0x2, /* Non-destructive Overlay with DMA */ 92 FIMC_OVLY_DMA_MANUAL = 0x3, /* Non-destructive Overlay with DMA */ 93 FIMC_OVLY_NONE_SINGLE_BUF = 0x4, /* Destructive Overlay with DMA single destination buffer */ 94 FIMC_OVLY_NONE_MULTI_BUF = 0x5, /* Destructive Overlay with DMA multiple dstination buffer */ 95 }; 96 97 typedef unsigned int dma_addr_t; 98 99 struct fimc_buf { 100 dma_addr_t base[3]; 101 size_t size[3]; 102 int planes; 103 }; 104 105 struct fimc_buffer { 106 void *virt_addr; 107 void *phys_addr; 108 size_t length; 109 }; 110 111 struct yuv_fmt_list { 112 const char *name; 113 const char *desc; 114 unsigned int fmt; 115 int bpp; 116 int planes; 117 }; 118 119 struct img_offset { 120 int y_h; 121 int y_v; 122 int cb_h; 123 int cb_v; 124 int cr_h; 125 int cr_v; 126 }; 127 128 //------------ STRUCT ---------------------------------------------------------// 129 130 typedef struct 131 { 132 unsigned int full_width; // Source Image Full Width (Virtual screen size) 133 unsigned int full_height; // Source Image Full Height (Virtual screen size) 134 unsigned int start_x; // Source Image Start width offset 135 unsigned int start_y; // Source Image Start height offset 136 unsigned int width; // Source Image Width 137 unsigned int height; // Source Image Height 138 unsigned int buf_addr_phy_rgb_y; // Base Address of the Source Image (RGB or Y): Physical Address 139 unsigned int buf_addr_phy_cb; // Base Address of the Source Image (CB Component) : Physical Address 140 unsigned int buf_addr_phy_cr; // Base Address of the Source Image (CR Component) : Physical Address 141 unsigned int color_space; // Color Space of the Source Image 142 unsigned int planes; // number of planes for the Image 143 } s5p_fimc_img_info; 144 145 typedef struct 146 { 147 s5p_fimc_img_info src; 148 s5p_fimc_img_info dst; 149 } s5p_fimc_params_t; 150 151 typedef struct _s5p_fimc_t { 152 int dev_fd; 153 struct fimc_buffer out_buf; 154 155 s5p_fimc_params_t params; 156 157 int use_ext_out_mem; 158 } s5p_fimc_t; 159 160 #endif 161