Logo

Linux 核心

6.16.0-rc4

快速搜尋

目錄

  • 開發流程
  • 提交補丁
  • 行為準則
  • 維護者手冊
  • 所有開發流程文件
  • 核心 API
  • 驅動 API
  • 子系統
    • 核心子系統
    • 人機介面
      • 輸入文件
      • 人機介面裝置 (HID)
      • 聲音子系統文件
      • GPU 驅動程式開發者指南
      • 幀緩衝區
      • LED
    • 網路介面
    • 儲存介面
    • 其他子系統
  • 鎖定
  • 許可規則
  • 編寫文件
  • 開發工具
  • 測試指南
  • 駭客指南
  • 追蹤
  • 故障注入
  • 熱補丁
  • Rust
  • 管理
  • 構建系統
  • 報告問題
  • 使用者空間工具
  • 使用者空間 API
  • 韌體
  • 韌體和裝置樹
  • CPU 架構
  • 未排序的文件
  • 翻譯

本頁

  • 顯示原始碼

為 ALSA dapm 建立編解碼器到編解碼器的 dai 連結¶

大多數情況下,音訊流總是從 CPU 流向編解碼器,因此您的系統看起來如下所示

 ---------          ---------
|         |  dai   |         |
    CPU    ------->    codec
|         |        |         |
 ---------          ---------

如果您的系統看起來如下所示

                     ---------
                    |         |
                      codec-2
                    |         |
                    ---------
                         |
                       dai-2
                         |
 ----------          ---------
|          |  dai-1 |         |
    CPU     ------->  codec-1
|          |        |         |
 ----------          ---------
                         |
                       dai-3
                         |
                     ---------
                    |         |
                      codec-3
                    |         |
                     ---------

假設 codec-2 是藍牙晶片,codec-3 連線到揚聲器,並且您有以下情況:codec-2 將接收音訊資料,並且使用者希望透過 codec-3 播放該音訊,而無需涉及 CPU。上述情況是應該使用編解碼器到編解碼器連線的理想情況。

您的 dai_link 在您的機器檔案中應如下所示

/*
 * this pcm stream only supports 24 bit, 2 channel and
 * 48k sampling rate.
 */
static const struct snd_soc_pcm_stream dsp_codec_params = {
       .formats = SNDRV_PCM_FMTBIT_S24_LE,
       .rate_min = 48000,
       .rate_max = 48000,
       .channels_min = 2,
       .channels_max = 2,
};

{
   .name = "CPU-DSP",
   .stream_name = "CPU-DSP",
   .cpu_dai_name = "samsung-i2s.0",
   .codec_name = "codec-2,
   .codec_dai_name = "codec-2-dai_name",
   .platform_name = "samsung-i2s.0",
   .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
           | SND_SOC_DAIFMT_CBP_CFP,
   .ignore_suspend = 1,
   .c2c_params = &dsp_codec_params,
   .num_c2c_params = 1,
},
{
   .name = "DSP-CODEC",
   .stream_name = "DSP-CODEC",
   .cpu_dai_name = "wm0010-sdi2",
   .codec_name = "codec-3,
   .codec_dai_name = "codec-3-dai_name",
   .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
           | SND_SOC_DAIFMT_CBP_CFP,
   .ignore_suspend = 1,
   .c2c_params = &dsp_codec_params,
   .num_c2c_params = 1,
},

以上程式碼片段來自 sound/soc/samsung/speyside.c。

請注意“c2c_params”回撥,它讓 dapm 知道此 dai_link 是編解碼器到編解碼器的連線。

在 dapm 核心中,在 cpu_dai 播放小部件和 codec_dai 捕獲小部件之間為播放路徑建立一條路由,反之亦然對於捕獲路徑。 為了觸發上述路由,DAPM 需要找到一個有效的端點,該端點可以是分別對應於播放和捕獲路徑的 sink 或 source 小部件。

為了觸發此 dai_link 小部件,可以建立一個用於揚聲器放大器的精簡編解碼器驅動程式,如 wm8727.c 檔案中所示,即使它不需要控制,它也會為裝置設定適當的約束。

請確保命名您對應的 CPU 和編解碼器播放和捕獲 dai 名稱,分別以“Playback”和“Capture”結尾,因為 dapm 核心將根據名稱連結和供電這些 dai。

當連結上的所有 DAI 都屬於編解碼器元件時,“simple-audio-card”中的 dai_link 將自動被檢測為編解碼器到編解碼器。 dai_link 將使用連結上所有 DAI 支援的流引數(通道、格式、取樣率)的子集進行初始化。 由於無法在裝置樹中提供這些引數,因此這主要適用於與簡單的固定功能編解碼器(例如藍牙控制器或蜂窩調變解調器)的通訊。

©核心開發社群。 | 由 Sphinx 5.3.0 & Alabaster 0.7.16 驅動 | 頁面來源