1. 程式人生 > >ASoC機器驅動程式

ASoC機器驅動程式

ASoC機器驅動程式

ASoC機器(或板)驅動程式是將所有元件驅動程式(例如編解碼器,平臺和DAI)粘合在一起的程式碼。它還描述了每個元件之間的關係,包括音訊路徑,GPIO,中斷,時鐘,插孔和電壓調節器。

機器驅動程式可以包含編解碼器和平臺特定程式碼。它將音訊子系統註冊為核心作為平臺裝置,並由以下結構表示: -

/ * SoC機器* /
struct snd_soc_card {
      char * name;

      ...

      int(* probe)(struct platform_device * pdev);
      int(* remove)(struct platform_device * pdev);

      / * PM之前和之後的功能用於在之前和之前完成任何PM工作
       *在編解碼器和DAI之後執行任何PM工作。* /
      int(* suspend_pre)(struct platform_device * pdev,pm_message_t state);
      int(* suspend_post)(struct platform_device * pdev,pm_message_t state);
      int(* resume_pre)(struct platform_device * pdev);
      int(* resume_post)(struct platform_device * pdev);

      ...

      / * CPU < - > Codec DAI連結* /
      struct snd_soc_dai_link * dai_link;
      int num_links;

      ...
};

探針()/刪除()

探測/移除是可選的。在這裡做任何機器特定的探測。

暫停()/恢復()

機器驅動程式具有暫停和恢復的前後版本,以處理在編解碼器,DAI和DMA暫停和恢復之前或之後必須完成的任何機器音訊任務。可選的。

機器DAI配置

機器DAI配置將所有編解碼器和CPU DAI粘合在一起。它還可以用於設定DAI系統時鐘和任何與機器相關的DAI初始化,例如機器音訊對映可以連線到編解碼器音訊對映,未連線的編解碼器引腳可以這樣設定。

struct snd_soc_dai_link用於設定機器中的每個DAI。例如

/ * corgi數字音訊介面膠水 - 連線編解碼器< - > CPU * /
static struct snd_soc_dai_link corgi_dai = {
      .name =“WM8731”,
      .stream_name =“WM8731”,
      .cpu_dai_name =“pxa-is2-dai”,
      .codec_dai_name =“wm8731-hifi”,
      .platform_name =“pxa-pcm-audio”,
      .codec_name =“wm8713-codec.0-001a”,
      .init = corgi_wm8731_init,
      .ops =&corgi_ops,
};

struct snd_soc_card然後用它的DAI設定機器。例如

/ * corgi音訊機驅動程式* /
static struct snd_soc_card snd_soc_corgi = {
      .name =“Corgi”,
      .dai_link =&corgi_dai,
      .nu​​m_links = 1,
};

機器功率圖

機器驅動器可以可選地擴充套件編解碼器功率圖併成為音訊子系統的音訊功率圖。這允許揚聲器/ HP放大器等的自動加電/斷電。編解碼器引腳可以在機器初始化功能中連線到機器插孔插座。

機器控制

可以在DAI初始化功能中新增機器特定的音訊混音器控制元件。