1a06ef9a6a652c0b1d9d506d426992e9ef47dc72
[GitHub/LineageOS/android_hardware_samsung_slsi_exynos5.git] / include / s5p_fimc_v4l2.h
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 "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