[RK3288][Android6.0] 调试笔记 --- 关闭按键音后无法录音问题
来源:互联网 发布:淘宝手机详情搭配套餐 编辑:程序博客网 时间:2024/09/21 08:55
Platform: ROCKCHIP
OS: Android 6.0
Kernel: 3.10.92
这个问题蛮奇怪的,现象是:
1. 默认系统按键音是打开的,然后去录音,是正常的.
2. 当把按键音关闭之后再去录音,虽然录音有在工作,但是不能录制到声音.
理论上说播放和录音是两条不相干的通路,可以同时工作,也可以独立工作,
可事实上播放的配置影响到了录音.
有通过系统自带的tinyplay以及tinycap工具去测试,现象也是一样,
说明是驱动层的问题.
最终发现是和codec rt5631硬件有关,root cause么有深究.
解决方法:
diff --git a/sound/soc/rockchip/rk_i2s.c b/sound/soc/rockchip/rk_i2s.c
index 6b2e91d..2b1f5ee 100644
--- a/sound/soc/rockchip/rk_i2s.c
+++ b/sound/soc/rockchip/rk_i2s.c
@@ -722,7 +722,7 @@ static int rockchip_i2s_probe(struct platform_device *pdev)
I2S_RXCR_TFS_PCM);
}
- rockchip_snd_txctrl(i2s, 0);
+ rockchip_snd_txctrl(i2s, 1);
rockchip_snd_rxctrl(i2s, 0);
return 0;
rockchip_snd_txctrl函数.
OS: Android 6.0
Kernel: 3.10.92
这个问题蛮奇怪的,现象是:
1. 默认系统按键音是打开的,然后去录音,是正常的.
2. 当把按键音关闭之后再去录音,虽然录音有在工作,但是不能录制到声音.
理论上说播放和录音是两条不相干的通路,可以同时工作,也可以独立工作,
可事实上播放的配置影响到了录音.
有通过系统自带的tinyplay以及tinycap工具去测试,现象也是一样,
说明是驱动层的问题.
最终发现是和codec rt5631硬件有关,root cause么有深究.
解决方法:
diff --git a/sound/soc/rockchip/rk_i2s.c b/sound/soc/rockchip/rk_i2s.c
index 6b2e91d..2b1f5ee 100644
--- a/sound/soc/rockchip/rk_i2s.c
+++ b/sound/soc/rockchip/rk_i2s.c
@@ -722,7 +722,7 @@ static int rockchip_i2s_probe(struct platform_device *pdev)
I2S_RXCR_TFS_PCM);
}
- rockchip_snd_txctrl(i2s, 0);
+ rockchip_snd_txctrl(i2s, 1);
rockchip_snd_rxctrl(i2s, 0);
return 0;
rockchip_snd_txctrl函数.
static void rockchip_snd_txctrl(struct rk_i2s_dev *i2s, int on){ unsigned long flags; unsigned int val = 0; int retry = 10; spin_lock_irqsave(&lock, flags); dev_dbg(i2s->dev, "%s: %d: on: %d\n", __func__, __LINE__, on); if (on) { regmap_update_bits(i2s->regmap, I2S_DMACR, I2S_DMACR_TDE_MASK, I2S_DMACR_TDE_ENABLE); regmap_update_bits(i2s->regmap, I2S_XFER, I2S_XFER_TXS_MASK | I2S_XFER_RXS_MASK, I2S_XFER_TXS_START | I2S_XFER_RXS_START); i2s->tx_start = true; } else { i2s->tx_start = false; regmap_update_bits(i2s->regmap, I2S_DMACR, I2S_DMACR_TDE_MASK, I2S_DMACR_TDE_DISABLE); if (!i2s->rx_start) { regmap_update_bits(i2s->regmap, I2S_XFER, I2S_XFER_TXS_MASK | I2S_XFER_RXS_MASK, I2S_XFER_TXS_STOP | I2S_XFER_RXS_STOP); regmap_update_bits(i2s->regmap, I2S_CLR, I2S_CLR_TXC_MASK | I2S_CLR_RXC_MASK, I2S_CLR_TXC | I2S_CLR_RXC); regmap_read(i2s->regmap, I2S_CLR, &val); /* Should wait for clear operation to finish */ while (val) { regmap_read(i2s->regmap, I2S_CLR, &val); retry--; if (!retry) { dev_warn(i2s->dev, "fail to clear\n"); break; } } dev_dbg(i2s->dev, "%s: %d: stop xfer\n", __func__, __LINE__); } } spin_unlock_irqrestore(&lock, flags);}
1 0
- [RK3288][Android6.0] 调试笔记 --- 关闭按键音后无法录音问题
- [RK3288][Android6.0] 调试笔记 --- 实时录音会有呲呲噪音问题
- [RK3288][Android6.0] 调试笔记 --- 录音apk无权限录音问题
- [RK3288][Android6.0] 调试笔记 --- edp屏无法点亮问题
- [RK3288][Android6.0] 调试笔记 --- Audio录音PCM数据抓取
- [RK3288][Android6.0] 调试笔记 --- 命令行录音方法
- [RK3288][Android6.0] 调试笔记 --- 录音音量从HAL到APP层会变小问题
- [RK3288][Android6.0] 调试笔记 --- 修改录音采样率提示报错问题
- [RK3288][Android6.0] 调试笔记 --- 修改系统按键
- [RK3288][Android6.0] 调试笔记 --- 使用竖屏软件后无法回到横屏状态
- [RK3288][Android6.0] 调试笔记 --- 开机视频无法播放
- [RK3288][Android6.0] 调试笔记 --- tts语音无法播放
- [RK3288][Android6.0] 调试笔记 --- touch无法获取坐标点
- [RK3288][Android6.0] 调试笔记 --- hwclock命令无法使用
- [RK3288][Android6.0] 调试笔记 --- X264测试程序无法使用
- [RK3288][Android6.0] 调试笔记 --- 无法连接相机
- [RK3288][Android6.0] 调试笔记 --- user版本固件升级无法开机问题
- [RK3288][Android6.0] 调试笔记 --- 无法安装需系统权限的apk问题
- win10下基于anconda安装tensorflow以及在pycharm中的配置
- Unity 调用Android中的java代码
- 产品经理之互联网思维的九大思维
- Spark RDD/Core 编程 API入门系列之简单移动互联网数据(五)
- css换行(white-space、word-wrap、word-break)
- [RK3288][Android6.0] 调试笔记 --- 关闭按键音后无法录音问题
- nginx 切割日志
- LeetCode---1. Two Sum
- ConcurrentHashMap原理分析
- recyclerview嵌套recyclerview
- 二项队列 C语言
- NYOJ323_Drainage Ditches+最大流
- iOS 2D绘图详解(Quartz 2D)之概述
- WPF学习记录1