1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <sound/snd_core.h>
5 #include <aw_common.h>
6 #ifndef CONFIG_KERNEL_FREERTOS
7 #include <init.h>
8 #endif
9
10 #ifdef CONFIG_SND_PLATFORM_SUNXI_CPUDAI
11 extern struct snd_codec sunxi_audiocodec;
12 #endif
13
14 #ifdef CONFIG_SND_CODEC_AC108
15 extern struct snd_codec ac108_codec;
16 #else
17 extern struct snd_codec dummy_codec;
18 #endif
19 #ifdef CONFIG_SND_PLATFORM_SUNXI_DMIC
20 extern struct snd_codec dmic_codec;
21 #endif
22 #ifdef CONFIG_SND_PLATFORM_SUNXI_SPDIF
23 extern struct snd_codec spdif_codec;
24 #endif
25
sunxi_soundcard_init(void)26 int sunxi_soundcard_init(void)
27 {
28 int ret = 0;
29 char *card_name = NULL;
30
31 //maybe unused for compile warning.
32 UNUSED(ret);
33 UNUSED(card_name);
34 /* ------------------------------------------------------------------------- */
35 /* AUDIOCODEC */
36 /* ------------------------------------------------------------------------- */
37 #ifdef CONFIG_SND_PLATFORM_SUNXI_CPUDAI
38 struct snd_codec *audio_codec = NULL;
39
40 card_name = "audiocodec";
41 audio_codec = &sunxi_audiocodec;
42
43 /* register audiocodec sound card */
44 ret = snd_card_register(card_name, audio_codec,
45 SND_PLATFORM_TYPE_CPUDAI);
46 if (ret == 0) {
47 snd_print("soundcards: audiocodec register success!\n");
48 } else {
49 snd_err("soundcards: audiocodec register failed!\n");
50 }
51 #endif
52
53 /* ------------------------------------------------------------------------- */
54 /* DAUDIO */
55 /* ------------------------------------------------------------------------- */
56 #ifdef CONFIG_SND_PLATFORM_SUNXI_DAUDIO0
57 #ifdef CONFIG_SND_CODEC_AC108
58 card_name = "ac108";
59 audio_codec = &ac108_codec;
60 #else
61 card_name = "snddaudio0";
62 audio_codec = &dummy_codec;
63 #endif
64 /* register daudio0 sound card */
65 ret = snd_card_register("snddaudio0", audio_codec, SND_PLATFORM_TYPE_DAUDIO0);
66 if (ret == 0) {
67 snd_print("soundcards: %s register success!\n", card_name);
68 } else {
69 snd_err("soundcards: %s register failed!\n", card_name);
70 }
71 #endif
72
73 #ifdef CONFIG_SND_PLATFORM_SUNXI_DAUDIO1
74 card_name = "snddaudio1";
75 audio_codec = &dummy_codec;
76 /* register daudio1 sound card */
77 ret = snd_card_register("snddaudio1", audio_codec, SND_PLATFORM_TYPE_DAUDIO1);
78 if (ret == 0) {
79 snd_print("soundcards: %s register success!\n", card_name);
80 } else {
81 snd_err("soundcards: %s register failed!\n", card_name);
82 }
83 #endif
84
85 #ifdef CONFIG_SND_PLATFORM_SUNXI_DAUDIO2
86 card_name = "snddaudio2";
87 audio_codec = &dummy_codec;
88 /* register daudio2 sound card */
89 ret = snd_card_register("snddaudio2", audio_codec, SND_PLATFORM_TYPE_DAUDIO2);
90 if (ret == 0) {
91 snd_print("soundcards: %s register success!\n", card_name);
92 } else {
93 snd_err("soundcards: %s register failed!\n", card_name);
94 }
95 #endif
96
97 #ifdef CONFIG_SND_PLATFORM_SUNXI_DAUDIO3
98 card_name = "snddaudio3";
99 audio_codec = &dummy_codec;
100 /* register daudio3 sound card */
101 ret = snd_card_register("snddaudio3", audio_codec, SND_PLATFORM_TYPE_DAUDIO3);
102 if (ret == 0) {
103 snd_print("soundcards: %s register success!\n", card_name);
104 } else {
105 snd_err("soundcards: %s register failed!\n", card_name);
106 }
107 #endif
108
109 /* ------------------------------------------------------------------------- */
110 /* DMIC */
111 /* ------------------------------------------------------------------------- */
112 #ifdef CONFIG_SND_PLATFORM_SUNXI_DMIC
113 card_name = "snddmic";
114 audio_codec = &dmic_codec;
115 /* register dmic sound card */
116 ret = snd_card_register(card_name, audio_codec,
117 SND_PLATFORM_TYPE_DMIC);
118 if (ret == 0) {
119 snd_print("soundcards: %s register success!\n", card_name);
120 } else {
121 snd_err("soundcards: %s register failed!\n", card_name);
122 }
123 #endif
124
125 /* ------------------------------------------------------------------------- */
126 /* SPDIF */
127 /* ------------------------------------------------------------------------- */
128 #ifdef CONFIG_SND_PLATFORM_SUNXI_SPDIF
129 card_name = "sndspdif";
130 audio_codec = &spdif_codec;
131 /* register spdif sound card */
132 ret = snd_card_register(card_name, audio_codec,
133 SND_PLATFORM_TYPE_SPDIF);
134 if (ret == 0) {
135 snd_print("soundcards: %s register success!\n", card_name);
136 } else {
137 snd_err("soundcards: %s register failed!\n", card_name);
138 }
139 #endif
140
141 /* Sound cards list */
142 snd_card_list();
143
144 return 0;
145 }
146
147 #ifndef CONFIG_KERNEL_FREERTOS
148 late_initcall(sunxi_soundcard_init);
149 #endif
150