Android 系統無聲問題分析
記錄以前解決的無聲問題,以便總結解題思路
一,音樂播放中但耳機中無聲
Platform:MTK,MT6755
Description:
[預置條件]:插入耳機,後臺播放音樂,聲音和振動中將觸控提示音開關開啟
[測試步驟]:主選單--設定--聲音和振動--資訊鈴聲--隨機預覽五六個鈴--選擇任一鈴聲設為資訊鈴聲--下來狀態列進入音樂
[實際結果]:音樂正在播放但耳機中無聲,拖動進度條仍無聲,拔出耳機後播放音樂,再次插入耳機,即可恢復
Analysis:
1,mainlog/kernel log pcm流程開關正常;
2,抓取無聲音和有聲時的digital/analog
3,檢視AP的datasheet,對應暫存器所代表的意義;
4,AFE_I2S_CON1的0bit無聲時為0,有聲時為1,代表的意義是I2S2_EN;
5,檢視程式碼,搜尋到setI2SDacEnable在做AFE_I2S_CON1的0bit的enable/disable,開啟相關trace
6,新增trace,看到在恢復音樂播放前AFE_I2S_CON1是被disable的:
7,檢視code此場景下setI2SDacEnable(false)的可能,結合mainlog
8,如此定位到mt_soc_pcm_hp_impedance.c中mtk_soc_pcm_hp_impedance_close()中未加判斷就直接setI2SDacEnable(false)
二,調節音量後設置的撥號盤鋼琴、預設音效變為無聲
Platform:MTK,MT6755
Description:
[預置條件]:撥號設定:開啟撥號鍵盤觸控音效為預設、鋼琴
[測試步驟]:撥號盤--輸入字元、數字--觀察--音量鍵--調節鈴聲、音樂、鬧鐘音量級--撥號盤輸入字元、數字--觀察
[實際結果
Analysis:
1, 檢視log,音量調節時使用的是I2S0dl1DAI播放和撥號盤fastmixer使用DL2DAI播放,
觀察log,發現撥號盤無聲都是發生在音量播放結束後。
2, 檢視code,mtk_pcm_I2S0dl1_stop()/mtk_pcm_I2S0dl1_close()中是否有影響無聲的操作;其中 mtk_pcm_I2S0dl1_close()中有在設定AFE_I2S_CON3(SmartPA相關)
3,再檢視dl2相關程式碼並未對AFE_I2S_CON3做些計數的保護,因此新增相關程式碼:
三,喇叭無聲,耳機有聲:
Platform:sdm450 +external codec+smartpa
Description:
[預置條件]:原先喇叭播放有聲音
[測試步驟]:音樂播放中插入耳機,耳機有聲音,拔出耳機,再點選播放音樂,喇叭無聲。
[實際結果]:喇叭無聲
Analysis:
1,抓取qxdm log,0x1586 有聲音2,使用tinymix 給smartpa 的輸入打tone音,喇叭無聲,定位到smartpa的問題;
3,