本文转载自: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. [JOYOI] 1055 沙子合并

    题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目描述 设有N堆沙子排成一排,其编号为1,2,3,-,N(N<=300).每堆沙子有 ...

  2. php扩展1:filp/whoops(用于调试,方便定位错误点)

    一.composer下载filp/whoops: 1.在composer.json中添加:"filp/whoops": "*",如下所示: 2.执行compos ...

  3. 安装composer及切换镜像为国内镜像

    一.下载composer php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 下面的 ...

  4. STL优先队列重载

    priority_queue默认是大根堆,如果需要使用小根堆,如下 int main(){ priority_queue<int,vector<int>,greater<int ...

  5. HDU 3157 Crazy Circuits

    Crazy Circuits Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ...

  6. baidu 和 es 使用

    http://www.cnblogs.com/kangoroo/p/8047586.html

  7. Delphi ADO的Lookup类型字段的问题

    关于ADO数据集控件中的Lookup类型字段,在其Lookupkeyfields属性指向的字段中存在NULL值的,就会出现'EOleException with message '发生未知错误',这个 ...

  8. operamasks-omGrid的使用

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="personTab.aspx ...

  9. Servlet实现点击计数器

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/hits-counter.html: 一.Web页面的点击计数器 很多时候,可能有兴趣知道网站的某 ...

  10. systemtap 作用-- SystemTap使用技巧

    http://blog.csdn.net/wangzuxi/article/details/42849053