日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

SM8150 Audio驱动分析

發(fā)布時(shí)間:2024/1/1 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SM8150 Audio驱动分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. TDM硬件接口介紹:

I2S只能傳2個(gè)聲道的數(shù)據(jù),PCM可以傳多達(dá)16路數(shù)據(jù),采用時(shí)分復(fù)用的方式,就是TDM。

TDM不像I2S有統(tǒng)一的標(biāo)準(zhǔn),不同的IC廠商在應(yīng)用TDM時(shí)可能略有差異,這些差異表現(xiàn)在時(shí)鐘的極性、聲道配置的觸發(fā)條件和對(duì)閑置聲道的處理等。

特點(diǎn)

  • 比I2S節(jié)省管腳數(shù)量
  • 支持多路傳輸
  • 最多支持16路=16通道

TDM系統(tǒng)框圖:

?2.?Kernel Dtsi 配置

參考:Documentation/devicetree/bindings/sound/qcom-audio-dev.txt

sa8155-audio.dtsi :

/*TDM Pri組RX端口組配置*/ tdm_pri_rx: qcom,msm-dai-tdm-pri-rx {/*匹配節(jié)點(diǎn),驅(qū)動(dòng)和設(shè)備的compatible屬性相同時(shí),才會(huì)調(diào)用probe函數(shù)。*/compatible = "qcom,msm-dai-tdm";/*TDM 群組ID:支持列表如下:Primary RX: 37120Primary TX: 37121Secondary RX: 37136Secondary TX: 37137Tertiary RX: 37152Tertiary TX: 37153Quaternary RX: 37168Quaternary TX: 37169*/qcom,msm-cpudai-tdm-group-id = <37120>;/*端口數(shù),最大支持端口數(shù)量為8*/qcom,msm-cpudai-tdm-group-num-ports = <4>;/*TDM端口ID數(shù)組,數(shù)組的大小由msm-cpudai-tdm-group-num-ports 中的值決定。每組最多支持 8 個(gè)端口:Primary RX: 36864, 36866, 36868, 36870,36872, 36874, 36876, 36878Primary TX: 36865, 36867, 36869, 36871,36873, 36875, 36877, 36879Secondary RX: 36880, 36882, 36884, 36886,36888, 36890, 36892, 36894Secondary TX: 36881, 36883, 36885, 36887,36889, 36891, 36893, 36895Tertiary RX: 36896, 36898, 36900, 36902,36904, 36906, 36908, 36910Tertiary TX: 36897, 36899, 36901, 36903,36905, 36907, 36909, 36911Quaternary RX: 36912, 36914, 36916, 36918,36920, 36922, 36924, 36926Quaternary TX: 36913, 36915, 36917, 36919,36921, 36923, 36925, 36927*/qcom,msm-cpudai-tdm-group-port-id = <36864 36866 36868 36870>;/*TDM時(shí)鐘速率,設(shè)置為0說(shuō)明使用外部時(shí)鐘*/qcom,msm-cpudai-tdm-clk-rate = <12288000>;/*時(shí)鐘源。0 - EBIT 時(shí)鐘1 - IBIT 時(shí)鐘*/qcom,msm-cpudai-tdm-clk-internal = <1>;/*同步設(shè)置。0 - 短同步位模式1 - 長(zhǎng)同步模式2 - 短同步槽模式*/qcom,msm-cpudai-tdm-sync-mode = <0>;/*同步源。0 - 外部源1 - 內(nèi)部來(lái)源 */qcom,msm-cpudai-tdm-sync-src = <1>;/*其他主機(jī)驅(qū)動(dòng)的數(shù)據(jù)輸出。0 - 禁用1 - 啟用*/qcom,msm-cpudai-tdm-data-out = <0>;/*反轉(zhuǎn)同步。0 - 正常1 - 反轉(zhuǎn)*/qcom,msm-cpudai-tdm-invert-sync = <0>;/*相對(duì)于同步邊沿延遲數(shù)據(jù)的位時(shí)鐘數(shù)。0 - 0 位時(shí)鐘周期1 - 1 位時(shí)鐘周期2 - 2 位時(shí)鐘周期*/qcom,msm-cpudai-tdm-data-delay = <1>;/*TDM CLK 屬性配置*/qcom,msm-cpudai-tdm-clk-attribute = /bits/ 16 <1>;/*TDM RX端口配置,幾路端口由msm-cpudai-tdm-group-num-ports 中的值決定msm-cpudai-tdm-dev-id 由 msm-cpudai-tdm-group-port-id 端口ID數(shù)組決定*/dai_pri_tdm_rx_0: qcom,msm-dai-q6-tdm-pri-rx-0 {compatible = "qcom,msm-dai-q6-tdm";qcom,msm-cpudai-tdm-dev-id = <36864>;qcom,msm-cpudai-tdm-data-align = <0>;};dai_pri_tdm_rx_1: qcom,msm-dai-q6-tdm-pri-rx-1 {compatible = "qcom,msm-dai-q6-tdm";qcom,msm-cpudai-tdm-dev-id = <36866>;qcom,msm-cpudai-tdm-data-align = <0>;};dai_pri_tdm_rx_2: qcom,msm-dai-q6-tdm-pri-rx-2 {compatible = "qcom,msm-dai-q6-tdm";qcom,msm-cpudai-tdm-dev-id = <36868>;qcom,msm-cpudai-tdm-data-align = <0>;};dai_pri_tdm_rx_3: qcom,msm-dai-q6-tdm-pri-rx-3 {compatible = "qcom,msm-dai-q6-tdm";qcom,msm-cpudai-tdm-dev-id = <36870>;qcom,msm-cpudai-tdm-data-align = <0>;}; };/*TDM Pri組TX端口組配置*/ tdm_pri_tx: qcom,msm-dai-tdm-pri-tx {/*匹配節(jié)點(diǎn),驅(qū)動(dòng)和設(shè)備的compatible屬性相同時(shí),才會(huì)調(diào)用probe函數(shù)。*/compatible = "qcom,msm-dai-tdm";qcom,msm-cpudai-tdm-group-id = <37121>;qcom,msm-cpudai-tdm-group-num-ports = <4>;qcom,msm-cpudai-tdm-group-port-id = <36865 36867 36869 36871>;qcom,msm-cpudai-tdm-clk-rate = <12288000>;qcom,msm-cpudai-tdm-clk-internal = <1>;qcom,msm-cpudai-tdm-sync-mode = <0>;qcom,msm-cpudai-tdm-sync-src = <1>;qcom,msm-cpudai-tdm-data-out = <0>;qcom,msm-cpudai-tdm-invert-sync = <0>;qcom,msm-cpudai-tdm-data-delay = <1>;qcom,msm-cpudai-tdm-clk-attribute = /bits/ 16 <1>;dai_pri_tdm_tx_0: qcom,msm-dai-q6-tdm-pri-tx-0 {compatible = "qcom,msm-dai-q6-tdm";qcom,msm-cpudai-tdm-dev-id = <36865>;qcom,msm-cpudai-tdm-data-align = <0>;};dai_pri_tdm_tx_1: qcom,msm-dai-q6-tdm-pri-tx-1 {compatible = "qcom,msm-dai-q6-tdm";qcom,msm-cpudai-tdm-dev-id = <36867>;qcom,msm-cpudai-tdm-data-align = <0>;};dai_pri_tdm_tx_2: qcom,msm-dai-q6-tdm-pri-tx-2 {compatible = "qcom,msm-dai-q6-tdm";qcom,msm-cpudai-tdm-dev-id = <36869>;qcom,msm-cpudai-tdm-data-align = <0>;};dai_pri_tdm_tx_3: qcom,msm-dai-q6-tdm-pri-tx-3 {compatible = "qcom,msm-dai-q6-tdm";qcom,msm-cpudai-tdm-dev-id = <36871>;qcom,msm-cpudai-tdm-data-align = <0>;}; };

3. Kernel Driver:

?3.1 tdm驅(qū)動(dòng)(audio front-end (AFE) port 端):kernel/techpack/audio/asoc/msm-dai-q6-v2.c

/* DTM設(shè)備驅(qū)動(dòng),匹配dtsi中 dtm組端口的 tdm_pri_rx: qcom,msm-dai-tdm-pri-rx {compatible = "qcom,msm-dai-tdm";...dai_pri_tdm_rx_0: qcom,msm-dai-q6-tdm-pri-rx-0 {compatible = "qcom,msm-dai-q6-tdm";qcom,msm-cpudai-tdm-dev-id = <36864>;qcom,msm-cpudai-tdm-data-align = <0>;};... }; */ static const struct of_device_id msm_dai_q6_tdm_dev_dt_match[] = {{ .compatible = "qcom,msm-dai-q6-tdm", },{} };MODULE_DEVICE_TABLE(of, msm_dai_q6_tdm_dev_dt_match);static struct platform_driver msm_dai_q6_tdm_driver = {.probe = msm_dai_q6_tdm_dev_probe,.remove = msm_dai_q6_tdm_dev_remove,.driver = {.name = "msm-dai-q6-tdm",.owner = THIS_MODULE,.of_match_table = msm_dai_q6_tdm_dev_dt_match,}, };/*DTM驅(qū)動(dòng)*/ static const struct of_device_id msm_dai_tdm_dt_match[] = {{ .compatible = "qcom,msm-dai-tdm", },{} };MODULE_DEVICE_TABLE(of, msm_dai_tdm_dt_match);static struct platform_driver msm_dai_tdm_q6 = {.probe = msm_dai_tdm_q6_probe,.remove = msm_dai_tdm_q6_remove,.driver = {.name = "msm-dai-tdm",.owner = THIS_MODULE,.of_match_table = msm_dai_tdm_dt_match,}, };/*DTM 設(shè)備驅(qū)動(dòng)注冊(cè)*/ rc = platform_driver_register(&msm_dai_q6_tdm_driver); if (rc) {pr_err("%s: fail to register dai TDM dev drv\n", __func__);goto dai_q6_tdm_drv_fail; } /*DTM驅(qū)動(dòng)注冊(cè)*/ rc = platform_driver_register(&msm_dai_tdm_q6); if (rc) {pr_err("%s: fail to register dai TDM\n", __func__);goto dai_tdm_q6_fail; }

3.2 聲卡驅(qū)動(dòng)(audio back-end (ABE) port 端):kernel/techpack/audio/asoc/sa8155.c

目的:用戶態(tài)驅(qū)動(dòng),注冊(cè)PCM聲卡,給User空間調(diào)用。

具體詳情,請(qǐng)看Linux alsa聲卡驅(qū)動(dòng)模型。

/*后端Dai Link 鏈路配置后端 <---> DSP/CODEC <---> DAC/ADC <---> SPK/MIC */ static struct snd_soc_dai_link msm_auto_be_dai_links[] = {/* Backend DAI Links */{.name = LPASS_BE_PRI_TDM_RX_1,.stream_name = "Primary TDM1 Playback", //名稱(播放流).cpu_dai_name = "msm-dai-q6-tdm.36866", //查詢DTSI可以查到該dtm設(shè)備id.platform_name = "msm-pcm-routing",.codec_name = "msm-stub-codec.1",.codec_dai_name = "msm-stub-rx",.no_pcm = 1,.dpcm_playback = 1,.id = MSM_BACKEND_DAI_PRI_TDM_RX_1,//根據(jù)dtsi tdm設(shè)備組ID(36866)配置.be_hw_params_fixup = msm_tdm_be_hw_params_fixup,.ops = &sa8155_tdm_be_ops,.ignore_suspend = 1,},{.name = LPASS_BE_PRI_TDM_RX_2,.stream_name = "Primary TDM2 Playback",.cpu_dai_name = "msm-dai-q6-tdm.36868",.platform_name = "msm-pcm-routing",.codec_name = "msm-stub-codec.1",.codec_dai_name = "msm-stub-rx",.no_pcm = 1,.dpcm_playback = 1,.id = MSM_BACKEND_DAI_PRI_TDM_RX_2,.be_hw_params_fixup = msm_tdm_be_hw_params_fixup,.ops = &sa8155_tdm_be_ops,.ignore_suspend = 1,},

ABE snd_soc_dai_link 如何與 AFE的?snd_soc_dai_driver 關(guān)聯(lián)?

  • ?Stream Name關(guān)聯(lián)?
  • ?CPU dai name 關(guān)聯(lián)?

?

易混技術(shù)點(diǎn):DPCM (Dynamic PCM)

? ? ? ? ? ? ? ???????DAPM (Dynamic Audio Power Manager)

Alsa驅(qū)動(dòng)模型參考:

Audio System 三 之 Linux ALSA音頻系統(tǒng)分析_|~~~熱愛生活、努力學(xué)習(xí)的小伙汁~~~|-CSDN博客

Linux音頻子系統(tǒng)

Linux ALSA | Lucky Boy

總結(jié)

以上是生活随笔為你收集整理的SM8150 Audio驱动分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲不卡视频在线观看 | 天堂va欧美va亚洲va老司机 | 精品国产成人亚洲午夜福利 | 日韩免费观看av | 99产精品成人啪免费网站 | 久久国产精品-国产精品 | 国产人妻一区二区三区四区五区六 | 污污视频在线免费看 | 亚洲精品丝袜 | 国产精品第二页 | 偷拍超碰| 亚洲人成影视 | 美女xx00 | 国产精品成人免费视频 | 青青青青青青草 | 他趴在我两腿中间添得好爽在线看 | 亚洲av永久无码精品一百度影院 | 粉嫩一区 | 国产女人高潮的av毛片 | 午夜视频导航 | 黄网址在线 | 国产一区亚洲二区三区 | 黄色av网址大全 | 欧美人与性动交a欧美精品 日韩免费高清视频 | 国产伦精品一区二区三区视频1 | 国产一级片一区二区 | 日本一区二区三区四区在线观看 | 九九这里只有精品视频 | 日韩av影片 | 草久久 | av秋霞| 网站免费在线观看 | 岛国精品一区 | 国产精品资源在线观看 | 99精品偷自拍 | 色94色欧美 | 欧美私人网站 | av先锋资源网 | 女人特黄大aaaaaa大片 | 星空无限mv国产剧入选 | 黄色在线免费 | 精品国产鲁一鲁一区二区三区 | av不卡免费观看 | 亚洲h在线观看 | 超碰2020| 纯爱无遮挡h肉动漫在线播放 | 久久久久久人妻一区二区三区 | 成人性生交生交视频 | 国产日韩亚洲 | 日韩色综合 | 91传媒入口 | 成年人看片网站 | 成年人av在线播放 | 欧美黄色录像带 | v片在线看| avwww| 在线看片网站 | 精品在线视频一区二区 | 亚洲精品一二三四 | 欧美透逼视频 | 国产在线一级片 | 精品久久久久久久久久久久 | 国产精品理论片在线观看 | aa毛片视频 | 精品久久一区 | 精品无码久久久久久国产 | 9.1在线观看免费 | 日本中文字幕高清 | 日韩精品二区在线观看 | 欧美88av| 淫人网| 久久精品一区二区三区四区 | 国产剧情自拍 | 黑巨茎大战欧美白妞 | 国产精品夜色一区二区三区 | 亚洲视频色| 国产亚洲片| 日韩在线视频一区 | 日本免费专区 | 五月天激情婷婷 | 成都电影免费大全 | 成人91 | 亚洲综合免费视频 | 影音先锋精品 | 精品国产午夜福利在线观看 | 久久人体视频 | 神马久久久久久久久 | 久久黄色| 人人人妻人人澡人人爽欧美一区 | 在线免费观看污网站 | 91精品久久香蕉国产线看观看 | 亚洲毛片大全 | 人人爱国产| av免费观看网站 | 国产欧美日韩综合 | 精品人妻一区二区三区久久嗨 | av中文一区| 蜜臀av夜夜澡人人爽人人 | 黄色片免费在线 |