guo ecf2d82159
sync branch rt-smart. (#6641)
* Synchronize the code of the rt mart branch to the master branch.
  * TTY device
  * Add lwP code from rt-smart
  * Add vnode in DFS, but DFS will be re-write for rt-smart
  * There are three libcpu for rt-smart:
    * arm/cortex-a, arm/aarch64
    * riscv64

Co-authored-by: Rbb666 <zhangbingru@rt-thread.com>
Co-authored-by: zhkag <zhkag@foxmail.com>
2022-12-03 12:07:44 +08:00

150 lines
4.4 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sound/snd_core.h>
#include <aw_common.h>
#ifndef CONFIG_KERNEL_FREERTOS
#include <init.h>
#endif
#ifdef CONFIG_SND_PLATFORM_SUNXI_CPUDAI
extern struct snd_codec sunxi_audiocodec;
#endif
#ifdef CONFIG_SND_CODEC_AC108
extern struct snd_codec ac108_codec;
#else
extern struct snd_codec dummy_codec;
#endif
#ifdef CONFIG_SND_PLATFORM_SUNXI_DMIC
extern struct snd_codec dmic_codec;
#endif
#ifdef CONFIG_SND_PLATFORM_SUNXI_SPDIF
extern struct snd_codec spdif_codec;
#endif
int sunxi_soundcard_init(void)
{
int ret = 0;
char *card_name = NULL;
//maybe unused for compile warning.
UNUSED(ret);
UNUSED(card_name);
/* ------------------------------------------------------------------------- */
/* AUDIOCODEC */
/* ------------------------------------------------------------------------- */
#ifdef CONFIG_SND_PLATFORM_SUNXI_CPUDAI
struct snd_codec *audio_codec = NULL;
card_name = "audiocodec";
audio_codec = &sunxi_audiocodec;
/* register audiocodec sound card */
ret = snd_card_register(card_name, audio_codec,
SND_PLATFORM_TYPE_CPUDAI);
if (ret == 0) {
snd_print("soundcards: audiocodec register success!\n");
} else {
snd_err("soundcards: audiocodec register failed!\n");
}
#endif
/* ------------------------------------------------------------------------- */
/* DAUDIO */
/* ------------------------------------------------------------------------- */
#ifdef CONFIG_SND_PLATFORM_SUNXI_DAUDIO0
#ifdef CONFIG_SND_CODEC_AC108
card_name = "ac108";
audio_codec = &ac108_codec;
#else
card_name = "snddaudio0";
audio_codec = &dummy_codec;
#endif
/* register daudio0 sound card */
ret = snd_card_register("snddaudio0", audio_codec, SND_PLATFORM_TYPE_DAUDIO0);
if (ret == 0) {
snd_print("soundcards: %s register success!\n", card_name);
} else {
snd_err("soundcards: %s register failed!\n", card_name);
}
#endif
#ifdef CONFIG_SND_PLATFORM_SUNXI_DAUDIO1
card_name = "snddaudio1";
audio_codec = &dummy_codec;
/* register daudio1 sound card */
ret = snd_card_register("snddaudio1", audio_codec, SND_PLATFORM_TYPE_DAUDIO1);
if (ret == 0) {
snd_print("soundcards: %s register success!\n", card_name);
} else {
snd_err("soundcards: %s register failed!\n", card_name);
}
#endif
#ifdef CONFIG_SND_PLATFORM_SUNXI_DAUDIO2
card_name = "snddaudio2";
audio_codec = &dummy_codec;
/* register daudio2 sound card */
ret = snd_card_register("snddaudio2", audio_codec, SND_PLATFORM_TYPE_DAUDIO2);
if (ret == 0) {
snd_print("soundcards: %s register success!\n", card_name);
} else {
snd_err("soundcards: %s register failed!\n", card_name);
}
#endif
#ifdef CONFIG_SND_PLATFORM_SUNXI_DAUDIO3
card_name = "snddaudio3";
audio_codec = &dummy_codec;
/* register daudio3 sound card */
ret = snd_card_register("snddaudio3", audio_codec, SND_PLATFORM_TYPE_DAUDIO3);
if (ret == 0) {
snd_print("soundcards: %s register success!\n", card_name);
} else {
snd_err("soundcards: %s register failed!\n", card_name);
}
#endif
/* ------------------------------------------------------------------------- */
/* DMIC */
/* ------------------------------------------------------------------------- */
#ifdef CONFIG_SND_PLATFORM_SUNXI_DMIC
card_name = "snddmic";
audio_codec = &dmic_codec;
/* register dmic sound card */
ret = snd_card_register(card_name, audio_codec,
SND_PLATFORM_TYPE_DMIC);
if (ret == 0) {
snd_print("soundcards: %s register success!\n", card_name);
} else {
snd_err("soundcards: %s register failed!\n", card_name);
}
#endif
/* ------------------------------------------------------------------------- */
/* SPDIF */
/* ------------------------------------------------------------------------- */
#ifdef CONFIG_SND_PLATFORM_SUNXI_SPDIF
card_name = "sndspdif";
audio_codec = &spdif_codec;
/* register spdif sound card */
ret = snd_card_register(card_name, audio_codec,
SND_PLATFORM_TYPE_SPDIF);
if (ret == 0) {
snd_print("soundcards: %s register success!\n", card_name);
} else {
snd_err("soundcards: %s register failed!\n", card_name);
}
#endif
/* Sound cards list */
snd_card_list();
return 0;
}
#ifndef CONFIG_KERNEL_FREERTOS
late_initcall(sunxi_soundcard_init);
#endif