//******************************************************************************** // 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__); }