在MTK平台配置一个支持smartPA的audio驱动

文章目录

  • smartPA概述
  • smartPA AW87319概述
  • smartPA AW87319功能特性
  • 在kernel中添加对smartPA的支持
    • 1. 在配置文件中添加对smartPA的支持
    • 2. 在Makefile中添加对smartPA的支持
    • 3. 添加aw87319代码包到对应目录
    • 4. 修改aw87319代码包根目录的Kconfig
    • 5. 修改aw87319代码包根目录的Makefile
    • 6. 在codec驱动中添加对smartPA的函数调用
  • 在ProjectConfig.mk中添加对smartPA的支持

smartPA概述

smart PA翻译成中文,就是“智能功率放大器”,其本质上也是一个放大器,而它和普通外放模块相比,最大的区别是加了一个反馈的功能。

这个反馈的功能起到什么样的作用呢?
假设一特定中频下smart PA和普通PA模块信噪比、最大输出功率等可以做到完全相同,在其他频率下(特别是在低频)普通放大器为了保证信噪比(直观反映为音质)及最大功率(防止被烧毁),该放大器在设计之初就必须调低放大的倍数。换而言之,就是普通放大器为了保证全频段内的性能,不得不在大部分频段“保留实力”,俗称“上锁”。而smart PA的关键就是加入了输出信号的反馈,从而做到通过反馈做到精准控制。

最明显的就是音量更大,效果更好了。

它能够专门提高智能机音乐输出动态范围,动态跟踪喇叭的状态并感知其所处环境的变化,在适应后给出改变,为手机、便携式音乐播放器和平板计算机带来更高的音量、更浑厚的低音与更出色的音质,而且还可以在不超过扬声器本身承受能力的前提下提高音乐的平均音量。

smard PA目前提供两大外放上最为强悍的功能: 第一,保护功能,保护器件不受超额工作的损害;第二,可以理解为效果类功能,在保护器件的同时,能够一定程度上提升音质。 这里以AW87319智能功放为例。

smartPA AW87319概述

普通功放受到锂电池电压的限制,功放无法达到很大的推力,音量设置过大会导致削波杂音。AW87319 是专门提高智能机音乐输出动态范围,提升整体音质而开发的高效率,低噪声,恒定大音量的第二代Smart K音乐功放。AW87319内部集成boost升压电路,升压高至8.5V,可在短时间内产生4.1W的强劲推力,在增加电压裕量的同时减小削波风险。AW87319集成艾为专有的Triple-Level Triple-Rate AGC音效算法,增强低音,提升音乐动态听感,有效消除音乐播放中杂音,同时提升音量改善音质。AW87319的底噪低至47μV,具有高达102dB的信噪比,0.015%的超低失真度和独特的针对高压功放设计的保护喇叭的技术——Triple-Level Triple-Rate AGC技术,带来高品质的音乐享受。
在MTK平台配置一个支持smartPA的audio驱动_第1张图片

smartPA AW87319功能特性

  • AW87319支持SpeakerReceiver的二合一应用。在Receiver应用时,Class D功率级电源由VBAT直通提供。

  • AW87319通过I2C接口控制内部寄存器,寄存器参数包括:Boost输出电压,Boost最大输入峰值电流,Class D放大倍数,Triple-level Triple-Rate AGC参数等。

  • AW87319内置限流保护、过热保护和短路保护功能,有效地保护芯片。AW87319采用纤小的2.76mm*2.36mm CSP-19封装。

在kernel中添加对smartPA的支持

因为audio驱动中本身已经对普通的PA进行了配置,所以只需要将普通的PA的配置进行替换以及添加上smartPa的配置即可。

ps: “+”号代表原来没有这行命令或者代码,是新添加的

1. 在配置文件中添加对smartPA的支持

所在文件:
./kernel-4.4/arch/arm64/configs/k63v2_64_bsp_debug_defconfig

+ CONFIG_EXT_PA_AW87319=y

所在文件:
./kernel-4.4/arch/arm64/configs/k63v2_64_bsp_defconfig

+ CONFIG_EXT_PA_AW87319=y

2. 在Makefile中添加对smartPA的支持

所在文件:
./kernel-4.4/drivers/misc/mediatek/Makefile

+ obj-$(CONFIG_EXT_PA_AW87319)	+= aw87319/

3. 添加aw87319代码包到对应目录

aw87319代码包添加到 ./kernel-4.4/drivers/misc/mediatek/ 目录下。

4. 修改aw87319代码包根目录的Kconfig

所在文件:
./kernel-4.4/drivers/misc/mediatek/aw87319/Kconfig

+ config EXT_PA_AW87319
+ 	bool "MTK sound for external I2C driver"
+	default n
+	help
+	  If you say Y, enable mtk audio i2c driver to control
+	  external device for example:smartpa device.

5. 修改aw87319代码包根目录的Makefile

所在文件:
./kernel-4.4/drivers/misc/mediatek/aw87319/Makefile

+ obj-$(CONFIG_EXT_PA_AW87319) += aw87319_audio.o

6. 在codec驱动中添加对smartPA的函数调用

所在文件:
./kernel-4.4/sound/soc/mediatek/codec/mt63xx/mtk-soc-codec-63xx.c

+ extern unsigned char aw87319_audio_speaker(void);
+ extern unsigned char aw87319_audio_receiver(void);
+ extern unsigned char aw87319_audio_off(void);
+ extern unsigned char aw87339_audio_kspk(void);
+ extern unsigned char aw87339_audio_drcv(void);
+ extern unsigned char aw87339_audio_off(void);

static void Ext_Speaker_Amp_Change(bool enable)
{
     
#define SPK_WARM_UP_TIME        (25)	/* unit is ms */
	if (enable) {
     
		pr_debug("Ext_Speaker_Amp_Change ON+\n");

+	#if defined(CONFIG_EXT_PA_AW87339)
+		aw87339_audio_off();
+		aw87339_audio_kspk();
+	#elif defined(CONFIG_EXT_PA_AW87319)
+		aw87319_audio_off();
+		aw87319_audio_speaker();
+	#else
		AudDrv_GPIO_EXTAMP_Select(false, 3);

		/*udelay(1000); */
		usleep_range(1 * 1000, 20 * 1000);

		AudDrv_GPIO_EXTAMP_Select(true, 3);

		msleep(SPK_WARM_UP_TIME);
+	#endif

		pr_debug("Ext_Speaker_Amp_Change ON-\n");
	} else {
     
		pr_debug("Ext_Speaker_Amp_Change OFF+\n");

+	#if defined(CONFIG_EXT_PA_AW87339)
+		aw87339_audio_off();
+	#elif defined(CONFIG_EXT_PA_AW87319)
+		aw87319_audio_off();
+	#else
		AudDrv_GPIO_EXTAMP_Select(false, 3);
+	#endif
		udelay(500);

		pr_debug("Ext_Speaker_Amp_Change OFF-\n");
	}
}

在ProjectConfig.mk中添加对smartPA的支持

所在文件:
./device/xthink/k63v2_64_bsp/ProjectConfig.mk

+ MTK_AUDIO_SPEAKER_PATH = smartpa_xxxx

你可能感兴趣的:(audio)