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

📄 isp_comm.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *   camera_comm.c
 *
 * Project:
 * --------
 *   MT6219,MT6226,MT6226M,MT6227,MT6228,MT6229
 *
 * Description:
 * ------------
 *   Camera ISP configuration function
 *
 * Author:
 * -------
 *   
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#if defined(ISP_SUPPORT)
#include "drv_comm.h"
#include "stdio.h"
#include "isp_if.h"
#include "image_sensor.h"
#include "sccb.h"
#include "ae_awb.h"
#include "camera_para.h"
#include "med_api.h"
#include "isp_device_if.h"
#include "exif.h"
#if (defined(AF_SUPPORT))
#include "af.h"
#endif

extern kal_uint8	camera_system_operation_mode;
extern kal_uint16 	isp_grab_start_x,isp_grab_start_y;

kal_uint8	shading_apply_mode=CAMERA_SHADING_NORMAL_SET;

// apply camera_para to ISP, AE&AWB and SENSOR 
void apply_camera_para_to_reg(void)
{
	// write camera_para to isp register 
	camera_para_to_isp();

	// write camera_para to ae 
	camera_para_to_ae();

	// write camera_para to sensor register 
	camera_para_to_sensor();
}

// update camera_para from ISP, AE&AWB and SENSOR 
void update_camera_para_from_reg(void)
{
	// update camera_para from isp register 
	isp_to_camera_para();

	// update camera_para from ae 
		// no function call to update camera_para from ae, because ae firmware already update it automatically 

	// update camera_para from sensor register 
	sensor_to_camera_para();
}

// interface to apply camera_para to ISP, AE&AWB 
void load_camera_para(void)
{
	// write camera_para to isp register 
	camera_para_to_isp();

	// write camera_para to ae 
	camera_para_to_ae();
	
}

// interface to apply camera_para to ISP, AE&AWB 	
void camera_para_to_isp(void)
{
#if (defined(MT6228))
	kal_uint32	i;
	kal_uint32 	temp1;
	/* common register start */
	REG_ISP_RGB_OFFSET_ADJUS=camera_para.ISP.reg[5];//0014h
	temp1 = REG_ISP_PREPROCESS_CTRL1& (~REG_PREPROCESS1_GAIN_COMPENSATION_MASK);
	temp1 |= camera_para.ISP.reg[12] & REG_PREPROCESS1_GAIN_COMPENSATION_MASK;	
	REG_ISP_PREPROCESS_CTRL1= temp1;//0x0030h
	for(i=13;i<53;i++)//0034h~00D0h
		*((volatile unsigned int *) (CAMERA_base + i*4))=camera_para.ISP.reg[i];
	for(i=71;i<87;i++)//011Ch~0158h
		*((volatile unsigned int *) (CAMERA_base + i*4))=camera_para.ISP.reg[i];
	for(i=88;i<99;i++)//01A0h~01C8
		*((volatile unsigned int *) (CAMERA_base + i*4 + 64))=camera_para.ISP.reg[i];
	REG_ISP_FLASH_CTRL=camera_para.ISP.reg[AutoDefect_Reg1_ID+2];//01D4h
	/* copy ISP_FRAME_COUNT 0x1D8[15:8] but reserve other control bits */	
	REG_ISP_RESET &= ~REG_CAM_RESET_ISP_FRAME_COUNT_MASK;//0x01D8
	REG_ISP_RESET |= camera_para.ISP.reg[AutoDefect_Reg1_ID+3]&REG_CAM_RESET_ISP_FRAME_COUNT_MASK;
	REG_ISP_HISTOGRAM_BOUNDARY_CTRL3=camera_para.ISP.reg[AutoDefect_Reg1_ID+5];//01E0h
	REG_ISP_HISTOGRAM_BOUNDARY_CTRL4=camera_para.ISP.reg[AutoDefect_Reg1_ID+6];//01E4h
	REG_ISP_HISTOGRAM_BOUNDARY_CTRL5=camera_para.ISP.reg[AutoDefect_Reg1_ID+7];//01E8h
	/* disable copy 0214h~023Ch global variable to reg  */	
	REG_ISP_IMGPROC_HUE0=camera_para.ISP.reg[128];//0240h
	REG_ISP_IMGPROC_HUE1=camera_para.ISP.reg[129];//0244h
	/* common register end */
	
	if(camera_system_operation_mode==CAMERA_SYSTEM_NORMAL_MODE)	
	{
		Set_camera_shading_mode(camera_oper_data.shading_table_mode_set);/* set shading lut mode */
	}
      // Eng. Mode Gamma Table Select
	if(camera_para.PREDGAMMA.gamma_select!=0)
	{
		SET_GAMMA_B1(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][0]);
		SET_GAMMA_B2(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][1]);
		SET_GAMMA_B3(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][2]);
		SET_GAMMA_B4(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][3]);
		SET_GAMMA_B5(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][4]);
		SET_GAMMA_B6(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][5]);
		SET_GAMMA_B7(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][6]);
		SET_GAMMA_B8(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][7]);
		SET_GAMMA_B9(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][8]);
		SET_GAMMA_B10(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][9]);
		SET_GAMMA_B11(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][10]);
	}
#elif (defined(MT6229)||defined(MT6230))	
	kal_uint32	i;
	kal_uint32 temp1, temp2;	
	
	REG_ISP_RGB_OFFSET_ADJUS=camera_para.ISP.reg[5];//0014h
	temp1 = REG_ISP_PREPROCESS_CTRL1& (~REG_PREPROCESS1_GAIN_COMPENSATION_MASK);
	temp1 |= camera_para.ISP.reg[12] & REG_PREPROCESS1_GAIN_COMPENSATION_MASK;	
	REG_ISP_PREPROCESS_CTRL1= temp1;//0x0030h	
	for(i=13;i<52;i++)//0034h~00CDh
		*((volatile unsigned int *) (CAMERA_base + i*4))=camera_para.ISP.reg[i];
	/* set gamma 1024 disable & 00D0h */
	*((volatile unsigned int *) (CAMERA_base + gamma_global_1024_no*4))=camera_para.ISP.reg[gamma_global_1024_no]&(~REG_GAMMA_OPERATION_1024_ENABLE_BIT);		
	for(i=71;i<95;i++)//011Ch~0178h
		*((volatile unsigned int *) (CAMERA_base + i*4))=camera_para.ISP.reg[i];
	for(i=104;i<115;i++)//01A0h~01C8h
		*((volatile unsigned int *) (CAMERA_base + i*4))=camera_para.ISP.reg[i];	
	REG_ISP_FLASH_CTRL=camera_para.ISP.reg[AutoDefect_Reg1_ID+2];//01D4h	
	REG_ISP_HISTOGRAM_BOUNDARY_CTRL3=camera_para.ISP.reg[AutoDefect_Reg1_ID+5];//01E0h
	REG_ISP_HISTOGRAM_BOUNDARY_CTRL4=camera_para.ISP.reg[AutoDefect_Reg1_ID+6];//01E4h
	REG_ISP_HISTOGRAM_BOUNDARY_CTRL5=camera_para.ISP.reg[AutoDefect_Reg1_ID+7];//01E8h
	/* disable copy 0214h~023Ch global variable to reg  */	
	for(i=147;i<152;i++)//024Ch~025Ch
		*((volatile unsigned int *) (CAMERA_base + i*4))=camera_para.ISP.reg[i];
	//bypass gamma		
	temp1 = REG_ISP_COLOR_PROCESS_STAGE_CTRL2;//by gamma
	temp2 = REG_ISP_GAMMA_OPERATION3;//output to memory
	ENABLE_GAMMA_FUNCTION_BYPASS;//disable gamma
	DISABLE_1024_GAMMA_TABLE;//disable output to memory
	for(i=0;i<256;i++)//1000h~13FCh gamma table 1024
		INTMEM_GAMMA_1024(i)=camera_gamma.gamma[i];
	//restore gamma enable	
	REG_ISP_COLOR_PROCESS_STAGE_CTRL2 = temp1;//recover gamma
	REG_ISP_GAMMA_OPERATION3 = temp2;//recover output to memory
	if(camera_system_operation_mode==CAMERA_SYSTEM_NORMAL_MODE)	
	{	
		Set_camera_shading_mode(camera_oper_data.shading_table_mode_set);/* set shading lut mode */		
	}
      // Eng. Mode Gamma Table Select
	if(camera_para.PREDGAMMA.gamma_select!=0)
	{
		SET_GAMMA_B1(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][0]);
		SET_GAMMA_B2(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][1]);
		SET_GAMMA_B3(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][2]);
		SET_GAMMA_B4(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][3]);
		SET_GAMMA_B5(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][4]);
		SET_GAMMA_B6(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][5]);
		SET_GAMMA_B7(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][6]);
		SET_GAMMA_B8(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][7]);
		SET_GAMMA_B9(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][8]);
		SET_GAMMA_B10(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][9]);
		SET_GAMMA_B11(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][10]);
	}	
#elif (defined(MT6226)||defined(MT6226M)||defined(MT6227))
	kal_uint32	i;
	kal_uint32 temp1, temp2;	
	
	REG_ISP_RGB_OFFSET_ADJUS=camera_para.ISP.reg[5];//0014h
	temp1 = REG_ISP_PREPROCESS_CTRL1& (~REG_PREPROCESS1_GAIN_COMPENSATION_MASK);
	temp1 |= camera_para.ISP.reg[12] & REG_PREPROCESS1_GAIN_COMPENSATION_MASK;	
	REG_ISP_PREPROCESS_CTRL1= temp1;//0x0030h		
	for(i=13;i<52;i++)//0034h~00ECh
		*((volatile unsigned int *) (CAMERA_base + i*4))=camera_para.ISP.reg[i];
	/* set gamma 1024 disable & 00D0h */
	*((volatile unsigned int *) (CAMERA_base + gamma_global_1024_no*4))=camera_para.ISP.reg[gamma_global_1024_no]&(~REG_GAMMA_OPERATION_1024_ENABLE_BIT);	
	for(i=71;i<95;i++)//011Ch~0178h
		*((volatile unsigned int *) (CAMERA_base + i*4))=camera_para.ISP.reg[i];
	REG_ISP_FLASH_CTRL=camera_para.ISP.reg[AutoDefect_Reg1_ID+2];//01D4h	
	REG_ISP_HISTOGRAM_BOUNDARY_CTRL3=camera_para.ISP.reg[AutoDefect_Reg1_ID+5];//01E0h
	REG_ISP_HISTOGRAM_BOUNDARY_CTRL4=camera_para.ISP.reg[AutoDefect_Reg1_ID+6];//01E4h
	REG_ISP_HISTOGRAM_BOUNDARY_CTRL5=camera_para.ISP.reg[AutoDefect_Reg1_ID+7];//01E8h
	/* disable copy 0214h~023Ch global variable to reg  */	
	for(i=139;i<144;i++)//024Ch~025Ch
		*((volatile unsigned int *) (CAMERA_base + i*4 + 32))=camera_para.ISP.reg[i];
	//bypass gamma		
	temp1 = REG_ISP_COLOR_PROCESS_STAGE_CTRL2;//by gamma
	temp2 = REG_ISP_GAMMA_OPERATION3;//output to memory
	ENABLE_GAMMA_FUNCTION_BYPASS;//disable gamma
	DISABLE_1024_GAMMA_TABLE;//disable output to memory
	for(i=0;i<256;i++)//1000h~13FCh gamma table 1024
		INTMEM_GAMMA_1024(i)=camera_gamma.gamma[i];
	//restore gamma enable	
	REG_ISP_COLOR_PROCESS_STAGE_CTRL2 = temp1;//recover gamma
	REG_ISP_GAMMA_OPERATION3 = temp2;//recover output to memory
	if(camera_system_operation_mode==CAMERA_SYSTEM_NORMAL_MODE)	
	{	
		Set_camera_shading_mode(camera_oper_data.shading_table_mode_set);/* set shading lut mode */		
	}
      // Eng. Mode Gamma Table Select
	if(camera_para.PREDGAMMA.gamma_select!=0)
	{
		SET_GAMMA_B1(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][0]);
		SET_GAMMA_B2(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][1]);
		SET_GAMMA_B3(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][2]);
		SET_GAMMA_B4(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][3]);
		SET_GAMMA_B5(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][4]);
		SET_GAMMA_B6(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][5]);
		SET_GAMMA_B7(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][6]);
		SET_GAMMA_B8(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][7]);
		SET_GAMMA_B9(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][8]);
		SET_GAMMA_B10(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][9]);
		SET_GAMMA_B11(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][10]);
	}
#elif (defined(MT6219))
	kal_uint32	i;
	
	*((volatile unsigned int *) (CAMERA_base + 20))=camera_para.ISP.reg[5];
	for(i=13;i<53;i++)//0034h~00D0h
		*((volatile unsigned int *) (CAMERA_base + i*4))=camera_para.ISP.reg[i];
	if(camera_para.PREDGAMMA.gamma_select!=0)
	{
		SET_GAMMA_B1(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][0]);
		SET_GAMMA_B2(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][1]);
		SET_GAMMA_B3(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][2]);
		SET_GAMMA_B4(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][3]);
		SET_GAMMA_B5(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][4]);
		SET_GAMMA_B6(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][5]);
		SET_GAMMA_B7(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][6]);
		SET_GAMMA_B8(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][7]);
		SET_GAMMA_B9(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][8]);

⌨️ 快捷键说明

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