Esempio n. 1
0
void L1Audio_ClearFlag( uint16 audio_id )
{
   uint32 savedMask;
   if (!kal_if_hisr() && !kal_if_lisr())  
      kal_trace( TRACE_GROUP_AUD_MD2GCTRL, L1AUDIO_CLEARFLAG_A,audio_id,l1audio.runningState);
   else
      kal_dev_trace( TRACE_GROUP_AUD_MD2GCTRL, L1AUDIO_CLEARFLAG_A,audio_id,l1audio.runningState);
   kal_take_sem( l1audio.sema, KAL_INFINITE_WAIT );
   ASSERT( l1audio.id_flag & (1 << audio_id) );
   ASSERT( l1audio.runningState & (1 << audio_id) );

   savedMask = SaveAndSetIRQMask();
   l1audio.runningState &= ~(1 << audio_id);
   RestoreIRQMask( savedMask );
   if(l1audio.runningState == 0 ) {
      SLEEP_UNLOCK();
   }
   
   if( (l1audio.runningState == 0) && (l1audio.disallowSleepState == 0) ) {
#if defined( __CENTRALIZED_SLEEP_MANAGER__ )
      Audio_Wake_DSP(audio_id, KAL_FALSE);
#endif
  }
   kal_give_sem( l1audio.sema ); 
}
Esempio n. 2
0
static void I2S_DspIntHISR( void *data )
{
   kal_bool fValid = KAL_FALSE;
   kal_uint16 uEnableCheck, uFinishCheck, uControl, uMagicNo;
   uMagicNo = *I2S_PLAYERROR_INFO;
   uControl = *I2S_PLAYERROR_CONTROL;
   uEnableCheck = uControl & I2S_ENABLE_CHECK;
   uFinishCheck = uControl & I2S_FINISH_CHECK;
   kal_dev_trace( TRACE_FUNC, L1AUDIO_I2S_INTERRUPT, uControl, uEnableCheck, uFinishCheck, uMagicNo);
   if(uFinishCheck && uEnableCheck)
   {
      if(uMagicNo == I2S_FAIL_MAGINNO)
      {
         fValid = KAL_FALSE;
      }
      else
      {
         fValid = KAL_TRUE;
      }
      i2s.fCheckReady = KAL_TRUE;
      i2s.fCheckValid = fValid;
   }
   if(i2s.fCheckEnable == KAL_FALSE || uFinishCheck )
   {
      *I2S_PLAYERROR_CONTROL &= ~(I2S_ENABLE_CHECK | I2S_FINISH_CHECK);
      *I2S_PLAYERROR_INFO = 0;
   }
}
void bgsndDlHisr( void * param)
{
	if(true == bgSnd.isDlHisrCome) { 
		kal_dev_trace( TRACE_GROUP_SND, L1SND_REENTER_HISR, bgSnd.isDlHisrCome, bgSnd.isUlHisrCome);		
	} else {
		bgSnd.isDlHisrCome = true;
		
		if(bgSnd.isUlHisrCome == bgSnd.isDlHisrCome) {
			bgsndHisr(param);
			bgSnd.isUlHisrCome = false;
			bgSnd.isDlHisrCome = false;
		} 
	}
}
Esempio n. 4
0
void drv_trace4(trace_class_enum trc_class, kal_uint32 msg_index, const char *arg_type, kal_uint32 data1, kal_uint32 data2, kal_uint32 data3, kal_uint32 data4)
{
   if (INT_QueryExceptionStatus())
      return;
   if(kal_if_lisr() == KAL_TRUE)
      return;
   if(kal_if_hisr())
   {
     kal_dev_trace(trc_class, msg_index, arg_type, data1, data2, data3, data4);
   }
   else
   {
     kal_trace(trc_class, msg_index, arg_type, data1, data2, data3, data4);
   }
}
static void DCM_Trace(void)
{
    static kal_uint32 src_sel;
	int timeout = 0;

	if (dbg_lpm_enable & DBG_L1_LPM_ENABLE) {
        DRV_ClrReg32(MD_L1_LPM_CON0, 1UL<<2);         //Stop L1 LPM

		kal_dev_trace(DRIVER_GROUP_SYSTEM, LPM_L1,
				      DRV_Reg32(MD_L1_LPM_CON0),
					  DRV_Reg32(MD_L1_LPM_STATUS0), 
					  DRV_Reg32(MD_L1_LPM_STATUS1),
					  DRV_Reg32(MD_L1_LPM_STATUS2));
	
		src_sel = (DRV_Reg32(MD_L1_LPM_CON0) & (0x0f<<4)) >> 4;
		src_sel = ((src_sel+1) & 0x0f) << 4;
#if 1 //32k
		DRV_WriteReg32(MD_L1_LPM_CON0, 2|0); //assert reset
		for(timeout=500; timeout>0; timeout--) {
			if (DRV_Reg32(MD_L1_LPM_STATUS0) == 0) {
				DRV_WriteReg32(MD_L1_LPM_CON0, 2|1); //deassert reset
				break;
			}
		}
		timeout = 0;
#else //pll
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif 

		//debug only
		LPM_REG_CLR_SET(MD_L1_LPM_CON0, (0xffff<<16), timeout<<16);

		LPM_REG_CLR_SET(MD_L1_LPM_CON0, (0xf<<4), (src_sel));
		DRV_SetReg32_NPW(MD_L1_LPM_CON0, 1<<2);
	}
/*
static kal_int16 tone1k_16kSR[320] = {
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05,
0x0000, 0x30FC, 0x5A82, 0x7641, 0x7FFF, 0x7641, 0x5A82, 0x30FB, 
0x0001, 0xCF05, 0xA57E, 0x89C0, 0x8001, 0x89BF, 0xA57E, 0xCF05
};

*/
static void bgsnd_WriteToDSP(void)
{
   uint16 dsp_buf_len, dsp_buf_len_Ul;
   uint16 *dataPtr;
	volatile uint16 *toPtr;
	volatile uint16 *toPtr_Ul;
   int32 count, segment, i;
	bool isWb, isWb_Ul;

/*
	¡VSph_Band_Flag 
	¡EBit 0: Sch band (0/1 : Nb/Wb) 
	¡EBit 1: Cod band (0/1 : Nb/Wb) 
	¡EBit 2: VBI band (0/1 : Nb/Wb) 
	¡EBit 3: BT band (0/1 : Nb/Wb) 
	MT6280 0x2FBF
	MT6589 0x32F1
	dm5
*/

	// get current buffer data length in two sample alight. (16k sampling rate)
	count = bgsndGetDataCount();
	
	//set up the DSP address and pointers
   dsp_buf_len = SAL_Bgsnd_GetDataLen_DL();
#ifdef DSP_BGS_UP_DOWN_INT_SEPERATE
	dsp_buf_len_Ul = SAL_Bgsnd_GetDataLen_UL();
#else
	dsp_buf_len_Ul = dsp_buf_len;
#endif
	
	if(dsp_buf_len == DSP_BUFFER_LEN_WB)
		isWb = true;
	else if(dsp_buf_len == DSP_BUFFER_LEN_NB){
		isWb = false;
//		count >>= 1;
	}
	else {
		ASSERT_REBOOT(0);
		isWb = false; 
	}

	if(dsp_buf_len_Ul == DSP_BUFFER_LEN_WB)
		isWb_Ul= true;
	else if(dsp_buf_len_Ul == DSP_BUFFER_LEN_NB){
		isWb_Ul= false;
	}
	else {
		ASSERT_REBOOT(0);	
		isWb_Ul = false;
	}
		
	toPtr = SAL_Bgsnd_GetBuf_DL();
#ifdef DSP_BGS_UP_DOWN_INT_SEPERATE
	toPtr_Ul = SAL_Bgsnd_GetBuf_UL();
#else
	toPtr_Ul = toPtr; 
#endif

	kal_dev_trace(TRACE_INFO, L1SND_DSP_BUFFER_INFO, count, toPtr, dsp_buf_len);
#ifdef DSP_BGS_UP_DOWN_INT_SEPERATE
	kal_dev_trace(TRACE_INFO, L1SND_DSP_BUFFER_INFO, -1, toPtr_Ul, dsp_buf_len_Ul);
#else
	kal_dev_trace(TRACE_INFO, L1SND_DSP_BUFFER_INFO, count, toPtr_Ul, dsp_buf_len_Ul);
#endif


   if (count > DSP_BUFFER_LEN_MAX)
      count = DSP_BUFFER_LEN_MAX;

	if(count > 0) {

	   /* First Segemnt */
		if(bgSnd.bufWrite < bgSnd.bufRead) {
		   segment = (bgSnd.bufSize - bgSnd.bufRead);
		} else {
			segment = (bgSnd.bufWrite - bgSnd.bufRead);
		}

		if(segment&1){ // keep two sample alight
			segment =segment - 1;
		}

		/*
		if(isNb){ // 8k			
			if (segment > (count<<1))
				segment = (count<<1);
			
		}else { // 16 k
			if (segment > count)
				segment = count;
		}
		*/
		if (segment > count)
			segment = count;
			   
	   if (segment > 0) {
			
			// kal_dev_trace(TRACE_STATE, L1SND_FILLBUFFER, segment);
	      dataPtr = &(bgSnd.pBuf[bgSnd.bufRead]);
	   
	      for (i=segment; i>0; (i-=2)) {
				// first sample
	         *toPtr++ = *dataPtr;
				*toPtr_Ul++ = *dataPtr++;

				// second sample
				if(isWb) {
					*toPtr++ = *dataPtr;
				}
				if(isWb_Ul) {
					*toPtr_Ul++ = *dataPtr;
				}
				dataPtr++;
	      }
			
	      bgSnd.dspLastSample = *(toPtr-1);

	      bgSnd.bufRead += segment;
	      if (bgSnd.bufRead >= bgSnd.bufSize)
	         bgSnd.bufRead = (bgSnd.bufRead-bgSnd.bufSize);

			kal_dev_trace(TRACE_STATE, L1SND_FILLBUFFER, 1, segment, bgSnd.bufRead, bgSnd.bufWrite);
	   }

	   /* Second Segment */
		/*
		if(isNb){ // 8k	
			segment = (count<<1) - segment;
		} else {
		   segment = count - segment;
		}
		*/
		segment = count - segment;

	   if (segment > 0) {
	      // kal_dev_trace(TRACE_STATE, L1SND_FILLBUFFER, segment);
	      // dataPtr = bgSnd.pBuf;
	      dataPtr = &(bgSnd.pBuf[bgSnd.bufRead]);
	      for (i=segment; i>0; (i-=2)) {
	         // first sample
	         *toPtr++ = *dataPtr;
				*toPtr_Ul++ = *dataPtr++;
				
				// second sample
				if(isWb) {
					*toPtr++ = *dataPtr;
				}
				if(isWb_Ul) {
					*toPtr_Ul++ = *dataPtr;
				}
				dataPtr++;
	      }
	      bgSnd.dspLastSample = *(toPtr-1);
	      bgSnd.bufRead += segment;
	      if (bgSnd.bufRead >= bgSnd.bufSize)
	         bgSnd.bufRead = (bgSnd.bufRead-bgSnd.bufSize);

			kal_dev_trace(TRACE_STATE, L1SND_FILLBUFFER, 2, segment, bgSnd.bufRead, bgSnd.bufWrite);	
	   }
		
	}


   /* Put silence (last sample) if MCU buffer is empty */
   if (count < DSP_BUFFER_LEN_MAX) {
		
      kal_uint16 last_sample;
      
      last_sample = bgSnd.dspLastSample;      
      // segment = dsp_buf_len - count;
      segment = DSP_BUFFER_LEN_MAX - count;
		kal_dev_trace(TRACE_STATE, L1SND_PUT_SILENCE, segment, last_sample);

		/*
      for (i=segment; i>0; i--) {
         *toPtr++ = last_sample;
      } 
		*/
      for (i=segment; i>0; (i-=2)) {
         // first sample
         *toPtr++ = last_sample;
			*toPtr_Ul++ = last_sample;
			
			// second sample
			if(isWb) {
				*toPtr++ = last_sample;
			}
			if(isWb_Ul) {
				*toPtr_Ul++ = last_sample;
			}

      }
   }
}
Esempio n. 7
0
static void Audio_Wake_DSP(uint16 audio_id, kal_bool flag)
{
   if (!kal_if_hisr() && !kal_if_lisr())
      kal_trace( TRACE_GROUP_AUD_MD2GCTRL, L1AUDIO_MD2G_PWR_CTRL, audio_id, flag);
   else
      kal_dev_trace( TRACE_GROUP_AUD_MD2GCTRL, L1AUDIO_MD2G_PWR_CTRL, audio_id, flag);
   if(flag)
   {
#if defined(MT6260)
      RM_Resource_Control (RM_MODEM_DSP_1, flag);
#else
      Audio_SW_CPD_Event_Setting(flag);
      Audio_SW_CPD_Eevent_ChangeMode(flag);
#endif

#if defined(MTK_SLEEP_ENABLE)
#if defined(__AUDIO_POWERON_RESET_DSP__)
        {
            extern void AFE_RegisterStore(void);
            AFE_RegisterStore();                               //restore AFE register
        }
      {
         unsigned short DSP_status;     
         DSP_status = L1D_Audio_RestartDSP();
         ASSERT(!DSP_status);
      }
   #else
      L1SM_IntSleepDisable( l1audio.l1sm_handle );
      L1SM_Multi_SW_WakeUp();
      L1D_MD2G_PWD_Disable(l1audio.md2g_pdn_handle);
      L1SM_IntSleepEnable( l1audio.l1sm_handle );
   #endif
#endif
      Audio_DSP_Wakeup_Eevent_Setting(flag);      
      
      l1audio.audio_cpd_count++;
      l1audio.audio_cpd_count_current++;
   } else {
      Audio_DSP_Wakeup_Eevent_Setting(flag);

#if defined(MTK_SLEEP_ENABLE)
   #if defined(__AUDIO_POWERON_RESET_DSP__)
      L1D_Audio_NoNeedDSP();
      AFE_RegisterBackup();                         //Backup AFE register
   #else
      L1D_MD2G_PWD_Enable(l1audio.md2g_pdn_handle);
   #endif
#endif

#if defined(MT6260)
      RM_Resource_Control (RM_MODEM_DSP_1, flag);
#else
      Audio_SW_CPD_Eevent_ChangeMode(flag);
#endif
      l1audio.audio_cpd_count_current--;
#if __DSP_WAKEUP_EVENT__
      Audio_DSP_Wakeup_Eevent_clean();
#endif
   }
   if (!kal_if_hisr() && !kal_if_lisr())
      kal_trace( TRACE_GROUP_AUD_MD2GCTRL, L1AUDIO_MD2G_PWR_CTRL_DONE, audio_id, flag);
   else
      kal_dev_trace( TRACE_GROUP_AUD_MD2GCTRL, L1AUDIO_MD2G_PWR_CTRL_DONE, audio_id, flag);
}