//********************************************************************************
// Function Name 	: IniAdj
// Retun Value		: NON
// Argment Value	: NON
// Explanation		: Adjust Value Setting
// History			: First edition 						2009.07.30 Y.Tashita
//********************************************************************************
void	IniAdj( void )
{
	
	RegWriteA( CMSDAC, BAIS_CUR ) ;				// 0x0261	Hall Dac電流
	RegWriteA( OPGSEL, AMP_GAIN ) ;				// 0x0262	Hall amp Gain
	
#ifdef USE_EXE2PROM
	unsigned short	UsAdjCompF ;
	unsigned short	UsAdjData ;
	unsigned long	UlAdjData ;
	
	E2pRed( (unsigned short)ADJ_COMP_FLAG, 2, ( unsigned char * )&UsAdjCompF ) ;	// Eeprom Read
	
	/* Hall Xaxis Bias,Offset */
	if( (UsAdjCompF == 0x0000 ) || (UsAdjCompF & ( EXE_HXADJ - EXE_END )) ){
		RamWriteA( DAHLXO, DAHLXO_INI ) ;	// 0x1114
		RamWriteA( DAHLXB, DAHLXB_INI ) ;	// 0x1115
		RamWriteA( ADHXOFF, 0x0000 ) ;		// 0x1102
	}else{
		E2pRed( (unsigned short)HALL_OFFSET_X, 2, ( unsigned char * )&UsAdjData ) ;
		RamWriteA( DAHLXO, UsAdjData ) ;	// 0x1114
		E2pRed( (unsigned short)HALL_BIAS_X, 2, ( unsigned char * )&UsAdjData ) ;
		RamWriteA( DAHLXB, UsAdjData ) ;	// 0x1115
		E2pRed( (unsigned short)HALL_AD_OFFSET_X, 2, ( unsigned char * )&UsAdjData ) ;
		RamWriteA( ADHXOFF, UsAdjData ) ;	// 0x1102
	}
			
	/* Hall Yaxis Bias,Offset */
	if( (UsAdjCompF == 0x0000 ) || (UsAdjCompF & ( EXE_HYADJ - EXE_END )) ){
		RamWriteA( DAHLYO, DAHLYO_INI ) ;	// 0x1116
		RamWriteA( DAHLYB, DAHLYB_INI ) ;	// 0x1117
		RamWriteA( ADHYOFF, 0x0000 ) ;		// 0x1105
	}else{
		E2pRed( (unsigned short)HALL_OFFSET_Y, 2, ( unsigned char * )&UsAdjData ) ;
		RamWriteA( DAHLYO, UsAdjData ) ;	// 0x1116
		E2pRed( (unsigned short)HALL_BIAS_Y, 2, ( unsigned char * )&UsAdjData ) ;
		RamWriteA( DAHLYB, UsAdjData ) ;	// 0x1117
		E2pRed( (unsigned short)HALL_AD_OFFSET_Y, 2, ( unsigned char * )&UsAdjData ) ;
		RamWriteA( ADHYOFF, UsAdjData ) ;	// 0x1105
	}
			
	/* Hall Xaxis Loop Gain */
	if( (UsAdjCompF == 0x0000 ) || (UsAdjCompF & ( EXE_LXADJ - EXE_END )) ){
		RamWriteA( lxgain, LXGAIN_INI ) ;	// 0x132A
	}else{
		E2pRed( (unsigned short)LOOP_GAIN_X, 2, ( unsigned char * )&UsAdjData ) ;
		RamWriteA( lxgain, UsAdjData ) ;	// 0x132A
	}
		
	/* Hall Yaxis Loop Gain */
	if( (UsAdjCompF == 0x0000 ) || (UsAdjCompF & ( EXE_LYADJ - EXE_END )) ){
		RamWriteA( lygain, LYGAIN_INI ) ;	// 0x136A
	}else{
		E2pRed( (unsigned short)LOOP_GAIN_Y, 2, ( unsigned char * )&UsAdjData ) ;
		RamWriteA( lygain, UsAdjData ) ;	// 0x136A
	}
		
	// X axis Optical Center Offset Read & Setting
	E2pRed( (unsigned short)OPT_CENTER_X, 2, ( unsigned char * )&UsAdjData ) ;
	if( ( UsAdjData != 0x0000 ) && ( UsAdjData != 0xffff )){
		UsCntXof = UsAdjData ;					/* Set Optical center X value */
	} else {
		UsCntXof = OPTCEN_X ;						/* Clear Optical center X value */
	}
	RamWriteA( HXINOD, UsCntXof ) ;				// 0x1127

	// Y axis Optical Center Offset Read & Setting
	E2pRed( (unsigned short)OPT_CENTER_Y, 2, ( unsigned char * )&UsAdjData ) ;
	if( ( UsAdjData != 0x0000 ) && ( UsAdjData != 0xffff )){
		UsCntYof = UsAdjData ;					/* Set Optical center Y value */
	} else {
		UsCntYof = OPTCEN_Y ;						/* Clear Optical center Y value */
	}
	RamWriteA( HYINOD, UsCntYof ) ;				// 0x1167
	
	/* Gyro Xaxis Offset */
	E2pRed( (unsigned short)GYRO_AD_OFFSET_X, 2, ( unsigned char * )&UsAdjData ) ;
	if( ( UsAdjData == 0x0000 ) || ( UsAdjData == 0xffff )){
		RamWriteA( ADGXOFF, 0x0000 ) ;							// 0x1108
		RegWriteA( IZAH, DGYRO_OFST_XH ) ;						// 0x03A0		Set Offset High byte
		RegWriteA( IZAL, DGYRO_OFST_XL ) ;						// 0x03A1		Set Offset Low byte
	}else{
		RamWriteA( ADGXOFF, 0x0000 ) ;							// 0x1108
		RegWriteA( IZAH, (unsigned char)(UsAdjData >> 8) ) ;	// 0x03A0		Set Offset High byte
		RegWriteA( IZAL, (unsigned char)(UsAdjData) ) ;			// 0x03A1		Set Offset Low byte
	}
	
	/* Gyro Yaxis Offset */
	E2pRed( (unsigned short)GYRO_AD_OFFSET_Y, 2, ( unsigned char * )&UsAdjData ) ;
	if( ( UsAdjData == 0x0000 ) || ( UsAdjData == 0xffff )){
		RamWriteA( ADGYOFF, 0x0000 ) ;							// 0x110B
		RegWriteA( IZBH, DGYRO_OFST_YH ) ;						// 0x03A2		Set Offset High byte
		RegWriteA( IZBL, DGYRO_OFST_YL ) ;						// 0x03A3		Set Offset Low byte
	}else{
		RamWriteA( ADGYOFF, 0x0000 ) ;							// 0x110B
		RegWriteA( IZBH, (unsigned char)(UsAdjData >> 8) ) ;	// 0x03A2		Set Offset High byte
		RegWriteA( IZBL, (unsigned char)(UsAdjData) ) ;			// 0x03A3		Set Offset Low byte
	}
		
	/* Gyro Xaxis Gain */
	E2pRed( (unsigned short)GYRO_GAIN_X, 4 , ( unsigned char * )&UlAdjData ) ;
	if( ( UlAdjData != 0x00000000 ) && ( UlAdjData != 0xffffffff )){
		RamWrite32A( gxzoom, UlAdjData ) ;		// 0x1828 Gyro X axis Gain adjusted value
	}else{
		RamWrite32A( gxzoom, GXGAIN_INI ) ;		// 0x1828 Gyro X axis Gain adjusted initial value
	}
	
	/* Gyro Yaxis Gain */
	E2pRed( (unsigned short)GYRO_GAIN_Y, 4 , ( unsigned char * )&UlAdjData ) ;
	if( ( UlAdjData != 0x00000000 ) && ( UlAdjData != 0xffffffff )){
		RamWrite32A( gyzoom, UlAdjData ) ;		// 0x1928 Gyro Y axis Gain adjusted value
	}else{
		RamWrite32A( gyzoom, GXGAIN_INI ) ;		// 0x1928 Gyro Y axis Gain adjusted initial value
	}
	
	/* OSC Clock value */
	E2pRed( (unsigned short)OSC_CLK_VAL, 2 , ( unsigned char * )&UsAdjData ) ;
	if((unsigned char)UsAdjData != 0xff ){
		UsCntYof = UsAdjData ;					/* Optical center X value */
		RegWriteA( OSCSET, (unsigned char)UsAdjData ) ;		// 0x0264
	}else{
		RegWriteA( OSCSET, OSC_INI ) ;						// 0x0264
	}
	
	
#else	
	/* adjusted value */
	RegWriteA( IZAH,	DGYRO_OFST_XH ) ;	// 0x03A0		Set Offset High byte
	RegWriteA( IZAL,	DGYRO_OFST_XL ) ;	// 0x03A1		Set Offset Low byte
	RegWriteA( IZBH,	DGYRO_OFST_YH ) ;	// 0x03A2		Set Offset High byte
	RegWriteA( IZBL,	DGYRO_OFST_YL ) ;	// 0x03A3		Set Offset Low byte
	
	RamWriteA( DAHLXO, DAHLXO_INI ) ;		// 0x1114
	RamWriteA( DAHLXB, DAHLXB_INI ) ;		// 0x1115
	RamWriteA( DAHLYO, DAHLYO_INI ) ;		// 0x1116
	RamWriteA( DAHLYB, DAHLYB_INI ) ;		// 0x1117
	RamWriteA( ADHXOFF, ADHXOFF_INI ) ;		// 0x1102
	RamWriteA( ADHYOFF, ADHYOFF_INI ) ;		// 0x1105
	RamWriteA( lxgain, LXGAIN_INI ) ;		// 0x132A
	RamWriteA( lygain, LYGAIN_INI ) ;		// 0x136A
	RamWriteA( ADGXOFF, 0x0000 ) ;			// 0x1108
	RamWriteA( ADGYOFF, 0x0000 ) ;			// 0x110B
	UsCntXof = OPTCEN_X ;					/* Clear Optical center X value */
	UsCntYof = OPTCEN_Y ;					/* Clear Optical center Y value */
	RamWriteA( HXINOD, UsCntXof ) ;			// 0x1127
	RamWriteA( HYINOD, UsCntYof ) ;			// 0x1167
	RamWrite32A( gxzoom, GXGAIN_INI ) ;		// 0x1828 Gyro X axis Gain adjusted value
	RamWrite32A( gyzoom, GYGAIN_INI ) ;		// 0x1928 Gyro Y axis Gain adjusted value

	RegWriteA( OSCSET, OSC_INI ) ;			// 0x0264	OSC adj
	
#endif	
	
	RamWriteA( pzgxp, PZGXP_INI ) ;			// 0x133C	X axis output direction initial value
	RamWriteA( pzgyp, PZGYP_INI ) ;			// 0x137C	Y axis output direction initial value
	
	RamWriteA( hxinog, 0x7fff ) ;			// 0x1128	back up initial value
	RamWriteA( hyinog, 0x7fff ) ;			// 0x1168	back up initial value
	
	SetZsp(0) ;								// Zoom coefficient Initial Setting
	
	RegWriteA( PWMA 	, 0xC0 );			// 0x0074		PWM enable

	RegWriteA( STBB 	, 0x0F );							// 0x0260 	[ - | - | - | - ][ STBOPAY | STBOPAX | STBDAC | STBADC ]

	RegWriteA( LXEQEN 	, 0x45 );			// 0x0084
	RegWriteA( LYEQEN 	, 0x45 );			// 0x008E
	
	SetPanTiltMode( OFF ) ;					/* Pan/Tilt OFF */
#ifdef H1COEF_CHANGER
	SetH1cMod( ACTMODE ) ;					/* Lvl Change Active mode */
#endif
	
	DrvSw( ON ) ;							/* 0x0070		Driver Mode setting */
}
void HtcActOisBinder_open_init(void)
{
	uint8_t ois_data_8;
	uint16_t ois_data_16;
	unsigned long ois_data_32;

	if (binder_i2c_client == NULL)
		return;

	pr_info("[OIS]  %s  start\n", __func__);
	pr_info("[OIS]  %s  FW_Version=0x%x\n", __func__, RdFwVr());

#if 0
	RegReadA_lc898111(0x027F, &ois_data_8); 
	pr_info("[OIS]  0x027F read : 0x%x\n", ois_data_8);
#endif


	IniSet(); 

	
	if (g_otp_size > 0)
	{
		pr_info("[OIS]  %s  g_otp_size=%d\n", __func__, g_otp_size);

		
		ois_data_16 = (g_otp_data[0] << 8) + g_otp_data[1];
		RamWriteA_lc898111(0x1114, ois_data_16); 
		ois_data_16 = (g_otp_data[2] << 8) + g_otp_data[3];
		RamWriteA_lc898111(0x1116, ois_data_16); 
		ois_data_16 = (g_otp_data[4] << 8) + g_otp_data[5];
		RamWriteA_lc898111(0x1115, ois_data_16); 
		ois_data_16 = (g_otp_data[6] << 8) + g_otp_data[7];
		RamWriteA_lc898111(0x1117, ois_data_16); 
		ois_data_16 = (g_otp_data[8] << 8) + g_otp_data[9];
		RamWriteA_lc898111(0x1102, ois_data_16); 
		ois_data_16 = (g_otp_data[10] << 8) + g_otp_data[11];
		RamWriteA_lc898111(0x1105, ois_data_16); 
		ois_data_16 = (g_otp_data[12] << 8) + g_otp_data[13];
		RamWriteA_lc898111(0x132A, ois_data_16); 
		ois_data_16 = (g_otp_data[14] << 8) + g_otp_data[15];
		RamWriteA_lc898111(0x136A, ois_data_16); 
		ois_data_16 = (g_otp_data[16] << 8) + g_otp_data[17];
		RamWriteA_lc898111(0x1127, ois_data_16); 
		ois_data_16 = (g_otp_data[18] << 8) + g_otp_data[19];
		RamWriteA_lc898111(0x1167, ois_data_16); 

		
		ois_data_8 = g_otp_data[20];
		RegWriteA_lc898111(0x03A0, ois_data_8); 
		ois_data_8 = g_otp_data[21];
		RegWriteA_lc898111(0x03A1, ois_data_8); 
		ois_data_8 = g_otp_data[22];
		RegWriteA_lc898111(0x03A2, ois_data_8); 
		ois_data_8 = g_otp_data[23];
		RegWriteA_lc898111(0x03A3, ois_data_8); 

		
		
		
		pr_info("[OIS]  Gyro Gain X0  : 0x%x\n", g_otp_data[24]);
		g_otp_data[24] = g_otp_data[24] | 0x80;
		pr_info("[OIS]  Corrected Gyro Gain X0  : 0x%x\n", g_otp_data[24]);
		
		ois_data_32 = (g_otp_data[24] << 24) + (g_otp_data[25] << 16) + (g_otp_data[26] << 8) + g_otp_data[27];
		RamWrite32A(0x1828, ois_data_32); 
		ois_data_32 = (g_otp_data[28] << 24) + (g_otp_data[29] << 16) + (g_otp_data[30] << 8) + g_otp_data[31];
		RamWrite32A(0x1928, ois_data_32); 


		
		ois_data_8 = g_otp_data[32];
		RegWriteA_lc898111(0x0264, ois_data_8); 
	}


#if 0
	
	
	RamWrite32A( 0x1808, 0x3F99999A ) ;	
	RamWrite32A( 0x1809, 0x3F99999A ) ;	
	RamWrite32A( 0x1908, 0x3F99999A ) ;	
	RamWrite32A( 0x1909, 0x3F99999A ) ;	
#endif


	RtnCen(0); 
	
	SetPanTiltMode(ON);

	pr_info("[OIS]  %s  g_ois_mode=%d\n", __func__, g_ois_mode);
	if (g_ois_mode != 0) {
		ClrGyr(0x06, CLR_GYR_DLY_RAM);
		OisEna(); 
		SetGcf(5); 
	}
	

#if 0
	RegReadA_lc898111(0x0084, &ois_data_8);
	pr_info("[OIS]  0x0084 read : 0x%x\n", ois_data_8);

	RamReadA_lc898111(0x1308, &ois_data_16);
	pr_info("[OIS]  0x1308 read : 0x%x\n", ois_data_16);

	RegReadA_lc898111(0x0084, &ois_data_8);
	pr_info("[OIS]  0x0084 read : 0x%x\n", ois_data_8);

	RamReadA_lc898111(0x1348, &ois_data_16);
	pr_info("[OIS]  0x1348 read : 0x%x\n", ois_data_16);
#endif
	pr_info("[OIS]  %s  end\n", __func__);
}