📄 isp_comm.c
字号:
/*****************************************************************************
* 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]®_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 + -