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