Ejemplo n.º 1
0
static void HI704_Set_Mirror_Flip(kal_uint8 image_mirror)
{
  /********************************************************
    * Page Mode 0: Reg 0x0011 bit[1:0] = [Y Flip : X Flip]
    * 0: Off; 1: On.
    *********************************************************/    
    SENSORDB("[Enter]:HI704 set Mirror_flip func:image_mirror=%d\n",image_mirror);
	
    HI704_write_cmos_sensor(0x03,0x00);     //Page 0	
    HI704_sensor.mirror = (HI704_read_cmos_sensor(0x11) & 0xfc); 

    switch (image_mirror) 
    {
        case IMAGE_NORMAL:
		    HI704_sensor.mirror |= 0x00;
	        break;
	    case IMAGE_H_MIRROR:
		    HI704_sensor.mirror |= 0x01;
	        break;
	    case IMAGE_V_MIRROR:
		    HI704_sensor.mirror |= 0x02;
	        break;
    	case IMAGE_HV_MIRROR:
		    HI704_sensor.mirror |= 0x03;
	        break;
    	default:
	        HI704_sensor.mirror |= 0x00;
    }

    HI704_write_cmos_sensor(0x11, HI704_sensor.mirror);

	SENSORDB("[Exit]:HI704 set Mirror_flip func\n");

}
Ejemplo n.º 2
0
/*************************************************************************
* FUNCTION
*	HI704_set_param_banding
*
* DESCRIPTION
*	banding setting.
*
* PARAMETERS
*	none
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
BOOL HI704_set_param_banding(UINT16 para)
{
    SENSORDB("[Enter]HI704 set_param_banding func:para = %d\n",para);

    if(HI704_sensor.banding == para) return KAL_TRUE;

    spin_lock(&hi704_yuv_drv_lock);
    HI704_sensor.banding = para;
    spin_unlock(&hi704_yuv_drv_lock);

    switch (para)
    {
    case AE_FLICKER_MODE_50HZ:
        {
        HI704_write_cmos_sensor(0x03,0x20);
        HI704_write_cmos_sensor(0x10,0x9c);
        }
        break;
    case AE_FLICKER_MODE_60HZ:
        {
        HI704_write_cmos_sensor(0x03,0x20);
        HI704_write_cmos_sensor(0x10,0x8c);
        }
        break;
    default:
        return KAL_FALSE;
    }
    
    return KAL_TRUE;
} /* HI704_set_param_banding */
Ejemplo n.º 3
0
static void HI704_set_dummy(kal_uint16 dummy_pixels,kal_uint16 dummy_lines)
{	
    HI704_write_cmos_sensor(0x03, 0x00);                        //Page 0
    HI704_write_cmos_sensor(0x40,((dummy_pixels & 0x0F00))>>8);       //HBLANK
    HI704_write_cmos_sensor(0x41,(dummy_pixels & 0xFF));
    HI704_write_cmos_sensor(0x42,((dummy_lines & 0xFF00)>>8));       //VBLANK ( Vsync Type 1)
    HI704_write_cmos_sensor(0x43,(dummy_lines & 0xFF));
}  
Ejemplo n.º 4
0
static void HI704_Set_Mirror_Flip(kal_uint8 image_mirror)
{
    /********************************************************
    * Page Mode 0: Reg 0x0011 bit[1:0] = [Y Flip : X Flip]
    * 0: Off; 1: On.
    *********************************************************/    
    SENSORDB("[Enter]:HI704 set Mirror_flip func:image_mirror=%d\n",image_mirror);
	
    HI704_write_cmos_sensor(0x03,0x00);     //Page 0	
    
    spin_lock(&hi704_yuv_drv_lock);
    HI704_sensor.mirror = (HI704_read_cmos_sensor(0x11) & 0xfc); 

    switch (image_mirror) 
    {
     #ifdef HQ_PROJECT_A61P_HUAWEI
        case IMAGE_NORMAL:
		    HI704_sensor.mirror |= 0x03;
	        break;
	    case IMAGE_H_MIRROR:
		    HI704_sensor.mirror |= 0x01;
	        break;
	    case IMAGE_V_MIRROR:
		    HI704_sensor.mirror |= 0x02;
	        break;
    	case IMAGE_HV_MIRROR:
		    HI704_sensor.mirror |= 0x00;
	        break;
    	default:
	        HI704_sensor.mirror |= 0x03;
     #else
	 case IMAGE_NORMAL:
                    HI704_sensor.mirror |= 0x00;
                break;
            case IMAGE_H_MIRROR:
                    HI704_sensor.mirror |= 0x01;
                break;
            case IMAGE_V_MIRROR:
                    HI704_sensor.mirror |= 0x02;
                break;
        case IMAGE_HV_MIRROR:
                    HI704_sensor.mirror |= 0x03;
                break;
        default:
                HI704_sensor.mirror |= 0x00;
     #endif
    }
    
    spin_unlock(&hi704_yuv_drv_lock);
    HI704_write_cmos_sensor(0x11, HI704_sensor.mirror);
    SENSORDB("[Exit]:HI704 set Mirror_flip func\n");
}
Ejemplo n.º 5
0
static kal_uint8 HI704_power_on(void)
{
    kal_uint8 HI704_sensor_id = 0;
    spin_lock(&hi704_yuv_drv_lock);
    HI704_sensor.pv_pclk = 13000000;
    spin_unlock(&hi704_yuv_drv_lock);
    //Software Reset
    HI704_write_cmos_sensor(0x01,0xf1);
    HI704_write_cmos_sensor(0x01,0xf3);
    HI704_write_cmos_sensor(0x01,0xf1);

    /* Read Sensor ID  */
    HI704_sensor_id = HI704_read_cmos_sensor(0x04);
    SENSORDB("[HI704YUV]:read Sensor ID:%x\n",HI704_sensor_id);	
    return HI704_sensor_id;
}
Ejemplo n.º 6
0
static void HI704_Initial_Setting(void)
{
	kal_uint32 iEcount;
	for(iEcount=0;(!((0xff==(HI704_Initial_Setting_Info[iEcount].address))&&(0xff==(HI704_Initial_Setting_Info[iEcount].data))));iEcount++)
	{	
		HI704_write_cmos_sensor(HI704_Initial_Setting_Info[iEcount].address, HI704_Initial_Setting_Info[iEcount].data);
	}
}
Ejemplo n.º 7
0
UINT32 HI704FeatureControl(MSDK_SENSOR_FEATURE_ENUM FeatureId,
							 UINT8 *pFeaturePara,UINT32 *pFeatureParaLen)
{
    UINT16 u2Temp = 0; 
	UINT16 *pFeatureReturnPara16=(UINT16 *) pFeaturePara;
	UINT16 *pFeatureData16=(UINT16 *) pFeaturePara;
	UINT32 *pFeatureReturnPara32=(UINT32 *) pFeaturePara;
	UINT32 *pFeatureData32=(UINT32 *) pFeaturePara;
	MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData=(MSDK_SENSOR_CONFIG_STRUCT *) pFeaturePara;
	MSDK_SENSOR_REG_INFO_STRUCT *pSensorRegData=(MSDK_SENSOR_REG_INFO_STRUCT *) pFeaturePara;

	switch (FeatureId)
	{
		case SENSOR_FEATURE_GET_RESOLUTION:
			*pFeatureReturnPara16++=HI704_IMAGE_SENSOR_FULL_WIDTH;
			*pFeatureReturnPara16=HI704_IMAGE_SENSOR_FULL_HEIGHT;
			*pFeatureParaLen=4;
		     break;
		case SENSOR_FEATURE_GET_PERIOD:
			*pFeatureReturnPara16++=HI704_IMAGE_SENSOR_PV_WIDTH;//+HI704_sensor.pv_dummy_pixels;
			*pFeatureReturnPara16=HI704_IMAGE_SENSOR_PV_HEIGHT;//+HI704_sensor.pv_dummy_lines;
			*pFeatureParaLen=4;
		     break;
		case SENSOR_FEATURE_GET_PIXEL_CLOCK_FREQ:
			//*pFeatureReturnPara32 = HI704_sensor_pclk/10;
			*pFeatureParaLen=4;
		     break;
		case SENSOR_FEATURE_SET_ESHUTTER:
	
		     break;
		case SENSOR_FEATURE_SET_NIGHTMODE:
			 HI704_night_mode((BOOL) *pFeatureData16);
		     break;
		case SENSOR_FEATURE_SET_GAIN:
			 break; 
		case SENSOR_FEATURE_SET_FLASHLIGHT:
		     break;
		case SENSOR_FEATURE_SET_ISP_MASTER_CLOCK_FREQ:
		     break;
		case SENSOR_FEATURE_SET_REGISTER:
			 HI704_write_cmos_sensor(pSensorRegData->RegAddr, pSensorRegData->RegData);
		     break;
		case SENSOR_FEATURE_GET_REGISTER:
			 pSensorRegData->RegData = HI704_read_cmos_sensor(pSensorRegData->RegAddr);
		     break;
		case SENSOR_FEATURE_GET_CONFIG_PARA:
			 memcpy(pSensorConfigData, &HI704SensorConfigData, sizeof(MSDK_SENSOR_CONFIG_STRUCT));
			 *pFeatureParaLen=sizeof(MSDK_SENSOR_CONFIG_STRUCT);
		     break;
		case SENSOR_FEATURE_SET_CCT_REGISTER:
		case SENSOR_FEATURE_GET_CCT_REGISTER:
		case SENSOR_FEATURE_SET_ENG_REGISTER:
		case SENSOR_FEATURE_GET_ENG_REGISTER:
		case SENSOR_FEATURE_GET_REGISTER_DEFAULT:
		case SENSOR_FEATURE_CAMERA_PARA_TO_SENSOR:
		case SENSOR_FEATURE_SENSOR_TO_CAMERA_PARA:
		case SENSOR_FEATURE_GET_GROUP_INFO:
		case SENSOR_FEATURE_GET_ITEM_INFO:
		case SENSOR_FEATURE_SET_ITEM_INFO:
		case SENSOR_FEATURE_GET_ENG_INFO:
		     break;
		case SENSOR_FEATURE_GET_GROUP_COUNT:
	               // *pFeatureReturnPara32++=0;
			//*pFeatureParaLen=4;
		     break; 
		
		case SENSOR_FEATURE_GET_LENS_DRIVER_ID:
			// get the lens driver ID from EEPROM or just return LENS_DRIVER_ID_DO_NOT_CARE
			// if EEPROM does not exist in camera module.
			*pFeatureReturnPara32=LENS_DRIVER_ID_DO_NOT_CARE;
			*pFeatureParaLen=4;
		     break;
		case SENSOR_FEATURE_SET_YUV_CMD:
			 HI704YUVSensorSetting((FEATURE_ID)*pFeatureData32, *(pFeatureData32+1));
		     break;	
		case SENSOR_FEATURE_SET_VIDEO_MODE:
		     HI704YUVSetVideoMode(*pFeatureData16);
		     break; 
		case SENSOR_FEATURE_CHECK_SENSOR_ID:
			HI704_GetSensorID(pFeatureData32); 
			break; 
		default:
			 break;			
	}
	return ERROR_NONE;
}	/* HI704FeatureControl() */
Ejemplo n.º 8
0
/*************************************************************************
* FUNCTION
*	HI704_set_param_exposure
*
* DESCRIPTION
*	exposure setting.
*
* PARAMETERS
*	none
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
BOOL HI704_set_param_exposure(UINT16 para)
{
    SENSORDB("[Enter]HI704 set_param_exposure func:para = %d\n",para);

    if(HI704_sensor.exposure == para) return KAL_TRUE;

    spin_lock(&hi704_yuv_drv_lock);
    HI704_sensor.exposure = para;
    spin_unlock(&hi704_yuv_drv_lock);

	   HI704_write_cmos_sensor(0x03,0x10);
	   HI704_write_cmos_sensor(0x12,HI704_read_cmos_sensor(0x12)|0x10);
	switch (para)
	{
		case AE_EV_COMP_13:  //+4 EV
			HI704_write_cmos_sensor(0x40,0x60);
			break;  
		case AE_EV_COMP_10:  //+3 EV
			HI704_write_cmos_sensor(0x40,0x48);
			break;    
		case AE_EV_COMP_07:  //+2 EV
			HI704_write_cmos_sensor(0x40,0x30);
			break;    
		case AE_EV_COMP_03:	 //	+1 EV	
			HI704_write_cmos_sensor(0x40,0x18);	
			break;    
		case AE_EV_COMP_00:  // +0 EV
#ifdef HQ_PROJECT_A61P_HUAWEI
		    HI704_write_cmos_sensor(0x40,0x06);   //0x00_20120214
#else
		    HI704_write_cmos_sensor(0x40,0x08);   //0x00_20120214
#endif
			break;    
		case AE_EV_COMP_n03:  // -1 EV
			HI704_write_cmos_sensor(0x40,0x98);
			break;    
		case AE_EV_COMP_n07:	// -2 EV		
			HI704_write_cmos_sensor(0x40,0xb0);	
			break;    
		case AE_EV_COMP_n10:   //-3 EV
			HI704_write_cmos_sensor(0x40,0xc8);
			break;
		case AE_EV_COMP_n13:  // -4 EV
			HI704_write_cmos_sensor(0x40,0xe0);
			break;
		default:
			return FALSE;
	}

    return TRUE;	
} /* HI704_set_param_exposure */
Ejemplo n.º 9
0
/*************************************************************************
* FUNCTION
*	HI704_set_param_exposure
*
* DESCRIPTION
*	exposure setting.
*
* PARAMETERS
*	none
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
BOOL HI704_set_param_exposure(UINT16 para)
{


	SENSORDB("[Enter]HI704 set_param_exposure func:para = %d\n",para);

	
	if(HI704_sensor.exposure == para) return KAL_TRUE;

	  HI704_sensor.exposure = para;

	   HI704_write_cmos_sensor(0x03,0x10);
	   HI704_write_cmos_sensor(0x12,HI704_read_cmos_sensor(0x12)|0x10);
	switch (para)
	{
		case AE_EV_COMP_13:  //+4 EV
			HI704_write_cmos_sensor(0x40,0x60);
			break;  
		case AE_EV_COMP_10:  //+3 EV
			HI704_write_cmos_sensor(0x40,0x48);
			break;    
		case AE_EV_COMP_07:  //+2 EV
			HI704_write_cmos_sensor(0x40,0x30);
			break;    
		case AE_EV_COMP_03:	 //	+1 EV	
			HI704_write_cmos_sensor(0x40,0x18);	
			break;    
		case AE_EV_COMP_00:  // +0 EV
		    HI704_write_cmos_sensor(0x40,0x10);
			break;    
		case AE_EV_COMP_n03:  // -1 EV
			HI704_write_cmos_sensor(0x40,0x98);
			break;    
		case AE_EV_COMP_n07:	// -2 EV		
			HI704_write_cmos_sensor(0x40,0xb0);	
			break;    
		case AE_EV_COMP_n10:   //-3 EV
			HI704_write_cmos_sensor(0x40,0xc8);
			break;
		case AE_EV_COMP_n13:  // -4 EV
			HI704_write_cmos_sensor(0x40,0xe0);
			break;
		default:
			return FALSE;
	}

	return TRUE;
	
} /* HI704_set_param_exposure */
Ejemplo n.º 10
0
/*************************************************************************
* FUNCTION
*	HI704_set_param_effect
*
* DESCRIPTION
*	effect setting.
*
* PARAMETERS
*	none
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
BOOL HI704_set_param_effect(UINT16 para)
{
   SENSORDB("[Enter]HI704 set_param_effect func:para = %d\n",para);
   
    if(HI704_sensor.effect == para) return KAL_TRUE;

    spin_lock(&hi704_yuv_drv_lock);
    HI704_sensor.effect = para;
    spin_unlock(&hi704_yuv_drv_lock);
    
    switch (para)
    {
    case MEFFECT_OFF:
        {
        HI704_write_cmos_sensor(0x03, 0x10);
        HI704_write_cmos_sensor(0x11, 0x03);
        HI704_write_cmos_sensor(0x12, 0x30);
        HI704_write_cmos_sensor(0x13, 0x00);
        HI704_write_cmos_sensor(0x44, 0x80);
        HI704_write_cmos_sensor(0x45, 0x80);

        HI704_write_cmos_sensor(0x47, 0x7f);
        HI704_write_cmos_sensor(0x03, 0x13);
        HI704_write_cmos_sensor(0x20, 0x07);
        HI704_write_cmos_sensor(0x21, 0x07);
        }
        break;
    case MEFFECT_SEPIA:
        {
        HI704_write_cmos_sensor(0x03, 0x10);
        HI704_write_cmos_sensor(0x11, 0x03);
        HI704_write_cmos_sensor(0x12, 0x23);
        HI704_write_cmos_sensor(0x13, 0x00);
        HI704_write_cmos_sensor(0x44, 0x70);
        HI704_write_cmos_sensor(0x45, 0x98);

	            HI704_write_cmos_sensor(0x47, 0x7f);
	            HI704_write_cmos_sensor(0x03, 0x13);
	            HI704_write_cmos_sensor(0x20, 0x07);
	            HI704_write_cmos_sensor(0x21, 0x07);
            }	
			break;  
		case MEFFECT_NEGATIVE:
			{
	            HI704_write_cmos_sensor(0x03, 0x10);
	            HI704_write_cmos_sensor(0x11, 0x03);
	            HI704_write_cmos_sensor(0x12, 0x08);
	            HI704_write_cmos_sensor(0x13, 0x00);
	            HI704_write_cmos_sensor(0x14, 0x00);
            }
			break; 
		case MEFFECT_SEPIAGREEN:		
			{
	            HI704_write_cmos_sensor(0x03, 0x10);
	            HI704_write_cmos_sensor(0x11, 0x03);
	            HI704_write_cmos_sensor(0x12, 0x03);
	            HI704_write_cmos_sensor(0x40, 0x00);
	            HI704_write_cmos_sensor(0x13, 0x00);
	            HI704_write_cmos_sensor(0x44, 0x30);
	            HI704_write_cmos_sensor(0x45, 0x50);
            }	
			break;
		case MEFFECT_SEPIABLUE:
			{
			  	HI704_write_cmos_sensor(0x03, 0x10);
				HI704_write_cmos_sensor(0x11, 0x03);
				HI704_write_cmos_sensor(0x12, 0x03);
				HI704_write_cmos_sensor(0x40, 0x00);
				HI704_write_cmos_sensor(0x13, 0x00);
				HI704_write_cmos_sensor(0x44, 0xb0);
				HI704_write_cmos_sensor(0x45, 0x40);
		    }     
			break;        
		case MEFFECT_MONO:			
			{
				HI704_write_cmos_sensor(0x03, 0x10);
				HI704_write_cmos_sensor(0x11, 0x03);
				HI704_write_cmos_sensor(0x12, 0x03);
				HI704_write_cmos_sensor(0x40, 0x00);
				HI704_write_cmos_sensor(0x44, 0x80);
				HI704_write_cmos_sensor(0x45, 0x80);
            }
			break;

		default:
			return KAL_FALSE;
	}

    return KAL_TRUE;
} /* HI704_set_param_effect */
Ejemplo n.º 11
0
/*************************************************************************
* FUNCTION
*	HI704_set_param_wb
*
* DESCRIPTION
*	wb setting.
*
* PARAMETERS
*	none
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
BOOL HI704_set_param_wb(UINT16 para)
{
    //This sensor need more time to balance AWB, 
    //we suggest higher fps or drop some frame to avoid garbage color when preview initial
    SENSORDB("[Enter]HI704 set_param_wb func:para = %d\n",para);

    if(HI704_sensor.wb == para) return KAL_TRUE;	

    spin_lock(&hi704_yuv_drv_lock);
    HI704_sensor.wb = para;
    spin_unlock(&hi704_yuv_drv_lock);
    
    switch (para)
    {            
    case AWB_MODE_AUTO:
        {
        HI704_write_cmos_sensor(0x03, 0x22);			
        HI704_write_cmos_sensor(0x11, 0x2e);				
        //HI704_write_cmos_sensor(0x80, 0x38);
        //HI704_write_cmos_sensor(0x82, 0x38);				
#ifdef HQ_PROJECT_A61P_HUAWEI				
		        HI704_write_cmos_sensor(0x83, 0x56); 
#else
		 	HI704_write_cmos_sensor(0x83, 0x5e);  
#endif
		        HI704_write_cmos_sensor(0x84, 0x15);   //0x1e_20120214
#ifdef HQ_PROJECT_A61P_HUAWEI
	            	HI704_write_cmos_sensor(0x85, 0x5e);  //0x52_20120214
#else
			HI704_write_cmos_sensor(0x85, 0x4f);  //0x52_20120214
#endif
		        HI704_write_cmos_sensor(0x86, 0x1c);
        }                
        break;
    case AWB_MODE_CLOUDY_DAYLIGHT:
    {
        HI704_write_cmos_sensor(0x03, 0x22);
        HI704_write_cmos_sensor(0x11, 0x28);
        HI704_write_cmos_sensor(0x80, 0x4a);//71
		HI704_write_cmos_sensor(0x82, 0x2a);//2b
		HI704_write_cmos_sensor(0x83, 0x4c);//72
		HI704_write_cmos_sensor(0x84, 0x4a);//70
		HI704_write_cmos_sensor(0x85, 0x2a);//2b
        HI704_write_cmos_sensor(0x86, 0x28);
        }			   
        break;
    case AWB_MODE_DAYLIGHT:
        {
        HI704_write_cmos_sensor(0x03, 0x22);
        HI704_write_cmos_sensor(0x11, 0x28);          
        HI704_write_cmos_sensor(0x80, 0x59);
        HI704_write_cmos_sensor(0x82, 0x29);
        HI704_write_cmos_sensor(0x83, 0x60);
        HI704_write_cmos_sensor(0x84, 0x50);
        HI704_write_cmos_sensor(0x85, 0x2f);
        HI704_write_cmos_sensor(0x86, 0x23);
        }      
        break;
    case AWB_MODE_INCANDESCENT:	
        {
        HI704_write_cmos_sensor(0x03, 0x22);
        HI704_write_cmos_sensor(0x11, 0x28);          
        HI704_write_cmos_sensor(0x80, 0x29);
        HI704_write_cmos_sensor(0x82, 0x54);
        HI704_write_cmos_sensor(0x83, 0x2e);
        HI704_write_cmos_sensor(0x84, 0x23);
        HI704_write_cmos_sensor(0x85, 0x58);
        HI704_write_cmos_sensor(0x86, 0x4f);
        }		
        break;  
    case AWB_MODE_FLUORESCENT:
        {
        HI704_write_cmos_sensor(0x03, 0x22);
        HI704_write_cmos_sensor(0x11, 0x28);
        HI704_write_cmos_sensor(0x80, 0x41);
        HI704_write_cmos_sensor(0x82, 0x42);
        HI704_write_cmos_sensor(0x83, 0x44);
        HI704_write_cmos_sensor(0x84, 0x34);
        HI704_write_cmos_sensor(0x85, 0x46);
        HI704_write_cmos_sensor(0x86, 0x3a);
        }	
        break;  
    case AWB_MODE_TUNGSTEN:
        {
        HI704_write_cmos_sensor(0x03, 0x22);
        HI704_write_cmos_sensor(0x80, 0x24);
        HI704_write_cmos_sensor(0x81, 0x20);
        HI704_write_cmos_sensor(0x82, 0x58);
        HI704_write_cmos_sensor(0x83, 0x27);
        HI704_write_cmos_sensor(0x84, 0x22);
        HI704_write_cmos_sensor(0x85, 0x58);
        HI704_write_cmos_sensor(0x86, 0x52);
        }
        break;
    default:
        return FALSE;
    }

    return TRUE;	
} /* HI704_set_param_wb */
Ejemplo n.º 12
0
// 320 * 240
static void HI704_Set_QVGA_mode(void)
{
    HI704_write_cmos_sensor(0x01, HI704_read_cmos_sensor(0x01)|0x01);   //Sleep: For Write Reg
    
    HI704_write_cmos_sensor(0x03, 0x00);
    HI704_write_cmos_sensor(0x10, 0x01);        //QVGA Size: 0x10 -> 0x01

    HI704_write_cmos_sensor(0x20, 0x00);
    HI704_write_cmos_sensor(0x21, 0x02);

    HI704_write_cmos_sensor(0x40, 0x01);        //HBLANK:  0x0158 = 344
    HI704_write_cmos_sensor(0x41, 0x58);
    HI704_write_cmos_sensor(0x42, 0x00);        //VBLANK:  0x14 = 20
    HI704_write_cmos_sensor(0x43, 0x14);

    HI704_write_cmos_sensor(0x03, 0x11);        //QVGA Fixframerate
    HI704_write_cmos_sensor(0x10, 0x21);  

    HI704_write_cmos_sensor(0x03, 0x20);
    HI704_write_cmos_sensor(0x10, HI704_read_cmos_sensor(0x10)&0x7f);   //Close AE
    HI704_write_cmos_sensor(0x18, HI704_read_cmos_sensor(0x18)|0x08);   //Reset AE

    HI704_write_cmos_sensor(0x83, 0x00);
    HI704_write_cmos_sensor(0x84, 0xaf);
    HI704_write_cmos_sensor(0x85, 0xc8);
    HI704_write_cmos_sensor(0x86, 0x00);
    HI704_write_cmos_sensor(0x87, 0xfa);

    HI704_write_cmos_sensor(0x8b, 0x3a);
    HI704_write_cmos_sensor(0x8c, 0x98);
    HI704_write_cmos_sensor(0x8d, 0x30);
    HI704_write_cmos_sensor(0x8e, 0xd4);

    HI704_write_cmos_sensor(0x9c, 0x0b);
    HI704_write_cmos_sensor(0x9d, 0x3b);
    HI704_write_cmos_sensor(0x9e, 0x00);
    HI704_write_cmos_sensor(0x9f, 0xfa);

    HI704_write_cmos_sensor(0x01, HI704_read_cmos_sensor(0x01)&0xfe);   //Exit Sleep: For Write Reg

    HI704_write_cmos_sensor(0x03, 0x20);
    HI704_write_cmos_sensor(0x10, HI704_read_cmos_sensor(0x10)|0x80);   //Open AE
    HI704_write_cmos_sensor(0x18, HI704_read_cmos_sensor(0x18)&0xf7);   //Reset AE

}
Ejemplo n.º 13
0
static void HI704_Fix_Video_Frame_Rate(kal_uint16 fix_framerate)
{
    kal_uint32 HI704_expfix;
    kal_uint32 HI704_expfix_temp;
    kal_uint32 HI704_expmax;
    kal_uint32 HI704_expbanding;
    
  
    SENSORDB("[Enter]HI704 Fix_video_frame_rate func: fix_fps=%d\n",fix_framerate);


	HI704_sensor.video_current_frame_rate = fix_framerate;
    // Fixed Framerate
    HI704_write_cmos_sensor(0x01, HI704_read_cmos_sensor(0x01)|0x01);   //Sleep: For Write Reg

    HI704_write_cmos_sensor(0x03, 0x00);
    HI704_write_cmos_sensor(0x11, HI704_read_cmos_sensor(0x11)|0x04);

    HI704_write_cmos_sensor(0x03, 0x20);
    HI704_write_cmos_sensor(0x10, HI704_read_cmos_sensor(0x10)&0x7f);   //Close AE
    
    HI704_write_cmos_sensor(0x11, 0x00);
    HI704_write_cmos_sensor(0x18, HI704_read_cmos_sensor(0x18)|0x08);   //Reset AE
    HI704_write_cmos_sensor(0x2a, 0x00);
    HI704_write_cmos_sensor(0x2b, 0x35);

    HI704_write_cmos_sensor(0x03, 0x00);
    HI704_sensor.pv_dummy_pixels = ((HI704_read_cmos_sensor(0x40)<<8)|HI704_read_cmos_sensor(0x41));
    

    HI704_sensor.pv_line_length = HI704_VGA_DEFAULT_PIXEL_NUMS + HI704_sensor.pv_dummy_pixels ;
    
    
    HI704_sensor.pv_dummy_lines = ((HI704_read_cmos_sensor(0x42)<<8)|HI704_read_cmos_sensor(0x43));
    
    
    HI704_expfix_temp = ((HI704_sensor.pv_pclk*10/fix_framerate)-(HI704_sensor.pv_line_length*HI704_sensor.pv_dummy_lines))/8;
    
    HI704_expfix = ((HI704_expfix_temp*8/HI704_sensor.pv_line_length)*HI704_sensor.pv_line_length)/8;
    

    HI704_write_cmos_sensor(0x03, 0x20);
    //HI704_write_cmos_sensor(0x83, (HI704_expfix>>16)&0xff);
    //HI704_write_cmos_sensor(0x84, (HI704_expfix>>8)&0xff);
    //HI704_write_cmos_sensor(0x85, (HI704_expfix>>0)&0xff);
    HI704_write_cmos_sensor(0x91, (HI704_expfix>>16)&0xff);
    HI704_write_cmos_sensor(0x92, (HI704_expfix>>8)&0xff);
    HI704_write_cmos_sensor(0x93, (HI704_expfix>>0)&0xff);

    if(HI704_sensor.banding == AE_FLICKER_MODE_50HZ)
    {
        HI704_expbanding = ((HI704_read_cmos_sensor(0x8b)<<8)|HI704_read_cmos_sensor(0x8c));
    }
    else if(HI704_sensor.banding == AE_FLICKER_MODE_60HZ)
    {
        HI704_expbanding = ((HI704_read_cmos_sensor(0x8d)<<8)|HI704_read_cmos_sensor(0x8e));
    }
    else
    {
        SENSORDB("[HI704]Wrong Banding Setting!!!...");
    }
    HI704_expmax = ((HI704_expfix_temp-HI704_expbanding)/HI704_expbanding)*HI704_expbanding;

    
    
    HI704_write_cmos_sensor(0x03, 0x20);
    HI704_write_cmos_sensor(0x88, (HI704_expmax>>16)&0xff);
    HI704_write_cmos_sensor(0x89, (HI704_expmax>>8)&0xff);
    HI704_write_cmos_sensor(0x8a, (HI704_expmax>>0)&0xff);

    HI704_write_cmos_sensor(0x01, HI704_read_cmos_sensor(0x01)&0xfe);   //Exit Sleep: For Write Reg

    HI704_write_cmos_sensor(0x03, 0x20);
    HI704_write_cmos_sensor(0x10, HI704_read_cmos_sensor(0x10)|0x80);   //Open AE
    HI704_write_cmos_sensor(0x18, HI704_read_cmos_sensor(0x18)&0xf7);   //Reset AE

}
Ejemplo n.º 14
0
static void HI704_Cal_Min_Frame_Rate(kal_uint16 min_framerate)
{
    kal_uint32 HI704_expmax;
    kal_uint32 HI704_expbanding;

  
    SENSORDB("[HI704] HI704_Cal_Min_Frame_Rate:min_fps=%d\n",min_framerate);

    //No Fixed Framerate
    HI704_write_cmos_sensor(0x01, HI704_read_cmos_sensor(0x01)|0x01);   //Sleep: For Write Reg

    HI704_write_cmos_sensor(0x03, 0x00);
    HI704_write_cmos_sensor(0x11, HI704_read_cmos_sensor(0x11)&0xfb);
    
    HI704_write_cmos_sensor(0x03, 0x20);
    HI704_write_cmos_sensor(0x10, HI704_read_cmos_sensor(0x10)&0x7f);   //Close AE
    
    HI704_write_cmos_sensor(0x11, 0x04);
    HI704_write_cmos_sensor(0x18, HI704_read_cmos_sensor(0x18)|0x08);   //Reset AE
    HI704_write_cmos_sensor(0x2a, 0xf0);
    HI704_write_cmos_sensor(0x2b, 0x34);

    HI704_write_cmos_sensor(0x03, 0x00);
    HI704_sensor.pv_dummy_pixels = ((HI704_read_cmos_sensor(0x40)<<8)|HI704_read_cmos_sensor(0x41));
    HI704_sensor.pv_line_length = HI704_VGA_DEFAULT_PIXEL_NUMS+ HI704_sensor.pv_dummy_pixels ;

    if(HI704_sensor.banding == AE_FLICKER_MODE_50HZ)
    {
        HI704_expbanding = (HI704_sensor.pv_pclk/HI704_sensor.pv_line_length/100)*HI704_sensor.pv_line_length/8;
        HI704_expmax = HI704_expbanding*100*10/min_framerate ;
    }
    else if(HI704_sensor.banding == AE_FLICKER_MODE_60HZ)
    {
        HI704_expbanding = (HI704_sensor.pv_pclk/HI704_sensor.pv_line_length/120)*HI704_sensor.pv_line_length/8;
        HI704_expmax = HI704_expbanding*120*10/min_framerate ;
    }
    else
    {
        SENSORDB("[HI704][Error] Wrong Banding Setting!!!...");
    }
    
    HI704_write_cmos_sensor(0x03, 0x20);
    HI704_write_cmos_sensor(0x88, (HI704_expmax>>16)&0xff);
    HI704_write_cmos_sensor(0x89, (HI704_expmax>>8)&0xff);
    HI704_write_cmos_sensor(0x8a, (HI704_expmax>>0)&0xff);

    HI704_write_cmos_sensor(0x01, HI704_read_cmos_sensor(0x01)&0xfe);   //Exit Sleep: For Write Reg

    HI704_write_cmos_sensor(0x03, 0x20);
    HI704_write_cmos_sensor(0x10, HI704_read_cmos_sensor(0x10)|0x80);   //Open AE
    HI704_write_cmos_sensor(0x18, HI704_read_cmos_sensor(0x18)&0xf7);   //Reset AE
}
Ejemplo n.º 15
0
// 640 * 480
static void HI704_Set_VGA_mode(void)
{
    HI704_write_cmos_sensor(0x01, HI704_read_cmos_sensor(0x01)|0x01);   //Sleep: For Write Reg

    HI704_write_cmos_sensor(0x03, 0x00);
    HI704_write_cmos_sensor(0x10, 0x00);        //VGA Size

    HI704_write_cmos_sensor(0x20, 0x00);
    HI704_write_cmos_sensor(0x21, 0x04);

    HI704_write_cmos_sensor(0x40, 0x01);        //HBLANK: 0x70 = 112
    HI704_write_cmos_sensor(0x41, 0x58);
    HI704_write_cmos_sensor(0x42, 0x00);        //VBLANK: 0x04 = 4
    HI704_write_cmos_sensor(0x43, 0x13);

    HI704_write_cmos_sensor(0x03, 0x11);
    HI704_write_cmos_sensor(0x10, 0x25);  

    HI704_write_cmos_sensor(0x03, 0x20);

    HI704_write_cmos_sensor(0x10, HI704_read_cmos_sensor(0x10)&0x7f);   //Close AE
    HI704_write_cmos_sensor(0x18, HI704_read_cmos_sensor(0x18)|0x08);   //Reset AE
	
    HI704_write_cmos_sensor(0x83, 0x00);
    HI704_write_cmos_sensor(0x84, 0xbe);
    HI704_write_cmos_sensor(0x85, 0x6e);
    HI704_write_cmos_sensor(0x86, 0x00);
    HI704_write_cmos_sensor(0x87, 0xfa);

    HI704_write_cmos_sensor(0x8b, 0x3f);
    HI704_write_cmos_sensor(0x8c, 0x7a);
    HI704_write_cmos_sensor(0x8d, 0x34);
    HI704_write_cmos_sensor(0x8e, 0xbc);

    HI704_write_cmos_sensor(0x9c, 0x0b);
    HI704_write_cmos_sensor(0x9d, 0xb8);
    HI704_write_cmos_sensor(0x9e, 0x00);
    HI704_write_cmos_sensor(0x9f, 0xfa);

    HI704_write_cmos_sensor(0x01, HI704_read_cmos_sensor(0x01)&0xfe);   //Exit Sleep: For Write Reg

    HI704_write_cmos_sensor(0x03, 0x20);
    HI704_write_cmos_sensor(0x10, HI704_read_cmos_sensor(0x10)|0x80);   //Open AE
    HI704_write_cmos_sensor(0x18, HI704_read_cmos_sensor(0x18)&0xf7);   //Reset AE

}
Ejemplo n.º 16
0
// 640 * 480
static void HI704_Set_VGA_mode(void)
{
    HI704_write_cmos_sensor(0x01, HI704_read_cmos_sensor(0x01)|0x01);   //Sleep: For Write Reg

    HI704_write_cmos_sensor(0x03, 0x00);
    HI704_write_cmos_sensor(0x10, 0x00);        //VGA Size

    HI704_write_cmos_sensor(0x20, 0x00);
    HI704_write_cmos_sensor(0x21, 0x04);

    HI704_write_cmos_sensor(0x40, 0x01);        //HBLANK: 0x70 = 112
    HI704_write_cmos_sensor(0x41, 0x58);
    HI704_write_cmos_sensor(0x42, 0x00);        //VBLANK: 0x04 = 4
    HI704_write_cmos_sensor(0x43, 0x13);

    HI704_write_cmos_sensor(0x03, 0x11);
    HI704_write_cmos_sensor(0x10, 0x25);  

    HI704_write_cmos_sensor(0x03, 0x20);
    HI704_pv_exposure_lines = (HI704_read_cmos_sensor(0x80) << 16)|(HI704_read_cmos_sensor(0x81) << 8)|HI704_read_cmos_sensor(0x82);


    HI704_write_cmos_sensor(0x03, 0x20);

    HI704_write_cmos_sensor(0x10, 0x1c);   //Close AE
    HI704_write_cmos_sensor(0x18, HI704_read_cmos_sensor(0x18)|0x08);   //Reset AE
#ifdef HQ_PROJECT_A61P_HUAWEI
    HI704_write_cmos_sensor(0x83, HI704_pv_exposure_lines >> 16);
    HI704_write_cmos_sensor(0x84, (HI704_pv_exposure_lines >> 8) & 0x000000FF);
    HI704_write_cmos_sensor(0x85, HI704_pv_exposure_lines & 0x000000FF);
#else	
    HI704_write_cmos_sensor(0x83, HI704_pv_exposure_lines >> 16);
    HI704_write_cmos_sensor(0x84, (HI704_pv_exposure_lines >> 8) & 0x000000FF);
    HI704_write_cmos_sensor(0x85, HI704_pv_exposure_lines & 0x000000FF);
#endif	
    HI704_write_cmos_sensor(0x86, 0x00);
    HI704_write_cmos_sensor(0x87, 0xfa);

    HI704_write_cmos_sensor(0x8b, 0x3f);
    HI704_write_cmos_sensor(0x8c, 0x7a);
    HI704_write_cmos_sensor(0x8d, 0x34);
    HI704_write_cmos_sensor(0x8e, 0xbc);

    HI704_write_cmos_sensor(0x9c, 0x0b);
    HI704_write_cmos_sensor(0x9d, 0xb8);
    HI704_write_cmos_sensor(0x9e, 0x00);
    HI704_write_cmos_sensor(0x9f, 0xfa);

    HI704_write_cmos_sensor(0x01, HI704_read_cmos_sensor(0x01)&0xfe);   //Exit Sleep: For Write Reg

    HI704_write_cmos_sensor(0x03, 0x20);
    HI704_write_cmos_sensor(0x10, 0x9c);   //Open AE
    HI704_write_cmos_sensor(0x18, HI704_read_cmos_sensor(0x18)&0xf7);   //Reset AE

}
Ejemplo n.º 17
0
void HI704_night_mode(kal_bool enable)
{

	SENSORDB("[Enter]HI704 night mode func:enable = %d\n",enable);
	SENSORDB("HI704_sensor.video_mode = %d\n",HI704_sensor.MPEG4_Video_mode); 
        SENSORDB("HI704_sensor.night_mode = %d\n",HI704_sensor.night_mode);

	HI704_sensor.night_mode = enable;


	if(enable)
	{
        //HI704_Cal_Min_Frame_Rate(HI704_MIN_FRAMERATE_5); 
		HI704_write_cmos_sensor(0x03, 0x00); 	
		HI704_write_cmos_sensor(0x01, 0xf1);
		
		HI704_write_cmos_sensor(0x03, 0x20);
		HI704_write_cmos_sensor(0x10, 0x1c);
		
		HI704_write_cmos_sensor(0x03, 0x20);
		//HI704_write_cmos_sensor(0x18, 0x38);

		HI704_write_cmos_sensor(0x88, 0x08);
		HI704_write_cmos_sensor(0x89, 0x2e);
		HI704_write_cmos_sensor(0x8a, 0xba);
			
		HI704_write_cmos_sensor(0x03, 0x00); 	
		HI704_write_cmos_sensor(0x01, 0xf0);

		HI704_write_cmos_sensor(0x03, 0x20);
		HI704_write_cmos_sensor(0x10, 0x9c);

		//HI704_write_cmos_sensor(0x18, 0x30);
       }
	else
	{
	    //HI704_Cal_Min_Frame_Rate(HI704_MIN_FRAMERATE_10);
		HI704_write_cmos_sensor(0x03, 0x00); 	
		HI704_write_cmos_sensor(0x01, 0xf1);
		
		HI704_write_cmos_sensor(0x03, 0x20);
		HI704_write_cmos_sensor(0x10, 0x1c);
		
		HI704_write_cmos_sensor(0x03, 0x20);
		//HI704_write_cmos_sensor(0x18, 0x38);

		HI704_write_cmos_sensor(0x88, 0x04);
		HI704_write_cmos_sensor(0x89, 0xf5);
		HI704_write_cmos_sensor(0x8a, 0x88);
			
		HI704_write_cmos_sensor(0x03, 0x00); 	
		HI704_write_cmos_sensor(0x01, 0xf0);

		HI704_write_cmos_sensor(0x03, 0x20);
		HI704_write_cmos_sensor(0x10, 0x9c);

		//HI704_write_cmos_sensor(0x18, 0x30);
    }
}
Ejemplo n.º 18
0
/*************************************************************************
* FUNCTION
*	HI704_set_param_wb
*
* DESCRIPTION
*	wb setting.
*
* PARAMETERS
*	none
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
BOOL HI704_set_param_wb(UINT16 para)
{
	
    //This sensor need more time to balance AWB, 
    //we suggest higher fps or drop some frame to avoid garbage color when preview initial
   SENSORDB("[Enter]HI704 set_param_wb func:para = %d\n",para);
	
   if(HI704_sensor.wb == para) return KAL_TRUE;	

	HI704_sensor.wb = para;
	
	switch (para)
	{            
		case AWB_MODE_AUTO:
			{
		        HI704_write_cmos_sensor(0x03, 0x22);			
		        HI704_write_cmos_sensor(0x11, 0x2e);				
		        HI704_write_cmos_sensor(0x80, 0x38);
	            HI704_write_cmos_sensor(0x82, 0x38);				
		        HI704_write_cmos_sensor(0x83, 0x5e);
		        HI704_write_cmos_sensor(0x84, 0x24);
	            HI704_write_cmos_sensor(0x85, 0x59);
		        HI704_write_cmos_sensor(0x86, 0x24);				
            }                
		    break;
		case AWB_MODE_CLOUDY_DAYLIGHT:
			{
		        HI704_write_cmos_sensor(0x03, 0x22);
	            HI704_write_cmos_sensor(0x11, 0x28);
		        HI704_write_cmos_sensor(0x80, 0x71);
		        HI704_write_cmos_sensor(0x82, 0x2b);
		        HI704_write_cmos_sensor(0x83, 0x72);
		        HI704_write_cmos_sensor(0x84, 0x70);
		        HI704_write_cmos_sensor(0x85, 0x2b);
	            HI704_write_cmos_sensor(0x86, 0x28);
	        }			   
		    break;
		case AWB_MODE_DAYLIGHT:
		    {
	            HI704_write_cmos_sensor(0x03, 0x22);
	            HI704_write_cmos_sensor(0x11, 0x28);          
	            HI704_write_cmos_sensor(0x80, 0x59);
	            HI704_write_cmos_sensor(0x82, 0x29);
	            HI704_write_cmos_sensor(0x83, 0x60);
	            HI704_write_cmos_sensor(0x84, 0x50);
	            HI704_write_cmos_sensor(0x85, 0x2f);
	            HI704_write_cmos_sensor(0x86, 0x23);
            }      
		    break;
		case AWB_MODE_INCANDESCENT:	
		    {
		        HI704_write_cmos_sensor(0x03, 0x22);
		        HI704_write_cmos_sensor(0x11, 0x28);          
		        HI704_write_cmos_sensor(0x80, 0x29);
		        HI704_write_cmos_sensor(0x82, 0x54);
		        HI704_write_cmos_sensor(0x83, 0x2e);
		        HI704_write_cmos_sensor(0x84, 0x23);
		        HI704_write_cmos_sensor(0x85, 0x58);
		        HI704_write_cmos_sensor(0x86, 0x4f);
            }		
		    break;  
		case AWB_MODE_FLUORESCENT:
		    {
	            HI704_write_cmos_sensor(0x03, 0x22);
	            HI704_write_cmos_sensor(0x11, 0x28);
	            HI704_write_cmos_sensor(0x80, 0x41);
	            HI704_write_cmos_sensor(0x82, 0x42);
	            HI704_write_cmos_sensor(0x83, 0x44);
	            HI704_write_cmos_sensor(0x84, 0x34);
	            HI704_write_cmos_sensor(0x85, 0x46);
	            HI704_write_cmos_sensor(0x86, 0x3a);
            }	
		    break;  
		case AWB_MODE_TUNGSTEN:
		   {
	            HI704_write_cmos_sensor(0x03, 0x22);
	            HI704_write_cmos_sensor(0x80, 0x24);
	            HI704_write_cmos_sensor(0x81, 0x20);
	            HI704_write_cmos_sensor(0x82, 0x58);
	            HI704_write_cmos_sensor(0x83, 0x27);
	            HI704_write_cmos_sensor(0x84, 0x22);
	            HI704_write_cmos_sensor(0x85, 0x58);
	            HI704_write_cmos_sensor(0x86, 0x52);
           }
		    break;

		default:
			return FALSE;
	}

	return TRUE;
	
} /* HI704_set_param_wb */