kal_bool ctp_cypress_cy8ctma340_get_data(TouchPanelMultipleEventStruct *tpes) { kal_bool i2c_ret; kal_uint8 reg[2]; kal_uint32 model = 0; ASSERT(tpes); tpes->time_stamp = (kal_uint16)L1I_GetTimeStamp(); tpes->padding = CTP_PATTERN; i2c_ret = CTP_I2C_read(TT_MODE_ADDR, reg, 2); if(i2c_ret == KAL_FALSE) { ctp_cypress_cy8ctma340_toggle(); return KAL_FALSE; } if(reg[0] & TT_MODE_BUFFER_INVALID) { drv_trace0(TRACE_GROUP_10, CTP_CAPACITIVE_GET_DATA_INVALID); ctp_cypress_cy8ctma340_toggle(); return KAL_FALSE; } model = (kal_uint32)(reg[1] & TT_STAT_NUMBER_TOUCH); drv_trace1(TRACE_GROUP_10, CTP_CAPACITIVE_MODEL, model); if(model > 4) //cypress only support 4 fingers { ctp_cypress_cy8ctma340_toggle(); return KAL_FALSE; } tpes->model = (kal_uint16)model; //read out all touch points coordinates. if(model == 0) { ctp_cypress_cy8ctma340_toggle(); return KAL_FALSE; } ctp_read_all_point(tpes, model); ctp_cypress_cy8ctma340_toggle(); return KAL_TRUE; }
/* ------------------------------------------------------------------------------ */ static void vmRecMsgHandler(kal_uint16 msgOp, kal_uint32 msgData, void *userData) { switch (msgOp) { case MSG_SAC2L1AUDIO_SPEECH_IDLE_RECORD_VM_START_ACK: case MSG_SAC2L1AUDIO_SPEECH_CALL_RECORD_VM_START_ACK: #if !(defined(MT6573) || defined(MT6575) || defined(MT6577)) ASSERT( FC_STATE_IDLE == vm.ctrl->fc_state); #endif vm.ctrl->fc_state = FC_STATE_RECORD; L1Audio_FC_SetWait(false); break; case MSG_SAC2L1AUDIO_SPEECH_IDLE_RECORD_VM_STOP_ACK: case MSG_SAC2L1AUDIO_SPEECH_CALL_RECORD_VM_STOP_ACK: #if !(defined(MT6573) || defined(MT6575) || defined(MT6577)) ASSERT( FC_STATE_RECORD == vm.ctrl->fc_state); #endif vm.ctrl->fc_state = FC_STATE_IDLE; L1Audio_FC_SetWait(false); break; case MSG_SAC2L1AUDIO_SPEECH_CALL_RECORD_VM_REQUEST_READ_DATA: case MSG_SAC2L1AUDIO_SPEECH_IDLE_RECORD_VM_REQUEST_READ_DATA: { SAS_SphOutputPar_t *vmBufPar = (SAS_SphOutputPar_t *)msgData; // Read data from shared buffer with FC. // Save to media buffer while( vmBufPar != NULL ) { void *ptr; kal_uint16 *buf; kal_uint32 len; kal_int32 segment; Media_GetWriteBuffer(&buf ,&len); len = len << 1; // len in size of byte if( len >= vmBufPar->u4Len ){ len = vmBufPar->u4Len; } { //Fill L1T here for VM kal_uint16* vmTime; kal_uint32 timeStamp; vmTime = (kal_uint16*)vmBufPar->pucBufPtr; vmTime += 2;//Jump 4 byte; timeStamp = L1I_GetTimeStamp(); /* #if defined(__DUAL_MIC_SUPPORT__) if(0 == SAC_SphRecordVmPar.u4AbfCal) #endif */ { *vmTime++ = (uint16)(timeStamp & 0xFFFF); *vmTime = (uint16)(timeStamp>>16); } } memcpy( buf, vmBufPar->pucBufPtr, len ); Media_WriteDataDone_NoWaiting( len >> 1 ); segment = vmBufPar->u4Len - len; if( segment > 0 ){ ptr = vmBufPar->pucBufPtr + len; Media_GetWriteBuffer(&buf ,&len); len = len << 1; // len in size of byte if( len > segment ) len = segment; memcpy( buf, ptr, len ); Media_WriteDataDone_NoWaiting( len >> 1 ); } vmBufPar = (SAS_SphOutputPar_t *)vmBufPar->pucNxtStrPtr; } // Notify FC to ack. mediaIncRecordTime(); //for update record time if(msgOp == MSG_SAC2L1AUDIO_SPEECH_CALL_RECORD_VM_REQUEST_READ_DATA) L1Audio_PutMessage(MSG_L1AUDIO2FAS_SPEECH_CALL_RECORD_VM_REQUEST_READ_DATA_ACK, vm.ctrl->fc_aud_id, 0); else L1Audio_PutMessage(MSG_L1AUDIO2FAS_SPEECH_IDLE_RECORD_VM_REQUEST_READ_DATA_ACK, vm.ctrl->fc_aud_id, 0); // Notify MED to empty media buffer mediaDataNotification(); #if defined(__SMART_PHONE_MODEM__) vmRecordHandler(msgOp, 4); #endif break; } default: ASSERT(0); }
/* ------------------------------------------------------------------------------ */ void L1Audio_Task(unsigned argc, void *argv) { uint32 retrieved_events; uint32 I; uint16 tempID; l1audio.aud_events = kal_create_event_group("L1Audio"); l1audio.hisr = kal_init_hisr(L1AUDIO_HISR); GET_SLEEP_HANDLE(); #if ( defined( __CENTRALIZED_SLEEP_MANAGER__ ) && defined(MTK_SLEEP_ENABLE) && !defined(__AUDIO_POWERON_RESET_DSP__) ) l1audio.md2g_pdn_handle = L1D_MD2G_PWD_GetHandle(); l1audio.l1sm_handle = L1SM_IntGetHandle(); #endif l1audio.runningState = 0; l1audio.disallowSleepState = 0; l1audio.dsp_slow_idle_counter = 0; l1audio.event_flag = 0; l1audio.id_flag = 0; l1audio.media_flag = 0; l1audio.postHisrHandler = (L1Audio_EventHandler)0; l1audio.sema = kal_create_sem( "Aud_Sema", 1 ); l1audio.hisrMagicFlag = 0; for( I = 0; I < MAX_HISR_HANDLER; I++ ) l1audio.hisrMagicNo[I] = 0; tempID = L1Audio_GetAudioID(); L1Audio_SetFlag(tempID); DSP_DynamicDownload_Init(); #ifndef L1D_TEST /// Dynamic download for A/V sync #if defined( DSP_WT_SYN ) && !defined(__AUDIO_COMPONENT_SUPPORT__) DSP_DynamicDownload( DDID_WAVETABLE ); #endif #endif AM_Init(); #if APM_SUPPORT APM_Init(); #endif /// AFE_Init will invoke L1Audio_GetAudioID /// and expect to get the id 0 to make sure /// it has the highest priority in the event group AFE_Init(); #if !defined(__SMART_PHONE_MODEM__) && !defined(__L1_STANDALONE__) && !defined( MED_MODEM ) AVsync_Init(); #endif #if defined(__AUDIO_POWERON_RESET_DSP__) { uint32 _savedMask; _savedMask = SaveAndSetIRQMask(); AFE_Init_status(KAL_TRUE); AFE_RegisterBackup(); RestoreIRQMask(_savedMask); } #endif L1SP_Init(); ktInit( L1Audio_GetAudioID() ); toneInit( L1Audio_GetAudioID() ); mediaInit( L1Audio_GetAudioID() ); #if defined(VR_CYBERON) vrsdInit(); #elif defined(VRSI_CYBERON) vrsiInit(); #endif toneLoopbackRecInit(); #if ( defined(__BT_A2DP_PROFILE__) || defined(SBC_UNIT_TEST) ) //&& !(APM_SUPPORT) SBC_Init(); #endif #if defined(__BES_TS_SUPPORT__) AudioPP_TS_Init(); #endif #ifdef __CTM_SUPPORT__ l1ctm_init(); #endif #ifdef __TWOMICNR_SUPPORT__ Two_Mic_NR_chip_Init(); #endif #if VMI_SUPPORT || defined(VORTP_UNIT_TEST) VMI_Init(); #endif #if VORTP_SUPPORT || defined(VORTP_UNIT_TEST) VoRTP_Init(); #endif #if defined(CYBERON_DIC_TTS) || defined(IFLY_TTS) || defined(SINOVOICE_TTS) ttsInit(); #endif #if defined( DSP_WT_SYN ) && !defined(__AUDIO_COMPONENT_SUPPORT__) DSPSYN_HW_Init(); #endif #if defined( __I2S_INPUT_MODE_SUPPORT__ ) I2S_init(); #endif #if defined(__VOICE_CHANGER_SUPPORT__) VCHG_Initialize(); #endif #if defined(__AUDIO_COMPONENT_SUPPORT__) && !defined(__L1_STANDALONE__) && !defined(MED_MODEM) // KH : for audio component ACU_Init(); #endif #if defined(__CVSD_CODEC_SUPPORT__) { extern void BT_SCO_Init(void); BT_SCO_Init(); } #endif memset( &(l1audio.debug_info), 0, sizeof(l1audio.debug_info) ); AFE_TurnOnFIR( L1SP_SPEECH ); AFE_TurnOnFIR( L1SP_VOICE ); L1Audio_ClearFlag(tempID); L1Audio_FreeAudioID(tempID); l1audio.isInitiated = KAL_TRUE; while( 1 ) { #if VERIFY_DATA_TO_DSP VERIFY_DATA_TO_DSP_SAVE_DATA(); #endif kal_retrieve_eg_events(l1audio.aud_events,0xFFFF,KAL_OR_CONSUME,&retrieved_events,KAL_SUSPEND); l1audio.retrieved_events = retrieved_events; l1audio.events_l1FN = L1I_GetTimeStamp(); for( I = 0; I < MAX_AUDIO_FUNCTIONS; I++ ) { if ( l1audio.retrieved_events & (1<<I) ) { l1audio.evHandler[I]( l1audio.evData[I] ); } } //if( (l1audio.runningState & l1audio.disallowSleepState) == 0 ) if( l1audio.runningState == 0 ) SLEEP_UNLOCK(); } }
void L1SP_D2C_LISR( uint16 itype ) { l1audio.d2c_itype = itype; l1audio.d2c_l1FN = L1I_GetTimeStamp(); L1Audio_Msg_DSP_INT( itype ); #if __DSP_WAKEUP_EVENT__ Audio_DSP_Wakeup_Eevent_clean(); #endif #if defined(MT6268) //work around in 3G, there is DP_D2C_SE_DONE int. There might be error operate especially when InterRAT HO if( itype == DP_D2C_SE_DONE && AM_IsSpeechOn() ) return; #endif #if defined(MT6236) || defined(MT6236B) || defined(MT6256_S00) || defined(MT6256_S01) || defined(MT6251) || defined(MT6253E) || defined(MT6253L)|| defined(MT6252) || defined(MT6252H) || defined(MT6255) || defined(MT6250) || defined(MT6260) if(itype == D2C_DSP_DEAD_INT_ID){ #ifndef L1D_TEST { ASSERT_DUMP_PARAM_T dump_param; dump_param.addr[0] = (kal_uint32)(DPRAM_CPU_base +0x0A0*2); dump_param.len[0] = 70*2; dump_param.addr[1] = (kal_uint32)(DPRAM2_CPU_base+0x130*2); dump_param.len[1] = 180*2; dump_param.addr[2] = 0; //End of dump param EXT_ASSERT_DUMP(0, 0x20060622, 0, 0, &dump_param); } #else { extern void L1DTest_AssertFail(void); L1DTest_AssertFail(); } #endif } #endif // #if defined(MT6236) || defined(MT6236B) || defined(MT6256) #if defined(MT6260) { bool dsp_ok = false; uint32 sph_int = 0; bool from_sph = Pseudo_SAL_DSPINT_Resolve(itype, &sph_int); if (from_sph) { { kal_int16 i; for (i = 1; i < PSEUDO_SAL_DSPINT_PRIO_MAX; i++) { if (sph_int & (1 << i)) { if (PSEUDO_SAL_DSPINT_PRIO_3G_DL == i) { // Do nothing. Don't trigger LISR here. 3G driver will trigger HISR by it's timing } else { L1Audio_TrigD2CHisr(DP_D2C_INT_MAPPING_BASIC + i); } dsp_ok |= true; } } } // After DSP send D2C and turn on bit in DP_D2C_SPEECH_UL_INT, but MCU does not receive D2C. // Handover causes VBI reset which will clean DP_D2C_SPEECH_UL_INT if (sph_int != 0) { if (!dsp_ok) { extern void L1D_WIN_DisableAllEvents(uint16 except_irq_mask); DisableIRQ(); L1D_WIN_DisableAllEvents(0); // disable all TDMA events ASSERT_REBOOT(0); } } return; } } L1Audio_TrigD2CHisr(itype); #else // chip compile option #if defined(MT6236) || defined(MT6236B) || defined(MT6256_S00) || defined(MT6256_S01) || defined(MT6251) || defined(MT6253E) || defined(MT6253L)|| defined(MT6252) || defined(MT6252H) || defined(MT6255) || defined(MT6250) if(itype == D2C_INT6_MAGIC){ bool dsp_ok = false; #else if(itype == D2C_DSP_DEAD_INT_ID){ bool dsp_ok = false; itype = *DSP_DEAD_INTERRUPT; if( itype == D2C_DSP_DEAD_INT_ID ) { extern void L1D_WIN_DisableAllEvents(uint16 except_irq_mask); DisableIRQ(); *DP_D2C_TASK1 = 0; /* freeze DSP */ L1D_WIN_DisableAllEvents( 0 ); /* disable all TDMA events */ #ifndef L1D_TEST { ASSERT_DUMP_PARAM_T dump_param; /* Write DSP debug info to exception record */ #if defined(MT6235) || defined(MT6235B) || defined(MT6268) || defined(MT6251) dump_param.addr[0] = (kal_uint32)(DPRAM_CPU_base +0x0A0*2); dump_param.len[0] = 70*2; dump_param.addr[1] = (kal_uint32)(DPRAM2_CPU_base+0x130*2); dump_param.len[1] = 180*2; dump_param.addr[2] = 0; //End of dump param #else dump_param.addr[0] = (kal_uint32)(DPRAM_CPU_base +0x130*2); dump_param.len[0] = 250*2; dump_param.addr[1] = 0; //End of dump param #endif EXT_ASSERT_DUMP(0, 0x20060622, 0, 0, &dump_param); } #else { extern void L1DTest_AssertFail(void); L1DTest_AssertFail(); } #endif//#ifndef L1D_TEST } #endif // #if defind(MT6236)|| defined(MT6256) #if defined(MT6250) itype = *DSP_DACA_UL_INT; if(itype == DP_D2C_DACA_REQ_UL){ *DSP_DACA_UL_INT = 0; L1SP_D2C_LISR(itype); dsp_ok |= true; } itype = *DSP_DACA_DL_INT; if(itype == DP_D2C_DACA_REQ_DL){ *DSP_DACA_DL_INT = 0; L1SP_D2C_LISR(itype); dsp_ok |= true; } #endif itype = *DSP_PCM_REC_INT; if( itype == D2C_UL_DL_PCM_REC_INT_ID || itype == D2C_WAV_REC_REQ_ID ) { *DSP_PCM_REC_INT = 0; L1SP_D2C_LISR(itype); dsp_ok |= true; } itype = *DSP_SOUND_EFFECT_INT; if( itype == D2C_SOUND_EFFECT_INT_ID ) { *DSP_SOUND_EFFECT_INT = 0; L1SP_D2C_LISR(itype); dsp_ok |= true; } #if defined( __BT_AUDIO_VIA_SCO__ ) && !defined(__CVSD_CODEC_SUPPORT__) itype = *DP_AUDIO_VIA_8KBT_INT; if( itype == D2C_AUDIO_VIA_8KBT_ID ) { *DP_AUDIO_VIA_8KBT_INT = 0; L1SP_D2C_LISR(itype); dsp_ok |= true; } #endif #if _SPE_FOR_TEST_SIM_ itype = *DP2_ADAPT_VOL_INT; if( itype == DP_D2C_ADAPT_VOL ) { *DP2_ADAPT_VOL_INT = 0; L1SP_D2C_LISR(itype); dsp_ok |= true; } #endif if (!dsp_ok) { extern void L1D_WIN_DisableAllEvents(uint16 except_irq_mask); DisableIRQ(); #if !defined(MT6256_S01) && !defined(MT6255) && !defined(MT6250) && !defined(MT6260) *DP_D2C_TASK1 = 0; /* freeze DSP */ #endif L1D_WIN_DisableAllEvents( 0 ); /* disable all TDMA events */ ASSERT_REBOOT(0); } return; } if( (itype == DP_D2C_SE_SD_DONE) && (!AM_IsSpeechOn()) ) // when idle 16kPCM, AMR/AWB/VM record, the driver expects the D2C_SE_DONE interrupt triggered by DSP. If System's doing SMS, howerver, DSP triggers the D2C_SE_SD_DONE to MCU. Even if in this case, because the data provided by DSP is also available, the drive just easily modifies the interrupt ID to access data provide by DSP. itype = DP_D2C_SE_DONE; { int32 I; for (I = 0; I < MAX_HISR_HANDLER; I++) { if (itype == l1audio.hisrMagicNo[I]) { l1audio.hisrMagicFlag |= (1<<I); kal_activate_hisr(l1audio.hisr); return; } } } #endif // chip compile option #if defined(MT6235) || defined(MT6235B) || defined(MT6268) || defined(MT6253) || defined(MT6236) || defined(MT6236B) || defined(MT6256_S00)|| defined(MT6256_S01) || defined(MT6251) || defined(MT6253E) || defined(MT6253L)|| defined(MT6252) || defined(MT6252H) || defined(MT6255) || defined(MT6250) || defined(MT6260) if (itype == DP_D2C_AVSYNC) { Media_A2V_LISR(); } else #endif { l1audio.media_flag = itype; kal_activate_hisr(l1audio.hisr); } } void L1Audio_HookHisrHandler( kal_uint16 magic_no, L1Audio_EventHandler handler, void *userData ) { int32 I; for( I = 0; I < MAX_HISR_HANDLER; I++ ) { if( l1audio.hisrMagicNo[I] == 0 ) { l1audio.hisrMagicNo[I] = magic_no; l1audio.hisrHandler[I] = handler; l1audio.hisrUserData[I] = userData; break; } } ASSERT_REBOOT( I != MAX_HISR_HANDLER ); }
void pmic6326_ccci_wait_ACK(pmic6326_ccci_op OP) { volatile pmic6326_ccci_msg *p_recv_msg; volatile pmic6326_ccci_msg_info *p_recv_msg_info; #if defined(DEBUG_PMIC_CCCI_SKIP_SHARE_MEMORY_POLLING) return; #endif // DEBUG_PMIC_CCCI_SKIP_SHARE_MEMORY_POLLING // if ( (if_kal_hisr()) || (if_kal_lisr()) ) // { // // We are in HISR or LISR // } // else // { // // } // Polling share memory // p_recv_msg = &(pPMIC6326ShareMemInfo->ccci_msg); // p_recv_msg_info = &(pPMIC6326ShareMemInfo->ccci_msg_info); // Log current timestamp pmic6326_ccci_prev_frame_tick = L1I_GetTimeStamp(); while (1) { // Polling share memory p_recv_msg = &(pPMIC6326ShareMemInfo->ccci_msg); p_recv_msg_info = &(pPMIC6326ShareMemInfo->ccci_msg_info); #if defined(DEBUG_PMIC_CCCI_LEASE_SHARE_MEMORY_POLLING_CHECK_CRITERIA) if ( (p_recv_msg->pmic6326_op == OP) ) #else // #if defined(DEBUG_PMIC_CCCI_LEASE_SHARE_MEMORY_POLLING_CHECK_CRITERIA) if ( (p_recv_msg->pmic6326_op == OP) && (p_recv_msg->pmic6326_type == PMIC6326_RES) ) #endif // #if defined(DEBUG_PMIC_CCCI_LEASE_SHARE_MEMORY_POLLING_CHECK_CRITERIA) { // Get response LastPMIC6326ExecuteTime = p_recv_msg_info->pmic6326_exec_time; LastPMIC6326OP = p_recv_msg->pmic6326_op; p_recv_msg_info->pmic6326_exec_time = 0; p_recv_msg->pmic6326_op = PMIC6326_MAX; break; } else { // Should we sleep if we are in task context? } // Calculate the period we polling, if NOT reasonable, just show warning message pmic6326_ccci_curr_frame_tick = L1I_GetTimeStamp(); if (pmic6326_ccci_curr_frame_tick >= pmic6326_ccci_prev_frame_tick) { if ( (pmic6326_ccci_curr_frame_tick - pmic6326_ccci_prev_frame_tick) > MAX_PMIC6326_CCCI_POLLING_PERIOD) { // Show warning message kal_prompt_trace(MOD_BMT,"PMIC6326 CCCI Interface get ACK from remote side timeout"); break; } } else { kal_uint32 tmp; tmp = (0xFFFFFFFF - pmic6326_ccci_prev_frame_tick + pmic6326_ccci_curr_frame_tick +1); if (tmp > MAX_PMIC6326_CCCI_POLLING_PERIOD) { // Show warning message kal_prompt_trace(MOD_BMT,"PMIC6326 CCCI Interface get ACK from remote side timeout"); break; } } } }