rk3588 es8336 声音偏小的问题
问题描述
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选项,调整为最大
-
Headphone Playback Volume相应的也可以调大
-
调整后按esc退出,系统下操作重启,注意重启后设置是否保存成功
注
- fae还指导修改kernel/sound/soc/codecs/es8316.c驱动中的这个设置,为针对RK的时钟做的调整,之前默认驱动是Intel平台的,MCLK是19.2M
- 红框中数值改为0x20

留下评论