/* ============================================================================ TWL互換側のI2Cレジスタ =========================================================================== */ #include "incs.h" #include "jhl_defs.h" #include "vreg_twl.h" u8 vreg_twl[ REG_TWL_INT_ADRS_TIME_PWSW_THRESHOLD +1 ]; /* ============================================================================ 仮想レジスタの初期化 =========================================================================== */ void vreg_twl_init(){ #if 0 REG_TWL_INT_ADRS_VER_INFO = 0x00, REG_TWL_INT_ADRS_PMIC_INFO, REG_TWL_INT_ADRS_BATT_INFO, REG_TWL_INT_ADRS_IRQ, // 0x10, REG_TWL_INT_ADRS_COMMAND, REG_TWL_INT_ADRS_MODE, REG_TWL_INT_ADRS_POWER_INFO, // 0x20, REG_TWL_INT_ADRS_POWER_SAVE, REG_TWL_INT_ADRS_WIFI, // 0x30, REG_TWL_INT_ADRS_CAM, REG_TWL_INT_ADRS_VOL, // 0x40, REG_TWL_INT_ADRS_BL, REG_TWL_INT_ADRS_CODEC_MIC_GAIN, // 0x50, REG_TWL_INT_ADRS_ADC_CALIB, // 0x60, REG_TWL_INT_ADRS_ADC_CALIB_STATUS, REG_TWL_INT_ADRS_ADC_CALIB_VALUE, REG_TWL_INT_ADRS_POWER_LED, REG_TWL_INT_ADRS_TEMP0, // 0x70 - 0x77 REG_TWL_INT_ADRS_TEMP1, REG_TWL_INT_ADRS_TEMP2, REG_TWL_INT_ADRS_TEMP3, REG_TWL_INT_ADRS_TEMP4, REG_TWL_INT_ADRS_TEMP5, REG_TWL_INT_ADRS_TEMP6, REG_TWL_INT_ADRS_TEMP7, REG_TWL_INT_ADRS_TIME_PWSW_DELAY, REG_TWL_INT_ADRS_TIME_PWSW_THRESHOLD #endif } //******************************************************************************* // I2C仮想レジスタに書きます。 // 引数 adrs は内部アドレス //  存在しないアドレスにアクセスした場合、何もしません。 void vreg_twl_write( u8 adrs, u8 data ){ if( REG_TWL_INT_ADRS_TIME_PWSW_THRESHOLD >= adrs ){ // アドレス範囲外 vreg_twl[ adrs ] = data; } return; } //******************************************************************************* // I2C仮想レジスタから読みます。 // 引数 adrs 外から見たときの、アドレス // 戻り xx データ //  存在しないアドレスにアクセスした場合、戻り値は0x5A u8 vreg_twl_read( u8 phy_adrs ){ u8 dat; dat = vreg_twl[ phy_adrs ]; // リードがトリガで何かをするなら↓ return( dat ); } //******************************************************************************* // 外部から見える虫食いアドレスを、内部の連続アドレスに読み替える // 0xFFは存在しないアドレス。 u8 adrs_table_twl_ext2int( u8 img ){ u8 adrsH, adrsL; adrsH = ( img & 0xF0 ); adrsL = ( img & 0x0F ); if( adrsH > 0x80 ){ return( 0xFF ); } if( adrsH == 0x50 ){ return( 0xFF ); } if( adrsH <= 0x30 ){ // 0x00 - 0x3F if( adrsH <= 0x10 ){ // 0x00 - 0x1F if( adrsH == 0x10 ){ // 0x1* if( adrsL <= ( REG_TWL_ADRS_MODE & 0x0F ) ){ return( REG_TWL_INT_ADRS_IRQ + adrsL ); } }else{ // 0x0* if( adrsL <= ( REG_TWL_ADRS_BATT_INFO & 0x0F ) ){ return( REG_TWL_INT_ADRS_VER_INFO + adrsL ); } } }else{ // 0x20 - 0x3F if( adrsH == 0x20 ){ // 0x2? if( adrsL <= ( REG_TWL_ADRS_POWER_SAVE & 0x0F ) ){ return( REG_TWL_INT_ADRS_POWER_INFO + adrsL ); } }else{ // 0x3* if( adrsL <= ( REG_TWL_ADRS_CAM & 0x0F ) ){ return( REG_TWL_INT_ADRS_WIFI + adrsL ); } } } }else{ if( adrsH <= 0x60 ){ if( adrsH == 0x60 ){ if( adrsL <= ( REG_TWL_ADRS_POWER_LED & 0x0F ) ){ return( REG_TWL_INT_ADRS_ADC_CALIB + adrsL ); } }else{ // 40台 if( adrsL <= ( REG_TWL_ADRS_BL & 0x0F ) ){ return( REG_TWL_INT_ADRS_VOL + adrsL ); } } }else{ if( adrsH == 0x70 ){ if( adrsL <= ( REG_TWL_ADRS_TEMP7 & 0x0F ) ){ return( REG_TWL_INT_ADRS_TEMP0 + adrsL ); } }else{ // 80台 if( adrsL <= ( REG_TWL_ADRS_TIME_PWSW_THRESHOLD & 0x0F ) ){ return( REG_TWL_INT_ADRS_TIME_PWSW_DELAY + adrsL ); } } } } return( 0xFF ); }