本文转载自:http://blog.csdn.net/kris_fei/article/details/70052413

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函数.

    1. static void rockchip_snd_txctrl(struct rk_i2s_dev *i2s, int on)
    2. {
    3. unsigned long flags;
    4. unsigned int val = 0;
    5. int retry = 10;
    6. spin_lock_irqsave(&lock, flags);
    7. dev_dbg(i2s->dev, "%s: %d: on: %d\n", __func__, __LINE__, on);
    8. if (on) {
    9. regmap_update_bits(i2s->regmap, I2S_DMACR,
    10. I2S_DMACR_TDE_MASK, I2S_DMACR_TDE_ENABLE);
    11. regmap_update_bits(i2s->regmap, I2S_XFER,
    12. I2S_XFER_TXS_MASK | I2S_XFER_RXS_MASK,
    13. I2S_XFER_TXS_START | I2S_XFER_RXS_START);
    14. i2s->tx_start = true;
    15. } else {
    16. i2s->tx_start = false;
    17. regmap_update_bits(i2s->regmap, I2S_DMACR,
    18. I2S_DMACR_TDE_MASK, I2S_DMACR_TDE_DISABLE);
    19. if (!i2s->rx_start) {
    20. regmap_update_bits(i2s->regmap, I2S_XFER,
    21. I2S_XFER_TXS_MASK |
    22. I2S_XFER_RXS_MASK,
    23. I2S_XFER_TXS_STOP |
    24. I2S_XFER_RXS_STOP);
    25. regmap_update_bits(i2s->regmap, I2S_CLR,
    26. I2S_CLR_TXC_MASK | I2S_CLR_RXC_MASK,
    27. I2S_CLR_TXC | I2S_CLR_RXC);
    28. regmap_read(i2s->regmap, I2S_CLR, &val);
    29. /* Should wait for clear operation to finish */
    30. while (val) {
    31. regmap_read(i2s->regmap, I2S_CLR, &val);
    32. retry--;
    33. if (!retry) {
    34. dev_warn(i2s->dev, "fail to clear\n");
    35. break;
    36. }
    37. }
    38. dev_dbg(i2s->dev, "%s: %d: stop xfer\n",
    39. __func__, __LINE__);
    40. }
    41. }
    42. spin_unlock_irqrestore(&lock, flags);
    43. }

RK3288][Android6.0] 调试笔记 --- 关闭按键音后无法录音问题【转】的更多相关文章

  1. [RK3288][Android6.0] 调试笔记 --- Goodix GT9和GT9F区别【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/78341425 Platform: RK3288 OS: Android 6.0 Kernel ...

  2. [RK3288][Android6.0] 调试笔记 --- 软硬键盘同时使用【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/78748313 Platform: RK3288 OS: Android 6.0 Kernel ...

  3. [RK3288][Android6.0] 调试笔记 --- 普通串口的添加 【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/54574073   标签: rk3288 串口添加 2017-01-16 14:52 1079 ...

  4. [RK3288][Android6.0] 调试笔记 --- 替换系统签名【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/55100299 Platform: RK3288OS: Android 6.0Kernel: ...

  5. [RK3288][Android6.0] 调试笔记 --- eMMC分区号和名字的对应【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/77318410 Platform: Rockchip OS: Android 6.0 Kern ...

  6. [RK3288][Android6.0] 调试笔记 --- 移除uboot和kernel开机logo【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/71600690 Platform: RockchipOS: Android 6.0Kernel ...

  7. [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】

    本文转载自:http://m.blog.csdn.net/kris_fei/article/details/69553422 Platform: ROCKCHIPOS: Android 6.0Kern ...

  8. [RK3288][Android6.0] 调试笔记 --- 测试I2C设备正常传输方法【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/71515020 Platform: RockchipOS: Android 6.0Kernel ...

  9. [RK3288][Android6.0] 调试笔记 --- 如何确认声卡是否注册成功【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/78399875 Platform: RK3288 OS: Android 6.0 Kernel ...

随机推荐

  1. JS中的同步异步问题

    <script> /* * JS 是单线程 * 同步 异步 * 常见的异步 * 1.定时器 * 2.事件绑定 * 3.ajax请求(一般的都是异步) * 4.回调函数也可以理解成 异步 * ...

  2. Tomcat:Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.

    可能原因一: 在本地tomcat启动正常并且访问正常的项目放在服务器上tomcat报以上错误. 本地tomcat为7.0.68,服务器上为7.0.86 错误原因:服务器tomcat版本过高. 解决办法 ...

  3. [Python3网络爬虫开发实战] 1.2.6-aiohttp的安装

    之前介绍的Requests库是一个阻塞式HTTP请求库,当我们发出一个请求后,程序会一直等待服务器响应,直到得到响应后,程序才会进行下一步处理.其实,这个过程比较耗费资源.如果程序可以在这个等待过程中 ...

  4. Linux系统下设置vi编辑器,tab键为4

    1.cd ~ 2.vi .exrc 3.set tabstop=4(保存并退出)即可

  5. c++基础_时间转换

    #include <iostream> using namespace std; int main(){ int n; cin>>n; ,b=,c=; )!=){ a=n/; ...

  6. 88-On Balance Volume 能量潮指标.(2015.7.4)

    On Balance Volume 能量潮指标 ~计算方法: 如果当天的收盘价高于昨天的话,那么:OBV(i) = OBV(i-1)+VOLUME(i) 如果当天的收盘价低于昨天的话,那么:OBV(i ...

  7. MySQL Foreign Key

    ntroduction to MySQL foreign key A foreign key is a field in a table that matches another field of a ...

  8. Excel表格如何设置密码 Excel2003/2007/2010设置密码教程

    http://www.wordlm.com/special/2/ 经常使用Excel表格制作报表和一些数据后,我们会给Excel表格设置密码,这样可以很有效的防止数据被盗取.目前Office版本众多, ...

  9. Java高概率面试题目—finally

    在Java面试中关于finally的面试题目出现的概率非常高,而且一旦面试官问起绝不会是蜻蜓点水,而是会向你发起层层递进地“连环问”,并且回答这系列问题常常需要代码的辅助,可谓考验基础的面试利题.究竟 ...

  10. hosts.allow和hosts.deny文件

    之前想通过外部主机访问自己主机上的VMWare虚拟机,使用了VMWare的NAT端口映射,经过一番尝试,算是成功了,总结一下. VMWare NAT端口映射就可以将虚拟机上的服务映射成自己主机上的端口 ...