linux-2.6.33/soc_new_pcm()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#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_K...
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, co...
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_dev...
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_p...
if (capture)
snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &soc_pc...
-
--[[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...
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_...
cpu_dai->name);
return ret;
}
*コメント [#z7028369]
終了行:
*参照元 [#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_K...
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, co...
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_dev...
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_p...
if (capture)
snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &soc_pc...
-
--[[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...
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_...
cpu_dai->name);
return ret;
}
*コメント [#z7028369]
ページ名: