//============================================================================= // // Function Name: AUDDRV_Init // // Description: Initialize audio system // //============================================================================= void AUDDRV_Init( void ) { Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_Init *\n\r"); #if defined(FUSE_APPS_PROCESSOR) #ifdef UNDER_LINUX // Register proper handler here #ifdef VPU_INCLUDED RIPISR_Register_VPU_ProcessStatus( (VPU_ProcessStatus_t) &AP_VPU_ProcessStatus ); //not used in runtime? #endif // create the IP here because it will take some time. Otherwise, the first IPC message will take long time. IPC_Audio_Create_BufferPool(); Audio_Apps_EP_Register( ); #else RIPISR_Register_AudioISR_Handler( (Audio_ISR_Handler_t) &AP_Audio_ISR_Handler ); //not used in runtime? #ifdef VPU_INCLUDED RIPISR_Register_VPU_ProcessStatus( (VPU_ProcessStatus_t) &AP_VPU_ProcessStatus ); //not used in runtime? #endif #endif AUDDRV_RegisterCB_getAudioMode( (CB_GetAudioMode_t) &AUDDRV_GetAudioMode ); AUDDRV_RegisterCB_setAudioMode( (CB_SetAudioMode_t) &AUDDRV_SetAudioMode ); AUDDRV_RegisterCB_setMusicMode( (CB_SetMusicMode_t) &AUDDRV_SetMusicMode ); AUDDRV_RegisterCB_getAudioApp( (CB_GetAudioApp_t) &AUDDRV_GetAudioApp ); // Initialize RPC and shared memory here #ifdef UNDER_LINUX Audio_InitRpc(); //VPSHAREDMEM_Init(); DSPDRV_Init(); #endif #else //#if defined(FUSE_APPS_PROCESSOR) #if !defined(FUSE_DUAL_PROCESSOR_ARCHITECTURE) // ATHENA_EDGE_CP_STANDALONE build RIPISR_Register_AudioISR_Handler( (Audio_ISR_Handler_t) &AP_Audio_ISR_Handler ); //not used in runtime? #ifdef VPU_INCLUDED RIPISR_Register_VPU_ProcessStatus( (VPU_ProcessStatus_t) &AP_VPU_ProcessStatus ); //not used in runtime? #endif AUDDRV_RegisterCB_getAudioMode( (CB_GetAudioMode_t) &AUDDRV_GetAudioMode ); AUDDRV_RegisterCB_setAudioMode( (CB_SetAudioMode_t) &AUDDRV_SetAudioMode ); AUDDRV_RegisterCB_setMusicMode( (CB_SetMusicMode_t) &AUDDRV_SetMusicMode ); #else RIPISR_Register_AudioISR_Handler( (Audio_ISR_Handler_t) &CP_Audio_ISR_Handler ); #endif #endif }
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++ * * Function Name: PcmDeviceNew * * Description: Create PCM playback and capture device * *------------------------------------------------------------ */ int __devinit PcmDeviceNew(struct snd_card *card) { struct snd_pcm *pcm; int err = 0; brcm_alsa_chip_t *pChip; struct snd_pcm_substream *substream; callMode = CALL_MODE_NONE; err = snd_pcm_new(card, "Broadcom CAPH", 0, NUM_PLAYBACK_SUBDEVICE, NUM_CAPTURE_SUBDEVICE, &pcm); if (err < 0) return err; pcm->private_data = card->private_data; strcpy(pcm->name, "Broadcom CAPH PCM"); snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &brcm_alsa_omx_pcm_playback_ops); snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &brcm_alsa_omx_pcm_capture_ops); pcm->info_flags = 0; /*pre-allocate memory for playback device */ substream = pcm->streams[0].substream; for (; substream; substream = substream->next) { err = snd_pcm_lib_preallocate_pages(substream, SNDRV_DMA_TYPE_DEV, 0, (IS_PCM_MEM_PREALLOCATED) ? PCM_MAX_PLAYBACK_BUF_BYTES : 0, PCM_MAX_PLAYBACK_BUF_BYTES); if (err) aError ("\n Error : Error when allocate memory for" " playback device err=%d\n", err); } /*pre-allocate memory for capture device */ substream = pcm->streams[1].substream; for (; substream; substream = substream->next) { err = snd_pcm_lib_preallocate_pages(substream, SNDRV_DMA_TYPE_DEV, 0, (IS_PCM_MEM_PREALLOCATED) ? PCM_MAX_CAPTURE_BUF_BYTES : 0, PCM_MAX_CAPTURE_BUF_BYTES); if (err) aError ("\n Error : Error when allocate memory for" " capture device err=%d\n", err); } pChip = (brcm_alsa_chip_t *) card->private_data; /* Initialize the audio controller */ aTrace(LOG_ALSA_INTERFACE, "ALSA-CAPH PcmDeviceNew:call AUDIO_Init\n"); caph_audio_init(); #if defined(CONFIG_BCM_MODEM) DSPDRV_Init(); #endif AUDCTRL_Init(); #if defined(DYNAMIC_DMA_PLAYBACK) spin_lock_init(©_lock); #endif aTrace(LOG_ALSA_INTERFACE, "\n PcmDeviceNew : PcmDeviceNew err=%d\n", err); return err; }