MTK PA 相关 (power amplifier)

来源:互联网 发布:婴儿被子品牌知乎 编辑:程序博客网 时间:2024/05/16 07:47
alps/mediatek/custom/simcom72_wet_jb3/hal/audioflinger/audio/audio_custom_exp.h
alps/mediatek/custom/common/kernel/sound/amp_6323pmic_spk/yusu_android_speaker.c
alps/mediatek/custom/common/kernel/sound/amp_yad/yusu_android_speaker.c
alps/mediatek/custom/common/kernel/sound/amp_aw8733/yusu_android_speaker.c

void Sound_Speaker_Turnon(int channel)
{
    PRINTK("Sound_Speaker_Turnon channel = %d\n",channel);
    if(gsk_on)
        return;
    mt_set_gpio_dir(GPIO_SPEAKER_EN_PIN,GPIO_DIR_OUT); // output
    mt_set_gpio_out(GPIO_SPEAKER_EN_PIN,GPIO_OUT_ONE); // high //mode2
    udelay(2);
    mt_set_gpio_out(GPIO_SPEAKER_EN_PIN,GPIO_OUT_ZERO); // low //mode2
    udelay(2);
    mt_set_gpio_out(GPIO_SPEAKER_EN_PIN,GPIO_OUT_ONE); // high //mode2
    msleep(SPK_WARM_UP_TIME);
    gsk_on = true;
}

void Sound_Speaker_Turnoff(int channel)
{
    PRINTK("Sound_Speaker_Turnoff channel = %d\n",channel);
    if(!gsk_on)
        return;
    mt_set_gpio_dir(GPIO_SPEAKER_EN_PIN,GPIO_DIR_OUT); // output
    mt_set_gpio_out(GPIO_SPEAKER_EN_PIN,GPIO_OUT_ZERO); // high
    gsk_on = false;
}
======================================
ubuntu@ZZ:alps$ grep -nr yusu_android_speaker.h *
bootable/bootloader/lk/platform/mediatek/mt6572/kernel/drivers/sound/AudDrv_Kernel.c:105:#include "yusu_android_speaker.h"

bootable/bootloader/lk/custom/simcom72_wet_jb3/kernel/sound/inc/yusu_android_speaker.h:30: * [ALPS00102848] [Need Patch] [Volunteer Patch] build waring in yusu_android_speaker.h

bootable/bootloader/lk/custom/simcom72_wet_jb3/kernel/sound/yusu_android_speaker.c:22:#include "yusu_android_speaker.h"

kernel/out/mediatek/platform/mt6572/kernel/drivers/sound/.AudDrv_Kernel.o.cmd:720: alps/kernel/../mediatek/custom/out/simcom72_wet_jb3/kernel/sound/inc/yusu_android_speaker.h \
Binary file kernel/out/mediatek/custom/out/simcom72_wet_jb3/kernel/built-in.o matches
Binary file kernel/out/mediatek/custom/out/simcom72_wet_jb3/kernel/sound/yusu_android_speaker.o matches
kernel/out/mediatek/custom/out/simcom72_wet_jb3/kernel/sound/.yusu_android_speaker.o.cmd:631: alps/kernel/../mediatek/custom/out/simcom72_wet_jb3/kernel/sound/inc/yusu_android_speaker.h \
grep: warning: kernel/out/source: recursive directory loop
Binary file kernel/out/.tmp_vmlinux2 matches
kernel/mediatek/platform/mt6572/kernel/drivers/sound/AudDrv_Kernel.c:105:#include "yusu_android_speaker.h"
kernel/mediatek/custom/out/simcom72_wet_jb3/kernel/sound/inc/yusu_android_speaker.h:30: * [ALPS00102848] [Need Patch] [Volunteer Patch] build waring in yusu_android_speaker.h
kernel/mediatek/custom/out/simcom72_wet_jb3/kernel/sound/yusu_android_speaker.c:22:#include "yusu_android_speaker.h"
mediatek/platform/mt6572/kernel/drivers/sound/AudDrv_Kernel.c:105:#include "yusu_android_speaker.h"
mediatek/custom/common/kernel/sound/amp_yad/yusu_android_speaker.c:22:#include "yusu_android_speaker.h"
mediatek/custom/common/kernel/sound/amp_aw8733/yusu_android_speaker.c:22:#include "yusu_android_speaker.h"
mediatek/custom/common/kernel/sound/amp_aw8145/yusu_android_speaker.c:22:#include "yusu_android_speaker.h"
mediatek/custom/common/kernel/sound/inc/yusu_android_speaker.h:30: * [ALPS00102848] [Need Patch] [Volunteer Patch] build waring in yusu_android_speaker.h
mediatek/custom/common/kernel/sound/amp_6323pmic_spk/yusu_android_speaker.c:22:#include "yusu_android_speaker.h"
mediatek/custom/common/kernel/sound/amp_6320pmic_spk/yusu_android_speaker.c:22:#include "yusu_android_speaker.h"
mediatek/custom/common/kernel/sound/amp_yad_2_spk/yusu_android_speaker.c:22:#include "yusu_android_speaker.h"
mediatek/custom/common/kernel/sound/amp_tpa2055d3/yusu_android_speaker.c:8:#include "yusu_android_speaker.h"
mediatek/custom/common/kernel/sound/amp_6329pmic_spk/yusu_android_speaker.c:23:#include "yusu_android_speaker.h"
mediatek/custom/common/kernel/sound/amp_6329pmic_2in1_spk/yusu_android_speaker.c:23:#include "yusu_android_speaker.h"
mediatek/custom/out/simcom72_wet_jb3/kernel/sound/inc/yusu_android_speaker.h:30: * [ALPS00102848] [Need Patch] [Volunteer Patch] build waring in yusu_android_speaker.h
mediatek/custom/out/simcom72_wet_jb3/kernel/sound/yusu_android_speaker.c:22:#include "yusu_android_speaker.h"
mediatek/custom/banyan_addon/kernel/sound/speaker/yusu_android_speaker.c:26: * [ALPS00102848] [Need Patch] [Volunteer Patch] build waring in yusu_android_speaker.h
mediatek/custom/banyan_addon/kernel/sound/speaker/yusu_android_speaker.c:66:#include "yusu_android_speaker.h"


alps/kernel/mediatek/platform/mt6572/kernel/drivers/sound/AudDrv_Kernel.c

alps/kernel/mediatek/platform/mt6572/hardware/audio/aud_drv/很多文件firmware层,这是链接路径
alps/mediatek/platform/mt6572/hardware/audio/aud_drv/很多文件firmware层

alps/bootable/bootloader/lk/platform/mediatek/mt6572/kernel/drivers/sound/AudDrv_Kernel.c调用static long AudDrv_ioctl(struct file *fp, unsigned int cmd, unsigned long arg){}开光喇叭

    switch(cmd)
    {
。。。      
case SET_SPEAKER_ON:
            PRINTK_AUDDRV("AudDrv SET_SPEAKER_ON arg:%lu \n",arg);
            mutex_lock(&gamp_mutex);
            Sound_Speaker_Turnon((int)arg);
            AuddrvSpkStatus = true;
            mutex_unlock(&gamp_mutex);
            break;
        case SET_SPEAKER_OFF:
            PRINTK_AUDDRV("AudDrv SET_SPEAKER_OFF arg:%lu \n",arg);
            mutex_lock(&gamp_mutex);
            Sound_Speaker_Turnoff((int)arg);
            AuddrvSpkStatus = false;
            mutex_unlock(&gamp_mutex);
            break;
        。。。
        case SET_HEADPHONE_ON:
            PRINTK_AUDDRV("AudDrv SET_HEADPHONE_ON arg:%lu \n",arg);
            mutex_lock(&gamp_mutex);
            Audio_eamp_command(EAMP_HEADPHONE_OPEN,arg,1);
            mutex_unlock(&gamp_mutex);
            break;
        case SET_HEADPHONE_OFF:
            PRINTK_AUDDRV("AudDrv SET_HEADPHONE_OFF arg:%lu \n",arg);
            mutex_lock(&gamp_mutex);
            Audio_eamp_command(EAMP_HEADPHONE_CLOSE,arg,1);
            mutex_unlock(&gamp_mutex);
            break;
。。。
  }

static struct file_operations AudDrv_fops = {
   .owner   = THIS_MODULE,
   .open    = AudDrv_open,
   .release = AudDrv_release,
   .unlocked_ioctl   = AudDrv_ioctl,
   .write   = AudDrv_write,
   .read       = AudDrv_read,
   .flush   = AudDrv_flush,
   .fasync    = AudDrv_fasync,
   .mmap    = AudDrv_remap_mmap
};
static struct miscdevice AudDrv_audio_device = {
   .minor = MISC_DYNAMIC_MINOR,
   .name = "eac",
   .fops = &AudDrv_fops,
};
AudDrv_audio_device.fops.unlocked_ioctl


========================================
bootable/bootloader/lk/platform/mediatek/mt6572/kernel/drivers/sound/AudDrv_Kernel.c  :63:#include "AudDrv_ioctl.h"

bootable/bootloader/lk/platform/mediatek/mt6572/kernel/drivers/sound/AudDrv_Kernel.h :6:#include "AudDrv_ioctl.h"

kernel/mediatek/platform/mt6572/kernel/drivers/sound/AudDrv_Kernel.c
:63:#include "AudDrv_ioctl.h"

kernel/mediatek/platform/mt6572/kernel/drivers/sound/AudDrv_Kernel.h
:6:#include "AudDrv_ioctl.h"

mediatek/platform/mt6572/kernel/drivers/sound/AudDrv_Kernel.c
:63:#include "AudDrv_ioctl.h"

mediatek/platform/mt6572/kernel/drivers/sound/AudDrv_Kernel.h

alps/kernel/mediatek/platform/mt6572/hardware/audio/aud_drv/AudioMachineDevice.cpp

之前log没打印出来,以为代码没有跑到关PA的地方,其实不是的,log没打出来,是因为打log的宏没有打开;在屏幕时按音量加减,会出现开关PA的log,但不会真正关掉PA,是因为喇叭或是耳机没有任何任务在播放声音,系统默认关和开PA,但当有播音乐的任务时,按音量加减键则是不会在音量最低时关闭PA的,这样就造成了当音量减至零时有很大的底噪,通过下面的修改方法,和上层通信,在音量减至最低时关闭PA来消除底噪,这样是从软件上走了一个捷径,其实硬件上也可以通过改善电流噪声来消除底噪。
==================================================================
修改点:
alps\kernel\mediatek\platform\mt6572\hardware\audio\aud_drv\AudioMTKHardware.cpp 

line132 

//add0728 
#if defined(RG310) 
static String8 keyPAEnable    = String8("PAEnable"); 
static String8 keyPADisable    = String8("PADisable"); 
#endif  //add0728 

line360 
//add0728 
#if defined(RG310) 
//open output device 
if (param.getInt(keyPAEnable, value) == NO_ERROR) { 
param.remove(keyPAEnable); 
const audio_devices_t output_device = (audio_devices_t)mAudioResourceManager->getDlOutputDevice(); 
if (output_device == AUDIO_DEVICE_OUT_SPEAKER) 
mAudioResourceManager->StartOutputDevice();//打开device 
goto EXIT_SETPARAMETERS; 

//close output device 
if (param.getInt(keyPADisable, value) == NO_ERROR) { //比如侧键调整成0时 就调用到这个 
param.remove(keyPADisable); 
const audio_devices_t output_device = (audio_devices_t)mAudioResourceManager->getDlOutputDevice(); 
if (output_device == AUDIO_DEVICE_OUT_SPEAKER) 
mAudioResourceManager->StopOutputDevice();//关闭device 
goto EXIT_SETPARAMETERS; 

#endif 
//add0728

0 0
原创粉丝点击