210 lines
6.6 KiB
C
210 lines
6.6 KiB
C
#ifndef __ISC_H__
|
|
#define __ISC_H__
|
|
|
|
#include "gpio.h"
|
|
#include "fs/fs.h"
|
|
#include "spinlock.h"
|
|
#include "asm/isp_dev.h"
|
|
|
|
|
|
/****** ISC sensor group_port ********/
|
|
#define ISC_GROUPA IO_PORTA
|
|
#define ISC_GROUPC IO_PORTC
|
|
#define ISC_GROUPH IO_PORTH
|
|
|
|
/*************ie type ****************/
|
|
#define EXTERN_CONNECT_IE (BIT(3)|BIT(4))//DMA_CON
|
|
#define LDONE_IE BIT(3)//COM_CON
|
|
#define FDONE_IE BIT(4)//COM_CON
|
|
#define BDONE_IE BIT(5)//COM_CON
|
|
#define ISCERR_PROTEC_CLR BIT(12)//COM_CON
|
|
#define ISCERR_PROTEC_PND BIT(13)//COM_CON
|
|
|
|
#define BWERR_IE BIT(6)//COM_CON
|
|
#define LINERR_IE BIT(7)//COM_CON
|
|
#define OSDERR_IE BIT(8)//COM_CON
|
|
#define SET_IE(reg,ie_type) (reg |= ie_type)
|
|
#define SET_IE(reg,ie_type) (reg |= ie_type)
|
|
#define GET_IE(reg,ie_type) (reg & ie_type)
|
|
#define GET_PND(reg,pnd_type) (reg & pnd_type)
|
|
#define UNSET_IE(reg,ie_type) (reg &=~ie_type)
|
|
|
|
/********** pending and clear type *************/
|
|
#define LDONE_PND BIT(3)
|
|
#define FDONE_PND BIT(4)
|
|
#define BDONE_PND BIT(5)
|
|
#define BWERR_PND BIT(6)
|
|
#define LINERR_PND BIT(7)
|
|
#define OSDERR_PND BIT(8)
|
|
|
|
/*************read pending*************/
|
|
#define IRQ_FSTART(reg, r) ((r & FSTART_PND) && (reg & FSTART_IE))
|
|
#define IRQ_FDONE(reg, r) ((r & FDONE_PND) && (reg & FDONE_IE))
|
|
#define IRQ_LDONE(reg, r) ((r & LDONE_PND) && (reg & LDONE_IE))
|
|
#define IRQ_LINERR(reg, r) ((r & LINERR_PND) && (reg & LINERR_IE))
|
|
#define IRQ_LOUTERR(reg, r) ((r & LOUTERR_PND) && (reg & LOUTERR_IE))
|
|
#define IRQ_BDONE(reg, r) ((r & BDONE_PND) && (reg & BDONE_IE))
|
|
#define IRQ_BWERR(reg, r) ((r & BWERR_PND) && (reg & BWERR_IE))
|
|
|
|
#define IRQ_OSD_ERR(reg) (reg & BIT(3))
|
|
|
|
/****************buf mode**************/
|
|
#define FRAME_BUF_MODE 0x0
|
|
#define CYCLE_BUF_MODE 0x1
|
|
#define REGISTER_DEBUG 0x2
|
|
|
|
typedef enum {
|
|
ISC_DATAMODE_8B,
|
|
ISC_DATAMODE_8B_REVERSE,
|
|
} isc_datamode_t;
|
|
|
|
typedef enum {
|
|
ISC_INPUT_DATAMODE_YUYV = 0,
|
|
ISC_INPUT_DATAMODE_UYVY,
|
|
} isc_input_datamode_t;
|
|
|
|
typedef enum {
|
|
ISC_OUTPUT_DATAMODE_YUV422 = 2,
|
|
ISC_OUTPUT_DATAMODE_YUV420 = 4,
|
|
} isc_output_datamode_t;
|
|
|
|
typedef enum {
|
|
ISC_TIMINGMODE_DVP = 0,
|
|
ISC_TIMINGMODE_ITU656,
|
|
ISC_TIMINGMODE_ITU601,
|
|
ISC_TIMINGMODE_BT656,
|
|
ISC_TIMINGMODE_VSYNC,
|
|
} isc_timingmode_t;
|
|
|
|
typedef enum {
|
|
ISC_SCANMODE_PROGRESSIVE = 0,
|
|
ISC_SCANMODE_ODD,
|
|
ISC_SCANMODE_EVEN,
|
|
} isc_scanmode_t;
|
|
|
|
typedef enum {
|
|
ISC_DATAMUX_SENSOR0 = 0,
|
|
ISC_DATAMUX_SENSOR1,
|
|
ISC_DATAMUX_MIPI,
|
|
} isc_datamux_t;
|
|
|
|
typedef enum {
|
|
ISC_IRQ_ERR_NONE = 0,
|
|
ISC_IRQ_BANDWITH_ERR = 0x12000,
|
|
ISC_IRQ_LINE_IN_ERR,
|
|
ISC_IRQ_LINE_OUT_ERR,
|
|
} ISC_IRQ_ENC_ERR;
|
|
|
|
struct yuv_block_info {
|
|
volatile u8 *y;
|
|
volatile u8 *u;
|
|
volatile u8 *v;
|
|
volatile u32 ylen;
|
|
volatile u32 ulen;
|
|
volatile u32 vlen;
|
|
volatile u16 width;
|
|
volatile u16 height;
|
|
volatile u16 line;
|
|
volatile u8 start;
|
|
};
|
|
|
|
struct isc_cfg {
|
|
u8 id;
|
|
u8 bdone_ref;
|
|
u8 *y;
|
|
u32 y_len;
|
|
u32 u_len;
|
|
u32 v_len;
|
|
u32 yuv_len;
|
|
u32 yuv_buf_size;
|
|
u16 width;
|
|
u16 height;
|
|
JL_ISC_TypeDef *reg;
|
|
u16 line;//循环BUF模式行数
|
|
void *hdl;
|
|
int (*handler)(void *hdl, int code, int ft);
|
|
u8 *fybuf;
|
|
u8 *fubuf;
|
|
u8 *fvbuf;
|
|
volatile u8 *next_yaddr;
|
|
volatile u8 *prev_yaddr;
|
|
volatile u32 yoffset;
|
|
volatile u32 uoffset;
|
|
volatile u32 voffset;
|
|
u32 flen;
|
|
u32 next_dma_addr;
|
|
u32 read_dma_addr;
|
|
OS_SEM *sem;
|
|
u8 dma_copy_id;
|
|
|
|
u32 ppbuf_cnt;
|
|
u32 frame_cnt;
|
|
|
|
volatile u8 fstart;
|
|
volatile u8 buf_mode;
|
|
volatile u8 fps;
|
|
volatile u8 output_mode;
|
|
volatile u8 ppbuf_mode;
|
|
volatile u8 yuv_used;
|
|
volatile u8 yuv_start;
|
|
volatile u8 yuv_use_dam;
|
|
volatile u8 in_irq;
|
|
volatile u8 connjpg;
|
|
|
|
struct yuv_block_info block_info;
|
|
int (*block_done_cb)(void *info);
|
|
void *frame_done_priv;
|
|
int (*frame_done_cb)(void *priv, int id, void *blk_info);
|
|
};
|
|
|
|
extern void isc_sen_init(char id);
|
|
extern void isc_sen_reinit(void *isc);
|
|
extern void *isc_sen_open(char id);
|
|
extern void isc_sen_en(void *isc, u8 en);
|
|
extern void isc_force_en(char id, u8 en);
|
|
extern void isc_sen_start(void *isc);
|
|
extern void isc_sen_stop(void *isc);
|
|
extern void isc_sen_close(void *isc);
|
|
extern void isc_sen_discon_from_jpeg(void *isc);
|
|
extern void isc_sen_set_polarity(void *isc, u8 pclk, u8 vsync, u8 hsync);
|
|
extern void isc_sen_set_datamode(void *isc, isc_datamode_t mode, u32 config, u32 start_io);
|
|
extern void isc_sen_set_output_datamode(void *isc, isc_output_datamode_t mode);
|
|
extern void isc_sen_set_timingmode(void *isc, isc_timingmode_t mode);
|
|
extern void isc_sen_set_vact_hact(void *isc, u16 hact, u16 vact);
|
|
extern void isc_sen_set_bufamode(void *isc, char bufmode, u8 connjpg_mode);
|
|
extern void isc_sen_set_complete(void *isc, char connjpg_mode);
|
|
extern void isc_sen_set_input_datamode(void *isc, sen_in_format_t mode);
|
|
extern void isc_sen_set_yuv_addr(void *isc, u8 *y, u32 yuvbuf_size);
|
|
extern int isc_sen_get_yuv_addr(void *isc, u32 *y);
|
|
extern int isc_sen_get_cfg_line(void *isc);
|
|
extern int isc_sen_set_cfg_line(void *isc, int line);
|
|
extern void isc_sen_set_out_fps(void *isc, u8 src_fps, u8 fps);
|
|
extern void isc_sen_register_irq(void *isc, int (*handler)(void *hdl, int code, int ft));
|
|
extern void *isc_get_handler(void *isc);
|
|
extern int isc_sen_set_hdl(void *isc, void *hdl);
|
|
extern void isc_yuv_mode_set_param(void *isc, u8 *fybuf, u8 *fubuf, u8 *fvbuf, u32 len, OS_SEM *sem);
|
|
extern void isc_yuv_mode_clear(void *isc);
|
|
extern void isc_yuv_mode_close(void *isc);
|
|
extern void *isc_dma_copy_wait(void *isc, u32 *size);
|
|
extern void isc_sen_yuv_addr_lock_reset(struct isc_cfg *isc_info, char dma_buf_id);
|
|
extern void isc_sen_info_init(void *isc);
|
|
extern int isc_sen_get_fps(void *isc);
|
|
extern void isc_sen_ppbuf_mode_set(void *isc, char set);
|
|
extern void isc_sen_block_done_cb_set(void *isc, int (*block_done_cb)(void *priv));
|
|
extern void isc_sen_frame_done_cb_set(void *isc, int (*frame_done_cb)(void *priv, int id));
|
|
extern void isc_sen_frame_done_priv_set(void *isc, void *priv);
|
|
extern void isc_sen_connet_to_jpeg(void *isc, char reset_isc);
|
|
extern void isc_vhsync_exchange(void *isc, char isc_id, int sync);
|
|
|
|
extern void bt656_one_line_init(void *yuv, u32 yuv_size, int width, int height, sen_in_format_t mode);
|
|
extern void bt656_one_line_io_init(u32 pclk_gpio, u32 pclk_sample, u32 pclk_no_filter, u32 data0_gpio, u32 data_gpio_num);
|
|
extern void bt656_one_line_databits_config(u32 databit, u8 msb_lsb_rev, u8 shift);
|
|
extern void bt656_one_line_pclk(u32 pclk_sample, u32 pclk_no_filter);
|
|
extern void bt656_one_line_framedone_reg(int *fdone_cb, void *parm);
|
|
extern void bt656_one_line_en(char en);
|
|
extern void bt656_one_line_exit(void);
|
|
|
|
|
|
#endif
|
|
|