*参照元 [#n8f15bb9]
#backlinks

*説明 [#v34900da]
-パス: [[linux-2.6.33/sound/soc/soc-core.c]]

-FIXME: これは何?
--説明


**引数 [#fed1c69c]
-struct snd_soc_device *socdev
--
--[[linux-2.6.33/snd_soc_device]]
-struct snd_soc_dai_link *dai_link
--
--[[linux-2.6.33/snd_soc_dai_link]]
-int num
--


**返り値 [#k3325db7]
-int
--


**参考 [#e7e4f01c]


*実装 [#o5e4904a]
 /* create a new pcm */
 static int soc_new_pcm(struct snd_soc_device *socdev,
 	struct snd_soc_dai_link *dai_link, int num)
 {
 	struct snd_soc_card *card = socdev->card;
 	struct snd_soc_codec *codec = card->codec;
 	struct snd_soc_platform *platform = card->platform;
 	struct snd_soc_dai *codec_dai = dai_link->codec_dai;
 	struct snd_soc_dai *cpu_dai = dai_link->cpu_dai;
 	struct snd_soc_pcm_runtime *rtd;
 	struct snd_pcm *pcm;
 	char new_name[64];
 	int ret = 0, playback = 0, capture = 0;
 
-
--[[linux-2.6.33/snd_soc_card]]
-
--[[linux-2.6.33/snd_soc_codec]]
-
--[[linux-2.6.33/snd_soc_platform]]
-
--[[linux-2.6.33/snd_soc_dai]]
-
--[[linux-2.6.33/snd_soc_pcm_runtime]]
-
--[[linux-2.6.33/snd_pcm]]

 	rtd = kzalloc(sizeof(struct snd_soc_pcm_runtime), GFP_KERNEL);
 	if (rtd == NULL)
 		return -ENOMEM;
 
-
--[[linux-2.6.33/kzalloc()]]
-
--[[linux-2.6.33/GFP_KERNEL]]

 	rtd->dai = dai_link;
 	rtd->socdev = socdev;
 	codec_dai->codec = card->codec;
 
 	/* check client and interface hw capabilities */
 	sprintf(new_name, "%s %s-%d", dai_link->stream_name, codec_dai->name,
 		num);
 
 	if (codec_dai->playback.channels_min)
 		playback = 1;
 	if (codec_dai->capture.channels_min)
 		capture = 1;
 
 	ret = snd_pcm_new(codec->card, new_name, codec->pcm_devs++, playback,
 		capture, &pcm);
 	if (ret < 0) {
 		printk(KERN_ERR "asoc: can't create pcm for codec %s\n",
 			codec->name);
 		kfree(rtd);
 		return ret;
 	}
 
-
--[[linux-2.6.33/snd_pcm_new()]]

 	dai_link->pcm = pcm;
 	pcm->private_data = rtd;
 	soc_pcm_ops.mmap = platform->pcm_ops->mmap;
 	soc_pcm_ops.pointer = platform->pcm_ops->pointer;
 	soc_pcm_ops.ioctl = platform->pcm_ops->ioctl;
 	soc_pcm_ops.copy = platform->pcm_ops->copy;
 	soc_pcm_ops.silence = platform->pcm_ops->silence;
 	soc_pcm_ops.ack = platform->pcm_ops->ack;
 	soc_pcm_ops.page = platform->pcm_ops->page;
 
-
--[[linux-2.6.33/soc_pcm_ops(global()]]

 	if (playback)
 		snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &soc_pcm_ops);
 
 	if (capture)
 		snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &soc_pcm_ops);
 
-
--[[linux-2.6.33/snd_pcm_set_ops()]]
-
--[[linux-2.6.33/SNDRV_PCM_STREAM_PLAYBACK]]
-
--[[linux-2.6.33/SNDRV_PCM_STREAM_CAPTURE]]

 	ret = platform->pcm_new(codec->card, codec_dai, pcm);
 	if (ret < 0) {
 		printk(KERN_ERR "asoc: platform pcm constructor failed\n");
 		kfree(rtd);
 		return ret;
 	}
 
-
--[[linux-2.6.33/printk()]]
-
--[[linux-2.6.33/kfree()]]

 	pcm->private_free = platform->pcm_free;
 	printk(KERN_INFO "asoc: %s <-> %s mapping ok\n", codec_dai->name,
 		cpu_dai->name);
 	return ret;
 }

*コメント [#z7028369]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS