⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mx27_prp.h

📁 LINUX下的ov2640驱动程序
💻 H
字号:
/* * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. *//* * The code contained herein is licensed under the GNU General Public * License. You may obtain a copy of the GNU General Public License * Version 2 or later at the following locations: * * http://www.opensource.org/licenses/gpl-license.html * http://www.gnu.org/copyleft/gpl.html *//*! * @file mx27_prp.h * * @brief Header file for MX27 V4L2 capture driver * * @ingroup MXC_V4L2_CAPTURE */#ifndef __MX27_PRP_H__#define __MX27_PRP_H__#define PRP_REG(ofs)	(IO_ADDRESS(EMMA_BASE_ADDR) + ofs)/* Register definitions of PrP */#define PRP_CNTL			PRP_REG(0x00)#define PRP_INTRCNTL	 		PRP_REG(0x04)#define PRP_INTRSTATUS			PRP_REG(0x08)#define PRP_SOURCE_Y_PTR		PRP_REG(0x0C)#define PRP_SOURCE_CB_PTR		PRP_REG(0x10)#define PRP_SOURCE_CR_PTR		PRP_REG(0x14)#define PRP_DEST_RGB1_PTR		PRP_REG(0x18)#define PRP_DEST_RGB2_PTR		PRP_REG(0x1C)#define PRP_DEST_Y_PTR			PRP_REG(0x20)#define PRP_DEST_CB_PTR			PRP_REG(0x24)#define PRP_DEST_CR_PTR			PRP_REG(0x28)#define PRP_SOURCE_FRAME_SIZE  		PRP_REG(0x2C)#define PRP_CH1_LINE_STRIDE		PRP_REG(0x30)#define PRP_SRC_PIXEL_FORMAT_CNTL	PRP_REG(0x34)#define PRP_CH1_PIXEL_FORMAT_CNTL	PRP_REG(0x38)#define PRP_CH1_OUT_IMAGE_SIZE		PRP_REG(0x3C)#define PRP_CH2_OUT_IMAGE_SIZE		PRP_REG(0x40)#define PRP_SOURCE_LINE_STRIDE		PRP_REG(0x44)#define PRP_CSC_COEF_012		PRP_REG(0x48)#define PRP_CSC_COEF_345		PRP_REG(0x4C)#define PRP_CSC_COEF_678		PRP_REG(0x50)#define PRP_CH1_RZ_HORI_COEF1		PRP_REG(0x54)#define PRP_CH1_RZ_HORI_COEF2		PRP_REG(0x58)#define PRP_CH1_RZ_HORI_VALID		PRP_REG(0x5C)#define PRP_CH1_RZ_VERT_COEF1		PRP_REG(0x60)#define PRP_CH1_RZ_VERT_COEF2		PRP_REG(0x64)#define PRP_CH1_RZ_VERT_VALID		PRP_REG(0x68)#define PRP_CH2_RZ_HORI_COEF1		PRP_REG(0x6C)#define PRP_CH2_RZ_HORI_COEF2		PRP_REG(0x70)#define PRP_CH2_RZ_HORI_VALID		PRP_REG(0x74)#define PRP_CH2_RZ_VERT_COEF1		PRP_REG(0x78)#define PRP_CH2_RZ_VERT_COEF2		PRP_REG(0x7C)#define PRP_CH2_RZ_VERT_VALID		PRP_REG(0x80)#define B_SET(b)			(1 << (b))/* Bit definitions for PrP control register */#define PRP_CNTL_RSTVAL			0x28#define PRP_CNTL_CH1EN			B_SET(0)#define PRP_CNTL_CH2EN			B_SET(1)#define PRP_CNTL_CSI			B_SET(2)#define PRP_CNTL_IN_32			B_SET(3)#define PRP_CNTL_IN_RGB			B_SET(4)#define PRP_CNTL_IN_YUV420		0#define PRP_CNTL_IN_YUV422		PRP_CNTL_IN_32#define PRP_CNTL_IN_RGB16		PRP_CNTL_IN_RGB#define PRP_CNTL_IN_RGB32		(PRP_CNTL_IN_RGB | PRP_CNTL_IN_32)#define PRP_CNTL_CH1_RGB8		0#define PRP_CNTL_CH1_RGB16		B_SET(5)#define PRP_CNTL_CH1_RGB32		B_SET(6)#define PRP_CNTL_CH1_YUV422		(B_SET(5) | B_SET(6))#define PRP_CNTL_CH2_YUV420		0#define PRP_CNTL_CH2_YUV422		B_SET(7)#define PRP_CNTL_CH2_YUV444		B_SET(8)#define PRP_CNTL_CH1_LOOP		B_SET(9)#define PRP_CNTL_CH2_LOOP		B_SET(10)#define PRP_CNTL_AUTODROP		B_SET(11)#define PRP_CNTL_RST			B_SET(12)#define PRP_CNTL_CNTREN			B_SET(13)#define PRP_CNTL_WINEN			B_SET(14)#define PRP_CNTL_UNCHAIN		B_SET(15)#define PRP_CNTL_IN_SKIP_NONE		0#define PRP_CNTL_IN_SKIP_1_2		B_SET(16)#define PRP_CNTL_IN_SKIP_1_3		B_SET(17)#define PRP_CNTL_IN_SKIP_2_3		(B_SET(16) | B_SET(17))#define PRP_CNTL_IN_SKIP_1_4		B_SET(18)#define PRP_CNTL_IN_SKIP_3_4		(B_SET(16) | B_SET(18))#define PRP_CNTL_IN_SKIP_2_5		(B_SET(17) | B_SET(18))#define PRP_CNTL_IN_SKIP_3_5		(B_SET(16) | B_SET(17) | B_SET(18))#define PRP_CNTL_CH1_SKIP_NONE		0#define PRP_CNTL_CH1_SKIP_1_2		B_SET(19)#define PRP_CNTL_CH1_SKIP_1_3		B_SET(20)#define PRP_CNTL_CH1_SKIP_2_3		(B_SET(19) | B_SET(20))#define PRP_CNTL_CH1_SKIP_1_4		B_SET(21)#define PRP_CNTL_CH1_SKIP_3_4		(B_SET(19) | B_SET(21))#define PRP_CNTL_CH1_SKIP_2_5		(B_SET(20) | B_SET(21))#define PRP_CNTL_CH1_SKIP_3_5		(B_SET(19) | B_SET(20) | B_SET(21))#define PRP_CNTL_CH2_SKIP_NONE		0#define PRP_CNTL_CH2_SKIP_1_2		B_SET(22)#define PRP_CNTL_CH2_SKIP_1_3		B_SET(23)#define PRP_CNTL_CH2_SKIP_2_3		(B_SET(22) | B_SET(23))#define PRP_CNTL_CH2_SKIP_1_4		B_SET(24)#define PRP_CNTL_CH2_SKIP_3_4		(B_SET(22) | B_SET(24))#define PRP_CNTL_CH2_SKIP_2_5		(B_SET(23) | B_SET(24))#define PRP_CNTL_CH2_SKIP_3_5		(B_SET(22) | B_SET(23) | B_SET(24))#define PRP_CNTL_FIFO_I128		0#define PRP_CNTL_FIFO_I96		B_SET(25)#define PRP_CNTL_FIFO_I64		B_SET(26)#define PRP_CNTL_FIFO_I32		(B_SET(25) | B_SET(26))#define PRP_CNTL_FIFO_O64		0#define PRP_CNTL_FIFO_O48		B_SET(27)#define PRP_CNTL_FIFO_O32		B_SET(28)#define PRP_CNTL_FIFO_O16		(B_SET(27) | B_SET(28))#define PRP_CNTL_CH2B1			B_SET(29)#define PRP_CNTL_CH2B2			B_SET(30)#define PRP_CNTL_CH2_FLOWEN		B_SET(31)/* Bit definitions for PrP interrupt control register */#define PRP_INTRCNTL_RDERR		B_SET(0)#define PRP_INTRCNTL_CH1WERR		B_SET(1)#define PRP_INTRCNTL_CH2WERR		B_SET(2)#define PRP_INTRCNTL_CH1FC		B_SET(3)#define PRP_INTRCNTL_CH2FC		B_SET(5)#define PRP_INTRCNTL_LBOVF		B_SET(7)#define PRP_INTRCNTL_CH2OVF		B_SET(8)/* Bit definitions for PrP interrupt status register */#define PRP_INTRSTAT_RDERR		B_SET(0)#define PRP_INTRSTAT_CH1WERR		B_SET(1)#define PRP_INTRSTAT_CH2WERR		B_SET(2)#define PRP_INTRSTAT_CH2BUF2		B_SET(3)#define PRP_INTRSTAT_CH2BUF1		B_SET(4)#define PRP_INTRSTAT_CH1BUF2		B_SET(5)#define PRP_INTRSTAT_CH1BUF1		B_SET(6)#define PRP_INTRSTAT_LBOVF		B_SET(7)#define PRP_INTRSTAT_CH2OVF		B_SET(8)#define PRP_CHANNEL_1		0x1#define PRP_CHANNEL_2		0x2/* PRP-CSI config */#define PRP_CSI_EN		0x80#define PRP_CSI_LOOP		(0x40 | PRP_CSI_EN)#define PRP_CSI_IRQ_FRM		(0x08 | PRP_CSI_LOOP)#define PRP_CSI_IRQ_CH1ERR	(0x10 | PRP_CSI_LOOP)#define PRP_CSI_IRQ_CH2ERR	(0x20 | PRP_CSI_LOOP)#define PRP_CSI_IRQ_ALL		(0x38 | PRP_CSI_LOOP)#define PRP_CSI_SKIP_NONE	0#define PRP_CSI_SKIP_1OF2	1#define PRP_CSI_SKIP_1OF3	2#define PRP_CSI_SKIP_2OF3	3#define PRP_CSI_SKIP_1OF4	4#define PRP_CSI_SKIP_3OF4	5#define PRP_CSI_SKIP_2OF5	6#define PRP_CSI_SKIP_4OF5	7#define PRP_PIXIN_RGB565	0x2CA00565#define PRP_PIXIN_RGB888	0x41000888#define PRP_PIXIN_YUV420	0#define PRP_PIXIN_YUYV		0x22000888#define PRP_PIXIN_YVYU		0x20100888#define PRP_PIXIN_UYVY		0x03080888#define PRP_PIXIN_VYUY		0x01180888#define PRP_PIXIN_YUV422	0x62080888#define PRP_PIX1_RGB332		0x14400322#define PRP_PIX1_RGB565		0x2CA00565#define PRP_PIX1_RGB888		0x41000888#define PRP_PIX1_YUYV		0x62000888#define PRP_PIX1_YVYU		0x60100888#define PRP_PIX1_UYVY		0x43080888#define PRP_PIX1_VYUY		0x41180888#define PRP_PIX1_UNUSED		0#define PRP_PIX2_YUV420		0#define PRP_PIX2_YUV422		1#define PRP_PIX2_YUV444		4#define PRP_PIX2_UNUSED		8#define PRP_ALGO_WIDTH_ANY	0#define PRP_ALGO_HEIGHT_ANY	0#define PRP_ALGO_WIDTH_BIL	1#define PRP_ALGO_WIDTH_AVG	2#define PRP_ALGO_HEIGHT_BIL	4#define PRP_ALGO_HEIGHT_AVG	8#define PRP_ALGO_BYPASS		0x10typedef struct _emma_prp_ratio {	unsigned short num;	unsigned short den;} emma_prp_ratio;/* * The following definitions are for resizing. Definition values must not * be changed otherwise decision logic will be wrong. */#define BC_COEF		3#define MAX_TBL		20#define SZ_COEF		(1 << BC_COEF)#define ALGO_AUTO	0#define ALGO_BIL	1#define ALGO_AVG	2typedef struct {	char tbl[20];		/* table entries */	char len;		/* table length used */	char algo;		/* ALGO_xxx */	char ratio[20];		/* ratios used */} scale_t;/* * structure for prp scaling. * algorithm - bilinear or averaging for each axis * PRP_ALGO_WIDTH_x | PRP_ALGO_HEIGHT_x | PRP_ALGO_BYPASS  * PRP_ALGO_BYPASS - Ch1 will not use Ch2 scaling with this flag */typedef struct _emma_prp_scale {	unsigned char algo;	emma_prp_ratio width;	emma_prp_ratio height;} emma_prp_scale;typedef struct emma_prp_cfg {	unsigned int in_pix;	/* PRP_PIXIN_xxx */	unsigned short in_width;	/* image width, 32 - 2044 */	unsigned short in_height;	/* image height, 32 - 2044 */	unsigned char in_csi;	/* PRP_CSI_SKIP_x | PRP_CSI_LOOP */	unsigned short in_line_stride;	/* in_line_stride and in_line_skip */	unsigned short in_line_skip;	/* allow cropping from CSI */	unsigned int in_ptr;	/* bus address */	/*	 * in_csc[9] = 1 -> Y-16	 * if in_csc[1..9] == 0	 *      in_csc[0] represents YUV range 0-3 = A0,A1,B0,B1;	 * else	 *      in_csc[0..9] represents either format	 */	unsigned short in_csc[10];	unsigned char ch2_pix;	/* PRP_PIX2_xxx */	emma_prp_scale ch2_scale;	/* resizing paramters */	unsigned short ch2_width;	/* 4-2044, 0 = scaled */	unsigned short ch2_height;	/* 4-2044, 0 = scaled */	unsigned int ch2_ptr;	/* bus addr */	unsigned int ch2_ptr2;	/* bus addr for 2nd buf (loop mode) */	unsigned char ch2_csi;	/* PRP_CSI_SKIP_x | PRP_CSI_LOOP */	unsigned int ch1_pix;	/* PRP_PIX1_xxx */	emma_prp_scale ch1_scale;	/* resizing parameters */	unsigned short ch1_width;	/* 4-2044, 0 = scaled */	unsigned short ch1_height;	/* 4-2044, 0 = scaled */	unsigned short ch1_stride;	/* 4-4088, 0 = ch1_width */	unsigned int ch1_ptr;	/* bus addr */	unsigned int ch1_ptr2;	/* bus addr for 2nd buf (loop mode) */	unsigned char ch1_csi;	/* PRP_CSI_SKIP_x | PRP_CSI_LOOP */	/*	 * channel resizing coefficients	 * scale[0] for channel 1 width	 * scale[1] for channel 1 height	 * scale[2] for channel 2 width	 * scale[3] for channel 2 height	 */	scale_t scale[4];} emma_prp_cfg;int prphw_reset(void);int prphw_enable(int channel);int prphw_disable(int channel);int prphw_inptr(emma_prp_cfg *);int prphw_ch1ptr(emma_prp_cfg *);int prphw_ch1ptr2(emma_prp_cfg *);int prphw_ch2ptr(emma_prp_cfg *);int prphw_ch2ptr2(emma_prp_cfg *);int prphw_cfg(emma_prp_cfg *);int prphw_isr(void);void prphw_init(void);void prphw_exit(void);/* * scale	out	coefficient table * din		in	scale numerator * dout		in	scale denominator * inv		in	pre-scale dimension * vout		in/out	post-scale output dimension * pout		out	post-scale internal dimension [opt] * retry	in	retry times (round the output length) when need */int prp_scale(scale_t * pscale, int din, int dout, int inv,	      unsigned short *vout, unsigned short *pout, int ch);int prp_init(void *dev_id);void prp_exit(void *dev_id);int prp_enc_select(void *data);int prp_enc_deselect(void *data);int prp_vf_select(void *data);int prp_vf_deselect(void *data);int prp_still_select(void *data);int prp_still_deselect(void *data);#endif				/* __MX27_PRP_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -