OS:Android8.1
platform:PX30(RK平台)
驱动包:AW88195_Driver_MTK_V0.1.6.zip

AW88195是艾为公司的一款用于调节speaker 音质的codec,厂商给的驱动包是基于MTK 平台适配的移植文档,现在要将其在MTK 平台下适配的驱动程序移植到我们的平台下。

其实对于这种芯片驱动的移植,内核部分都是大部分平台通用的,平台应该都是基于linux 内核源码做的,所以第一步,移植内核。
将驱动包里面的驱动文件(一般也就是一些.c .h 文件了)拷贝到系统的对应目录下,/kernel/sound/soc/codec/ 如果驱动文件较多,可以自己重命名一个文件夹,在这儿假设为awxxx,在该目录下创建
Makefile Kconfig 两个文件。
Makefile 内容:

snd-soc-xxxx-objs:=xxx.o xxx1.o   //xxx为你驱动的名字
obj-$(CONFIG_SND_SOC_XXX) += snd-soc-xxx.o

Kconfig内容:

config SND_SOC_XXXtristate "Describe"

然后修改codec/下的Makefile,添加如下代码:

obj-$(CONFIG_SND_SOC_XXX) += awxxx/

Kconfig 中添加:

source "sound/soc/codecs/awxxx/Kconfig"

然后kernel/arch/arm64/configs/rockchip_defconfig中添加

CONFIG_SND_SOC_XXX=y

到这儿驱动代码能正常编译进系统了。然后需要将新的codec 注册为声卡,rockchip 使用的machine driver 为原内核提供的simple-card.c 作为machine 驱动,代码在/kernel/sound/soc/generic/ 下。代码里通过解析dts 方式链接codec dai 和 cpu dai,这儿贴出来一部分代码

 /* Single/Muti DAI link(s) & New style of DT node */if (of_get_child_by_name(node, "simple-audio-card,dai-link")) {struct device_node *np = NULL;int i = 0;for_each_child_of_node(node, np) {dev_dbg(dev, "\tlink %d:\n", i);ret = asoc_simple_card_dai_link_of(np, priv,i, false);if (ret < 0) {of_node_put(np);return ret;}i++;}} else {/* For single DAI link & old style of DT node */ret = asoc_simple_card_dai_link_of(node, priv, 0, true);if (ret < 0)return ret;}

具体的实现方法在asoc_simple_card_dai_link_of函数中执行,函数代码较长就不贴出来了,感兴趣朋友可以自己去查看。
然后修改对应的dts 配置/kernel/arch/arm64/boot/dts/下:

simple-audio-card,dai-link@0 {format = "i2s";cpu {sound-dai = <&i2s0_8ch>;};codec {sound-dai = <&awxxx>;};
};

配置完dts 重新编译kernel,烧录代码,然后在板子里cat /proc/asound/pcm,就可看见对应的声卡信息:
00-00: ff060000.i2s-aw881xx-aif aw881xx-aif-0 : : playback 1 : capture 1
有这个声卡信息,就代表你注册成功了,然后添加codec 固件。
一般系统固件都放在vendor/etc/firmware下,则需要在内核kernel/drivers/base/firmware_class.c文件中加入

static const char * const fw_path[] = {fw_path_para,"/system/vendor/firmware","/system/etc/firmware","/lib/firmware/updates/" UTS_RELEASE,"/lib/firmware/updates","/lib/firmware/" UTS_RELEASE,"/lib/firmware"
};

内核中读取并加载系统固件则是通过

struct firmware;
request_firmware();
request_firmware_nowait();
release_firmware();

这几个接口去进行读取的,具体使用方法,请自行查阅相关信息!

最后通过device.mk 将固件拷贝到系统的/vendor/etc/firmware/下就好了。
移植完成后,请先使用底层播音命令tinyplay 来尝试播音,看是否能正常运行,如可以正常播音,再使用上层ap端播音,如有问题,请检查audio hal 是否正常调用了底层的播音设备(在/dev/snd/下 controlC0 pcmC0D0c pcmC0D0p pcmC0D1c timer)。

如有问题欢迎留言!!!!!!

AW codec驱动跨平台移植相关推荐

  1. 【随笔记】XR872 Codec 驱动移植和应用程序实例(附芯片调试方法)

    XR872 的 SDK 是我目前接触过那么多款 MCU 的 SDK 中,唯一一个将框架和 RTOS 结合的非常完美的 SDK .无论是代码风格还是框架的设计,看起来都很赏心悦目,而且是源码开源.希望能 ...

  2. 基于2.6.35内核的无线网卡驱动的移植

    基于2.6.35内核的无线网卡驱动的移植 一. 移植环境: [移植环境]         1.主机:Ubuntu 10.10         2.目标机:FS210平台         3.交叉编译工 ...

  3. linux驱动:音频驱动(五)ASoc之codec驱动

    linux驱动:音频驱动(五)ASoc之codec驱动

  4. TQ2440平台上LCD驱动的移植

    参考: http://liu1227787871.blog.163.com/blog/static/205363197201242393031250/ http://blog.csdn.net/cum ...

  5. Android wifi驱动的移植 realtek 8188

    Android wifi驱动的移植 一般我们拿到的android源代码中wifi应用层部分是好的, 主要是wifi芯片的驱动要移植并添加进去. wifi驱动的移植, 以realtek的8188etv为 ...

  6. linux spidev 应用_Linux下SPI驱动的移植和应用程序的测试

    Linux2.6.32下SPI驱动的移植如下图所示: 下面需要修改部分内核代码,具体操作如下: 1.  修改arch/arm/mach-s3c2440/mach-mini2440.c文件 在inclu ...

  7. ASoC Codec驱动代码框架图

    原址 [前言] 上个月写了<Audio驱动开发 之 Codec芯片ALC5677驱动代码分析>,但是感觉那个时候理解得还不够深入.写得很粗糙.这一个月以来新看了 HAL层.Framewor ...

  8. Linux 音频驱动(三) ASoC音频驱动之Codec驱动

    目录 1. 简介 2. 源码分析 2.1. Codec 2.1.1. 数据结构struct snd_soc_codec_driver 2.1.2. 注册Codec 2.2. Codec DAI 2.2 ...

  9. ARM-9 4412板、linux-3.14内核、usb转串口pl2303驱动的移植相关问题

    - ARM-9 4412板.linux-3.14内核.usb转串口pl2303驱动的移植相关问题 最近在做一个智能仓储的项目,遇到一个问题,当功能采集板Cortex-M0通过USB-UART接口和服务 ...

最新文章

  1. PCL:基于PCL绘制包围盒基础介绍(1)
  2. Zend Framework数据库操作
  3. hashCode()方法(覆盖hashCode()方法)
  4. 海思Hi3516A(5)3D降噪
  5. mysql slave lock 跳过_slave开启MTS时执行mysqldump引发死锁案例
  6. 中山纪念中学培训15天总结
  7. Matlab--colorbar的各项细节操作
  8. c++全局变量怎么定义_C errno全局变量是否是线程安全的
  9. 【面试】面试文章积累
  10. 锤子系统宣布回归 或将推新品
  11. Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析
  12. git21天打卡day11-删除分支
  13. 什么是数据脱敏(Data Masking)?
  14. Unique Binary Search Trees,Unique Binary Search Trees2 生成二叉排序树
  15. 阿里巴巴的盈利模式分析
  16. 金蝶系统无法建立数据可连接服务器,金蝶K3打开,提示无法建立数据链接
  17. DruidDataSource配置说明
  18. 预防数据泄露——音乐播放器Spotify强制用户重置密码
  19. 同时掌握96门语言,取得多项世界突破,百度发布预训练模型ERNIE-M
  20. php计算用户留存,留存率到底有几种计算方式

热门文章

  1. 冷战时期_从冷战到深度学习的机器翻译历史
  2. MySQL数据库基础操作(一)
  3. 网管到底要学什么(一)
  4. 定位尺寸的严重错误在哪里?
  5. 财政分权数据集:省级地级市财政分权度(1999-2021年)
  6. Version in “./docker-compose.yml“ is unsupported.
  7. 微信小程序如何调用后台接口
  8. 让enter键功能和Tab键一样
  9. 【转】国人须知道的76个常识
  10. 基于eNSP的模拟企业网络的架构