asoc之为ALSA dapm创建编解码器到编解码器dai链接

为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将接收音频数据,用户希望通过编解码器-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_CBM_CFM,
   .ignore_suspend = 1,
   .params = &dsp_codec_params,
},
{
   .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_CBM_CFM,
   .ignore_suspend = 1,
   .params = &dsp_codec_params,
},

上面的代码片段来自sound / soc / samsung / speyside.c。

注意“params”回调,它让dapm知道这个dai_link是编解码器连接的编解码器。

在dapm核心中,在cpu_dai回放小部件和用于回放路径的codec_dai捕获小部件之间创建路由,反之亦然,对于捕获路径。为了使上述路由被触发,DAPM需要找到有效的端点,该端点可以是分别对应于回放和捕获路径的接收器或源小部件。

为了触发这个dai_link小部件,可以创建一个用于扬声器放大器的精简编解码器驱动程序,如wm8727.c文件中所示,它为设备设置了适当的约束,即使它不需要控制。

确保命名相应的cpu和编解码器播放,并分别捕获以“播放”和“捕获”结尾的dai名称,因为dapm核心将根据名称链接并为这些dais供电。

请注意,在当前设备树中,无法将dai_link标记为编解码器的编解码器。但是,将来可能会发生变化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值