1. 程式人生 > >Android 系統無聲問題分析

Android 系統無聲問題分析

記錄以前解決的無聲問題,以便總結解題思路


一,音樂播放中但耳機中無聲

Platform:MTK,MT6755

Description:

[預置條件]:插入耳機,後臺播放音樂,聲音和振動中將觸控提示音開關開啟

[測試步驟]:主選單--設定--聲音和振動--資訊鈴聲--隨機預覽五六個鈴--選擇任一鈴聲設為資訊鈴聲--下來狀態列進入音樂

[實際結果]:音樂正在播放但耳機中無聲,拖動進度條仍無聲,拔出耳機後播放音樂,再次插入耳機,即可恢復


Analysis:

1,mainlog/kernel log pcm流程開關正常;

2,抓取無聲音和有聲時的digital/analog

暫存器,其中digitalregister對比如下,左邊為無聲右邊為有聲:


3,檢視APdatasheet,對應暫存器所代表的意義;

4,AFE_I2S_CON10bit無聲時為0,有聲時為1,代表的意義是I2S2_EN;


5,檢視程式碼,搜尋到setI2SDacEnable在做AFE_I2S_CON10bitenable/disable,開啟相關trace


6,新增trace,看到在恢復音樂播放前AFE_I2S_CON1是被disable的:


7,檢視code此場景下setI2SDacEnable(false)的可能,結合mainlog

,可以看到HPimpendance的播放在使用:


8,如此定位到mt_soc_pcm_hp_impedance.cmtk_soc_pcm_hp_impedance_close()中未加判斷就直接setI2SDacEnable(false)



二,調節音量後設置的撥號盤鋼琴、預設音效變為無聲

Platform:MTK,MT6755

Description:

[預置條件]:撥號設定:開啟撥號鍵盤觸控音效為預設、鋼琴

[測試步驟]:撥號盤--輸入字元、數字--觀察--音量鍵--調節鈴聲、音樂、鬧鐘音量級--撥號盤輸入字元、數字--觀察

[實際結果

]:調節音量級後的撥號盤音效變為無聲

Analysis:

1, 檢視log,音量調節時使用的是I2S0dl1DAI播放和撥號盤fastmixer使用DL2DAI播放,

觀察log,發現撥號盤無聲都是發生在音量播放結束後。


2, 檢視codemtk_pcm_I2S0dl1_stop()/mtk_pcm_I2S0dl1_close()中是否有影響無聲的操作;其中 mtk_pcm_I2S0dl1_close()中有在設定AFE_I2S_CON3SmartPA相關)


3,再檢視dl2相關程式碼並未對AFE_I2S_CON3做些計數的保護,因此新增相關程式碼:




三,喇叭無聲,耳機有聲:

Platform:sdm450 +external codec+smartpa

Description:

[預置條件]:原先喇叭播放有聲音

[測試步驟]:音樂播放中插入耳機,耳機有聲音,拔出耳機,再點選播放音樂,喇叭無聲。

[實際結果]:喇叭無聲


Analysis:

1,抓取qxdm log,0x1586 有聲音

2,使用tinymix 給smartpa 的輸入打tone音,喇叭無聲,定位到smartpa的問題;

3,