2 分钟阅读 次阅读

问题描述

RK3588适配了es8336芯片后,播放音频的声音一直比较小,查看适配的驱动发现为es8316.c,查看内核发现没有专门的es8336驱动。怀疑是驱动不完全适配导致的声音偏小。

解决过程

  • 经咨询fae,8316和8336用同一套驱动即可,fae意见为es8336内某个kcontrol的值设置偏小,导出寄存器进行排查

  • alsamixer中,将音量拉到最大,然后播放音乐,在播放器界面也将音量拉到最大。播放音乐的同时,使用下面命令导出es8336的寄存器值: ```bash i2cdump -fy 3 0x10

1. **`i2cdump`**  
   这是 I2C 工具集(`i2c-tools`)中的一个命令,用于以十六进制格式显示 I2C 设备的所有寄存器内容。
2. **`-f`**  
   强制访问设备,即使该设备当前被占用或驱动程序正在使用它。如果不加 `-f`,可能会因为设备忙而无法访问。
3. **`-y`**  
   禁用交互模式,直接执行命令而不需要用户确认。如果不加 `-y`,某些情况下可能会提示用户确认操作。
4. **`3`**  
   指定要操作的 I2C 总线编号(例如 `/dev/i2c-3`)。I2C 总线编号取决于硬件连接,可以通过 `i2cdetect -l` 查看可用的总线。
5. **`0x10`**  
   指定目标 I2C 设备的地址(十六进制格式)。这里的 `0x10` 表示设备地址是 `0x10`(即十进制 16)。I2C 地址通常是 7 位或 10 位,`0x10` 是一个常见的 7 位地址。

- 输出如下
```bash
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 80 77 00 32 11 00 11 00 00 01 4c 0c ff 26 00 00    ?w.2?.?..?L?.&..
10: 01 fc 28 00 88 00 bb 66 00 02 02 03 00 00 84 88    ??(.?.?f.???..??
20: f6 00 c0 00 01 08 10 00 00 1c 00 b0 32 03 00 00    ?.?.???..?.?2?..
30: 10 00 00 28 28 1f f7 fd ff 1f f7 fd ff 1f f7 fd    ?..((???.???.???
40: ff 1f f7 fd ff 1f f7 fd ff 1f f7 fd ff 00 00 26    .???.???.???...&
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: 80 77 00 32 11 00 11 00 00 01 4c 0c ff 26 00 00    ?w.2?.?..?L?.&..
90: 01 fc 28 00 88 00 bb 66 00 02 02 03 00 00 84 88    ??(.?.?f.???..??
a0: f6 00 c0 00 01 08 10 00 00 1c 00 b0 32 03 00 00    ?.?.???..?.?2?..
b0: 10 00 00 28 28 1f f7 fd ff 1f f7 fd ff 1f f7 fd    ?..((???.???.???
c0: ff 1f f7 fd ff 1f f7 fd ff 1f f7 fd ff 00 00 26    .???.???.???...&
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

  • fae表示0x33 0x34处寄存器值设置得过小,为0x28。此处的值是反向的,0x00对应声音最大,数值越大对应的声音越小

  • 直接写寄存器值为10
    i2cset -fy 3 0x10 0x33 0x10
    i2cset -fy 3 0x10 0x34 0x10
    

    然后使用i2cdump -fy 3 0x10看是否修改成功,播放音乐,声音明显变大

  • 搜索声卡与Volume相关的所有控制项 ```bash amixer -c 0 controls | grep -i volume

numid=13,iface=MIXER,name=’Headphone Mixer Volume’ numid=12,iface=MIXER,name=’Headphone Playback Volume’ numid=25,iface=MIXER,name=’ADC PGA Gain Volume’ numid=24,iface=MIXER,name=’ADC Capture Volume’ numid=29,iface=MIXER,name=’ALC Capture Max Volume’ numid=30,iface=MIXER,name=’ALC Capture Min Volume’ numid=31,iface=MIXER,name=’ALC Capture Target Volume’ numid=15,iface=MIXER,name=’DAC Playback Volume’

寄存器应该就是对应着`DAC Playback Volume`选项

## 解决方法
- 使用alsamixer调整
```bash
alsamixer
  • 找到DAC Playback Volume选项,调整为最大 alt text

  • Headphone Playback Volume相应的也可以调大 alt text

  • 调整后按esc退出,系统下操作重启,注意重启后设置是否保存成功

  • fae还指导修改kernel/sound/soc/codecs/es8316.c驱动中的这个设置,为针对RK的时钟做的调整,之前默认驱动是Intel平台的,MCLK是19.2M
  • 红框中数值改为0x20 alt text

留下评论