179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/* Copyright(c) 2011 Samsung Electronics Co, Ltd.
279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin *
379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * This program is free software; you can redistribute it and/or modify
479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * it under the terms of the GNU General Public License version 2 as
579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * published by the Free Software Foundation.
679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin *
779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * Alternatively, Licensed under the Apache License, Version 2.0 (the "License");
879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * you may not use this file except in compliance with the License.
979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * You may obtain a copy of the License at
1079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin *
1179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin *      http://www.apache.org/licenses/LICENSE-2.0
1279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin *
1379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * Unless required by applicable law or agreed to in writing, software
1479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * distributed under the License is distributed on an "AS IS" BASIS,
1579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * See the License for the specific language governing permissions and
1779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * limitations under the License.
1879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin*/
1979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
2079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#ifndef _S5P_FIMC_H_
2179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define _S5P_FIMC_H_
2279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
2379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#include "videodev2.h"
24234f72f741d0c0cafd10effafbae4c48275d4f90Jiho Chang#include "videodev2_exynos_media.h"
2579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
2679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/*
2779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * G E N E R A L S
2879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin *
2979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin*/
3079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
3179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/*
3279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * P I X E L   F O R M A T   G U I D E
3379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin *
3479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * The 'x' means 'DO NOT CARE'
3579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * The '*' means 'FIMC SPECIFIC'
3679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * For some fimc formats, we couldn't find equivalent format in the V4L2 FOURCC.
3779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin *
3879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * FIMC TYPE    PLANES  ORDER       V4L2_PIX_FMT
3979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * ---------------------------------------------------------
4079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * RGB565   x   x       V4L2_PIX_FMT_RGB565
4179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * RGB888   x   x       V4L2_PIX_FMT_RGB24
4279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV420   2   LSB_CBCR    V4L2_PIX_FMT_NV12
4379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV420   2   LSB_CRCB    V4L2_PIX_FMT_NV21
4479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV420   2   MSB_CBCR    V4L2_PIX_FMT_NV21X*
4579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV420   2   MSB_CRCB    V4L2_PIX_FMT_NV12X*
4679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV420   3   x       V4L2_PIX_FMT_YUV420
4779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422   1   YCBYCR      V4L2_PIX_FMT_YUYV
4879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422   1   YCRYCB      V4L2_PIX_FMT_YVYU
4979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422   1   CBYCRY      V4L2_PIX_FMT_UYVY
5079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422   1   CRYCBY      V4L2_PIX_FMT_VYUY*
5179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422   2   LSB_CBCR    V4L2_PIX_FMT_NV16*
5279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422   2   LSB_CRCB    V4L2_PIX_FMT_NV61*
5379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422   2   MSB_CBCR    V4L2_PIX_FMT_NV16X*
5479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422   2   MSB_CRCB    V4L2_PIX_FMT_NV61X*
5579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * YUV422   3   x       V4L2_PIX_FMT_YUV422P
5679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin *
5779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin*/
5879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
5979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/*
6079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * V 4 L 2   F I M C   E X T E N S I O N S
6179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin *
6279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin*/
6379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_YVYU       v4l2_fourcc('Y', 'V', 'Y', 'U')
6479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
6579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/* FOURCC for FIMC specific */
6679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_NV12X      v4l2_fourcc('N', '1', '2', 'X')
6779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_NV21X      v4l2_fourcc('N', '2', '1', 'X')
6879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_VYUY       v4l2_fourcc('V', 'Y', 'U', 'Y')
6979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_NV16       v4l2_fourcc('N', 'V', '1', '6')
7079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_NV61       v4l2_fourcc('N', 'V', '6', '1')
7179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_NV16X      v4l2_fourcc('N', '1', '6', 'X')
7279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_PIX_FMT_NV61X      v4l2_fourcc('N', '6', '1', 'X')
7379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
7479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/* CID extensions */
7579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_CID_ROTATION       (V4L2_CID_PRIVATE_BASE + 0)
7679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_CID_OVLY_MODE              (V4L2_CID_PRIVATE_BASE + 9)
7779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_CID_GET_PHY_SRC_YADDR  (V4L2_CID_PRIVATE_BASE + 12)
7879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_CID_GET_PHY_SRC_CADDR  (V4L2_CID_PRIVATE_BASE + 13)
7979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_CID_RESERVED_MEM_BASE_ADDR (V4L2_CID_PRIVATE_BASE + 20)
8079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define V4L2_CID_FIMC_VERSION       (V4L2_CID_PRIVATE_BASE + 21)
8179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
8279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin/*
8379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin * U S E R   D E F I N E D   T Y P E S
8479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin *
8579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin*/
8679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#define FIMC1_RESERVED_SIZE 32768
8779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
8879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavinenum fimc_overlay_mode {
8979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    FIMC_OVLY_NOT_FIXED       = 0x0,    /* Overlay mode isn't fixed. */
9079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    FIMC_OVLY_FIFO            = 0x1,    /* Non-destructive Overlay with FIFO */
9179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    FIMC_OVLY_DMA_AUTO        = 0x2,    /* Non-destructive Overlay with DMA */
9279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    FIMC_OVLY_DMA_MANUAL      = 0x3,    /* Non-destructive Overlay with DMA */
9379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    FIMC_OVLY_NONE_SINGLE_BUF = 0x4,    /* Destructive Overlay with DMA single destination buffer */
9479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    FIMC_OVLY_NONE_MULTI_BUF  = 0x5,    /* Destructive Overlay with DMA multiple dstination buffer */
9579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin};
9679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
9779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavintypedef unsigned int dma_addr_t;
9879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
9979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavinstruct fimc_buf {
10079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    dma_addr_t  base[3];
10179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    size_t      size[3];
10279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    int         planes;
10379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin};
10479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
10579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavinstruct fimc_buffer {
10679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    void    *virt_addr;
10779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    void    *phys_addr;
10879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    size_t  length;
10979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin};
11079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
11179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavinstruct yuv_fmt_list {
11279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    const char      *name;
11379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    const char      *desc;
11479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    unsigned int    fmt;
11579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    int             bpp;
11679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    int             planes;
11779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin};
11879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
11979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavinstruct img_offset {
12079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    int y_h;
12179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    int y_v;
12279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    int cb_h;
12379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    int cb_v;
12479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    int cr_h;
12579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    int cr_v;
12679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin};
12779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
12879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin//------------ STRUCT ---------------------------------------------------------//
12979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
13079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavintypedef struct
13179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin{
13279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    unsigned int full_width;            // Source Image Full Width (Virtual screen size)
13379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    unsigned int full_height;           // Source Image Full Height (Virtual screen size)
13479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    unsigned int start_x;               // Source Image Start width offset
13579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    unsigned int start_y;               // Source Image Start height offset
13679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    unsigned int width;                 // Source Image Width
13779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    unsigned int height;                // Source Image Height
13879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    unsigned int buf_addr_phy_rgb_y;    // Base Address of the Source Image (RGB or Y): Physical Address
13979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    unsigned int buf_addr_phy_cb;       // Base Address of the Source Image (CB Component) : Physical Address
14079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    unsigned int buf_addr_phy_cr;       // Base Address of the Source Image (CR Component) : Physical Address
14179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    unsigned int color_space;           // Color Space of the Source Image
14279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    unsigned int planes;                // number of planes for the Image
14379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin} s5p_fimc_img_info;
14479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
14579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavintypedef struct
14679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin{
14779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    s5p_fimc_img_info   src;
14879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    s5p_fimc_img_info   dst;
14979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin} s5p_fimc_params_t;
15079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
15179d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavintypedef struct _s5p_fimc_t {
15279d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    int                 dev_fd;
15379d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    struct fimc_buffer  out_buf;
15479d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
15579d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    s5p_fimc_params_t   params;
15679d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
15779d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin    int                 use_ext_out_mem;
15879d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin} s5p_fimc_t;
15979d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin
16079d9acb7188c0e47a7df93b088d9548de2cab8c6Dima Zavin#endif
161