之前在做关于音频驱动的相关工作,学习到了一些知识,所以简单的谈一谈对这方面的理解。

       内容主要是基于imx255核心板,它是支持多种音频处理芯片的。工作是配合音频芯片SGTL5000进行的。这里主要介绍该芯片在Linux下的驱动相关内容。我实际使用的Linux的2.6.28的内核,经过移植,可以在目标板上成功的运行了。

      首先,内核编译时候关于音频的选项设置如下:

Device drivers > Sound card support > Advanced Linux Sound Architecture > ALSA for SoC

audio support > SoC Audio for the Freescale i.MX CPU, SoC Audio support for IMX – SGTL5000

    其次,分析音频驱动的层次结构:

这个立体声编解码器,是通过SSI接口,连接到CPU的。imx-ssi.c 文件为ALSA芯片注册CPU的数字音频接口,并且配置片上的SSI接口。sgtl5000.c 负责注册立体声编解码器和高保真的数字音频接口的驱动程序。而直接对硬件进行的操作,也都是在sgtl5000.c 这个

文件中的。

下面是所有SGTL5000音频驱动相关文件及其描述:

File                                                     Description

imx/imx-3stack-sgtl5000.c         机器层的ALSA立体声音频编解码器

imx/imx-pcm.c                           平台层的ALSA立体声音频编解码器

imx/imx-pcm.h                          PCM驱动的头文件和定义相关的AUDMUX的寄存器

imx/imx-ssi.c                            基于ALSA立体声音频编解码器的平台支持的数字音频接口

imx/imx-ssi.h                            平台支持的数字音频接口和SSI寄存器定义的头文件

codecs/sgtl5000.c                   音频编解码器层的ALSA代码

codecs/sgtl5000.h                    音频编解码器的头文件

对应的结构如图所示:

clip_image002

接着,音频驱动codec相关分析:

主要是codecs/sgtl5000.c和codecs/sgtl5000.h两个文件。

至于sgtl5000.h文件,其中主要工作就是对芯片相关寄存器和一些寄存器的微操作进行的声明等工作。

而sgtl5000.c文件时对芯片硬件进行的直接控制操作。其中,主要包含了芯片的探测,作为i2c从设备的探测,硬件初始化,ID和版本号识别,硬件寄存器控制初始化,封装了i2c读写操作的sgtl5000的读写操作,还有sgtl5000读写缓存的操作等。

还有值得一提的一个文件是,/arch/arm/mach-mx25/mx25-3stack.c文件,其中指明了该芯片的设备地址,还有一些关于数据和始终的简单初始化的工作。

最后,测试音频:

编写一个测试文件,经过交叉编译之后,加载的目标板的文件系统中,运行该文件播放指定的音乐文件即可。我使用的测试文件是针对wav格式的,只能播放wav的音乐文件。

Logo

更多推荐