summaryrefslogtreecommitdiff
path: root/bsp/allwinner/libraries/sunxi-hal/hal/source/sound/card_default.c
blob: 7158dff78afdf0de2094025b5a032e7041b6c647 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#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