Linux内核注册一个声卡的示例
时间: 2023-02-07 16:51:11 浏览: 69
Linux 内核中注册声卡的示例如下:
```
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/pcm_params.h>
#include <sound/soc.h>
#include <sound/initval.h>
static int my_card_register(struct snd_soc_card *card)
{
int ret;
struct snd_soc_dai_link *dai_link;
struct snd_soc_dai *dai;
dai_link = devm_kzalloc(card->dev, sizeof(*dai_link), GFP_KERNEL);
if (!dai_link)
return -ENOMEM;
dai_link->name = "My Card";
dai_link->stream_name = "My Card";
dai_link->platform_name = "platform-name";
dai_link->codec_name = "codec-name";
dai_link->codec_dai_name = "codec-dai-name";
dai_link->cpu_dai_name = "cpu-dai-name";
dai = asoc_rtd_to_codec(rtd, 0);
dai->driver->playback.channels_min = 2;
dai->driver->playback.channels_max = 2;
dai->driver->capture.channels_min = 2;
dai->driver->capture.channels_max = 2;
ret = snd_soc_register_card(card);
if (ret) {
dev_err(card->dev, "snd_soc_register_card() failed: %d\n", ret);
return ret;
}
return 0;
}
static int my_driver_probe(struct platform_device *pdev)
{
struct snd_soc_card *card;
int ret;
card = devm_kzalloc(&pdev->dev, sizeof(*card), GFP_KERNEL);
if (!card)
return -ENOMEM;
card->dev = &pdev->dev;
card->owner = THIS_MODULE;
ret = my_card_register(card);
if (ret)
return ret;
platform_set_drvdata(pdev, card);
return 0;
}
static int my_driver_remove(struct platform_device *pdev)
{
struct snd_soc_card *card = platform_get_drvdata(pdev);
snd_soc_unregister_card(card);
return 0;
}
static const struct of_device_id my_of_match[] = {
{ .compatible = "my-card" },
{},
};
MODULE_DEVICE_TABLE(of, my_of_match);
static struct platform_driver my_driver = {