summaryrefslogtreecommitdiffstats
path: root/firmware/export/config_caps.h
blob: bc0a42bedf6cbce0d99283a75435d5a83ee0c00c (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
150
151
152
/***************************************************************************
 *             __________               __   ___.
 *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
 *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
 *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
 *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
 *                     \/            \/     \/    \/            \/
 * $Id$
 *
 * Copyright (C) 2007 by Michael Sevakis
 *
 * Convert caps masks into HAVE_* defines
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ****************************************************************************/

/** INPUTS **/

/* NOTE: Playback is implied in all this. Make sense? :) */
#define SRC_MIC      0
#define SRC_LINEIN   1
#define SRC_SPDIF    2
#define SRC_FMRADIO  3

#define SRC_CAP_MIC     (1 << SRC_MIC)
#define SRC_CAP_LINEIN  (1 << SRC_LINEIN)
#define SRC_CAP_SPDIF   (1 << SRC_SPDIF)
#define SRC_CAP_FMRADIO (1 << SRC_FMRADIO)

/* audio monitor mux sources */
#ifndef INPUT_SRC_CAPS
#define INPUT_SRC_CAPS 0 /* Nothing but playback */
#endif

/* Microphone */
#if (INPUT_SRC_CAPS & SRC_CAP_MIC)
    #define HAVE_MIC_IN
    #define HAVE_MIC_IN_(...) __VA_ARGS__
#else
    #define HAVE_MIC_IN_(...)
#endif
/* Line In */
#if (INPUT_SRC_CAPS & SRC_CAP_LINEIN)
    #define HAVE_LINE_IN
    #define HAVE_LINE_IN_(...) __VA_ARGS__
#else
    #define HAVE_LINE_IN_(...)
#endif
/* S/PDIF */
#if (INPUT_SRC_CAPS & SRC_CAP_SPDIF)
    #define HAVE_SPDIF_IN
    #define HAVE_SPDIF_IN_(...) __VA_ARGS__
#else
    #define HAVE_SPDIF_IN_(...)
#endif
/* FM Radio */
#if (INPUT_SRC_CAPS & SRC_CAP_FMRADIO)
    #define HAVE_FMRADIO_IN
    #define HAVE_FMRADIO_IN_(...) __VA_ARGS__
#else
    #define HAVE_FMRADIO_IN_(...)
#endif

#if INPUT_SRC_CAPS != 0 && (INPUT_SRC_CAPS & (INPUT_SRC_CAPS-1)) != 0
#define HAVE_MULTI_INPUT_SRC
#endif

#ifdef HAVE_RECORDING
/* Recordable source implies it has the input as well */

/* For now there's no restrictions on any targets with which inputs
   are recordable so define them as equivalent - if they do differ,
   special handling is needed right now. */
#ifndef REC_SRC_CAPS
#define REC_SRC_CAPS INPUT_SRC_CAPS
#endif

/* Microphone */
#if (REC_SRC_CAPS & SRC_CAP_MIC)
    #define HAVE_MIC_REC
    #define HAVE_MIC_REC_(...) __VA_ARGS__
#else
    #define HAVE_MIC_REC_(...)
#endif
/* Line In */
#if (REC_SRC_CAPS & SRC_CAP_LINEIN)
    #define HAVE_LINE_REC
    #define HAVE_LINE_REC_(...) __VA_ARGS__
#else
    #define HAVE_LINE_REC_(...)
#endif
/* S/PDIF */
#if (REC_SRC_CAPS & SRC_CAP_SPDIF)
    #define HAVE_SPDIF_REC
    #define HAVE_SPDIF_REC_(...) __VA_ARGS__
#else
    #define HAVE_SPDIF_REC_(...)
#endif
/* FM Radio */
#if (REC_SRC_CAPS & SRC_CAP_FMRADIO)
    #define HAVE_FMRADIO_REC
    #define HAVE_FMRADIO_REC_(...) __VA_ARGS__
#else
    #define HAVE_FMRADIO_REC_(...)
#endif

#if REC_SRC_CAPS != 0 && (REC_SRC_CAPS & (REC_SRC_CAPS-1)) != 0
#define HAVE_MULTI_REC_SRC
#endif

#endif /* HAVE_RECORDING */

/* Samplerate config */
#define PCM_SAMPR_CONFIG_ONLY /* no C code */
#include "pcm_sampr.h"
#undef PCM_SAMPR_CONFIG_ONLY

#define PLAY_SAMPR_CAPS (HW_SAMPR_CAPS & (SAMPR_CAP_44 | SAMPR_CAP_48))
/**
 * PLAY_SAMPR_MIN:     The minimum allowable samplerate for global playback.
 *                     Music won't play at a lower rate.
 * PLAY_SAMPR_MAX:     The maximum allowable samplerate for global playback.
 *                     Music won't play at a faster rate.
 * PLAY_SAMPR_DEFAULT: The default samplerate, unless configured otherwise.
 * PLAY_SAMPR_HW_MIN:  The minimum allowable rate for some subsystems such
 *                     as the DSP core. DSP never exceeds *MAX to lessen
 *                     buffer allocation demands and overhead.
 */
#if PLAY_SAMPR_CAPS & (PLAY_SAMPR_CAPS - 1)
#define HAVE_PLAY_FREQ
# define PLAY_SAMPR_MIN     SAMPR_44
# define PLAY_SAMPR_MAX     SAMPR_48
# define PLAY_SAMPR_DEFAULT SAMPR_44
# define PLAY_SAMPR_HW_MIN  HW_SAMPR_MIN
#elif PLAY_SAMPR_CAPS & SAMPR_CAP_44
# define PLAY_SAMPR_MIN     SAMPR_44
# define PLAY_SAMPR_MAX     SAMPR_44
# define PLAY_SAMPR_DEFAULT SAMPR_44
# define PLAY_SAMPR_HW_MIN  HW_SAMPR_MIN
#elif PLAY_SAMPR_CAPS & SAMPR_CAP_48
# define PLAY_SAMPR_MIN     SAMPR_48
# define PLAY_SAMPR_MAX     SAMPR_48
# define PLAY_SAMPR_DEFAULT SAMPR_48
# define PLAY_SAMPR_HW_MIN  HW_SAMPR_MIN
#endif