static rt_err_t icodec_configure(struct rt_audio_device *audio,struct rt_audio_caps *caps) { rt_err_t result = RT_EOK; struct imxcodec *icodec = (struct imxcodec *)audio->parent.user_data; switch (caps->main_type) { case AUDIO_TYPE_MIXER: { switch (caps->sub_type) { case AUDIO_MIXER_VOLUME: { WM8960_SetVolume(&icodec->codecHandle, kWM8960_ModuleDAC, caps->udata.value); } break; default: { result = -RT_ERROR; } break; } } break; case AUDIO_TYPE_OUTPUT: { switch (caps->sub_type) { case AUDIO_DSP_PARAM: { } break; case AUDIO_DSP_SAMPLERATE: { int rate = caps->udata.value; icodec->format.sampleRate_Hz = rate; SAI_TxSetFormat(icodec->sai, &icodec->format, icodec->format.masterClockHz, icodec->format.masterClockHz); } break; default: { result = -RT_ERROR; } break; } } break; default: result = -RT_ERROR; break; } return result; }
void Volume_Set(Uint8 Volume) { Uint8 Channel; // Ramp volume if needed for(Channel = 0; Channel <= 5; Channel++) { WM8960_SetVolume(Channel,Volume); } }