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