static int s3c2440_dma_open(struct snd_pcm_substream *substream) { struct snd_pcm_runtime *runtime = substream->runtime; int ret; /* 设置属性 */ snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); snd_soc_set_runtime_hwparams(substream, &s3c2440_dma_hardware); }...
1、snd_pcm:挂在snd_card下面的一个snd_device。 2、snd_pcm中的字段:streams[2]:该数组中的两个元素指向两个snd_pcm_str结构,分别代表playback stream和capture stream。 3、snd_pcm_str中的substream字段:指向snd_pcm_substream结构。 4、snd_pcm_substream是pcm中间层的核心,绝大部分任务都是在substream...
1、snd_pcm:挂在snd_card下面的一个snd_device。 2、snd_pcm中的字段:streams[2]:该数组中的两个元素指向两个snd_pcm_str结构,分别代表playback stream和capture stream。 3、snd_pcm_str中的substream字段:指向snd_pcm_substream结构。 4、snd_pcm_substream是pcm中间层的核心,绝大部分任务都是在substream...
1、snd_pcm:挂在snd_card下面的一个snd_device。 2、snd_pcm中的字段:streams[2]:该数组中的两个元素指向两个snd_pcm_str结构,分别代表playback stream和capture stream。 3、snd_pcm_str中的substream字段:指向snd_pcm_substream结构。 4、snd_pcm_substream是pcm中间层的核心,绝大部分任务都是在substream...
hw constraints:指平台本身的硬件限制,如所能支持的通道数/采样率/数据格式、DMA 支持的数据周期大小(period size)、周期次数(period count)等,通过snd_pcm_hardware结构体描述: staticconststructsnd_pcm_hardwaredma_hardware={.info=SNDRV_PCM_INFO_INTERLEAVED|SNDRV_PCM_INFO_BLOCK_TRANSFER|SNDRV_PCM_INFO_MMAP...
open:打开 pcm 逻辑设备时,回调该函数设定 dma 设备的硬件约束;并申请一个私有结构,保存 dma 设备资源如通道号、传输单元、缓冲区信息、IO 信息等,保存在runtime->private_data。代码如下: staticconststructsnd_pcm_hardwaredma_hardware={.info=SNDRV_PCM_INFO_INTERLEAVED|SNDRV_PCM_INFO_BLOCK_TRANSFER|SNDRV_PC...
第1个参数是snd_card_new()创建的card指针,第2个参数type 指的是device-level即设备类型,形式为SNDRV_DEV_XXX,包括SNDRV_DEV_CODEC、 SNDRV_DEV_CONTROL、SNDRV_DEV_PCM、SNDRV_DEV_RAWMIDI等,用户自定义设备的device-level是 SNDRV_DEV_LOWLEVEL,ops参数是1个函数集(定义为snd_device_ops结构体)的指针,...
Hardware Driver三者的关系如下图所示: Platform缓存: 主要作用是完成音频数据的管理,通过CPU的数字音频接口(DAI)把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的音信信号。在具体实现上,ASoC有把Platform驱动分为两个部分:snd_soc_platform_driver和 ...
==> snd_pcm_open(&handle, pcm_name, stream, open_mode); //打开一路pcm,刷新config配置 如果是"default",同时type等于SND_CONFIG_TYPE_COMPOUND那么这里对应"empty" static const char *const build_in_pcms[] = { "adpcm", "alaw", "copy", "dmix", "file", "hooks", "hw", "ladspa", "...
SND_PCM_STREAM_PLAYBACK, 0);if (rc < 0) { fprintf(stderr, "unable to open pcm device: %s/n", snd_strerror(rc)); exit(1);}/* Allocate a hardware parameters object. */snd_pcm_hw_params_alloca(¶ms);/* Fill it in with default values. */snd_pcm_hw_params_any(handle, para...