记得开始调试3G的时候,要打通wm8976和RT5621的通道,以供3G的通话来用,记得我在这个项目里面有两种方案:
第一种方案就是上层通过写proc来实现。有关这个思路的实现我已经在另一篇博客里面有详细的描述(proc的使用),感兴趣的朋友,可以去看看,在Android 栏目里面
第二种方案就是看了samsung的代码,了解了他有一种机制可以通过上层来调用kernel的函数,来设置该音频芯片的寄存器,呵呵,samsung对有的音频芯片的支持并不是都是采用这样的机制,samsung开始对芯片初始化函数里面就已经把所用到的通道全部打开。嘿嘿,偷懒啊! 关键是我们有3G的功能就是要在打电话的时候打开芯片的一些通道,而不是在初始启动的时候,就得有一种机制,上层可以随时调用kernel里面的函数,修改音频芯片的寄存器。
下面就让我来详细的描述这种方法,希望对调试音频驱动的朋友有帮助:
首先来看看音频的上层代码:
下面函数的路劲是:Devive/Samsung/proprietary/libaudio/AudioHardware.cpp 里面
#define GSM_PATCH
#if 1//wang
#define LOGX LOGE
#else
#define LOGX LOGV
#endif
status_t AudioHardware::AudioStreamOutALSA::open_l() //在打开音频的时候回调用这个函数
{
LOGX("wang ::AudioStreamOutALSA:: open_l ");
mPcm = mHardware->openPcmOut_l();
if (mPcm == NULL) {
return