栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux 音频子系统

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux 音频子系统

目录:
  • 1. 架构
  • 2. 文件组成
  • 3. ALSA核心层
  • 4. ASoC框架

1. 架构

整体框架

2. 文件组成
文件/文件夹作用
aoa苹果板载音频驱动
armarm音频设备支持
atmelatmel ABDAC(音频字节流数模转换器)和ac97C(ac97控制器)
corealsa驱动中间层,是alsa驱动的核心
drivers与cpu、bus无关的公用代码
firewireIEEE-1394/FireWire/iLink音频设备支持
hdaHD audio(高保真音频)支持
i2calsa的i2c控制代码
isa各种isa声卡的代码
mipsmips音频设备支持
oss对oss的兼容支持
parisc鸿蒙和PA-RISC架构的GSC音频设备支持
pcipci音频设备支持
pcmciapcmcia音频设备支持
ppcPowerPC音频设备支持
shSuperH架构音频设备支持
socsystem-on-chip体系的中间层代码
sparcSPARC架构音频设备支持
spispi音频设备支持
synth一些工具
usbusb音频设备支持
ac97_bus.c实现ac97标准总线
last.c音频设备注册完成后打印”ALSA devices List”
sound_core.c注册音频核心层子系统
sound_firmware.c加载音频驱动固件
3. ALSA核心层 4. ASoC框架

soundsocsunxisun4i-codec.c

	static struct snd_soc_card *suniv_codec_create_card(struct device *dev)
{
	struct snd_soc_card *card;
	int ret;

	card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
	if (!card)
		return ERR_PTR(-ENOMEM);

	card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
	if (!card->dai_link)
		return ERR_PTR(-ENOMEM);

	card->dev		= dev;
	card->name		= "F1C100s Audio Codec";
	card->dapm_widgets	= suniv_codec_card_dapm_widgets;
	card->num_dapm_widgets	= ARRAY_SIZE(suniv_codec_card_dapm_widgets);
	card->dapm_routes	= suniv_codec_card_routes;
	card->num_dapm_routes	= ARRAY_SIZE(suniv_codec_card_routes);
	card->fully_routed	= true;

	ret = snd_soc_of_parse_audio_routing(card, "allwinner,audio-routing");
	if (ret)
		dev_warn(dev, "failed to parse audio-routing: %dn", ret);

	return card;
};
	static const struct sun4i_codec_quirks suniv_f1c100s_codec_quirks = {
	.regmap_config	= &suniv_codec_regmap_config,
	.codec		= &suniv_codec_codec,
	.create_card	= suniv_codec_create_card,
	.reg_adc_fifoc	= REG_FIELD(SUNIV_CODEC_ADC_FIFOC, 0, 31),
	.reg_dac_txdata	= SUN4I_CODEC_DAC_TXDATA,
	.reg_adc_rxdata	= SUNIV_CODEC_ADC_RXDATA,
	.has_reset	= true,
	.dma_max_burst	= SUNIV_DMA_MAX_BURST,
};
	static const struct of_device_id sun4i_codec_of_match[] = {
	{
		.compatible = "allwinner,suniv-f1c100s-codec",
		.data = &suniv_f1c100s_codec_quirks,
	},
};
static struct platform_driver sun4i_codec_driver = {
	.driver = {
		.name = "sun4i-codec",
		.of_match_table = sun4i_codec_of_match,
	},
	.probe = sun4i_codec_probe,
	.remove = sun4i_codec_remove,
};
module_platform_driver(sun4i_codec_driver);

socsunxisun4i-i2s.c

static const struct of_device_id sun4i_i2s_match[] = {
	{
		.compatible = "allwinner,sun4i-a10-i2s",
		.data = &sun4i_a10_i2s_quirks,
	},
	{
		.compatible = "allwinner,sun6i-a31-i2s",
		.data = &sun6i_a31_i2s_quirks,
	},
	{
		.compatible = "allwinner,sun8i-a83t-i2s",
		.data = &sun8i_a83t_i2s_quirks,
	},
	{
		.compatible = "allwinner,sun8i-h3-i2s",
		.data = &sun8i_h3_i2s_quirks,
	},
	{
		.compatible = "allwinner,sun50i-a64-codec-i2s",
		.data = &sun50i_a64_codec_i2s_quirks,
	},
	{}
};
static struct platform_driver sun4i_i2s_driver = {
	.probe	= sun4i_i2s_probe,
	.remove	= sun4i_i2s_remove,
	.driver	= {
		.name		= "sun4i-i2s",
		.of_match_table	= sun4i_i2s_match,
		.pm		= &sun4i_i2s_pm_ops,
	},
};
module_platform_driver(sun4i_i2s_driver);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/830236.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号