/* * linux-3.10/drivers/media/platform/sunxi-vin/vin-csi/bsp_csi.h * * Copyright (c) 2007-2017 Allwinnertech Co., Ltd. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ /* * sunxi csi bsp header file * Author:raymonxiu */ #ifndef __BSP__CSI__H__ #define __BSP__CSI__H__ #include "csi_reg.h" #include "../utility/bsp_common.h" #define MAX_CH_NUM 4 #define CSI_ALIGN_4K(x) (((x) + (4095)) & ~(4095)) #define CSI_ALIGN_32B(x) (((x) + (31)) & ~(31)) #define CSI_ALIGN_16B(x) (((x) + (15)) & ~(15)) #define CSI_ALIGN_8B(x) (((x) + (7)) & ~(7)) enum ref_pol { ACTIVE_LOW, /* active low */ ACTIVE_HIGH, /* active high */ }; enum edge_pol { FALLING, /* active falling */ RISING, /* active rising */ }; /* * the same define as enum csi_input_seq */ enum bus_fmt_seq { /* only when input is yuv422 */ YUYV = 0, YVYU, UYVY, VYUY, /* only when input is byer */ RGRG = 0, /* first line sequence is RGRG... */ GRGR, /* first line sequence is GRGR... */ BGBG, /* first line sequence is BGBG... */ GBGB, /* first line sequence is GBGB... */ }; struct bus_timing { enum ref_pol href_pol; enum ref_pol vref_pol; enum edge_pol pclk_sample; enum ref_pol field_even_pol; /*field 0/1 0:odd 1:even*/ }; struct bus_info { enum v4l2_mbus_type bus_if; struct bus_timing bus_tmg; enum v4l2_mbus_pixelcode bus_ch_fmt[MAX_CH_NUM]; /* define the same as V4L2 */ unsigned int ch_total_num; }; struct frame_size { unsigned int width; /* in pixel unit */ unsigned int height; /* in pixel unit */ }; struct frame_offset { unsigned int hoff; /* in pixel unit */ unsigned int voff; /* in pixel unit */ }; /* * frame arrangement * Indicate that how the channel images are put together into one buffer */ struct frame_arrange { unsigned char column; unsigned char row; }; struct frame_info { struct frame_arrange arrange; struct frame_size ch_size[MAX_CH_NUM]; struct frame_offset ch_offset[MAX_CH_NUM]; unsigned int pix_ch_fmt[MAX_CH_NUM]; enum v4l2_field ch_field[MAX_CH_NUM]; /* define the same as V4L2 */ unsigned int frm_byte_size; }; extern int bsp_csi_set_base_addr(unsigned int sel, unsigned long addr); extern void bsp_csi_enable(unsigned int sel); extern void bsp_csi_disable(unsigned int sel); extern void bsp_csi_reset(unsigned int sel); extern int bsp_csi_set_fmt(unsigned int sel, struct bus_info *bus_info, struct frame_info *frame_info); extern int bsp_csi_set_size(unsigned int sel, struct bus_info *bus_info, struct frame_info *frame_info); void bsp_csi_set_addr(unsigned int sel, u64 buf_base_addr, u64 buf_base_addr_y, u64 buf_base_addr_u, u64 buf_base_addr_v); extern void bsp_csi_cap_start(unsigned int sel, unsigned int ch_total_num, enum csi_cap_mode csi_cap_mode); extern void bsp_csi_cap_stop(unsigned int sel, unsigned int ch_total_num, enum csi_cap_mode csi_cap_mode); extern void bsp_csi_int_enable(unsigned int sel, unsigned int ch, enum csi_int_sel interrupt); extern void bsp_csi_int_disable(unsigned int sel, unsigned int ch, enum csi_int_sel interrupt); extern void bsp_csi_int_get_status(unsigned int sel, unsigned int ch, struct csi_int_status *status); extern void bsp_csi_int_clear_status(unsigned int sel, unsigned int ch, enum csi_int_sel interrupt); #endif /* __BSP__CSI__H__ */