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初始化功能中添加机器特定的音频混音器控件。

 

你可能感兴趣的:(linux设备与驱动)