本文转载自: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. rem怎么算

    * rem : html根标签的 font-size决定* em 相对于父标签的font-size 决定的* 设计稿的宽一般都是 750px ---> 20px* 750px 1rem = 10 ...

  2. BZOJ 1711 吃饭dining/Luogu P1402 酒店之王 拆点+最大流流匹配

    题意: (吃饭dining)有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享 ...

  3. centos6 rpm安装mysql(5.5版本)包括 error : Failed dependencies:libaio的解决办法.

    1.先在/opt目录下放了两个rpm包 2.先看系统中是否有其他版本的mysql的rpm包 rpm -qa | grep -i mysql 命令结果如下图: 如果没有此步跳过,否则执行一下命令将其删除 ...

  4. 8.url路由

    1.单一路由对应 url(r'^index/$', views.index), 这里要注意的是,/$ 表示只有只/结尾的才有效,如果把$符号去掉的话,只要是以index/开头都会匹配到这个url. 2 ...

  5. python爬虫入门02:教你通过 Fiddler 进行手机抓包

    哟~哟~哟~ hi起来 everybody 今天要说说怎么在我们的手机抓包 通过 python爬虫入门01:教你在Chrome浏览器轻松抓包 我们知道了 HTTP 的请求方式 以及在 Chrome 中 ...

  6. Java 集合相关

    对整个体系做一个记录,并不涉及详细应用 Object类 1. 重写toString方法 System.out.println可以打印任何对象在于Object类拥有一个方法 public String ...

  7. ASP.net在IE6下乱码问题

    今天处理程序的时候遇到一个坑爹的问题 该死的IE6传中文参数会出现 类似于◆的乱码 不过终于解决了  也许解决的方法有很多  和大家分享下我的解决方案 我用的javascript中 传的参数 < ...

  8. 【03】AJAX 向服务器发送请求

    AJAX 向服务器发送请求   创建 XMLHttpRequest 对象后,就可以向服务器发送请求了. XMLHttpRequest 对象的 open() 方法和 send() 方法用来向服务器发送请 ...

  9. jquery给span赋值

    span是最简单的容器,可以当作一个形式标签,其取值赋值方法有别于一般的页面元素. //赋值 $("#spanid").html(value) //取值 $("#span ...

  10. [luoguP1043] 数字游戏(DP)

    传送门 搞个前缀和随便DP一下 代码 #include <cstdio> #include <cstring> #include <iostream> #defin ...