市中心的道格·布朗 ★ 升级我的 Chumby 8 内核第 8 部分:音频

作者在升级 Chumby 8 内核的过程中,逐步实现了 PXA16x 外设在现代 Linux 内核中的工作,包括显示、2D 加速、触摸屏、Wi-Fi 和 PWM 背光等,最后着手解决音频问题。

  • 音频硬件介绍:Chumby 8 内置扬声器、耳机插孔和麦克风,使用 Wolfson WM8961 音频编解码器,通过 I2C 和 I2S 进行通信,I2C 总线连接到 twsi2,I2S 信号进入 PXA166 的 SSP1 外设,还有额外的 I2S_CDCLK0 信号作为“主时钟”。
  • 旧内核中的音频测试:通过查看旧的 Chumby 2.6.28 内核初始化脚本,在旧内核中实现了播放声音的简单测试设置,运行一系列命令如 modprobe 等。
  • 现代内核中的音频工作

    • I2C 支持:主线内核的 PXA16x 设备树包含文件已启用 TWSI 设备,在内核配置中启用 CONFIG_I2C_PXA 并在设备树中打开 twsi1 和 twsi2,还将板载 AT24C08“个性 EEPROM”连接到 twsi1,并在 U-Boot 中进行了修复。
    • DMA 支持:内核中已有 DMA 驱动,只需找到并在设备树中连接,指定各个外设的 DMA 通道,在内核配置中启用驱动,虽出现一些错误但最终解决。
    • WM8961 驱动更新:为 WM8961 音频编解码器添加设备树支持,经过两次尝试将代码合并到主线内核,确保代码质量。
    • 音频配置与调试:尝试添加各种支持和配置,如配置 SSP1 使用新的可配置时钟,解决时钟设置问题,修改 pxa-ssp 驱动以在 probe 函数中设置 DMA,解决声音播放和 pitch 问题,切换到左-对齐模式以实现完美音频播放等,期间还发现并解决了一些与数据发送顺序和单声道声音相关的问题。
  • 其他功能实现:实现了耳机插孔检测功能,通过在设备树中添加一行代码 simple-audio-card,hp-det-gpio = <&gpio 97 GPIO_ACTIVE_LOW>;还介绍了如何通过 amixer 控制耳机和扬声器音量,比较了新旧内核中 WM8961 的设置差异。
  • 总结与展望:实现音频支持花费了很多时间和精力,主要是因为缺乏 ALSA 经验,但大部分音频支持基础设施已在主线内核中,还需清理时钟设置并在其他 PXA2xx/3xx 设备上进行测试,最后预告下一篇将讨论 CPU 始终显示 100%加载的奇怪问题。
阅读 22
0 条评论