void Ana_Recover_AudioRecord(void) { PRINTK_ANA_REG("Ana_Recover_AudioRecord\n"); Ana_Recover_Reg(AUDIO_NCP0); Ana_Recover_Reg(AUDIO_NCP1); Ana_Recover_Reg(AUDIO_LDO0); Ana_Recover_Reg(AUDIO_LDO1); Ana_Recover_Reg(AUDIO_LDO2); Ana_Recover_Reg(AUDIO_GLB0); Ana_Recover_Reg(AUDIO_GLB1); Ana_Recover_Reg(AUDIO_REG1); Ana_Recover_Reg(AUDIO_CON3); Ana_Recover_Reg(AUDIO_CON4); Ana_Recover_Reg(AUDIO_CON5); Ana_Recover_Reg(AUDIO_CON6); Ana_Recover_Reg(AUDIO_CON14); Ana_Recover_Reg(AUDIO_CON17); Ana_Recover_Reg(AUDIO_CON20); Ana_Recover_Reg(AUDIO_CON21); Ana_Recover_Reg(AUDIO_CON22); Ana_Recover_Reg(AUDIO_CON23); Ana_Recover_Reg(AUDIO_CON24); Ana_Recover_Reg(AUDIO_CON31); Ana_Recover_Reg(AUDIO_CON33); Ana_Recover_Reg(AUDIO_CON34); }
void Ana_Recover_AudioPlayback(void) { kal_uint32 u4AUD_CON9 = 0; PRINTK_ANA_REG("Ana_Recover_AudioPlayback\n"); u4AUD_CON9 = Ana_Get_Backup_Memory(AUDIO_CON9); Ana_Recover_Reg(AUDIO_NCP0); Ana_Recover_Reg(AUDIO_NCP1); Ana_Recover_Reg(AUDIO_LDO0); Ana_Recover_Reg(AUDIO_LDO1); Ana_Recover_Reg(AUDIO_LDO2); Ana_Recover_Reg(AUDIO_GLB0); Ana_Recover_Reg(AUDIO_GLB1); Ana_Recover_Reg(AUDIO_REG1); Ana_Recover_Reg(AUDIO_CON0);//set line-in gain and select ZCD source Ana_Recover_Reg(AUDIO_CON1); Ana_Recover_Reg(AUDIO_CON2); Ana_Recover_Reg(AUDIO_CON3); Ana_Recover_Reg(AUDIO_CON5); Ana_Recover_Reg(AUDIO_CON6); Ana_Recover_Reg(AUDIO_CON7); Ana_Recover_Reg(AUDIO_CON8); if(u4AUD_CON9&0x01) //Follow audio fifo control flow { Ana_Set_Reg(AUDIO_CON9, u4AUD_CON9, 0xfffffffe); Ana_Set_Reg(AUDIO_CON9, u4AUD_CON9, 0x00000001); } else { Ana_Recover_Reg(AUDIO_CON9); } Ana_Recover_Reg(AUDIO_CON10); Ana_Recover_Reg(AUDIO_CON14); Ana_Recover_Reg(AUDIO_CON17); }
kal_uint32 Ana_Get_Reg(kal_uint32 offset) { volatile kal_uint32 *value; UINT32 address = (offset); PRINTK_ANA_REG("Ana_Get_Reg offset=%x \n",offset); value = (volatile kal_uint32 *)(address); return *value; }
uint32 Ana_Get_Reg(uint32 offset) { // get pmic register int ret = 0; uint32 Rdata = 0; #ifdef AUDIO_USING_WRAP_DRIVER ret = pwrap_read(offset, &Rdata); #endif PRINTK_ANA_REG ("Ana_Get_Reg offset= 0x%x Rdata = 0x%x ret = %d\n",offset,Rdata,ret); return Rdata; }
void Ana_Backup_Reg(kal_uint32 u4Addr/*Kernel VA*/, kal_uint32 u4Val) { volatile kal_uint32 *value; kal_uint32 offset = 0; PRINTK_ANA_REG("Ana_Backup_Reg Addr=%x Val=%x\n",u4Addr,u4Val); if (u4Addr >= ABB_MDSYS_BASE){ offset = u4Addr - ABB_MDSYS_BASE; value = (volatile kal_uint32 *)(p_gAnaBackReg+offset); *value = u4Val; }else{ xlog_printk(ANDROID_LOG_INFO, "Sound","Ana_Backup_Reg failed!\n"); } }
kal_uint32 Ana_Get_Backup_Memory(kal_uint32 u4Addr) { volatile kal_uint32 *value; kal_uint32 offset = 0; PRINTK_ANA_REG("Ana_Get_Backup_Memory Addr=%x \n",u4Addr); if (u4Addr >= ABB_MDSYS_BASE){ offset = u4Addr - ABB_MDSYS_BASE; value = (volatile kal_uint32 *)(p_gAnaBackReg+offset); return *value; }else{ xlog_printk(ANDROID_LOG_INFO, "Sound","Ana_Backup_Reg failed!\n"); return (0xc5c5c5c5); } }
void Ana_Set_Reg(kal_uint32 offset, kal_uint32 value, kal_uint32 mask) { volatile kal_uint32 address = (offset); volatile kal_uint32 *Analog_Register = (volatile kal_uint32 *)address; volatile kal_uint32 val_tmp; PRINTK_ANA_REG("Ana_Set_Reg offset=%x, value=%x, mask=%x \n",offset,value,mask); val_tmp = READ_REGISTER_UINT32(Analog_Register); val_tmp &= (~mask); mt65xx_reg_sync_writel(val_tmp,Analog_Register); val_tmp = READ_REGISTER_UINT32(Analog_Register); val_tmp |= (value&mask); mt65xx_reg_sync_writel(val_tmp,Analog_Register); }
kal_uint32 Ana_Check_Backup_Memory(kal_uint32 offset) { kal_uint32 val_1=0, val_2=0, ret_value = 0; val_1 = Ana_Get_Reg(offset); val_2 = Ana_Get_Backup_Memory(offset); PRINTK_ANA_REG("Ana_Check_Backup_Memory ANA=0x%x, BACKUP=0x%x \n", val_1, val_2); if(val_1 == val_2) ret_value = 1; else ret_value = 0; return (ret_value); }
void Ana_Set_Reg(uint32 offset, uint32 value, uint32 mask) { // set pmic register or analog CONTROL_IFACE_PATH int ret = 0; PRINTK_ANA_REG("Ana_Set_Reg offset= 0x%x , value = 0x%x mask = 0x%x\n", offset, value, mask); #ifdef AUDIO_USING_WRAP_DRIVER uint32 Reg_Value = Ana_Get_Reg(offset); Reg_Value &= (~mask); Reg_Value |= (value & mask); ret = pwrap_write(offset, Reg_Value); Reg_Value = Ana_Get_Reg(offset); if ((Reg_Value & mask) != (value & mask)) { //printk("Ana_Set_Reg offset= 0x%x , value = 0x%x mask = 0x%x ret = %d Reg_Value = 0x%x\n", offset, value, mask, ret, Reg_Value); } #endif }